diff --git a/_build_dependencies.sh b/_build_dependencies.sh index 597b844932..164aa71c48 100644 --- a/_build_dependencies.sh +++ b/_build_dependencies.sh @@ -6,6 +6,6 @@ export NODE_VERSION=16 # Byond Major export BYOND_MAJOR=514 # Byond Minor -export BYOND_MINOR=1569 +export BYOND_MINOR=1585 # Macro Count -export MACRO_COUNT=4 \ No newline at end of file +export MACRO_COUNT=4 diff --git a/code/__defines/belly_modes_vr.dm b/code/__defines/belly_modes_vr.dm index 810f0da00b..c86e66f1c0 100644 --- a/code/__defines/belly_modes_vr.dm +++ b/code/__defines/belly_modes_vr.dm @@ -1,4 +1,5 @@ // Normal digestion modes +#define DM_DEFAULT "Default" // Not a real bellymode, used for handling on 'selective' bellymode prefs. #define DM_HOLD "Hold" #define DM_HOLD_ABSORBED "Hold Absorbed" // Not a real bellymode, used for handling different idle messages for absorbed prey. #define DM_DIGEST "Digest" @@ -10,6 +11,7 @@ #define DM_SIZE_STEAL "Size Steal" #define DM_HEAL "Heal" #define DM_EGG "Encase In Egg" +#define DM_SELECT "Selective" //Addon mode flags #define DM_FLAG_NUMBING 0x1 diff --git a/code/__defines/mobs_vr.dm b/code/__defines/mobs_vr.dm index be17f09c39..51c65f532b 100644 --- a/code/__defines/mobs_vr.dm +++ b/code/__defines/mobs_vr.dm @@ -25,6 +25,7 @@ #define SPECIES_PROTEAN "Protean" #define SPECIES_RAPALA "Rapala" #define SPECIES_SERGAL "Sergal" +#define SPECIES_ALTEVIAN "Altevian" #define SPECIES_SHADEKIN_CREW "Black-Eyed Shadekin" #define SPECIES_VASILISSAN "Vasilissan" #define SPECIES_VULPKANIN "Vulpkanin" diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index f81e48b044..b133acc9ec 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -86,18 +86,15 @@ #define LANGUAGE_ROOTLOCAL "Local Rootspeak" #define LANGUAGE_ROOTGLOBAL "Global Rootspeak" #define LANGUAGE_CULT "Cult" -#define LANGUAGE_OCCULT "Occult" #define LANGUAGE_CHANGELING "Changeling" #define LANGUAGE_VOX "Vox-Pidgin" #define LANGUAGE_TERMINUS "Terminus" -#define LANGUAGE_SKRELLIANFAR "High Skrellian" #define LANGUAGE_MINBUS "Minbus" #define LANGUAGE_EVENT1 "Occursus" #define LANGUAGE_AKHANI "Akhani" #define LANGUAGE_ALAI "Alai" #define LANGUAGE_ZADDAT "Vedahq" #define LANGUAGE_PROMETHEAN "Promethean Biolinguistics" -#define LANGUAGE_BLOB "Chemosense Transmission" #define LANGUAGE_GIBBERISH "Babel" // Language flags. diff --git a/code/__defines/species_languages_vr.dm b/code/__defines/species_languages_vr.dm index 1a5fbdab4c..e8cf9a88b9 100644 --- a/code/__defines/species_languages_vr.dm +++ b/code/__defines/species_languages_vr.dm @@ -1,7 +1,6 @@ #define SPECIES_WHITELIST_SELECTABLE 0x20 // Can select and customize, but not join as #define LANGUAGE_DRUDAKAR "D'Rudak'Ar" -#define LANGUAGE_SLAVIC "Pan-Slavic" #define LANGUAGE_BIRDSONG "Birdsong" #define LANGUAGE_SAGARU "Sagaru" #define LANGUAGE_CANILUNZT "Canilunzt" @@ -10,13 +9,9 @@ #define LANGUAGE_ENOCHIAN "Enochian" #define LANGUAGE_VESPINAE "Vespinae" #define LANGUAGE_SPACER "Spacer" -#define LANGUAGE_CLOWNISH "Coulrian" #define LANGUAGE_TAVAN "Tavan" #define LANGUAGE_ECHOSONG "Echo Song" -#define LANGUAGE_CHIMPANZEE "Chimpanzee" -#define LANGUAGE_NEAERA "Neaera" -#define LANGUAGE_STOK "Stok" -#define LANGUAGE_FARWA "Farwa" +#define LANGUAGE_ANIMAL "Animal" #define LANGUAGE_SHADEKIN "Shadekin Empathy" diff --git a/code/__defines/sprite_sheets.dm b/code/__defines/sprite_sheets.dm index f1572ba69e..06b119a8e3 100644 --- a/code/__defines/sprite_sheets.dm +++ b/code/__defines/sprite_sheets.dm @@ -11,7 +11,8 @@ SPECIES_SERGAL = 'icons/inventory/suit/mob_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/suit/mob_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/suit/mob_vr_altevian.dmi') #define VR_SPECIES_SPRITE_SHEETS_HEAD_MOB list(\ SPECIES_HUMAN = 'icons/inventory/head/mob.dmi',\ SPECIES_TAJ = 'icons/inventory/head/mob_tajaran.dmi',\ @@ -25,7 +26,8 @@ SPECIES_NEVREAN = 'icons/inventory/head/mob_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ -SPECIES_GREY_YW = 'icons/inventory/head/mob_grey.dmi' /*ywedit*/) +SPECIES_ALTEVIAN = 'icons/inventory/head/mob_vr_altevian.dmi',\ +SPECIES_GREY_YW = 'icons/inventory/head/mob_grey.dmi' /* yw edit - shadekin */) #define VR_SPECIES_SPRITE_SHEETS_HANDS_MOB list(\ SPECIES_HUMAN = 'icons/inventory/hands/mob.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/mob_tajaran.dmi',\ @@ -65,7 +67,8 @@ SPECIES_SERGAL = 'icons/inventory/suit/item_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/suit/item_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/suit/item_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/suit/item_vr_altevian.dmi') #define VR_SPECIES_SPRITE_SHEETS_HEAD_ITEM list(\ SPECIES_HUMAN = 'icons/inventory/head/item.dmi',\ SPECIES_TAJ = 'icons/inventory/head/item_tajaran.dmi',\ @@ -78,7 +81,8 @@ SPECIES_SERGAL = 'icons/inventory/head/item_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/head/item_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/head/item_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/head/item_vr_altevian.dmi') #define VR_SPECIES_SPRITE_SHEETS_HANDS_ITEM list(\ SPECIES_HUMAN = 'icons/inventory/hands/item.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/item_tajaran.dmi',\ @@ -119,7 +123,8 @@ SPECIES_SERGAL = 'icons/inventory/suit/mob_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/suit/mob_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/suit/mob_vr_altevian.dmi') #define ALL_VR_SPRITE_SHEETS_HEAD_MOB list(\ SPECIES_HUMAN = 'icons/inventory/head/mob_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/head/mob_vr_tajaran.dmi',\ @@ -133,7 +138,8 @@ SPECIES_NEVREAN = 'icons/inventory/head/mob_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ -SPECIES_GREY_YW = 'icons/inventory/head/mob_grey.dmi' /*ywedit*/) +SPECIES_ALTEVIAN = 'icons/inventory/head/mob_vr_altevian.dmi',\ +SPECIES_GREY_YW = 'icons/inventory/head/mob_grey.dmi' /* yw edit - shadekin */) #define ALL_VR_SPRITE_SHEETS_HANDS_MOB list(\ SPECIES_HUMAN = 'icons/inventory/hands/mob_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/mob_vr_tajaran.dmi',\ @@ -173,7 +179,8 @@ SPECIES_SERGAL = 'icons/inventory/suit/item_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/suit/item_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/suit/item_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/suit/item_vr_altevian.dmi') #define ALL_VR_SPRITE_SHEETS_HEAD_ITEM list(\ SPECIES_HUMAN = 'icons/inventory/head/item_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/head/item_vr_tajaran.dmi',\ @@ -186,7 +193,8 @@ SPECIES_SERGAL = 'icons/inventory/head/item_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/head/item_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/head/item_vr_vulpkanin.dmi') +SPECIES_FENNEC = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ +SPECIES_ALTEVIAN = 'icons/inventory/head/item_vr_altevian.dmi') #define ALL_VR_SPRITE_SHEETS_HANDS_ITEM list(\ SPECIES_HUMAN = 'icons/inventory/hands/item_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/item_vr_tajaran.dmi',\ @@ -212,4 +220,4 @@ SPECIES_SERGAL = 'icons/inventory/feet/item_vr_sergal.dmi',\ SPECIES_NEVREAN = 'icons/inventory/feet/item_vr_sergal.dmi',\ SPECIES_VULPKANIN = 'icons/inventory/feet/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/feet/item_vr_vulpkanin.dmi',\ -SPECIES_FENNEC = 'icons/inventory/feet/item_vr_vulpkanin.dmi') \ No newline at end of file +SPECIES_FENNEC = 'icons/inventory/feet/item_vr_vulpkanin.dmi') diff --git a/code/_global_vars/mobs.dm b/code/_global_vars/mobs.dm index 7e60dc71ea..9e1027bc88 100644 --- a/code/_global_vars/mobs.dm +++ b/code/_global_vars/mobs.dm @@ -1,5 +1,7 @@ GLOBAL_LIST_EMPTY(admins) //all clients whom are admins GLOBAL_PROTECT(admins) +GLOBAL_LIST_EMPTY(mentors) +GLOBAL_PROTECT(mentors) GLOBAL_LIST_EMPTY(deadmins) //all ckeys who have used the de-admin verb. GLOBAL_LIST_EMPTY(stealthminID) GLOBAL_LIST_EMPTY(directory) //all ckeys with associated client diff --git a/code/_helpers/_lists.dm b/code/_helpers/_lists.dm index 85d9472d9a..5631fa8807 100644 --- a/code/_helpers/_lists.dm +++ b/code/_helpers/_lists.dm @@ -53,7 +53,7 @@ // atoms/items/objects can be pretty and whatnot var/atom/A = item if(output_icons && isicon(A.icon) && !ismob(A)) // mobs tend to have unusable icons - item_str += "[bicon(A)] " + item_str += "\icon[A][bicon(A)] " switch(determiners) if(DET_NONE) item_str += A.name if(DET_DEFINITE) item_str += "\the [A]" diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 953df677ab..d7d180d4df 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -65,6 +65,7 @@ var/global/list/classic_vore_sounds = list( "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "Zipper" = 'sound/items/zip.ogg', "None" = null) var/global/list/classic_release_sounds = list( @@ -73,6 +74,7 @@ var/global/list/classic_release_sounds = list( "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "Zipper" = 'sound/items/zip.ogg', "Splatter" = 'sound/effects/splat.ogg', "None" = null ) @@ -95,6 +97,7 @@ var/global/list/fancy_vore_sounds = list( "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "Zipper" = 'sound/items/zip.ogg', "None" = null ) @@ -104,6 +107,7 @@ var/global/list/fancy_release_sounds = list( "Rustle 3 (cloth)" = 'sound/effects/rustle3.ogg', "Rustle 4 (cloth)" = 'sound/effects/rustle4.ogg', "Rustle 5 (cloth)" = 'sound/effects/rustle5.ogg', + "Zipper" = 'sound/items/zip.ogg', "Stomach Move" = 'sound/vore/sunesound/pred/stomachmove.ogg', "Pred Escape" = 'sound/vore/sunesound/pred/escape.ogg', "Splatter" = 'sound/effects/splat.ogg', @@ -232,7 +236,8 @@ var/global/list/edible_trash = list(/obj/item/broken_device, /obj/item/weapon/storage/wallet, /obj/item/weapon/storage/vore_egg, /obj/item/weapon/bikehorn/tinytether, - /obj/item/capture_crystal + /obj/item/capture_crystal, + /obj/item/roulette_ball ) var/global/list/contamination_flavors = list( diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 79f43551e7..daf02d38a2 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -343,8 +343,15 @@ if(!text_tag_cache[tagname]) var/icon/tag = icon(text_tag_icons, tagname) text_tag_cache[tagname] = bicon(tag, TRUE, "text_tag") + if(C.chatOutput.broken) + return "[tagdesc]" return text_tag_cache[tagname] +/proc/create_text_tag_old(var/tagname, var/tagdesc = tagname, var/client/C = null) + if(!(C && C.is_preference_enabled(/datum/client_preference/chat_tags))) + return tagdesc + return "[tagdesc]" + /proc/contains_az09(var/input) for(var/i=1, i<=length(input), i++) var/ascii_char = text2ascii(input,i) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 33398d6a87..84844936c4 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1161,7 +1161,7 @@ var/list/WALLITEMS = list( if(length(temp_col )<2) temp_col = "0[temp_col]" colour += temp_col - return colour + return "#[colour]" /proc/color_square(red, green, blue, hex) var/color = hex ? hex : "#[num2hex(red, 2)][num2hex(green, 2)][num2hex(blue, 2)]" @@ -1178,7 +1178,7 @@ var/mob/dview/dview_mob = new log_error("Had to recreate the dview mob!") dview_mob.loc = center - + dview_mob.see_invisible = invis_flags . = view(range, dview_mob) @@ -1497,7 +1497,7 @@ GLOBAL_REAL_VAR(list/stack_trace_storage) . += new /obj/screen/plane_master/lighting //Lighting system (but different!) . += new /obj/screen/plane_master/o_light_visual //Object lighting (using masks) . += new /obj/screen/plane_master/emissive //Emissive overlays - + . += new /obj/screen/plane_master/ghosts //Ghosts! . += new /obj/screen/plane_master{plane = PLANE_AI_EYE} //AI Eye! diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 03fd9bac74..8954bf45bc 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -19,7 +19,7 @@ /obj/screen/Destroy() master = null return ..() - + /obj/screen/proc/component_click(obj/screen/component_button/component, params) return @@ -46,9 +46,8 @@ object_overlays.Cut() /obj/screen/inventory/proc/add_overlays() - var/mob/user = hud.mymob - - if(hud && user && slot_id) + if(hud && hud.mymob && slot_id) + var/mob/user = hud.mymob var/obj/item/holding = user.get_active_hand() if(!holding || user.get_equipped_item(slot_id)) @@ -619,7 +618,7 @@ var/mob/living/carbon/C = hud.mymob if(C.handcuffed) add_overlay(handcuff_overlay) - + // PIP stuff /obj/screen/component_button var/obj/screen/parent @@ -634,7 +633,7 @@ // Character setup stuff /obj/screen/setup_preview - + var/datum/preferences/pref /obj/screen/setup_preview/Destroy() @@ -704,7 +703,7 @@ * size of the screen. This is not ideal, as filter() is faster, and has * alpha masks, but the alpha masks it has can't be animated, so the 'ping' * mode of this device isn't possible using that technique. - * + * * The markers use that technique, though, so at least there's that. */ /obj/screen/movable/mapper_holder @@ -722,7 +721,7 @@ var/obj/screen/mapper/mask_full/mask_full var/obj/screen/mapper/mask_ping/mask_ping var/obj/screen/mapper/bg/bg - + var/obj/screen/mapper/frame/frame var/obj/screen/mapper/powbutton/powbutton var/obj/screen/mapper/mapbutton/mapbutton @@ -732,7 +731,7 @@ /obj/screen/movable/mapper_holder/Initialize(mapload, newowner) owner = newowner - + mask_full = new(src) // Full white square mask mask_ping = new(src) // Animated 'pinging' mask bg = new(src) // Background color, holds map in vis_contents, uses mult against masks @@ -740,19 +739,19 @@ frame = new(src) // Decorative frame powbutton = new(src) // Clickable button mapbutton = new(src) // Clickable button - + frame.icon_state = initial(frame.icon_state)+owner.hud_frame_hint /** * The vis_contents layout is: this(frame,extras_holder,mask(bg(map))) * bg is set to BLEND_MULTIPLY against the mask to crop it. */ - + mask_full.vis_contents.Add(bg) mask_ping.vis_contents.Add(bg) frame.vis_contents.Add(powbutton,mapbutton) vis_contents.Add(frame) - + /obj/screen/movable/mapper_holder/Destroy() qdel_null(mask_full) @@ -772,12 +771,12 @@ running = TRUE if(ping) vis_contents.Add(mask_ping) - else + else vis_contents.Add(mask_full) bg.vis_contents.Cut() bg.vis_contents.Add(map) - + if(extras && !extras_holder) extras_holder = extras vis_contents += extras_holder @@ -790,7 +789,7 @@ off() else on() - + /obj/screen/movable/mapper_holder/proc/mapClick() if(owner) if(running) @@ -818,7 +817,7 @@ mouse_opacity = 0 var/obj/screen/movable/mapper_holder/parent -/obj/screen/mapper/New() +/obj/screen/mapper/New() ..() parent = loc @@ -921,10 +920,10 @@ var/static/list/ammo_screen_loc_list = list(ui_ammo_hud1, ui_ammo_hud2, ui_ammo_hud3 ,ui_ammo_hud4) /obj/screen/ammo/proc/add_hud(var/mob/living/user, var/obj/item/weapon/gun/G) - + if(!user?.client) return - + if(!G) CRASH("/obj/screen/ammo/proc/add_hud() has been called from [src] without the required param of G") diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index 3839853567..acfa32d52f 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -126,6 +126,7 @@ var/const/MED_I_FREQ = 1485 var/const/SEC_I_FREQ = 1475 var/const/TALON_FREQ = 1363 //VOREStation Add +var/const/CSN_FREQ = 1365 //VOREStation Add var/list/radiochannels = list( "Common" = PUB_FREQ, @@ -145,7 +146,8 @@ var/list/radiochannels = list( "Entertainment" = ENT_FREQ, "Medical(I)" = MED_I_FREQ, "Security(I)" = SEC_I_FREQ, - "Talon" = TALON_FREQ //VOREStation Add + "Talon" = TALON_FREQ, //VOREStation Add + "Casino" = CSN_FREQ, ) // Hey, if anyone ever needs to update tgui/packages/tgui/constants.js with new radio channels @@ -155,7 +157,7 @@ var/list/radiochannels = list( set category = "Generate TGUI Radio Constants" var/list/channel_info = list() - + for(var/i in RADIO_LOW_FREQ to RADIO_HIGH_FREQ) for(var/key in radiochannels) if(i == radiochannels[key]) @@ -192,7 +194,7 @@ var/list/ANTAG_FREQS = list(SYND_FREQ, RAID_FREQ) //Department channels, arranged lexically var/list/DEPT_FREQS = list(AI_FREQ, COMM_FREQ, ENG_FREQ, ENT_FREQ, MED_FREQ, SEC_FREQ, SCI_FREQ, SRV_FREQ, SUP_FREQ) -var/list/OFFMAP_FREQS = list(TALON_FREQ) //VOREStation Add +var/list/OFFMAP_FREQS = list(TALON_FREQ, CSN_FREQ) //VOREStation Add /proc/frequency_span_class(var/frequency) // Antags! diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index d5e2908def..2ce82beb42 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -79,6 +79,7 @@ var/list/gamemode_cache = list() var/static/kick_inactive = 0 //force disconnect for inactive players after this many minutes, if non-0 var/static/show_mods = 0 var/static/show_devs = 0 + var/static/show_mentors = 0 var/static/show_event_managers = 0 var/static/mods_can_tempban = 0 var/static/mods_can_job_tempban = 0 @@ -217,7 +218,7 @@ var/list/gamemode_cache = list() var/python_path = "" //Path to the python executable. Defaults to "python" on windows and "/usr/bin/env python2" on unix var/use_lib_nudge = 0 //Use the C library nudge instead of the python nudge. var/use_overmap = 0 - + var/static/list/engine_map = list("Supermatter Engine", "Edison's Bane") // Comma separated list of engines to choose from. Blank means fully random. // Event settings @@ -290,7 +291,7 @@ var/list/gamemode_cache = list() // How strictly the loadout enforces object species whitelists var/loadout_whitelist = LOADOUT_WHITELIST_LAX - + var/static/vgs_access_identifier = null // VOREStation Edit - VGS var/static/vgs_server_port = null // VOREStation Edit - VGS @@ -656,6 +657,9 @@ var/list/gamemode_cache = list() if("show_devs") config.show_devs = 1 + if("show_mentors") + config.show_mentors = 1 + if("show_event_managers") config.show_event_managers = 1 @@ -959,10 +963,10 @@ var/list/gamemode_cache = list() if("suggested_byond_version") config.suggested_byond_version = text2num(value) - + if("suggested_byond_build") config.suggested_byond_build = text2num(value) - + // VOREStation Edit Start - Can't be in _vr file because it is loaded too late. if("vgs_access_identifier") config.vgs_access_identifier = value diff --git a/code/datums/uplink/badassery.dm b/code/datums/uplink/badassery.dm index 8addcc3f64..8208894af4 100644 --- a/code/datums/uplink/badassery.dm +++ b/code/datums/uplink/badassery.dm @@ -91,4 +91,4 @@ var/obj/structure/largecrate/C = /obj/structure/largecrate icon = image(initial(C.icon), initial(C.icon_state)) - return "[bicon(icon)]" \ No newline at end of file + return "\icon[icon][bicon(icon)]" \ No newline at end of file diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm index 7156f807bd..7fcdbd8dc2 100644 --- a/code/datums/uplink/uplink_items.dm +++ b/code/datums/uplink/uplink_items.dm @@ -130,7 +130,7 @@ var/datum/uplink/uplink = new() /datum/uplink_item/item/log_icon() var/obj/I = path - return "[bicon(I)]" + return "\icon[I][bicon(I)]" /******************************** * * @@ -144,7 +144,7 @@ var/datum/uplink/uplink = new() if(!default_abstract_uplink_icon) default_abstract_uplink_icon = image('icons/obj/pda.dmi', "pda-syn") - return "[bicon(default_abstract_uplink_icon)]" + return "\icon[default_abstract_uplink_icon][bicon(default_abstract_uplink_icon)]" /* * Crated goods. diff --git a/code/datums/wires/camera.dm b/code/datums/wires/camera.dm index 571e2a22e6..c572ad8d27 100644 --- a/code/datums/wires/camera.dm +++ b/code/datums/wires/camera.dm @@ -57,7 +57,7 @@ C.light_disabled = !C.light_disabled if(WIRE_CAM_ALARM) - C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*") + C.visible_message("\icon[C][bicon(C)] *beep*", "\icon[C][bicon(C)] *beep*") ..() /datum/wires/camera/proc/CanDeconstruct() diff --git a/code/datums/wires/jukebox.dm b/code/datums/wires/jukebox.dm index 125bbd78ef..cec0f4d370 100644 --- a/code/datums/wires/jukebox.dm +++ b/code/datums/wires/jukebox.dm @@ -31,16 +31,16 @@ var/obj/machinery/media/jukebox/A = holder switch(wire) if(WIRE_MAIN_POWER1) - holder.visible_message("[bicon(holder)] The power light flickers.") + holder.visible_message("\icon[holder][bicon(holder)] The power light flickers.") A.shock(usr, 90) if(WIRE_JUKEBOX_HACK) - holder.visible_message("[bicon(holder)] The parental guidance light flickers.") + holder.visible_message("\icon[holder][bicon(holder)] The parental guidance light flickers.") if(WIRE_REVERSE) - holder.visible_message("[bicon(holder)] The data light blinks ominously.") + holder.visible_message("\icon[holder][bicon(holder)] The data light blinks ominously.") if(WIRE_SPEEDUP) - holder.visible_message("[bicon(holder)] The speakers squeaks.") + holder.visible_message("\icon[holder][bicon(holder)] The speakers squeaks.") if(WIRE_SPEEDDOWN) - holder.visible_message("[bicon(holder)] The speakers rumble.") + holder.visible_message("\icon[holder][bicon(holder)] The speakers rumble.") if(WIRE_START) A.StartPlaying() if(WIRE_STOP) diff --git a/code/datums/wires/mines.dm b/code/datums/wires/mines.dm index 5e757ad16c..55ea718c3f 100644 --- a/code/datums/wires/mines.dm +++ b/code/datums/wires/mines.dm @@ -21,15 +21,15 @@ switch(wire) if(WIRE_EXPLODE) - C.visible_message("[bicon(C)] *BEEE-*", "[bicon(C)] *BEEE-*") + C.visible_message("\icon[C][bicon(C)] *BEEE-*", "\icon[C][bicon(C)] *BEEE-*") C.explode() if(WIRE_EXPLODE_DELAY) - C.visible_message("[bicon(C)] *BEEE-*", "[bicon(C)] *BEEE-*") + C.visible_message("\icon[C][bicon(C)] *BEEE-*", "\icon[C][bicon(C)] *BEEE-*") C.explode() if(WIRE_DISARM) - C.visible_message("[bicon(C)] *click!*", "[bicon(C)] *click!*") + C.visible_message("\icon[C][bicon(C)] *click!*", "\icon[C][bicon(C)] *click!*") var/obj/effect/mine/MI = new C.mineitemtype(get_turf(C)) if(C.trap) @@ -41,15 +41,15 @@ qdel(C) if(WIRE_BADDISARM) - C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*") + C.visible_message("\icon[C][bicon(C)] *BEEPBEEPBEEP*", "\icon[C][bicon(C)] *BEEPBEEPBEEP*") spawn(20) C.explode() if(WIRE_TRAP) - C.visible_message("[bicon(C)] *click!*", "[bicon(C)] *click!*") + C.visible_message("\icon[C][bicon(C)] *click!*", "\icon[C][bicon(C)] *click!*") if(mend) - C.visible_message("[bicon(C)] - The mine recalibrates[C.camo_net ? ", revealing \the [C.trap] inside." : "."]") + C.visible_message("\icon[C][bicon(C)] - The mine recalibrates[C.camo_net ? ", revealing \the [C.trap] inside." : "."]") C.alpha = 255 @@ -61,21 +61,21 @@ return switch(wire) if(WIRE_EXPLODE) - C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*") + C.visible_message("\icon[C][bicon(C)] *beep*", "\icon[C][bicon(C)] *beep*") if(WIRE_EXPLODE_DELAY) - C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*") + C.visible_message("\icon[C][bicon(C)] *BEEPBEEPBEEP*", "\icon[C][bicon(C)] *BEEPBEEPBEEP*") spawn(20) C.explode() if(WIRE_DISARM) - C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*") + C.visible_message("\icon[C][bicon(C)] *ping*", "\icon[C][bicon(C)] *ping*") if(WIRE_BADDISARM) - C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*") + C.visible_message("\icon[C][bicon(C)] *ping*", "\icon[C][bicon(C)] *ping*") if(WIRE_TRAP) - C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*") + C.visible_message("\icon[C][bicon(C)] *ping*", "\icon[C][bicon(C)] *ping*") ..() diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm index e3fd198b3b..1787039622 100644 --- a/code/datums/wires/particle_accelerator.dm +++ b/code/datums/wires/particle_accelerator.dm @@ -26,7 +26,7 @@ C.interface_control = !C.interface_control if(WIRE_PARTICLE_POWER_LIMIT) - C.visible_message("[bicon(C)][C] makes a large whirring noise.") + C.visible_message("\icon[C][bicon(C)][C] makes a large whirring noise.") /datum/wires/particle_acc/control_box/on_cut(wire, mend) var/obj/machinery/particle_accelerator/control_box/C = holder diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index c6217291cd..2ac7d383b7 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1,2654 +1,2655 @@ -/* - -### This file contains a list of all the areas in your station. Format is as follows: - -/area/CATEGORY/OR/DESCRIPTOR/NAME (you can make as many subdivisions as you want) - name = "NICE NAME" (not required but makes things really nice) - icon = "ICON FILENAME" (defaults to areas.dmi) - icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) - requires_power = 0 (defaults to 1) - music = "music/music.ogg" (defaults to "music/music.ogg") - -NOTE: there are two lists of areas in the end of this file: centcom and station itself. Please maintain these lists valid. --rastaf0 - -*/ - -/*-----------------------------------------------------------------------------*/ - -///////// -//SPACE// -///////// - -/area/space - name = "\improper Space" - icon_state = "space" - requires_power = 1 - always_unpowered = 1 - dynamic_lighting = 0 - has_gravity = 0 - power_light = 0 - power_equip = 0 - power_environ = 0 - ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg','sound/ambience/space/space_serithi.ogg','sound/music/freefallin.mid') - base_turf = /turf/space - ambience = AMBIENCE_SPACE - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/space/atmosalert() - return - -/area/space/fire_alert() - return - -/area/space/fire_reset() - return - -/area/space/readyalert() - return - -/area/space/partyalert() - return - -/area/arrival - requires_power = 0 - -/area/arrival/start - name = "\improper Arrival Area" - icon_state = "start" - -/area/admin - name = "\improper Admin room" - icon_state = "start" - - - -//////////// -//SHUTTLES// -//////////// -//Shuttles only need starting area, movement is handled by landmarks -//All shuttles should now be under shuttle since we have smooth-wall code. - -/area/shuttle - requires_power = 0 - flags = RAD_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT - sound_env = SMALL_ENCLOSED - base_turf = /turf/space - forbid_events = TRUE - -/area/shuttle/arrival - name = "\improper Arrival Shuttle" - ambience = AMBIENCE_ARRIVALS - -/area/shuttle/supply - name = "\improper Supply Shuttle" - icon_state = "shuttle2" - -/area/shuttle/escape - name = "\improper Emergency Shuttle" - music = "music/escape.ogg" - -/area/shuttle/escape_pod1 - name = "\improper Escape Pod One" - music = "music/escape.ogg" - -/area/shuttle/escape_pod2 - name = "\improper Escape Pod Two" - music = "music/escape.ogg" - -/area/shuttle/escape_pod3 - name = "\improper Escape Pod Three" - music = "music/escape.ogg" - -/area/shuttle/escape_pod4 - name = "\improper Escape Pod Four" - music = "music/escape.ogg" - -/area/shuttle/escape_pod5 - name = "\improper Escape Pod Five" - music = "music/escape.ogg" - -/area/shuttle/escape_pod6 - name = "\improper Escape Pod Six" - music = "music/escape.ogg" - -/area/shuttle/large_escape_pod1 - name = "\improper Large Escape Pod One" - music = "music/escape.ogg" - -/area/shuttle/large_escape_pod2 - name = "\improper Large Escape Pod Two" - music = "music/escape.ogg" - -/area/shuttle/cryo - name = "\improper Cryogenic Storage" - -/area/shuttle/mining - name = "\improper Mining Elevator" - music = "music/escape.ogg" - dynamic_lighting = 0 - base_turf = /turf/simulated/mineral/floor/ignore_mapgen - -/area/shuttle/transport1/centcom - icon_state = "shuttle" - name = "\improper Transport Shuttle CentCom" - -/area/shuttle/transport1/station - icon_state = "shuttle" - name = "\improper Transport Shuttle" - -/area/shuttle/alien/base - icon_state = "shuttle" - name = "\improper Alien Shuttle Base" - requires_power = 1 - -/area/shuttle/alien/mine - icon_state = "shuttle" - name = "\improper Alien Shuttle Mine" - requires_power = 1 - -/area/shuttle/prison/ - name = "\improper Prison Shuttle" - -/area/shuttle/prison/station - icon_state = "shuttle" - -/area/shuttle/prison/prison - icon_state = "shuttle2" - -/area/shuttle/specops/centcom - name = "\improper Special Ops Shuttle" - icon_state = "shuttlered" - -/area/shuttle/specops/station - name = "\improper Special Ops Shuttle" - icon_state = "shuttlered2" - -/area/shuttle/syndicate_elite/mothership - name = "\improper Merc Elite Shuttle" - icon_state = "shuttlered" - -/area/shuttle/syndicate_elite/station - name = "\improper Merc Elite Shuttle" - icon_state = "shuttlered2" - -/area/shuttle/administration/centcom - name = "Centcom Large Bay (AS)" //VOREStation Edit - icon_state = "shuttlered" - -/area/shuttle/administration/station - name = "NSB Adephagia (AS)" //VOREStation Edit - icon_state = "shuttlered2" - -/area/shuttle/trade - name = "\improper Trade Station" - icon_state = "red" - dynamic_lighting = 0 - -/area/shuttle/trade/centcom - name = "\improper Trade Shuttle CentCom" - icon_state = "shuttlered" - -/area/shuttle/trade/station - name = "\improper Cryogaia Commerce Pad" - icon_state = "shuttlered" - -/area/shuttle/thunderdome - name = "honk" - -/area/shuttle/research - name = "\improper Research Elevator" - music = "music/escape.ogg" - dynamic_lighting = 0 - base_turf = /turf/simulated/mineral/floor/ignore_mapgen - -/area/airtunnel1/ // referenced in airtunnel.dm:759 - -/area/dummy/ // Referenced in engine.dm:261 - -// === end remove - -/area/alien - name = "\improper Alien base" - icon_state = "yellow" - requires_power = 0 - flags = AREA_FLAG_IS_NOT_PERSISTENT - -// CENTCOM - -/area/centcom - name = "\improper CentCom" - icon_state = "centcom" - requires_power = 0 - dynamic_lighting = 0 - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/centcom/control - name = "\improper CentCom Control" - -/area/centcom/evac - name = "\improper CentCom Emergency Shuttle" - -/area/centcom/suppy - name = "\improper CentCom Supply Shuttle" - -/area/centcom/ferry - name = "\improper CentCom Transport Shuttle" - -/area/centcom/shuttle - name = "\improper CentCom Administration Shuttle" - -/area/centcom/test - name = "\improper CentCom Testing Facility" - -/area/centcom/living - name = "\improper CentCom Living Quarters" - -/area/centcom/specops - name = "\improper CentCom Special Ops" - -/area/centcom/creed - name = "Creed's Office" - -/area/centcom/holding - name = "\improper Holding Facility" - -/area/centcom/terminal - name = "\improper Docking Terminal" - icon_state = "centcom_dock" - ambience = AMBIENCE_ARRIVALS - -/area/centcom/tram - name = "\improper Tram Station" - ambience = AMBIENCE_ARRIVALS - -/area/centcom/security - name = "\improper CentCom Security" - icon_state = "centcom_security" - -/area/centcom/medical - name = "\improper CentCom Medical" - icon_state = "centcom_medical" - -/area/centcom/command - name = "\improper CentCom Command" //Central Command Command totally isn't RAS Syndrome in action. - icon_state = "centcom_command" - ambience = AMBIENCE_HIGHSEC - -/area/centcom/main_hall - name = "\improper Main Hallway" - icon_state = "centcom_hallway1" - -/area/centcom/bar - name = "\improper CentCom Bar" - icon_state = "centcom_crew" - -/area/centcom/restaurant - name = "\improper CentCom Restaurant" - icon_state = "centcom_crew" - -/area/centcom/bathroom - name = "\improper CentCom Bathroom" - icon_state = "centcom_crew" - sound_env = SMALL_ENCLOSED - -//SYNDICATES - -/area/syndicate_mothership - name = "\improper Mercenary Base" - icon_state = "syndie-ship" - requires_power = 0 - dynamic_lighting = 0 - ambience = AMBIENCE_HIGHSEC - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/syndicate_mothership/control - name = "\improper Mercenary Control Room" - icon_state = "syndie-control" - -/area/syndicate_mothership/elite_squad - name = "\improper Elite Mercenary Squad" - icon_state = "syndie-elite" - -//EXTRA - -/area/asteroid // -- TLE - name = "\improper Moon" - icon_state = "asteroid" - requires_power = 0 - sound_env = ASTEROID - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/asteroid/cave // -- TLE - name = "\improper Moon - Underground" - icon_state = "cave" - requires_power = 0 - sound_env = ASTEROID - -/area/asteroid/artifactroom - name = "\improper Moon - Artifact" - icon_state = "cave" - sound_env = SMALL_ENCLOSED - -/area/planet/clown - name = "\improper Clown Planet" - icon_state = "honk" - requires_power = 0 - -/area/tdome - name = "\improper Thunderdome" - icon_state = "thunder" - requires_power = 0 - dynamic_lighting = 0 - sound_env = SOUND_ENVIRONMENT_ARENA - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/tdome/tdome1 - name = "\improper Thunderdome (Team 1)" - icon_state = "green" - -/area/tdome/tdome2 - name = "\improper Thunderdome (Team 2)" - icon_state = "yellow" - -/area/tdome/tdomeadmin - name = "\improper Thunderdome (Admin.)" - icon_state = "purple" - -/area/tdome/tdomeobserve - name = "\improper Thunderdome (Observer.)" - icon_state = "purple" - -/area/virtual_reality - name = "Virtual Reality" - icon_state = "Virtual_Reality" - dynamic_lighting = 0 - requires_power = 0 - flags = AREA_FLAG_IS_NOT_PERSISTENT - -//ENEMY - -//names are used -/area/syndicate_station - name = "\improper Independent Station" - icon_state = "yellow" - requires_power = 0 - flags = RAD_SHIELDED - base_turf = /turf/space - ambience = AMBIENCE_HIGHSEC - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/syndicate_station/start - name = "\improper Mercenary Forward Operating Base" - icon_state = "yellow" - -/area/syndicate_station/southwest - name = "\improper wilderness cave" - icon_state = "southwest" - -/area/syndicate_station/northwest - name = "\improper wilderness forest" - icon_state = "northwest" - -/area/syndicate_station/northeast - name = "\improper wilderness forest" - icon_state = "northeast" - -/area/syndicate_station/southeast - name = "\improper wilderness caves" - icon_state = "southeast" - -/area/syndicate_station/north - name = "\improper outpost grounds" - icon_state = "north" - -/area/syndicate_station/south - name = "\improper the wilderness" - icon_state = "south" - -/area/syndicate_station/commssat - name = "\improper south of the communication satellite" - icon_state = "south" - -/area/syndicate_station/mining - name = "\improper northeast of the mining station" - icon_state = "north" - -/area/syndicate_station/arrivals_dock - name = "\improper docked with station" - icon_state = "shuttle" - -/area/syndicate_station/maint_dock - name = "\improper docked with station" - icon_state = "shuttle" - -/area/syndicate_station/transit - name = "\improper hyperspace" - icon_state = "shuttle" - -/area/wizard_station - name = "\improper Wizard's Den" - icon_state = "yellow" - requires_power = 0 - dynamic_lighting = 0 - ambience = AMBIENCE_OTHERWORLDLY - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/skipjack_station - name = "\improper Skipjack" - icon_state = "yellow" - requires_power = 0 - base_turf = /turf/space - ambience = AMBIENCE_HIGHSEC - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/skipjack_station/start - name = "\improper Skipjack" - icon_state = "yellow" - -/area/skipjack_station/transit - name = "\improper hyperspace" - icon_state = "shuttle" - -/area/skipjack_station/southwest_solars - name = "\The wilderness" - icon_state = "southwest" - -/area/skipjack_station/northwest_solars - name = "\improper The wilderness" - icon_state = "northwest" - -/area/skipjack_station/northeast_solars - name = "\improper The wilderness" - icon_state = "northeast" - -/area/skipjack_station/southeast_solars - name = "\improper wilderness caves" - icon_state = "southeast" - -/area/skipjack_station/mining - name = "\improper south of mining station" - icon_state = "north" - -//PRISON -/area/prison - name = "\improper Prison Station" - icon_state = "brig" - ambience = AMBIENCE_HIGHSEC - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/prison/arrival_airlock - name = "\improper Prison Station Airlock" - icon_state = "green" - requires_power = 0 - -/area/prison/control - name = "\improper Prison Security Checkpoint" - icon_state = "security" - -/area/prison/crew_quarters - name = "\improper Prison Security Quarters" - icon_state = "security" - -/area/prison/rec_room - name = "\improper Prison Rec Room" - icon_state = "green" - -/area/prison/closet - name = "\improper Prison Supply Closet" - icon_state = "dk_yellow" - -/area/prison/hallway/fore - name = "\improper Prison Fore Hallway" - icon_state = "yellow" - -/area/prison/hallway/aft - name = "\improper Prison Aft Hallway" - icon_state = "yellow" - -/area/prison/hallway/port - name = "\improper Prison Port Hallway" - icon_state = "yellow" - -/area/prison/hallway/starboard - name = "\improper Prison Starboard Hallway" - icon_state = "yellow" - -/area/prison/morgue - name = "\improper Prison Morgue" - icon_state = "morgue" - -/area/prison/medical_research - name = "\improper Prison Genetic Research" - icon_state = "medresearch" - -/area/prison/medical - name = "\improper Prison Medbay" - icon_state = "medbay" - -/area/prison/solar - name = "\improper Prison Solar Array" - icon_state = "storage" - requires_power = 0 - -/area/prison/podbay - name = "\improper Prison Podbay" - icon_state = "dk_yellow" - -/area/prison/solar_control - name = "\improper Prison Solar Array Control" - icon_state = "dk_yellow" - -/area/prison/solitary - name = "Solitary Confinement" - icon_state = "brig" - -/area/prison/cell_block/A - name = "Prison Cell Block A" - icon_state = "brig" - -/area/prison/cell_block/B - name = "Prison Cell Block B" - icon_state = "brig" - -/area/prison/cell_block/C - name = "Prison Cell Block C" - icon_state = "brig" - -//////////////////// -//SPACE STATION 13// -//////////////////// - -/area - ambience = AMBIENCE_GENERIC - -//Maintenance - -/area/maintenance - flags = RAD_SHIELDED - sound_env = TUNNEL_ENCLOSED - turf_initializer = new /datum/turf_initializer/maintenance() - ambience = AMBIENCE_MAINTENANCE - -/area/maintenance/aft - name = "Aft Maintenance" - icon_state = "amaint" - -/area/maintenance/fore - name = "Fore Maintenance" - icon_state = "fmaint" - -/area/maintenance/starboard - name = "Starboard Maintenance" - icon_state = "smaint" - -/area/maintenance/port - name = "Port Maintenance" - icon_state = "pmaint" - -/area/maintenance/atmos_control - name = "Atmospherics Maintenance" - icon_state = "fpmaint" - -/area/maintenance/fpmaint - name = "Fore Port Maintenance - 1" - icon_state = "fpmaint" - -/area/maintenance/fpmaint2 - name = "Fore Port Maintenance - 2" - icon_state = "fpmaint" - -/area/maintenance/fsmaint - name = "Fore Starboard Maintenance - 1" - icon_state = "fsmaint" - -/area/maintenance/fsmaint2 - name = "Fore Starboard Maintenance - 2" - icon_state = "fsmaint" - -/area/maintenance/asmaint - name = "Aft Starboard Maintenance" - icon_state = "asmaint" - -/area/maintenance/engi_shuttle - name = "Engineering Shuttle Access" - icon_state = "maint_e_shuttle" - -/area/maintenance/engi_engine - name = "Engine Maintenance" - icon_state = "maint_engine" - -/area/maintenance/asmaint2 - name = "Science Maintenance" - icon_state = "asmaint" - -/area/maintenance/apmaint - name = "Cargo Engineering Maintenance" - icon_state = "apmaint" - -/area/maintenance/maintcentral - name = "Bridge Maintenance" - icon_state = "maintcentral" - -/area/maintenance/arrivals - name = "Arrivals Maintenance" - icon_state = "maint_arrivals" - -/area/maintenance/bar - name = "Bar Maintenance" - icon_state = "maint_bar" - -/area/maintenance/central - name = "Central Maintenance" - icon_state = "maint_central" - -/area/maintenance/cafe_dock - name = "Cafeteria Dock Maintenance" - icon_state = "maint_cafe_dock" - -/area/maintenance/cargo - name = "Cargo Maintenance" - icon_state = "maint_cargo" - -/area/maintenance/cargo_research - name = "Cargo Research Maintenance" - icon_state = "maint_cargo_research" - -/area/maintenance/chapel - name = "Chapel Maintenance" - icon_state = "maint_chapel" - -/area/maintenance/disposal - name = "Waste Disposal" - icon_state = "disposal" - flags = AREA_FLAG_IS_NOT_PERSISTENT //If trash items got this far, they can be safely deleted. - -/area/maintenance/engineering - name = "Engineering Maintenance" - icon_state = "maint_engineering" - -/area/maintenance/engineering/pumpstation - name = "Engineering Pump Station" - icon_state = "maint_pumpstation" - -/area/maintenance/evahallway - name = "\improper EVA Maintenance" - icon_state = "maint_eva" - -/area/maintenance/dormitory - name = "Dormitory Maintenance" - icon_state = "maint_dormitory" - -/area/maintenance/holodeck - name = "Holodeck Maintenance" - icon_state = "maint_holodeck" - -/area/maintenance/incinerator - name = "\improper Incinerator" - icon_state = "disposal" - -/area/maintenance/library - name = "Library Maintenance" - icon_state = "maint_library" - -/area/maintenance/locker - name = "Locker Room Maintenance" - icon_state = "maint_locker" - -/area/maintenance/medbay - name = "Medbay Maintenance" - icon_state = "maint_medbay" - -/area/maintenance/medbay_aft - name = "Medbay Maintenance - Aft" - icon_state = "maint_medbay_aft" - -/area/maintenance/medbay_fore - name = "Medbay Maintenance - Fore" - icon_state = "maint_medbay_fore" - -/area/maintenance/pool - name = "Pool Maintenance" - icon_state = "maint_pool" - -/area/maintenance/research - name = "Research Maintenance" - icon_state = "maint_research" - -/area/maintenance/research_port - name = "Research Maintenance - Port" - icon_state = "maint_research_port" - -/area/maintenance/research_starboard - name = "Research Maintenance - Starboard" - icon_state = "maint_research_starboard" - -/area/maintenance/research_starboard - name = "Research Maintenance - Starboard" - icon_state = "maint_research_cargo" - -/area/maintenance/research_shuttle - name = "Research Shuttle Dock Maintenance" - icon_state = "maint_research_shuttle" - -/area/maintenance/security_port - name = "Security Maintenance - Port" - icon_state = "maint_security_port" - -/area/maintenance/security_starboard - name = "Security Maintenance - Starboard" - icon_state = "maint_security_starboard" - -/area/maintenance/storage - name = "Atmospherics" - icon_state = "green" - -/area/maintenance/tool_storage - name = "Tool Storage Maintenance" - icon_state = "maint_tool_storage" - - -// SUBSTATIONS (Subtype of maint, that should let them serve as shielded area during radstorm) - -/area/maintenance/substation - name = "Substation" - icon_state = "substation" - sound_env = SMALL_ENCLOSED - ambience = AMBIENCE_SUBSTATION - -/area/maintenance/substation/engineering // Probably will be connected to engineering SMES room, as wires cannot be crossed properly without them sharing powernets. - name = "Engineering Substation" - -// No longer used: -/area/maintenance/substation/medical_science // Medbay and Science. Each has it's own separated machinery, but it originates from the same room. - name = "Medical Research Substation" - -/area/maintenance/substation/medical // Medbay - name = "Medical Substation" - -/area/maintenance/substation/research // Research - name = "Research Substation" - -/area/maintenance/substation/cafeteria_dock // Hydro, kitchen, docks, hotel - name = "Cafeteria Dock Substation" - -/area/maintenance/substation/civilian // Dorms, Lockerroom, Pool - name = "Civilian Substation" - -/area/maintenance/substation/civilian_east // Bar, kitchen, dorms, ... - name = "Civilian East Substation" - -/area/maintenance/substation/civilian_west // Cargo, PTS, locker room, probably arrivals, ...) - name = "Civilian West Substation" - -/area/maintenance/substation/cargo // Cargo - name = "Cargo Substation" - -/area/maintenance/substation/command // AI and central cluster. This one will be between HoP office and meeting room (probably). - name = "Command Substation" - -/area/maintenance/substation/dock // Bar, docks, hotel - name = "Dock Substation" - -/area/maintenance/substation/security // Security, Brig, Permabrig, etc. - name = "Security Substation" - -//Hallway - -/area/hallway/primary/ - sound_env = LARGE_ENCLOSED - ambience = AMBIENCE_GENERIC - -/area/hallway/primary/fore - name = "\improper Fore Primary Hallway" - icon_state = "hallF" - -/area/hallway/primary/starboard - name = "\improper Starboard Primary Hallway" - icon_state = "hallS" - -/area/hallway/primary/aft - name = "\improper Aft Primary Hallway" - icon_state = "hallA" - -/area/hallway/primary/port - name = "\improper Port Primary Hallway" - icon_state = "hallP" - -/area/hallway/primary/central_one - name = "\improper Central Primary Hallway - Fore" - icon_state = "hallC1" - -/area/hallway/primary/central_two - name = "\improper Central Primary Hallway - Starboard" - icon_state = "hallC2" - -/area/hallway/primary/central_three - name = "\improper Central Primary Hallway - Aft" - icon_state = "hallC3" - -/area/hallway/primary/central_four - name = "\improper Central Primary Hallway - Port" - icon_state = "hallC4" - -/area/hallway/secondary/exit - name = "\improper Escape Shuttle Hallway" - icon_state = "escape" - -/area/hallway/secondary/construction - name = "\improper Construction Area" - icon_state = "construction" - -/area/hallway/secondary/entry - forbid_events = TRUE - -/area/hallway/secondary/entry/fore - name = "\improper Shuttle Dock Hallway - Mid" - icon_state = "entry_1" - -/area/hallway/secondary/entry/port - name = "\improper Shuttle Dock Hallway - Port" - icon_state = "entry_2" - -/area/hallway/secondary/entry/starboard - name = "\improper Shuttle Dock Hallway - Starboard" - icon_state = "entry_3" - -/area/hallway/secondary/entry/aft - name = "\improper Shuttle Dock Hallway - Aft" - icon_state = "entry_4" - -/area/hallway/secondary/entry/D1 - name = "\improper Shuttle Dock Hallway - Dock One" - icon_state = "entry_D1" - base_turf = /turf/space - -/area/hallway/secondary/entry/D2 - name = "\improper Shuttle Dock Hallway - Dock Two" - icon_state = "entry_D2" - base_turf = /turf/space - -/area/hallway/secondary/entry/D2/arrivals - name = "\improper Shuttle Dock Hallway - Dock Two" - icon_state = "entry_D2" - base_turf = /turf/space - requires_power = 0 - -/area/hallway/secondary/entry/D3 - name = "\improper Shuttle Dock Hallway - Dock Three" - icon_state = "entry_D3" - base_turf = /turf/space - -/area/hallway/secondary/entry/D4 - name = "\improper Shuttle Dock Hallway - Dock Four" - icon_state = "entry_D4" - -/area/hallway/secondary/entry/docking_lounge - name = "\improper Docking Lounge" - icon_state = "docking_lounge" - -/area/hallway/secondary/escape/dock_escape_pod_hallway_port - name = "\improper Dock Escape Pod Hallway Port" - icon_state = "dock_escape_pod_hallway_port" - -/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard - name = "\improper Dock Escape Pod Hallway Starboard" - icon_state = "dock_escape_pod_hallway_starboard" - -/area/hallway/secondary/escape/fore_port_escape_pod_hallway - name = "\improper Fore Port Escape Pod Hallway" - icon_state = "fore_port_escape_pod_hallway" - -/area/hallway/secondary/escape/fore_escape_pod_hallway - name = "\improper Fore Escape Pod Hallway" - icon_state = "fore_escape_pod_hallway" - -/area/hallway/secondary/escape/medical_escape_pod_hallway - name = "\improper Medical Escape Pod Hallway" - icon_state = "medical_escape_pod_hallway" - -/area/hallway/secondary/cargo_hallway - name = "\improper Cargo Hallway" - icon_state = "cargo_hallway" - -/area/hallway/secondary/civilian_hallway_aft - name = "\improper Civilian Hallway Aft" - icon_state = "aft_civilian_hallway" - -/area/hallway/secondary/civilian_hallway_fore - name = "\improper Civilian Hallway Fore" - icon_state = "fore_civilian_hallway" - -/area/hallway/secondary/civilian_hallway_mid - name = "\improper Civilian Hallway Mid" - icon_state = "mid_civilian_hallway" - -/area/hallway/secondary/chapel_hallway - name = "\improper Chapel Hallway" - icon_state = "chapel_hallway" - -/area/hallway/secondary/cryostorage_hallway - name = "\improper Cryostorage Hallway" - icon_state = "cryostorage_hallway" - -/area/hallway/secondary/docking_hallway - name = "\improper Docking Hallway" - icon_state = "docking_hallway" - -/area/hallway/secondary/docking_hallway2 - name = "\improper Secondary Docking Hallway" - icon_state = "docking_hallway" - -/area/hallway/secondary/engineering_hallway - name = "\improper Engineering Primary Hallway" - icon_state = "engineering_primary_hallway" - -/area/hallway/secondary/eva_hallway - name = "\improper EVA Hallway" - icon_state = "eva_hallway" - -/area/hallway/secondary/medical_emergency_hallway - name = "\improper Medical Emergency Hallway" - icon_state = "medical_emergency_hallway" - -//Command - -/area/bridge - name = "\improper Bridge" - icon_state = "bridge" - music = "signal" - -/area/bridge_hallway - name = "\improper Bridge Hallway" - icon_state = "bridge" - -/area/bridge/meeting_room - name = "\improper Heads of Staff Meeting Room" - icon_state = "bridge" - music = null - sound_env = MEDIUM_SOFTFLOOR - -/area/crew_quarters/captain - name = "\improper Command - Site Manager's Office" - icon_state = "captain" - sound_env = MEDIUM_SOFTFLOOR - -/area/crew_quarters/heads/hop - name = "\improper Command - HoP's Office" - icon_state = "head_quarters" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/crew_quarters/heads/hor - name = "\improper Research - RD's Office" - icon_state = "head_quarters" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/crew_quarters/heads/chief - name = "\improper Engineering - CE's Office" - icon_state = "head_quarters" - -/area/crew_quarters/heads/hos - name = "\improper Security - HoS' Office" - icon_state = "head_quarters" - -/area/crew_quarters/heads/cmo - name = "\improper Medbay - CMO's Office" - icon_state = "head_quarters" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/crew_quarters/courtroom - name = "\improper Courtroom" - icon_state = "courtroom" - -/area/mint - name = "\improper Mint" - icon_state = "green" - -/area/comms - name = "\improper Communications Relay" - icon_state = "tcomsatcham" - -/area/server - name = "\improper Research Server Room" - icon_state = "server" - -//Civilian - -/area/crew_quarters - name = "\improper Dormitories" - icon_state = "Sleep" - ambience = AMBIENCE_GENERIC - forbid_events = TRUE - -/area/crew_quarters/toilet - name = "\improper Dormitory Toilets" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/sleep - name = "\improper Dormitories" - icon_state = "Sleep" - flags = RAD_SHIELDED - -/area/crew_quarters/sleep/Apartment_A1 - name = "\improper Apartment A1" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A2 - name = "\improper Apartment A2" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A3 - name = "\improper Apartment A3" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A4 - name = "\improper Apartment A4" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A5 - name = "\improper Apartment A5" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A6 - name = "\improper Apartment A6" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A7 - name = "\improper Apartment A7`" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_A8 - name = "\improper Apartment A8" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_B1 - name = "\improper Apartment B1" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_B2 - name = "\improper Apartment B2" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Apartment_B3 - name = "\improper Apartment B3" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_1 - name = "\improper Dormitory Room 1" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_2 - name = "\improper Dormitory Room 2" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_3 - name = "\improper Dormitory Room 3" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_4 - name = "\improper Dormitory Room 4" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_5 - name = "\improper Dormitory Room 5" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_6 - name = "\improper Dormitory Room 6" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_7 - name = "\improper Dormitory Room 7" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_8 - name = "\improper Dormitory Room 8" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_9 - name = "\improper Dormitory Room 9" - icon_state = "Sleep" - -/area/crew_quarters/sleep/Dorm_10 - name = "\improper Dormitory Room 10" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_1 - name = "\improper Visitor Room 1" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_2 - name = "\improper Visitor Room 2" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_3 - name = "\improper Visitor Room 3" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_4 - name = "\improper Visitor Room 4" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_5 - name = "\improper Visitor Room 5" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_6 - name = "\improper Visitor Room 6" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_7 - name = "\improper Visitor Room 7" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_8 - name = "\improper Visitor Room 8" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_9 - name = "\improper Visitor Room 9" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_10 - name = "\improper Visitor Room 10" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_11 - name = "\improper Visitor Room 11" - icon_state = "Sleep" - -/area/crew_quarters/sleep/vistor_room_12 - name = "\improper Visitor Room 12" - icon_state = "Sleep" - -/area/crew_quarters/sleep/engi_wash - name = "\improper Engineering Washroom" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/sleep/bedrooms - name = "\improper Dormitory Bedroom One" - icon_state = "Sleep" - sound_env = SMALL_SOFTFLOOR - -/area/crew_quarters/sleep/cryo - name = "\improper Cryogenic Storage" - icon_state = "Sleep" - -/area/crew_quarters/sleep/elevator - name = "\improper Main Elevator" - icon_state = "Sleep" - -/area/crew_quarters/sleep_male - name = "\improper Male Dorm" - icon_state = "Sleep" - -/area/crew_quarters/sleep_male/toilet_male - name = "\improper Male Toilets" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/sleep_female - name = "\improper Female Dorm" - icon_state = "Sleep" - -/area/crew_quarters/sleep_female/toilet_female - name = "\improper Female Toilets" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/locker - name = "\improper Locker Room" - icon_state = "locker" - -/area/crew_quarters/locker/locker_toilet - name = "\improper Locker Toilets" - icon_state = "toilet" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/fitness - name = "\improper Fitness Room" - icon_state = "fitness" - -/area/crew_quarters/longue_area - name = "\improper Lounge" //VOREStation Edit - Muh speeling. - icon_state = "recreation_area" - -/area/crew_quarters/recreation_area - name = "\improper Recreation Area" - icon_state = "recreation_area" - -/area/crew_quarters/recreation_area_hallway - name = "\improper Recreation Area Hallway" - icon_state = "recreation_area_hallway" - -/area/crew_quarters/recreation_area_restroom - name = "\improper Recreation Area Restroom" - icon_state = "recreation_area_restroom" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/pool - name = "\improper Pool" - icon_state = "pool" - -/area/crew_quarters/cafeteria - name = "\improper Cafeteria" - icon_state = "cafeteria" - -/area/crew_quarters/coffee_shop - name = "\improper Coffee Shop" - icon_state = "coffee_shop" - -/area/crew_quarters/kitchen - name = "\improper Kitchen" - icon_state = "kitchen" - -/area/crew_quarters/bar - name = "\improper Bar" - icon_state = "bar" - sound_env = LARGE_SOFTFLOOR - -/area/crew_quarters/barrestroom - name = "\improper Cafeteria Restroom" - icon_state = "bar" - sound_env = SMALL_ENCLOSED - -/area/crew_quarters/theatre - name = "\improper Theatre" - icon_state = "Theatre" - sound_env = LARGE_SOFTFLOOR - -/area/crew_quarters/visitor_lodging - name = "\improper Visitor Lodging" - icon_state = "visitor_lodging" - -/area/crew_quarters/visitor_dining - name = "\improper Visitor Dining" - icon_state = "visitor_dinning" - -/area/crew_quarters/visitor_laundry - name = "\improper Visitor Laundry" - icon_state = "visitor_laundry" - -/area/library - name = "\improper Library" - icon_state = "library" - sound_env = LARGE_SOFTFLOOR - lightswitch = 0 // VOREStation Edit - We like dark libraries - -/area/library_conference_room - name = "\improper Library Conference Room" - icon_state = "library_conference_room" - -/area/chapel - ambience = AMBIENCE_CHAPEL - -/area/chapel/main - name = "\improper Chapel" - icon_state = "chapel" - sound_env = LARGE_ENCLOSED - -/area/chapel/office - name = "\improper Chapel Office" - icon_state = "chapeloffice" - -/area/chapel/chapel_morgue - name = "\improper Chapel Morgue" - icon_state = "chapel_morgue" - -/area/lawoffice - name = "\improper Internal Affairs" - icon_state = "law" - -/area/holodeck_control - name = "\improper Holodeck Control" - icon_state = "holodeck_control" - -/area/vacant/vacant_shop - name = "\improper Vacant Shop" - icon_state = "vacant_shop" - -/area/vacant/vacant_site - name = "\improper Vacant Site" - icon_state = "vacant_site" - -/area/vacant/vacant_site2 - name = "\improper Abandoned Locker Room" - icon_state = "vacant_site" - -/area/holodeck - name = "\improper Holodeck" - icon_state = "Holodeck" - dynamic_lighting = 0 - sound_env = LARGE_ENCLOSED - forbid_events = TRUE - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/holodeck/alphadeck - name = "\improper Holodeck Alpha" - -/area/holodeck/source_plating - name = "\improper Holodeck - Off" - -/area/holodeck/source_emptycourt - name = "\improper Holodeck - Empty Court" - sound_env = SOUND_ENVIRONMENT_ARENA - -/area/holodeck/source_boxingcourt - name = "\improper Holodeck - Boxing Court" - sound_env = SOUND_ENVIRONMENT_ARENA - -/area/holodeck/source_basketball - name = "\improper Holodeck - Basketball Court" - sound_env = SOUND_ENVIRONMENT_ARENA - -/area/holodeck/source_thunderdomecourt - name = "\improper Holodeck - Thunderdome Court" - requires_power = 0 - sound_env = SOUND_ENVIRONMENT_ARENA - -/area/holodeck/source_courtroom - name = "\improper Holodeck - Courtroom" - sound_env = SOUND_ENVIRONMENT_AUDITORIUM - -/area/holodeck/source_beach - name = "\improper Holodeck - Beach" - sound_env = SOUND_ENVIRONMENT_PLAIN - -/area/holodeck/source_burntest - name = "\improper Holodeck - Atmospheric Burn Test" - -/area/holodeck/source_wildlife - name = "\improper Holodeck - Wildlife Simulation" - -/area/holodeck/source_meetinghall - name = "\improper Holodeck - Meeting Hall" - sound_env = SOUND_ENVIRONMENT_AUDITORIUM - -/area/holodeck/source_theatre - name = "\improper Holodeck - Theatre" - sound_env = SOUND_ENVIRONMENT_CONCERT_HALL - -/area/holodeck/source_picnicarea - name = "\improper Holodeck - Picnic Area" - sound_env = SOUND_ENVIRONMENT_PLAIN - -/area/holodeck/source_snowfield - name = "\improper Holodeck - Snow Field" - sound_env = SOUND_ENVIRONMENT_FOREST - -/area/holodeck/source_desert - name = "\improper Holodeck - Desert" - sound_env = SOUND_ENVIRONMENT_PLAIN - -/area/holodeck/source_space - name = "\improper Holodeck - Space" - has_gravity = 0 - sound_env = SPACE - -/area/holodeck/source_chess - name = "\improper Holodeck - Chessboard" - - -//Engineering - -/area/engineering/ - name = "\improper Engineering" - icon_state = "engineering" - ambience = AMBIENCE_ENGINEERING - -/area/engineering/atmos - name = "\improper Atmospherics" - icon_state = "atmos" - sound_env = LARGE_ENCLOSED - ambience = AMBIENCE_ATMOS - -/area/engineering/atmos/monitoring - name = "\improper Atmospherics Monitoring Room" - icon_state = "atmos_monitoring" - sound_env = STANDARD_STATION - -/area/engineering/atmos/storage - name = "\improper Atmospherics Storage" - icon_state = "atmos_storage" - sound_env = SMALL_ENCLOSED - -/area/engineering/drone_fabrication - name = "\improper Engineering Drone Fabrication" - icon_state = "drone_fab" - sound_env = SMALL_ENCLOSED - -/area/engineering/engine_smes - name = "\improper Engineering SMES" - icon_state = "engine_smes" - sound_env = SMALL_ENCLOSED - -/area/engineering/engine_room - name = "\improper Engine Room" - icon_state = "engine" - sound_env = LARGE_ENCLOSED - forbid_events = TRUE - -/area/engineering/engine_airlock - name = "\improper Engine Room Airlock" - icon_state = "engine" - -/area/engineering/engine_monitoring - name = "\improper Engine Monitoring Room" - icon_state = "engine_monitoring" - -/area/engineering/engine_waste - name = "\improper Engine Waste Handling" - icon_state = "engine_waste" - -/area/engineering/engineering_monitoring - name = "\improper Engineering Monitoring Room" - icon_state = "engine_monitoring" - -/area/engineering/foyer - name = "\improper Engineering Foyer" - icon_state = "engineering_foyer" - -/area/engineering/storage - name = "\improper Engineering Storage" - icon_state = "engineering_storage" - -/area/engineering/break_room - name = "\improper Engineering Break Room" - icon_state = "engineering_break" - sound_env = MEDIUM_SOFTFLOOR - -/area/engineering/engine_eva - name = "\improper Engine EVA" - icon_state = "engine_eva" - -/area/engineering/locker_room - name = "\improper Engineering Locker Room" - icon_state = "engineering_locker" - -/area/engineering/workshop - name = "\improper Engineering Workshop" - icon_state = "engineering_workshop" - -/area/engineering/aft_hallway - name = "\improper Engineering Aft Hallway" - icon_state = "engineering_aft_hallway" - - -//Solars - -/area/solar - requires_power = 1 - always_unpowered = 1 - dynamic_lighting = 0 - ambience = AMBIENCE_SPACE - -/area/solar/auxport - name = "\improper Fore Port Solar Array" - icon_state = "panelsA" - -/area/solar/auxstarboard - name = "\improper Fore Starboard Solar Array" - icon_state = "panelsA" - -/area/solar/fore - name = "\improper Fore Solar Array" - icon_state = "yellow" - -/area/solar/aft - name = "\improper Aft Solar Array" - icon_state = "aft" - -/area/solar/starboard - name = "\improper Aft Starboard Solar Array" - icon_state = "panelsS" - -/area/solar/port - name = "\improper Aft Port Solar Array" - icon_state = "panelsP" - -/area/maintenance/auxsolarport - name = "Solar Maintenance - Fore Port" - icon_state = "SolarcontrolP" - sound_env = SMALL_ENCLOSED - -/area/maintenance/starboardsolar - name = "Solar Maintenance - Aft Starboard" - icon_state = "SolarcontrolS" - sound_env = SMALL_ENCLOSED - -/area/maintenance/portsolar - name = "Solar Maintenance - Aft Port" - icon_state = "SolarcontrolP" - sound_env = SMALL_ENCLOSED - -/area/maintenance/auxsolarstarboard - name = "Solar Maintenance - Fore Starboard" - icon_state = "SolarcontrolS" - sound_env = SMALL_ENCLOSED - -/area/maintenance/foresolar - name = "Solar Maintenance - Fore" - icon_state = "SolarcontrolA" - sound_env = SMALL_ENCLOSED - -/area/assembly/chargebay - name = "\improper Mech Bay" - icon_state = "mechbay" - -/area/assembly/showroom - name = "\improper Robotics Showroom" - icon_state = "showroom" - -/area/assembly/robotics - name = "\improper Robotics Lab" - icon_state = "robotics" - -/area/assembly/assembly_line //Derelict Assembly Line - name = "\improper Assembly Line" - icon_state = "ass_line" - power_equip = 0 - power_light = 0 - power_environ = 0 - -//Teleporter - -/area/teleporter - name = "\improper Teleporter" - icon_state = "teleporter" - music = "signal" - flags = RAD_SHIELDED - -/area/gateway - name = "\improper Gateway" - icon_state = "teleporter" - music = "signal" - -/area/AIsattele - name = "\improper AI Satellite Teleporter Room" - icon_state = "teleporter" - music = "signal" - -//MedBay - -/area/medical/medbay - name = "\improper Medbay Hallway - Port" - icon_state = "medbay" - music = 'sound/ambience/signal.ogg' - -//Medbay is a large area, these additional areas help level out APC load. -/area/medical/medbay2 - name = "\improper Medbay Hallway - Starboard" - icon_state = "medbay2" - music = 'sound/ambience/signal.ogg' - -/area/medical/medbay3 - name = "\improper Medbay Hallway - Fore" - icon_state = "medbay3" - music = 'sound/ambience/signal.ogg' - -/area/medical/medbay4 - name = "\improper Medbay Hallway - Aft" - icon_state = "medbay4" - music = 'sound/ambience/signal.ogg' - -/area/medical/biostorage - name = "\improper Secondary Storage" - icon_state = "medbay2" - music = 'sound/ambience/signal.ogg' - -/area/medical/reception - name = "\improper Medbay Reception" - icon_state = "medbay" - music = 'sound/ambience/signal.ogg' - -/area/medical/medbay_emt_bay - name = "\improper Medical EMT Bay" - icon_state = "medbay_emt_bay" - music = 'sound/ambience/signal.ogg' - -/area/medical/medbay_primary_storage - name = "\improper Medbay Primary Storage" - icon_state = "medbay_primary_storage" - music = 'sound/ambience/signal.ogg' - -/area/medical/psych - name = "\improper Psych Room" - icon_state = "medbay3" - music = 'sound/ambience/signal.ogg' - -/area/crew_quarters/medbreak - name = "\improper Break Room" - icon_state = "medbay3" - music = 'sound/ambience/signal.ogg' - -/area/crew_quarters/medical_restroom - name = "\improper Medbay Restroom" - icon_state = "medbay_restroom" - sound_env = SMALL_ENCLOSED - -/area/medical/patients_rooms - name = "\improper Patient's Rooms" - icon_state = "patients" - -/area/medical/ward - name = "\improper Recovery Ward" - icon_state = "patients" - -/area/medical/patient_a - name = "\improper Patient A" - icon_state = "medbay_patient_room_a" - -/area/medical/patient_b - name = "\improper Patient B" - icon_state = "medbay_patient_room_b" - -/area/medical/patient_c - name = "\improper Patient C" - icon_state = "medbay_patient_room_c" - -/area/medical/patient_d - name = "\improper Patient D" - icon_state = "medbay_patient_room_d" - -/area/medical/patient_e - name = "\improper Patient E" - icon_state = "medbay_patient_room_e" - -/area/medical/patient_wing - name = "\improper Patient Wing" - icon_state = "patients" - -/area/medical/cmostore - name = "\improper Secure Storage" - icon_state = "CMO" - -/area/medical/robotics - name = "\improper Robotics" - icon_state = "medresearch" - -/area/medical/virology - name = "\improper Virology" - icon_state = "virology" - -/area/medical/virologyaccess - name = "\improper Virology Access" - icon_state = "virology" - -/area/medical/morgue - name = "\improper Morgue" - icon_state = "morgue" - -/area/medical/chemistry - name = "\improper Chemistry" - icon_state = "chem" - -/area/medical/surgery - name = "\improper Operating Theatre 1" - icon_state = "surgery" - flags = AREA_FLAG_IS_NOT_PERSISTENT //This WOULD become a filth pit - -/area/medical/surgery2 - name = "\improper Operating Theatre 2" - icon_state = "surgery" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/medical/surgeryobs - name = "\improper Operation Observation Room" - icon_state = "surgery" - -/area/medical/surgeryprep - name = "\improper Pre-Op Prep Room" - icon_state = "surgery" - -/area/medical/surgery_hallway - name = "\improper Surgery Hallway" - icon_state = "surgery_hallway" - -/area/medical/surgery_storage - name = "\improper Surgery Storage" - icon_state = "surgery_storage" - -/area/medical/cryo - name = "\improper Cryogenics" - icon_state = "cryo" - -/area/medical/exam_room - name = "\improper Exam Room" - icon_state = "exam_room" - -/area/medical/genetics - name = "\improper Genetics Lab" - icon_state = "genetics" - -/area/medical/genetics_cloning - name = "\improper Cloning Lab" - icon_state = "cloning" - -/area/medical/sleeper - name = "\improper Emergency Treatment Centre" - icon_state = "exam_room" - flags = AREA_FLAG_IS_NOT_PERSISTENT //Trust me. - -/area/medical/first_aid_station_starboard - name = "\improper Starboard First-Aid Station" - icon_state = "medbay2" - -/area/medical/first_aid_station - name = "\improper Port First-Aid Station" - icon_state = "medbay2" - - - -//Security - -/area/security/main - name = "\improper Security Office" - icon_state = "security" - -/area/security/lobby - name = "\improper Security Lobby" - icon_state = "security" - -/area/security/brig - name = "\improper Security - Brig" - icon_state = "brig" - -/area/security/brig/prison_break() - for(var/obj/structure/closet/secure_closet/brig/temp_closet in src) - temp_closet.locked = 0 - temp_closet.icon_state = "closed_unlocked" - for(var/obj/machinery/door_timer/temp_timer in src) - temp_timer.timer_duration = 1 - ..() - -/area/security/prison - name = "\improper Security - Prison Wing" - icon_state = "sec_prison" - -/area/security/prison/prison_break() - for(var/obj/structure/closet/secure_closet/brig/temp_closet in src) - temp_closet.locked = 0 - temp_closet.icon_state = "closed_unlocked" - for(var/obj/machinery/door_timer/temp_timer in src) - temp_timer.timer_duration = 1 - ..() - -/area/security/warden - name = "\improper Security - Warden's Office" - icon_state = "Warden" - -/area/security/armoury - name = "\improper Security - Armory" - icon_state = "armory" - ambience = AMBIENCE_HIGHSEC - -/area/security/briefing_room - name = "\improper Security - Briefing Room" - icon_state = "brig" - -/area/security/evidence_storage - name = "\improper Security - Equipment Storage" - icon_state = "security_equipment_storage" - -/area/security/evidence_storage - name = "\improper Security - Evidence Storage" - icon_state = "evidence_storage" - -/area/security/interrogation - name = "\improper Security - Interrogation" - icon_state = "interrogation" - -/area/security/riot_control - name = "\improper Security - Riot Control" - icon_state = "riot_control" - -/area/security/detectives_office - name = "\improper Security - Forensic Office" - icon_state = "detective" - sound_env = MEDIUM_SOFTFLOOR - -/area/security/range - name = "\improper Security - Firing Range" - icon_state = "firingrange" - -/area/security/security_aid_station - name = "\improper Security - Security Aid Station" - icon_state = "security_aid_station" - -/area/security/security_bathroom - name = "\improper Security - Restroom" - icon_state = "security_bathroom" - sound_env = SMALL_ENCLOSED - -/area/security/security_cell_hallway - name = "\improper Security - Cell Hallway" - icon_state = "security_cell_hallway" - -/area/security/security_equiptment_storage - name = "\improper Security - Equipment Storage" - icon_state = "security_equip_storage" - -/area/security/security_lockerroom - name = "\improper Security - Locker Room" - icon_state = "security_lockerroom" - -/area/security/security_processing - name = "\improper Security - Security Processing" - icon_state = "security_processing" - -/area/security/tactical - name = "\improper Security - Tactical Equipment" - icon_state = "Tactical" - ambience = AMBIENCE_HIGHSEC - - -/* - New() - ..() - - spawn(10) //let objects set up first - for(var/turf/turfToGrayscale in src) - if(turfToGrayscale.icon) - var/icon/newIcon = icon(turfToGrayscale.icon) - newIcon.GrayScale() - turfToGrayscale.icon = newIcon - for(var/obj/objectToGrayscale in turfToGrayscale) //1 level deep, means tables, apcs, locker, etc, but not locker contents - if(objectToGrayscale.icon) - var/icon/newIcon = icon(objectToGrayscale.icon) - newIcon.GrayScale() - objectToGrayscale.icon = newIcon -*/ - -/area/security/nuke_storage - name = "\improper Vault" - icon_state = "nuke_storage" - ambience = AMBIENCE_HIGHSEC - -/area/security/checkpoint - name = "\improper Security Checkpoint" - icon_state = "checkpoint1" - -/area/security/checkpoint2 - name = "\improper Security - Arrival Checkpoint" - icon_state = "security" - ambience = AMBIENCE_ARRIVALS - -/area/security/checkpoint/supply - name = "Security Post - Cargo Bay" - icon_state = "checkpoint1" - -/area/security/checkpoint/engineering - name = "Security Post - Engineering" - icon_state = "checkpoint1" - -/area/security/checkpoint/medical - name = "Security Post - Medbay" - icon_state = "checkpoint1" - -/area/security/checkpoint/science - name = "Security Post - Science" - icon_state = "checkpoint1" - -/area/security/vacantoffice - name = "\improper Vacant Office" - icon_state = "security" - -/area/security/vacantoffice2 - name = "\improper Vacant Office" - icon_state = "security" - -/area/janitor/ - name = "\improper Custodial Closet" - icon_state = "janitor" - -/area/hydroponics - name = "\improper Hydroponics" - icon_state = "hydro" - -/area/hydroponics/cafegarden - name = "\improper Cafeteria Garden" - icon_state = "cafe_garden" - -/area/hydroponics/garden - name = "\improper Garden" - icon_state = "garden" - -// SUPPLY - -/area/quartermaster - name = "\improper Quartermasters" - icon_state = "quart" - -/area/quartermaster/office - name = "\improper Cargo Office" - icon_state = "quartoffice" - -/area/quartermaster/storage - name = "\improper Cargo Bay" - icon_state = "quartstorage" - sound_env = LARGE_ENCLOSED - -/area/quartermaster/foyer - name = "\improper Cargo Bay Foyer" - icon_state = "quartstorage" - -/area/quartermaster/warehouse - name = "\improper Cargo Warehouse" - icon_state = "quartstorage" - -/area/quartermaster/qm - name = "\improper Cargo - Quartermaster's Office" - icon_state = "quart" - -/area/quartermaster/delivery - name = "\improper Cargo - Delivery Office" - icon_state = "quart" - flags = AREA_FLAG_IS_NOT_PERSISTENT //So trash doesn't pile up too hard. - -/area/quartermaster/miningdock - name = "\improper Cargo Mining Dock" - icon_state = "mining" - - -// SCIENCE - -/area/rnd/research - name = "\improper Research and Development" - icon_state = "research" - -/area/rnd/research_foyer - name = "\improper Research Foyer" - icon_state = "research_foyer" - -/area/rnd/research_foyer_auxiliary - name = "\improper Research Foyer Auxiliary" - icon_state = "research_foyer_aux" - -/area/rnd/research_restroom - name = "\improper Research Restroom" - icon_state = "research_restroom" - sound_env = SMALL_ENCLOSED - -/area/rnd/research_storage - name = "\improper Research Storage" - icon_state = "research_storage" - -/area/rnd/docking - name = "\improper Research Dock" - icon_state = "research_dock" - -/area/rnd/lab - name = "\improper Research Lab" - icon_state = "toxlab" - -/area/rnd/rdoffice - name = "\improper Research Director's Office" - icon_state = "head_quarters" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/rnd/supermatter - name = "\improper Supermatter Lab" - icon_state = "toxlab" - -/area/rnd/xenobiology - name = "\improper Xenobiology Lab" - icon_state = "xeno_lab" - -/area/rnd/xenobiology/hallway - name = "\improper Xenobiology hallway" - icon_state = "xeno_lab" - -/area/rnd/xenobiology/storage - name = "\improper Xenobiology storage" - icon_state = "xeno_lab" - -/area/rnd/xenobiology/xenoflora_storage - name = "\improper Xenoflora Storage" - icon_state = "xeno_f_store" - -/area/rnd/xenobiology/xenoflora - name = "\improper Xenoflora Lab" - icon_state = "xeno_f_lab" - -/area/rnd/storage - name = "\improper Toxins Storage" - icon_state = "toxstorage" - -/area/rnd/test_area - name = "\improper Toxins Test Area" - icon_state = "toxtest" - -/area/rnd/mixing - name = "\improper Toxins Mixing Room" - icon_state = "toxmix" - -/area/rnd/misc_lab - name = "\improper Miscellaneous Research" - icon_state = "toxmisc" - -/area/rnd/workshop - name = "\improper Workshop" - icon_state = "sci_workshop" - -/area/toxins/server - name = "\improper Server Room" - icon_state = "server" - - -//Storage - -/area/storage/tools - name = "Auxiliary Tool Storage" - icon_state = "storage" - -/area/storage/primary - name = "Primary Tool Storage" - icon_state = "primarystorage" - -/area/storage/autolathe - name = "Autolathe Storage" - icon_state = "storage" - -/area/storage/art - name = "Art Supply Storage" - icon_state = "storage" - -/area/storage/auxillary - name = "Auxillary Storage" - icon_state = "auxstorage" - -/area/storage/eva - name = "EVA Storage" - icon_state = "eva" - -/area/storage/secure - name = "Secure Storage" - icon_state = "storage" - -/area/storage/emergency_storage/emergency - name = "Starboard Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency_storage/emergency2 - name = "Port Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency_storage/emergency3 - name = "Central Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency_storage/emergency4 - name = "Civilian Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency_storage/emergency5 - name = "Dock Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency_storage/emergency6 - name = "Cargo Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/tech - name = "Technical Storage" - icon_state = "auxstorage" - -/area/storage/testroom - requires_power = 0 - name = "\improper Test Room" - icon_state = "storage" - -//DJSTATION - -/area/djstation - name = "\improper Listening Post" - icon_state = "LP" - ambience = AMBIENCE_TECH_RUINS - -/area/djstation/solars - name = "\improper Listening Post Solars" - icon_state = "LPS" - ambience = AMBIENCE_TECH_RUINS - -//DERELICT - -/area/derelict - name = "\improper Derelict Station" - icon_state = "storage" - ambience = AMBIENCE_RUINS - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/derelict/hallway/primary - name = "\improper Derelict Primary Hallway" - icon_state = "hallP" - -/area/derelict/hallway/secondary - name = "\improper Derelict Secondary Hallway" - icon_state = "hallS" - -/area/derelict/arrival - name = "\improper Derelict Arrival Centre" - icon_state = "yellow" - -/area/derelict/storage/equipment - name = "Derelict Equipment Storage" - -/area/derelict/storage/storage_access - name = "Derelict Storage Access" - -/area/derelict/storage/engine_storage - name = "Derelict Engine Storage" - icon_state = "green" - -/area/derelict/bridge - name = "\improper Derelict Control Room" - icon_state = "bridge" - -/area/derelict/secret - name = "\improper Derelict Secret Room" - icon_state = "library" - -/area/derelict/bridge/access - name = "Derelict Control Room Access" - icon_state = "auxstorage" - -/area/derelict/bridge/ai_upload - name = "\improper Derelict Computer Core" - icon_state = "ai" - -/area/derelict/solar_control - name = "\improper Derelict Solar Control" - icon_state = "engine" - -/area/derelict/crew_quarters - name = "\improper Derelict Crew Quarters" - icon_state = "fitness" - -/area/derelict/medical - name = "Derelict Medbay" - icon_state = "medbay" - -/area/derelict/medical/morgue - name = "\improper Derelict Morgue" - icon_state = "morgue" - -/area/derelict/medical/chapel - name = "\improper Derelict Chapel" - icon_state = "chapel" - -/area/derelict/teleporter - name = "\improper Derelict Teleporter" - icon_state = "teleporter" - -/area/derelict/eva - name = "Derelict EVA Storage" - icon_state = "eva" - -/area/derelict/ship - name = "\improper Abandoned Ship" - icon_state = "yellow" - -/area/solar/derelict_starboard - name = "\improper Derelict Starboard Solar Array" - icon_state = "panelsS" - -/area/solar/derelict_aft - name = "\improper Derelict Aft Solar Array" - icon_state = "aft" - -/area/derelict/singularity_engine - name = "\improper Derelict Singularity Engine" - icon_state = "engine" - -//HALF-BUILT STATION (REPLACES DERELICT IN BAYCODE, ABOVE IS LEFT FOR DOWNSTREAM) - -/area/shuttle/constructionsite - name = "\improper Construction Site Shuttle" - icon_state = "yellow" - dynamic_lighting = 0 - base_turf = /turf/simulated/mineral/floor/ignore_mapgen - -/area/shuttle/constructionsite/station - name = "\improper Construction Site Shuttle" - -/area/shuttle/constructionsite/site - name = "\improper Construction Site Shuttle" - -/area/constructionsite - name = "\improper Construction Site" - icon_state = "storage" - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/constructionsite/storage - name = "\improper Construction Site Storage Area" - -/area/constructionsite/science - name = "\improper Construction Site Research" - -/area/constructionsite/bridge - name = "\improper Construction Site Bridge" - icon_state = "bridge" - -/area/constructionsite/maintenance - name = "\improper Construction Site Maintenance" - icon_state = "yellow" - -/area/constructionsite/hallway/aft - name = "\improper Construction Site Aft Hallway" - icon_state = "hallP" - -/area/constructionsite/hallway/fore - name = "\improper Construction Site Fore Hallway" - icon_state = "hallS" - -/area/constructionsite/atmospherics - name = "\improper Construction Site Atmospherics" - icon_state = "green" - -/area/constructionsite/medical - name = "\improper Construction Site Medbay" - icon_state = "medbay" - -/area/constructionsite/ai - name = "\improper Construction Computer Core" - icon_state = "ai" - -/area/constructionsite/engineering - name = "\improper Construction Site Engine Bay" - icon_state = "engine" - -/area/solar/constructionsite - name = "\improper Construction Site Solars" - icon_state = "aft" - -/area/constructionsite/teleporter - name = "Construction Site Teleporter" - icon_state = "yellow" - - -//area/constructionsite -// name = "\improper Construction Site Shuttle" - -//area/constructionsite -// name = "\improper Construction Site Shuttle" - - -//Construction - -/area/construction - name = "\improper Engineering Construction Area" - icon_state = "yellow" - -/area/construction/supplyshuttle - name = "\improper Supply Shuttle" - icon_state = "yellow" - -/area/construction/quarters - name = "\improper Engineer's Quarters" - icon_state = "yellow" - -/area/construction/qmaint - name = "Maintenance" - icon_state = "yellow" - -/area/construction/hallway - name = "\improper Hallway" - icon_state = "yellow" - -/area/construction/solars - name = "\improper Solar Panels" - icon_state = "yellow" - -/area/construction/solarscontrol - name = "\improper Solar Panel Control" - icon_state = "yellow" - -/area/construction/Storage - name = "Construction Site Storage" - icon_state = "yellow" - -//AI - -/area/ai_monitored/storage/eva - name = "EVA Storage" - icon_state = "eva" - -/area/ai_monitored/storage/secure - name = "Secure Storage" - icon_state = "storage" - ambience = AMBIENCE_HIGHSEC - -/area/ai_monitored/storage/emergency - name = "Emergency Storage" - icon_state = "storage" - -/area/ai_monitored/storage/emergency/eva - name = "Emergency EVA" - icon_state = "storage" - -/area/ai_upload - name = "\improper AI Upload Chamber" - icon_state = "ai_upload" - ambience = AMBIENCE_AI - -/area/ai_upload_foyer - name = "AI Upload Access" - icon_state = "ai_foyer" - sound_env = SMALL_ENCLOSED - ambience = AMBIENCE_AI - -/area/ai_server_room - name = "Messaging Server Room" - icon_state = "ai_server" - sound_env = SMALL_ENCLOSED - ambience = AMBIENCE_AI - -/area/ai - name = "\improper AI Chamber" - icon_state = "ai_chamber" - ambience = AMBIENCE_AI - -/area/ai_cyborg_station - name = "\improper Cyborg Station" - icon_state = "ai_cyborg" - sound_env = SMALL_ENCLOSED - ambience = AMBIENCE_AI - -/area/aisat - name = "\improper AI Satellite" - icon_state = "ai" - ambience = AMBIENCE_AI - -/area/aisat_interior - name = "\improper AI Satellite" - icon_state = "ai" - ambience = AMBIENCE_AI // The lack of inheritence hurts my soul. - -/area/AIsatextFP - name = "\improper AI Sat Ext" - icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 - ambience = AMBIENCE_AI - -/area/AIsatextFS - name = "\improper AI Sat Ext" - icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 - ambience = AMBIENCE_AI - -/area/AIsatextAS - name = "\improper AI Sat Ext" - icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 - ambience = AMBIENCE_AI - -/area/AIsatextAP - name = "\improper AI Sat Ext" - icon_state = "storage" - luminosity = 1 - dynamic_lighting = 0 - ambience = AMBIENCE_AI - -/area/NewAIMain - name = "\improper AI Main New" - icon_state = "storage" - ambience = AMBIENCE_AI - - - -//Misc - -/area/wreck - ambience = AMBIENCE_RUINS - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/wreck/ai - name = "\improper AI Chamber" - icon_state = "ai" - ambience = AMBIENCE_TECH_RUINS - -/area/wreck/main - name = "\improper Wreck" - icon_state = "storage" - -/area/wreck/engineering - name = "\improper Power Room" - icon_state = "engine" - ambience = AMBIENCE_TECH_RUINS - -/area/wreck/bridge - name = "\improper Bridge" - icon_state = "bridge" - ambience = AMBIENCE_TECH_RUINS - -/area/generic - name = "Unknown" - icon_state = "storage" - - - -// Telecommunications Satellite -/area/tcommsat/ - ambience = AMBIENCE_ENGINEERING - -/area/tcommsat/entrance - name = "\improper Telecomms Teleporter" - icon_state = "tcomsatentrance" - -/area/tcommsat/chamber - name = "\improper Telecomms Central Compartment" - icon_state = "tcomsatcham" - -/area/tcomsat - name = "\improper Telecomms Satellite" - icon_state = "tcomsatlob" - ambience = AMBIENCE_ENGINEERING - -/area/tcomfoyer - name = "\improper Telecomms Foyer" - icon_state = "tcomsatfoyer" - ambience = AMBIENCE_ENGINEERING - -/area/tcomwest - name = "\improper Telecommunications Satellite West Wing" - icon_state = "tcomsatwest" - ambience = AMBIENCE_ENGINEERING - -/area/tcomeast - name = "\improper Telecommunications Satellite East Wing" - icon_state = "tcomsateast" - ambience = AMBIENCE_ENGINEERING - -/area/tcommsat/computer - name = "\improper Telecomms Control Room" - icon_state = "tcomsatcomp" - -/area/tcommsat/lounge - name = "\improper Telecommunications Satellite Lounge" - icon_state = "tcomsatlounge" - -/area/tcommsat/powercontrol - name = "\improper Telecommunications Power Control" - icon_state = "tcomsatwest" - - -// Away Missions -/area/awaymission - name = "\improper Strange Location" - icon_state = "away" - ambience = AMBIENCE_FOREBODING - flags = AREA_FLAG_IS_NOT_PERSISTENT - -/area/awaymission/gateway - name = "\improper Gateway" - icon_state = "teleporter" - music = "signal" - -/area/awaymission/example - name = "\improper Strange Station" - icon_state = "away" - -/area/awaymission/wwmines - name = "\improper Wild West Mines" - icon_state = "away1" - luminosity = 1 - requires_power = 0 - -/area/awaymission/wwgov - name = "\improper Wild West Mansion" - icon_state = "away2" - luminosity = 1 - requires_power = 0 - -/area/awaymission/wwrefine - name = "\improper Wild West Refinery" - icon_state = "away3" - luminosity = 1 - requires_power = 0 - -/area/awaymission/wwvault - name = "\improper Wild West Vault" - icon_state = "away3" - luminosity = 0 - -/area/awaymission/wwvaultdoors - name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power - icon_state = "away2" - requires_power = 0 - luminosity = 0 - -/area/awaymission/desert - name = "Mars" - icon_state = "away" - -/area/awaymission/BMPship1 - name = "\improper Aft Block" - icon_state = "away1" - -/area/awaymission/BMPship2 - name = "\improper Midship Block" - icon_state = "away2" - -/area/awaymission/BMPship3 - name = "\improper Fore Block" - icon_state = "away3" - -/area/awaymission/spacebattle - name = "\improper Space Battle" - icon_state = "away" - requires_power = 0 - -/area/awaymission/spacebattle/cruiser - name = "\improper NanoTrasen Cruiser" - -/area/awaymission/spacebattle/syndicate1 - name = "\improper Syndicate Assault Ship 1" - -/area/awaymission/spacebattle/syndicate2 - name = "\improper Syndicate Assault Ship 2" - -/area/awaymission/spacebattle/syndicate3 - name = "\improper Syndicate Assault Ship 3" - -/area/awaymission/spacebattle/syndicate4 - name = "\improper Syndicate War Sphere 1" - -/area/awaymission/spacebattle/syndicate5 - name = "\improper Syndicate War Sphere 2" - -/area/awaymission/spacebattle/syndicate6 - name = "\improper Syndicate War Sphere 3" - -/area/awaymission/spacebattle/syndicate7 - name = "\improper Syndicate Fighter" - -/area/awaymission/spacebattle/secret - name = "\improper Hidden Chamber" - -/area/awaymission/listeningpost - name = "\improper Listening Post" - icon_state = "away" - requires_power = 0 - -/area/awaymission/beach - name = "Beach" - icon_state = "null" - luminosity = 1 - dynamic_lighting = 0 - requires_power = 0 - -///////////////////////////////////////////////////////////////////// -/* - Lists of areas to be used with is_type_in_list. - Used in gamemodes code at the moment. --rastaf0 -*/ - -// CENTCOM -var/list/centcom_areas = list ( - /area/centcom, - /area/shuttle/escape/centcom, - /area/shuttle/escape_pod1/centcom, - /area/shuttle/escape_pod2/centcom, - /area/shuttle/escape_pod3/centcom, - /area/shuttle/escape_pod5/centcom, - /area/shuttle/transport1/centcom, - /area/shuttle/administration/centcom, - /area/shuttle/specops/centcom, -) - -//SPACE STATION 13 -var/list/the_station_areas = list ( - /area/shuttle/arrival, - /area/shuttle/escape/station, - /area/shuttle/escape_pod1/station, - /area/shuttle/escape_pod2/station, - /area/shuttle/escape_pod3/station, - /area/shuttle/escape_pod5/station, - /area/shuttle/mining/station, - /area/shuttle/transport1/station, - // /area/shuttle/transport2/station, - /area/shuttle/prison/station, - /area/shuttle/administration/station, - /area/shuttle/specops/station, - /area/maintenance, - /area/hallway, - /area/bridge, - /area/crew_quarters, - /area/holodeck, - /area/mint, - /area/library, - /area/chapel, - /area/lawoffice, - /area/engineering, - /area/solar, - /area/assembly, - /area/teleporter, - /area/medical, - /area/security, - /area/quartermaster, - /area/janitor, - /area/hydroponics, - /area/rnd, - /area/storage, - /area/construction, - /area/ai_monitored/storage/eva, - /area/ai_monitored/storage/secure, - /area/ai_monitored/storage/emergency, - /area/ai_upload, - /area/ai_upload_foyer, - /area/ai -) - - - - -/area/beach - name = "Keelin's private beach" - icon_state = "yellow" - luminosity = 1 - dynamic_lighting = 0 +/* + +### This file contains a list of all the areas in your station. Format is as follows: + +/area/CATEGORY/OR/DESCRIPTOR/NAME (you can make as many subdivisions as you want) + name = "NICE NAME" (not required but makes things really nice) + icon = "ICON FILENAME" (defaults to areas.dmi) + icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) + requires_power = 0 (defaults to 1) + music = "music/music.ogg" (defaults to "music/music.ogg") + +NOTE: there are two lists of areas in the end of this file: centcom and station itself. Please maintain these lists valid. --rastaf0 + +*/ + +/*-----------------------------------------------------------------------------*/ + +///////// +//SPACE// +///////// + +/area/space + name = "\improper Space" + icon_state = "space" + requires_power = 1 + always_unpowered = 1 + dynamic_lighting = 0 + has_gravity = 0 + power_light = 0 + power_equip = 0 + power_environ = 0 + ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg','sound/ambience/space/space_serithi.ogg','sound/music/freefallin.mid') + base_turf = /turf/space + ambience = AMBIENCE_SPACE + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/space/atmosalert() + return + +/area/space/fire_alert() + return + +/area/space/fire_reset() + return + +/area/space/readyalert() + return + +/area/space/partyalert() + return + +/area/arrival + requires_power = 0 + +/area/arrival/start + name = "\improper Arrival Area" + icon_state = "start" + +/area/admin + name = "\improper Admin room" + icon_state = "start" + + + +//////////// +//SHUTTLES// +//////////// +//Shuttles only need starting area, movement is handled by landmarks +//All shuttles should now be under shuttle since we have smooth-wall code. + +/area/shuttle + requires_power = 0 + flags = RAD_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT + sound_env = SMALL_ENCLOSED + base_turf = /turf/space + forbid_events = TRUE + +/area/shuttle/arrival + name = "\improper Arrival Shuttle" + ambience = AMBIENCE_ARRIVALS + +/area/shuttle/supply + name = "\improper Supply Shuttle" + icon_state = "shuttle2" + +/area/shuttle/escape + name = "\improper Emergency Shuttle" + music = "music/escape.ogg" + +/area/shuttle/escape_pod1 + name = "\improper Escape Pod One" + music = "music/escape.ogg" + +/area/shuttle/escape_pod2 + name = "\improper Escape Pod Two" + music = "music/escape.ogg" + +/area/shuttle/escape_pod3 + name = "\improper Escape Pod Three" + music = "music/escape.ogg" + +/area/shuttle/escape_pod4 + name = "\improper Escape Pod Four" + music = "music/escape.ogg" + +/area/shuttle/escape_pod5 + name = "\improper Escape Pod Five" + music = "music/escape.ogg" + +/area/shuttle/escape_pod6 + name = "\improper Escape Pod Six" + music = "music/escape.ogg" + +/area/shuttle/large_escape_pod1 + name = "\improper Large Escape Pod One" + music = "music/escape.ogg" + +/area/shuttle/large_escape_pod2 + name = "\improper Large Escape Pod Two" + music = "music/escape.ogg" + +/area/shuttle/cryo + name = "\improper Cryogenic Storage" + +/area/shuttle/mining + name = "\improper Mining Elevator" + music = "music/escape.ogg" + dynamic_lighting = 0 + base_turf = /turf/simulated/mineral/floor/ignore_mapgen + +/area/shuttle/transport1/centcom + icon_state = "shuttle" + name = "\improper Transport Shuttle CentCom" + +/area/shuttle/transport1/station + icon_state = "shuttle" + name = "\improper Transport Shuttle" + +/area/shuttle/alien/base + icon_state = "shuttle" + name = "\improper Alien Shuttle Base" + requires_power = 1 + +/area/shuttle/alien/mine + icon_state = "shuttle" + name = "\improper Alien Shuttle Mine" + requires_power = 1 + +/area/shuttle/prison/ + name = "\improper Prison Shuttle" + +/area/shuttle/prison/station + icon_state = "shuttle" + +/area/shuttle/prison/prison + icon_state = "shuttle2" + +/area/shuttle/specops/centcom + name = "\improper Special Ops Shuttle" + icon_state = "shuttlered" + +/area/shuttle/specops/station + name = "\improper Special Ops Shuttle" + icon_state = "shuttlered2" + +/area/shuttle/syndicate_elite/mothership + name = "\improper Merc Elite Shuttle" + icon_state = "shuttlered" + +/area/shuttle/syndicate_elite/station + name = "\improper Merc Elite Shuttle" + icon_state = "shuttlered2" + +/area/shuttle/administration/centcom + name = "Centcom Large Bay (AS)" //VOREStation Edit + icon_state = "shuttlered" + +/area/shuttle/administration/station + name = "NSB Adephagia (AS)" //VOREStation Edit + icon_state = "shuttlered2" + +/area/shuttle/trade + name = "\improper Trade Station" + icon_state = "red" + dynamic_lighting = 0 + +/area/shuttle/trade/centcom + name = "\improper Trade Shuttle CentCom" + icon_state = "shuttlered" + +/area/shuttle/trade/station + name = "\improper Cryogaia Commerce Pad" + icon_state = "shuttlered" + +/area/shuttle/thunderdome + name = "honk" + +/area/shuttle/research + name = "\improper Research Elevator" + music = "music/escape.ogg" + dynamic_lighting = 0 + base_turf = /turf/simulated/mineral/floor/ignore_mapgen + +/area/airtunnel1/ // referenced in airtunnel.dm:759 + +/area/dummy/ // Referenced in engine.dm:261 + +// === end remove + +/area/alien + name = "\improper Alien base" + icon_state = "yellow" + requires_power = 0 + flags = AREA_FLAG_IS_NOT_PERSISTENT + +// CENTCOM + +/area/centcom + name = "\improper CentCom" + icon_state = "centcom" + requires_power = 0 + dynamic_lighting = 0 + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/centcom/control + name = "\improper CentCom Control" + +/area/centcom/evac + name = "\improper CentCom Emergency Shuttle" + +/area/centcom/suppy + name = "\improper CentCom Supply Shuttle" + +/area/centcom/ferry + name = "\improper CentCom Transport Shuttle" + +/area/centcom/shuttle + name = "\improper CentCom Administration Shuttle" + +/area/centcom/test + name = "\improper CentCom Testing Facility" + +/area/centcom/living + name = "\improper CentCom Living Quarters" + +/area/centcom/specops + name = "\improper CentCom Special Ops" + +/area/centcom/creed + name = "Creed's Office" + +/area/centcom/holding + name = "\improper Holding Facility" + +/area/centcom/terminal + name = "\improper Docking Terminal" + icon_state = "centcom_dock" + ambience = AMBIENCE_ARRIVALS + +/area/centcom/tram + name = "\improper Tram Station" + ambience = AMBIENCE_ARRIVALS + +/area/centcom/security + name = "\improper CentCom Security" + icon_state = "centcom_security" + +/area/centcom/medical + name = "\improper CentCom Medical" + icon_state = "centcom_medical" + +/area/centcom/command + name = "\improper CentCom Command" //Central Command Command totally isn't RAS Syndrome in action. + icon_state = "centcom_command" + ambience = AMBIENCE_HIGHSEC + +/area/centcom/main_hall + name = "\improper Main Hallway" + icon_state = "centcom_hallway1" + +/area/centcom/bar + name = "\improper CentCom Bar" + icon_state = "centcom_crew" + +/area/centcom/restaurant + name = "\improper CentCom Restaurant" + icon_state = "centcom_crew" + +/area/centcom/bathroom + name = "\improper CentCom Bathroom" + icon_state = "centcom_crew" + sound_env = SMALL_ENCLOSED + +//SYNDICATES + +/area/syndicate_mothership + name = "\improper Mercenary Base" + icon_state = "syndie-ship" + requires_power = 0 + dynamic_lighting = 0 + ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/syndicate_mothership/control + name = "\improper Mercenary Control Room" + icon_state = "syndie-control" + +/area/syndicate_mothership/elite_squad + name = "\improper Elite Mercenary Squad" + icon_state = "syndie-elite" + +//EXTRA + +/area/asteroid // -- TLE + name = "\improper Moon" + icon_state = "asteroid" + requires_power = 0 + sound_env = ASTEROID + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/asteroid/cave // -- TLE + name = "\improper Moon - Underground" + icon_state = "cave" + requires_power = 0 + sound_env = ASTEROID + +/area/asteroid/artifactroom + name = "\improper Moon - Artifact" + icon_state = "cave" + sound_env = SMALL_ENCLOSED + +/area/planet/clown + name = "\improper Clown Planet" + icon_state = "honk" + requires_power = 0 + +/area/tdome + name = "\improper Thunderdome" + icon_state = "thunder" + requires_power = 0 + dynamic_lighting = 0 + sound_env = SOUND_ENVIRONMENT_ARENA + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/tdome/tdome1 + name = "\improper Thunderdome (Team 1)" + icon_state = "green" + +/area/tdome/tdome2 + name = "\improper Thunderdome (Team 2)" + icon_state = "yellow" + +/area/tdome/tdomeadmin + name = "\improper Thunderdome (Admin.)" + icon_state = "purple" + +/area/tdome/tdomeobserve + name = "\improper Thunderdome (Observer.)" + icon_state = "purple" + +/area/virtual_reality + name = "Virtual Reality" + icon_state = "Virtual_Reality" + dynamic_lighting = 0 + requires_power = 0 + flags = AREA_FLAG_IS_NOT_PERSISTENT + +//ENEMY + +//names are used +/area/syndicate_station + name = "\improper Independent Station" + icon_state = "yellow" + requires_power = 0 + flags = RAD_SHIELDED + base_turf = /turf/space + ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/syndicate_station/start + name = "\improper Mercenary Forward Operating Base" + icon_state = "yellow" + +/area/syndicate_station/southwest + name = "\improper wilderness cave" + icon_state = "southwest" + +/area/syndicate_station/northwest + name = "\improper wilderness forest" + icon_state = "northwest" + +/area/syndicate_station/northeast + name = "\improper wilderness forest" + icon_state = "northeast" + +/area/syndicate_station/southeast + name = "\improper wilderness caves" + icon_state = "southeast" + +/area/syndicate_station/north + name = "\improper outpost grounds" + icon_state = "north" + +/area/syndicate_station/south + name = "\improper the wilderness" + icon_state = "south" + +/area/syndicate_station/commssat + name = "\improper south of the communication satellite" + icon_state = "south" + +/area/syndicate_station/mining + name = "\improper northeast of the mining station" + icon_state = "north" + +/area/syndicate_station/arrivals_dock + name = "\improper docked with station" + icon_state = "shuttle" + +/area/syndicate_station/maint_dock + name = "\improper docked with station" + icon_state = "shuttle" + +/area/syndicate_station/transit + name = "\improper hyperspace" + icon_state = "shuttle" + +/area/wizard_station + name = "\improper Wizard's Den" + icon_state = "yellow" + requires_power = 0 + dynamic_lighting = 0 + ambience = AMBIENCE_OTHERWORLDLY + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/skipjack_station + name = "\improper Skipjack" + icon_state = "yellow" + requires_power = 0 + base_turf = /turf/space + ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/skipjack_station/start + name = "\improper Skipjack" + icon_state = "yellow" + +/area/skipjack_station/transit + name = "\improper hyperspace" + icon_state = "shuttle" + +/area/skipjack_station/southwest_solars + name = "\The wilderness" + icon_state = "southwest" + +/area/skipjack_station/northwest_solars + name = "\improper The wilderness" + icon_state = "northwest" + +/area/skipjack_station/northeast_solars + name = "\improper The wilderness" + icon_state = "northeast" + +/area/skipjack_station/southeast_solars + name = "\improper wilderness caves" + icon_state = "southeast" + +/area/skipjack_station/mining + name = "\improper south of mining station" + icon_state = "north" + +//PRISON +/area/prison + name = "\improper Prison Station" + icon_state = "brig" + ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/prison/arrival_airlock + name = "\improper Prison Station Airlock" + icon_state = "green" + requires_power = 0 + +/area/prison/control + name = "\improper Prison Security Checkpoint" + icon_state = "security" + +/area/prison/crew_quarters + name = "\improper Prison Security Quarters" + icon_state = "security" + +/area/prison/rec_room + name = "\improper Prison Rec Room" + icon_state = "green" + +/area/prison/closet + name = "\improper Prison Supply Closet" + icon_state = "dk_yellow" + +/area/prison/hallway/fore + name = "\improper Prison Fore Hallway" + icon_state = "yellow" + +/area/prison/hallway/aft + name = "\improper Prison Aft Hallway" + icon_state = "yellow" + +/area/prison/hallway/port + name = "\improper Prison Port Hallway" + icon_state = "yellow" + +/area/prison/hallway/starboard + name = "\improper Prison Starboard Hallway" + icon_state = "yellow" + +/area/prison/morgue + name = "\improper Prison Morgue" + icon_state = "morgue" + +/area/prison/medical_research + name = "\improper Prison Genetic Research" + icon_state = "medresearch" + +/area/prison/medical + name = "\improper Prison Medbay" + icon_state = "medbay" + +/area/prison/solar + name = "\improper Prison Solar Array" + icon_state = "storage" + requires_power = 0 + +/area/prison/podbay + name = "\improper Prison Podbay" + icon_state = "dk_yellow" + +/area/prison/solar_control + name = "\improper Prison Solar Array Control" + icon_state = "dk_yellow" + +/area/prison/solitary + name = "Solitary Confinement" + icon_state = "brig" + +/area/prison/cell_block/A + name = "Prison Cell Block A" + icon_state = "brig" + +/area/prison/cell_block/B + name = "Prison Cell Block B" + icon_state = "brig" + +/area/prison/cell_block/C + name = "Prison Cell Block C" + icon_state = "brig" + +//////////////////// +//SPACE STATION 13// +//////////////////// + +/area + ambience = AMBIENCE_GENERIC + +//Maintenance + +/area/maintenance + flags = RAD_SHIELDED + sound_env = TUNNEL_ENCLOSED + turf_initializer = new /datum/turf_initializer/maintenance() + ambience = AMBIENCE_MAINTENANCE + +/area/maintenance/aft + name = "Aft Maintenance" + icon_state = "amaint" + +/area/maintenance/fore + name = "Fore Maintenance" + icon_state = "fmaint" + +/area/maintenance/starboard + name = "Starboard Maintenance" + icon_state = "smaint" + +/area/maintenance/port + name = "Port Maintenance" + icon_state = "pmaint" + +/area/maintenance/atmos_control + name = "Atmospherics Maintenance" + icon_state = "fpmaint" + +/area/maintenance/fpmaint + name = "Fore Port Maintenance - 1" + icon_state = "fpmaint" + +/area/maintenance/fpmaint2 + name = "Fore Port Maintenance - 2" + icon_state = "fpmaint" + +/area/maintenance/fsmaint + name = "Fore Starboard Maintenance - 1" + icon_state = "fsmaint" + +/area/maintenance/fsmaint2 + name = "Fore Starboard Maintenance - 2" + icon_state = "fsmaint" + +/area/maintenance/asmaint + name = "Aft Starboard Maintenance" + icon_state = "asmaint" + +/area/maintenance/engi_shuttle + name = "Engineering Shuttle Access" + icon_state = "maint_e_shuttle" + +/area/maintenance/engi_engine + name = "Engine Maintenance" + icon_state = "maint_engine" + +/area/maintenance/asmaint2 + name = "Science Maintenance" + icon_state = "asmaint" + +/area/maintenance/apmaint + name = "Cargo Engineering Maintenance" + icon_state = "apmaint" + +/area/maintenance/maintcentral + name = "Bridge Maintenance" + icon_state = "maintcentral" + +/area/maintenance/arrivals + name = "Arrivals Maintenance" + icon_state = "maint_arrivals" + +/area/maintenance/bar + name = "Bar Maintenance" + icon_state = "maint_bar" + +/area/maintenance/central + name = "Central Maintenance" + icon_state = "maint_central" + +/area/maintenance/cafe_dock + name = "Cafeteria Dock Maintenance" + icon_state = "maint_cafe_dock" + +/area/maintenance/cargo + name = "Cargo Maintenance" + icon_state = "maint_cargo" + +/area/maintenance/cargo_research + name = "Cargo Research Maintenance" + icon_state = "maint_cargo_research" + +/area/maintenance/chapel + name = "Chapel Maintenance" + icon_state = "maint_chapel" + +/area/maintenance/disposal + name = "Waste Disposal" + icon_state = "disposal" + flags = AREA_FLAG_IS_NOT_PERSISTENT //If trash items got this far, they can be safely deleted. + +/area/maintenance/engineering + name = "Engineering Maintenance" + icon_state = "maint_engineering" + +/area/maintenance/engineering/pumpstation + name = "Engineering Pump Station" + icon_state = "maint_pumpstation" + +/area/maintenance/evahallway + name = "\improper EVA Maintenance" + icon_state = "maint_eva" + +/area/maintenance/dormitory + name = "Dormitory Maintenance" + icon_state = "maint_dormitory" + +/area/maintenance/holodeck + name = "Holodeck Maintenance" + icon_state = "maint_holodeck" + +/area/maintenance/incinerator + name = "\improper Incinerator" + icon_state = "disposal" + +/area/maintenance/library + name = "Library Maintenance" + icon_state = "maint_library" + +/area/maintenance/locker + name = "Locker Room Maintenance" + icon_state = "maint_locker" + +/area/maintenance/medbay + name = "Medbay Maintenance" + icon_state = "maint_medbay" + +/area/maintenance/medbay_aft + name = "Medbay Maintenance - Aft" + icon_state = "maint_medbay_aft" + +/area/maintenance/medbay_fore + name = "Medbay Maintenance - Fore" + icon_state = "maint_medbay_fore" + +/area/maintenance/pool + name = "Pool Maintenance" + icon_state = "maint_pool" + +/area/maintenance/research + name = "Research Maintenance" + icon_state = "maint_research" + +/area/maintenance/research_port + name = "Research Maintenance - Port" + icon_state = "maint_research_port" + +/area/maintenance/research_starboard + name = "Research Maintenance - Starboard" + icon_state = "maint_research_starboard" + +/area/maintenance/research_starboard + name = "Research Maintenance - Starboard" + icon_state = "maint_research_cargo" + +/area/maintenance/research_shuttle + name = "Research Shuttle Dock Maintenance" + icon_state = "maint_research_shuttle" + +/area/maintenance/security_port + name = "Security Maintenance - Port" + icon_state = "maint_security_port" + +/area/maintenance/security_starboard + name = "Security Maintenance - Starboard" + icon_state = "maint_security_starboard" + +/area/maintenance/storage + name = "Atmospherics" + icon_state = "green" + +/area/maintenance/tool_storage + name = "Tool Storage Maintenance" + icon_state = "maint_tool_storage" + + +// SUBSTATIONS (Subtype of maint, that should let them serve as shielded area during radstorm) + +/area/maintenance/substation + name = "Substation" + icon_state = "substation" + sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_SUBSTATION + +/area/maintenance/substation/engineering // Probably will be connected to engineering SMES room, as wires cannot be crossed properly without them sharing powernets. + name = "Engineering Substation" + +// No longer used: +/area/maintenance/substation/medical_science // Medbay and Science. Each has it's own separated machinery, but it originates from the same room. + name = "Medical Research Substation" + +/area/maintenance/substation/medical // Medbay + name = "Medical Substation" + +/area/maintenance/substation/research // Research + name = "Research Substation" + +/area/maintenance/substation/cafeteria_dock // Hydro, kitchen, docks, hotel + name = "Cafeteria Dock Substation" + +/area/maintenance/substation/civilian // Dorms, Lockerroom, Pool + name = "Civilian Substation" + +/area/maintenance/substation/civilian_east // Bar, kitchen, dorms, ... + name = "Civilian East Substation" + +/area/maintenance/substation/civilian_west // Cargo, PTS, locker room, probably arrivals, ...) + name = "Civilian West Substation" + +/area/maintenance/substation/cargo // Cargo + name = "Cargo Substation" + +/area/maintenance/substation/command // AI and central cluster. This one will be between HoP office and meeting room (probably). + name = "Command Substation" + +/area/maintenance/substation/dock // Bar, docks, hotel + name = "Dock Substation" + +/area/maintenance/substation/security // Security, Brig, Permabrig, etc. + name = "Security Substation" + +//Hallway + +/area/hallway/primary/ + sound_env = LARGE_ENCLOSED + ambience = AMBIENCE_GENERIC + +/area/hallway/primary/fore + name = "\improper Fore Primary Hallway" + icon_state = "hallF" + +/area/hallway/primary/starboard + name = "\improper Starboard Primary Hallway" + icon_state = "hallS" + +/area/hallway/primary/aft + name = "\improper Aft Primary Hallway" + icon_state = "hallA" + +/area/hallway/primary/port + name = "\improper Port Primary Hallway" + icon_state = "hallP" + +/area/hallway/primary/central_one + name = "\improper Central Primary Hallway - Fore" + icon_state = "hallC1" + +/area/hallway/primary/central_two + name = "\improper Central Primary Hallway - Starboard" + icon_state = "hallC2" + +/area/hallway/primary/central_three + name = "\improper Central Primary Hallway - Aft" + icon_state = "hallC3" + +/area/hallway/primary/central_four + name = "\improper Central Primary Hallway - Port" + icon_state = "hallC4" + +/area/hallway/secondary/exit + name = "\improper Escape Shuttle Hallway" + icon_state = "escape" + +/area/hallway/secondary/construction + name = "\improper Construction Area" + icon_state = "construction" + +/area/hallway/secondary/entry + forbid_events = TRUE + +/area/hallway/secondary/entry/fore + name = "\improper Shuttle Dock Hallway - Mid" + icon_state = "entry_1" + +/area/hallway/secondary/entry/port + name = "\improper Shuttle Dock Hallway - Port" + icon_state = "entry_2" + +/area/hallway/secondary/entry/starboard + name = "\improper Shuttle Dock Hallway - Starboard" + icon_state = "entry_3" + +/area/hallway/secondary/entry/aft + name = "\improper Shuttle Dock Hallway - Aft" + icon_state = "entry_4" + +/area/hallway/secondary/entry/D1 + name = "\improper Shuttle Dock Hallway - Dock One" + icon_state = "entry_D1" + base_turf = /turf/space + +/area/hallway/secondary/entry/D2 + name = "\improper Shuttle Dock Hallway - Dock Two" + icon_state = "entry_D2" + base_turf = /turf/space + +/area/hallway/secondary/entry/D2/arrivals + name = "\improper Shuttle Dock Hallway - Dock Two" + icon_state = "entry_D2" + base_turf = /turf/space + requires_power = 0 + +/area/hallway/secondary/entry/D3 + name = "\improper Shuttle Dock Hallway - Dock Three" + icon_state = "entry_D3" + base_turf = /turf/space + +/area/hallway/secondary/entry/D4 + name = "\improper Shuttle Dock Hallway - Dock Four" + icon_state = "entry_D4" + +/area/hallway/secondary/entry/docking_lounge + name = "\improper Docking Lounge" + icon_state = "docking_lounge" + +/area/hallway/secondary/escape/dock_escape_pod_hallway_port + name = "\improper Dock Escape Pod Hallway Port" + icon_state = "dock_escape_pod_hallway_port" + +/area/hallway/secondary/escape/dock_escape_pod_hallway_starboard + name = "\improper Dock Escape Pod Hallway Starboard" + icon_state = "dock_escape_pod_hallway_starboard" + +/area/hallway/secondary/escape/fore_port_escape_pod_hallway + name = "\improper Fore Port Escape Pod Hallway" + icon_state = "fore_port_escape_pod_hallway" + +/area/hallway/secondary/escape/fore_escape_pod_hallway + name = "\improper Fore Escape Pod Hallway" + icon_state = "fore_escape_pod_hallway" + +/area/hallway/secondary/escape/medical_escape_pod_hallway + name = "\improper Medical Escape Pod Hallway" + icon_state = "medical_escape_pod_hallway" + +/area/hallway/secondary/cargo_hallway + name = "\improper Cargo Hallway" + icon_state = "cargo_hallway" + +/area/hallway/secondary/civilian_hallway_aft + name = "\improper Civilian Hallway Aft" + icon_state = "aft_civilian_hallway" + +/area/hallway/secondary/civilian_hallway_fore + name = "\improper Civilian Hallway Fore" + icon_state = "fore_civilian_hallway" + +/area/hallway/secondary/civilian_hallway_mid + name = "\improper Civilian Hallway Mid" + icon_state = "mid_civilian_hallway" + +/area/hallway/secondary/chapel_hallway + name = "\improper Chapel Hallway" + icon_state = "chapel_hallway" + +/area/hallway/secondary/cryostorage_hallway + name = "\improper Cryostorage Hallway" + icon_state = "cryostorage_hallway" + +/area/hallway/secondary/docking_hallway + name = "\improper Docking Hallway" + icon_state = "docking_hallway" + +/area/hallway/secondary/docking_hallway2 + name = "\improper Secondary Docking Hallway" + icon_state = "docking_hallway" + +/area/hallway/secondary/engineering_hallway + name = "\improper Engineering Primary Hallway" + icon_state = "engineering_primary_hallway" + +/area/hallway/secondary/eva_hallway + name = "\improper EVA Hallway" + icon_state = "eva_hallway" + +/area/hallway/secondary/medical_emergency_hallway + name = "\improper Medical Emergency Hallway" + icon_state = "medical_emergency_hallway" + +//Command + +/area/bridge + name = "\improper Bridge" + icon_state = "bridge" + music = "signal" + +/area/bridge_hallway + name = "\improper Bridge Hallway" + icon_state = "bridge" + +/area/bridge/meeting_room + name = "\improper Heads of Staff Meeting Room" + icon_state = "bridge" + music = null + sound_env = MEDIUM_SOFTFLOOR + +/area/crew_quarters/captain + name = "\improper Command - Site Manager's Office" + icon_state = "captain" + sound_env = MEDIUM_SOFTFLOOR + +/area/crew_quarters/heads/hop + name = "\improper Command - HoP's Office" + icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/crew_quarters/heads/hor + name = "\improper Research - RD's Office" + icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/crew_quarters/heads/chief + name = "\improper Engineering - CE's Office" + icon_state = "head_quarters" + +/area/crew_quarters/heads/hos + name = "\improper Security - HoS' Office" + icon_state = "head_quarters" + +/area/crew_quarters/heads/cmo + name = "\improper Medbay - CMO's Office" + icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/crew_quarters/courtroom + name = "\improper Courtroom" + icon_state = "courtroom" + +/area/mint + name = "\improper Mint" + icon_state = "green" + +/area/comms + name = "\improper Communications Relay" + icon_state = "tcomsatcham" + +/area/server + name = "\improper Research Server Room" + icon_state = "server" + +//Civilian + +/area/crew_quarters + name = "\improper Dormitories" + icon_state = "Sleep" + ambience = AMBIENCE_GENERIC + forbid_events = TRUE + forbid_singulo = TRUE + +/area/crew_quarters/toilet + name = "\improper Dormitory Toilets" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/sleep + name = "\improper Dormitories" + icon_state = "Sleep" + flags = RAD_SHIELDED + +/area/crew_quarters/sleep/Apartment_A1 + name = "\improper Apartment A1" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A2 + name = "\improper Apartment A2" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A3 + name = "\improper Apartment A3" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A4 + name = "\improper Apartment A4" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A5 + name = "\improper Apartment A5" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A6 + name = "\improper Apartment A6" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A7 + name = "\improper Apartment A7`" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_A8 + name = "\improper Apartment A8" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_B1 + name = "\improper Apartment B1" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_B2 + name = "\improper Apartment B2" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Apartment_B3 + name = "\improper Apartment B3" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_1 + name = "\improper Dormitory Room 1" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_2 + name = "\improper Dormitory Room 2" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_3 + name = "\improper Dormitory Room 3" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_4 + name = "\improper Dormitory Room 4" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_5 + name = "\improper Dormitory Room 5" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_6 + name = "\improper Dormitory Room 6" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_7 + name = "\improper Dormitory Room 7" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_8 + name = "\improper Dormitory Room 8" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_9 + name = "\improper Dormitory Room 9" + icon_state = "Sleep" + +/area/crew_quarters/sleep/Dorm_10 + name = "\improper Dormitory Room 10" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_1 + name = "\improper Visitor Room 1" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_2 + name = "\improper Visitor Room 2" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_3 + name = "\improper Visitor Room 3" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_4 + name = "\improper Visitor Room 4" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_5 + name = "\improper Visitor Room 5" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_6 + name = "\improper Visitor Room 6" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_7 + name = "\improper Visitor Room 7" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_8 + name = "\improper Visitor Room 8" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_9 + name = "\improper Visitor Room 9" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_10 + name = "\improper Visitor Room 10" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_11 + name = "\improper Visitor Room 11" + icon_state = "Sleep" + +/area/crew_quarters/sleep/vistor_room_12 + name = "\improper Visitor Room 12" + icon_state = "Sleep" + +/area/crew_quarters/sleep/engi_wash + name = "\improper Engineering Washroom" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/sleep/bedrooms + name = "\improper Dormitory Bedroom One" + icon_state = "Sleep" + sound_env = SMALL_SOFTFLOOR + +/area/crew_quarters/sleep/cryo + name = "\improper Cryogenic Storage" + icon_state = "Sleep" + +/area/crew_quarters/sleep/elevator + name = "\improper Main Elevator" + icon_state = "Sleep" + +/area/crew_quarters/sleep_male + name = "\improper Male Dorm" + icon_state = "Sleep" + +/area/crew_quarters/sleep_male/toilet_male + name = "\improper Male Toilets" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/sleep_female + name = "\improper Female Dorm" + icon_state = "Sleep" + +/area/crew_quarters/sleep_female/toilet_female + name = "\improper Female Toilets" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/locker + name = "\improper Locker Room" + icon_state = "locker" + +/area/crew_quarters/locker/locker_toilet + name = "\improper Locker Toilets" + icon_state = "toilet" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/fitness + name = "\improper Fitness Room" + icon_state = "fitness" + +/area/crew_quarters/longue_area + name = "\improper Lounge" //VOREStation Edit - Muh speeling. + icon_state = "recreation_area" + +/area/crew_quarters/recreation_area + name = "\improper Recreation Area" + icon_state = "recreation_area" + +/area/crew_quarters/recreation_area_hallway + name = "\improper Recreation Area Hallway" + icon_state = "recreation_area_hallway" + +/area/crew_quarters/recreation_area_restroom + name = "\improper Recreation Area Restroom" + icon_state = "recreation_area_restroom" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/pool + name = "\improper Pool" + icon_state = "pool" + +/area/crew_quarters/cafeteria + name = "\improper Cafeteria" + icon_state = "cafeteria" + +/area/crew_quarters/coffee_shop + name = "\improper Coffee Shop" + icon_state = "coffee_shop" + +/area/crew_quarters/kitchen + name = "\improper Kitchen" + icon_state = "kitchen" + +/area/crew_quarters/bar + name = "\improper Bar" + icon_state = "bar" + sound_env = LARGE_SOFTFLOOR + +/area/crew_quarters/barrestroom + name = "\improper Cafeteria Restroom" + icon_state = "bar" + sound_env = SMALL_ENCLOSED + +/area/crew_quarters/theatre + name = "\improper Theatre" + icon_state = "Theatre" + sound_env = LARGE_SOFTFLOOR + +/area/crew_quarters/visitor_lodging + name = "\improper Visitor Lodging" + icon_state = "visitor_lodging" + +/area/crew_quarters/visitor_dining + name = "\improper Visitor Dining" + icon_state = "visitor_dinning" + +/area/crew_quarters/visitor_laundry + name = "\improper Visitor Laundry" + icon_state = "visitor_laundry" + +/area/library + name = "\improper Library" + icon_state = "library" + sound_env = LARGE_SOFTFLOOR + lightswitch = 0 // VOREStation Edit - We like dark libraries + +/area/library_conference_room + name = "\improper Library Conference Room" + icon_state = "library_conference_room" + +/area/chapel + ambience = AMBIENCE_CHAPEL + +/area/chapel/main + name = "\improper Chapel" + icon_state = "chapel" + sound_env = LARGE_ENCLOSED + +/area/chapel/office + name = "\improper Chapel Office" + icon_state = "chapeloffice" + +/area/chapel/chapel_morgue + name = "\improper Chapel Morgue" + icon_state = "chapel_morgue" + +/area/lawoffice + name = "\improper Internal Affairs" + icon_state = "law" + +/area/holodeck_control + name = "\improper Holodeck Control" + icon_state = "holodeck_control" + +/area/vacant/vacant_shop + name = "\improper Vacant Shop" + icon_state = "vacant_shop" + +/area/vacant/vacant_site + name = "\improper Vacant Site" + icon_state = "vacant_site" + +/area/vacant/vacant_site2 + name = "\improper Abandoned Locker Room" + icon_state = "vacant_site" + +/area/holodeck + name = "\improper Holodeck" + icon_state = "Holodeck" + dynamic_lighting = 0 + sound_env = LARGE_ENCLOSED + forbid_events = TRUE + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/holodeck/alphadeck + name = "\improper Holodeck Alpha" + +/area/holodeck/source_plating + name = "\improper Holodeck - Off" + +/area/holodeck/source_emptycourt + name = "\improper Holodeck - Empty Court" + sound_env = SOUND_ENVIRONMENT_ARENA + +/area/holodeck/source_boxingcourt + name = "\improper Holodeck - Boxing Court" + sound_env = SOUND_ENVIRONMENT_ARENA + +/area/holodeck/source_basketball + name = "\improper Holodeck - Basketball Court" + sound_env = SOUND_ENVIRONMENT_ARENA + +/area/holodeck/source_thunderdomecourt + name = "\improper Holodeck - Thunderdome Court" + requires_power = 0 + sound_env = SOUND_ENVIRONMENT_ARENA + +/area/holodeck/source_courtroom + name = "\improper Holodeck - Courtroom" + sound_env = SOUND_ENVIRONMENT_AUDITORIUM + +/area/holodeck/source_beach + name = "\improper Holodeck - Beach" + sound_env = SOUND_ENVIRONMENT_PLAIN + +/area/holodeck/source_burntest + name = "\improper Holodeck - Atmospheric Burn Test" + +/area/holodeck/source_wildlife + name = "\improper Holodeck - Wildlife Simulation" + +/area/holodeck/source_meetinghall + name = "\improper Holodeck - Meeting Hall" + sound_env = SOUND_ENVIRONMENT_AUDITORIUM + +/area/holodeck/source_theatre + name = "\improper Holodeck - Theatre" + sound_env = SOUND_ENVIRONMENT_CONCERT_HALL + +/area/holodeck/source_picnicarea + name = "\improper Holodeck - Picnic Area" + sound_env = SOUND_ENVIRONMENT_PLAIN + +/area/holodeck/source_snowfield + name = "\improper Holodeck - Snow Field" + sound_env = SOUND_ENVIRONMENT_FOREST + +/area/holodeck/source_desert + name = "\improper Holodeck - Desert" + sound_env = SOUND_ENVIRONMENT_PLAIN + +/area/holodeck/source_space + name = "\improper Holodeck - Space" + has_gravity = 0 + sound_env = SPACE + +/area/holodeck/source_chess + name = "\improper Holodeck - Chessboard" + + +//Engineering + +/area/engineering/ + name = "\improper Engineering" + icon_state = "engineering" + ambience = AMBIENCE_ENGINEERING + +/area/engineering/atmos + name = "\improper Atmospherics" + icon_state = "atmos" + sound_env = LARGE_ENCLOSED + ambience = AMBIENCE_ATMOS + +/area/engineering/atmos/monitoring + name = "\improper Atmospherics Monitoring Room" + icon_state = "atmos_monitoring" + sound_env = STANDARD_STATION + +/area/engineering/atmos/storage + name = "\improper Atmospherics Storage" + icon_state = "atmos_storage" + sound_env = SMALL_ENCLOSED + +/area/engineering/drone_fabrication + name = "\improper Engineering Drone Fabrication" + icon_state = "drone_fab" + sound_env = SMALL_ENCLOSED + +/area/engineering/engine_smes + name = "\improper Engineering SMES" + icon_state = "engine_smes" + sound_env = SMALL_ENCLOSED + +/area/engineering/engine_room + name = "\improper Engine Room" + icon_state = "engine" + sound_env = LARGE_ENCLOSED + forbid_events = TRUE + +/area/engineering/engine_airlock + name = "\improper Engine Room Airlock" + icon_state = "engine" + +/area/engineering/engine_monitoring + name = "\improper Engine Monitoring Room" + icon_state = "engine_monitoring" + +/area/engineering/engine_waste + name = "\improper Engine Waste Handling" + icon_state = "engine_waste" + +/area/engineering/engineering_monitoring + name = "\improper Engineering Monitoring Room" + icon_state = "engine_monitoring" + +/area/engineering/foyer + name = "\improper Engineering Foyer" + icon_state = "engineering_foyer" + +/area/engineering/storage + name = "\improper Engineering Storage" + icon_state = "engineering_storage" + +/area/engineering/break_room + name = "\improper Engineering Break Room" + icon_state = "engineering_break" + sound_env = MEDIUM_SOFTFLOOR + +/area/engineering/engine_eva + name = "\improper Engine EVA" + icon_state = "engine_eva" + +/area/engineering/locker_room + name = "\improper Engineering Locker Room" + icon_state = "engineering_locker" + +/area/engineering/workshop + name = "\improper Engineering Workshop" + icon_state = "engineering_workshop" + +/area/engineering/aft_hallway + name = "\improper Engineering Aft Hallway" + icon_state = "engineering_aft_hallway" + + +//Solars + +/area/solar + requires_power = 1 + always_unpowered = 1 + dynamic_lighting = 0 + ambience = AMBIENCE_SPACE + +/area/solar/auxport + name = "\improper Fore Port Solar Array" + icon_state = "panelsA" + +/area/solar/auxstarboard + name = "\improper Fore Starboard Solar Array" + icon_state = "panelsA" + +/area/solar/fore + name = "\improper Fore Solar Array" + icon_state = "yellow" + +/area/solar/aft + name = "\improper Aft Solar Array" + icon_state = "aft" + +/area/solar/starboard + name = "\improper Aft Starboard Solar Array" + icon_state = "panelsS" + +/area/solar/port + name = "\improper Aft Port Solar Array" + icon_state = "panelsP" + +/area/maintenance/auxsolarport + name = "Solar Maintenance - Fore Port" + icon_state = "SolarcontrolP" + sound_env = SMALL_ENCLOSED + +/area/maintenance/starboardsolar + name = "Solar Maintenance - Aft Starboard" + icon_state = "SolarcontrolS" + sound_env = SMALL_ENCLOSED + +/area/maintenance/portsolar + name = "Solar Maintenance - Aft Port" + icon_state = "SolarcontrolP" + sound_env = SMALL_ENCLOSED + +/area/maintenance/auxsolarstarboard + name = "Solar Maintenance - Fore Starboard" + icon_state = "SolarcontrolS" + sound_env = SMALL_ENCLOSED + +/area/maintenance/foresolar + name = "Solar Maintenance - Fore" + icon_state = "SolarcontrolA" + sound_env = SMALL_ENCLOSED + +/area/assembly/chargebay + name = "\improper Mech Bay" + icon_state = "mechbay" + +/area/assembly/showroom + name = "\improper Robotics Showroom" + icon_state = "showroom" + +/area/assembly/robotics + name = "\improper Robotics Lab" + icon_state = "robotics" + +/area/assembly/assembly_line //Derelict Assembly Line + name = "\improper Assembly Line" + icon_state = "ass_line" + power_equip = 0 + power_light = 0 + power_environ = 0 + +//Teleporter + +/area/teleporter + name = "\improper Teleporter" + icon_state = "teleporter" + music = "signal" + flags = RAD_SHIELDED + +/area/gateway + name = "\improper Gateway" + icon_state = "teleporter" + music = "signal" + +/area/AIsattele + name = "\improper AI Satellite Teleporter Room" + icon_state = "teleporter" + music = "signal" + +//MedBay + +/area/medical/medbay + name = "\improper Medbay Hallway - Port" + icon_state = "medbay" + music = 'sound/ambience/signal.ogg' + +//Medbay is a large area, these additional areas help level out APC load. +/area/medical/medbay2 + name = "\improper Medbay Hallway - Starboard" + icon_state = "medbay2" + music = 'sound/ambience/signal.ogg' + +/area/medical/medbay3 + name = "\improper Medbay Hallway - Fore" + icon_state = "medbay3" + music = 'sound/ambience/signal.ogg' + +/area/medical/medbay4 + name = "\improper Medbay Hallway - Aft" + icon_state = "medbay4" + music = 'sound/ambience/signal.ogg' + +/area/medical/biostorage + name = "\improper Secondary Storage" + icon_state = "medbay2" + music = 'sound/ambience/signal.ogg' + +/area/medical/reception + name = "\improper Medbay Reception" + icon_state = "medbay" + music = 'sound/ambience/signal.ogg' + +/area/medical/medbay_emt_bay + name = "\improper Medical EMT Bay" + icon_state = "medbay_emt_bay" + music = 'sound/ambience/signal.ogg' + +/area/medical/medbay_primary_storage + name = "\improper Medbay Primary Storage" + icon_state = "medbay_primary_storage" + music = 'sound/ambience/signal.ogg' + +/area/medical/psych + name = "\improper Psych Room" + icon_state = "medbay3" + music = 'sound/ambience/signal.ogg' + +/area/crew_quarters/medbreak + name = "\improper Break Room" + icon_state = "medbay3" + music = 'sound/ambience/signal.ogg' + +/area/crew_quarters/medical_restroom + name = "\improper Medbay Restroom" + icon_state = "medbay_restroom" + sound_env = SMALL_ENCLOSED + +/area/medical/patients_rooms + name = "\improper Patient's Rooms" + icon_state = "patients" + +/area/medical/ward + name = "\improper Recovery Ward" + icon_state = "patients" + +/area/medical/patient_a + name = "\improper Patient A" + icon_state = "medbay_patient_room_a" + +/area/medical/patient_b + name = "\improper Patient B" + icon_state = "medbay_patient_room_b" + +/area/medical/patient_c + name = "\improper Patient C" + icon_state = "medbay_patient_room_c" + +/area/medical/patient_d + name = "\improper Patient D" + icon_state = "medbay_patient_room_d" + +/area/medical/patient_e + name = "\improper Patient E" + icon_state = "medbay_patient_room_e" + +/area/medical/patient_wing + name = "\improper Patient Wing" + icon_state = "patients" + +/area/medical/cmostore + name = "\improper Secure Storage" + icon_state = "CMO" + +/area/medical/robotics + name = "\improper Robotics" + icon_state = "medresearch" + +/area/medical/virology + name = "\improper Virology" + icon_state = "virology" + +/area/medical/virologyaccess + name = "\improper Virology Access" + icon_state = "virology" + +/area/medical/morgue + name = "\improper Morgue" + icon_state = "morgue" + +/area/medical/chemistry + name = "\improper Chemistry" + icon_state = "chem" + +/area/medical/surgery + name = "\improper Operating Theatre 1" + icon_state = "surgery" + flags = AREA_FLAG_IS_NOT_PERSISTENT //This WOULD become a filth pit + +/area/medical/surgery2 + name = "\improper Operating Theatre 2" + icon_state = "surgery" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/medical/surgeryobs + name = "\improper Operation Observation Room" + icon_state = "surgery" + +/area/medical/surgeryprep + name = "\improper Pre-Op Prep Room" + icon_state = "surgery" + +/area/medical/surgery_hallway + name = "\improper Surgery Hallway" + icon_state = "surgery_hallway" + +/area/medical/surgery_storage + name = "\improper Surgery Storage" + icon_state = "surgery_storage" + +/area/medical/cryo + name = "\improper Cryogenics" + icon_state = "cryo" + +/area/medical/exam_room + name = "\improper Exam Room" + icon_state = "exam_room" + +/area/medical/genetics + name = "\improper Genetics Lab" + icon_state = "genetics" + +/area/medical/genetics_cloning + name = "\improper Cloning Lab" + icon_state = "cloning" + +/area/medical/sleeper + name = "\improper Emergency Treatment Centre" + icon_state = "exam_room" + flags = AREA_FLAG_IS_NOT_PERSISTENT //Trust me. + +/area/medical/first_aid_station_starboard + name = "\improper Starboard First-Aid Station" + icon_state = "medbay2" + +/area/medical/first_aid_station + name = "\improper Port First-Aid Station" + icon_state = "medbay2" + + + +//Security + +/area/security/main + name = "\improper Security Office" + icon_state = "security" + +/area/security/lobby + name = "\improper Security Lobby" + icon_state = "security" + +/area/security/brig + name = "\improper Security - Brig" + icon_state = "brig" + +/area/security/brig/prison_break() + for(var/obj/structure/closet/secure_closet/brig/temp_closet in src) + temp_closet.locked = 0 + temp_closet.icon_state = "closed_unlocked" + for(var/obj/machinery/door_timer/temp_timer in src) + temp_timer.timer_duration = 1 + ..() + +/area/security/prison + name = "\improper Security - Prison Wing" + icon_state = "sec_prison" + +/area/security/prison/prison_break() + for(var/obj/structure/closet/secure_closet/brig/temp_closet in src) + temp_closet.locked = 0 + temp_closet.icon_state = "closed_unlocked" + for(var/obj/machinery/door_timer/temp_timer in src) + temp_timer.timer_duration = 1 + ..() + +/area/security/warden + name = "\improper Security - Warden's Office" + icon_state = "Warden" + +/area/security/armoury + name = "\improper Security - Armory" + icon_state = "armory" + ambience = AMBIENCE_HIGHSEC + +/area/security/briefing_room + name = "\improper Security - Briefing Room" + icon_state = "brig" + +/area/security/evidence_storage + name = "\improper Security - Equipment Storage" + icon_state = "security_equipment_storage" + +/area/security/evidence_storage + name = "\improper Security - Evidence Storage" + icon_state = "evidence_storage" + +/area/security/interrogation + name = "\improper Security - Interrogation" + icon_state = "interrogation" + +/area/security/riot_control + name = "\improper Security - Riot Control" + icon_state = "riot_control" + +/area/security/detectives_office + name = "\improper Security - Forensic Office" + icon_state = "detective" + sound_env = MEDIUM_SOFTFLOOR + +/area/security/range + name = "\improper Security - Firing Range" + icon_state = "firingrange" + +/area/security/security_aid_station + name = "\improper Security - Security Aid Station" + icon_state = "security_aid_station" + +/area/security/security_bathroom + name = "\improper Security - Restroom" + icon_state = "security_bathroom" + sound_env = SMALL_ENCLOSED + +/area/security/security_cell_hallway + name = "\improper Security - Cell Hallway" + icon_state = "security_cell_hallway" + +/area/security/security_equiptment_storage + name = "\improper Security - Equipment Storage" + icon_state = "security_equip_storage" + +/area/security/security_lockerroom + name = "\improper Security - Locker Room" + icon_state = "security_lockerroom" + +/area/security/security_processing + name = "\improper Security - Security Processing" + icon_state = "security_processing" + +/area/security/tactical + name = "\improper Security - Tactical Equipment" + icon_state = "Tactical" + ambience = AMBIENCE_HIGHSEC + + +/* + New() + ..() + + spawn(10) //let objects set up first + for(var/turf/turfToGrayscale in src) + if(turfToGrayscale.icon) + var/icon/newIcon = icon(turfToGrayscale.icon) + newIcon.GrayScale() + turfToGrayscale.icon = newIcon + for(var/obj/objectToGrayscale in turfToGrayscale) //1 level deep, means tables, apcs, locker, etc, but not locker contents + if(objectToGrayscale.icon) + var/icon/newIcon = icon(objectToGrayscale.icon) + newIcon.GrayScale() + objectToGrayscale.icon = newIcon +*/ + +/area/security/nuke_storage + name = "\improper Vault" + icon_state = "nuke_storage" + ambience = AMBIENCE_HIGHSEC + +/area/security/checkpoint + name = "\improper Security Checkpoint" + icon_state = "checkpoint1" + +/area/security/checkpoint2 + name = "\improper Security - Arrival Checkpoint" + icon_state = "security" + ambience = AMBIENCE_ARRIVALS + +/area/security/checkpoint/supply + name = "Security Post - Cargo Bay" + icon_state = "checkpoint1" + +/area/security/checkpoint/engineering + name = "Security Post - Engineering" + icon_state = "checkpoint1" + +/area/security/checkpoint/medical + name = "Security Post - Medbay" + icon_state = "checkpoint1" + +/area/security/checkpoint/science + name = "Security Post - Science" + icon_state = "checkpoint1" + +/area/security/vacantoffice + name = "\improper Vacant Office" + icon_state = "security" + +/area/security/vacantoffice2 + name = "\improper Vacant Office" + icon_state = "security" + +/area/janitor/ + name = "\improper Custodial Closet" + icon_state = "janitor" + +/area/hydroponics + name = "\improper Hydroponics" + icon_state = "hydro" + +/area/hydroponics/cafegarden + name = "\improper Cafeteria Garden" + icon_state = "cafe_garden" + +/area/hydroponics/garden + name = "\improper Garden" + icon_state = "garden" + +// SUPPLY + +/area/quartermaster + name = "\improper Quartermasters" + icon_state = "quart" + +/area/quartermaster/office + name = "\improper Cargo Office" + icon_state = "quartoffice" + +/area/quartermaster/storage + name = "\improper Cargo Bay" + icon_state = "quartstorage" + sound_env = LARGE_ENCLOSED + +/area/quartermaster/foyer + name = "\improper Cargo Bay Foyer" + icon_state = "quartstorage" + +/area/quartermaster/warehouse + name = "\improper Cargo Warehouse" + icon_state = "quartstorage" + +/area/quartermaster/qm + name = "\improper Cargo - Quartermaster's Office" + icon_state = "quart" + +/area/quartermaster/delivery + name = "\improper Cargo - Delivery Office" + icon_state = "quart" + flags = AREA_FLAG_IS_NOT_PERSISTENT //So trash doesn't pile up too hard. + +/area/quartermaster/miningdock + name = "\improper Cargo Mining Dock" + icon_state = "mining" + + +// SCIENCE + +/area/rnd/research + name = "\improper Research and Development" + icon_state = "research" + +/area/rnd/research_foyer + name = "\improper Research Foyer" + icon_state = "research_foyer" + +/area/rnd/research_foyer_auxiliary + name = "\improper Research Foyer Auxiliary" + icon_state = "research_foyer_aux" + +/area/rnd/research_restroom + name = "\improper Research Restroom" + icon_state = "research_restroom" + sound_env = SMALL_ENCLOSED + +/area/rnd/research_storage + name = "\improper Research Storage" + icon_state = "research_storage" + +/area/rnd/docking + name = "\improper Research Dock" + icon_state = "research_dock" + +/area/rnd/lab + name = "\improper Research Lab" + icon_state = "toxlab" + +/area/rnd/rdoffice + name = "\improper Research Director's Office" + icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/rnd/supermatter + name = "\improper Supermatter Lab" + icon_state = "toxlab" + +/area/rnd/xenobiology + name = "\improper Xenobiology Lab" + icon_state = "xeno_lab" + +/area/rnd/xenobiology/hallway + name = "\improper Xenobiology hallway" + icon_state = "xeno_lab" + +/area/rnd/xenobiology/storage + name = "\improper Xenobiology storage" + icon_state = "xeno_lab" + +/area/rnd/xenobiology/xenoflora_storage + name = "\improper Xenoflora Storage" + icon_state = "xeno_f_store" + +/area/rnd/xenobiology/xenoflora + name = "\improper Xenoflora Lab" + icon_state = "xeno_f_lab" + +/area/rnd/storage + name = "\improper Toxins Storage" + icon_state = "toxstorage" + +/area/rnd/test_area + name = "\improper Toxins Test Area" + icon_state = "toxtest" + +/area/rnd/mixing + name = "\improper Toxins Mixing Room" + icon_state = "toxmix" + +/area/rnd/misc_lab + name = "\improper Miscellaneous Research" + icon_state = "toxmisc" + +/area/rnd/workshop + name = "\improper Workshop" + icon_state = "sci_workshop" + +/area/toxins/server + name = "\improper Server Room" + icon_state = "server" + + +//Storage + +/area/storage/tools + name = "Auxiliary Tool Storage" + icon_state = "storage" + +/area/storage/primary + name = "Primary Tool Storage" + icon_state = "primarystorage" + +/area/storage/autolathe + name = "Autolathe Storage" + icon_state = "storage" + +/area/storage/art + name = "Art Supply Storage" + icon_state = "storage" + +/area/storage/auxillary + name = "Auxillary Storage" + icon_state = "auxstorage" + +/area/storage/eva + name = "EVA Storage" + icon_state = "eva" + +/area/storage/secure + name = "Secure Storage" + icon_state = "storage" + +/area/storage/emergency_storage/emergency + name = "Starboard Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/emergency_storage/emergency2 + name = "Port Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/emergency_storage/emergency3 + name = "Central Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/emergency_storage/emergency4 + name = "Civilian Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/emergency_storage/emergency5 + name = "Dock Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/emergency_storage/emergency6 + name = "Cargo Emergency Storage" + icon_state = "emergencystorage" + +/area/storage/tech + name = "Technical Storage" + icon_state = "auxstorage" + +/area/storage/testroom + requires_power = 0 + name = "\improper Test Room" + icon_state = "storage" + +//DJSTATION + +/area/djstation + name = "\improper Listening Post" + icon_state = "LP" + ambience = AMBIENCE_TECH_RUINS + +/area/djstation/solars + name = "\improper Listening Post Solars" + icon_state = "LPS" + ambience = AMBIENCE_TECH_RUINS + +//DERELICT + +/area/derelict + name = "\improper Derelict Station" + icon_state = "storage" + ambience = AMBIENCE_RUINS + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/derelict/hallway/primary + name = "\improper Derelict Primary Hallway" + icon_state = "hallP" + +/area/derelict/hallway/secondary + name = "\improper Derelict Secondary Hallway" + icon_state = "hallS" + +/area/derelict/arrival + name = "\improper Derelict Arrival Centre" + icon_state = "yellow" + +/area/derelict/storage/equipment + name = "Derelict Equipment Storage" + +/area/derelict/storage/storage_access + name = "Derelict Storage Access" + +/area/derelict/storage/engine_storage + name = "Derelict Engine Storage" + icon_state = "green" + +/area/derelict/bridge + name = "\improper Derelict Control Room" + icon_state = "bridge" + +/area/derelict/secret + name = "\improper Derelict Secret Room" + icon_state = "library" + +/area/derelict/bridge/access + name = "Derelict Control Room Access" + icon_state = "auxstorage" + +/area/derelict/bridge/ai_upload + name = "\improper Derelict Computer Core" + icon_state = "ai" + +/area/derelict/solar_control + name = "\improper Derelict Solar Control" + icon_state = "engine" + +/area/derelict/crew_quarters + name = "\improper Derelict Crew Quarters" + icon_state = "fitness" + +/area/derelict/medical + name = "Derelict Medbay" + icon_state = "medbay" + +/area/derelict/medical/morgue + name = "\improper Derelict Morgue" + icon_state = "morgue" + +/area/derelict/medical/chapel + name = "\improper Derelict Chapel" + icon_state = "chapel" + +/area/derelict/teleporter + name = "\improper Derelict Teleporter" + icon_state = "teleporter" + +/area/derelict/eva + name = "Derelict EVA Storage" + icon_state = "eva" + +/area/derelict/ship + name = "\improper Abandoned Ship" + icon_state = "yellow" + +/area/solar/derelict_starboard + name = "\improper Derelict Starboard Solar Array" + icon_state = "panelsS" + +/area/solar/derelict_aft + name = "\improper Derelict Aft Solar Array" + icon_state = "aft" + +/area/derelict/singularity_engine + name = "\improper Derelict Singularity Engine" + icon_state = "engine" + +//HALF-BUILT STATION (REPLACES DERELICT IN BAYCODE, ABOVE IS LEFT FOR DOWNSTREAM) + +/area/shuttle/constructionsite + name = "\improper Construction Site Shuttle" + icon_state = "yellow" + dynamic_lighting = 0 + base_turf = /turf/simulated/mineral/floor/ignore_mapgen + +/area/shuttle/constructionsite/station + name = "\improper Construction Site Shuttle" + +/area/shuttle/constructionsite/site + name = "\improper Construction Site Shuttle" + +/area/constructionsite + name = "\improper Construction Site" + icon_state = "storage" + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/constructionsite/storage + name = "\improper Construction Site Storage Area" + +/area/constructionsite/science + name = "\improper Construction Site Research" + +/area/constructionsite/bridge + name = "\improper Construction Site Bridge" + icon_state = "bridge" + +/area/constructionsite/maintenance + name = "\improper Construction Site Maintenance" + icon_state = "yellow" + +/area/constructionsite/hallway/aft + name = "\improper Construction Site Aft Hallway" + icon_state = "hallP" + +/area/constructionsite/hallway/fore + name = "\improper Construction Site Fore Hallway" + icon_state = "hallS" + +/area/constructionsite/atmospherics + name = "\improper Construction Site Atmospherics" + icon_state = "green" + +/area/constructionsite/medical + name = "\improper Construction Site Medbay" + icon_state = "medbay" + +/area/constructionsite/ai + name = "\improper Construction Computer Core" + icon_state = "ai" + +/area/constructionsite/engineering + name = "\improper Construction Site Engine Bay" + icon_state = "engine" + +/area/solar/constructionsite + name = "\improper Construction Site Solars" + icon_state = "aft" + +/area/constructionsite/teleporter + name = "Construction Site Teleporter" + icon_state = "yellow" + + +//area/constructionsite +// name = "\improper Construction Site Shuttle" + +//area/constructionsite +// name = "\improper Construction Site Shuttle" + + +//Construction + +/area/construction + name = "\improper Engineering Construction Area" + icon_state = "yellow" + +/area/construction/supplyshuttle + name = "\improper Supply Shuttle" + icon_state = "yellow" + +/area/construction/quarters + name = "\improper Engineer's Quarters" + icon_state = "yellow" + +/area/construction/qmaint + name = "Maintenance" + icon_state = "yellow" + +/area/construction/hallway + name = "\improper Hallway" + icon_state = "yellow" + +/area/construction/solars + name = "\improper Solar Panels" + icon_state = "yellow" + +/area/construction/solarscontrol + name = "\improper Solar Panel Control" + icon_state = "yellow" + +/area/construction/Storage + name = "Construction Site Storage" + icon_state = "yellow" + +//AI + +/area/ai_monitored/storage/eva + name = "EVA Storage" + icon_state = "eva" + +/area/ai_monitored/storage/secure + name = "Secure Storage" + icon_state = "storage" + ambience = AMBIENCE_HIGHSEC + +/area/ai_monitored/storage/emergency + name = "Emergency Storage" + icon_state = "storage" + +/area/ai_monitored/storage/emergency/eva + name = "Emergency EVA" + icon_state = "storage" + +/area/ai_upload + name = "\improper AI Upload Chamber" + icon_state = "ai_upload" + ambience = AMBIENCE_AI + +/area/ai_upload_foyer + name = "AI Upload Access" + icon_state = "ai_foyer" + sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_AI + +/area/ai_server_room + name = "Messaging Server Room" + icon_state = "ai_server" + sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_AI + +/area/ai + name = "\improper AI Chamber" + icon_state = "ai_chamber" + ambience = AMBIENCE_AI + +/area/ai_cyborg_station + name = "\improper Cyborg Station" + icon_state = "ai_cyborg" + sound_env = SMALL_ENCLOSED + ambience = AMBIENCE_AI + +/area/aisat + name = "\improper AI Satellite" + icon_state = "ai" + ambience = AMBIENCE_AI + +/area/aisat_interior + name = "\improper AI Satellite" + icon_state = "ai" + ambience = AMBIENCE_AI // The lack of inheritence hurts my soul. + +/area/AIsatextFP + name = "\improper AI Sat Ext" + icon_state = "storage" + luminosity = 1 + dynamic_lighting = 0 + ambience = AMBIENCE_AI + +/area/AIsatextFS + name = "\improper AI Sat Ext" + icon_state = "storage" + luminosity = 1 + dynamic_lighting = 0 + ambience = AMBIENCE_AI + +/area/AIsatextAS + name = "\improper AI Sat Ext" + icon_state = "storage" + luminosity = 1 + dynamic_lighting = 0 + ambience = AMBIENCE_AI + +/area/AIsatextAP + name = "\improper AI Sat Ext" + icon_state = "storage" + luminosity = 1 + dynamic_lighting = 0 + ambience = AMBIENCE_AI + +/area/NewAIMain + name = "\improper AI Main New" + icon_state = "storage" + ambience = AMBIENCE_AI + + + +//Misc + +/area/wreck + ambience = AMBIENCE_RUINS + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/wreck/ai + name = "\improper AI Chamber" + icon_state = "ai" + ambience = AMBIENCE_TECH_RUINS + +/area/wreck/main + name = "\improper Wreck" + icon_state = "storage" + +/area/wreck/engineering + name = "\improper Power Room" + icon_state = "engine" + ambience = AMBIENCE_TECH_RUINS + +/area/wreck/bridge + name = "\improper Bridge" + icon_state = "bridge" + ambience = AMBIENCE_TECH_RUINS + +/area/generic + name = "Unknown" + icon_state = "storage" + + + +// Telecommunications Satellite +/area/tcommsat/ + ambience = AMBIENCE_ENGINEERING + +/area/tcommsat/entrance + name = "\improper Telecomms Teleporter" + icon_state = "tcomsatentrance" + +/area/tcommsat/chamber + name = "\improper Telecomms Central Compartment" + icon_state = "tcomsatcham" + +/area/tcomsat + name = "\improper Telecomms Satellite" + icon_state = "tcomsatlob" + ambience = AMBIENCE_ENGINEERING + +/area/tcomfoyer + name = "\improper Telecomms Foyer" + icon_state = "tcomsatfoyer" + ambience = AMBIENCE_ENGINEERING + +/area/tcomwest + name = "\improper Telecommunications Satellite West Wing" + icon_state = "tcomsatwest" + ambience = AMBIENCE_ENGINEERING + +/area/tcomeast + name = "\improper Telecommunications Satellite East Wing" + icon_state = "tcomsateast" + ambience = AMBIENCE_ENGINEERING + +/area/tcommsat/computer + name = "\improper Telecomms Control Room" + icon_state = "tcomsatcomp" + +/area/tcommsat/lounge + name = "\improper Telecommunications Satellite Lounge" + icon_state = "tcomsatlounge" + +/area/tcommsat/powercontrol + name = "\improper Telecommunications Power Control" + icon_state = "tcomsatwest" + + +// Away Missions +/area/awaymission + name = "\improper Strange Location" + icon_state = "away" + ambience = AMBIENCE_FOREBODING + flags = AREA_FLAG_IS_NOT_PERSISTENT + +/area/awaymission/gateway + name = "\improper Gateway" + icon_state = "teleporter" + music = "signal" + +/area/awaymission/example + name = "\improper Strange Station" + icon_state = "away" + +/area/awaymission/wwmines + name = "\improper Wild West Mines" + icon_state = "away1" + luminosity = 1 + requires_power = 0 + +/area/awaymission/wwgov + name = "\improper Wild West Mansion" + icon_state = "away2" + luminosity = 1 + requires_power = 0 + +/area/awaymission/wwrefine + name = "\improper Wild West Refinery" + icon_state = "away3" + luminosity = 1 + requires_power = 0 + +/area/awaymission/wwvault + name = "\improper Wild West Vault" + icon_state = "away3" + luminosity = 0 + +/area/awaymission/wwvaultdoors + name = "\improper Wild West Vault Doors" // this is to keep the vault area being entirely lit because of requires_power + icon_state = "away2" + requires_power = 0 + luminosity = 0 + +/area/awaymission/desert + name = "Mars" + icon_state = "away" + +/area/awaymission/BMPship1 + name = "\improper Aft Block" + icon_state = "away1" + +/area/awaymission/BMPship2 + name = "\improper Midship Block" + icon_state = "away2" + +/area/awaymission/BMPship3 + name = "\improper Fore Block" + icon_state = "away3" + +/area/awaymission/spacebattle + name = "\improper Space Battle" + icon_state = "away" + requires_power = 0 + +/area/awaymission/spacebattle/cruiser + name = "\improper NanoTrasen Cruiser" + +/area/awaymission/spacebattle/syndicate1 + name = "\improper Syndicate Assault Ship 1" + +/area/awaymission/spacebattle/syndicate2 + name = "\improper Syndicate Assault Ship 2" + +/area/awaymission/spacebattle/syndicate3 + name = "\improper Syndicate Assault Ship 3" + +/area/awaymission/spacebattle/syndicate4 + name = "\improper Syndicate War Sphere 1" + +/area/awaymission/spacebattle/syndicate5 + name = "\improper Syndicate War Sphere 2" + +/area/awaymission/spacebattle/syndicate6 + name = "\improper Syndicate War Sphere 3" + +/area/awaymission/spacebattle/syndicate7 + name = "\improper Syndicate Fighter" + +/area/awaymission/spacebattle/secret + name = "\improper Hidden Chamber" + +/area/awaymission/listeningpost + name = "\improper Listening Post" + icon_state = "away" + requires_power = 0 + +/area/awaymission/beach + name = "Beach" + icon_state = "null" + luminosity = 1 + dynamic_lighting = 0 + requires_power = 0 + +///////////////////////////////////////////////////////////////////// +/* + Lists of areas to be used with is_type_in_list. + Used in gamemodes code at the moment. --rastaf0 +*/ + +// CENTCOM +var/list/centcom_areas = list ( + /area/centcom, + /area/shuttle/escape/centcom, + /area/shuttle/escape_pod1/centcom, + /area/shuttle/escape_pod2/centcom, + /area/shuttle/escape_pod3/centcom, + /area/shuttle/escape_pod5/centcom, + /area/shuttle/transport1/centcom, + /area/shuttle/administration/centcom, + /area/shuttle/specops/centcom, +) + +//SPACE STATION 13 +var/list/the_station_areas = list ( + /area/shuttle/arrival, + /area/shuttle/escape/station, + /area/shuttle/escape_pod1/station, + /area/shuttle/escape_pod2/station, + /area/shuttle/escape_pod3/station, + /area/shuttle/escape_pod5/station, + /area/shuttle/mining/station, + /area/shuttle/transport1/station, + // /area/shuttle/transport2/station, + /area/shuttle/prison/station, + /area/shuttle/administration/station, + /area/shuttle/specops/station, + /area/maintenance, + /area/hallway, + /area/bridge, + /area/crew_quarters, + /area/holodeck, + /area/mint, + /area/library, + /area/chapel, + /area/lawoffice, + /area/engineering, + /area/solar, + /area/assembly, + /area/teleporter, + /area/medical, + /area/security, + /area/quartermaster, + /area/janitor, + /area/hydroponics, + /area/rnd, + /area/storage, + /area/construction, + /area/ai_monitored/storage/eva, + /area/ai_monitored/storage/secure, + /area/ai_monitored/storage/emergency, + /area/ai_upload, + /area/ai_upload_foyer, + /area/ai +) + + + + +/area/beach + name = "Keelin's private beach" + icon_state = "yellow" + luminosity = 1 + dynamic_lighting = 0 requires_power = 0 \ No newline at end of file diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index ff8b25ce12..d0cdeb0187 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -51,6 +51,7 @@ var/sound_env = STANDARD_STATION var/turf/base_turf //The base turf type of the area, which can be used to override the z-level's base turf var/forbid_events = FALSE // If true, random events will not start inside this area. + var/forbid_singulo = FALSE // If true singulo will not move in. var/no_spoilers = FALSE // If true, makes it much more difficult to see what is inside an area with things like mesons. var/soundproofed = FALSE // If true, blocks sounds from other areas and prevents hearers on other areas from hearing the sounds within. @@ -379,7 +380,7 @@ var/list/mob/living/forced_ambiance_list = new /area/Entered(mob/M) if(!istype(M) || !M.ckey) return - + if(!isliving(M)) M.lastarea = src return @@ -450,6 +451,8 @@ var/list/mob/living/forced_ambiance_list = new return if(H.incorporeal_move) // VOREstation edit - Phaseshifted beings should not be affected by gravity return + if(H.species.can_zero_g_move || H.species.can_space_freemove) + return if(H.m_intent == "run") H.AdjustStunned(6) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index b0703f63a4..0234ec9371 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -225,7 +225,7 @@ else f_name += "oil-stained [name][infix]." - var/list/output = list("[bicon(src)] That's [f_name] [suffix]", desc) + var/list/output = list("\icon[src.examine_icon()][bicon(src)] That's [f_name] [suffix]", desc) if(user.client?.prefs.examine_text_mode == EXAMINE_MODE_INCLUDE_USAGE) output += description_info diff --git a/code/game/jobs/job/engineering_vr.dm b/code/game/jobs/job/engineering_vr.dm index 7d870c7200..4fe380e063 100644 --- a/code/game/jobs/job/engineering_vr.dm +++ b/code/game/jobs/job/engineering_vr.dm @@ -27,13 +27,18 @@ /datum/job/engineer pto_type = PTO_ENGINEERING alt_titles = list("Maintenance Technician" = /datum/alt_title/maint_tech, "Engine Technician" = /datum/alt_title/engine_tech, - "Electrician" = /datum/alt_title/electrician, "Construction Engineer" = /datum/alt_title/construction_engi, "Station Engineer" = /datum/alt_title/station_engineer ) //YW: added "Station Engineer" Alt Title + "Electrician" = /datum/alt_title/electrician, "Construction Engineer" = /datum/alt_title/construction_engi, "Engineering Contractor" = /datum/alt_title/engineering_contractor, "Station Engineer" = /datum/alt_title/station_engineer ) //YW: added "Station Engineer" Alt Title /datum/alt_title/construction_engi title = "Construction Engineer" title_blurb = "A Construction Engineer fulfills similar duties to other engineers, but usually occupies spare time with construction of extra facilities in dedicated areas or \ as additions to station layout." +/datum/alt_title/engineering_contractor + title = "Engineering Contractor" + title_blurb = "An Engineering Contractor fulfills similar duties to other engineers, but isn't directly employed by NT proper." + + /datum/job/atmos @@ -54,4 +59,4 @@ // YW Alt Titles /datum/alt_title/station_engineer title = "Station Engineer" - title_blurb = "A Station Engineer is a maintenance engineer who is responsible for the maintenance of the station's airlock systems, and the maintenance of the station's airlock systems." \ No newline at end of file + title_blurb = "A Station Engineer is a maintenance engineer who is responsible for the maintenance of the station's airlock systems, and the maintenance of the station's airlock systems." diff --git a/code/game/jobs/job/medical_vr.dm b/code/game/jobs/job/medical_vr.dm index 0124acc391..601c616e4f 100644 --- a/code/game/jobs/job/medical_vr.dm +++ b/code/game/jobs/job/medical_vr.dm @@ -27,7 +27,7 @@ pto_type = PTO_MEDICAL alt_titles = list("Physician" = /datum/alt_title/physician, "Medical Practitioner" = /datum/alt_title/medical_practitioner, "Surgeon" = /datum/alt_title/surgeon, "Emergency Physician" = /datum/alt_title/emergency_physician, "Nurse" = /datum/alt_title/nurse, "Orderly" = /datum/alt_title/orderly, - "Virologist" = /datum/alt_title/virologist) + "Virologist" = /datum/alt_title/virologist, "Medical Contractor" = /datum/alt_title/medical_contractor) /datum/alt_title/physician @@ -42,6 +42,10 @@ and dirty labor around the department." title_outfit = /decl/hierarchy/outfit/job/medical/doctor/nurse +/datum/alt_title/medical_contractor + title = "Medical Contractor" + title_blurb = "A Medical Contractor can be anything from a full-blown doctor to the likes of a nurse or orderly, but isn't directly employed by NT proper." + /datum/job/chemist pto_type = PTO_MEDICAL @@ -80,4 +84,4 @@ title_outfit = /decl/hierarchy/outfit/job/medical/paramedic/emt /datum/alt_title/sar - title = "Search and Rescue" \ No newline at end of file + title = "Search and Rescue" diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 5bc0272997..016a96c723 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1125,7 +1125,7 @@ // This is not a status display message, since it's something the character // themselves is meant to see BEFORE putting the money in - to_chat(usr, "[bicon(cashmoney)] That is not enough money.") + to_chat(usr, "\icon[cashmoney][bicon(cashmoney)] That is not enough money.") return 0 if(istype(cashmoney, /obj/item/weapon/spacecash)) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 6563f86cad..c7dac99cdd 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -111,13 +111,14 @@ Class Procs: var/clickvol = 40 // volume var/interact_offline = 0 // Can the machine be interacted with while de-powered. var/obj/item/weapon/circuitboard/circuit = null + // 0.0 - 1.0 multipler for prob() based on bullet structure damage // So if this is 1.0 then a 100 damage bullet will always break this structure // If this is 0.5 then a 50 damage bullet will break this structure 25% of the time var/bullet_vulnerability = 0.25 var/list/settagwhitelist = list()//WHITELIST OF VARIABLES THAT THE set_tag HREF CAN MODIFY, DON'T PUT SHIT YOU DON'T NEED ON HERE, AND IF YOU'RE GONNA USE set_tag (format_tag() proc), ADD TO THIS LIST. - + var/speed_process = FALSE //If false, SSmachines. If true, SSfastprocess. blocks_emissive = EMISSIVE_BLOCK_GENERIC @@ -285,7 +286,7 @@ Class Procs: /obj/machinery/proc/state(var/msg) for(var/mob/O in hearers(src, null)) - O.show_message("[bicon(src)] [msg]", 2) + O.show_message("\icon[src][bicon(src)] [msg]", 2) /obj/machinery/proc/ping(text=null) if(!text) @@ -440,7 +441,7 @@ Class Procs: for(var/obj/I in contents) if(istype(I,/obj/item/weapon/card/id)) I.forceMove(src.loc) - + if(!circuit) return 0 var/obj/structure/frame/A = new /obj/structure/frame(src.loc) @@ -500,7 +501,7 @@ Class Procs: var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) - + var/atom/droploc = drop_location() if(!droploc || !contents.len) // not even a circuit? playsound(src, 'sound/machines/machine_die_short.ogg') @@ -514,17 +515,17 @@ Class Procs: if(severity != 1) for(var/obj/item/weapon/card/id/I in contents) surviving_parts |= I - + // May populate some items to throw around if(!LAZYLEN(component_parts) && circuit) circuit.apply_default_parts(src) - + var/survivability switch(severity) // No survivors if(1) survivability = 0 - + // 1 part survives if(2) survivability = 0 @@ -535,15 +536,15 @@ Class Procs: // 50% of parts destroyed on average if(3) survivability = 50 - + // No parts destroyed, but you lose the frame else survivability = 100 - + for(var/atom/movable/P in contents) if(prob(survivability)) surviving_parts |= P - + if(circuit && severity >= 2) var/datum/frame/frame_types/FT = circuit.board_type if(istype(FT)) @@ -683,5 +684,5 @@ Class Procs: newfreq *= 10 // shift the decimal one place src:frequency = sanitize_frequency(newfreq, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) return TRUE - return FALSE -//YW EDIT: aac end \ No newline at end of file + return FALSE +//YW EDIT: aac end diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index 705914f794..c63ea1f1d8 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -138,7 +138,7 @@ var/icon/I = imap[1+(ix + icx*iy)*2] var/icon/I2 = imap[2+(ix + icx*iy)*2] - //to_world("icon: [bicon(I)]") + //to_world("icon: \icon[I][bicon(I)]") I.DrawBox(colour, rx, ry, rx+1, ry+1) @@ -153,7 +153,7 @@ H.screen_loc = "[5 + i%icx],[6+ round(i/icx)]" - //to_world("[bicon(I)] at [H.screen_loc]") + //to_world("\icon[I][bicon(I)] at [H.screen_loc]") H.name = (i==0)?"maprefresh":"map" @@ -266,7 +266,7 @@ //to_world("trying [ix],[iy] : [ix+icx*iy]") var/icon/I = imap[1+(ix + icx*iy)] - //to_world("icon: [bicon(I)]") + //to_world("icon: \icon[I][bicon(I)]") I.DrawBox(colour, rx, ry, rx, ry) @@ -279,7 +279,7 @@ H.screen_loc = "[5 + i%icx],[6+ round(i/icx)]" - //to_world("[bicon(I)] at [H.screen_loc]") + //to_world("\icon[I][bicon(I)] at [H.screen_loc]") H.name = (i==0)?"maprefresh":"map" diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 87e39ac937..f1e8199596 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -422,7 +422,7 @@ return ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "PortableTurret", name, 500, 400) + ui = new(user, src, "PortableTurret", name, ui_x = 500, ui_y = 400) ui.open() /obj/machinery/porta_turret/tgui_data(mob/user) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index a1d44b9838..d2adbad8da 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -198,7 +198,7 @@ desc += "
It is capable of repairing burn damage." /obj/machinery/recharge_station/proc/build_overlays() - cut_overlay() + cut_overlays() switch(round(chargepercentage())) if(1 to 20) add_overlay("statn_c0") @@ -323,4 +323,4 @@ icon_state = "borg_pod_opened" if(icon_update_tick == 0) - build_overlays() \ No newline at end of file + build_overlays() diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 7350ca0c1e..6b6fc6df6a 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -98,7 +98,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() /obj/machinery/requests_console/update_icon() cut_overlays() - + if(stat & NOPOWER) set_light(0) set_light_on(FALSE) @@ -145,9 +145,9 @@ var/list/obj/machinery/requests_console/allConsoles = list() /obj/machinery/requests_console/tgui_act(action, list/params) if(..()) return TRUE - + add_fingerprint(usr) - + switch(action) if("write") if(reject_bad_text(params["write"])) @@ -198,7 +198,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() screen = RCS_SENTPASS message_log += list(list("Message sent to [recipient]", "[message]")) else - audible_message(text("[bicon(src)] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4) + audible_message(text("\icon[src][bicon(src)] *The Requests Console beeps: 'NOTICE: No server detected!'"),,4) . = TRUE //Handle printing diff --git a/code/game/machinery/suit_cycler_datums.dm b/code/game/machinery/suit_cycler_datums.dm index 74410a25b7..5f0a842024 100644 --- a/code/game/machinery/suit_cycler_datums.dm +++ b/code/game/machinery/suit_cycler_datums.dm @@ -346,3 +346,5 @@ GLOBAL_LIST_EMPTY(suit_cycler_emagged) name = SPECIES_SERGAL /datum/suit_cycler_choice/species/vulpkanin name = SPECIES_VULPKANIN +/datum/suit_cycler_choice/species/altevian + name = SPECIES_ALTEVIAN diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 916d158e8a..9ee8ad6f6e 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -520,7 +520,7 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /datum/suit_cycler_choice/department/sec/riot, /datum/suit_cycler_choice/department/sec/eva ) - + /// Species that the cycler can refit suits for. Null assumes all except specially excluded ones. var/list/limit_species @@ -544,13 +544,13 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) species = load_species() emagged_departments = load_emagged() limit_departments = null // just for mem - + target_department = departments["No Change"] target_species = species["No Change"] if(!target_department || !target_species) stat |= BROKEN - + wires = new(src) /obj/machinery/suit_cycler/Destroy() @@ -704,7 +704,7 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /obj/machinery/suit_cycler/vintage/rugged name = "Vintage Ruggedized suit cycler" model_text = "Vintage Ruggedized" - + limit_departments = list( /datum/suit_cycler_choice/department/vintage/eng, /datum/suit_cycler_choice/department/vintage/marine, @@ -925,17 +925,17 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /obj/machinery/suit_cycler/tgui_static_data(mob/user) var/list/data = list() - + // tgui gets angy if you pass values too var/list/department_keys = list() for(var/key in departments) department_keys += key - + // emagged at the bottom if(emagged) for(var/key in emagged_departments) department_keys += key - + var/list/species_keys = list() for(var/key in species) species_keys += key @@ -943,7 +943,7 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) data["departments"] = department_keys data["species"] = species_keys - return data + return data /obj/machinery/suit_cycler/tgui_act(action, params) if(..()) @@ -1063,7 +1063,7 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /obj/machinery/suit_cycler/proc/finished_job() var/turf/T = get_turf(src) - T.visible_message("[bicon(src)]The [src] beeps several times.") + T.visible_message("\icon[src][bicon(src)]The [src] beeps several times.") icon_state = initial(icon_state) active = 0 playsound(src, 'sound/machines/boobeebeep.ogg', 50) @@ -1114,7 +1114,7 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /obj/machinery/suit_cycler/proc/apply_paintjob() if(!target_species || !target_department) return - + // Helmet to new paint if(target_department.can_refit_helmet(helmet)) target_department.do_refit_helmet(helmet) @@ -1129,6 +1129,5 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) if(target_species.can_refit_to(helmet, suit, suit?.helmet)) target_species.do_refit_to(helmet, suit, suit?.helmet) else - visible_message("[bicon(src)]Unable to apply specified cosmetics with specified species. Please try again with a different species or cosmetic option selected.") + visible_message("\icon[src][bicon(src)]Unable to apply specified cosmetics with specified species. Please try again with a different species or cosmetic option selected.") return - \ No newline at end of file diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 549546b388..5bcf571f61 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -454,7 +454,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/part_b_extra = "" if(data == DATA_ANTAG) // intercepted radio message part_b_extra = " (Intercepted)" - var/part_a = "[bicon(radio)]\[[freq_text]\][part_b_extra] " // goes in the actual output + var/part_a = "\icon[radio][bicon(radio)]\[[freq_text]\][part_b_extra] " // goes in the actual output // --- Some more pre-message formatting --- var/part_b = " " // Tweaked for security headsets -- TLE @@ -656,7 +656,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept // Create a radio headset for the sole purpose of using its icon var/obj/item/device/radio/headset/radio = new - var/part_b = " [bicon(radio)]\[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE + var/part_b = "\icon[radio][bicon(radio)]\[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE var/part_blackbox_b = " \[[freq_text]\] " // Tweaked for security headsets -- TLE var/part_c = "" diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm index b5468fed4d..154e243419 100644 --- a/code/game/machinery/turret_control.dm +++ b/code/game/machinery/turret_control.dm @@ -128,7 +128,7 @@ /obj/machinery/turretid/tgui_interact(mob/user, datum/tgui/ui = null) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "PortableTurret", name) // 500, 400 + ui = new(user, src, "PortableTurret", name, ui_x = 500, ui_y = 400) // 500, 400 ui.open() /obj/machinery/turretid/tgui_data(mob/user) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 85af948f96..7184fc3364 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -272,7 +272,7 @@ /obj/item/mecha_parts/mecha_equipment/proc/occupant_message(message) if(chassis) - chassis.occupant_message("[bicon(src)] [message]") + chassis.occupant_message("\icon[src][bicon(src)] [message]") return /obj/item/mecha_parts/mecha_equipment/proc/log_message(message) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 7e4bc6ed87..ff6fe6e8a4 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -653,20 +653,20 @@ switch(emagged) if(0) emagged = 0.5 - visible_message("[bicon(src)] [src] beeps: \"DB error \[Code 0x00F1\]\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"DB error \[Code 0x00F1\]\"") sleep(10) - visible_message("[bicon(src)] [src] beeps: \"Attempting auto-repair\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"Attempting auto-repair\"") sleep(15) - visible_message("[bicon(src)] [src] beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"User DB corrupted \[Code 0x00FA\]. Truncating data structure...\"") sleep(30) - visible_message("[bicon(src)] [src] beeps: \"User DB truncated. Please contact your [using_map.company_name] system operator for future assistance.\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"User DB truncated. Please contact your [using_map.company_name] system operator for future assistance.\"") req_access = null emagged = 1 return 1 if(0.5) - visible_message("[bicon(src)] [src] beeps: \"DB not responding \[Code 0x0003\]...\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"DB not responding \[Code 0x0003\]...\"") if(1) - visible_message("[bicon(src)] [src] beeps: \"No records in User DB\"") + visible_message("\icon[src][bicon(src)] [src] beeps: \"No records in User DB\"") /obj/machinery/mecha_part_fabricator/proc/eject_materials(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything var/recursive = amount == -1 ? TRUE : FALSE diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 8b5b53b168..eed93a421d 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -549,7 +549,7 @@ if(equipment?.len) . += "It's equipped with:" for(var/obj/item/mecha_parts/mecha_equipment/ME in equipment) - . += "[bicon(ME)] [ME]" + . += "\icon[ME][bicon(ME)] [ME]" /obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits. return @@ -572,7 +572,6 @@ /obj/mecha/proc/show_radial_occupant(var/mob/user) var/list/choices = list( - "Eject" = radial_image_eject, "Toggle Airtank" = radial_image_airtoggle, "Toggle Light" = radial_image_lighttoggle, "View Stats" = radial_image_statpanel @@ -584,9 +583,6 @@ if(!choice) return switch(choice) - if("Eject") - go_out() - add_fingerprint(usr) if("Toggle Airtank") use_internal_tank = !use_internal_tank occupant_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].") @@ -2449,7 +2445,7 @@ /obj/mecha/proc/occupant_message(message as text) if(message) if(src.occupant && src.occupant.client) - to_chat(src.occupant, "[bicon(src)] [message]") + to_chat(src.occupant, "\icon[src][bicon(src)] [message]") return /obj/mecha/proc/log_message(message as text,red=null) diff --git a/code/game/mecha/micro/micro.dm b/code/game/mecha/micro/micro.dm index a30af28aa3..97d6728f54 100644 --- a/code/game/mecha/micro/micro.dm +++ b/code/game/mecha/micro/micro.dm @@ -121,7 +121,7 @@ /obj/mecha/micro/move_inside() var/mob/living/carbon/C = usr - if (C.size_multiplier >= 0.5) + if (C.get_effective_size(TRUE) >= 0.5) to_chat(C, "You can't fit in this suit!") return else @@ -129,7 +129,7 @@ /obj/mecha/micro/move_inside_passenger() var/mob/living/carbon/C = usr - if (C.size_multiplier >= 0.5) + if (C.get_effective_size(TRUE) >= 0.5) to_chat(C, "You can't fit in this suit!") return else diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index b32777c65a..6f96ec1689 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -52,7 +52,7 @@ var/global/list/image/splatter_cache=list() addtimer(CALLBACK(src, .proc/dry), DRYING_TIME * (amount+1)) /obj/effect/decal/cleanable/blood/update_icon() - if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]" + if(basecolor == "rainbow") basecolor = get_random_colour(1) color = basecolor if(basecolor == SYNTH_BLOOD_COLOUR) @@ -184,11 +184,11 @@ var/global/list/image/splatter_cache=list() var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) if(!fleshcolor || fleshcolor == "rainbow") - fleshcolor = "#[get_random_colour(1)]" + fleshcolor = get_random_colour(1) giblets.color = fleshcolor var/icon/blood = new(base_icon,"[icon_state]",dir) - if(basecolor == "rainbow") basecolor = "#[get_random_colour(1)]" + if(basecolor == "rainbow") basecolor = get_random_colour(1) blood.Blend(basecolor,ICON_MULTIPLY) icon = blood diff --git a/code/game/objects/effects/decals/Cleanable/misc.dm b/code/game/objects/effects/decals/Cleanable/misc.dm index e68ce7aa4e..cf26c6463d 100644 --- a/code/game/objects/effects/decals/Cleanable/misc.dm +++ b/code/game/objects/effects/decals/Cleanable/misc.dm @@ -38,6 +38,12 @@ icon_state = "dirt" mouse_opacity = 0 +/obj/effect/decal/cleanable/Initialize(var/mapload, var/_age) + .=..() + var/turf/simulated/our_turf = src.loc + if(our_turf && istype(our_turf) && our_turf.can_dirty && _age) + our_turf.dirt = 101 + /obj/effect/decal/cleanable/flour name = "flour" desc = "It's still good. Four second rule!" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index c743a60c80..94e2f68257 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -159,6 +159,10 @@ var/obj/item/organ/external/hand = H.organs_by_name[check_hand] if(istype(hand) && hand.is_usable()) return TRUE + var/mob/living/simple_mob/S = M + if(istype(S) && S.has_hands) //Are they a mob? And do they have hands? + return TRUE + return FALSE @@ -254,6 +258,15 @@ var/obj/effect/temporary_effect/item_pickup_ghost/ghost = new(old_loc) ghost.assumeform(src) ghost.animate_towards(user) + //VORESTATION EDIT START. This handles possessed items. + if(src.possessed_voice && src.possessed_voice.len && !(user.ckey in warned_of_possession)) //Is this item possessed? + warned_of_possession |= user.ckey + tgui_alert_async(user,{" + THIS ITEM IS POSSESSED BY A PLAYER CURRENTLY IN THE ROUND. This could be by anomalous means or otherwise. + If this is not something you wish to partake in, it is highly suggested you place the item back down. + If this is fine to you, ensure that the other player is fine with you doing things to them beforehand! + "},"OOC Warning") + //VORESTATION EDIT END. return /obj/item/attack_ai(mob/user as mob) @@ -991,3 +1004,6 @@ Note: This proc can be overwritten to allow for different types of auto-alignmen // this gets called when the item gets chucked by the vending machine /obj/item/proc/vendor_action(var/obj/machinery/vending/V) return + +/obj/item/proc/on_holder_escape(var/obj/item/weapon/holder/H) + return diff --git a/code/game/objects/items/devices/ai_detector.dm b/code/game/objects/items/devices/ai_detector.dm index 94d3a35912..7bb92bf216 100644 --- a/code/game/objects/items/devices/ai_detector.dm +++ b/code/game/objects/items/devices/ai_detector.dm @@ -94,22 +94,22 @@ if(new_state != old_state) switch(new_state) if(PROXIMITY_OFF_CAMERANET) - to_chat(carrier, "[bicon(src)] Now outside of camera network.") + to_chat(carrier, "\icon[src][bicon(src)] Now outside of camera network.") carrier << 'sound/machines/defib_failed.ogg' if(PROXIMITY_NONE) - to_chat(carrier, "[bicon(src)] Now within camera network, AI and cameras unfocused.") + to_chat(carrier, "\icon[src][bicon(src)] Now within camera network, AI and cameras unfocused.") carrier << 'sound/machines/defib_safetyOff.ogg' if(PROXIMITY_NEAR) - to_chat(carrier, "[bicon(src)] Warning: AI focus at nearby location.") + to_chat(carrier, "\icon[src][bicon(src)] Warning: AI focus at nearby location.") carrier << 'sound/machines/defib_SafetyOn.ogg' if(PROXIMITY_ON_SCREEN) - to_chat(carrier, "[bicon(src)] Alert: AI or camera focused at current location!") + to_chat(carrier, "\icon[src][bicon(src)] Alert: AI or camera focused at current location!") carrier <<'sound/machines/defib_ready.ogg' if(PROXIMITY_TRACKING) - to_chat(carrier, "[bicon(src)] Danger: AI is actively tracking you!") + to_chat(carrier, "\icon[src][bicon(src)] Danger: AI is actively tracking you!") carrier << 'sound/machines/defib_success.ogg' if(PROXIMITY_TRACKING_FAIL) - to_chat(carrier, "[bicon(src)] Danger: AI is attempting to actively track you, but you are outside of the camera network!") + to_chat(carrier, "\icon[src][bicon(src)] Danger: AI is attempting to actively track you, but you are outside of the camera network!") carrier <<'sound/machines/defib_ready.ogg' diff --git a/code/game/objects/items/devices/communicator/UI_tgui.dm b/code/game/objects/items/devices/communicator/UI_tgui.dm index f3f13663d8..092b45cea2 100644 --- a/code/game/objects/items/devices/communicator/UI_tgui.dm +++ b/code/game/objects/items/devices/communicator/UI_tgui.dm @@ -382,7 +382,7 @@ im_list += list(list("address" = exonet.address, "to_address" = their_address, "im" = text)) log_pda("(COMM: [src]) sent \"[text]\" to [exonet.get_atom_from_address(their_address)]", usr) var/obj/item/device/communicator/comm = exonet.get_atom_from_address(their_address) - to_chat(usr, "[bicon(src)] Sent message to [comm.owner], \"[text]\" (Reply)") + to_chat(usr, "\icon[src][bicon(src)] Sent message to [comm.owner], \"[text]\" (Reply)") for(var/mob/M in player_list) if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears)) if(istype(M, /mob/new_player) || M.forbid_seeing_deadchat) diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 39411fbacf..a92c2725c0 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -142,10 +142,10 @@ var/global/list/obj/item/device/communicator/all_communicators = list() // Description: Shows all the voice mobs inside the device, and their status. /obj/item/device/communicator/examine(mob/user) . = ..() - + for(var/mob/living/voice/voice in contents) . += "On the screen, you can see a image feed of [voice]." - + if(voice && voice.key) switch(voice.stat) if(CONSCIOUS) @@ -302,7 +302,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() /obj/item/device/communicator/Destroy() for(var/mob/living/voice/voice in contents) voice_mobs.Remove(voice) - to_chat(voice, "[bicon(src)] Connection timed out with remote host.") + to_chat(voice, "\icon[src][bicon(src)] Connection timed out with remote host.") qdel(voice) close_connection(reason = "Connection timed out") diff --git a/code/game/objects/items/devices/communicator/messaging.dm b/code/game/objects/items/devices/communicator/messaging.dm index bcfe1cf0c3..5c27d8a850 100644 --- a/code/game/objects/items/devices/communicator/messaging.dm +++ b/code/game/objects/items/devices/communicator/messaging.dm @@ -34,7 +34,7 @@ if(src in comm.voice_invites) comm.open_connection(src) return - to_chat(src, "[bicon(origin_atom)] Receiving communicator request from [origin_atom]. To answer, use the Call Communicator \ + to_chat(src, "\icon[origin_atom][bicon(origin_atom)] Receiving communicator request from [origin_atom]. To answer, use the Call Communicator \ verb, and select that name to answer the call.") src << 'sound/machines/defib_SafetyOn.ogg' comm.voice_invites |= src @@ -44,7 +44,7 @@ random = random / 10 exonet.send_message(origin_address, "64 bytes received from [exonet.address] ecmp_seq=1 ttl=51 time=[random] ms") if(message == "text") - to_chat(src, "[bicon(origin_atom)] Received text message from [origin_atom]: \"[text]\"") + to_chat(src, "\icon[origin_atom][bicon(origin_atom)] Received text message from [origin_atom]: \"[text]\"") src << 'sound/machines/defib_safetyOff.ogg' exonet_messages.Add("From [origin_atom]:
[text]") return @@ -84,7 +84,7 @@ playsound(src, S, 50, 1) for (var/mob/O in hearers(2, loc)) - O.show_message(text("[bicon(src)] *[ttone]*")) + O.show_message(text("\icon[src][bicon(src)] *[ttone]*")) alert_called = 1 update_icon() @@ -95,7 +95,7 @@ L = loc if(L) - to_chat(L, "[bicon(src)] Message from [who]: \"[text]\" (Reply)") + to_chat(L, "\icon[src][bicon(src)] Message from [who]: \"[text]\" (Reply)") // This is the only Topic the communicators really uses /obj/item/device/communicator/Topic(href, href_list) @@ -108,7 +108,7 @@ exonet.send_message(comm.exonet.address, "text", message) im_list += list(list("address" = exonet.address, "to_address" = comm.exonet.address, "im" = message)) log_pda("(COMM: [src]) sent \"[message]\" to [exonet.get_atom_from_address(comm.exonet.address)]", usr) - to_chat(usr, "[bicon(src)] Sent message to [comm.owner], \"[message]\" (Reply)") + to_chat(usr, "\icon[src][bicon(src)] Sent message to [comm.owner], \"[message]\" (Reply)") // Verb: text_communicator() // Parameters: None diff --git a/code/game/objects/items/devices/communicator/phone.dm b/code/game/objects/items/devices/communicator/phone.dm index e938276bdc..671598a6ef 100644 --- a/code/game/objects/items/devices/communicator/phone.dm +++ b/code/game/objects/items/devices/communicator/phone.dm @@ -39,15 +39,15 @@ comm.voice_requests.Remove(src) if(user) - comm.visible_message("[bicon(src)] Connecting to [src].") - to_chat(user, "[bicon(src)] Attempting to call [comm].") + comm.visible_message("\icon[src][bicon(src)] Connecting to [src].") + to_chat(user, "\icon[src][bicon(src)] Attempting to call [comm].") sleep(10) - to_chat(user, "[bicon(src)] Dialing internally from [station_name()], [system_name()].") + to_chat(user, "\icon[src][bicon(src)] Dialing internally from [station_name()], [system_name()].") sleep(20) //If they don't have an exonet something is very wrong and we want a runtime. - to_chat(user, "[bicon(src)] Connection re-routed to [comm] at [comm.exonet.address].") + to_chat(user, "\icon[src][bicon(src)] Connection re-routed to [comm] at [comm.exonet.address].") sleep(40) - to_chat(user, "[bicon(src)] Connection to [comm] at [comm.exonet.address] established.") - comm.visible_message("[bicon(src)] Connection to [src] at [exonet.address] established.") + to_chat(user, "\icon[src][bicon(src)] Connection to [comm] at [comm.exonet.address] established.") + comm.visible_message("\icon[src][bicon(src)] Connection to [src] at [exonet.address] established.") sleep(20) src.add_communicating(comm) @@ -86,28 +86,28 @@ //Now for some connection fluff. if(user) - to_chat(user, "[bicon(src)] Connecting to [candidate].") - to_chat(new_voice, "[bicon(src)] Attempting to call [src].") + to_chat(user, "\icon[src][bicon(src)] Connecting to [candidate].") + to_chat(new_voice, "\icon[src][bicon(src)] Attempting to call [src].") sleep(10) - to_chat(new_voice, "[bicon(src)] Dialing to [station_name()], Kara Subsystem, [system_name()].") + to_chat(new_voice, "\icon[src][bicon(src)] Dialing to [station_name()], Kara Subsystem, [system_name()].") sleep(20) - to_chat(new_voice, "[bicon(src)] Connecting to [station_name()] telecommunications array.") + to_chat(new_voice, "\icon[src][bicon(src)] Connecting to [station_name()] telecommunications array.") sleep(40) - to_chat(new_voice, "[bicon(src)] Connection to [station_name()] telecommunications array established. Redirecting signal to [src].") + to_chat(new_voice, "\icon[src][bicon(src)] Connection to [station_name()] telecommunications array established. Redirecting signal to [src].") sleep(20) //We're connected, no need to hide everything. new_voice.client.screen.Remove(blackness) qdel(blackness) - to_chat(new_voice, "[bicon(src)] Connection to [src] established.") + to_chat(new_voice, "\icon[src][bicon(src)] Connection to [src] established.") to_chat(new_voice, "To talk to the person on the other end of the call, just talk normally.") to_chat(new_voice, "If you want to end the call, use the 'Hang Up' verb. The other person can also hang up at any time.") to_chat(new_voice, "Remember, your character does not know anything you've learned from observing!") if(new_voice.mind) new_voice.mind.assigned_role = "Disembodied Voice" if(user) - to_chat(user, "[bicon(src)] Your communicator is now connected to [candidate]'s communicator.") + to_chat(user, "\icon[src][bicon(src)] Your communicator is now connected to [candidate]'s communicator.") // Proc: close_connection() // Parameters: 3 (user - the user who initiated the disconnect, target - the mob or device being disconnected, reason - string shown when disconnected) @@ -120,8 +120,8 @@ for(var/mob/living/voice/voice in voice_mobs) //Handle ghost-callers if(target && voice != target) //If no target is inputted, it deletes all of them. continue - to_chat(voice, "[bicon(src)] [reason].") - visible_message("[bicon(src)] [reason].") + to_chat(voice, "\icon[src][bicon(src)] [reason].") + visible_message("\icon[src][bicon(src)] [reason].") voice_mobs.Remove(voice) qdel(voice) update_icon() @@ -131,8 +131,8 @@ continue src.del_communicating(comm) comm.del_communicating(src) - comm.visible_message("[bicon(src)] [reason].") - visible_message("[bicon(src)] [reason].") + comm.visible_message("\icon[src][bicon(src)] [reason].") + visible_message("\icon[src][bicon(src)] [reason].") if(comm.camera && video_source == comm.camera) //We hung up on the person on video end_video() if(camera && comm.video_source == camera) //We hung up on them while they were watching us @@ -163,7 +163,7 @@ if(ringer) playsound(src, 'sound/machines/twobeep.ogg', 50, 1) for (var/mob/O in hearers(2, loc)) - O.show_message(text("[bicon(src)] *beep*")) + O.show_message(text("\icon[src][bicon(src)] *beep*")) alert_called = 1 update_icon() @@ -174,7 +174,7 @@ L = loc if(L) - to_chat(L, "[bicon(src)] Communications request from [who].") + to_chat(L, "\icon[src][bicon(src)] Communications request from [who].") // Proc: del_request() // Parameters: 1 (candidate - the ghost or communicator to be declined) @@ -197,13 +197,13 @@ us = loc if(us) - to_chat(us, "[bicon(src)] Declined request.") + to_chat(us, "\icon[src][bicon(src)] Declined request.") // Proc: see_emote() // Parameters: 2 (M - the mob the emote originated from, text - the emote's contents) // Description: Relays the emote to all linked communicators. /obj/item/device/communicator/see_emote(mob/living/M, text) - var/rendered = "[bicon(src)] [text]" + var/rendered = "\icon[src][bicon(src)] [text]" for(var/obj/item/device/communicator/comm in communicating) var/turf/T = get_turf(comm) if(!T) return @@ -250,14 +250,14 @@ var/message = combined["formatted"] var/name_used = M.GetVoice() var/rendered = null - rendered = "[bicon(src)] [name_used] [message]" + rendered = "\icon[src][bicon(src)] [name_used] [message]" mob.show_message(rendered, 2) // Proc: show_message() // Parameters: 4 (msg - the message, type - number to determine if message is visible or audible, alt - unknown, alt_type - unknown) // Description: Relays the message to all linked communicators. /obj/item/device/communicator/show_message(msg, type, alt, alt_type) - var/rendered = "[bicon(src)] [msg]" + var/rendered = "\icon[src][bicon(src)] [msg]" for(var/obj/item/device/communicator/comm in communicating) var/turf/T = get_turf(comm) if(!T) return @@ -339,15 +339,15 @@ return if(!(src in comm.communicating) || !comm.camera) //You called someone with a broken communicator or one that's fake or yourself or something - to_chat(user, "[bicon(src)]ERROR: Video failed. Either bandwidth is too low, or the other communicator is malfunctioning.") + to_chat(user, "\icon[src][bicon(src)]ERROR: Video failed. Either bandwidth is too low, or the other communicator is malfunctioning.") return - to_chat(user, "[bicon(src)] Attempting to start video over existing call.") + to_chat(user, "\icon[src][bicon(src)] Attempting to start video over existing call.") sleep(30) - to_chat(user, "[bicon(src)] Please wait...") + to_chat(user, "\icon[src][bicon(src)] Please wait...") video_source = comm.camera - comm.visible_message("[bicon(src)] New video connection from [comm].") + comm.visible_message("\icon[src][bicon(src)] New video connection from [comm].") update_active_camera_screen() GLOB.moved_event.register(video_source, src, .proc/update_active_camera_screen) update_icon() @@ -360,7 +360,7 @@ show_static() video_source = null - . = "[bicon(src)] [reason ? reason : "Video session ended"]." + . = "\icon[src][bicon(src)] [reason ? reason : "Video session ended"]." visible_message(.) update_icon() diff --git a/code/game/objects/items/devices/geiger.dm b/code/game/objects/items/devices/geiger.dm index 2b7a31eb2c..d127fe9404 100644 --- a/code/game/objects/items/devices/geiger.dm +++ b/code/game/objects/items/devices/geiger.dm @@ -65,7 +65,7 @@ STOP_PROCESSING(SSobj, src) update_icon() update_sound() - to_chat(user, "[bicon(src)] You switch [scanning ? "on" : "off"] \the [src].") + to_chat(user, "\icon[src][bicon(src)] You switch [scanning ? "on" : "off"] \the [src].") /obj/item/device/geiger/update_icon() if(!scanning) diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm index e92c45e151..5d6b46c6a7 100644 --- a/code/game/objects/items/devices/hacktool.dm +++ b/code/game/objects/items/devices/hacktool.dm @@ -47,7 +47,7 @@ to_chat(user, "You are already hacking!") return 0 if(!is_type_in_list(target, supported_types)) - to_chat(user, "[bicon(src)] Unable to hack this target!") + to_chat(user, "\icon[src][bicon(src)] Unable to hack this target!") return 0 var/found = known_targets.Find(target) if(found) diff --git a/code/game/objects/items/devices/holowarrant.dm b/code/game/objects/items/devices/holowarrant.dm index 37a5ade906..0272dac254 100644 --- a/code/game/objects/items/devices/holowarrant.dm +++ b/code/game/objects/items/devices/holowarrant.dm @@ -68,7 +68,7 @@ if(active.fields["arrestsearch"] == "arrest") var/output = {" [active.fields["namewarrant"]] -
Sol Central Government Colonial Marshal Bureau
+
Commonwealth Security Bond Association
in the jurisdiction of the
[using_map.boss_name] in [using_map.station_name]

@@ -115,7 +115,7 @@ name = "holowarrant devices" desc = "A box of holowarrant diplays for security use." -/obj/item/weapon/storage/box/holowarrants/New() +/obj/item/weapon/storage/box/holowarrants/New() ..() for(var/i = 0 to 3) new /obj/item/device/holowarrant(src) // VOREStation addition ends \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index b7304fa8a1..e8ba830cae 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -491,7 +491,7 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer) var/list/jamming = is_jammed(src) if(jamming) var/distance = jamming["distance"] - to_chat(M, "[bicon(src)] You hear the [distance <= 2 ? "loud hiss" : "soft hiss"] of static.") + to_chat(M, "\icon[src][bicon(src)] You hear the [distance <= 2 ? "loud hiss" : "soft hiss"] of static.") return FALSE // First, we want to generate a new radio signal diff --git a/code/game/objects/items/devices/scanners/gas.dm b/code/game/objects/items/devices/scanners/gas.dm index ca35911448..9fbc319d6d 100644 --- a/code/game/objects/items/devices/scanners/gas.dm +++ b/code/game/objects/items/devices/scanners/gas.dm @@ -23,7 +23,7 @@ /obj/item/device/analyzer/attack_self(mob/user as mob) if (user.stat) return - if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) to_chat(usr, "You don't have the dexterity to do this!") return diff --git a/code/game/objects/items/devices/scanners/health.dm b/code/game/objects/items/devices/scanners/health.dm index 98aa6ec2db..02b33bdec5 100644 --- a/code/game/objects/items/devices/scanners/health.dm +++ b/code/game/objects/items/devices/scanners/health.dm @@ -41,7 +41,7 @@ dat += "Body Temperature: ???" user.show_message("[dat]", 1) return - if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return diff --git a/code/game/objects/items/devices/scanners/mass_spectrometer.dm b/code/game/objects/items/devices/scanners/mass_spectrometer.dm index fee41eb880..5c044fc535 100644 --- a/code/game/objects/items/devices/scanners/mass_spectrometer.dm +++ b/code/game/objects/items/devices/scanners/mass_spectrometer.dm @@ -30,7 +30,7 @@ /obj/item/device/mass_spectrometer/attack_self(mob/user as mob) if (user.stat) return - if (!(ishuman(user) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return if(reagents.total_volume) diff --git a/code/game/objects/items/devices/text_to_speech.dm b/code/game/objects/items/devices/text_to_speech.dm index 330ca97d73..c97693ed5f 100644 --- a/code/game/objects/items/devices/text_to_speech.dm +++ b/code/game/objects/items/devices/text_to_speech.dm @@ -24,7 +24,7 @@ var/message = sanitize(tgui_input_text(user,"Choose a message to relay to those around you.")) if(message) - audible_message("[bicon(src)] \The [src.name] states, \"[message]\"", runemessage = "synthesized speech") + audible_message("\icon[src][bicon(src)] \The [src.name] states, \"[message]\"", runemessage = "synthesized speech") if(ismob(loc)) loc.audible_message("", runemessage = "\[TTS Voice\] [message]") diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 14758aa2f6..2a79c6aaac 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -208,7 +208,6 @@ R.add_language(LANGUAGE_SIIK, 1) R.add_language(LANGUAGE_AKHANI, 1) R.add_language(LANGUAGE_SKRELLIAN, 1) - R.add_language(LANGUAGE_SKRELLIANFAR, 0) R.add_language(LANGUAGE_GUTTER, 1) R.add_language(LANGUAGE_SCHECHI, 1) R.add_language(LANGUAGE_ROOTLOCAL, 1) diff --git a/code/game/objects/items/robot/robot_upgrades_vr.dm b/code/game/objects/items/robot/robot_upgrades_vr.dm index 499d535a5c..74c41433d9 100644 --- a/code/game/objects/items/robot/robot_upgrades_vr.dm +++ b/code/game/objects/items/robot/robot_upgrades_vr.dm @@ -6,7 +6,6 @@ R.add_language(LANGUAGE_ECUREUILIAN, 1) R.add_language(LANGUAGE_DAEMON, 1) R.add_language(LANGUAGE_ENOCHIAN, 1) - R.add_language(LANGUAGE_SLAVIC, 1) R.add_language(LANGUAGE_DRUDAKAR, 1) R.add_language(LANGUAGE_TAVAN, 1) return 1 diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index f065ec3ea1..9676919792 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -20,8 +20,7 @@ to_chat(user, "\The [src] cannot be applied to [M]!") return 1 - if ( ! (istype(user, /mob/living/carbon/human) || \ - istype(user, /mob/living/silicon)) ) + if (!M.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return 1 @@ -129,7 +128,7 @@ if(used >= available) to_chat(user, "You run out of [src]!") break - + if (W.current_stage <= W.max_bleeding_stage) user.visible_message("\The [user] bandages \a [W.desc] on [M]'s [affecting.name].", \ "You bandage \a [W.desc] on [M]'s [affecting.name]." ) diff --git a/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm b/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm index 0ac18b8ae1..103b54c691 100644 --- a/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm +++ b/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm @@ -36,6 +36,22 @@ name = "stack of happy carpet" type_to_spawn = /obj/item/stack/tile/carpet/happy +/obj/fiftyspawner/brncarpet + name = "stack of brown carpet" + type_to_spawn = /obj/item/stack/tile/carpet/brncarpet + +/obj/fiftyspawner/blucarpet2 + name = "stack of blue carpet" + type_to_spawn = /obj/item/stack/tile/carpet/blucarpet2 + +/obj/fiftyspawner/greencarpet + name = "stack of green carpet" + type_to_spawn = /obj/item/stack/tile/carpet/greencarpet + +/obj/fiftyspawner/purplecarpet + name = "stack of purple carpet" + type_to_spawn = /obj/item/stack/tile/carpet/purplecarpet + /obj/fiftyspawner/floor name = "stack of floor tiles" type_to_spawn = /obj/item/stack/tile/floor diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index caeefd9e10..4d037bc37c 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -153,6 +153,15 @@ icon_state = "tile-carpet" YW Edit end */ +/obj/item/stack/tile/carpet/brncarpet + icon_state = "tile-carpet" +/obj/item/stack/tile/carpet/blucarpet2 + icon_state = "tile-carpet" +/obj/item/stack/tile/carpet/greencarpet + icon_state = "tile-carpet" +/obj/item/stack/tile/carpet/purplecarpet + icon_state = "tile-carpet" + /obj/item/stack/tile/floor name = "floor tile" singular_name = "floor tile" diff --git a/code/game/objects/items/toys/toys_vr.dm b/code/game/objects/items/toys/toys_vr.dm index 8a3f59feae..c4daff4dce 100644 --- a/code/game/objects/items/toys/toys_vr.dm +++ b/code/game/objects/items/toys/toys_vr.dm @@ -87,16 +87,20 @@ attack_verb = list("beeped", "booped", "pinged") /obj/item/toy/plushie/borgplushie/medihound + name = "medihound plushie" icon_state = "medihound" /obj/item/toy/plushie/borgplushie/scrubpuppy + name = "janihound plushie" icon_state = "scrubpuppy" /obj/item/toy/plushie/borgplushie/drakiesec + name = "security drake plushie" icon = 'icons/obj/drakietoy_vr.dmi' icon_state = "secdrake" /obj/item/toy/plushie/borgplushie/drakiemed + name = "medical drake plushie" icon = 'icons/obj/drakietoy_vr.dmi' icon_state = "meddrake" @@ -613,7 +617,7 @@ /obj/item/toy/minigibber/attackby(obj/O, mob/user, params) if(istype(O,/obj/item/toy/figure) || istype(O,/obj/item/toy/character) && O.loc == user) - to_chat(user, "You start feeding \the [O] [bicon(O)] into \the [src]'s mini-input.") + to_chat(user, "You start feeding \the [O] \icon[O][bicon(O)] into \the [src]'s mini-input.") if(do_after(user, 10, target = src)) if(O.loc != user) to_chat(user, "\The [O] is too far away to feed into \the [src]!") diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm index 325e9f518a..148df8db50 100644 --- a/code/game/objects/items/weapons/id cards/station_ids.dm +++ b/code/game/objects/items/weapons/id cards/station_ids.dm @@ -90,8 +90,8 @@ return data /obj/item/weapon/card/id/attack_self(mob/user as mob) - user.visible_message("\The [user] shows you: [bicon(src)] [src.name]. The assignment on the card: [src.assignment]",\ - "You flash your ID card: [bicon(src)] [src.name]. The assignment on the card: [src.assignment]") + user.visible_message("\The [user] shows you: \icon[src][bicon(src)] [src.name]. The assignment on the card: [src.assignment]",\ + "You flash your ID card: \icon[src][bicon(src)] [src.name]. The assignment on the card: [src.assignment]") src.add_fingerprint(user) return @@ -107,7 +107,7 @@ set category = "Object" set src in usr - to_chat(usr, "[bicon(src)] [src.name]: The current assignment on the card is [src.assignment].") + to_chat(usr, "\icon[src][bicon(src)] [src.name]: The current assignment on the card is [src.assignment].") to_chat(usr, "The blood type on the card is [blood_type].") to_chat(usr, "The DNA hash on the card is [dna_hash].") to_chat(usr, "The fingerprint hash on the card is [fingerprint_hash].") @@ -167,7 +167,7 @@ assignment = "Synthetic" access = list( access_synth, access_mining, access_mining_station, access_mining_office, access_research, - access_xenoarch, access_xenobiology, access_external_airlocks, access_robotics, access_tox, + access_xenoarch, access_xenobiology, access_external_airlocks, access_robotics, access_tox, access_tox_storage, access_maint_tunnels, access_mailsorting, access_cargo, access_cargo_bot ) diff --git a/code/game/objects/items/weapons/implants/implant_vr.dm b/code/game/objects/items/weapons/implants/implant_vr.dm index 0702ac6697..a2f22438bd 100644 --- a/code/game/objects/items/weapons/implants/implant_vr.dm +++ b/code/game/objects/items/weapons/implants/implant_vr.dm @@ -22,20 +22,16 @@ if (emote == "smile") src.uses-- to_chat(source,"You suddenly feel as if you can understand other languages!") - source.add_language(LANGUAGE_CHIMPANZEE) - source.add_language(LANGUAGE_NEAERA) - source.add_language(LANGUAGE_STOK) - source.add_language(LANGUAGE_FARWA) source.add_language(LANGUAGE_UNATHI) source.add_language(LANGUAGE_SIIK) source.add_language(LANGUAGE_SKRELLIAN) + source.add_language(LANGUAGE_ANIMAL) source.add_language(LANGUAGE_SCHECHI) source.add_language(LANGUAGE_BIRDSONG) source.add_language(LANGUAGE_SAGARU) source.add_language(LANGUAGE_CANILUNZT) - source.add_language(LANGUAGE_SLAVIC) source.add_language(LANGUAGE_SOL_COMMON) //In case they're giving a xenomorph an implant or something. - source.add_language(LANGUAGE_TAVAN) + source.add_language(LANGUAGE_TAVAN) /obj/item/weapon/implant/vrlanguage/post_implant(mob/source) source.mind.store_memory("A implant can be activated by using the smile emote, say *smile to attempt to activate.", 0, 0) diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index a100d84cbc..2c0f8d3ef0 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -651,7 +651,7 @@ - + "} diff --git a/code/game/objects/items/weapons/material/chainsaw.dm b/code/game/objects/items/weapons/material/chainsaw.dm index 5f9b06c2e7..f64b41d7f0 100644 --- a/code/game/objects/items/weapons/material/chainsaw.dm +++ b/code/game/objects/items/weapons/material/chainsaw.dm @@ -12,13 +12,13 @@ var/active_force = 55 var/inactive_force = 10 -/obj/item/weapon/chainsaw/Initialize() //YW edit - replaced New with Initialize so chainsaws can be mapped in - . = ..() +/obj/item/weapon/chainsaw/Initialize() var/datum/reagents/R = new/datum/reagents(max_fuel) reagents = R R.my_atom = src R.add_reagent("fuel", max_fuel) START_PROCESSING(SSobj, src) + . = ..() /obj/item/weapon/chainsaw/Destroy() STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm index 6fddd15013..5930c1ad7e 100644 --- a/code/game/objects/items/weapons/melee/misc.dm +++ b/code/game/objects/items/weapons/melee/misc.dm @@ -57,7 +57,7 @@ // Randomizes color /obj/item/weapon/melee/umbrella/random/New() - color = "#"+get_random_colour() + color = get_random_colour() ..() /obj/item/weapon/melee/cursedblade @@ -95,4 +95,4 @@ new_voice.name = "cursed sword" //Cursed swords shouldn't be known characters. new_voice.real_name = "cursed sword" voice_mobs.Add(new_voice) - listening_objects |= src \ No newline at end of file + listening_objects |= src diff --git a/code/game/objects/items/weapons/storage/belt_vr.dm b/code/game/objects/items/weapons/storage/belt_vr.dm index e17a577514..ba7897ba93 100644 --- a/code/game/objects/items/weapons/storage/belt_vr.dm +++ b/code/game/objects/items/weapons/storage/belt_vr.dm @@ -49,7 +49,8 @@ /obj/item/device/cataloguer, /obj/item/device/radio, /obj/item/device/mapping_unit, - /obj/item/weapon/kinetic_crusher + /obj/item/weapon/kinetic_crusher, + /obj/item/device/analyzer ) /obj/item/weapon/storage/belt/explorer/pathfinder @@ -71,17 +72,34 @@ max_w_class = ITEMSIZE_LARGE max_storage_space = ITEMSIZE_COST_NORMAL * 6 can_hold = list( - /obj/item/weapon/storage/box/samplebags, + /obj/item/fulton_core, + /obj/item/extraction_pack, + /obj/item/resonator, + /obj/item/stack/marker_beacon, + /obj/item/stack/flag, + /obj/item/modular_computer/tablet, + /obj/item/clothing/glasses, + /obj/item/clothing/shoes/bhop, + /obj/item/device/multitool, /obj/item/device/core_sampler, /obj/item/device/beacon_locator, - /obj/item/device/radio/beacon, + /obj/item/device/radio, /obj/item/device/measuring_tape, /obj/item/device/flashlight, + /obj/item/device/depth_scanner, + /obj/item/device/camera, + /obj/item/device/ano_scanner, + /obj/item/device/xenoarch_multi_tool, + /obj/item/device/geiger, + /obj/item/device/gps, + /obj/item/device/laser_pointer, + /obj/item/device/survivalcapsule, + /obj/item/device/perfect_tele/one_beacon, + /obj/item/device/binoculars, + /obj/item/weapon/storage/box/samplebags, /obj/item/weapon/cell/device, /obj/item/weapon/pickaxe, /obj/item/weapon/shovel, - /obj/item/device/depth_scanner, - /obj/item/device/camera, /obj/item/weapon/paper, /obj/item/weapon/photo, /obj/item/weapon/folder, @@ -89,17 +107,48 @@ /obj/item/weapon/folder, /obj/item/weapon/clipboard, /obj/item/weapon/anodevice, - /obj/item/clothing/glasses, /obj/item/weapon/tool/wrench, + /obj/item/weapon/tool/screwdriver, /obj/item/weapon/storage/excavation, /obj/item/weapon/anobattery, - /obj/item/device/ano_scanner, - /obj/item/weapon/pickaxe/hand, - /obj/item/device/xenoarch_multi_tool, - /obj/item/weapon/pickaxe/excavationdrill, - /obj/item/device/geiger, - /obj/item/device/gps, + /obj/item/weapon/reagent_containers/hypospray/autoinjector, + /obj/item/weapon/plastique/seismic/locked, + /obj/item/weapon/gun/magnetic/matfed/phoronbore, + /obj/item/weapon/storage/bag/sheetsnatcher, + /obj/item/weapon/melee, + /obj/item/weapon/kinetic_crusher, + /obj/item/weapon/mining_scanner + ) + //Pretty much, if it's in the mining vendor, they should be able to put it on the belt. + +/obj/item/weapon/storage/belt/archaeology + can_hold = list( /obj/item/stack/marker_beacon, - /obj/item/stack/flag, - /obj/item/weapon/melee + /obj/item/clothing/glasses, + /obj/item/weapon/storage/box/samplebags, + /obj/item/device/xenoarch_multi_tool, + /obj/item/device/core_sampler, + /obj/item/device/beacon_locator, + /obj/item/device/radio/beacon, + /obj/item/device/gps, + /obj/item/device/measuring_tape, + /obj/item/device/flashlight, + /obj/item/device/depth_scanner, + /obj/item/device/camera, + /obj/item/device/ano_scanner, + /obj/item/device/geiger, + /obj/item/weapon/cell/device, + /obj/item/weapon/pickaxe, + /obj/item/weapon/paper, + /obj/item/weapon/photo, + /obj/item/weapon/folder, + /obj/item/weapon/pen, + /obj/item/weapon/folder, + /obj/item/weapon/clipboard, + /obj/item/weapon/anodevice, + /obj/item/weapon/tool/wrench, + /obj/item/device/multitool, + /obj/item/weapon/storage/excavation, + /obj/item/weapon/anobattery, + /obj/item/weapon/pickaxe ) \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 36093fa2cf..2fa1e33c03 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -80,16 +80,27 @@ return ..() +/obj/item/weapon/storage/secure/AltClick(mob/user as mob) + if (isliving(user) && Adjacent(user) && (src.locked == 1)) + to_chat(user, "[src] is locked and cannot be opened!") + else if (isliving(user) && Adjacent(user) && (!src.locked)) + src.open(usr) + else + for(var/mob/M in range(1)) + if (M.s_active == src) + src.close(M) + src.add_fingerprint(user) + return /obj/item/weapon/storage/secure/attack_self(mob/user as mob) tgui_interact(user) /obj/item/weapon/storage/secure/tgui_interact(mob/user, datum/tgui/ui = null) - ui = SStgui.try_update_ui(user, src, ui) + ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "SecureSafe", name) ui.open() - + /obj/item/weapon/storage/secure/tgui_data(mob/user) var/list/data = list() data["locked"] = locked diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index d482535968..9b50ff112c 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -1,901 +1,901 @@ -// To clarify: -// For use_to_pickup and allow_quick_gather functionality, -// see item/attackby() (/game/objects/items.dm) -// Do not remove this functionality without good reason, cough reagent_containers cough. -// -Sayu - - -/obj/item/weapon/storage - name = "storage" - icon = 'icons/obj/storage.dmi' - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', - ) - w_class = ITEMSIZE_NORMAL - show_messages = 1 - - /// List of objects which this item can store (if set, it can't store anything else) - var/list/can_hold - /// List of objects which this item can't store (in effect only if can_hold isn't set) - var/list/cant_hold - /// List of mobs which are currently seeing the contents of this item's storage - var/list/is_seeing - - var/max_w_class = ITEMSIZE_SMALL //Max size of objects that this object can store (in effect only if can_hold isn't set) - var/max_storage_space = ITEMSIZE_COST_SMALL * 4 //The sum of the storage costs of all the items in this storage item. - var/storage_slots = null //The number of storage slots in this container. If null, it uses the volume-based storage instead. - - /// Boxes screen object for fixed-size storage (belts, etc) - var/obj/screen/storage/boxes = null - /// List of 'click catchers' for boxes for fixed-size storage - var/list/box_catchers = null - - /// For dynamic storage, the leftmost pixel column for the whole storage display. Most of the interesting effects are hung on this in vis_contents. - var/obj/screen/storage/storage_start = null - /// For dynamic storage, the majority of the width of the whole storage display. Decorative, but sized to the width appropriate to represent how much storage there is. - var/obj/screen/storage/storage_continue = null - /// For dynamic storage, the rightmost pixel column for the whole storage display. Decorative. - var/obj/screen/storage/storage_end = null - - /// The "X" button at the far right of the storage - var/obj/screen/close/closer = null - - var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. - var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number. - var/allow_quick_empty //Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor. - var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. - var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile - var/use_sound = "rustle" //sound played when used. null for no sound. - var/list/starts_with //Things to spawn on the box on spawn - var/empty //Mapper override to spawn an empty version of a container that usually has stuff - /// If you can use this storage while in a pocket - var/pocketable = FALSE - -/obj/item/weapon/storage/Initialize() - . = ..() - - if(allow_quick_empty) - verbs += /obj/item/weapon/storage/verb/quick_empty - else - verbs -= /obj/item/weapon/storage/verb/quick_empty - - if(allow_quick_gather) - verbs += /obj/item/weapon/storage/verb/toggle_gathering_mode - else - verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode - - if(storage_slots) - src.boxes = new /obj/screen/storage( ) - src.boxes.name = "storage" - src.boxes.master = src - src.boxes.icon_state = "block" - src.boxes.screen_loc = "7,7 to 10,8" - else - src.storage_start = new /obj/screen/storage( ) - src.storage_start.name = "storage" - src.storage_start.master = src - src.storage_start.icon_state = "storage_start" - src.storage_start.screen_loc = "7,7 to 10,8" - - src.storage_continue = new /obj/screen/storage( ) - src.storage_continue.name = "storage" - src.storage_continue.master = src - src.storage_continue.icon_state = "storage_continue" - src.storage_continue.screen_loc = "7,7 to 10,8" - - src.storage_end = new /obj/screen/storage( ) - src.storage_end.name = "storage" - src.storage_end.master = src - src.storage_end.icon_state = "storage_end" - src.storage_end.screen_loc = "7,7 to 10,8" - - src.closer = new /obj/screen/close( ) - src.closer.master = src - src.closer.icon_state = "storage_close" - src.closer.hud_layerise() - orient2hud() - - if(LAZYLEN(starts_with) && !empty) - for(var/newtype in starts_with) - var/count = starts_with[newtype] || 1 //Could have left it blank. - while(count) - count-- - new newtype(src) - starts_with = null //Reduce list count. - update_icon() - - calibrate_size() - -/obj/item/weapon/storage/Destroy() - close_all() - clear_slot_catchers() - QDEL_NULL(boxes) - QDEL_NULL(storage_start) - QDEL_NULL(storage_continue) - QDEL_NULL(storage_end) - QDEL_NULL(closer) - - if(ismob(loc)) - var/mob/M = loc - M.remove_from_mob(src) - - . = ..() - -/obj/item/weapon/storage/MouseDrop(obj/over_object as obj) - if(!canremove) - return - - if (isliving(usr) || isobserver(usr)) - - if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why? - return - - if(over_object == usr && Adjacent(usr)) // this must come before the screen objects only block - src.open(usr) - return - - if (!( istype(over_object, /obj/screen) )) - return ..() - - //makes sure that the storage is equipped, so that we can't drag it into our hand from miles away. - //there's got to be a better way of doing this. - if (!(src.loc == usr) || (src.loc && src.loc.loc == usr)) - return - - if (( usr.restrained() ) || ( usr.stat )) - return - - if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src)) - return - - switch(over_object.name) - if("r_hand") - usr.unEquip(src) - usr.put_in_r_hand(src) - if("l_hand") - usr.unEquip(src) - usr.put_in_l_hand(src) - src.add_fingerprint(usr) - -/obj/item/weapon/storage/AltClick(mob/user) - if(user in is_seeing) - src.close(user) - // I would think there should be some incap check here or something - // But MouseDrop doesn't use one (as of this writing), so... - else if(isliving(user) && Adjacent(user)) - src.open(user) - else - return ..() - -/obj/item/weapon/storage/proc/return_inv() - - var/list/L = list( ) - - L += src.contents - - for(var/obj/item/weapon/storage/S in src) - L += S.return_inv() - for(var/obj/item/weapon/gift/G in src) - L += G.gift - if (istype(G.gift, /obj/item/weapon/storage)) - L += G.gift:return_inv() - return L - -/obj/item/weapon/storage/proc/show_to(mob/user as mob) - if(user.s_active != src) - for(var/obj/item/I in src) - if(I.on_found(user)) - return - if(user.s_active) - user.s_active.hide_from(user) - - var/client/C = user.client - if(!C) - return - - if(storage_slots) - C.screen += src.boxes - create_slot_catchers() - C.screen += src.box_catchers - else - C.screen += src.storage_start - C.screen += src.storage_continue - C.screen += src.storage_end - - C.screen += src.closer - C.screen += src.contents - - user.s_active = src - LAZYDISTINCTADD(is_seeing,user) - -/obj/item/weapon/storage/proc/hide_from(mob/user as mob) - var/client/C = user.client - LAZYREMOVE(is_seeing,user) - - if(!C) - if(!LAZYLEN(is_seeing)) - clear_slot_catchers() - return - - if(storage_slots) - C.screen -= src.boxes - C.screen -= src.box_catchers - else - C.screen -= src.storage_start - C.screen -= src.storage_continue - C.screen -= src.storage_end - - C.screen -= src.closer - C.screen -= src.contents - - if(user.s_active == src) - user.s_active = null - - if(!LAZYLEN(is_seeing)) - clear_slot_catchers() - -/obj/item/weapon/storage/proc/open(mob/user as mob) - if (use_sound) - playsound(src, src.use_sound, 50, 0, -5) - - orient2hud(user) - if(user.s_active) - user.s_active.close(user) - show_to(user) - -/obj/item/weapon/storage/proc/close(mob/user as mob) - src.hide_from(user) - user.s_active = null - return - -/obj/item/weapon/storage/proc/close_all() - for(var/mob/M in can_see_contents()) - close(M) - . = 1 - -/obj/item/weapon/storage/proc/can_see_contents() - var/list/cansee = list() - for(var/mob/M in is_seeing) - if(M.s_active == src && M.client) - cansee |= M - else - LAZYREMOVE(is_seeing,M) - return cansee - -/obj/item/weapon/storage/proc/create_slot_catchers() - clear_slot_catchers() - var/list/new_catchers = list() - for(var/obj/item/I in contents) - var/atom/movable/storage_slot/SS = new(null, I) - SS.screen_loc = I.screen_loc - SS.mouse_opacity = MOUSE_OPACITY_OPAQUE - new_catchers += SS - box_catchers = new_catchers - -/obj/item/weapon/storage/proc/clear_slot_catchers() - if(box_catchers) - for(var/mob/M in is_seeing) - M.client?.screen -= box_catchers - QDEL_LIST_NULL(box_catchers) - -//This proc draws out the inventory and places the items on it. tx and ty are the upper left tile and mx, my are the bottm right. -//The numbers are calculated from the bottom-left The bottom-left slot being 1,1. -/obj/item/weapon/storage/proc/orient_objs(tx, ty, mx, my) - var/cx = tx - var/cy = ty - src.boxes.screen_loc = "[tx]:,[ty] to [mx],[my]" - for(var/obj/O in src.contents) - O.screen_loc = "[cx],[cy]" - O.hud_layerise() - cx++ - if (cx > mx) - cx = tx - cy-- - src.closer.screen_loc = "[mx+1],[my]" - return - -//This proc draws out the inventory and places the items on it. It uses the standard position. -/obj/item/weapon/storage/proc/slot_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents) - var/cx = 4 - var/cy = 2+rows - src.boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16" - - if(display_contents_with_number) - for(var/datum/numbered_display/ND in display_contents) - ND.sample_object.screen_loc = "[cx]:16,[cy]:16" - ND.sample_object.maptext = "[(ND.number > 1)? "[ND.number]" : ""]" - ND.sample_object.hud_layerise() - var/atom/movable/storage_slot/SS = new(null, ND.sample_object) - SS.screen_loc = ND.sample_object.screen_loc - SS.mouse_opacity = MOUSE_OPACITY_OPAQUE - cx++ - if (cx > (4+cols)) - cx = 4 - cy-- - else - for(var/obj/O in contents) - O.screen_loc = "[cx]:16,[cy]:16" - O.maptext = "" - O.hud_layerise() - var/atom/movable/storage_slot/SS = new(null, O) - SS.screen_loc = O.screen_loc - SS.mouse_opacity = MOUSE_OPACITY_OPAQUE - cx++ - if (cx > (4+cols)) - cx = 4 - cy-- - src.closer.screen_loc = "[4+cols+1]:16,2:16" - return - -/obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents) - SHOULD_NOT_SLEEP(TRUE) - - /// A prototype for drawing the leftmost border behind each item in storage - var/static/mutable_appearance/stored_start - /// A prototype for drawing the wide backing space behind each item in storage - var/static/mutable_appearance/stored_continue - /// A prototype for drawing the rightmost border behind each item in storage - var/static/mutable_appearance/stored_end - - if(!stored_start) - // Because these are static and manipulated all the time by different storages, you'd better make 100000% sure this proc never sleeps - stored_start = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_start", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) - stored_continue = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_continue", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) - stored_end = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_end", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) - - var/baseline_max_storage_space = INVENTORY_STANDARD_SPACE / 2 //should be equal to default backpack capacity // This is a lie. - // Above var is misleading, what it does upon changing is makes smaller inventory sizes have smaller space on the UI. - // It's cut in half because otherwise boxes of IDs and other tiny items are unbearably cluttered. - - var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space - var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item - var/storage_width = min( round( 224 * max_storage_space/baseline_max_storage_space ,1) ,274) //length of sprite for the box representing total storage space - - QDEL_LIST_NULL(storage_start.vis_contents) - - var/matrix/M = matrix() - M.Scale((storage_width-storage_cap_width*2+3)/32,1) - src.storage_continue.transform = M - - src.storage_start.screen_loc = "4:16,2:16" - src.storage_continue.screen_loc = "4:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],2:16" - src.storage_end.screen_loc = "4:[19+storage_width-storage_cap_width],2:16" - - var/startpoint = 0 - var/endpoint = 1 - - for(var/obj/item/O in contents) - var/atom/movable/storage_slot/SS = new(null, O) - startpoint = endpoint + 1 - endpoint += storage_width * O.get_storage_cost()/max_storage_space - - var/matrix/M_start = matrix() - var/matrix/M_continue = matrix() - var/matrix/M_end = matrix() - M_start.Translate(startpoint,0) - M_continue.Scale((endpoint-startpoint-stored_cap_width*2)/32,1) - M_continue.Translate(startpoint+stored_cap_width+(endpoint-startpoint-stored_cap_width*2)/2 - 16,0) - M_end.Translate(endpoint-stored_cap_width,0) - stored_start.transform = M_start - stored_continue.transform = M_continue - stored_end.transform = M_end - SS.add_overlay(list(stored_start, stored_continue, stored_end)) - - O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16" - O.maptext = "" - O.hud_layerise() - storage_start.vis_contents += SS - - src.closer.screen_loc = "4:[storage_width+19],2:16" - return - -/datum/numbered_display - var/obj/item/sample_object - var/number - -/datum/numbered_display/New(obj/item/sample as obj) - if(!istype(sample)) - qdel(src) - sample_object = sample - number = 1 - -//This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing. -/obj/item/weapon/storage/proc/orient2hud(mob/user as mob) - - var/adjusted_contents = contents.len - - //Numbered contents display - var/list/datum/numbered_display/numbered_contents - if(display_contents_with_number) - numbered_contents = list() - adjusted_contents = 0 - for(var/obj/item/I in contents) - var/found = 0 - for(var/datum/numbered_display/ND in numbered_contents) - if(ND.sample_object.type == I.type) - ND.number++ - found = 1 - break - if(!found) - adjusted_contents++ - numbered_contents.Add( new/datum/numbered_display(I) ) - - if(storage_slots == null) - src.space_orient_objs(numbered_contents) - else - var/row_num = 0 - var/col_count = min(7,storage_slots) -1 - if (adjusted_contents > 7) - row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - src.slot_orient_objs(row_num, col_count, numbered_contents) - return - -//This proc return 1 if the item can be picked up and 0 if it can't. -//Set the stop_messages to stop it from printing messages -/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0) - if(!istype(W)) return //Not an item - - if(usr && usr.isEquipped(W) && !usr.canUnEquip(W)) - return 0 - - if(src.loc == W) - return 0 //Means the item is already in the storage item - if(storage_slots != null && contents.len >= storage_slots) - if(!stop_messages) - to_chat(usr, "[src] is full, make some space.") - return 0 //Storage item is full - - if(LAZYLEN(can_hold) && !is_type_in_list(W, can_hold)) - if(!stop_messages) - if (istype(W, /obj/item/weapon/hand_labeler)) - return 0 - to_chat(usr, "[src] cannot hold [W].") - return 0 - - if(LAZYLEN(cant_hold) && is_type_in_list(W, cant_hold)) - if(!stop_messages) - to_chat(usr, "[src] cannot hold [W].") - return 0 - - if (max_w_class != null && W.w_class > max_w_class) - if(!stop_messages) - to_chat(usr, "[W] is too long for \the [src].") - return 0 - - var/total_storage_space = W.get_storage_cost() - for(var/obj/item/I in contents) - total_storage_space += I.get_storage_cost() //Adds up the combined w_classes which will be in the storage item if the item is added to it. - - if(total_storage_space > max_storage_space) - if(!stop_messages) - to_chat(usr, "[src] is too full, make some space.") - return 0 - - if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage))) - if(!stop_messages) - to_chat(usr, "[src] cannot hold [W] as it's a storage item of the same size.") - return 0 //To prevent the stacking of same sized storage items. - - return 1 - -//This proc handles items being inserted. It does not perform any checks of whether an item can or can't be inserted. That's done by can_be_inserted() -//The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once, -//such as when picking up all the items on a tile with one click. -/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) - if(!istype(W)) return 0 - - if(!stall_insertion(W, usr)) // Can sleep here and delay removal for slow storage - return 0 - - if(usr) - usr.remove_from_mob(W,target = src) //If given a target, handles forceMove() - W.on_enter_storage(src) - if (usr.client && usr.s_active != src) - usr.client.screen -= W - W.dropped(usr) - add_fingerprint(usr) - if (use_sound) - playsound(src, src.use_sound, 50, 0, -5) //Something broke "add item to container" sounds, this is a hacky fix. - - if(!prevent_warning) - for(var/mob/M in viewers(usr, null)) - if (M == usr) - to_chat(usr, "You put \the [W] into [src].") - else if (M in range(1)) //If someone is standing close enough, they can tell what it is... - M.show_message("\The [usr] puts [W] into [src].") - else if (W && W.w_class >= 3) //Otherwise they can only see large or normal items from a distance... - M.show_message("\The [usr] puts [W] into [src].") - - src.orient2hud(usr) - if(usr.s_active) - usr.s_active.show_to(usr) - else - W.forceMove(src) - W.on_enter_storage(src) - - update_icon() - return 1 - -//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target -/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location) - if(!istype(W)) return 0 - - if(!stall_removal(W, usr)) // Can sleep here and delay removal for slow storage - return 0 - - if(istype(src, /obj/item/weapon/storage/fancy)) - var/obj/item/weapon/storage/fancy/F = src - F.update_icon(1) - - for(var/mob/M in is_seeing) - if(!M.client || QDELETED(M)) - hide_from(M) - else - M.client.screen -= W - - if(new_location) - if(ismob(loc)) - W.dropped(usr) - if(ismob(new_location)) - W.hud_layerise() - else - W.reset_plane_and_layer() - W.forceMove(new_location) - else - W.forceMove(get_turf(src)) - - for(var/mob/M in is_seeing) - if(M.s_active == src) - orient2hud(M) - show_to(M) - if(W.maptext) - W.maptext = "" - W.on_exit_storage(src) - update_icon() - return 1 - -/// Called before insertion completes, allowing you to delay or cancel it -/obj/item/weapon/storage/proc/stall_insertion(obj/item/W, mob/user) - return TRUE - -/// Called before removal completes, allowing you to delay or cancel it -/obj/item/weapon/storage/proc/stall_removal(obj/item/W, mob/user) - return TRUE - -//This proc is called when you want to place an item into the storage item. -/obj/item/weapon/storage/attackby(obj/item/W as obj, mob/user as mob) - ..() - - if(isrobot(user)) - return //Robots can't interact with storage items. - - if(istype(W, /obj/item/device/lightreplacer)) - var/obj/item/device/lightreplacer/LP = W - var/amt_inserted = 0 - var/turf/T = get_turf(user) - for(var/obj/item/weapon/light/L in src.contents) - if(L.status == 0) - if(LP.uses < LP.max_uses) - LP.add_uses(1) - amt_inserted++ - remove_from_storage(L, T) - qdel(L) - if(amt_inserted) - to_chat(user, "You inserted [amt_inserted] light\s into \the [LP.name]. You have [LP.uses] light\s remaining.") - return - - if(!can_be_inserted(W)) - return - - if(istype(W, /obj/item/weapon/tray)) - var/obj/item/weapon/tray/T = W - if(T.calc_carry() > 0) - if(prob(85)) - to_chat(user, "The tray won't fit in [src].") - return - else - W.forceMove(get_turf(user)) - if ((user.client && user.s_active != src)) - user.client.screen -= W - W.dropped(user) - to_chat(user, "God damn it!") - - W.add_fingerprint(user) - return handle_item_insertion(W) - -/obj/item/weapon/storage/dropped(mob/user as mob) - return - -/obj/item/weapon/storage/attack_hand(mob/user as mob) - if(ishuman(user) && !pocketable) - var/mob/living/carbon/human/H = user - if(H.l_store == src && !H.get_active_hand()) //Prevents opening if it's in a pocket. - H.put_in_hands(src) - H.l_store = null - return - if(H.r_store == src && !H.get_active_hand()) - H.put_in_hands(src) - H.r_store = null - return - - if (src.loc == user) - src.open(user) - else - ..() - for(var/mob/M in range(1)) - if (M.s_active == src) - src.close(M) - src.add_fingerprint(user) - return - -/obj/item/weapon/storage/proc/gather_all(turf/T as turf, mob/user as mob) - var/list/rejections = list() - var/success = 0 - var/failure = 0 - - for(var/obj/item/I in T) - if(I.type in rejections) // To limit bag spamming: any given type only complains once - continue - if(!can_be_inserted(I, user)) // Note can_be_inserted still makes noise when the answer is no - rejections += I.type // therefore full bags are still a little spammy - failure = 1 - continue - success = 1 - handle_item_insertion(I, 1) //The 1 stops the "You put the [src] into [S]" insertion message from being displayed. - if(success && !failure) - to_chat(user, "You put everything in [src].") - else if(success) - to_chat(user, "You put some things in [src].") - else - to_chat(user, "You fail to pick anything up with \the [src].") - -/obj/item/weapon/storage/verb/toggle_gathering_mode() - set name = "Switch Gathering Method" - set category = "Object" - - collection_mode = !collection_mode - switch (collection_mode) - if(1) - to_chat(usr, "[src] now picks up all items on a tile at once.") - if(0) - to_chat(usr, "[src] now picks up one item at a time.") - - -/obj/item/weapon/storage/verb/quick_empty() - set name = "Empty Contents" - set category = "Object" - set src in view(1) - - // Only humans and robots can dump contents - if(!(ishuman(usr) || isrobot(usr))) - return - - // Hard to do when you're KO'd - if(usr.incapacitated()) - return - - // Has to be at least adjacent (just for safety, src in view should handle this already) - if(!Adjacent(usr)) - return - - //VOREStation Add: No turf dumping if user is in a belly - if(isbelly(usr.loc)) - return - - drop_contents() - -/obj/item/weapon/storage/proc/drop_contents() // why is this a proc? literally just for RPEDs - hide_from(usr) - var/turf/T = get_turf(src) - for(var/obj/item/I in contents) - remove_from_storage(I, T) - -/obj/item/weapon/storage/proc/calibrate_size() - var/total_storage_space = 0 - for(var/obj/item/I in contents) - total_storage_space += I.get_storage_cost() - max_storage_space = max(total_storage_space,max_storage_space) //Prevents spawned containers from being too small for their contents. - -/obj/item/weapon/storage/emp_act(severity) - if(!istype(src.loc, /mob/living)) - for(var/obj/O in contents) - O.emp_act(severity) - ..() - -/obj/item/weapon/storage/attack_self(mob/user as mob) - if((user.get_active_hand() == src) || (isrobot(user)) && allow_quick_empty) - if(src.verbs.Find(/obj/item/weapon/storage/verb/quick_empty)) - src.quick_empty() - return 1 - -//Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area). -//Returns -1 if the atom was not found on container. -/atom/proc/storage_depth(atom/container) - var/depth = 0 - var/atom/cur_atom = src - - while (cur_atom && !(cur_atom in container.contents)) - if (isarea(cur_atom)) - return -1 - if (istype(cur_atom.loc, /obj/item/weapon/storage)) - depth++ - cur_atom = cur_atom.loc - - if (!cur_atom) - return -1 //inside something with a null loc. - - return depth - -//Like storage depth, but returns the depth to the nearest turf -//Returns -1 if no top level turf (a loc was null somewhere, or a non-turf atom's loc was an area somehow). -/atom/proc/storage_depth_turf() - var/depth = 0 - var/atom/cur_atom = src - - while (cur_atom && !isturf(cur_atom)) - if (isarea(cur_atom)) - return -1 - if (istype(cur_atom.loc, /obj/item/weapon/storage)) - depth++ - cur_atom = cur_atom.loc - - if (!cur_atom) - return -1 //inside something with a null loc. - - return depth - -// See inventory_sizes.dm for the defines. -/obj/item/proc/get_storage_cost() - if (storage_cost) - return storage_cost - else - switch(w_class) - if(ITEMSIZE_TINY) - return ITEMSIZE_COST_TINY - if(ITEMSIZE_SMALL) - return ITEMSIZE_COST_SMALL - if(ITEMSIZE_NORMAL) - return ITEMSIZE_COST_NORMAL - if(ITEMSIZE_LARGE) - return ITEMSIZE_COST_LARGE - if(ITEMSIZE_HUGE) - return ITEMSIZE_COST_HUGE - else - return ITEMSIZE_COST_NO_CONTAINER - -/obj/item/weapon/storage/proc/make_exact_fit() - storage_slots = contents.len - - LAZYCLEARLIST(can_hold) - can_hold = list() - max_w_class = 0 - max_storage_space = 0 - for(var/obj/item/I in src) - can_hold[I.type]++ - max_w_class = max(I.w_class, max_w_class) - max_storage_space += I.get_storage_cost() - -/* - * Trinket Box - READDING SOON - */ -/obj/item/weapon/storage/trinketbox - name = "trinket box" - desc = "A box that can hold small trinkets, such as a ring." - icon = 'icons/obj/items.dmi' - icon_state = "trinketbox" - var/open = 0 - storage_slots = 1 - can_hold = list( - /obj/item/clothing/gloves/ring, - /obj/item/weapon/coin, - /obj/item/clothing/accessory/medal - ) - var/open_state - var/closed_state - -/obj/item/weapon/storage/trinketbox/update_icon() - cut_overlays() - if(open) - icon_state = open_state - - if(contents.len >= 1) - var/contained_image = null - if(istype(contents[1], /obj/item/clothing/gloves/ring)) - contained_image = "ring_trinket" - else if(istype(contents[1], /obj/item/weapon/coin)) - contained_image = "coin_trinket" - else if(istype(contents[1], /obj/item/clothing/accessory/medal)) - contained_image = "medal_trinket" - if(contained_image) - add_overlay(contained_image) - else - icon_state = closed_state - -/obj/item/weapon/storage/trinketbox/New() - if(!open_state) - open_state = "[initial(icon_state)]_open" - if(!closed_state) - closed_state = "[initial(icon_state)]" - ..() - -/obj/item/weapon/storage/trinketbox/attack_self() - open = !open - update_icon() - ..() - -/obj/item/weapon/storage/trinketbox/examine(mob/user) - . = ..() - if(open && contents.len) - var/display_item = contents[1] - . += "\The [src] contains \the [display_item]!" - -/obj/item/weapon/storage/AllowDrop() - return TRUE - -//Useful for spilling the contents of containers all over the floor -/obj/item/weapon/storage/proc/spill(var/dist = 2, var/turf/T = null) - if (!istype(T))//If its not on the floor this might cause issues - T = get_turf(src) - - for (var/obj/O in contents) - remove_from_storage(O, T) - O.tumble(2) - -/// Hangar for storage backdrops, so that we can redirect clicks from them to our item for QOL -/atom/movable/storage_slot - name = "stored - " - icon = 'icons/effects/effects.dmi' - icon_state = "nothing" - plane = PLANE_PLAYER_HUD_ITEMS - layer = 0.1 - alpha = 200 - var/weakref/held_item - -/atom/movable/storage_slot/New(newloc, obj/item/held_item) - ASSERT(held_item) - name += held_item.name - src.held_item = weakref(held_item) - -/atom/movable/storage_slot/Destroy() - held_item = null - -/// Has to be this way. The fact that the overlays will be constantly mutated by other storage means we can't wait. -/atom/movable/storage_slot/add_overlay(list/somethings) - ASSERT(islist(somethings)) - overlays = somethings - -/atom/movable/storage_slot/Click() - var/obj/item/I = held_item?.resolve() - if(I) - usr.ClickOn(I) - return 1 - -// Allows micros to drag themselves into storage items -/obj/item/weapon/storage/MouseDrop_T(mob/living/target, mob/living/user) - if(!istype(user)) return // If the user passed in isn't a living mob, exit - if(target != user) return // If the user didn't drag themselves, exit - if(user.incapacitated() || user.buckled) return // If user is incapacitated or buckled, exit - if(get_holder_of_type(src, /mob/living/carbon/human) == user) return // No jumping into your own equipment - if(ishuman(user) && user.get_effective_size() > 0.25) return // Only micro characters - if(ismouse(user) && user.get_effective_size() > 1) return // Only normal sized mice or less - - // Create a dummy holder with user's size to test insertion - var/obj/item/weapon/holder/D = new/obj/item/weapon/holder - if(ismouse(user)) - D.w_class = ITEMSIZE_TINY // Mouse smol - else if(ishuman(user)) - D.w_class = ITEMSIZE_SMALL // Players small - else // Other creatures not accepted at this time - qdel(D) // If there's a better way to check the size of a - return // mob's holder and if it fits, replace this slab - if(!src.can_be_inserted(D, 1)) // If the dummy item doesn't fit, exit - qdel(D) - return - qdel(D) - - // Scoop and insert target into storage - var/obj/item/weapon/holder/H = new user.holder_type(get_turf(user), user) - src.handle_item_insertion(H, 1) - to_chat(user, "You climb into \the [src].") - return ..() +// To clarify: +// For use_to_pickup and allow_quick_gather functionality, +// see item/attackby() (/game/objects/items.dm) +// Do not remove this functionality without good reason, cough reagent_containers cough. +// -Sayu + + +/obj/item/weapon/storage + name = "storage" + icon = 'icons/obj/storage.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_storage.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_storage.dmi', + ) + w_class = ITEMSIZE_NORMAL + show_messages = 1 + + /// List of objects which this item can store (if set, it can't store anything else) + var/list/can_hold + /// List of objects which this item can't store (in effect only if can_hold isn't set) + var/list/cant_hold + /// List of mobs which are currently seeing the contents of this item's storage + var/list/is_seeing + + var/max_w_class = ITEMSIZE_SMALL //Max size of objects that this object can store (in effect only if can_hold isn't set) + var/max_storage_space = ITEMSIZE_COST_SMALL * 4 //The sum of the storage costs of all the items in this storage item. + var/storage_slots = null //The number of storage slots in this container. If null, it uses the volume-based storage instead. + + /// Boxes screen object for fixed-size storage (belts, etc) + var/obj/screen/storage/boxes = null + /// List of 'click catchers' for boxes for fixed-size storage + var/list/box_catchers = null + + /// For dynamic storage, the leftmost pixel column for the whole storage display. Most of the interesting effects are hung on this in vis_contents. + var/obj/screen/storage/storage_start = null + /// For dynamic storage, the majority of the width of the whole storage display. Decorative, but sized to the width appropriate to represent how much storage there is. + var/obj/screen/storage/storage_continue = null + /// For dynamic storage, the rightmost pixel column for the whole storage display. Decorative. + var/obj/screen/storage/storage_end = null + + /// The "X" button at the far right of the storage + var/obj/screen/close/closer = null + + var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. + var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number. + var/allow_quick_empty //Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor. + var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. + var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile + var/use_sound = "rustle" //sound played when used. null for no sound. + var/list/starts_with //Things to spawn on the box on spawn + var/empty //Mapper override to spawn an empty version of a container that usually has stuff + /// If you can use this storage while in a pocket + var/pocketable = FALSE + +/obj/item/weapon/storage/Initialize() + . = ..() + + if(allow_quick_empty) + verbs += /obj/item/weapon/storage/verb/quick_empty + else + verbs -= /obj/item/weapon/storage/verb/quick_empty + + if(allow_quick_gather) + verbs += /obj/item/weapon/storage/verb/toggle_gathering_mode + else + verbs -= /obj/item/weapon/storage/verb/toggle_gathering_mode + + if(storage_slots) + src.boxes = new /obj/screen/storage( ) + src.boxes.name = "storage" + src.boxes.master = src + src.boxes.icon_state = "block" + src.boxes.screen_loc = "7,7 to 10,8" + else + src.storage_start = new /obj/screen/storage( ) + src.storage_start.name = "storage" + src.storage_start.master = src + src.storage_start.icon_state = "storage_start" + src.storage_start.screen_loc = "7,7 to 10,8" + + src.storage_continue = new /obj/screen/storage( ) + src.storage_continue.name = "storage" + src.storage_continue.master = src + src.storage_continue.icon_state = "storage_continue" + src.storage_continue.screen_loc = "7,7 to 10,8" + + src.storage_end = new /obj/screen/storage( ) + src.storage_end.name = "storage" + src.storage_end.master = src + src.storage_end.icon_state = "storage_end" + src.storage_end.screen_loc = "7,7 to 10,8" + + src.closer = new /obj/screen/close( ) + src.closer.master = src + src.closer.icon_state = "storage_close" + src.closer.hud_layerise() + orient2hud() + + if(LAZYLEN(starts_with) && !empty) + for(var/newtype in starts_with) + var/count = starts_with[newtype] || 1 //Could have left it blank. + while(count) + count-- + new newtype(src) + starts_with = null //Reduce list count. + update_icon() + + calibrate_size() + +/obj/item/weapon/storage/Destroy() + close_all() + clear_slot_catchers() + QDEL_NULL(boxes) + QDEL_NULL(storage_start) + QDEL_NULL(storage_continue) + QDEL_NULL(storage_end) + QDEL_NULL(closer) + + if(ismob(loc)) + var/mob/M = loc + M.remove_from_mob(src) + + . = ..() + +/obj/item/weapon/storage/MouseDrop(obj/over_object as obj) + if(!canremove) + return + + if (isliving(usr) || isobserver(usr)) + + if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why? + return + + if(over_object == usr && Adjacent(usr)) // this must come before the screen objects only block + src.open(usr) + return + + if (!( istype(over_object, /obj/screen) )) + return ..() + + //makes sure that the storage is equipped, so that we can't drag it into our hand from miles away. + //there's got to be a better way of doing this. + if (!(src.loc == usr) || (src.loc && src.loc.loc == usr)) + return + + if (( usr.restrained() ) || ( usr.stat )) + return + + if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src)) + return + + switch(over_object.name) + if("r_hand") + usr.unEquip(src) + usr.put_in_r_hand(src) + if("l_hand") + usr.unEquip(src) + usr.put_in_l_hand(src) + src.add_fingerprint(usr) + +/obj/item/weapon/storage/AltClick(mob/user) + if(user in is_seeing) + src.close(user) + // I would think there should be some incap check here or something + // But MouseDrop doesn't use one (as of this writing), so... + else if(isliving(user) && Adjacent(user)) + src.open(user) + else + return ..() + +/obj/item/weapon/storage/proc/return_inv() + + var/list/L = list( ) + + L += src.contents + + for(var/obj/item/weapon/storage/S in src) + L += S.return_inv() + for(var/obj/item/weapon/gift/G in src) + L += G.gift + if (istype(G.gift, /obj/item/weapon/storage)) + L += G.gift:return_inv() + return L + +/obj/item/weapon/storage/proc/show_to(mob/user as mob) + if(user.s_active != src) + for(var/obj/item/I in src) + if(I.on_found(user)) + return + if(user.s_active) + user.s_active.hide_from(user) + + var/client/C = user.client + if(!C) + return + + if(storage_slots) + C.screen += src.boxes + create_slot_catchers() + C.screen += src.box_catchers + else + C.screen += src.storage_start + C.screen += src.storage_continue + C.screen += src.storage_end + + C.screen += src.closer + C.screen += src.contents + + user.s_active = src + LAZYDISTINCTADD(is_seeing,user) + +/obj/item/weapon/storage/proc/hide_from(mob/user as mob) + var/client/C = user.client + LAZYREMOVE(is_seeing,user) + + if(!C) + if(!LAZYLEN(is_seeing)) + clear_slot_catchers() + return + + if(storage_slots) + C.screen -= src.boxes + C.screen -= src.box_catchers + else + C.screen -= src.storage_start + C.screen -= src.storage_continue + C.screen -= src.storage_end + + C.screen -= src.closer + C.screen -= src.contents + + if(user.s_active == src) + user.s_active = null + + if(!LAZYLEN(is_seeing)) + clear_slot_catchers() + +/obj/item/weapon/storage/proc/open(mob/user as mob) + if (use_sound) + playsound(src, src.use_sound, 50, 0, -5) + + orient2hud(user) + if(user.s_active) + user.s_active.close(user) + show_to(user) + +/obj/item/weapon/storage/proc/close(mob/user as mob) + src.hide_from(user) + user.s_active = null + return + +/obj/item/weapon/storage/proc/close_all() + for(var/mob/M in can_see_contents()) + close(M) + . = 1 + +/obj/item/weapon/storage/proc/can_see_contents() + var/list/cansee = list() + for(var/mob/M in is_seeing) + if(M.s_active == src && M.client) + cansee |= M + else + LAZYREMOVE(is_seeing,M) + return cansee + +/obj/item/weapon/storage/proc/create_slot_catchers() + clear_slot_catchers() + var/list/new_catchers = list() + for(var/obj/item/I in contents) + var/atom/movable/storage_slot/SS = new(null, I) + SS.screen_loc = I.screen_loc + SS.mouse_opacity = MOUSE_OPACITY_OPAQUE + new_catchers += SS + box_catchers = new_catchers + +/obj/item/weapon/storage/proc/clear_slot_catchers() + if(box_catchers) + for(var/mob/M in is_seeing) + M.client?.screen -= box_catchers + QDEL_LIST_NULL(box_catchers) + +//This proc draws out the inventory and places the items on it. tx and ty are the upper left tile and mx, my are the bottm right. +//The numbers are calculated from the bottom-left The bottom-left slot being 1,1. +/obj/item/weapon/storage/proc/orient_objs(tx, ty, mx, my) + var/cx = tx + var/cy = ty + src.boxes.screen_loc = "[tx]:,[ty] to [mx],[my]" + for(var/obj/O in src.contents) + O.screen_loc = "[cx],[cy]" + O.hud_layerise() + cx++ + if (cx > mx) + cx = tx + cy-- + src.closer.screen_loc = "[mx+1],[my]" + return + +//This proc draws out the inventory and places the items on it. It uses the standard position. +/obj/item/weapon/storage/proc/slot_orient_objs(var/rows, var/cols, var/list/obj/item/display_contents) + var/cx = 4 + var/cy = 2+rows + src.boxes.screen_loc = "4:16,2:16 to [4+cols]:16,[2+rows]:16" + + if(display_contents_with_number) + for(var/datum/numbered_display/ND in display_contents) + ND.sample_object.screen_loc = "[cx]:16,[cy]:16" + ND.sample_object.maptext = "[(ND.number > 1)? "[ND.number]" : ""]" + ND.sample_object.hud_layerise() + var/atom/movable/storage_slot/SS = new(null, ND.sample_object) + SS.screen_loc = ND.sample_object.screen_loc + SS.mouse_opacity = MOUSE_OPACITY_OPAQUE + cx++ + if (cx > (4+cols)) + cx = 4 + cy-- + else + for(var/obj/O in contents) + O.screen_loc = "[cx]:16,[cy]:16" + O.maptext = "" + O.hud_layerise() + var/atom/movable/storage_slot/SS = new(null, O) + SS.screen_loc = O.screen_loc + SS.mouse_opacity = MOUSE_OPACITY_OPAQUE + cx++ + if (cx > (4+cols)) + cx = 4 + cy-- + src.closer.screen_loc = "[4+cols+1]:16,2:16" + return + +/obj/item/weapon/storage/proc/space_orient_objs(var/list/obj/item/display_contents) + SHOULD_NOT_SLEEP(TRUE) + + /// A prototype for drawing the leftmost border behind each item in storage + var/static/mutable_appearance/stored_start + /// A prototype for drawing the wide backing space behind each item in storage + var/static/mutable_appearance/stored_continue + /// A prototype for drawing the rightmost border behind each item in storage + var/static/mutable_appearance/stored_end + + if(!stored_start) + // Because these are static and manipulated all the time by different storages, you'd better make 100000% sure this proc never sleeps + stored_start = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_start", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) + stored_continue = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_continue", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) + stored_end = mutable_appearance(icon = 'icons/mob/screen1.dmi', icon_state = "stored_end", layer = 0.1, plane = PLANE_PLAYER_HUD_ITEMS) + + var/baseline_max_storage_space = INVENTORY_STANDARD_SPACE / 2 //should be equal to default backpack capacity // This is a lie. + // Above var is misleading, what it does upon changing is makes smaller inventory sizes have smaller space on the UI. + // It's cut in half because otherwise boxes of IDs and other tiny items are unbearably cluttered. + + var/storage_cap_width = 2 //length of sprite for start and end of the box representing total storage space + var/stored_cap_width = 4 //length of sprite for start and end of the box representing the stored item + var/storage_width = min( round( 224 * max_storage_space/baseline_max_storage_space ,1) ,274) //length of sprite for the box representing total storage space + + QDEL_LIST_NULL(storage_start.vis_contents) + + var/matrix/M = matrix() + M.Scale((storage_width-storage_cap_width*2+3)/32,1) + src.storage_continue.transform = M + + src.storage_start.screen_loc = "4:16,2:16" + src.storage_continue.screen_loc = "4:[storage_cap_width+(storage_width-storage_cap_width*2)/2+2],2:16" + src.storage_end.screen_loc = "4:[19+storage_width-storage_cap_width],2:16" + + var/startpoint = 0 + var/endpoint = 1 + + for(var/obj/item/O in contents) + var/atom/movable/storage_slot/SS = new(null, O) + startpoint = endpoint + 1 + endpoint += storage_width * O.get_storage_cost()/max_storage_space + + var/matrix/M_start = matrix() + var/matrix/M_continue = matrix() + var/matrix/M_end = matrix() + M_start.Translate(startpoint,0) + M_continue.Scale((endpoint-startpoint-stored_cap_width*2)/32,1) + M_continue.Translate(startpoint+stored_cap_width+(endpoint-startpoint-stored_cap_width*2)/2 - 16,0) + M_end.Translate(endpoint-stored_cap_width,0) + stored_start.transform = M_start + stored_continue.transform = M_continue + stored_end.transform = M_end + SS.add_overlay(list(stored_start, stored_continue, stored_end)) + + O.screen_loc = "4:[round((startpoint+endpoint)/2)+2],2:16" + O.maptext = "" + O.hud_layerise() + storage_start.vis_contents += SS + + src.closer.screen_loc = "4:[storage_width+19],2:16" + return + +/datum/numbered_display + var/obj/item/sample_object + var/number + +/datum/numbered_display/New(obj/item/sample as obj) + if(!istype(sample)) + qdel(src) + sample_object = sample + number = 1 + +//This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing. +/obj/item/weapon/storage/proc/orient2hud(mob/user as mob) + + var/adjusted_contents = contents.len + + //Numbered contents display + var/list/datum/numbered_display/numbered_contents + if(display_contents_with_number) + numbered_contents = list() + adjusted_contents = 0 + for(var/obj/item/I in contents) + var/found = 0 + for(var/datum/numbered_display/ND in numbered_contents) + if(ND.sample_object.type == I.type) + ND.number++ + found = 1 + break + if(!found) + adjusted_contents++ + numbered_contents.Add( new/datum/numbered_display(I) ) + + if(storage_slots == null) + src.space_orient_objs(numbered_contents) + else + var/row_num = 0 + var/col_count = min(7,storage_slots) -1 + if (adjusted_contents > 7) + row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. + src.slot_orient_objs(row_num, col_count, numbered_contents) + return + +//This proc return 1 if the item can be picked up and 0 if it can't. +//Set the stop_messages to stop it from printing messages +/obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0) + if(!istype(W)) return //Not an item + + if(usr && usr.isEquipped(W) && !usr.canUnEquip(W)) + return 0 + + if(src.loc == W) + return 0 //Means the item is already in the storage item + if(storage_slots != null && contents.len >= storage_slots) + if(!stop_messages) + to_chat(usr, "[src] is full, make some space.") + return 0 //Storage item is full + + if(LAZYLEN(can_hold) && !is_type_in_list(W, can_hold)) + if(!stop_messages) + if (istype(W, /obj/item/weapon/hand_labeler)) + return 0 + to_chat(usr, "[src] cannot hold [W].") + return 0 + + if(LAZYLEN(cant_hold) && is_type_in_list(W, cant_hold)) + if(!stop_messages) + to_chat(usr, "[src] cannot hold [W].") + return 0 + + if (max_w_class != null && W.w_class > max_w_class) + if(!stop_messages) + to_chat(usr, "[W] is too long for \the [src].") + return 0 + + var/total_storage_space = W.get_storage_cost() + for(var/obj/item/I in contents) + total_storage_space += I.get_storage_cost() //Adds up the combined w_classes which will be in the storage item if the item is added to it. + + if(total_storage_space > max_storage_space) + if(!stop_messages) + to_chat(usr, "[src] is too full, make some space.") + return 0 + + if(W.w_class >= src.w_class && (istype(W, /obj/item/weapon/storage))) + if(!stop_messages) + to_chat(usr, "[src] cannot hold [W] as it's a storage item of the same size.") + return 0 //To prevent the stacking of same sized storage items. + + return 1 + +//This proc handles items being inserted. It does not perform any checks of whether an item can or can't be inserted. That's done by can_be_inserted() +//The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once, +//such as when picking up all the items on a tile with one click. +/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0) + if(!istype(W)) return 0 + + if(!stall_insertion(W, usr)) // Can sleep here and delay removal for slow storage + return 0 + + if(usr) + usr.remove_from_mob(W,target = src) //If given a target, handles forceMove() + W.on_enter_storage(src) + if (usr.client && usr.s_active != src) + usr.client.screen -= W + W.dropped(usr) + add_fingerprint(usr) + if (use_sound) + playsound(src, src.use_sound, 50, 0, -5) //Something broke "add item to container" sounds, this is a hacky fix. + + if(!prevent_warning) + for(var/mob/M in viewers(usr, null)) + if (M == usr) + to_chat(usr, "You put \the [W] into [src].") + else if (M in range(1)) //If someone is standing close enough, they can tell what it is... + M.show_message("\The [usr] puts [W] into [src].") + else if (W && W.w_class >= 3) //Otherwise they can only see large or normal items from a distance... + M.show_message("\The [usr] puts [W] into [src].") + + src.orient2hud(usr) + if(usr.s_active) + usr.s_active.show_to(usr) + else + W.forceMove(src) + W.on_enter_storage(src) + + update_icon() + return 1 + +//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target +/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location) + if(!istype(W)) return 0 + + if(!stall_removal(W, usr)) // Can sleep here and delay removal for slow storage + return 0 + + if(istype(src, /obj/item/weapon/storage/fancy)) + var/obj/item/weapon/storage/fancy/F = src + F.update_icon(1) + + for(var/mob/M in is_seeing) + if(!M.client || QDELETED(M)) + hide_from(M) + else + M.client.screen -= W + + if(new_location) + if(ismob(loc)) + W.dropped(usr) + if(ismob(new_location)) + W.hud_layerise() + else + W.reset_plane_and_layer() + W.forceMove(new_location) + else + W.forceMove(get_turf(src)) + + for(var/mob/M in is_seeing) + if(M.s_active == src) + orient2hud(M) + show_to(M) + if(W.maptext) + W.maptext = "" + W.on_exit_storage(src) + update_icon() + return 1 + +/// Called before insertion completes, allowing you to delay or cancel it +/obj/item/weapon/storage/proc/stall_insertion(obj/item/W, mob/user) + return TRUE + +/// Called before removal completes, allowing you to delay or cancel it +/obj/item/weapon/storage/proc/stall_removal(obj/item/W, mob/user) + return TRUE + +//This proc is called when you want to place an item into the storage item. +/obj/item/weapon/storage/attackby(obj/item/W as obj, mob/user as mob) + ..() + + if(isrobot(user)) + return //Robots can't interact with storage items. + + if(istype(W, /obj/item/device/lightreplacer)) + var/obj/item/device/lightreplacer/LP = W + var/amt_inserted = 0 + var/turf/T = get_turf(user) + for(var/obj/item/weapon/light/L in src.contents) + if(L.status == 0) + if(LP.uses < LP.max_uses) + LP.add_uses(1) + amt_inserted++ + remove_from_storage(L, T) + qdel(L) + if(amt_inserted) + to_chat(user, "You inserted [amt_inserted] light\s into \the [LP.name]. You have [LP.uses] light\s remaining.") + return + + if(!can_be_inserted(W)) + return + + if(istype(W, /obj/item/weapon/tray)) + var/obj/item/weapon/tray/T = W + if(T.calc_carry() > 0) + if(prob(85)) + to_chat(user, "The tray won't fit in [src].") + return + else + W.forceMove(get_turf(user)) + if ((user.client && user.s_active != src)) + user.client.screen -= W + W.dropped(user) + to_chat(user, "God damn it!") + + W.add_fingerprint(user) + return handle_item_insertion(W) + +/obj/item/weapon/storage/dropped(mob/user as mob) + return + +/obj/item/weapon/storage/attack_hand(mob/user as mob) + if(ishuman(user) && !pocketable) + var/mob/living/carbon/human/H = user + if(H.l_store == src && !H.get_active_hand()) //Prevents opening if it's in a pocket. + H.put_in_hands(src) + H.l_store = null + return + if(H.r_store == src && !H.get_active_hand()) + H.put_in_hands(src) + H.r_store = null + return + + if (src.loc == user) + src.open(user) + else + ..() + for(var/mob/M in range(1)) + if (M.s_active == src) + src.close(M) + src.add_fingerprint(user) + return + +/obj/item/weapon/storage/proc/gather_all(turf/T as turf, mob/user as mob) + var/list/rejections = list() + var/success = 0 + var/failure = 0 + + for(var/obj/item/I in T) + if(I.type in rejections) // To limit bag spamming: any given type only complains once + continue + if(!can_be_inserted(I, user)) // Note can_be_inserted still makes noise when the answer is no + rejections += I.type // therefore full bags are still a little spammy + failure = 1 + continue + success = 1 + handle_item_insertion(I, 1) //The 1 stops the "You put the [src] into [S]" insertion message from being displayed. + if(success && !failure) + to_chat(user, "You put everything in [src].") + else if(success) + to_chat(user, "You put some things in [src].") + else + to_chat(user, "You fail to pick anything up with \the [src].") + +/obj/item/weapon/storage/verb/toggle_gathering_mode() + set name = "Switch Gathering Method" + set category = "Object" + + collection_mode = !collection_mode + switch (collection_mode) + if(1) + to_chat(usr, "[src] now picks up all items on a tile at once.") + if(0) + to_chat(usr, "[src] now picks up one item at a time.") + + +/obj/item/weapon/storage/verb/quick_empty() + set name = "Empty Contents" + set category = "Object" + set src in view(1) + + // Only humans and robots can dump contents + if(!(ishuman(usr) || isrobot(usr))) + return + + // Hard to do when you're KO'd + if(usr.incapacitated()) + return + + // Has to be at least adjacent (just for safety, src in view should handle this already) + if(!Adjacent(usr)) + return + + //VOREStation Add: No turf dumping if user is in a belly + if(isbelly(usr.loc)) + return + + drop_contents() + +/obj/item/weapon/storage/proc/drop_contents() // why is this a proc? literally just for RPEDs + hide_from(usr) + var/turf/T = get_turf(src) + for(var/obj/item/I in contents) + remove_from_storage(I, T) + +/obj/item/weapon/storage/proc/calibrate_size() + var/total_storage_space = 0 + for(var/obj/item/I in contents) + total_storage_space += I.get_storage_cost() + max_storage_space = max(total_storage_space,max_storage_space) //Prevents spawned containers from being too small for their contents. + +/obj/item/weapon/storage/emp_act(severity) + if(!istype(src.loc, /mob/living)) + for(var/obj/O in contents) + O.emp_act(severity) + ..() + +/obj/item/weapon/storage/attack_self(mob/user as mob) + if((user.get_active_hand() == src) || (isrobot(user)) && allow_quick_empty) + if(src.verbs.Find(/obj/item/weapon/storage/verb/quick_empty)) + src.quick_empty() + return 1 + +//Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area). +//Returns -1 if the atom was not found on container. +/atom/proc/storage_depth(atom/container) + var/depth = 0 + var/atom/cur_atom = src + + while (cur_atom && !(cur_atom in container.contents)) + if (isarea(cur_atom)) + return -1 + if (istype(cur_atom.loc, /obj/item/weapon/storage)) + depth++ + cur_atom = cur_atom.loc + + if (!cur_atom) + return -1 //inside something with a null loc. + + return depth + +//Like storage depth, but returns the depth to the nearest turf +//Returns -1 if no top level turf (a loc was null somewhere, or a non-turf atom's loc was an area somehow). +/atom/proc/storage_depth_turf() + var/depth = 0 + var/atom/cur_atom = src + + while (cur_atom && !isturf(cur_atom)) + if (isarea(cur_atom)) + return -1 + if (istype(cur_atom.loc, /obj/item/weapon/storage)) + depth++ + cur_atom = cur_atom.loc + + if (!cur_atom) + return -1 //inside something with a null loc. + + return depth + +// See inventory_sizes.dm for the defines. +/obj/item/proc/get_storage_cost() + if (storage_cost) + return storage_cost + else + switch(w_class) + if(ITEMSIZE_TINY) + return ITEMSIZE_COST_TINY + if(ITEMSIZE_SMALL) + return ITEMSIZE_COST_SMALL + if(ITEMSIZE_NORMAL) + return ITEMSIZE_COST_NORMAL + if(ITEMSIZE_LARGE) + return ITEMSIZE_COST_LARGE + if(ITEMSIZE_HUGE) + return ITEMSIZE_COST_HUGE + else + return ITEMSIZE_COST_NO_CONTAINER + +/obj/item/weapon/storage/proc/make_exact_fit() + storage_slots = contents.len + + LAZYCLEARLIST(can_hold) + can_hold = list() + max_w_class = 0 + max_storage_space = 0 + for(var/obj/item/I in src) + can_hold[I.type]++ + max_w_class = max(I.w_class, max_w_class) + max_storage_space += I.get_storage_cost() + +/* + * Trinket Box - READDING SOON + */ +/obj/item/weapon/storage/trinketbox + name = "trinket box" + desc = "A box that can hold small trinkets, such as a ring." + icon = 'icons/obj/items.dmi' + icon_state = "trinketbox" + var/open = 0 + storage_slots = 1 + can_hold = list( + /obj/item/clothing/gloves/ring, + /obj/item/weapon/coin, + /obj/item/clothing/accessory/medal + ) + var/open_state + var/closed_state + +/obj/item/weapon/storage/trinketbox/update_icon() + cut_overlays() + if(open) + icon_state = open_state + + if(contents.len >= 1) + var/contained_image = null + if(istype(contents[1], /obj/item/clothing/gloves/ring)) + contained_image = "ring_trinket" + else if(istype(contents[1], /obj/item/weapon/coin)) + contained_image = "coin_trinket" + else if(istype(contents[1], /obj/item/clothing/accessory/medal)) + contained_image = "medal_trinket" + if(contained_image) + add_overlay(contained_image) + else + icon_state = closed_state + +/obj/item/weapon/storage/trinketbox/New() + if(!open_state) + open_state = "[initial(icon_state)]_open" + if(!closed_state) + closed_state = "[initial(icon_state)]" + ..() + +/obj/item/weapon/storage/trinketbox/attack_self() + open = !open + update_icon() + ..() + +/obj/item/weapon/storage/trinketbox/examine(mob/user) + . = ..() + if(open && contents.len) + var/display_item = contents[1] + . += "\The [src] contains \the [display_item]!" + +/obj/item/weapon/storage/AllowDrop() + return TRUE + +//Useful for spilling the contents of containers all over the floor +/obj/item/weapon/storage/proc/spill(var/dist = 2, var/turf/T = null) + if (!istype(T))//If its not on the floor this might cause issues + T = get_turf(src) + + for (var/obj/O in contents) + remove_from_storage(O, T) + O.tumble(2) + +/// Hangar for storage backdrops, so that we can redirect clicks from them to our item for QOL +/atom/movable/storage_slot + name = "stored - " + icon = 'icons/effects/effects.dmi' + icon_state = "nothing" + plane = PLANE_PLAYER_HUD_ITEMS + layer = 0.1 + alpha = 200 + var/weakref/held_item + +/atom/movable/storage_slot/New(newloc, obj/item/held_item) + ASSERT(held_item) + name += held_item.name + src.held_item = weakref(held_item) + +/atom/movable/storage_slot/Destroy() + held_item = null + +/// Has to be this way. The fact that the overlays will be constantly mutated by other storage means we can't wait. +/atom/movable/storage_slot/add_overlay(list/somethings) + ASSERT(islist(somethings)) + overlays = somethings + +/atom/movable/storage_slot/Click() + var/obj/item/I = held_item?.resolve() + if(I) + usr.ClickOn(I) + return 1 + +// Allows micros to drag themselves into storage items +/obj/item/weapon/storage/MouseDrop_T(mob/living/target, mob/living/user) + if(!istype(user)) return // If the user passed in isn't a living mob, exit + if(target != user) return // If the user didn't drag themselves, exit + if(user.incapacitated() || user.buckled) return // If user is incapacitated or buckled, exit + if(get_holder_of_type(src, /mob/living/carbon/human) == user) return // No jumping into your own equipment + if(ishuman(user) && user.get_effective_size(TRUE) > 0.25) return // Only micro characters + if(ismouse(user) && user.get_effective_size(TRUE) > 1) return // Only normal sized mice or less + + // Create a dummy holder with user's size to test insertion + var/obj/item/weapon/holder/D = new/obj/item/weapon/holder + if(ismouse(user)) + D.w_class = ITEMSIZE_TINY // Mouse smol + else if(ishuman(user)) + D.w_class = ITEMSIZE_SMALL // Players small + else // Other creatures not accepted at this time + qdel(D) // If there's a better way to check the size of a + return // mob's holder and if it fits, replace this slab + if(!src.can_be_inserted(D, 1)) // If the dummy item doesn't fit, exit + qdel(D) + return + qdel(D) + + // Scoop and insert target into storage + var/obj/item/weapon/holder/H = new user.holder_type(get_turf(user), user) + src.handle_item_insertion(H, 1) + to_chat(user, "You climb into \the [src].") + return ..() diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index b36078028b..232ef11600 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -107,7 +107,7 @@ /obj/item/weapon/storage/wallet/poly/New() ..() verbs |= /obj/item/weapon/storage/wallet/poly/proc/change_color - color = "#"+get_random_colour() + color = get_random_colour() update_icon() /obj/item/weapon/storage/wallet/poly/proc/change_color() @@ -196,4 +196,4 @@ icon_state = "casinowallet_white" return else - icon_state = "casinowallet_black" \ No newline at end of file + icon_state = "casinowallet_black" diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm index c852fefe9f..48ced948be 100644 --- a/code/game/objects/items/weapons/surgery_tools.dm +++ b/code/game/objects/items/weapons/surgery_tools.dm @@ -244,6 +244,9 @@ /obj/item/weapon/surgical/bonesetter/cyborg toolspeed = 0.5 +/obj/item/weapon/surgical/bioregen/cyborg //VoreStation edit: let the borgs S U C C + toolspeed = 0.5 + // Alien Tools /obj/item/weapon/surgical/retractor/alien diff --git a/code/game/objects/items/weapons/syndie.dm b/code/game/objects/items/weapons/syndie.dm index 98c246a03a..0f70a805dd 100644 --- a/code/game/objects/items/weapons/syndie.dm +++ b/code/game/objects/items/weapons/syndie.dm @@ -50,7 +50,7 @@ icon_state = "c-4[size]_1" playsound(src, 'sound/weapons/armbomb.ogg', 75, 1) for(var/mob/O in hearers(src, null)) - O.show_message("[bicon(src)] The [src.name] beeps! ") + O.show_message("\icon[src][bicon(src)] The [src.name] beeps! ") sleep(50) explosion(get_turf(src), devastate, heavy_impact, light_impact, flash_range) for(var/dirn in cardinal) //This is to guarantee that C4 at least breaks down all immediately adjacent walls and doors. diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 0c6c78dbbe..7fbc4ff547 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -455,7 +455,7 @@ var/list/global/tank_gauge_cache = list() return T.assume_air(air_contents) playsound(src, 'sound/weapons/Gunshot_shotgun.ogg', 20, 1) - visible_message("[bicon(src)] \The [src] flies apart!", "You hear a bang!") + visible_message("\icon[src][bicon(src)] \The [src] flies apart!", "You hear a bang!") T.hotspot_expose(air_contents.temperature, 70, 1) @@ -500,7 +500,7 @@ var/list/global/tank_gauge_cache = list() T.assume_air(leaked_gas) if(!leaking) - visible_message("[bicon(src)] \The [src] relief valve flips open with a hiss!", "You hear hissing.") + visible_message("\icon[src][bicon(src)] \The [src] relief valve flips open with a hiss!", "You hear hissing.") playsound(src, 'sound/effects/spray.ogg', 10, 1, -3) leaking = 1 #ifdef FIREDBG diff --git a/code/game/objects/items/weapons/tools/combitool.dm b/code/game/objects/items/weapons/tools/combitool.dm index 573ff96128..2f2ddbf4a5 100644 --- a/code/game/objects/items/weapons/tools/combitool.dm +++ b/code/game/objects/items/weapons/tools/combitool.dm @@ -29,7 +29,7 @@ if(loc == user && tools.len) . += "It has the following fittings:" for(var/obj/item/tool in tools) - . += "[bicon(tool)] - [tool.name][tools[current_tool]==tool?" (selected)":""]") + . += "\icon[tool][bicon(tool)] - [tool.name][tools[current_tool]==tool?" (selected)":""]") /obj/item/weapon/combitool/New() ..() diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm index 119c9d7419..df027debd4 100644 --- a/code/game/objects/items/weapons/towels.dm +++ b/code/game/objects/items/weapons/towels.dm @@ -31,4 +31,4 @@ /obj/item/weapon/towel/random/New() ..() - color = "#"+get_random_colour() \ No newline at end of file + color = get_random_colour() diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 02c25c736d..26f3200242 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -19,7 +19,7 @@ user.setClickCooldown(user.get_attack_speed(src)) user.do_attack_animation(M) - if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return diff --git a/code/game/objects/items_vr.dm b/code/game/objects/items_vr.dm new file mode 100644 index 0000000000..4b8dbcaae5 --- /dev/null +++ b/code/game/objects/items_vr.dm @@ -0,0 +1,27 @@ +/obj/item + var/list/possessed_voice //Allows for items to be possessed/inhabited by voices. + var/list/warned_of_possession //Checks to see who has been informed this item is possessed. + + +/obj/item/proc/inhabit_item(var/mob/candidate, var/candidate_name, var/mob/living/candidate_original_form) + //This makes it so that any object in the game can have something put in it like the cursed sword! + //This means the proc can also be manually called by admin commands. + //Handle moving the person into the object. + if(!possessed_voice) //Create the list for possessed_voice if it doesn't already have one. + possessed_voice = list() + if(!warned_of_possession) //Creates a list of warned users. + warned_of_possession = list() + var/mob/living/voice/new_voice = new /mob/living/voice(src) //Make the voice mob the person is going to be. + new_voice.transfer_identity(candidate) //Now make the voice mob load from the ghost's active character in preferences. + new_voice.mind = candidate.mind //Transfer the mind, if any. + new_voice.ckey = candidate.ckey //Finally, bring the client over. + new_voice.tf_mob_holder = candidate_original_form //Save what mob they are! We'll need this for OOC escape and transformation back to their normal form. + if(candidate_name) //Were we given a candidate_name? Great! Name them that. + new_voice.name = "[candidate_name]" + else + new_voice.name = "[name]" //No name given? Give them the name of the object they're inhabiting. + new_voice.real_name = "[new_voice.real_name]" //We still know their real name though! + possessed_voice.Add(new_voice) + listening_objects |= src + new_voice.verbs -= /mob/living/voice/verb/change_name //No changing your name! Bad! + new_voice.verbs -= /mob/living/voice/verb/hang_up //Also you can't hang up. You are the item! \ No newline at end of file diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 82c35baa46..36e758cd07 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,277 +1,277 @@ -/obj - layer = OBJ_LAYER - plane = OBJ_PLANE - vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of obj in openspace. - //Used to store information about the contents of the object. - var/list/matter - var/w_class // Size of the object. - var/unacidable = FALSE //universal "unacidabliness" var, here so you can use it in any obj. - animate_movement = 2 - var/throwforce = 1 - var/catchable = 1 // can it be caught on throws/flying? - var/sharp = FALSE // whether this object cuts - var/edge = FALSE // whether this object is more likely to dismember - var/pry = 0 //Used in attackby() to open doors - var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! - var/damtype = "brute" - var/armor_penetration = 0 - var/show_messages - var/preserve_item = 0 //whether this object is preserved when its owner goes into cryo-storage, gateway, etc - var/can_speak = 0 //For MMIs and admin trickery. If an object has a brainmob in its contents, set this to 1 to allow it to speak. - - var/Mtoollink = 0 //YW EDIT: aac - var/show_examine = TRUE // Does this pop up on a mob when the mob is examined? - -/obj/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/Topic(href, href_list, var/datum/tgui_state/state = GLOB.tgui_default_state) - if(usr && ..()) - return 1 - - // In the far future no checks are made in an overriding Topic() beyond if(..()) return - // Instead any such checks are made in CanUseTopic() - if(CanUseTopic(usr, state, href_list) == STATUS_INTERACTIVE) - CouldUseTopic(usr) - return 0 - - CouldNotUseTopic(usr) - return 1 - -/obj/CanUseTopic(var/mob/user, var/datum/tgui_state/state = GLOB.tgui_default_state) - if(user.CanUseObjTopic(src)) - return ..() - to_chat(user, "[bicon(src)]Access Denied!") - return STATUS_CLOSE - -/mob/living/silicon/CanUseObjTopic(var/obj/O) - var/id = src.GetIdCard() - return O.check_access(id) - -/mob/proc/CanUseObjTopic() - return 1 - -/obj/proc/CouldUseTopic(var/mob/user) - var/atom/host = tgui_host() - host.add_hiddenprint(user) - -/obj/proc/CouldNotUseTopic(var/mob/user) - // Nada - -/obj/item/proc/is_used_on(obj/O, mob/user) - -/obj/assume_air(datum/gas_mixture/giver) - if(loc) - return loc.assume_air(giver) - else - return null - -/obj/remove_air(amount) - if(loc) - return loc.remove_air(amount) - else - return null - -/obj/return_air() - if(loc) - return loc.return_air() - else - return null - -/obj/proc/updateUsrDialog() - if(in_use) - var/is_in_use = 0 - var/list/nearby = viewers(1, src) - for(var/mob/M in nearby) - if ((M.client && M.machine == src)) - is_in_use = 1 - src.attack_hand(M) - if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) - if (!(usr in nearby)) - if (usr.client && usr.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. - is_in_use = 1 - src.attack_ai(usr) - - // check for TK users - - if (istype(usr, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = usr - if(H.get_type_in_hands(/obj/item/tk_grab)) - if(!(H in nearby)) - if(H.client && H.machine==src) - is_in_use = 1 - src.attack_hand(H) - in_use = is_in_use - -/obj/proc/updateDialog() - // Check that people are actually using the machine. If not, don't update anymore. - if(in_use) - var/list/nearby = viewers(1, src) - var/is_in_use = 0 - for(var/mob/M in nearby) - if ((M.client && M.machine == src)) - is_in_use = 1 - src.interact(M) - var/ai_in_use = AutoUpdateAI(src) - - if(!ai_in_use && !is_in_use) - in_use = 0 - -/obj/attack_ghost(mob/user) - tgui_interact(user) - ..() - -/mob/proc/unset_machine() - machine?.remove_visual(src) - src.machine = null - -/mob/proc/set_machine(var/obj/O) - if(src.machine) - unset_machine() - src.machine = O - if(istype(O)) - O.in_use = 1 - -/obj/item/proc/updateSelfDialog() - var/mob/M = src.loc - if(istype(M) && M.client && M.machine == src) - src.attack_self(M) - -/obj/proc/hide(h) - return - -/obj/proc/hides_under_flooring() - return 0 - -/obj/proc/hear_talk(mob/M, list/message_pieces, verb) - if(talking_atom) - talking_atom.catchMessage(multilingual_to_message(message_pieces), M) -/* - var/mob/mo = locate(/mob) in src - if(mo) - var/rendered = "[M.name]: [text]" - mo.show_message(rendered, 2) - */ - return - -/obj/proc/hear_signlang(mob/M as mob, text, verb, datum/language/speaking) // Saycode gets worse every day. - return FALSE - -/obj/proc/see_emote(mob/M as mob, text, var/emote_type) - return - -/obj/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) - return - -// Used to mark a turf as containing objects that are dangerous to step onto. -/obj/proc/register_dangerous_to_step() - var/turf/T = get_turf(src) - if(T) - T.register_dangerous_object(src) - -/obj/proc/unregister_dangerous_to_step() - var/turf/T = get_turf(src) - if(T) - T.unregister_dangerous_object(src) - -// Test for if stepping on a tile containing this obj is safe to do, used for things like landmines and cliffs. -/obj/proc/is_safe_to_step(mob/living/L) - return TRUE - -/obj/proc/container_resist(var/mob/living) - return - -//To be called from things that spill objects on the floor. -//Makes an object move around randomly for a couple of tiles -/obj/proc/tumble(var/dist = 2) - set waitfor = FALSE - if (dist >= 1) - dist += rand(0,1) - for(var/i = 1, i <= dist, i++) - if(src) - step(src, pick(NORTH,SOUTH,EAST,WEST)) - sleep(rand(2,4)) - -//YW EDIT: aac start -/obj/machinery/proc/multitool_menu(var/mob/user,var/obj/item/multitool/P) - return "NO MULTITOOL_MENU!" - -/obj/machinery/proc/linkWith(var/mob/user, var/obj/buffer, var/link/context) - return 0 - -/obj/machinery/proc/unlinkFrom(var/mob/user, var/obj/buffer) - return 0 - -/obj/machinery/proc/canLink(var/obj/O, var/link/context) - return 0 - -/obj/machinery/proc/isLinkedWith(var/obj/O) - return 0 - -/obj/machinery/proc/getLink(var/idx) - return null - -/obj/machinery/proc/linkMenu(var/obj/O) - var/dat="" - if(canLink(O, list())) - dat += " \[Link\] " - return dat - -/obj/machinery/proc/format_tag(var/label,var/varname, var/act="set_tag") - var/value = vars[varname] - if(!value || value=="") - value="-----" - return "[label]: [value]" - - -/obj/machinery/proc/update_multitool_menu(mob/user as mob) - var/obj/item/device/multitool/P = get_multitool(user) - - if(!istype(P)) - return 0 - var/dat = {" - - [name] Configuration - - - -

[name]

-"} - if(allowed(user))//no, assistants, you're not ruining all vents on the station with just a multitool - dat += multitool_menu(user,P) - if(Mtoollink) - if(P) - if(P.buffer) - var/id = null - if("id_tag" in P.buffer.vars) - id = P.buffer:id_tag - else if("id" in P.buffer.vars) - id = P.buffer:id - dat += "

MULTITOOL BUFFER: [P.buffer] [id ? "([id])" : ""]" - - dat += linkMenu(P.buffer) - - if(P.buffer) - dat += "\[Flush\]" - dat += "

" - else - dat += "

MULTITOOL BUFFER: \[Add Machine\]

" - else - dat += "ACCESS DENIED" - dat += "" - user << browse(dat, "window=mtcomputer") - user.set_machine(src) - onclose(user, "mtcomputer") +/obj + layer = OBJ_LAYER + plane = OBJ_PLANE + vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of obj in openspace. + //Used to store information about the contents of the object. + var/list/matter + var/w_class // Size of the object. + var/unacidable = FALSE //universal "unacidabliness" var, here so you can use it in any obj. + animate_movement = 2 + var/throwforce = 1 + var/catchable = 1 // can it be caught on throws/flying? + var/sharp = FALSE // whether this object cuts + var/edge = FALSE // whether this object is more likely to dismember + var/pry = 0 //Used in attackby() to open doors + var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! + var/damtype = "brute" + var/armor_penetration = 0 + var/show_messages + var/preserve_item = 0 //whether this object is preserved when its owner goes into cryo-storage, gateway, etc + var/can_speak = 0 //For MMIs and admin trickery. If an object has a brainmob in its contents, set this to 1 to allow it to speak. + + var/Mtoollink = 0 //YW EDIT: aac + var/show_examine = TRUE // Does this pop up on a mob when the mob is examined? + +/obj/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/Topic(href, href_list, var/datum/tgui_state/state = GLOB.tgui_default_state) + if(usr && ..()) + return 1 + + // In the far future no checks are made in an overriding Topic() beyond if(..()) return + // Instead any such checks are made in CanUseTopic() + if(CanUseTopic(usr, state, href_list) == STATUS_INTERACTIVE) + CouldUseTopic(usr) + return 0 + + CouldNotUseTopic(usr) + return 1 + +/obj/CanUseTopic(var/mob/user, var/datum/tgui_state/state = GLOB.tgui_default_state) + if(user.CanUseObjTopic(src)) + return ..() + to_chat(user, "\icon[src][bicon(src)]Access Denied!") + return STATUS_CLOSE + +/mob/living/silicon/CanUseObjTopic(var/obj/O) + var/id = src.GetIdCard() + return O.check_access(id) + +/mob/proc/CanUseObjTopic() + return 1 + +/obj/proc/CouldUseTopic(var/mob/user) + var/atom/host = tgui_host() + host.add_hiddenprint(user) + +/obj/proc/CouldNotUseTopic(var/mob/user) + // Nada + +/obj/item/proc/is_used_on(obj/O, mob/user) + +/obj/assume_air(datum/gas_mixture/giver) + if(loc) + return loc.assume_air(giver) + else + return null + +/obj/remove_air(amount) + if(loc) + return loc.remove_air(amount) + else + return null + +/obj/return_air() + if(loc) + return loc.return_air() + else + return null + +/obj/proc/updateUsrDialog() + if(in_use) + var/is_in_use = 0 + var/list/nearby = viewers(1, src) + for(var/mob/M in nearby) + if ((M.client && M.machine == src)) + is_in_use = 1 + src.attack_hand(M) + if (istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) + if (!(usr in nearby)) + if (usr.client && usr.machine==src) // && M.machine == src is omitted because if we triggered this by using the dialog, it doesn't matter if our machine changed in between triggering it and this - the dialog is probably still supposed to refresh. + is_in_use = 1 + src.attack_ai(usr) + + // check for TK users + + if (istype(usr, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = usr + if(H.get_type_in_hands(/obj/item/tk_grab)) + if(!(H in nearby)) + if(H.client && H.machine==src) + is_in_use = 1 + src.attack_hand(H) + in_use = is_in_use + +/obj/proc/updateDialog() + // Check that people are actually using the machine. If not, don't update anymore. + if(in_use) + var/list/nearby = viewers(1, src) + var/is_in_use = 0 + for(var/mob/M in nearby) + if ((M.client && M.machine == src)) + is_in_use = 1 + src.interact(M) + var/ai_in_use = AutoUpdateAI(src) + + if(!ai_in_use && !is_in_use) + in_use = 0 + +/obj/attack_ghost(mob/user) + tgui_interact(user) + ..() + +/mob/proc/unset_machine() + machine?.remove_visual(src) + src.machine = null + +/mob/proc/set_machine(var/obj/O) + if(src.machine) + unset_machine() + src.machine = O + if(istype(O)) + O.in_use = 1 + +/obj/item/proc/updateSelfDialog() + var/mob/M = src.loc + if(istype(M) && M.client && M.machine == src) + src.attack_self(M) + +/obj/proc/hide(h) + return + +/obj/proc/hides_under_flooring() + return 0 + +/obj/proc/hear_talk(mob/M, list/message_pieces, verb) + if(talking_atom) + talking_atom.catchMessage(multilingual_to_message(message_pieces), M) +/* + var/mob/mo = locate(/mob) in src + if(mo) + var/rendered = "[M.name]: [text]" + mo.show_message(rendered, 2) + */ + return + +/obj/proc/hear_signlang(mob/M as mob, text, verb, datum/language/speaking) // Saycode gets worse every day. + return FALSE + +/obj/proc/see_emote(mob/M as mob, text, var/emote_type) + return + +/obj/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) + return + +// Used to mark a turf as containing objects that are dangerous to step onto. +/obj/proc/register_dangerous_to_step() + var/turf/T = get_turf(src) + if(T) + T.register_dangerous_object(src) + +/obj/proc/unregister_dangerous_to_step() + var/turf/T = get_turf(src) + if(T) + T.unregister_dangerous_object(src) + +// Test for if stepping on a tile containing this obj is safe to do, used for things like landmines and cliffs. +/obj/proc/is_safe_to_step(mob/living/L) + return TRUE + +/obj/proc/container_resist(var/mob/living) + return + +//To be called from things that spill objects on the floor. +//Makes an object move around randomly for a couple of tiles +/obj/proc/tumble(var/dist = 2) + set waitfor = FALSE + if (dist >= 1) + dist += rand(0,1) + for(var/i = 1, i <= dist, i++) + if(src) + step(src, pick(NORTH,SOUTH,EAST,WEST)) + sleep(rand(2,4)) + +//YW EDIT: aac start +/obj/machinery/proc/multitool_menu(var/mob/user,var/obj/item/multitool/P) + return "NO MULTITOOL_MENU!" + +/obj/machinery/proc/linkWith(var/mob/user, var/obj/buffer, var/link/context) + return 0 + +/obj/machinery/proc/unlinkFrom(var/mob/user, var/obj/buffer) + return 0 + +/obj/machinery/proc/canLink(var/obj/O, var/link/context) + return 0 + +/obj/machinery/proc/isLinkedWith(var/obj/O) + return 0 + +/obj/machinery/proc/getLink(var/idx) + return null + +/obj/machinery/proc/linkMenu(var/obj/O) + var/dat="" + if(canLink(O, list())) + dat += " \[Link\] " + return dat + +/obj/machinery/proc/format_tag(var/label,var/varname, var/act="set_tag") + var/value = vars[varname] + if(!value || value=="") + value="-----" + return "[label]: [value]" + + +/obj/machinery/proc/update_multitool_menu(mob/user as mob) + var/obj/item/device/multitool/P = get_multitool(user) + + if(!istype(P)) + return 0 + var/dat = {" + + [name] Configuration + + + +

[name]

+"} + if(allowed(user))//no, assistants, you're not ruining all vents on the station with just a multitool + dat += multitool_menu(user,P) + if(Mtoollink) + if(P) + if(P.buffer) + var/id = null + if("id_tag" in P.buffer.vars) + id = P.buffer:id_tag + else if("id" in P.buffer.vars) + id = P.buffer:id + dat += "

MULTITOOL BUFFER: [P.buffer] [id ? "([id])" : ""]" + + dat += linkMenu(P.buffer) + + if(P.buffer) + dat += "\[Flush\]" + dat += "

" + else + dat += "

MULTITOOL BUFFER: \[Add Machine\]

" + else + dat += "ACCESS DENIED" + dat += "" + user << browse(dat, "window=mtcomputer") + user.set_machine(src) + onclose(user, "mtcomputer") //YW EDIT: aac end \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index e918af24f3..fbcda79122 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -1,132 +1,145 @@ -/obj/structure/closet/secure_closet/engineering_chief - name = "chief engineer's locker" - req_access = list(access_ce) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/ce - - starts_with = list( - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/blueprints, - ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, - ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, - /obj/item/clothing/under/rank/chief_engineer, - /obj/item/clothing/under/rank/chief_engineer/skirt, - /obj/item/clothing/head/hardhat/white, - ///obj/item/clothing/head/welding, //VOREStation Removal: Locker bloat, grr. They get fancy goggles or can raid the welding supplies locker for one of these. - /obj/item/clothing/gloves/heavy_engineer, //VOREStation Edit: chief gets the good shit - /obj/item/clothing/shoes/brown, - /obj/item/weapon/cartridge/ce, - /obj/item/device/radio/headset/heads/ce, - /obj/item/device/radio/headset/heads/ce/alt, - /obj/item/weapon/storage/toolbox/mechanical, - /obj/item/clothing/suit/storage/hazardvest, - ///obj/item/clothing/mask/gas, //VOREStation Removal: Locker bloat, grr. The fancy one below functions as a mask & helmet combined. - /obj/item/clothing/head/hardhat/firefighter/chief, //VOREStation Add: replaces the bog-standard gas mask - ///obj/item/device/multitool, //VOREStation Removal: The belt they get, both standard and the fancy one, both come with one already, why stick another in here too? - /obj/item/weapon/storage/belt/utility/chief/full, - /obj/item/device/flash, - /obj/item/device/t_scanner/upgraded, - /obj/item/taperoll/engineering, - ///obj/item/clothing/suit/storage/hooded/wintercoat/engineering, //VOREStation Removal: Locker bloat, grr. They can grab from the engi-clothes vendor if they want the standard one. - /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce, - ///obj/item/clothing/shoes/boots/winter/engineering, //VOREStation Removal: Locker bloat, grr. As above. - /obj/item/clothing/head/beret/engineering/ce, - /obj/item/clothing/head/beret/engineering/ce/white, - /obj/item/weapon/tank/emergency/oxygen/double, //VOREStation Edit: chief gets the good shit - /obj/item/weapon/reagent_containers/spray/windowsealant, //VOREStation Add, - /obj/item/weapon/pipe_dispenser) // YW Add - -/obj/structure/closet/secure_closet/engineering_chief/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/industrial - else - starts_with += /obj/item/weapon/storage/backpack/satchel/eng - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng - return ..() - -/obj/structure/closet/secure_closet/engineering_electrical - name = "electrical supplies" - req_access = list(access_engine_equip) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/electrical - - starts_with = list( - /obj/item/clothing/gloves/yellow = 2, - /obj/item/weapon/storage/toolbox/electrical = 3, - /obj/item/weapon/module/power_control = 3, - /obj/item/device/multitool = 3) - - -/obj/structure/closet/secure_closet/engineering_welding - name = "welding supplies" - req_access = list(access_construction) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/welding - - starts_with = list( - /obj/item/clothing/head/welding = 3, - /obj/item/weapon/weldingtool/largetank = 3, - /obj/item/weapon/weldpack = 3, - /obj/item/clothing/glasses/welding = 3) - -/obj/structure/closet/secure_closet/engineering_personal - name = "engineer's locker" - req_access = list(access_engine_equip) - closet_appearance = /decl/closet_appearance/secure_closet/engineering - - starts_with = list( - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/weapon/storage/toolbox/mechanical, - /obj/item/device/radio/headset/headset_eng, - /obj/item/device/radio/headset/headset_eng/alt, - /obj/item/clothing/suit/storage/hazardvest, - /obj/item/clothing/mask/gas, - /obj/item/clothing/glasses/meson, - /obj/item/weapon/cartridge/engineering, - /obj/item/taperoll/engineering, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/suit/storage/hooded/wintercoat/engineering, - /obj/item/clothing/shoes/boots/winter/engineering, - /obj/item/weapon/tank/emergency/oxygen/engi, - /obj/item/weapon/storage/belt/utility, //VOREStation Add - /obj/item/weapon/reagent_containers/spray/windowsealant) //VOREStation Add - -/obj/structure/closet/secure_closet/engineering_personal/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/industrial - else - starts_with += /obj/item/weapon/storage/backpack/satchel/eng - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng - return ..() - - -/obj/structure/closet/secure_closet/atmos_personal - name = "technician's locker" - req_access = list(access_atmospherics) - closet_appearance = /decl/closet_appearance/secure_closet/engineering/atmos - - starts_with = list( - /obj/item/clothing/accessory/storage/brown_vest, - /obj/item/clothing/suit/fire/heavy, - /obj/item/clothing/head/hardhat/firefighter/atmos, - /obj/item/device/flashlight, - /obj/item/weapon/extinguisher/atmo, - ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, - /obj/item/device/radio/headset/headset_eng, - /obj/item/device/radio/headset/headset_eng/alt, - /obj/item/clothing/suit/storage/hazardvest/atmos, //VOREStation edit. Eng locker gets regular haz-vest, atmos gets the themed one of their own - /obj/item/clothing/mask/gas, - /obj/item/weapon/cartridge/atmos, - /obj/item/taperoll/atmos, - /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos, - /obj/item/clothing/shoes/boots/winter/atmos, - /obj/item/weapon/tank/emergency/oxygen/engi, - /obj/item/weapon/storage/belt/utility/atmostech) //VOREStation edit. They don't get a toolbox to fill it from, so why not give a spare one that's full already? - -/obj/structure/closet/secure_closet/atmos_personal/Initialize() - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/industrial - else - starts_with += /obj/item/weapon/storage/backpack/satchel/eng - if(prob(50)) - starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng - return ..() +/obj/structure/closet/secure_closet/engineering_chief + name = "chief engineer's locker" + req_access = list(access_ce) + closet_appearance = /decl/closet_appearance/secure_closet/engineering/ce + + starts_with = list( + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/blueprints, + ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, + ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, + /obj/item/clothing/under/rank/chief_engineer, + /obj/item/clothing/under/rank/chief_engineer/skirt, + /obj/item/clothing/head/hardhat/white, + ///obj/item/clothing/head/welding, //VOREStation Removal: Locker bloat, grr. They get fancy goggles or can raid the welding supplies locker for one of these. + /obj/item/clothing/gloves/heavy_engineer, //VOREStation Edit: chief gets the good shit + /obj/item/clothing/shoes/brown, + /obj/item/weapon/cartridge/ce, + /obj/item/device/radio/headset/heads/ce, + /obj/item/device/radio/headset/heads/ce/alt, + /obj/item/weapon/storage/toolbox/mechanical, + /obj/item/clothing/suit/storage/hazardvest, + ///obj/item/clothing/mask/gas, //VOREStation Removal: Locker bloat, grr. The fancy one below functions as a mask & helmet combined. + /obj/item/clothing/head/hardhat/firefighter/chief, //VOREStation Add: replaces the bog-standard gas mask + ///obj/item/device/multitool, //VOREStation Removal: The belt they get, both standard and the fancy one, both come with one already, why stick another in here too? + /obj/item/weapon/storage/belt/utility/chief/full, + /obj/item/device/flash, + /obj/item/device/t_scanner/upgraded, + /obj/item/taperoll/engineering, + ///obj/item/clothing/suit/storage/hooded/wintercoat/engineering, //VOREStation Removal: Locker bloat, grr. They can grab from the engi-clothes vendor if they want the standard one. + /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce, + ///obj/item/clothing/shoes/boots/winter/engineering, //VOREStation Removal: Locker bloat, grr. As above. + /obj/item/clothing/head/beret/engineering/ce, + /obj/item/clothing/head/beret/engineering/ce/white, + /obj/item/weapon/tank/emergency/oxygen/double, //VOREStation Edit: chief gets the good shit + /obj/item/weapon/reagent_containers/spray/windowsealant, //VOREStation Add, + /obj/item/weapon/pipe_dispenser) // YW Add + +/obj/structure/closet/secure_closet/engineering_chief/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/industrial + else + starts_with += /obj/item/weapon/storage/backpack/satchel/eng + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng + return ..() + +/obj/structure/closet/secure_closet/engineering_electrical + name = "electrical supplies" + req_access = list(access_engine_equip) + closet_appearance = /decl/closet_appearance/secure_closet/engineering/electrical + + starts_with = list( + /obj/item/clothing/gloves/yellow = 2, + /obj/item/weapon/storage/toolbox/electrical = 3, + /obj/item/weapon/module/power_control = 3, + /obj/item/device/multitool = 3) + +/obj/structure/closet/secure_closet/engineering_electrical/double + starts_with = list( + /obj/item/clothing/gloves/yellow = 4, + /obj/item/weapon/storage/toolbox/electrical = 6, + /obj/item/weapon/module/power_control = 6, + /obj/item/device/multitool = 6) + +/obj/structure/closet/secure_closet/engineering_welding + name = "welding supplies" + req_access = list(access_construction) + closet_appearance = /decl/closet_appearance/secure_closet/engineering/welding + + starts_with = list( + /obj/item/clothing/head/welding = 3, + /obj/item/weapon/weldingtool/largetank = 3, + /obj/item/weapon/weldpack = 3, + /obj/item/clothing/glasses/welding = 3) + +/obj/structure/closet/secure_closet/engineering_welding/double + starts_with = list( + /obj/item/clothing/head/welding = 6, + /obj/item/weapon/weldingtool/largetank = 6, + /obj/item/weapon/weldpack = 6, + /obj/item/clothing/glasses/welding = 6) + +/obj/structure/closet/secure_closet/engineering_personal + name = "engineer's locker" + req_access = list(access_engine_equip) + closet_appearance = /decl/closet_appearance/secure_closet/engineering + + starts_with = list( + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/weapon/storage/toolbox/mechanical, + /obj/item/device/radio/headset/headset_eng, + /obj/item/device/radio/headset/headset_eng/alt, + /obj/item/clothing/suit/storage/hazardvest, + /obj/item/clothing/mask/gas, + /obj/item/clothing/glasses/meson, + /obj/item/weapon/cartridge/engineering, + /obj/item/taperoll/engineering, + /obj/item/clothing/head/hardhat, + /obj/item/clothing/suit/storage/hooded/wintercoat/engineering, + /obj/item/clothing/shoes/boots/winter/engineering, + /obj/item/weapon/tank/emergency/oxygen/engi, + /obj/item/weapon/storage/belt/utility, //VOREStation Add + /obj/item/weapon/reagent_containers/spray/windowsealant) //VOREStation Add + +/obj/structure/closet/secure_closet/engineering_personal/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/industrial + else + starts_with += /obj/item/weapon/storage/backpack/satchel/eng + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng + return ..() + + +/obj/structure/closet/secure_closet/atmos_personal + name = "technician's locker" + req_access = list(access_atmospherics) + closet_appearance = /decl/closet_appearance/secure_closet/engineering/atmos + + starts_with = list( + /obj/item/clothing/accessory/storage/brown_vest, + /obj/item/clothing/suit/fire/heavy, + /obj/item/clothing/head/hardhat/firefighter/atmos, + /obj/item/device/flashlight, + /obj/item/weapon/extinguisher/atmo, + ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, + /obj/item/device/radio/headset/headset_eng, + /obj/item/device/radio/headset/headset_eng/alt, + /obj/item/clothing/suit/storage/hazardvest/atmos, //VOREStation edit. Eng locker gets regular haz-vest, atmos gets the themed one of their own + /obj/item/clothing/mask/gas, + /obj/item/weapon/cartridge/atmos, + /obj/item/taperoll/atmos, + /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos, + /obj/item/clothing/shoes/boots/winter/atmos, + /obj/item/weapon/tank/emergency/oxygen/engi, + /obj/item/weapon/storage/belt/utility/atmostech) //VOREStation edit. They don't get a toolbox to fill it from, so why not give a spare one that's full already? + +/obj/structure/closet/secure_closet/atmos_personal/Initialize() + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/industrial + else + starts_with += /obj/item/weapon/storage/backpack/satchel/eng + if(prob(50)) + starts_with += /obj/item/weapon/storage/backpack/dufflebag/eng + return ..() diff --git a/code/game/objects/structures/flora/flora.dm b/code/game/objects/structures/flora/flora.dm index 1f7e2d0ba9..2b03156385 100644 --- a/code/game/objects/structures/flora/flora.dm +++ b/code/game/objects/structures/flora/flora.dm @@ -81,7 +81,7 @@ /obj/structure/flora/proc/spawn_harvest(var/path = null, var/mob/user = null) if(!ispath(path)) return 0 - + var/atom/movable/AM = new path() if(user) user.put_in_hands(AM) @@ -96,7 +96,7 @@ name = "bush" icon = 'icons/obj/flora/snowflora.dmi' icon_state = "snowbush1" - + destroy_on_harvest = TRUE harvest_tool = /obj/item/weapon/material/knife randomize_harvest_count = FALSE @@ -121,13 +121,13 @@ name = "bush" icon = 'icons/obj/flora/ausflora.dmi' icon_state = "firstbush_1" - + destroy_on_harvest = TRUE harvest_tool = /obj/item/weapon/material/knife randomize_harvest_count = TRUE harvest_loot = list(/obj/item/stack/material/fiber = 1) min_harvests = 1 - max_harvests = 3 + max_harvests = 3 /obj/structure/flora/ausbushes/spawn_harvest(var/path = null, var/mob/user = null) . = ..() @@ -300,7 +300,7 @@ user.drop_from_inventory(I, src) I.forceMove(src) stored_item = I - src.visible_message("[bicon(src)] [bicon(I)] [user] places [I] into [src].") + src.visible_message("\icon[src][bicon(src)] \icon[I][bicon(I)] [user] places [I] into [src].") return else to_chat(user, "You refrain from putting things into the plant pot.") @@ -311,7 +311,7 @@ to_chat(user, "You see nothing of interest in [src]...") else if(do_after(user, 10)) - to_chat(user, "You find [bicon(stored_item)] [stored_item] in [src]!") + to_chat(user, "You find \icon[stored_item][bicon(stored_item)] [stored_item] in [src]!") stored_item.forceMove(get_turf(src)) stored_item = null ..() diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 46a888e55f..1aeb9cdf4c 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -118,9 +118,9 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) . = ..(user) if(istype(mybucket)) var/contains = mybucket.reagents.total_volume - . += "[bicon(src)] The bucket contains [contains] unit\s of liquid!" + . += "\icon[src][bicon(src)] The bucket contains [contains] unit\s of liquid!" else - . += "[bicon(src)] There is no bucket mounted on it!" + . += "\icon[src][bicon(src)] There is no bucket mounted on it!" /obj/structure/janitorialcart/MouseDrop_T(atom/movable/O as mob|obj, mob/living/user as mob) if (istype(O, /obj/structure/mopbucket) && !mybucket) diff --git a/code/game/objects/structures/map_blocker_vr.dm b/code/game/objects/structures/map_blocker_vr.dm index bd56b08d6e..2b41679979 100644 --- a/code/game/objects/structures/map_blocker_vr.dm +++ b/code/game/objects/structures/map_blocker_vr.dm @@ -8,8 +8,11 @@ opacity = 0 density = TRUE unacidable = TRUE + plane = PLANE_BUILDMODE +/* //VOREStation Edit /obj/effect/blocker/Initialize() // For non-gateway maps. . = ..() icon = null icon_state = null +*/ diff --git a/code/game/objects/structures/signs_vr.dm b/code/game/objects/structures/signs_vr.dm index 321ba27fc7..d786560142 100644 --- a/code/game/objects/structures/signs_vr.dm +++ b/code/game/objects/structures/signs_vr.dm @@ -2,4 +2,10 @@ icon = 'icons/obj/decals_vr.dmi' name = "\improper ITG" desc = "A polished metal sign which reads 'Ironcrest Transport Group'." - icon_state = "itg" \ No newline at end of file + icon_state = "itg" + +/obj/structure/sign/scenery/fakefireaxe + name = "decorative fire axe cabinet" + desc = "A fancy decorative indent in the wall, with an axe inside. The axe is actually a part of the indent and cannot be removed. A nostalgic reminder of older times of firefighting." + icon_state = "fireaxe1000" + icon = 'icons/obj/closet.dmi' \ No newline at end of file diff --git a/code/game/objects/structures/trash_pile_vr.dm b/code/game/objects/structures/trash_pile_vr.dm index bb3346bb4e..2e22537287 100644 --- a/code/game/objects/structures/trash_pile_vr.dm +++ b/code/game/objects/structures/trash_pile_vr.dm @@ -84,6 +84,49 @@ else return ..() +/obj/structure/trash_pile/attack_ghost(mob/observer/user as mob) + if(config.disable_player_mice) + to_chat(user, "Spawning as a mouse is currently disabled.") + return + + //VOREStation Add Start + if(jobban_isbanned(user, "GhostRoles")) + to_chat(user, "You cannot become a mouse because you are banned from playing ghost roles.") + return + //VOREStation Add End + + if(!user.MayRespawn(1)) + return + + var/turf/T = get_turf(src) + if(!T || (T.z in using_map.admin_levels)) + to_chat(user, "You may not spawn as a mouse on this Z-level.") + return + + var/timedifference = world.time - user.client.time_died_as_mouse + if(user.client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600) + var/timedifference_text + timedifference_text = time2text(mouse_respawn_time * 600 - timedifference,"mm:ss") + to_chat(user, "You may only spawn again as a mouse more than [mouse_respawn_time] minutes after your death. You have [timedifference_text] left.") + return + + var/response = tgui_alert(user, "Are you -sure- you want to become a mouse?","Are you sure you want to squeek?",list("Squeek!","Nope!")) + if(response != "Squeek!") return //Hit the wrong key...again. + + var/mob/living/simple_mob/animal/passive/mouse/host + host = new /mob/living/simple_mob/animal/passive/mouse(get_turf(src)) + + if(host) + if(config.uneducated_mice) + host.universal_understand = 0 + announce_ghost_joinleave(src, 0, "They are now a mouse.") + host.ckey = user.ckey + to_chat(host, "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent.") + + var/atom/A = get_holder_at_turf_level(src) + A.visible_message("[host] crawls out of \the [src].") + return + /obj/structure/trash_pile/attack_hand(mob/user) //Human mob if(ishuman(user)) @@ -202,6 +245,8 @@ prob(2);/obj/item/toy/tennis/cyan, prob(2);/obj/item/toy/tennis/blue, prob(2);/obj/item/toy/tennis/purple, + prob(1);/obj/item/weapon/storage/box/brainzsnax, + prob(1);/obj/item/weapon/storage/box/brainzsnax/red, prob(1);/obj/item/clothing/glasses/sunglasses, prob(1);/obj/item/clothing/glasses/sunglasses/bigshot, prob(1);/obj/item/clothing/glasses/welding, diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index def2811188..b6c5885ac4 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -255,13 +255,7 @@ M.clean_blood() - if(isturf(loc)) - var/turf/tile = loc - for(var/obj/effect/E in tile) - if(istype(E,/obj/effect/rune) || istype(E,/obj/effect/decal/cleanable) || istype(E,/obj/effect/overlay)) - qdel(E) - - reagents.splash(O, 10) + reagents.splash(O, 10, min_spill = 0, max_spill = 0) /obj/machinery/shower/process() if(!on) return @@ -275,11 +269,10 @@ reagents.add_reagent("water", reagents.get_free_space()) /obj/machinery/shower/proc/wash_floor() - if(!ismist && is_washing) + if(is_washing) return is_washing = 1 var/turf/T = get_turf(src) - reagents.splash(T, reagents.total_volume) T.clean(src) spawn(100) is_washing = 0 diff --git a/code/game/sound.dm b/code/game/sound.dm index 18dd9e718a..4fef9f41ed 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -290,4 +290,21 @@ //Are these even used? //Yes var/list/keyboard_sound = list ('sound/effects/keyboard/keyboard1.ogg','sound/effects/keyboard/keyboard2.ogg','sound/effects/keyboard/keyboard3.ogg', 'sound/effects/keyboard/keyboard4.ogg') var/list/bodyfall_sound = list('sound/effects/bodyfall1.ogg','sound/effects/bodyfall2.ogg','sound/effects/bodyfall3.ogg','sound/effects/bodyfall4.ogg') -var/list/teppi_sound = list('sound/voice/teppi/gyooh1.ogg', 'sound/voice/teppi/gyooh2.ogg', 'sound/voice/teppi/gyooh3.ogg', 'sound/voice/teppi/gyooh4.ogg', 'sound/voice/teppi/gyooh5.ogg', 'sound/voice/teppi/gyooh6.ogg', 'sound/voice/teppi/snoot1.ogg', 'sound/voice/teppi/snoot2.ogg') \ No newline at end of file +var/list/teppi_sound = list('sound/voice/teppi/gyooh1.ogg', 'sound/voice/teppi/gyooh2.ogg', 'sound/voice/teppi/gyooh3.ogg', 'sound/voice/teppi/gyooh4.ogg', 'sound/voice/teppi/gyooh5.ogg', 'sound/voice/teppi/gyooh6.ogg', 'sound/voice/teppi/snoot1.ogg', 'sound/voice/teppi/snoot2.ogg') +var/list/talk_sound = list('sound/talksounds/a.ogg','sound/talksounds/b.ogg','sound/talksounds/c.ogg','sound/talksounds/d.ogg','sound/talksounds/e.ogg','sound/talksounds/f.ogg','sound/talksounds/g.ogg','sound/talksounds/h.ogg') +var/list/emote_sound = list('sound/talksounds/me_a.ogg','sound/talksounds/me_b.ogg','sound/talksounds/me_c.ogg','sound/talksounds/me_d.ogg','sound/talksounds/me_e.ogg','sound/talksounds/me_f.ogg') + +//Goon sounds +var/list/goon_speak_one_sound = list('sound/talksounds/goon/speak_1.ogg', 'sound/talksounds/goon/speak_1_ask.ogg', 'sound/talksounds/goon/speak_1_exclaim.ogg') +var/list/goon_speak_two_sound = list('sound/talksounds/goon/speak_2.ogg', 'sound/talksounds/goon/speak_2_ask.ogg', 'sound/talksounds/goon/speak_2_exclaim.ogg') +var/list/goon_speak_three_sound = list('sound/talksounds/goon/speak_3.ogg', 'sound/talksounds/goon/speak_3_ask.ogg', 'sound/talksounds/goon/speak_3_exclaim.ogg') +var/list/goon_speak_four_sound = list('sound/talksounds/goon/speak_4.ogg', 'sound/talksounds/goon/speak_4_ask.ogg', 'sound/talksounds/goon/speak_4_exclaim.ogg') +var/list/goon_speak_blub_sound = list('sound/talksounds/goon/blub.ogg', 'sound/talksounds/goon/blub_ask.ogg', 'sound/talksounds/goon/blub_exclaim.ogg') +var/list/goon_speak_bottalk_sound = list('sound/talksounds/goon/bottalk_1.ogg', 'sound/talksounds/goon/bottalk_2.ogg', 'sound/talksounds/goon/bottalk_3.ogg', 'sound/talksounds/goon/bottalk_4.wav') +var/list/goon_speak_buwoo_sound = list('sound/talksounds/goon/buwoo.ogg', 'sound/talksounds/goon/buwoo_ask.ogg', 'sound/talksounds/goon/buwoo_exclaim.ogg') +var/list/goon_speak_cow_sound = list('sound/talksounds/goon/cow.ogg', 'sound/talksounds/goon/cow_ask.ogg', 'sound/talksounds/goon/cow_exclaim.ogg') +var/list/goon_speak_lizard_sound = list('sound/talksounds/goon/lizard.ogg', 'sound/talksounds/goon/lizard_ask.ogg', 'sound/talksounds/goon/lizard_exclaim.ogg') +var/list/goon_speak_pug_sound = list('sound/talksounds/goon/pug.ogg', 'sound/talksounds/goon/pug_ask.ogg', 'sound/talksounds/goon/pug_exclaim.ogg') +var/list/goon_speak_pugg_sound = list('sound/talksounds/goon/pugg.ogg', 'sound/talksounds/goon/pugg_ask.ogg', 'sound/talksounds/goon/pugg_exclaim.ogg') +var/list/goon_speak_roach_sound = list('sound/talksounds/goon/roach.ogg', 'sound/talksounds/goon/roach_ask.ogg', 'sound/talksounds/goon/roach_exclaim.ogg') +var/list/goon_speak_skelly_sound = list('sound/talksounds/goon/skelly.ogg', 'sound/talksounds/goon/skelly_ask.ogg', 'sound/talksounds/goon/skelly_exclaim.ogg') diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index fb41f13682..48ee1a884c 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -320,6 +320,26 @@ var/list/flooring_types icon_base = "tealcarpet" build_type = /obj/item/stack/tile/carpet/teal +/decl/flooring/carpet/browncarpet + name = "brown carpet" + icon_base = "brncarpet" + build_type = /obj/item/stack/tile/carpet/brncarpet + +/decl/flooring/carpet/blucarpet2 + name = "blue carpet" + icon_base = "blue1" + build_type = /obj/item/stack/tile/carpet/blucarpet2 + +/decl/flooring/carpet/greencarpet + name = "green carpet" + icon_base = "green" + build_type = /obj/item/stack/tile/carpet/greencarpet + +/decl/flooring/carpet/purplecarpet + name = "purple carpet" + icon_base = "purple" + build_type = /obj/item/stack/tile/carpet/purplecarpet + /decl/flooring/carpet/geo name = "geometric carpet" icon_base = "geocarpet" diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm index c81c771263..b33ccccb90 100644 --- a/code/game/turfs/flooring/flooring_premade.dm +++ b/code/game/turfs/flooring/flooring_premade.dm @@ -60,6 +60,26 @@ icon_state = "oracarpet" initial_flooring = /decl/flooring/carpet/oracarpet +/turf/simulated/floor/carpet/brown + name = "brown carpet" + icon_state = "brncarpet" + initial_flooring = /decl/flooring/carpet/browncarpet + +/turf/simulated/floor/carpet/blue2 + name = "blue carpet" + icon_state = "blue1" + initial_flooring = /decl/flooring/carpet/blucarpet2 + +/turf/simulated/floor/carpet/green + name = "green carpet" + icon_state = "green" + initial_flooring = /decl/flooring/carpet/greencarpet + +/turf/simulated/floor/carpet/purple + name = "purple carpet" + icon_state = "purple" + initial_flooring = /decl/flooring/carpet/purplecarpet + /turf/simulated/floor/carpet/geo name = "geometric carpet" icon_state = "geocarpet" diff --git a/code/game/world.dm b/code/game/world.dm index b962eb028f..01416b57ba 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -113,7 +113,7 @@ var/world_topic_spam_protect_time = world.timeofday s["players"] = 0 s["stationtime"] = stationtime2text() s["roundduration"] = roundduration2text() - s["map"] = strip_improper(using_map.full_name) //Done to remove the non-UTF-8 text macros + s["map"] = strip_improper(using_map.full_name) //Done to remove the non-UTF-8 text macros if(input["status"] == "2") // Shiny new hip status. var/active = 0 @@ -494,12 +494,9 @@ var/world_topic_spam_protect_time = world.timeofday if (copytext(line, 1, 2) == ";") continue - var/title = "Mentor" - var/rights = admin_ranks[title] - var/ckey = copytext(line, 1, length(line)+1) - var/datum/admins/D = new /datum/admins(title, rights, ckey) - D.associate(GLOB.directory[ckey]) + var/datum/mentor/M = new /datum/mentor(ckey) + M.associate(GLOB.directory[ckey]) /world/proc/update_status() var/s = "" @@ -529,7 +526,7 @@ var/world_topic_spam_protect_time = world.timeofday features += config.abandon_allowed ? "respawn" : "no respawn" features += config.persistence_disabled ? "persistence disabled" : "persistence enabled" - + features += config.persistence_ignore_mapload ? "persistence mapload disabled" : "persistence mapload enabled" if (config && config.allow_vote_mode) @@ -663,7 +660,7 @@ var/failed_old_db_connections = 0 if(dbcon_old?.IsConnected()) results += "WARNING: dbcon_old is connected, not touching it, but is this intentional?" - + if(!config.sql_enabled) results += "stopping because config.sql_enabled = false" else @@ -672,7 +669,7 @@ var/failed_old_db_connections = 0 results += "SUCCESS: set up a connection successfully with setup_database_connection()" else results += "FAIL: failed to connect to the database with setup_database_connection()" - + results += "-- DB Reset End --" to_world_log(results.Join("\n")) @@ -681,11 +678,11 @@ var/failed_old_db_connections = 0 if(!istype(GLOB.players_by_zlevel, /list)) GLOB.players_by_zlevel = new /list(world.maxz, 0) GLOB.living_players_by_zlevel = new /list(world.maxz, 0) - + while(GLOB.players_by_zlevel.len < world.maxz) GLOB.players_by_zlevel.len++ GLOB.players_by_zlevel[GLOB.players_by_zlevel.len] = list() - + GLOB.living_players_by_zlevel.len++ GLOB.living_players_by_zlevel[GLOB.living_players_by_zlevel.len] = list() @@ -727,10 +724,10 @@ var/global/game_id = null game_id = "" var/list/c = list( - "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", - "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", - "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", - "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", + "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", + "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", + "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", + "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" ) var/l = c.len diff --git a/code/global.dm b/code/global.dm index d21a5ead82..cd4cd35864 100644 --- a/code/global.dm +++ b/code/global.dm @@ -139,7 +139,7 @@ var/list/robot_module_types = list( "Standard", "Engineering", "Surgeon", "Crisis", "Miner", "Janitor", "Service", "Clerical", "Security", "Research", "Medihound", "K9", "Janihound", "Sci-borg", "Pupdozer", - "Service-Hound", "BoozeHound", "KMine" + "Service-Hound", "BoozeHound", "KMine", "TraumaHound" ) // List of modules added during code red var/list/emergency_module_types = list( diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index e8bfad6c0c..31773e10b4 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1,5 +1,3 @@ - -var/global/BSACooldown = 0 var/global/floorIsLava = 0 @@ -1565,8 +1563,8 @@ var/datum/announcement/minor/admin_min_announcer = new for(var/client/C in GLOB.admins) if((R_ADMIN | R_MOD | R_EVENT) & C.holder.rights) to_chat(C, "FAX LOG:[key_name_admin(src.owner)] has sent a fax message to [destination.department] (VIEW)") - - var/plaintext_title = P.sender ? "replied to [key_name(P.sender)]'s fax" : "sent a fax message to [destination.department]" + + var/plaintext_title = P.sender ? "replied to [key_name(P.sender)]'s fax" : "sent a fax message to [destination.department]" var/fax_text = paper_html_to_plaintext(P.info) log_game(plaintext_title) log_game(fax_text) diff --git a/code/modules/admin/admin_verb_lists_vr.dm b/code/modules/admin/admin_verb_lists_vr.dm index 8f9bdb4eb3..2705a12411 100644 --- a/code/modules/admin/admin_verb_lists_vr.dm +++ b/code/modules/admin/admin_verb_lists_vr.dm @@ -7,6 +7,8 @@ var/list/admin_verbs_default = list( /client/proc/cmd_admin_say, //VOREStation Add, /client/proc/cmd_mod_say, //VOREStation Add, /client/proc/cmd_event_say, //VOREStation Add, + /client/proc/cmd_mentor_ticket_panel, + /client/proc/cmd_mentor_say // /client/proc/hide_verbs, //hides all our adminverbs, //VOREStation Remove, // /client/proc/hide_most_verbs, //hides all our hideable adminverbs, //VOREStation Remove, // /client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify, //VOREStation Remove, @@ -122,6 +124,8 @@ var/list/admin_verbs_admin = list( /datum/admins/proc/sendFax, /client/proc/despawn_player, /datum/admins/proc/view_feedback, + /client/proc/make_mentor, + /client/proc/unmake_mentor, /client/proc/setckey, //YW add - readds SetCkey proc /client/proc/dbcon_fix //YW add - adds Fix Database Connection proc ) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index d77d72bfa1..4f6ae77ead 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -24,6 +24,8 @@ else if(href_list["ahelp_tickets"]) GLOB.ahelp_tickets.BrowseTickets(text2num(href_list["ahelp_tickets"])) + mentor_commands(href, href_list, src) + if(href_list["dbsearchckey"] || href_list["dbsearchadmin"]) var/adminckey = href_list["dbsearchadmin"] diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index f2f484ed7c..2427b2441d 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -17,7 +17,7 @@ return var/image/cross = image('icons/obj/storage.dmi',"bible") - msg = "[bicon(cross)] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src, src)]) (CA) (SC) (SMITE): [msg]" + msg = "\icon[cross][bicon(cross)] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) ([admin_jump_link(src, src)]) (CA) (SC) (SMITE): [msg]" for(var/client/C in GLOB.admins) if(R_ADMIN|R_EVENT & C.holder.rights) diff --git a/code/modules/admin/verbs/smite.dm b/code/modules/admin/verbs/smite.dm index 78fd832f11..a407454d2b 100644 --- a/code/modules/admin/verbs/smite.dm +++ b/code/modules/admin/verbs/smite.dm @@ -25,21 +25,21 @@ broken_legs++ if(!broken_legs) to_chat(src,"[target] didn't have any breakable legs, sorry.") - + if(SMITE_BLUESPACEARTILLERY) bluespace_artillery(target,src) - + if(SMITE_SPONTANEOUSCOMBUSTION) target.adjust_fire_stacks(10) target.IgniteMob() target.visible_message("[target] bursts into flames!") - + if(SMITE_LIGHTNINGBOLT) var/turf/T = get_step(get_step(target, NORTH), NORTH) T.Beam(target, icon_state="lightning[rand(1,12)]", time = 5) target.electrocute_act(75,def_zone = BP_HEAD) target.visible_message("[target] is struck by lightning!") - + else return //Injection? Don't print any messages. @@ -50,14 +50,6 @@ if(!istype(target)) return - if(BSACooldown) - if(user) - to_chat(user,"BSA is still cooling down, please wait!") - return - - BSACooldown = 1 - VARSET_IN(global, BSACooldown, FALSE, 5 SECONDS) - to_chat(target,"You've been hit by bluespace artillery!") log_and_message_admins("[key_name(target)] has been hit by Bluespace Artillery fired by [key_name(user ? user : usr)]") @@ -68,10 +60,12 @@ if(prob(80)) T.break_tile_to_plating() else T.break_tile() - if(target.health == 1) + playsound(T, get_sfx("explosion"), 100, 1, get_rand_frequency(), falloff = 5) // get_sfx() is so that everyone gets the same sound + + if(target.health < 10) target.gib() else - target.adjustBruteLoss( min( 99 , (target.health - 1) ) ) + target.adjustBruteLoss( max( 99 , (target.health - 1) ) ) target.Stun(20) target.Weaken(20) target.stuttering = 20 diff --git a/code/modules/ai/ai_holder_fleeing.dm b/code/modules/ai/ai_holder_fleeing.dm index 83a7be94b8..7e9b78b1f4 100644 --- a/code/modules/ai/ai_holder_fleeing.dm +++ b/code/modules/ai/ai_holder_fleeing.dm @@ -18,6 +18,8 @@ if(can_flee) if(special_flee_check()) return TRUE + if(isbelly(holder.loc)) //VOREStation Add - Don't flee while you're in a tummy, silly + return FALSE //VOREStation Add if(!hostile && !retaliate) return TRUE // We're not hostile and someone attacked us first. if(flee_when_dying && (holder.health / holder.getMaxHealth()) <= dying_threshold) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 0f5fe03f8a..f4d544f040 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -16,13 +16,13 @@ /obj/item/device/assembly_holder/proc/attach(var/obj/item/device/assembly/D, var/obj/item/device/assembly/D2, var/mob/user) if(!D || !D2) return FALSE - + if(!istype(D) || !istype(D2)) return FALSE if(D.secured || D2.secured) return FALSE - + if(user) user.remove_from_mob(D) user.remove_from_mob(D2) @@ -151,7 +151,7 @@ if(!D) return 0 if(!secured) - visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") if((normal) && (a_right) && (a_left)) if(a_right != D) a_right.pulsed(0) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 66ed0c186a..c4c4e09e19 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -98,7 +98,7 @@ pulse(0) QDEL_LIST_NULL(i_beams) //They will get recreated next process() if the situation is still appropriate if(!holder) - visible_message("[bicon(src)] *beep* *beep*") + visible_message("\icon[src][bicon(src)] *beep* *beep*") /obj/item/device/assembly/infra/tgui_interact(mob/user, datum/tgui/ui) if(!secured) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index cc74445993..0561eb4797 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -47,7 +47,7 @@ var/turf/mainloc = get_turf(src) pulse(0) if(!holder) - mainloc.visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + mainloc.visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") /obj/item/device/assembly/prox_sensor/process() if(scanning) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index daca806f2d..3ae5c0c73e 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -117,7 +117,7 @@ if(!holder) for(var/mob/O in hearers(1, src.loc)) - O.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) + O.show_message("\icon[src][bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) /obj/item/device/assembly/signaler/proc/set_frequency(new_frequency) if(!frequency) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 33fefb58bf..0353986b57 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -44,7 +44,7 @@ return 0 pulse(0) if(!holder) - visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + visible_message("\icon[src][bicon(src)] *beep* *beep*", "*beep* *beep*") /obj/item/device/assembly/timer/process() if(timing && time-- <= 0) diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 66026a7993..7c8eee7fdf 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -13,7 +13,7 @@ recorded = msg listening = 0 var/turf/T = get_turf(src) //otherwise it won't work in hand - T.visible_message("[bicon(src)] beeps, \"Activation message is '[recorded]'.\"") + T.visible_message("\icon[src][bicon(src)] beeps, \"Activation message is '[recorded]'.\"") else if(findtext(msg, recorded)) pulse(0) @@ -23,7 +23,7 @@ if(!holder) listening = !listening var/turf/T = get_turf(src) - T.visible_message("[bicon(src)] beeps, \"[listening ? "Now" : "No longer"] recording input.\"") + T.visible_message("\icon[src][bicon(src)] beeps, \"[listening ? "Now" : "No longer"] recording input.\"") /obj/item/device/assembly/voice/attack_self(mob/user) diff --git a/code/modules/blob2/overmind/overmind.dm b/code/modules/blob2/overmind/overmind.dm index cdfe6d766a..625dca158f 100644 --- a/code/modules/blob2/overmind/overmind.dm +++ b/code/modules/blob2/overmind/overmind.dm @@ -25,7 +25,7 @@ var/list/overminds = list() universal_understand = TRUE - var/list/has_langs = list(LANGUAGE_BLOB) + var/list/has_langs = list(LANGUAGE_ANIMAL) var/datum/language/default_language = null /mob/observer/blob/get_default_language() diff --git a/code/modules/casino/boxes_casino.dm b/code/modules/casino/boxes_casino.dm new file mode 100644 index 0000000000..3b4c548056 --- /dev/null +++ b/code/modules/casino/boxes_casino.dm @@ -0,0 +1,94 @@ +/obj/item/weapon/storage/box/casino + name = "prize box" + desc = "It's a lovely golden tinted cardboard box, maybe theres something valuable inside?" + icon = 'icons/obj/casino.dmi' + icon_state = "casino_box" + +/obj/item/weapon/storage/box/casino/costume_marine + name = "ruin marine costume" + starts_with = list( + /obj/item/clothing/head/marine, + /obj/item/clothing/suit/marine + ) + +/obj/item/weapon/storage/box/casino/costume_pirate + name = "pirate costume" + starts_with = list( + /obj/item/clothing/under/pirate, + /obj/item/clothing/suit/pirate, + /obj/item/clothing/head/pirate, + /obj/item/clothing/glasses/eyepatch + ) + +/obj/item/weapon/storage/box/casino/costume_commie + name = "communist costume" + starts_with = list( + /obj/item/clothing/under/soviet, + /obj/item/clothing/head/ushanka + ) + +/obj/item/weapon/storage/box/casino/costume_wizard + name = "wizard costume" + starts_with = list( + /obj/item/clothing/suit/wizrobe/fake, + /obj/item/clothing/head/wizard/fake, + /obj/item/weapon/staff + ) + +/obj/item/weapon/storage/box/casino/costume_plaguedoctor + name = "plague doctor costume" + starts_with = list( + /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, + /obj/item/clothing/head/plaguedoctorhat + ) + +/obj/item/weapon/storage/box/casino/costume_cowboy + name = "cowboy costume" + starts_with = list( + /obj/item/clothing/under/cowboy, + /obj/item/clothing/accessory/holster/hip, + /obj/item/clothing/head/cowboy/ranger, + /obj/item/clothing/shoes/boots/cowboy/brown + ) + +/obj/item/weapon/storage/box/roulette_balls_normal + name = "roulette ball box" + desc = "A box of spare roulette balls." + icon_state = "balls" + can_hold = list(/obj/item/roulette_ball) + starts_with = list( + /obj/item/roulette_ball = 7, + /obj/item/roulette_ball/hollow = 2) + +/obj/item/weapon/storage/box/roulette_balls_fancy + name = "fancy roulette ball box" + desc = "A box of extra-pretty roulette balls." + icon_state = "balls" + can_hold = list(/obj/item/roulette_ball) + starts_with = list( + /obj/item/roulette_ball, + /obj/item/roulette_ball/hollow, + /obj/item/roulette_ball/red, + /obj/item/roulette_ball/orange, + /obj/item/roulette_ball/yellow, + /obj/item/roulette_ball/green, + /obj/item/roulette_ball/blue, + /obj/item/roulette_ball/purple, + /obj/item/roulette_ball/moon, + /obj/item/roulette_ball/planet, + /obj/item/roulette_ball/gold) + +/obj/item/weapon/storage/box/roulette_balls_cheat + name = "special roulette ball box" + desc = "A box of 'special' roulette balls." + icon_state = "balls" + can_hold = list(/obj/item/roulette_ball) + starts_with = list( + /obj/item/roulette_ball/cheat/first_twelve, + /obj/item/roulette_ball/cheat/second_twelve, + /obj/item/roulette_ball/cheat/third_twelve, + /obj/item/roulette_ball/cheat/red, + /obj/item/roulette_ball/cheat/black, + /obj/item/roulette_ball/cheat/zeros, + /obj/item/roulette_ball/cheat/odd, + /obj/item/roulette_ball/cheat/even) \ No newline at end of file diff --git a/code/modules/casino/casino.dm b/code/modules/casino/casino.dm index 569607bc0f..364ab817f7 100644 --- a/code/modules/casino/casino.dm +++ b/code/modules/casino/casino.dm @@ -5,10 +5,9 @@ // //Roulette Table // - /obj/structure/casino_table name = "casino table" - desc = "this is an unremarkable table for a casino." + desc = "This is an unremarkable table for a casino." icon = 'icons/obj/casino.dmi' icon_state = "roulette_table" density = 1 @@ -27,63 +26,331 @@ /obj/structure/casino_table/roulette_table name = "roulette" - desc = "Spin the roulette to try your luck." + desc = "The roulette. Spin to try your luck." icon_state = "roulette_wheel" + var/spin_state = "roulette_wheel_spinning" + + var/obj/item/roulette_ball/ball + +/obj/structure/casino_table/roulette_table/Initialize() + .=..() + ball = new(src) + return + +/obj/structure/casino_table/roulette_table/examine(mob/user) + .=..() + if(ball) + . += "It's currently using [ball.get_ball_desc()]." + else + . += "It doesn't have a ball." /obj/structure/casino_table/roulette_table/attack_hand(mob/user as mob) - if (busy) + if(busy) to_chat(user,"You cannot spin now! The roulette is already spinning. ") return - visible_message("\ [user] spins the roulette and throws inside little ball.") + if(!ball) + to_chat(user,"This roulette wheel has no ball! ") + return + visible_message("\The [user] spins the roulette and throws [ball.get_ball_desc()] into it.") playsound(src.loc, 'sound/machines/roulette.ogg', 40, 1) busy = 1 - icon_state = "roulette_wheel_spinning" - var/result = rand(0,36) + ball.on_spin() + icon_state = spin_state + var/result = rand(0,37) + if(ball.cheatball) + result = ball.get_cheated_result() var/color = "green" add_fingerprint(user) - if ((result>0 && result<11) || (result>18 && result<29)) - if (result%2) + if((result > 0 && result < 11) || (result > 18 && result < 29)) + if(result % 2) color="red" - else - color="black" - if ( (result>10 && result<19) || (result>28) ) - if (result%2) + else color="black" - else - color="red" + if((result > 10 && result < 19) || (result > 28 && result < 37)) + if(result % 2) + color="black" + else + color="red" + if(result == 37) + result = "00" spawn(5 SECONDS) visible_message("The roulette stops spinning, the ball landing on [result], [color].") - busy=0 - icon_state = "roulette_wheel" + busy = 0 + icon_state = initial(icon_state) + +/obj/structure/casino_table/roulette_table/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W, /obj/item/roulette_ball)) + if(!ball) + user.drop_from_inventory(W) + W.forceMove(src) + ball = W + to_chat(user, "You insert [W] into [src].") + return + ..() + +/obj/structure/casino_table/roulette_table/verb/remove_ball() + set name = "Remove Roulette Ball" + set category = "Object" + set src in oview(1) + + if(!usr || !isturf(usr.loc)) + return + if(usr.stat || usr.restrained()) + return + if(ismouse(usr) || (isobserver(usr))) + return + + if(busy) + to_chat(usr, "You cannot remove \the [ball] while [src] is spinning!") + return + + if(ball) + usr.put_in_hands(ball) + to_chat(usr, "You remove \the [ball] from [src].") + ball = null + return + else + to_chat(usr, "There is no ball in [src]!") + return + +/obj/structure/casino_table/roulette_table/long + icon_state = "roulette_wheel_long" + spin_state = "roulette_wheel_long_spinning" + +/obj/structure/casino_table/roulette_long + name = "roulette table" + desc = "Roulette table." + icon_state = "roulette_long" /obj/structure/casino_table/roulette_chart name = "roulette chart" desc = "Roulette chart. Place your bets!" icon_state = "roulette_table" -// -//Blackjack table - no sprite -// +/obj/item/roulette_ball + name = "roulette ball" + desc = "A small ball used for roulette wheel. This one is made of regular metal." + var/ball_desc = "a small metal ball" + icon = 'icons/obj/casino.dmi' + icon_state = "roulette_ball" + var/cheatball = FALSE + +/obj/item/roulette_ball/proc/get_cheated_result() + return rand(0,37) // No cheating by default + +/obj/item/roulette_ball/proc/get_ball_desc() + return ball_desc + +/obj/item/roulette_ball/proc/on_spin() + return + +/obj/item/roulette_ball/gold + name = "golden roulette ball" + desc = "A small ball used for roulette wheel. This one is particularly gaudy." + ball_desc = "a shiny golden ball" + icon_state = "roulette_ball_gold" + +/obj/item/roulette_ball/red + name = "red roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate red." + ball_desc = "a striped red ball" + icon_state = "roulette_ball_red" + +/obj/item/roulette_ball/orange + name = "orange roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate orange." + ball_desc = "a striped orange ball" + icon_state = "roulette_ball_orange" + +/obj/item/roulette_ball/green + name = "green roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate green." + ball_desc = "a smooth green ball" + icon_state = "roulette_ball_green" + +/obj/item/roulette_ball/blue + name = "blue roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate blue." + ball_desc = "a striped blue ball" + icon_state = "roulette_ball_blue" + +/obj/item/roulette_ball/yellow + name = "yellow roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate yellow." + ball_desc = "a smooth yellow ball" + icon_state = "roulette_ball_yellow" + +/obj/item/roulette_ball/purple + name = "purple roulette ball" + desc = "A small ball used for roulette wheel. This one is ornate purple." + ball_desc = "a dotted purple ball" + icon_state = "roulette_ball_purple" + +/obj/item/roulette_ball/planet + name = "planet roulette ball" + desc = "A small ball used for roulette wheel. This one looks like a small earth-like planet." + ball_desc = "a planet-like ball" + icon_state = "roulette_ball_earth" + +/obj/item/roulette_ball/moon + name = "moon roulette ball" + desc = "A small ball used for roulette wheel. This one looks like a small moon." + ball_desc = "a moon-like ball" + icon_state = "roulette_ball_moon" + +/obj/item/roulette_ball/hollow + name = "glass roulette ball" + desc = "A small ball used for roulette wheel. This one is made of glass and seems to be openable." + ball_desc = "a small glass ball" + icon_state = "roulette_ball_glass" + + var/obj/item/weapon/holder/trapped + +/obj/item/roulette_ball/hollow/examine(mob/user) + .=..() + if(trapped) + . += "You can see [trapped] trapped inside!" + else + . += "It appears to be empty." + +/obj/item/roulette_ball/hollow/get_ball_desc() + .=..() + if(trapped && trapped.held_mob) + . += " with [trapped.name] trapped within" + return + +/obj/item/roulette_ball/hollow/attackby(var/obj/item/W, var/mob/user) + if(trapped) + to_chat(user, "This ball already has something trapped in it!") + return + if(istype(W, /obj/item/weapon/holder)) + var/obj/item/weapon/holder/H = W + if(!H.held_mob) + to_chat(user, "This holder has nobody in it? Yell at a developer!") + return + if(H.held_mob.get_effective_size(TRUE) > 50) + to_chat(user, "\The [H] is too big to fit inside!") + return + user.drop_from_inventory(H) + H.forceMove(src) + trapped = H + to_chat(user, "You trap \the [H] inside the glass roulette ball.") + to_chat(H.held_mob, "\The [user] traps you inside a glass roulette ball!") + update_icon() + +/obj/item/roulette_ball/hollow/update_icon() + if(trapped && trapped.held_mob) + icon_state = "roulette_ball_glass_full" + else + icon_state = "roulette_ball_glass" + +/obj/item/roulette_ball/hollow/attack_self(mob/user as mob) + if(!trapped) + to_chat(user, "\The [src] is empty!") + return + else + user.put_in_hands(trapped) + if(trapped.held_mob) + to_chat(user, "You take \the [trapped] out of the glass roulette ball.") + to_chat(trapped.held_mob, "\The [user] takes you out of a glass roulette ball.") + trapped = null + update_icon() + +/obj/item/roulette_ball/hollow/on_holder_escape() + trapped = null + update_icon() + +/obj/item/roulette_ball/hollow/on_spin() + if(trapped && trapped.held_mob) + to_chat(trapped.held_mob, "THE WHOLE WORLD IS SENT WHIRLING AS THE ROULETTE SPINS!!!") + +/obj/item/roulette_ball/hollow/Destroy() + if(trapped) + trapped.forceMove(src.loc) + trapped = null + return ..() + +/obj/item/roulette_ball/cheat + cheatball = TRUE + +/obj/item/roulette_ball/cheat/first_twelve + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on first 12." + +/obj/item/roulette_ball/cheat/first_twelve/get_cheated_result() + return pick(list(1,2,3,4,5,6,7,8,9,10,11,12)) + +/obj/item/roulette_ball/cheat/second_twelve + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on second 12." + +/obj/item/roulette_ball/cheat/second_twelve/get_cheated_result() + return pick(list(13,14,15,16,17,18,19,20,21,22,23,24)) + +/obj/item/roulette_ball/cheat/third_twelve + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on third 12." + +/obj/item/roulette_ball/cheat/third_twelve/get_cheated_result() + return pick(list(25,26,27,28,29,30,31,32,33,34,35,36)) + +/obj/item/roulette_ball/cheat/zeros + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on 0 or 00." + +/obj/item/roulette_ball/cheat/zeros/get_cheated_result() + return pick(list(0, 37)) + +/obj/item/roulette_ball/cheat/red + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on red." + +/obj/item/roulette_ball/cheat/red/get_cheated_result() + return pick(list(1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36)) + +/obj/item/roulette_ball/cheat/black + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on black." + +/obj/item/roulette_ball/cheat/black/get_cheated_result() + return pick(list(2,4,6,8,10,11,13,15,17,20,22,24,26,28,29,31,33,35)) + +/obj/item/roulette_ball/cheat/even + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on even." + +/obj/item/roulette_ball/cheat/even/get_cheated_result() + return pick(list(2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36)) + +/obj/item/roulette_ball/cheat/odd + desc = "A small ball used for roulette wheel. This one is made of regular metal. Its weighted to only land on odd." + +/obj/item/roulette_ball/cheat/odd/get_cheated_result() + return pick(list(1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35)) + +// +//Blackjack table +// /obj/structure/casino_table/blackjack_l name = "gambling table" - desc = "Gambling table, try your luck and skills! " + desc = "Gambling table, try your luck and skills!" icon_state = "blackjack_l" -/obj/structure/casino_table/blackjack_r - name = "gambling table" - desc = "Gambling table, try your luck and skills! " - icon_state = "blackjack_r" - /obj/structure/casino_table/blackjack_m name = "gambling table" - desc = "Gambling table, try your luck and skills! " + desc = "Gambling table, try your luck and skills!" icon_state = "blackjack_m" +/obj/structure/casino_table/blackjack_r + name = "gambling table" + desc = "Gambling table, try your luck and skills!" + icon_state = "blackjack_r" + +// +//Craps table +// +/obj/structure/casino_table/craps + name = "craps table" + desc = "A padded table designed for dice games!" + icon_state = "craps_table" + // //Wheel. Of. FORTUNE! // - /obj/machinery/wheel_of_fortune name = "wheel of fortune" desc = "The Wheel of Fortune! Insert chips and may fortune favour the lucky one at the next lottery!" @@ -269,7 +536,6 @@ // //Slave Terminal // - /obj/machinery/casinoslave_handler name = "Sentient Prize Automated Sales Machinery" desc = "The Sentient Prize Automated Sales Machinery, also known as SPASM! Here one can see who is on sale as sentinet prizes, as well as selling self and also buying prizes." diff --git a/code/modules/casino/casino_book.dm b/code/modules/casino/casino_book.dm index 1f80817112..1b3ee5163e 100644 --- a/code/modules/casino/casino_book.dm +++ b/code/modules/casino/casino_book.dm @@ -5,7 +5,6 @@ // //Casino Manual - NEEDS EDITING // - /obj/item/weapon/book/manual/casino name = "A dummy guide to losing your thalers" icon = 'icons/obj/casino.dmi' diff --git a/code/modules/casino/casino_prize_vendor.dm b/code/modules/casino/casino_prize_vendor.dm index 0355a73bb4..17adc4bf5f 100644 --- a/code/modules/casino/casino_prize_vendor.dm +++ b/code/modules/casino/casino_prize_vendor.dm @@ -90,6 +90,26 @@ CASINO_PRIZE("Chameleon mask", /obj/item/clothing/under/chameleon, 1, 250, "clothing"), CASINO_PRIZE("Ian costume", /obj/item/clothing/suit/storage/hooded/costume/ian, 1, 50, "clothing"), CASINO_PRIZE("Carp costume", /obj/item/clothing/suit/storage/hooded/costume/carp, 1, 50, "clothing"), + CASINO_PRIZE("Plague doctor costume", /obj/item/weapon/storage/box/casino/costume_plaguedoctor, 1, 100, "clothing"), + CASINO_PRIZE("Wizard costume", /obj/item/weapon/storage/box/casino/costume_wizard, 1, 100, "clothing"), + CASINO_PRIZE("Pirate costume", /obj/item/weapon/storage/box/casino/costume_pirate, 1, 100, "clothing"), + CASINO_PRIZE("Commie costume", /obj/item/weapon/storage/box/casino/costume_commie, 1, 100, "clothing"), + CASINO_PRIZE("Marine costume", /obj/item/weapon/storage/box/casino/costume_marine, 1, 100, "clothing"), + CASINO_PRIZE("Cowboy costume", /obj/item/weapon/storage/box/casino/costume_cowboy, 1, 100, "clothing"), + ) + item_list["Donk Soft"] = list( + CASINO_PRIZE("Donk-Soft shotgun", /obj/item/weapon/gun/projectile/shotgun/pump/toy, 1, 250, "misc"), + CASINO_PRIZE("Donk-Soft mosin-nagant", /obj/item/weapon/gun/projectile/shotgun/pump/toy/moistnugget, 1, 250, "misc"), + CASINO_PRIZE("Donk-Soft pistol", /obj/item/weapon/gun/projectile/pistol/toy, 1, 150, "misc"), + CASINO_PRIZE("Donk-Soft levergun", /obj/item/weapon/gun/projectile/shotgun/pump/toy/levergun, 1, 250, "misc"), + CASINO_PRIZE("Donk-Soft commemorative pistol", /obj/item/weapon/gun/projectile/pistol/toy/n99, 1, 150, "misc"), + CASINO_PRIZE("Donk-Soft revolver", /obj/item/weapon/gun/projectile/revolver/toy, 1, 150, "misc"), + CASINO_PRIZE("Donk-Soft big-iron", /obj/item/weapon/gun/projectile/revolver/toy/big_iron, 1, 150, "misc"), + CASINO_PRIZE("Donk-Soft crossbow", /obj/item/weapon/gun/projectile/revolver/toy/crossbow, 1, 100, "misc"), + CASINO_PRIZE("Donk-Soft sawn off shotgun", /obj/item/weapon/gun/projectile/revolver/toy/sawnoff, 1, 200, "misc"), + CASINO_PRIZE("Donk-Soft SMG", /obj/item/weapon/gun/projectile/automatic/toy, 1, 300, "misc"), + CASINO_PRIZE("Foam Darts", /obj/item/ammo_magazine/ammo_box/foam, 1, 50, "misc"), + CASINO_PRIZE("Riot Darts", /obj/item/ammo_magazine/ammo_box/foam/riot, 1, 100, "misc"), ) item_list["Miscellaneous"] = list( CASINO_PRIZE("Toy sword", /obj/item/toy/sword, 1, 50, "misc"), @@ -102,8 +122,28 @@ CASINO_PRIZE("Whistle", /obj/item/toy/bosunwhistle, 1, 50, "misc"), CASINO_PRIZE("Golden cup", /obj/item/weapon/reagent_containers/food/drinks/golden_cup, 1, 50, "misc"), CASINO_PRIZE("Quality cigars", /obj/item/weapon/storage/fancy/cigar/havana, 1, 50, "misc"), - CASINO_PRIZE("Casino wallet (kept after event)", /obj/item/weapon/storage/wallet/casino, 1, 50, "misc"), + CASINO_PRIZE("Casino wallet", /obj/item/weapon/storage/wallet/casino, 1, 50, "misc"), CASINO_PRIZE("Casino cards", /obj/item/weapon/deck/cards/casino, 1, 50, "misc"), + CASINO_PRIZE("Casino Sentient Prize Collar", /obj/item/clothing/accessory/collar/casinoslave_fake, 1, 50, "misc"), + CASINO_PRIZE("Instrument: Accordion", /obj/item/instrument/accordion, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Banjo", /obj/item/instrument/banjo, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Musical bikehorn", /obj/item/instrument/bikehorn, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Electric guitar", /obj/item/instrument/eguitar, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Glockenspiel", /obj/item/instrument/glockenspiel, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Guitar", /obj/item/instrument/guitar, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Harmonica", /obj/item/instrument/harmonica, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Synthethic Piano", /obj/item/instrument/piano_synth, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Recorder", /obj/item/instrument/recorder, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Saxophone", /obj/item/instrument/saxophone, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Trombone", /obj/item/instrument/trombone, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Trumpet", /obj/item/instrument/trumpet, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Violin", /obj/item/instrument/violin, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Xylophone", /obj/item/instrument/xylophone, 1, 100, "misc"), + CASINO_PRIZE("Instrument: Golden fiddle", /obj/item/instrument/violin/golden, 1, 250, "misc"), + CASINO_PRIZE("Instrument: Trumpet (warning: spooky)", /obj/item/instrument/trumpet/spectral, 1, 200, "misc"), + CASINO_PRIZE("Instrument: Trombone (warning: spooky)", /obj/item/instrument/trombone/spectral, 1, 200, "misc"), + CASINO_PRIZE("Instrument: Saxophone (warning: spooky)", /obj/item/instrument/saxophone/spectral, 1, 200, "misc"), + CASINO_PRIZE("Instrument: Musical Moth (you monster)", /obj/item/instrument/musicalmoth, 1, 100, "misc"), ) item_list["Drinks"] = list( CASINO_PRIZE("Redeemer's brew", /obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew, 1, 50, "drinks"), @@ -115,7 +155,32 @@ CASINO_PRIZE("Bottle of Nothing", /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing, 1, 50, "drinks"), CASINO_PRIZE("Whiskey bliss", /obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey, 1, 50, "drinks"), ) - + item_list["Pets"] = list( + CASINO_PRIZE("Cat", /obj/item/weapon/grenade/spawnergrenade/casino, 1, 150, "pets"), + CASINO_PRIZE("Chicken", /obj/item/weapon/grenade/spawnergrenade/casino/chicken, 1, 200, "pets"), + CASINO_PRIZE("Cow", /obj/item/weapon/grenade/spawnergrenade/casino/cow, 1, 200, "pets"), + CASINO_PRIZE("Corgi", /obj/item/weapon/grenade/spawnergrenade/casino/corgi, 1, 200, "pets"), + CASINO_PRIZE("Fox", /obj/item/weapon/grenade/spawnergrenade/casino/fox, 1, 150, "pets"), + CASINO_PRIZE("Red panda", /obj/item/weapon/grenade/spawnergrenade/casino/redpanda, 1, 300, "pets"), + CASINO_PRIZE("Otie", /obj/item/weapon/grenade/spawnergrenade/casino/otie, 1, 500, "pets"), + CASINO_PRIZE("Snake", /obj/item/weapon/grenade/spawnergrenade/casino/snake, 1, 200, "pets"), + CASINO_PRIZE("Penguin", /obj/item/weapon/grenade/spawnergrenade/casino/penguin, 1, 150, "pets"), + CASINO_PRIZE("Fennec", /obj/item/weapon/grenade/spawnergrenade/casino/fennec, 1, 300, "pets"), + ) + item_list["Mechs and Rigs"] = list( + CASINO_PRIZE("Mech:Mining Ripley", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining, 1, 1000, "mechs"), + CASINO_PRIZE("Mech:Firefighter Ripley", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter, 1, 750, "mechs"), + CASINO_PRIZE("Mech:Odysseus", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus, 1, 1250, "mechs"), + CASINO_PRIZE("Mech:Shuttlepod", /obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod, 1, 250, "mechs"), + CASINO_PRIZE("Rig: Solgov engineering hardsuit control module", /obj/item/weapon/rig/bayeng, 1, 500, "mechs"), + CASINO_PRIZE("Rig: Solgov medical hardsuit control module", /obj/item/weapon/rig/baymed, 1, 500, "mechs"), + CASINO_PRIZE("Rig: Advanced voidsuit control module", /obj/item/weapon/rig/ce, 1, 500, "mechs"), + CASINO_PRIZE("Rig: Combat hardsuit control module", /obj/item/weapon/rig/combat, 1, 750, "mechs"), + CASINO_PRIZE("Rig: ERT-J suit control module (Elite Janitor NT approved)", /obj/item/weapon/rig/ert/janitor, 1, 250, "mechs"), + CASINO_PRIZE("Rig: Augmented tie (Elite Paper-Pusher NT approved)", /obj/item/weapon/rig/internalaffairs, 1, 250, "mechs"), + CASINO_PRIZE("Rig: Industrial suit control module", /obj/item/weapon/rig/industrial, 1, 300, "mechs"), + CASINO_PRIZE("Rig: Rescue suit control module", /obj/item/weapon/rig/medical, 1, 300, "mechs"), + ) item_list["Implants"] = list( CASINO_PRIZE("Implanter (Remember to get one unless you want to borrow from station!)", /obj/item/weapon/implanter, 1, 100, "implants"), CASINO_PRIZE("Implant: Tazer", /obj/item/weapon/implantcase/taser, 1, 1000, "implants"), diff --git a/code/modules/casino/headset_casino.dm b/code/modules/casino/headset_casino.dm new file mode 100644 index 0000000000..fa7f09d401 --- /dev/null +++ b/code/modules/casino/headset_casino.dm @@ -0,0 +1,20 @@ +/obj/item/device/radio/headset/casino + name = "casino headset" + desc = "An updated, modular intercom that fits over the head with extra comfortable for the hardworking casino luxury crew. Has encryption key for scamm-... Kind casino staff channel." + icon = 'icons/obj/casino.dmi' + icon_state = "headset" + origin_tech = list(TECH_ILLEGAL = 1) + ks1type = /obj/item/device/encryptionkey/casino + +/obj/item/device/radio/headset/casino/bowman + name = "casino bowman headset" + icon_state = "headset_alt" + adhoc_fallback = TRUE + origin_tech = list(TECH_ILLEGAL = 2) + +/obj/item/device/encryptionkey/casino + icon = 'icons/obj/casino.dmi' + icon_state = "cypherkey" + channels = list("Casino" = 1) + origin_tech = list(TECH_ILLEGAL = 1) + syndie = 1 \ No newline at end of file diff --git a/code/modules/casino/premium_vendors.dm b/code/modules/casino/premium_vendors.dm index 8107585745..ad65cd61c2 100644 --- a/code/modules/casino/premium_vendors.dm +++ b/code/modules/casino/premium_vendors.dm @@ -7,9 +7,12 @@ //Devs Feel free to modify this to vend what you please // +// +//Locked Vendors (require access to use) +// /obj/machinery/vending/deluxe_boozeomat name = "Premium Drink Distributor" - desc = "A top of the line drink vendor that carries some of the finest drinks." + desc = "A top of the line drink vendor that carries some of the finest drinks in the frontier." icon = 'icons/obj/casino.dmi' icon_state = "premiumbooze" products = list(/obj/item/weapon/glass_extra/stick = 50, @@ -126,4 +129,41 @@ req_access = list(access_bar) req_log_access = access_bar has_logs = 1 - vending_sound = "machines/vending/vending_cans.ogg" \ No newline at end of file + vending_sound = "machines/vending/vending_cans.ogg" + +/obj/machinery/vending/deluxe_cigs + name = "Premium Tobacco Distributor" + desc = "A top of the line smokes vendor that carries some of the finest tobacco based goods in the frontier." + icon = 'icons/obj/casino.dmi' + icon_state = "premiumcigs" + products = list(/obj/item/weapon/storage/fancy/cigar = 15, + /obj/item/weapon/storage/fancy/cigarettes/carcinomas = 15, + /obj/item/weapon/storage/fancy/cigarettes/professionals = 15, + /obj/item/clothing/mask/smokable/cigarette/cigar/cohiba = 30, + /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 30, + /obj/item/weapon/storage/box/matches = 5, + /obj/item/weapon/flame/lighter/zippo = 10 + ) + + contraband = list() + vend_delay = 15 + idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan. + req_access = list(access_bar) + req_log_access = access_bar + has_logs = 1 + vending_sound = "machines/vending/vending_cans.ogg" + +// +//Unlocked Vendors +// +/obj/machinery/vending/deluxe_boozeomat/open + req_access = null + req_log_access = null + +/obj/machinery/vending/deluxe_dinner/open + req_access = null + req_log_access = null + +/obj/machinery/vending/deluxe_cigs/open + req_access = null + req_log_access = null \ No newline at end of file diff --git a/code/modules/casino/spawnergrenade_casino.dm b/code/modules/casino/spawnergrenade_casino.dm new file mode 100644 index 0000000000..c7a8611b86 --- /dev/null +++ b/code/modules/casino/spawnergrenade_casino.dm @@ -0,0 +1,100 @@ +/obj/item/weapon/grenade/spawnergrenade/casino + name = "Casino Creature Container (Cat)" + desc = "It is set to detonate in 5 seconds. It will release a cat won from the casino prize vendor!" + icon = 'icons/obj/casino.dmi' + icon_state = "casino" + item_state = "flashbang" + origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2) + spawner_type = /mob/living/simple_mob/animal/passive/cat + +// Detonate now just handles the two loops that query for people in lockers and people who can see it. +/obj/item/weapon/grenade/spawnergrenade/casino/detonate() + + if(spawner_type && deliveryamt) + var/turf/T = get_turf(src) + playsound(T, 'sound/effects/phasein.ogg', 100, 1) + + for(var/i=1, i<=deliveryamt, i++) + var/atom/movable/x = new spawner_type(T) + if(prob(50)) + for(var/j = 1, j <= rand(1, 3), j++) + step(x, pick(NORTH,SOUTH,EAST,WEST)) + qdel(src) + return + +// +// Creatures +// +/obj/item/weapon/grenade/spawnergrenade/casino/penguin + desc = "It is set to detonate in 5 seconds. It will release a penguin won from the casino prize vendor!" + name = "Casino Creature Container (Penguin)" + spawner_type = /mob/living/simple_mob/animal/passive/penguin + +/obj/item/weapon/grenade/spawnergrenade/casino/chicken + desc = "It is set to detonate in 5 seconds. It will release a chicken won from the casino prize vendor!" + name = "Casino Creature Container (Chicken)" + spawner_type = /mob/living/simple_mob/animal/passive/chicken + +/obj/item/weapon/grenade/spawnergrenade/casino/cow + desc = "It is set to detonate in 5 seconds. It will release a cow won from the casino prize vendor!" + name = "Casino Creature Container (Cow)" + spawner_type = /mob/living/simple_mob/animal/passive/cow + +/obj/item/weapon/grenade/spawnergrenade/casino/corgi + desc = "It is set to detonate in 5 seconds. It will release a corgi won from the casino prize vendor!" + name = "Casino Creature Container (Corgi)" + spawner_type = /mob/living/simple_mob/animal/passive/dog/corgi + +/obj/item/weapon/grenade/spawnergrenade/casino/fox + desc = "It is set to detonate in 5 seconds. It will release a fox won from the casino prize vendor!" + name = "Casino Creature Container (Fox)" + spawner_type = /mob/living/simple_mob/animal/passive/fox + +/obj/item/weapon/grenade/spawnergrenade/casino/fennec + desc = "It is set to detonate in 5 seconds. It will release a fennec won from the casino prize vendor!" + name = "Casino Creature Container (Fennec)" + spawner_type = /mob/living/simple_mob/vore/fennec + +/obj/item/weapon/grenade/spawnergrenade/casino/snake + desc = "It is set to detonate in 5 seconds. It will release a snake won from the casino prize vendor!" + name = "Casino Creature Container (Snake)" + spawner_type = /mob/living/simple_mob/animal/passive/snake + +/obj/item/weapon/grenade/spawnergrenade/casino/redpanda + desc = "It is set to detonate in 5 seconds. It will release a red panda won from the casino prize vendor!" + name = "Casino Creature Container (Red panda)" + spawner_type = /mob/living/simple_mob/vore/redpanda + +/obj/item/weapon/grenade/spawnergrenade/casino/snake + desc = "It is set to detonate in 5 seconds. It will release a snake won from the casino prize vendor!" + name = "Casino Creature Container (Snake)" + spawner_type = /mob/living/simple_mob/animal/passive/snake + +/obj/item/weapon/grenade/spawnergrenade/casino/otie + desc = "It is set to detonate in 5 seconds. It will release a otie won from the casino prize vendor!" + name = "Casino Creature Container (Otie)" + spawner_type = /mob/living/simple_mob/otie/friendly + +// +// Mecha +// +/obj/item/weapon/grenade/spawnergrenade/casino/gygax + desc = "You feel great power inside this small round sphere, with great powers comes great responsibilities!" + name = "Mysterious Grenade" + spawner_type = /obj/mecha/combat/gygax/dark + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/mining + name = "Casino Mech Container (Mining Ripley)" + spawner_type = /obj/mecha/working/ripley/mining + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/firefighter + name = "Casino Mech Container (Firefighter Ripley)" + spawner_type = /obj/mecha/working/ripley/firefighter + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/Odysseus + name = "Casino Mech Container (Odysseus)" + spawner_type = /obj/mecha/medical/odysseus/loaded + +/obj/item/weapon/grenade/spawnergrenade/casino/gygax/shuttlepod + name = "Casino Mech Container (Shuttlepod)" + spawner_type = /obj/mecha/working/hoverpod/shuttlepod \ No newline at end of file diff --git a/code/modules/catalogue/catalogue_data_vr.dm b/code/modules/catalogue/catalogue_data_vr.dm index 7c224660ec..8c07605377 100644 --- a/code/modules/catalogue/catalogue_data_vr.dm +++ b/code/modules/catalogue/catalogue_data_vr.dm @@ -93,6 +93,14 @@ comparable conditions as wealthy members of the Diaspora." value = CATALOGUER_REWARD_TRIVIAL +/datum/category_item/catalogue/fauna/altevian + name = "Sapients - Altevian" + desc = "The Altevian are a species of tall, rodent humanoids that are akin to rats for their features. \ + The Altevian, unlike most species, do not have a home planet, nor system, adopting a fully nomadic lifestyle \ + for their survival across the stars. Instead, they have opted to live in massive super capital-class colony-ships \ + with a flagship as their place they would call home." + value = CATALOGUER_REWARD_TRIVIAL + /datum/category_item/catalogue/fauna/shadekin name = "Sapients - Shadekin" desc = "ERROR : No DNA found. ERROR : Ambient energy signature detected. Likely origin from attempt of scanning \ diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 58a97f5b03..b088ccec95 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -80,10 +80,15 @@ // Runechat messages var/list/seen_messages + //Hide top bars + var/fullscreen = FALSE + //Hide status bar + var/show_status_bar = TRUE + /////////// // INPUT // /////////// - + /// Bitfield of modifier keys (Shift, Ctrl, Alt) held currently. var/mod_keys_held = 0 /// Bitfield of movement keys (WASD/Cursor Keys) held currently. @@ -107,4 +112,4 @@ /// Movement dir of the most recently pressed movement key. Used in cardinal-only movement mode. var/last_move_dir_pressed = NONE - #endif \ No newline at end of file + #endif diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 83754688bf..03caecae80 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -60,6 +60,14 @@ cmd_admin_pm(C,null) return + if(href_list["mentorhelp_msg"]) + var/client/C = locate(href_list["mentorhelp_msg"]) + if(ismob(C)) + var/mob/M = C + C = M.client + cmd_mentor_pm(C, null) + return + if(href_list["irc_msg"]) if(!holder && received_irc_pm < world.time - 6000) //Worse they can do is spam IRC for 10 minutes to_chat(usr, "You are no longer able to use this, it's been more then 10 minutes since an admin on IRC has responded to you") @@ -86,7 +94,7 @@ return sane = TRUE break - + if(!sane) to_chat(src, "Sorry, that link doesn't appear to be valid. Please try again.") return @@ -121,6 +129,7 @@ switch(href_list["_src_"]) if("holder") hsrc = holder + if("mentorholder") hsrc = (check_rights(R_ADMIN, 0) ? holder : mentorholder) if("usr") hsrc = mob if("prefs") return prefs.process_link(usr,href_list) if("vars") return view_var_Topic(href,href_list,hsrc) @@ -184,6 +193,10 @@ GLOB.admins += src holder.owner = src + mentorholder = mentor_datums[ckey] + if (mentorholder) + mentorholder.associate(GLOB.directory[ckey]) + //preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum) prefs = preferences_datums[ckey] if(!prefs) @@ -195,6 +208,8 @@ . = ..() //calls mob.Login() prefs.sanitize_preferences() + if(prefs) + prefs.selecting_slots = FALSE connection_time = world.time connection_realtime = world.realtime @@ -259,6 +274,9 @@ if(holder) holder.owner = null GLOB.admins -= src + if (mentorholder) + mentorholder.owner = null + GLOB.mentors -= src GLOB.ahelp_tickets.ClientLogout(src) GLOB.directory -= ckey GLOB.clients -= src @@ -565,3 +583,36 @@ set name = "TguiKeyUp" set hidden = TRUE return // stub + +/client/verb/toggle_fullscreen() + set name = "Toggle Fullscreen" + set category = "OOC" + + fullscreen = !fullscreen + + if (fullscreen) + winset(usr, "mainwindow", "on-size=") + winset(usr, "mainwindow", "titlebar=false") + winset(usr, "mainwindow", "can-resize=false") + winset(usr, "mainwindow", "menu=") + winset(usr, "mainwindow", "is-maximized=false") + winset(usr, "mainwindow", "is-maximized=true") + else + winset(usr, "mainwindow", "menu=menu") + winset(usr, "mainwindow", "titlebar=true") + winset(usr, "mainwindow", "can-resize=true") + winset(usr, "mainwindow", "is-maximized=false") + winset(usr, "mainwindow", "on-size=attempt_auto_fit_viewport") // The attempt_auto_fit_viewport() proc is not implemented yet + +/* +/client/verb/toggle_status_bar() + set name = "Toggle Status Bar" + set category = "OOC" + + show_status_bar = !show_status_bar + + if (show_status_bar) + winset(usr, "input", "is-visible=true") + else + winset(usr, "input", "is-visible=false") +*/ diff --git a/code/modules/client/preference_setup/general/06_flavor.dm b/code/modules/client/preference_setup/general/06_flavor.dm index aaee96959d..794fba3e2f 100644 --- a/code/modules/client/preference_setup/general/06_flavor.dm +++ b/code/modules/client/preference_setup/general/06_flavor.dm @@ -59,12 +59,12 @@ switch(href_list["flavor_text"]) if("open") if("general") - var/msg = sanitize(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) //VOREStation Edit: separating out OOC notes - if(CanUseTopic(user)) + var/msg = sanitize(tgui_input_text(usr,"Give a general description of your character. This will be shown regardless of clothings. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) //VOREStation Edit: separating out OOC notes + if(CanUseTopic(user) && !isnull(msg)) pref.flavor_texts[href_list["flavor_text"]] = msg else - var/msg = sanitize(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]].","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) - if(CanUseTopic(user)) + var/msg = sanitize(tgui_input_text(usr,"Set the flavor text for your [href_list["flavor_text"]]. Put in a single space to make blank.","Flavor Text",html_decode(pref.flavor_texts[href_list["flavor_text"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) + if(CanUseTopic(user) && !isnull(msg)) pref.flavor_texts[href_list["flavor_text"]] = msg SetFlavorText(user) return TOPIC_HANDLED @@ -73,12 +73,12 @@ switch(href_list["flavour_text_robot"]) if("open") if("Default") - var/msg = sanitize(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE), extra = 0) - if(CanUseTopic(user)) + var/msg = sanitize(tgui_input_text(usr,"Set the default flavour text for your robot. It will be used for any module without individual setting. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot["Default"]), multiline = TRUE, prevent_enter = TRUE), extra = 0) + if(CanUseTopic(user) && !isnull(msg)) pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg else - var/msg = sanitize(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this empty, default flavour text will be used for this module.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) - if(CanUseTopic(user)) + var/msg = sanitize(tgui_input_text(usr,"Set the flavour text for your robot with [href_list["flavour_text_robot"]] module. If you leave this blank, default flavour text will be used for this module. Put in a single space to make blank.","Flavour Text",html_decode(pref.flavour_texts_robot[href_list["flavour_text_robot"]]), multiline = TRUE, prevent_enter = TRUE), extra = 0) + if(CanUseTopic(user) && !isnull(msg)) pref.flavour_texts_robot[href_list["flavour_text_robot"]] = msg SetFlavourTextRobot(user) return TOPIC_HANDLED diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index 06e44c3fd8..08504f1020 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -95,7 +95,7 @@ var/list/_client_preferences_by_type key = "DIGEST_NOISES" enabled_description = "Noisy" disabled_description = "Silent" - + /datum/client_preference/belch_noises // Belching noises - pref toggle for 'em description = "Burping" key = "BELCH_NOISES" @@ -108,7 +108,7 @@ var/list/_client_preferences_by_type enabled_description = "Noisy" disabled_description = "Silent" /datum/client_preference/whisubtle_vis - description = "Whi/Subtles Ghost Visible" + description = "Whi/Subtles Ghost Visible" key = "WHISUBTLE_VIS" enabled_description = "Visible" disabled_description = "Hidden" @@ -299,6 +299,30 @@ var/list/_client_preferences_by_type enabled_description = "On" disabled_description = "Off" +/datum/client_preference/say_sounds + description = "Say Sounds" + key = "SAY_SOUNDS" + enabled_description = "On" + disabled_description = "Off" + +/datum/client_preference/emote_sounds + description = "Me Sounds" + key = "EMOTE_SOUNDS" + enabled_description = "On" + disabled_description = "Off" + +/datum/client_preference/whisper_sounds + description = "Whisper Sounds" + key = "WHISPER_SOUNDS" + enabled_description = "On" + disabled_description = "Off" + +/datum/client_preference/subtle_sounds + description = "Subtle Sounds" + key = "SUBTLE_SOUNDS" + enabled_description = "On" + disabled_description = "Off" + /datum/client_preference/runechat_mob description = "Runechat (Mobs)" key = "RUNECHAT_MOB" @@ -338,6 +362,12 @@ var/list/_client_preferences_by_type enabled_description = "Popup New On Login" disabled_description = "Do Nothing" +/datum/client_preference/play_mentorhelp_ping + description = "Mentorhelps" + key = "SOUND_MENTORHELP" + enabled_description = "Hear" + disabled_description = "Silent" + /******************** * Staff Preferences * ********************/ 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 db6ac1e5f3..184bce83f3 100644 --- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm @@ -813,6 +813,12 @@ ckeywhitelist = list("pandora029") character_name = list("Evelyn Tareen", "Velyn Tareen") +/datum/gear/fluff/seona_flightsuit + path = /obj/item/clothing/under/fluff/foxoflightsuit/ + display_name = "padded flightsuit" + ckeywhitelist = list("pandora029") + character_name = list("Seona Young") + /datum/gear/fluff/lily_medal path = /obj/item/clothing/accessory/medal/silver/unity display_name = "Lily's Unity Medal" @@ -1021,6 +1027,13 @@ ckeywhitelist = list("seiga") character_name = list("Alfonso Oak Telanor") +/datum/gear/fluff/cerise_secbelt + path = /obj/item/weapon/storage/belt/security/fluff/cerise + display_name = "Cerise's Champion's Belt" + ckeywhitelist = list("shalax") + character_name = list("Cerise Duelliste") + allowed_roles = list("Security Officer", "Warden", "Head of Security", "Detective") + /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" @@ -1411,4 +1424,4 @@ display_name = "Lucky's amour" ckeywhitelist = list ("thedavestdave") character_name = list("Lucky") - allowed_roles = "Chaplain" \ No newline at end of file + allowed_roles = "Chaplain" diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index e1ebc54bf7..b877d7003b 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -400,7 +400,7 @@ /datum/gear/suit/wintercoat/medical/para display_name = "winter coat, paramedic" path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/para - allowed_roles = list("Medical Doctor","Chief Medical Officer","Paramedic") + allowed_roles = list("Medical Doctor","Chief Medical Officer","Paramedic","Field Medic") /datum/gear/suit/wintercoat/medical/chemist display_name = "winter coat, chemist" @@ -415,7 +415,7 @@ /datum/gear/suit/wintercoat/medical/sar display_name = "winter coat, search and rescue" path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar - allowed_roles = list("Chief Medical Officer", "Field Medic") + allowed_roles = list("Chief Medical Officer","Paramedic","Field Medic") /datum/gear/suit/wintercoat/science display_name = "winter coat, science" @@ -627,7 +627,7 @@ /datum/gear/suit/cmddressjacket display_name = "command dress jacket" - path = /obj/item/clothing/suit/storage/cmddressjacket + path = /obj/item/clothing/suit/storage/toggle/cmddressjacket allowed_roles = list("Site Manager", "Head of Personnel", "Command Secretary") /datum/gear/suit/miscellaneous/kimono @@ -663,4 +663,4 @@ "Pink kimono" = /obj/item/clothing/suit/kimono/pink, "Earth kimono" = /obj/item/clothing/suit/kimono/earth ) - gear_tweaks += new/datum/gear_tweak/path(kimonos) \ No newline at end of file + gear_tweaks += new/datum/gear_tweak/path(kimonos) diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index f4440117c4..17ee5ed672 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -232,6 +232,10 @@ return 1 . = OnTopic(href, href_list, usr) + + if(!pref_mob || !pref_mob.client) // Just in case we disappeared during OnTopic + return 1 + if(. & TOPIC_UPDATE_PREVIEW) pref_mob.client.prefs.update_preview_icon() if(. & TOPIC_REFRESH) diff --git a/code/modules/client/preference_setup/vore/02_size.dm b/code/modules/client/preference_setup/vore/02_size.dm index 37a71587b1..8cfd64c47d 100644 --- a/code/modules/client/preference_setup/vore/02_size.dm +++ b/code/modules/client/preference_setup/vore/02_size.dm @@ -3,6 +3,8 @@ #define WEIGHT_MAX 500 #define WEIGHT_CHANGE_MIN 0 #define WEIGHT_CHANGE_MAX 100 +#define MAX_VOICE_FREQ 70000 +#define MIN_VOICE_FREQ 15000 // Define a place to save in character setup /datum/preferences @@ -12,6 +14,8 @@ var/weight_gain = 100 // Weight gain rate. var/weight_loss = 50 // Weight loss rate. var/fuzzy = 0 // Preference toggle for sharp/fuzzy icon. Default sharp. + var/voice_freq = 0 + var/voice_sound = "beep-boop" // Definition of the stuff for Sizing /datum/category_item/player_setup_item/vore/size @@ -24,6 +28,8 @@ S["weight_gain"] >> pref.weight_gain S["weight_loss"] >> pref.weight_loss S["fuzzy"] >> pref.fuzzy + S["voice_freq"] >> pref.voice_freq + S["voice_sound"] >> pref.voice_sound /datum/category_item/player_setup_item/vore/size/save_character(var/savefile/S) S["size_multiplier"] << pref.size_multiplier @@ -31,12 +37,16 @@ S["weight_gain"] << pref.weight_gain S["weight_loss"] << pref.weight_loss S["fuzzy"] << pref.fuzzy + S["voice_freq"] << pref.voice_freq + S["voice_sound"] << pref.voice_sound /datum/category_item/player_setup_item/vore/size/sanitize_character() pref.weight_vr = sanitize_integer(pref.weight_vr, WEIGHT_MIN, WEIGHT_MAX, initial(pref.weight_vr)) pref.weight_gain = sanitize_integer(pref.weight_gain, WEIGHT_CHANGE_MIN, WEIGHT_CHANGE_MAX, initial(pref.weight_gain)) pref.weight_loss = sanitize_integer(pref.weight_loss, WEIGHT_CHANGE_MIN, WEIGHT_CHANGE_MAX, initial(pref.weight_loss)) pref.fuzzy = sanitize_integer(pref.fuzzy, 0, 1, initial(pref.fuzzy)) + if(pref.voice_freq != 0) + pref.voice_freq = sanitize_integer(pref.voice_freq, MIN_VOICE_FREQ, MAX_VOICE_FREQ, initial(pref.fuzzy)) if(pref.size_multiplier == null || pref.size_multiplier < RESIZE_TINY || pref.size_multiplier > RESIZE_HUGE) pref.size_multiplier = initial(pref.size_multiplier) @@ -45,12 +55,47 @@ character.weight_gain = pref.weight_gain character.weight_loss = pref.weight_loss character.fuzzy = pref.fuzzy + character.voice_freq = pref.voice_freq character.resize(pref.size_multiplier, animate = FALSE, ignore_prefs = TRUE) + if(!pref.voice_sound) + character.voice_sounds_list = talk_sound + else + switch(pref.voice_sound) + if("beep-boop") + character.voice_sounds_list = talk_sound + if("goon speak 1") + character.voice_sounds_list = goon_speak_one_sound + if("goon speak 2") + character.voice_sounds_list = goon_speak_two_sound + if("goon speak 3") + character.voice_sounds_list = goon_speak_three_sound + if("goon speak 4") + character.voice_sounds_list = goon_speak_four_sound + if("goon speak blub") + character.voice_sounds_list = goon_speak_blub_sound + if("goon speak bottalk") + character.voice_sounds_list = goon_speak_bottalk_sound + if("goon speak buwoo") + character.voice_sounds_list = goon_speak_buwoo_sound + if("goon speak cow") + character.voice_sounds_list = goon_speak_cow_sound + if("goon speak lizard") + character.voice_sounds_list = goon_speak_lizard_sound + if("goon speak pug") + character.voice_sounds_list = goon_speak_pug_sound + if("goon speak pugg") + character.voice_sounds_list = goon_speak_pugg_sound + if("goon speak roach") + character.voice_sounds_list = goon_speak_roach_sound + if("goon speak skelly") + character.voice_sounds_list = goon_speak_skelly_sound /datum/category_item/player_setup_item/vore/size/content(var/mob/user) . += "
" . += "Scale: [round(pref.size_multiplier*100)]%
" . += "Scaled Appearance: [pref.fuzzy ? "Fuzzy" : "Sharp"]
" + . += "Voice Frequency: [pref.voice_freq]
" + . += "Voice Sounds: [pref.voice_sound]
" . += "
" . += "Relative Weight: [pref.weight_vr]
" . += "Weight Gain Rate: [pref.weight_gain]
" @@ -104,4 +149,44 @@ pref.weight_loss = round(text2num(weight_loss_rate),1) return TOPIC_REFRESH + else if(href_list["voice_freq"]) + var/list/preset_voice_freqs = list("high" = MAX_VOICE_FREQ, "middle-high" = 56250, "middle" = 42500, "middle-low"= 28750, "low" = MIN_VOICE_FREQ, "custom" = 1, "random" = 0) + var/choice = tgui_input_list(usr, "What would you like to set your voice frequency to? ([MIN_VOICE_FREQ] - [MAX_VOICE_FREQ])", "Voice Frequency", preset_voice_freqs) + if(!choice) + return + choice = preset_voice_freqs[choice] + if(choice == 0) + pref.voice_freq = choice + return TOPIC_REFRESH + else if(choice == 1) + choice = tgui_input_number(user, "Choose your character's voice frequency, ranging from [MIN_VOICE_FREQ] to [MAX_VOICE_FREQ]", "Custom Voice Frequency", null, MAX_VOICE_FREQ, MIN_VOICE_FREQ, round_value = TRUE) + if(choice > MAX_VOICE_FREQ) + choice = MAX_VOICE_FREQ + else if(choice < MIN_VOICE_FREQ) + choice = MIN_VOICE_FREQ + + pref.voice_freq = choice + return TOPIC_REFRESH + else if(href_list["voice_sounds_list"]) + var/list/possible_voice_types = list( + "beep-boop", + "goon speak 1", + "goon speak 2", + "goon speak 3", + "goon speak 4", + "goon speak blub", + "goon speak bottalk", + "goon speak buwoo", + "goon speak cow", + "goon speak lizard", + "goon speak pug", + "goon speak pugg", + "goon speak roach", + "goon speak skelly") + var/choice = tgui_input_list(usr, "Which set of sounds would you like to use for your character's speech sounds?", "Voice Sounds", possible_voice_types) + if(!choice) + pref.voice_sound = "beep-boop" + else + pref.voice_sound = choice + return ..(); diff --git a/code/modules/client/preferences_toggle_procs.dm b/code/modules/client/preferences_toggle_procs.dm index d928b39c2e..23287182e8 100644 --- a/code/modules/client/preferences_toggle_procs.dm +++ b/code/modules/client/preferences_toggle_procs.dm @@ -406,6 +406,58 @@ feedback_add_details("admin_verb","TRadioSounds") +/client/verb/toggle_say_sounds() + set name = "Sound-Toggle-Say" + set category = "Preferences" + set desc = "Toggle hearing a sound when somebody speaks using say." + + var/pref_path = /datum/client_preference/say_sounds + toggle_preference(pref_path) + SScharacter_setup.queue_preferences_save(prefs) + + to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/say_sounds)) ? "hear" : "not hear"] say sounds.") + + feedback_add_details("admin_verb","TSaySounds") + +/client/verb/toggle_emote_sounds() + set name = "Sound-Toggle-Me" + set category = "Preferences" + set desc = "Toggle hearing a sound when somebody speaks using me ." + + var/pref_path = /datum/client_preference/emote_sounds + toggle_preference(pref_path) + SScharacter_setup.queue_preferences_save(prefs) + + to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/emote_sounds)) ? "hear" : "not hear"] me sounds.") + + feedback_add_details("admin_verb","TMeSounds") + +/client/verb/toggle_whisper_sounds() + set name = "Sound-Toggle-Whisper" + set category = "Preferences" + set desc = "Toggle hearing a sound when somebody speaks using whisper." + + var/pref_path = /datum/client_preference/whisper_sounds + toggle_preference(pref_path) + SScharacter_setup.queue_preferences_save(prefs) + + to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/whisper_sounds)) ? "hear" : "not hear"] whisper sounds.") + + feedback_add_details("admin_verb","TWhisperSounds") + +/client/verb/toggle_subtle_sounds() + set name = "Sound-Toggle-Subtle" + set category = "Preferences" + set desc = "Toggle hearing a sound when somebody uses subtle." + + var/pref_path = /datum/client_preference/subtle_sounds + toggle_preference(pref_path) + SScharacter_setup.queue_preferences_save(prefs) + + to_chat(src, "You will now [(is_preference_enabled(/datum/client_preference/subtle_sounds)) ? "hear" : "not hear"] subtle sounds.") + + feedback_add_details("admin_verb","TSubtleSounds") + // Not attached to a pref datum because those are strict binary toggles /client/verb/toggle_examine_mode() set name = "Toggle Examine Mode" diff --git a/code/modules/client/preferences_vr.dm b/code/modules/client/preferences_vr.dm index db77b0ba6e..2241246dd0 100644 --- a/code/modules/client/preferences_vr.dm +++ b/code/modules/client/preferences_vr.dm @@ -104,4 +104,19 @@ L.capture_crystal = prefs.capture_crystal SScharacter_setup.queue_preferences_save(prefs) - feedback_add_details("admin_verb","TCaptureCrystal") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file + feedback_add_details("admin_verb","TCaptureCrystal") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/verb/toggle_mentorhelp_ping() + set name = "Toggle Mentorhelp Ping" + set category = "Preferences" + set desc = "Toggles the mentorhelp ping" + + var/pref_path = /datum/client_preference/play_mentorhelp_ping + + toggle_preference(pref_path) + + to_chat(src, "Mentorhelp pings are now [ is_preference_enabled(pref_path) ? "enabled" : "disabled"]") + + SScharacter_setup.queue_preferences_save(prefs) + + feedback_add_details("admin_verb", "TSoundMentorhelps") \ No newline at end of file diff --git a/code/modules/client/verbs/who.dm b/code/modules/client/verbs/who.dm index 445acdc1c7..ab646448c2 100644 --- a/code/modules/client/verbs/who.dm +++ b/code/modules/client/verbs/who.dm @@ -83,7 +83,7 @@ else if(check_rights(R_STEALTH, FALSE, C)) // event managers //VOREStation Edit: Retired Staff category = R_EVENT num_event_managers_online++ - + temp += "\t[C] is a [C.holder.rank]" if(holder) if(C.holder.fakekey) @@ -121,6 +121,28 @@ if(config.show_event_managers) msg += "\n Current Miscellaneous ([num_event_managers_online]):\n" + eventMmsg + var/num_mentors_online = 0 + var/mmsg = "" + + for(var/client/C in GLOB.mentors) + num_mentors_online++ + mmsg += "\t[C] is a Mentor" + if(holder) + if(isobserver(C.mob)) + mmsg += " - Observing" + else if(istype(C.mob,/mob/new_player)) + mmsg += " - Lobby" + else + mmsg += " - Playing" + + if(C.is_afk()) + var/seconds = C.last_activity_seconds() + mmsg += " (AFK - [round(seconds / 60)] minutes, [seconds % 60] seconds)" + mmsg += "\n" + + if(config.show_mentors) + msg += "\n Current Mentors ([num_mentors_online]):\n" + mmsg + msg += "\nAdminhelps are also sent to Discord. If no admins are available in game try anyway and an admin on Discord may see it and respond." to_chat(src, msg) diff --git a/code/modules/clothing/clothing_vr.dm b/code/modules/clothing/clothing_vr.dm index caf9e125d1..60d976b12e 100644 --- a/code/modules/clothing/clothing_vr.dm +++ b/code/modules/clothing/clothing_vr.dm @@ -35,6 +35,8 @@ if(istype(I,/obj/item/weapon/holder/micro)) var/full = 0 for(var/mob/M in src) + if(istype(M,/mob/living/voice)) //Don't count voices as people! + continue full++ if(full >= 2) to_chat(user, "You can't fit anyone else into \the [src]!") @@ -51,6 +53,8 @@ /obj/item/clothing/shoes/attack_self(var/mob/user) for(var/mob/M in src) + if(istype(M,/mob/living/voice)) //Don't knock voices out! + continue M.forceMove(get_turf(user)) to_chat(M, "[user] shakes you out of \the [src]!") to_chat(user, "You shake [M] out of \the [src]!") @@ -59,6 +63,8 @@ /obj/item/clothing/shoes/container_resist(mob/living/micro) var/mob/living/carbon/human/macro = loc + if(istype(micro,/mob/living/voice)) //Voices shouldn't be able to resist but we have this here just in case. + return if(!istype(macro)) to_chat(micro, "You start to climb out of [src]!") if(do_after(micro, 50, src)) @@ -106,14 +112,20 @@ spawn(100) recent_struggle = 0 - if(ishuman(src.loc)) + if(ishuman(src.loc)) //Is this on a person? var/mob/living/carbon/human/H = src.loc - if(H.shoes == src) + if(istype(user,/mob/living/voice)) //Is this a possessed item? Spooky. It can move on it's own! + to_chat(H, "The [src] shifts about, almost as if squirming!") + to_chat(user, "You cause the [src] to shift against [H]'s form! Well, what little you can get to, given your current state!") + else if(H.shoes == src) to_chat(H, "[user]'s tiny body presses against you in \the [src], squirming!") to_chat(user, "Your body presses out against [H]'s form! Well, what little you can get to!") else to_chat(H, "[user]'s form shifts around in the \the [src], squirming!") to_chat(user, "You move around inside the [src], to no avail.") + else if(istype(user,/mob/living/voice)) //Possessed! + src.visible_message("The [src] shifts about!") + to_chat(user, "You cause the [src] to shift about!") else src.visible_message("\The [src] moves a little!") to_chat(user, "You throw yourself against the inside of \the [src]!") diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 780895db22..85c00e67db 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -177,7 +177,7 @@ for(var/obj/item/piece in list(helmet,gloves,chest,boots)) if(!piece || piece.loc != wearer) continue - . += "[bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed." + . += "\icon[piece][bicon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed." if(src.loc == usr) . += "The access panel is [locked? "locked" : "unlocked"]." diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm b/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm index 8f2a7bd902..f64142b336 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces_vr.dm @@ -13,7 +13,8 @@ SPECIES_PROMETHEAN = 'icons/inventory/head/mob_skrell.dmi', SPECIES_VOX = 'icons/inventory/head/mob_vox.dmi', SPECIES_TESHARI = 'icons/inventory/head/mob_teshari.dmi', - SPECIES_GREY_YW = 'icons/inventory/head/mob_grey.dmi' /*ywedit*/ + SPECIES_ALTEVIAN = 'icons/inventory/head/mob_vr_altevian.dmi', + SPECIES_GREY_YW = 'icons/inventory/head/mob_grey.dmi' /* yw edit - shadekin */ ) /obj/item/clothing/suit/space/rig @@ -30,23 +31,21 @@ SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi', SPECIES_PROMETHEAN = 'icons/inventory/suit/mob_skrell.dmi', SPECIES_VOX = 'icons/inventory/suit/mob_vox.dmi', - SPECIES_TESHARI = 'icons/inventory/suit/mob_teshari.dmi' + SPECIES_TESHARI = 'icons/inventory/suit/mob_teshari.dmi', + SPECIES_ALTEVIAN = 'icons/inventory/suit/mob_vr_altevian.dmi' ) /obj/item/clothing/head/helmet/space/rig - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_XENOHYBRID, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_GREY_YW/*ywedit*/) - flags = PHORONGUARD //YAWN Edit + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_FENNEC, SPECIES_XENOHYBRID, SPECIES_ALTEVIAN, SPECIES_GREY_YW/* yw edit - shadekin */) /obj/item/clothing/gloves/gauntlets/rig - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_XENOHYBRID, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_GREY_YW/*ywedit*/) - flags = PHORONGUARD //YAWN Edit + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_FENNEC, SPECIES_XENOHYBRID, SPECIES_ALTEVIAN, SPECIES_GREY_YW/* yw edit - shadekin */) /obj/item/clothing/shoes/magboots/rig - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_XENOHYBRID, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_GREY_YW/*ywedit*/) - flags = PHORONGUARD //YAWN Edit + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_FENNEC, SPECIES_XENOHYBRID, SPECIES_ALTEVIAN, SPECIES_GREY_YW/* yw edit - shadekin */) /obj/item/clothing/suit/space/rig - species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_FENNEC, SPECIES_XENOHYBRID, SPECIES_GREY_YW/*ywedit*/) + species_restricted = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_TAJ, SPECIES_UNATHI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_PROMETHEAN, SPECIES_VOX, SPECIES_TESHARI, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_ALRAUNE, SPECIES_FENNEC, SPECIES_XENOHYBRID, SPECIES_ALTEVIAN, SPECIES_GREY_YW/* yw edit - shadekin */) /obj/item/clothing/shoes/magboots/rig/ce name = "advanced boots" diff --git a/code/modules/clothing/spacesuits/void/ert_vr.dm b/code/modules/clothing/spacesuits/void/ert_vr.dm index 0393b4ecf7..2f10083694 100644 --- a/code/modules/clothing/spacesuits/void/ert_vr.dm +++ b/code/modules/clothing/spacesuits/void/ert_vr.dm @@ -6,7 +6,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100) slowdown = 0.5 siemens_coefficient = 0.5 - species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX,SPECIES_TESHARI) //this thing can autoadapt + species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX,SPECIES_TESHARI,SPECIES_ALTEVIAN) //this thing can autoadapt icon = 'icons/inventory/suit/item_vr.dmi' default_worn_icon = 'icons/inventory/suit/mob_vr.dmi' w_class = ITEMSIZE_NORMAL //the mark vii packs itself down when not in use, thanks future-materials @@ -107,7 +107,7 @@ desc = "As a vital part of the Mark VII suit, the integral helmet cannot be removed - so don't try." icon_state = "erthelmet" item_state = "erthelmet" - species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX,SPECIES_TESHARI) //this thing can autoadapt too + species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX,SPECIES_TESHARI,SPECIES_ALTEVIAN) //this thing can autoadapt too armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100) siemens_coefficient = 0.5 icon = 'icons/inventory/head/item_vr.dmi' diff --git a/code/modules/clothing/suits/hooded.dm b/code/modules/clothing/suits/hooded.dm index 5945e2f982..d0606960e7 100644 --- a/code/modules/clothing/suits/hooded.dm +++ b/code/modules/clothing/suits/hooded.dm @@ -141,7 +141,7 @@ allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/weapon/gun/energy, /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton, - /obj/item/weapon/handcuffs, /obj/item/clothing/head/helmet) + /obj/item/weapon/handcuffs, /obj/item/clothing/head/helmet, /obj/item/clothing/mask/gas) /obj/item/clothing/suit/storage/hooded/wintercoat/security/hos name = "head of security's winter coat" @@ -152,7 +152,7 @@ allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/weapon/gun/energy, /obj/item/weapon/reagent_containers/spray/pepper, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton, - /obj/item/weapon/handcuffs, /obj/item/clothing/head/helmet) + /obj/item/weapon/handcuffs, /obj/item/clothing/head/helmet, /obj/item/clothing/mask/gas) /obj/item/clothing/suit/storage/hooded/wintercoat/medical name = "medical winter coat" @@ -165,7 +165,7 @@ /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/weapon/dnainjector, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, - /obj/item/weapon/reagent_containers/pill, /obj/item/weapon/storage/pill_bottle) + /obj/item/weapon/reagent_containers/pill, /obj/item/weapon/storage/pill_bottle, /obj/item/clothing/mask/gas) /obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt name = "medical winter coat, alt" @@ -212,7 +212,7 @@ /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/weapon/dnainjector, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/weapon/reagent_containers/glass/bottle, /obj/item/weapon/reagent_containers/glass/beaker, - /obj/item/weapon/reagent_containers/pill, /obj/item/weapon/storage/pill_bottle) + /obj/item/weapon/reagent_containers/pill, /obj/item/weapon/storage/pill_bottle, /obj/item/clothing/mask/gas) /obj/item/clothing/suit/storage/hooded/wintercoat/science name = "science winter coat" @@ -251,7 +251,7 @@ allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/device/analyzer, /obj/item/device/flashlight, /obj/item/device/multitool, /obj/item/device/pipe_painter, /obj/item/device/radio, /obj/item/device/t_scanner, /obj/item/weapon/tool/crowbar, /obj/item/weapon/tool/screwdriver, - /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/weapon/tank/emergency/oxygen, /obj/item/clothing/mask/gas, /obj/item/taperoll/engineering) + /obj/item/weapon/weldingtool, /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tool/wrench, /obj/item/weapon/tank/emergency/oxygen, /obj/item/clothing/mask/gas, /obj/item/taperoll/engineering, /obj/item/clothing/head/hardhat) //please engineers take your hardhat with you I beg of you /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos name = "atmospherics winter coat" @@ -302,7 +302,7 @@ hoodtype = /obj/item/clothing/head/hood/winter/cargo/miner allowed = list(/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, - /obj/item/weapon/tank, /obj/item/device/radio, /obj/item/weapon/pickaxe, /obj/item/weapon/storage/bag/ore) + /obj/item/weapon/tank, /obj/item/device/radio, /obj/item/weapon/pickaxe, /obj/item/weapon/storage/bag/ore, /obj/item/clothing/mask/gas) /obj/item/clothing/suit/storage/hooded/wintercoat/bar name = "bartender winter coat" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 17b265ed9f..d2ba4b26d9 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -35,7 +35,7 @@ flags_inv = HIDEHOLSTER //Command -/obj/item/clothing/suit/storage/cmddressjacket +/obj/item/clothing/suit/storage/toggle/cmddressjacket name = "command dress jacket" desc = "A fancy dress jacket made for command staff. Makes you feel in charge." icon_state = "cmddressjacket" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 18c399efbc..5d0c531c5c 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -6,7 +6,7 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|ARMS flags_inv = HIDEHOLSTER - allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper) + allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper, /obj/item/clothing/mask/gas) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0) /obj/item/clothing/suit/storage/toggle/labcoat/red diff --git a/code/modules/clothing/under/miscellaneous_vr.dm b/code/modules/clothing/under/miscellaneous_vr.dm index e52df06471..ef719641c9 100644 --- a/code/modules/clothing/under/miscellaneous_vr.dm +++ b/code/modules/clothing/under/miscellaneous_vr.dm @@ -109,7 +109,7 @@ /obj/item/clothing/under/hyperfiber/bluespace/mob_can_unequip(mob/M, slot, disable_warning = 0) . = ..() - if(. && ishuman(M) && original_size) + if(. && ishuman(M) && original_size && !disable_warning) var/mob/living/carbon/human/H = M H.resize(original_size, ignore_prefs = TRUE) original_size = null @@ -129,7 +129,7 @@ /obj/item/clothing/gloves/bluespace/mob_can_equip(mob/M, gloves, disable_warning = 0) . = ..() - if(. && ishuman(M)) + if(. && ishuman(M) && !disable_warning) var/mob/living/carbon/human/H = M if(!H.resizable) return @@ -145,7 +145,7 @@ /obj/item/clothing/gloves/bluespace/mob_can_unequip(mob/M, gloves, disable_warning = 0) . = ..() - if(. && ishuman(M) && original_size) + if(. && ishuman(M) && original_size && !disable_warning) var/mob/living/carbon/human/H = M if(!H.resizable) return diff --git a/code/modules/detectivework/microscope/dnascanner.dm b/code/modules/detectivework/microscope/dnascanner.dm index 1017e74df8..ba8f247443 100644 --- a/code/modules/detectivework/microscope/dnascanner.dm +++ b/code/modules/detectivework/microscope/dnascanner.dm @@ -105,7 +105,7 @@ last_process_worldtime = world.time /obj/machinery/dnaforensics/proc/complete_scan() - visible_message("[bicon(src)] makes an insistent chime.", 2) + visible_message("\icon[src][bicon(src)] makes an insistent chime.", 2) update_icon() if(bloodsamp) var/obj/item/weapon/paper/P = new(src) diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 2eef935e81..aae9a23515 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -76,7 +76,7 @@ log transactions //display a message to the user var/response = pick("Initiating withdraw. Have a nice day!", "CRITICAL ERROR: Activating cash chamber panic siphon.","PIN Code accepted! Emptying account balance.", "Jackpot!") - to_chat(user, "[bicon(src)] The [src] beeps: \"[response]\"") + to_chat(user, "\icon[src][bicon(src)] The [src] beeps: \"[response]\"") return 1 /obj/machinery/atm/attackby(obj/item/I as obj, mob/user as mob) @@ -85,7 +85,7 @@ log transactions if(istype(I, /obj/item/weapon/card)) if(emagged > 0) //prevent inserting id into an emagged ATM - to_chat(user, "[bicon(src)] CARD READER ERROR. This system has been compromised!") + to_chat(user, "\icon[src][bicon(src)] CARD READER ERROR. This system has been compromised!") return else if(istype(I,/obj/item/weapon/card/emag)) I.resolve_attackby(src, user) @@ -234,7 +234,7 @@ log transactions var/target_account_number = text2num(href_list["target_acc_number"]) var/transfer_purpose = href_list["purpose"] if(charge_to_account(target_account_number, authenticated_account.owner_name, transfer_purpose, machine_id, transfer_amount)) - to_chat(usr, "[bicon(src)]Funds transfer successful.") + to_chat(usr, "\icon[src][bicon(src)]Funds transfer successful.") authenticated_account.money -= transfer_amount //create an entry in the account transaction log @@ -247,10 +247,10 @@ log transactions T.amount = "([transfer_amount])" authenticated_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)]Funds transfer failed.") + to_chat(usr, "\icon[src][bicon(src)]Funds transfer failed.") else - to_chat(usr, "[bicon(src)]You don't have enough funds to do that!") + to_chat(usr, "\icon[src][bicon(src)]You don't have enough funds to do that!") if("view_screen") view_screen = text2num(href_list["view_screen"]) if("change_security_level") @@ -288,11 +288,11 @@ log transactions T.time = stationtime2text() failed_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.") + to_chat(usr, "\icon[src][bicon(src)] Incorrect pin/account combination entered, [max_pin_attempts - number_incorrect_tries] attempts remaining.") previous_account_number = tried_account_num playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 1) else - to_chat(usr, "[bicon(src)] incorrect pin/account combination entered.") + to_chat(usr, "\icon[src][bicon(src)] incorrect pin/account combination entered.") number_incorrect_tries = 0 else playsound(src, 'sound/machines/twobeep.ogg', 50, 1) @@ -308,7 +308,7 @@ log transactions T.time = stationtime2text() authenticated_account.transaction_log.Add(T) - to_chat(usr, "[bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'") + to_chat(usr, "\icon[src][bicon(src)] Access granted. Welcome user '[authenticated_account.owner_name].'") previous_account_number = tried_account_num if("e_withdrawal") @@ -336,7 +336,7 @@ log transactions T.time = stationtime2text() authenticated_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)]You don't have enough funds to do that!") + to_chat(usr, "\icon[src][bicon(src)]You don't have enough funds to do that!") if("withdrawal") var/amount = max(text2num(href_list["funds_amount"]),0) amount = round(amount, 0.01) @@ -361,7 +361,7 @@ log transactions T.time = stationtime2text() authenticated_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)]You don't have enough funds to do that!") + to_chat(usr, "\icon[src][bicon(src)]You don't have enough funds to do that!") if("balance_statement") if(authenticated_account) var/obj/item/weapon/paper/R = new(src.loc) @@ -433,7 +433,7 @@ log transactions if(!held_card) //this might happen if the user had the browser window open when somebody emagged it if(emagged > 0) - to_chat(usr, "[bicon(src)] The ATM card reader rejected your ID because this machine has been sabotaged!") + to_chat(usr, "\icon[src][bicon(src)] The ATM card reader rejected your ID because this machine has been sabotaged!") else var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/weapon/card/id)) diff --git a/code/modules/economy/EFTPOS.dm b/code/modules/economy/EFTPOS.dm index beae04ee7c..3673f67814 100644 --- a/code/modules/economy/EFTPOS.dm +++ b/code/modules/economy/EFTPOS.dm @@ -107,7 +107,7 @@ if(linked_account) scan_card(I, O) else - to_chat(usr, "[bicon(src)]Unable to connect to linked account.") + to_chat(usr, "\icon[src][bicon(src)]Unable to connect to linked account.") else if (istype(O, /obj/item/weapon/spacecash/ewallet)) var/obj/item/weapon/spacecash/ewallet/E = O if (linked_account) @@ -115,7 +115,7 @@ if(transaction_locked && !transaction_paid) if(transaction_amount <= E.worth) playsound(src, 'sound/machines/chime.ogg', 50, 1) - src.visible_message("[bicon(src)] \The [src] chimes.") + src.visible_message("\icon[src][bicon(src)] \The [src] chimes.") transaction_paid = 1 //transfer the money @@ -132,11 +132,11 @@ T.time = stationtime2text() linked_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)]\The [O] doesn't have that much money!") + to_chat(usr, "\icon[src][bicon(src)]\The [O] doesn't have that much money!") else - to_chat(usr, "[bicon(src)]Connected account has been suspended.") + to_chat(usr, "\icon[src][bicon(src)]Connected account has been suspended.") else - to_chat(usr, "[bicon(src)]EFTPOS is not connected to an account.") + to_chat(usr, "\icon[src][bicon(src)]EFTPOS is not connected to an account.") else ..() @@ -154,14 +154,14 @@ tgui_alert_async(usr, "That is not a valid code!") print_reference() else - to_chat(usr, "[bicon(src)]Incorrect code entered.") + to_chat(usr, "\icon[src][bicon(src)]Incorrect code entered.") if("change_id") var/attempt_code = text2num(input(usr, "Re-enter the current EFTPOS access code", "Confirm EFTPOS code")) if(attempt_code == access_code) eftpos_name = sanitize(input(usr, "Enter a new terminal ID for this device", "Enter new EFTPOS ID"), MAX_NAME_LEN) + " EFTPOS scanner" print_reference() else - to_chat(usr, "[bicon(src)]Incorrect code entered.") + to_chat(usr, "\icon[src][bicon(src)]Incorrect code entered.") if("link_account") var/attempt_account_num = tgui_input_number(usr, "Enter account number to pay EFTPOS charges into", "New account number") var/attempt_pin = tgui_input_number(usr, "Enter pin code", "Account pin") @@ -169,9 +169,9 @@ if(linked_account) if(linked_account.suspended) linked_account = null - to_chat(usr, "[bicon(src)]Account has been suspended.") + to_chat(usr, "\icon[src][bicon(src)]Account has been suspended.") else - to_chat(usr, "[bicon(src)]Account not found.") + to_chat(usr, "\icon[src][bicon(src)]Account not found.") if("trans_purpose") var/choice = sanitize(input(usr, "Enter reason for EFTPOS transaction", "Transaction purpose")) if(choice) transaction_purpose = choice @@ -194,14 +194,14 @@ else if(linked_account) transaction_locked = 1 else - to_chat(usr, "[bicon(src)]No account connected to send transactions to.") + to_chat(usr, "\icon[src][bicon(src)]No account connected to send transactions to.") if("scan_card") if(linked_account) var/obj/item/I = usr.get_active_hand() if (istype(I, /obj/item/weapon/card)) scan_card(I) else - to_chat(usr, "[bicon(src)]Unable to link accounts.") + to_chat(usr, "\icon[src][bicon(src)]Unable to link accounts.") if("reset") //reset the access code - requires HoP/captain access var/obj/item/I = usr.get_active_hand() @@ -209,10 +209,10 @@ var/obj/item/weapon/card/id/C = I if((access_cent_captain in C.access) || (access_hop in C.access) || (access_captain in C.access)) access_code = 0 - to_chat(usr, "[bicon(src)]Access code reset to 0.") + to_chat(usr, "\icon[src][bicon(src)]Access code reset to 0.") else if (istype(I, /obj/item/weapon/card/emag)) access_code = 0 - to_chat(usr, "[bicon(src)]Access code reset to 0.") + to_chat(usr, "\icon[src][bicon(src)]Access code reset to 0.") src.attack_self(usr) @@ -236,7 +236,7 @@ if(!D.suspended) if(transaction_amount <= D.money) playsound(src, 'sound/machines/chime.ogg', 50, 1) - src.visible_message("[bicon(src)] \The [src] chimes.") + src.visible_message("\icon[src][bicon(src)] \The [src] chimes.") transaction_paid = 1 //transfer the money @@ -265,25 +265,25 @@ T.time = stationtime2text() linked_account.transaction_log.Add(T) else - to_chat(usr, "[bicon(src)]You don't have that much money!") + to_chat(usr, "\icon[src][bicon(src)]You don't have that much money!") else - to_chat(usr, "[bicon(src)]Your account has been suspended.") + to_chat(usr, "\icon[src][bicon(src)]Your account has been suspended.") else - to_chat(usr, "[bicon(src)]Unable to access account. Check security settings and try again.") + to_chat(usr, "\icon[src][bicon(src)]Unable to access account. Check security settings and try again.") else - to_chat(usr, "[bicon(src)]Connected account has been suspended.") + to_chat(usr, "\icon[src][bicon(src)]Connected account has been suspended.") else - to_chat(usr, "[bicon(src)]EFTPOS is not connected to an account.") + to_chat(usr, "\icon[src][bicon(src)]EFTPOS is not connected to an account.") else if (istype(I, /obj/item/weapon/card/emag)) if(transaction_locked) if(transaction_paid) - to_chat(usr, "[bicon(src)]You stealthily swipe \the [I] through \the [src].") + to_chat(usr, "\icon[src][bicon(src)]You stealthily swipe \the [I] through \the [src].") transaction_locked = 0 transaction_paid = 0 else usr.visible_message("\The [usr] swipes a card through \the [src].") playsound(src, 'sound/machines/chime.ogg', 50, 1) - src.visible_message("[bicon(src)] \The [src] chimes.") + src.visible_message("\icon[src][bicon(src)] \The [src] chimes.") transaction_paid = 1 //emag? diff --git a/code/modules/economy/cash_register.dm b/code/modules/economy/cash_register.dm index 08d4ab66d8..ae649a8f4d 100644 --- a/code/modules/economy/cash_register.dm +++ b/code/modules/economy/cash_register.dm @@ -103,7 +103,7 @@ if(allowed(usr)) locked = !locked else - to_chat(usr, "[bicon(src)]Insufficient access.") + to_chat(usr, "\icon[src][bicon(src)]Insufficient access.") if("toggle_cash_lock") cash_locked = !cash_locked if("link_account") @@ -113,9 +113,9 @@ if(linked_account) if(linked_account.suspended) linked_account = null - src.visible_message("[bicon(src)]Account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Account has been suspended.") else - to_chat(usr, "[bicon(src)]Account not found.") + to_chat(usr, "\icon[src][bicon(src)]Account not found.") if("custom_order") var/t_purpose = sanitize(tgui_input_text(usr, "Enter purpose", "New purpose")) if (!t_purpose || !Adjacent(usr)) return @@ -126,7 +126,7 @@ transaction_amount += t_amount price_list += t_amount playsound(src, 'sound/machines/twobeep.ogg', 25) - src.visible_message("[bicon(src)][transaction_purpose]: [t_amount] Thaler\s.") + src.visible_message("\icon[src][bicon(src)][transaction_purpose]: [t_amount] Thaler\s.") if("set_amount") var/item_name = locate(href_list["item"]) var/n_amount = round(tgui_input_number(usr, "Enter amount", "New amount")) @@ -163,7 +163,7 @@ price_list.Cut() if("reset_log") transaction_logs.Cut() - to_chat(usr, "[bicon(src)]Transaction log reset.") + to_chat(usr, "\icon[src][bicon(src)]Transaction log reset.") updateDialog() @@ -208,7 +208,7 @@ return 1 else confirm_item = I - src.visible_message("[bicon(src)]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") + src.visible_message("\icon[src][bicon(src)]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") playsound(src, 'sound/machines/twobeep.ogg', 25) return 0 @@ -219,14 +219,14 @@ if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[bicon(src)]The cash box is open.") + to_chat(usr, "\icon[src][bicon(src)]The cash box is open.") return if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(I)) return if (!linked_account) - usr.visible_message("[bicon(src)]Unable to connect to linked account.") + usr.visible_message("\icon[src][bicon(src)]Unable to connect to linked account.") return // Access account for transaction @@ -239,13 +239,13 @@ D = attempt_account_access(I.associated_account_number, attempt_pin, 2) if(!D) - src.visible_message("[bicon(src)]Unable to access account. Check security settings and try again.") + src.visible_message("\icon[src][bicon(src)]Unable to access account. Check security settings and try again.") else if(D.suspended) - src.visible_message("[bicon(src)]Your account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Your account has been suspended.") else if(transaction_amount > D.money) - src.visible_message("[bicon(src)]Not enough funds.") + src.visible_message("\icon[src][bicon(src)]Not enough funds.") else // Transfer the money D.money -= transaction_amount @@ -284,7 +284,7 @@ if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[bicon(src)]The cash box is open.") + to_chat(usr, "\icon[src][bicon(src)]The cash box is open.") return if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(E)) @@ -293,7 +293,7 @@ // Access account for transaction if(check_account()) if(transaction_amount > E.worth) - src.visible_message("[bicon(src)]Not enough funds.") + src.visible_message("\icon[src][bicon(src)]Not enough funds.") else // Transfer the money E.worth -= transaction_amount @@ -322,14 +322,14 @@ if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[bicon(src)]The cash box is open.") + to_chat(usr, "\icon[src][bicon(src)]The cash box is open.") return if((item_list.len > 1 || item_list[item_list[1]] > 1) && !confirm(SC)) return if(transaction_amount > SC.worth) - src.visible_message("[bicon(src)]Not enough money.") + src.visible_message("\icon[src][bicon(src)]Not enough money.") else // Insert cash into magical slot SC.worth -= transaction_amount @@ -351,20 +351,20 @@ /obj/machinery/cash_register/proc/scan_item_price(obj/O) if(!istype(O)) return if(item_list.len > 10) - src.visible_message("[bicon(src)]Only up to ten different items allowed per purchase.") + src.visible_message("\icon[src][bicon(src)]Only up to ten different items allowed per purchase.") return if (cash_open) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(usr, "[bicon(src)]The cash box is open.") + to_chat(usr, "\icon[src][bicon(src)]The cash box is open.") return // First check if item has a valid price var/price = O.get_item_cost() if(isnull(price)) - src.visible_message("[bicon(src)]Unable to find item in database.") + src.visible_message("\icon[src][bicon(src)]Unable to find item in database.") return // Call out item cost - src.visible_message("[bicon(src)]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") + src.visible_message("\icon[src][bicon(src)]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") // Note the transaction purpose for later use if(transaction_purpose) transaction_purpose += "
" @@ -432,11 +432,11 @@ /obj/machinery/cash_register/proc/check_account() if (!linked_account) - usr.visible_message("[bicon(src)]Unable to connect to linked account.") + usr.visible_message("\icon[src][bicon(src)]Unable to connect to linked account.") return 0 if(linked_account.suspended) - src.visible_message("[bicon(src)]Connected account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Connected account has been suspended.") return 0 return 1 @@ -444,7 +444,7 @@ /obj/machinery/cash_register/proc/transaction_complete() /// Visible confirmation playsound(src, 'sound/machines/chime.ogg', 25) - src.visible_message("[bicon(src)]Transaction complete.") + src.visible_message("\icon[src][bicon(src)]Transaction complete.") flick("register_approve", src) reset_memory() updateDialog() diff --git a/code/modules/economy/retail_scanner.dm b/code/modules/economy/retail_scanner.dm index d9755b5041..f2b4854d11 100644 --- a/code/modules/economy/retail_scanner.dm +++ b/code/modules/economy/retail_scanner.dm @@ -99,7 +99,7 @@ if(allowed(usr)) locked = !locked else - to_chat(usr, "[bicon(src)]Insufficient access.") + to_chat(usr, "\icon[src][bicon(src)]Insufficient access.") if("link_account") var/attempt_account_num = tgui_input_number(usr, "Enter account number", "New account number") var/attempt_pin = tgui_input_number(usr, "Enter PIN", "Account PIN") @@ -107,9 +107,9 @@ if(linked_account) if(linked_account.suspended) linked_account = null - src.visible_message("[bicon(src)]Account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Account has been suspended.") else - to_chat(usr, "[bicon(src)]Account not found.") + to_chat(usr, "\icon[src][bicon(src)]Account not found.") if("custom_order") var/t_purpose = sanitize(tgui_input_text(usr, "Enter purpose", "New purpose")) if (!t_purpose || !Adjacent(usr)) return @@ -120,7 +120,7 @@ transaction_amount += t_amount price_list += t_amount playsound(src, 'sound/machines/twobeep.ogg', 25) - src.visible_message("[bicon(src)][transaction_purpose]: [t_amount] Thaler\s.") + src.visible_message("\icon[src][bicon(src)][transaction_purpose]: [t_amount] Thaler\s.") if("set_amount") var/item_name = locate(href_list["item"]) var/n_amount = round(tgui_input_number(usr, "Enter amount", "New amount")) @@ -157,7 +157,7 @@ price_list.Cut() if("reset_log") transaction_logs.Cut() - to_chat(usr, "[bicon(src)]Transaction log reset.") + to_chat(usr, "\icon[src][bicon(src)]Transaction log reset.") updateDialog() @@ -190,7 +190,7 @@ return 1 else confirm_item = I - src.visible_message("[bicon(src)]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") + src.visible_message("\icon[src][bicon(src)]Total price: [transaction_amount] Thaler\s. Swipe again to confirm.") playsound(src, 'sound/machines/twobeep.ogg', 25) return 0 @@ -203,7 +203,7 @@ return if (!linked_account) - usr.visible_message("[bicon(src)]Unable to connect to linked account.") + usr.visible_message("\icon[src][bicon(src)]Unable to connect to linked account.") return // Access account for transaction @@ -216,13 +216,13 @@ D = attempt_account_access(I.associated_account_number, attempt_pin, 2) if(!D) - src.visible_message("[bicon(src)]Unable to access account. Check security settings and try again.") + src.visible_message("\icon[src][bicon(src)]Unable to access account. Check security settings and try again.") else if(D.suspended) - src.visible_message("[bicon(src)]Your account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Your account has been suspended.") else if(transaction_amount > D.money) - src.visible_message("[bicon(src)]Not enough funds.") + src.visible_message("\icon[src][bicon(src)]Not enough funds.") else // Transfer the money D.money -= transaction_amount @@ -265,7 +265,7 @@ // Access account for transaction if(check_account()) if(transaction_amount > E.worth) - src.visible_message("[bicon(src)]Not enough funds.") + src.visible_message("\icon[src][bicon(src)]Not enough funds.") else // Transfer the money E.worth -= transaction_amount @@ -291,16 +291,16 @@ /obj/item/device/retail_scanner/proc/scan_item_price(var/obj/O) if(!istype(O)) return if(item_list.len > 10) - src.visible_message("[bicon(src)]Only up to ten different items allowed per purchase.") + src.visible_message("\icon[src][bicon(src)]Only up to ten different items allowed per purchase.") return // First check if item has a valid price var/price = O.get_item_cost() if(isnull(price)) - src.visible_message("[bicon(src)]Unable to find item in database.") + src.visible_message("\icon[src][bicon(src)]Unable to find item in database.") return // Call out item cost - src.visible_message("[bicon(src)]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") + src.visible_message("\icon[src][bicon(src)]\A [O]: [price ? "[price] Thaler\s" : "free of charge"].") // Note the transaction purpose for later use if(transaction_purpose) transaction_purpose += "
" @@ -368,11 +368,11 @@ /obj/item/device/retail_scanner/proc/check_account() if (!linked_account) - usr.visible_message("[bicon(src)]Unable to connect to linked account.") + usr.visible_message("\icon[src][bicon(src)]Unable to connect to linked account.") return 0 if(linked_account.suspended) - src.visible_message("[bicon(src)]Connected account has been suspended.") + src.visible_message("\icon[src][bicon(src)]Connected account has been suspended.") return 0 return 1 @@ -380,7 +380,7 @@ /obj/item/device/retail_scanner/proc/transaction_complete() /// Visible confirmation playsound(src, 'sound/machines/chime.ogg', 25) - src.visible_message("[bicon(src)]Transaction complete.") + src.visible_message("\icon[src][bicon(src)]Transaction complete.") flick("retail_approve", src) reset_memory() updateDialog() diff --git a/code/modules/economy/vending.dm b/code/modules/economy/vending.dm index 55c726539a..c05c3e1a69 100644 --- a/code/modules/economy/vending.dm +++ b/code/modules/economy/vending.dm @@ -270,7 +270,7 @@ GLOBAL_LIST_EMPTY(vending_products) // This is not a status display message, since it's something the character // themselves is meant to see BEFORE putting the money in - to_chat(usr, "[bicon(cashmoney)] That is not enough money.") + to_chat(usr, "\icon[cashmoney][bicon(cashmoney)] That is not enough money.") return 0 if(istype(cashmoney, /obj/item/weapon/spacecash)) diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index bd79cb1f7b..1984cc8154 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -194,7 +194,8 @@ /obj/item/weapon/reagent_containers/food/snacks/cb10 = 6, /obj/item/weapon/reagent_containers/food/snacks/tuna = 2) contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6, - /obj/item/weapon/reagent_containers/food/snacks/unajerky = 12) + /obj/item/weapon/reagent_containers/food/snacks/unajerky = 12, + /obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax = 6) prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 1, /obj/item/weapon/reagent_containers/food/snacks/candy/gummy = 2, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 5, @@ -1067,7 +1068,8 @@ /obj/item/weapon/reagent_containers/food/snacks/driedfish = 8, /obj/item/weapon/reagent_containers/food/snacks/cookiesnack = 8 ) - contraband = list(/obj/item/weapon/reagent_containers/food/snacks/unajerky = 1) + contraband = list(/obj/item/weapon/reagent_containers/food/snacks/unajerky = 1, + /obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red = 6) prices = list( /obj/item/weapon/reagent_containers/food/snacks/tuna = 5, /obj/item/weapon/reagent_containers/food/snacks/semki = 5, diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm index 66fea29cd1..2ef744509b 100644 --- a/code/modules/economy/vending_machines_vr.dm +++ b/code/modules/economy/vending_machines_vr.dm @@ -635,7 +635,15 @@ /obj/item/clothing/mask/bandana/gold = 5, /obj/item/clothing/mask/bandana/green = 5, /obj/item/clothing/mask/bandana/red = 5, - /obj/item/clothing/mask/surgical = 5) + /obj/item/clothing/mask/surgical = 5, + /obj/item/clothing/accessory/pride/bi = 5, + /obj/item/clothing/accessory/pride/trans = 5, + /obj/item/clothing/accessory/pride/ace = 5, + /obj/item/clothing/accessory/pride/enby = 5, + /obj/item/clothing/accessory/pride/pan = 5, + /obj/item/clothing/accessory/pride/lesbian = 5, + /obj/item/clothing/accessory/pride/intersex = 5, + /obj/item/clothing/accessory/pride/vore = 5) prices = list(/obj/item/clothing/accessory = 50, /obj/item/clothing/accessory/armband/med/color = 50, /obj/item/clothing/accessory/asymmetric = 50, @@ -752,7 +760,15 @@ /obj/item/clothing/mask/bandana/gold = 50, /obj/item/clothing/mask/bandana/green = 50, /obj/item/clothing/mask/bandana/red = 50, - /obj/item/clothing/mask/surgical = 50) + /obj/item/clothing/mask/surgical = 50, + /obj/item/clothing/accessory/pride/bi = 50, + /obj/item/clothing/accessory/pride/trans = 50, + /obj/item/clothing/accessory/pride/ace = 50, + /obj/item/clothing/accessory/pride/enby = 50, + /obj/item/clothing/accessory/pride/pan = 50, + /obj/item/clothing/accessory/pride/lesbian = 50, + /obj/item/clothing/accessory/pride/intersex = 50, + /obj/item/clothing/accessory/pride/vore = 50) premium = list(/obj/item/weapon/bedsheet/rainbow = 1) contraband = list(/obj/item/clothing/mask/gas/clown_hat = 1, /obj/item/clothing/accessory/collar/collarplanet_earth = 5) @@ -1131,7 +1147,9 @@ /obj/item/weapon/pack/spaceball = 10, /obj/item/weapon/storage/pill_bottle/dice = 5, /obj/item/weapon/storage/pill_bottle/dice_nerd = 5, - /obj/item/weapon/melee/umbrella/random = 10) + /obj/item/weapon/melee/umbrella/random = 10, + /obj/item/weapon/deck/schnapsen = 5, + /obj/item/weapon/deck/egy = 5) prices = list(/obj/item/weapon/cane = 100, /obj/item/weapon/pack/cardemon = 100, /obj/item/weapon/deck/holder = 100, @@ -1142,7 +1160,9 @@ /obj/item/weapon/pack/spaceball = 100, /obj/item/weapon/storage/pill_bottle/dice = 100, /obj/item/weapon/storage/pill_bottle/dice_nerd = 100, - /obj/item/weapon/melee/umbrella/random = 100) + /obj/item/weapon/melee/umbrella/random = 100, + /obj/item/weapon/deck/schnapsen = 100, + /obj/item/weapon/deck/egy = 100) premium = list(/obj/item/toy/bosunwhistle = 1) contraband = list(/obj/item/toy/katana = 1) @@ -2429,7 +2449,7 @@ desc = "Food made by dogs!" product_ads = "EAT FOOD!!!;Awooooooooooooooo!~;Made by actual dogs!;Now with twenty percent more taste!!!" icon = 'icons/obj/vending.dmi' - icon_state = "fridge_food" + icon_state = "hotfood" products = list(/obj/item/weapon/tray = 50, /obj/item/weapon/material/kitchen/utensil/fork = 50, /obj/item/weapon/material/knife/plastic = 50, @@ -2917,7 +2937,7 @@ desc = "Food made by dogs!" product_ads = "EAT FOOD!!!;Awooooooooooooooo!~;Made by actual dogs!;Now with twenty percent more taste!!!" icon = 'icons/obj/vending.dmi' - icon_state = "fridge_food" + icon_state = "hotfood" products = list(/obj/item/weapon/tray = 50, /obj/item/weapon/material/kitchen/utensil/fork = 50, /obj/item/weapon/material/knife/plastic = 50, @@ -3313,7 +3333,7 @@ desc = "Food made by dogs!" product_ads = "EAT FOOD!!!;Awooooooooooooooo!~;Made by actual dogs!;Now with twenty percent more taste!!!" icon = 'icons/obj/vending.dmi' - icon_state = "fridge_food" + icon_state = "hotfood" products = list(/obj/item/weapon/reagent_containers/food/snacks/bearmeat = 10, /obj/item/weapon/reagent_containers/food/snacks/carpmeat = 10, /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish = 10, diff --git a/code/modules/emotes/definitions/audible_furry_vr.dm b/code/modules/emotes/definitions/audible_furry_vr.dm index f2118f1030..385759bc8d 100644 --- a/code/modules/emotes/definitions/audible_furry_vr.dm +++ b/code/modules/emotes/definitions/audible_furry_vr.dm @@ -144,6 +144,21 @@ key = "squeaky" emote_message_3p = "squeaks." emote_sound = 'sound/items/drop/plushie.ogg' +/decl/emote/audible/mothscream + key = "mothscream" + emote_message_3p ="screams" + emote_sound = 'sound/voice/moth/scream_moth.ogg' + +/decl/emote/audible/mothchitter + key = "mothchitter" + emote_message_3p = "chitters" + emote_sound = 'sound/voice/moth/moth_chitter.ogg' + +/decl/emote/audible/mothlaugh + key = "mothlaugh" + emote_message_3p = "laughs" + emote_sound = 'sound/voice/moth/moth_laugh.ogg' + /decl/emote/audible/gyoh key = "gyoh" @@ -193,23 +208,23 @@ key = "coyawoo" emote_message_3p = "lets out a scraggly awoo." emote_sound = 'sound/voice/coyoteawoo.ogg' - + /decl/emote/audible/coyawoo2 key = "coyawoo2" emote_message_3p = "lets out a pronounced, scraggly awoo." emote_sound = 'sound/voice/coyoteawoo2.ogg' - + /decl/emote/audible/coyawoo3 key = "coyawoo3" emote_message_3p = "yaps and lets out a scraggly awoo." emote_sound = 'sound/voice/coyoteawoo3.ogg' - + /decl/emote/audible/coyawoo4 key = "coyawoo4" emote_message_3p = "yaps several times, and lets out a short, scraggly awoo." emote_sound = 'sound/voice/coyoteawoo4.ogg' - + /decl/emote/audible/coyawoo5 key = "coyawoo5" emote_message_3p = "lets out a scraggly, whine-awoo." - emote_sound = 'sound/voice/coyoteawoo5.ogg' \ No newline at end of file + emote_sound = 'sound/voice/coyoteawoo5.ogg' diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index 0a6a0793fb..9f60ca53d7 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -191,10 +191,21 @@ if(message) message = encode_html_emphasis(message) + var/ourfreq = null + if(isliving(src)) + var/mob/living/L = src + if(L.voice_freq > 0 ) + ourfreq = L.voice_freq + + // Hearing gasp and such every five seconds is not good emotes were not global for a reason. // Maybe some people are okay with that. var/turf/T = get_turf(src) + if(!T) return + if(client) + playsound(T, pick(emote_sound), 25, TRUE, falloff = 1 , is_global = TRUE, frequency = ourfreq, ignore_walls = FALSE, preference = /datum/client_preference/emote_sounds) + var/list/in_range = get_mobs_and_objs_in_view_fast(T,range,2,remote_ghosts = client ? TRUE : FALSE) var/list/m_viewers = in_range["mobs"] var/list/o_viewers = in_range["objs"] diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 233bd92156..e87ed71f25 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -6894,6 +6894,7 @@ /obj/item/weapon/reagent_containers/food/snacks/appleberry/Initialize() . = ..() reagents.add_reagent("milk", 8) + reagents.add_reagent("sugar", 5) /obj/item/weapon/reagent_containers/food/snacks/canned/ntbeans name = "baked beans" @@ -6922,10 +6923,11 @@ filling_color = "#caa3c9" center_of_mass = list("x"=15, "y"=9) bitesize = 2 + var/brainmeat = "brain_protein" /obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/Initialize() . = ..() - reagents.add_reagent("brain_protein", 10) + reagents.add_reagent(brainmeat, 10) /obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red name = "\improper BrainzSnax RED" @@ -6939,10 +6941,7 @@ filling_color = "#a6898d" center_of_mass = list("x"=15, "y"=9) bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red/Initialize() - . = ..() - reagents.add_reagent("red_brain_protein", 10) + brainmeat = "red_brain_protein" //////////////Packaged Food - break open and eat////////////// diff --git a/code/modules/food/kitchen/icecream.dm b/code/modules/food/kitchen/icecream.dm index 7dd64d3574..e92bd32254 100644 --- a/code/modules/food/kitchen/icecream.dm +++ b/code/modules/food/kitchen/icecream.dm @@ -92,7 +92,7 @@ var/obj/item/weapon/reagent_containers/food/snacks/icecream/I = O if(!I.ice_creamed) if(product_types[dispense_flavour] > 0) - src.visible_message("[bicon(src)] [user] scoops delicious [flavour_name] icecream into [I].") + src.visible_message("\icon[src][bicon(src)] [user] scoops delicious [flavour_name] icecream into [I].") product_types[dispense_flavour] -= 1 I.add_ice_cream(flavour_name) // if(beaker) diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm index 0031720671..2b2e164beb 100644 --- a/code/modules/holodeck/HolodeckControl.dm +++ b/code/modules/holodeck/HolodeckControl.dm @@ -344,6 +344,7 @@ spawn(30) for(var/obj/effect/landmark/L in linkedholodeck) + L.delete_me = 1 if(L.name=="Atmospheric Test Start") spawn(20) var/turf/T = get_turf(L) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 64c2be1887..d2fc36d350 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -419,8 +419,8 @@ set_trait(TRAIT_POTENCY,rand(5,30),200,0) set_trait(TRAIT_PRODUCT_ICON,pick(SSplants.accessible_product_sprites)) set_trait(TRAIT_PLANT_ICON,pick(SSplants.accessible_plant_sprites)) - set_trait(TRAIT_PLANT_COLOUR,"#[get_random_colour(0,75,190)]") - set_trait(TRAIT_PRODUCT_COLOUR,"#[get_random_colour(0,75,190)]") + set_trait(TRAIT_PLANT_COLOUR,get_random_colour(0,75,190)) + set_trait(TRAIT_PRODUCT_COLOUR,get_random_colour(0,75,190)) update_growth_stages() if(prob(20)) @@ -548,7 +548,7 @@ if(prob(5)) set_trait(TRAIT_BIOLUM,1) - set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") + set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190)) if(prob(3)) set_trait(TRAIT_SPORING,1) @@ -654,7 +654,7 @@ if(get_trait(TRAIT_BIOLUM)) source_turf.visible_message("\The [display_name] begins to glow!") if(prob(degree*2)) - set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]") + set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190)) source_turf.visible_message("\The [display_name]'s glow changes colour!") else source_turf.visible_message("\The [display_name]'s glow dims...") diff --git a/code/modules/hydroponics/seed_machines.dm b/code/modules/hydroponics/seed_machines.dm index 32013d9734..ee758860e2 100644 --- a/code/modules/hydroponics/seed_machines.dm +++ b/code/modules/hydroponics/seed_machines.dm @@ -68,15 +68,15 @@ active = 0 if(failed_task) failed_task = 0 - visible_message("[bicon(src)] [src] pings unhappily, flashing a red warning light.") + visible_message("\icon[src][bicon(src)] [src] pings unhappily, flashing a red warning light.") else - visible_message("[bicon(src)] [src] pings happily.") + visible_message("\icon[src][bicon(src)] [src] pings happily.") if(eject_disk) eject_disk = 0 if(loaded_disk) loaded_disk.loc = get_turf(src) - visible_message("[bicon(src)] [src] beeps and spits out [loaded_disk].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [loaded_disk].") loaded_disk = null /obj/machinery/botany/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -190,7 +190,7 @@ SSplants.seeds[seed.seed.name] = seed.seed seed.update_seed() - visible_message("[bicon(src)] [src] beeps and spits out [seed].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [seed].") seed = null return TRUE @@ -199,7 +199,7 @@ if(!loaded_disk) return loaded_disk.forceMove(get_turf(src)) - visible_message("[bicon(src)] [src] beeps and spits out [loaded_disk].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [loaded_disk].") loaded_disk = null return TRUE @@ -272,7 +272,7 @@ /obj/machinery/botany/editor/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + data["activity"] = active if(seed) diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 09e1ccbe9e..a4d0ca08b6 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -409,7 +409,7 @@ // harvested yet and it's safe to assume it's restricted to this tray. if(!isnull(SSplants.seeds[seed.name])) seed = seed.diverge() - seed.mutate(severity,get_turf(src)) + seed.mutate(severity,get_turf(src)) return diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index 41a921cd33..def8741909 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -9,7 +9,7 @@ slot_l_hand_str = 'icons/mob/items/lefthand_instruments.dmi', slot_r_hand_str = 'icons/mob/items/righthand_instruments.dmi', ) - + /// Our song datum. var/datum/song/handheld/song /// Our allowed list of instrument ids. This is nulled on initialize. @@ -54,6 +54,12 @@ desc = "A golden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\"" icon_state = "golden_violin" +/obj/item/instrument/xylophone + name = "xylophone" + desc = "A percussion instrument consisting of a series of wooden bars graduated in length." + icon_state = "xylophone" + allowed_instrument_ids = "xylophone" + /obj/item/instrument/piano_synth name = "synthesizer" desc = "An advanced electronic synthesizer that can be used as various instruments." diff --git a/code/modules/integrated_electronics/core/assemblies/clothing.dm b/code/modules/integrated_electronics/core/assemblies/clothing.dm index d881d7bd4a..4840537d97 100644 --- a/code/modules/integrated_electronics/core/assemblies/clothing.dm +++ b/code/modules/integrated_electronics/core/assemblies/clothing.dm @@ -53,6 +53,8 @@ if(!T.AdjacentQuick(user)) // So people aren't messing with these from across the room return FALSE var/obj/item/I = user.get_active_hand() // ctrl-shift-click doesn't give us the item, we have to fetch it + if(!I) + return FALSE return IC.attackby(I, user) /obj/item/clothing/attack_self(mob/user) diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 4b9f5a9152..332b7bb580 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -414,7 +414,7 @@ if(loc) for(var/mob/O in hearers(1, get_turf(src))) - O.show_message("[bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) + O.show_message("\icon[src][bicon(src)] *beep* *beep*", 3, "*beep* *beep*", 2) /obj/item/integrated_circuit/input/EPv2 name = "\improper EPv2 circuit" diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index 9e218d62c8..9a193f9bf7 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -43,7 +43,7 @@ var/list/nearby_things = range(0, get_turf(src)) for(var/mob/M in nearby_things) var/obj/O = assembly ? assembly : src - to_chat(M, "[bicon(O)] [stuff_to_display]") + to_chat(M, "\icon[O][bicon(O)] [stuff_to_display]") /obj/item/integrated_circuit/output/screen/large name = "large screen" @@ -56,7 +56,7 @@ /obj/item/integrated_circuit/output/screen/large/do_work() ..() var/obj/O = assembly ? loc : assembly - O.visible_message("[bicon(O)] [stuff_to_display]") + O.visible_message("\icon[O][bicon(O)] [stuff_to_display]") /obj/item/integrated_circuit/output/light name = "light" @@ -134,7 +134,7 @@ text = get_pin_data(IC_INPUT, 1) if(!isnull(text)) var/obj/O = assembly ? loc : assembly - audible_message("[bicon(O)] \The [O.name] states, \"[text]\"", runemessage = text) + audible_message("\icon[O][bicon(O)] \The [O.name] states, \"[text]\"", runemessage = text) /obj/item/integrated_circuit/output/text_to_speech/advanced name = "advanced text-to-speech circuit" diff --git a/code/modules/materials/materials/_materials.dm b/code/modules/materials/materials/_materials.dm index f059aa28c6..168fd67938 100644 --- a/code/modules/materials/materials/_materials.dm +++ b/code/modules/materials/materials/_materials.dm @@ -109,7 +109,7 @@ var/list/name_to_material var/datum/material/key = arguments[1] if(istype(key)) return key // we want to convert anything we're given to a material - + if(istext(key)) // text ID . = name_to_material[key] if(!.) @@ -363,7 +363,7 @@ var/list/name_to_material ) if(icon_base == "solid") // few icons recipes += new /datum/stack_recipe("[display_name] wall girders (eris)", /obj/structure/girder/eris, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE) - recipes += new /datum/stack_recipe_list("low walls",list( + recipes += new /datum/stack_recipe_list("low walls",list( new /datum/stack_recipe("low wall (bay style)", /obj/structure/low_wall/bay, 3, time = 20, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", recycle_material = "[name]"), new /datum/stack_recipe("low wall (eris style)", /obj/structure/low_wall/eris, 3, time = 20, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", recycle_material = "[name]") )) diff --git a/code/modules/materials/materials/metals/steel.dm b/code/modules/materials/materials/metals/steel.dm index ca63d24b9c..cc6a58792a 100644 --- a/code/modules/materials/materials/metals/steel.dm +++ b/code/modules/materials/materials/metals/steel.dm @@ -69,7 +69,7 @@ new /datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20, recycle_material = "[name]"), new /datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]"), new /datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60, recycle_material = "[name]"), - new /datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), + new /datum/stack_recipe("frame parts", /obj/item/frame, 5, time = 25, on_floor = 1, recycle_material = "[name]"), new /datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"), new /datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"), new /datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1, recycle_material = "[name]"), diff --git a/code/modules/media/walkpod.dm b/code/modules/media/walkpod.dm index 8b1a2e2876..3ef0f046b6 100644 --- a/code/modules/media/walkpod.dm +++ b/code/modules/media/walkpod.dm @@ -16,13 +16,14 @@ var/playing = 0 var/volume = 1 - + var/media_url = "" var/media_start_time var/obj/item/device/headpods/deployed_headpods w_class = ITEMSIZE_COST_SMALL + slot_flags = SLOT_BELT /obj/item/device/walkpod/Destroy() remove_listener() @@ -56,7 +57,7 @@ to_chat(listener, "You are no longer wearing the [src]'s headphones.") listener = null update_icon() - + /obj/item/device/walkpod/proc/set_listener(mob/living/L) if(listener) remove_listener() @@ -170,7 +171,7 @@ /obj/item/device/walkpod/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + data["playing"] = playing data["loop_mode"] = loop_mode data["volume"] = volume diff --git a/code/modules/mentor/mentor.dm b/code/modules/mentor/mentor.dm new file mode 100644 index 0000000000..f897e1632c --- /dev/null +++ b/code/modules/mentor/mentor.dm @@ -0,0 +1,246 @@ +/client + var/datum/mentor/mentorholder = null + +var/list/mentor_datums = list() + +var/list/mentor_verbs_default = list( + /client/proc/cmd_mentor_ticket_panel, + /client/proc/cmd_mentor_say, + /client/proc/cmd_dementor +) + +/datum/mentor + var/client/owner = null + +/datum/mentor/New(ckey) + if(!ckey) + error("Mentor datum created without a ckey argument. Datum has been deleted") + qdel(src) + return + mentor_datums[ckey] = src + +/datum/mentor/proc/associate(client/C) + if(istype(C)) + owner = C + owner.mentorholder = src + owner.add_mentor_verbs() + GLOB.mentors |= C + +/datum/mentor/proc/disassociate() + if(owner) + GLOB.mentors -= owner + owner.remove_mentor_verbs() + owner.mentorholder = null + mentor_datums[owner.ckey] = null + qdel(src) + +/client/proc/add_mentor_verbs() + if(mentorholder) + verbs += mentor_verbs_default + +/client/proc/remove_mentor_verbs() + if(mentorholder) + verbs -= mentor_verbs_default + +/client/proc/make_mentor() + set category = "Special Verbs" + set name = "Make Mentor" + if(!holder) + to_chat(src, "Error: Only administrators may use this command.") + return + var/list/client/targets[0] + for(var/client/T in GLOB.clients) + targets["[T.key]"] = T + var/target = tgui_input_list(src,"Who do you want to make a mentor?","Make Mentor", sortList(targets)) + if(!target) + return + var/client/C = targets[target] + if(has_mentor_powers(C) || C.deadmin_holder) // If an admin is deadminned you could mentor them and that will cause fuckery if they readmin + to_chat(src, "Error: They already have mentor powers.") + return + var/datum/mentor/M = new /datum/mentor(C.ckey) + M.associate(C) + to_chat(C, "You have been granted mentorship.") + to_chat(src, "You have made [C] a mentor.") + log_admin("[key_name(src)] made [key_name(C)] a mentor.") + feedback_add_details("admin_verb","Make Mentor") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/unmake_mentor() + set category = "Special Verbs" + set name = "Unmake Mentor" + if(!holder) + to_chat(src, "Error: Only administrators may use this command.") + return + var/list/client/targets[0] + for(var/client/T in GLOB.mentors) + targets["[T.key]"] = T + var/target = tgui_input_list(src,"Which mentor do you want to unmake?","Unmake Mentor", sortList(targets)) + if(!target) + return + var/client/C = targets[target] + C.mentorholder.disassociate() + to_chat(C, "Your mentorship has been revoked.") + to_chat(src, "You have revoked [C]'s mentorship.") + log_admin("[key_name(src)] revoked [key_name(C)]'s mentorship.") + feedback_add_details("admin_verb","Unmake Mentor") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/cmd_mentor_say(msg as text) + set category = "Admin" + set name ="Mentorsay" + + //check rights + if (!has_mentor_powers(src)) + return + + msg = sanitize(msg) + if (!msg) + return + + log_admin("Mentorsay: [key_name(src)]: [msg]") + + for(var/client/C in GLOB.mentors) + to_chat(C, create_text_tag("mentor", "MENTOR:", C) + " [src]: [msg]") + for(var/client/C in GLOB.admins) + to_chat(C, create_text_tag("mentor", "MENTOR:", C) + " [src]: [msg]") + +/proc/mentor_commands(href, href_list, client/C) + if(href_list["mhelp"]) + var/mhelp_ref = href_list["mhelp"] + var/datum/mentor_help/MH = locate(mhelp_ref) + if (MH) + MH.Action(href_list["mhelp_action"]) + else + to_chat(C, "Ticket [mhelp_ref] has been deleted!") + + if (href_list["mhelp_tickets"]) + GLOB.mhelp_tickets.BrowseTickets(text2num(href_list["mhelp_tickets"])) + + +/datum/mentor/Topic(href, href_list) + ..() + if (usr.client != src.owner || (!usr.client.mentorholder)) + log_admin("[key_name(usr)] tried to illegally use mentor functions.") + message_admins("[usr.key] tried to illegally use mentor functions.") + return + + mentor_commands(href, href_list, usr) + +/client/proc/cmd_dementor() + set category = "Admin" + set name = "De-mentor" + + if(tgui_alert(usr, "Confirm self-dementor for the round? You can't re-mentor yourself without someone promoting you.","Dementor",list("Yes","No")) == "Yes") + src.mentorholder.disassociate() + +/client/proc/cmd_mhelp_reply(whom) + if(prefs.muted & MUTE_ADMINHELP) + to_chat(src, "Error: Mentor-PM: You are unable to use admin PM-s (muted).") + return + var/client/C + if(istext(whom)) + C = GLOB.directory[whom] + else if(istype(whom,/client)) + C = whom + if(!C) + if(has_mentor_powers(src)) + to_chat(src, "Error: Mentor-PM: Client not found.") + return + + var/datum/mentor_help/MH = C.current_mentorhelp + + if(MH) + message_mentors("[src] has started replying to [C]'s mentor help.") + var/msg = tgui_input_text(src,"Message:", "Private message to [C]") + if (!msg) + message_mentors("[src] has cancelled their reply to [C]'s mentor help.") + return + cmd_mentor_pm(whom, msg, MH) + +/proc/has_mentor_powers(client/C) + return C.holder || C.mentorholder + +/client/proc/cmd_mentor_pm(whom, msg, datum/mentor_help/MH) + set category = "Admin" + set name = "Mentor-PM" + set hidden = 1 + + if(prefs.muted & MUTE_ADMINHELP) + to_chat(src, "Error: Mentor-PM: You are unable to use admin PM-s (muted).") + return + + if(!(has_mentor_powers(src)) && !current_mentorhelp) + to_chat(src, "You can no longer reply to this ticket, please open another one by using the Mentorhelp verb if need be.") + to_chat(src, "Message: [msg]") + return + + var/client/recipient + + if(istext(whom)) + recipient = GLOB.directory[whom] + + else if(istype(whom,/client)) + recipient = whom + + if(!recipient) + if(has_mentor_powers(src)) + to_chat(src, "Error: Mentor-PM: Client not found.") + to_chat(src, msg) + else + log_admin("Mentorhelp: [key_name(src)] sent [msg]") + current_mentorhelp.MessageNoRecipient(msg) + return + + //get message text, limit it's length.and clean/escape html + if(!msg) + msg = tgui_input_text(src,"Message:", "Mentor-PM to [whom]") + + if(!msg) + return + + if(prefs.muted & MUTE_ADMINHELP) + to_chat(src, "Error: Mentor-PM: You are unable to use admin PM-s (muted).") + return + + if(!recipient) + if(has_mentor_powers(src)) + to_chat(src, "Error:Mentor-PM: Client not found.") + else + log_admin("Mentorhelp: [key_name(src)] sent [msg]") + current_mentorhelp.MessageNoRecipient(msg) + return + + if (src.handle_spam_prevention(msg,MUTE_ADMINHELP)) + return + + msg = trim(sanitize(copytext(msg,1,MAX_MESSAGE_LEN))) + if(!msg) + return + + var/interaction_message = "Mentor-PM from-[src] to-[recipient]: [msg]" + + if (recipient.current_mentorhelp && !has_mentor_powers(recipient)) + recipient.current_mentorhelp.AddInteraction(interaction_message) + if (src.current_mentorhelp && !has_mentor_powers(src)) + src.current_mentorhelp.AddInteraction(interaction_message) + + // It's a little fucky if they're both mentors, but while admins may need to adminhelp I don't really see any reason a mentor would have to mentorhelp since you can literally just ask any other mentors online + if (has_mentor_powers(recipient) && has_mentor_powers(src)) + if (recipient.current_mentorhelp) + recipient.current_mentorhelp.AddInteraction(interaction_message) + if (src.current_mentorhelp) + src.current_mentorhelp.AddInteraction(interaction_message) + + to_chat(recipient, "Mentor-PM from-[src]: [msg]") + to_chat(src, "Mentor-PM to-[recipient]: [msg]") + + log_admin("[key_name(src)] sent [msg] to [key_name(recipient)]") + + if(recipient.is_preference_enabled(/datum/client_preference/play_mentorhelp_ping)) + recipient << 'sound/effects/mentorhelp.mp3' + + for(var/client/C in GLOB.mentors) + if (C != recipient && C != src) + to_chat(C, interaction_message) + for(var/client/C in GLOB.admins) + if (C != recipient && C != src) + to_chat(C, interaction_message) \ No newline at end of file diff --git a/code/modules/mentor/mentorhelp.dm b/code/modules/mentor/mentorhelp.dm new file mode 100644 index 0000000000..1cce0702b1 --- /dev/null +++ b/code/modules/mentor/mentorhelp.dm @@ -0,0 +1,395 @@ +/client/var/datum/mentor_help/current_mentorhelp + +// +//TICKET MANAGER +// + +GLOBAL_DATUM_INIT(mhelp_tickets, /datum/mentor_help_tickets, new) + +/datum/mentor_help_tickets + var/list/active_tickets = list() + var/list/resolved_tickets = list() + + var/obj/effect/statclick/mticket_list/astatclick = new(null, null, AHELP_ACTIVE) + var/obj/effect/statclick/mticket_list/rstatclick = new(null, null, AHELP_RESOLVED) + +/datum/mentor_help_tickets/Destroy() + QDEL_LIST(active_tickets) + QDEL_LIST(resolved_tickets) + QDEL_NULL(astatclick) + QDEL_NULL(rstatclick) + return ..() + +//private +/datum/mentor_help_tickets/proc/ListInsert(datum/mentor_help/new_ticket) + var/list/mticket_list + switch(new_ticket.state) + if(AHELP_ACTIVE) + mticket_list = active_tickets + if(AHELP_RESOLVED) + mticket_list = resolved_tickets + else + CRASH("Invalid ticket state: [new_ticket.state]") + var/num_closed = mticket_list.len + if(num_closed) + for(var/I in 1 to num_closed) + var/datum/mentor_help/MH = mticket_list[I] + if(MH.id > new_ticket.id) + mticket_list.Insert(I, new_ticket) + return + mticket_list += new_ticket + +//opens the ticket listings, only two states here +/datum/mentor_help_tickets/proc/BrowseTickets(state) + var/list/l2b + var/title + switch(state) + if(AHELP_ACTIVE) + l2b = active_tickets + title = "Active Tickets" + if(AHELP_RESOLVED) + l2b = resolved_tickets + title = "Resolved Tickets" + if(!l2b) + return + var/list/dat = list("[title]") + dat += "Refresh

" + for(var/datum/mentor_help/MH as anything in l2b) + dat += "Ticket #[MH.id]: [MH.initiator_ckey]: [MH.name]
" + + usr << browse(dat.Join(), "window=mhelp_list[state];size=600x480") + +//Tickets statpanel +/datum/mentor_help_tickets/proc/stat_entry() + var/num_disconnected = 0 + stat("Active Tickets:", astatclick.update("[active_tickets.len]")) + for(var/datum/mentor_help/MH as anything in active_tickets) + if(MH.initiator) + stat("#[MH.id]. [MH.initiator_ckey]:", MH.statclick.update()) + else + ++num_disconnected + if(num_disconnected) + stat("Disconnected:", astatclick.update("[num_disconnected]")) + stat("Resolved Tickets:", rstatclick.update("[resolved_tickets.len]")) + +//Reassociate still open ticket if one exists +/datum/mentor_help_tickets/proc/ClientLogin(client/C) + C.current_mentorhelp = CKey2ActiveTicket(C.ckey) + if(C.current_mentorhelp) + C.current_mentorhelp.AddInteraction("Client reconnected.") + C.current_mentorhelp.initiator = C + +//Dissasociate ticket +/datum/mentor_help_tickets/proc/ClientLogout(client/C) + if(C.current_mentorhelp) + C.current_mentorhelp.AddInteraction("Client disconnected.") + C.current_mentorhelp.initiator = null + C.current_mentorhelp = null + +//Get a ticket given a ckey +/datum/mentor_help_tickets/proc/CKey2ActiveTicket(ckey) + for(var/datum/admin_help/MH as anything in active_tickets) + if(MH.initiator_ckey == ckey) + return MH + +// +//TICKET LIST STATCLICK +// + +/obj/effect/statclick/mticket_list + var/current_state + +/obj/effect/statclick/mticket_list/New(loc, name, state) + current_state = state + ..() + +/obj/effect/statclick/mticket_list/Click() + GLOB.mhelp_tickets.BrowseTickets(current_state) + +// +//TICKET DATUM +// + +/datum/mentor_help + var/id + var/name + var/state = AHELP_ACTIVE + + var/opened_at + var/closed_at + + var/client/initiator //semi-misnomer, it's the person who ahelped/was bwoinked + var/initiator_ckey + var/initiator_key_name + + var/list/_interactions //use AddInteraction() or, preferably, admin_ticket_log() + + var/obj/effect/statclick/ahelp/statclick + + var/static/ticket_counter = 0 + +//call this on its own to create a ticket, don't manually assign current_mentorhelp +//msg is the title of the ticket: usually the ahelp text +/datum/mentor_help/New(msg, client/C) + //clean the input msg + msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) + if(!msg || !C || !C.mob) + qdel(src) + return + + id = ++ticket_counter + opened_at = world.time + + name = msg + + initiator = C + initiator_ckey = initiator.ckey + initiator_key_name = key_name(initiator, FALSE, TRUE) + if(initiator.current_mentorhelp) //This is a bug + log_debug("Ticket erroneously left open by code") + initiator.current_mentorhelp.AddInteraction("Ticket erroneously left open by code") + initiator.current_mentorhelp.Resolve() + initiator.current_mentorhelp = src + + statclick = new(null, src) + _interactions = list() + + log_admin("Mentorhelp: [key_name(C)] sent [msg]") + MessageNoRecipient(msg) + //show it to the person adminhelping too + to_chat(C, "Mentor-PM to-Mentors: [name]") + + GLOB.mhelp_tickets.active_tickets += src + +/datum/mentor_help/Destroy() + RemoveActive() + GLOB.mhelp_tickets.resolved_tickets -= src + return ..() + +/datum/mentor_help/proc/AddInteraction(formatted_message) + _interactions += "[gameTimestamp()]: [formatted_message]" + +//private +/datum/mentor_help/proc/ClosureLinks(ref_src) + if(!ref_src) + ref_src = "\ref[src]" + . = " (RSLVE)" + +//private +/datum/mentor_help/proc/LinkedReplyName(ref_src) + if(!ref_src) + ref_src = "\ref[src]" + return "[initiator_ckey]" + +//private +/datum/mentor_help/proc/TicketHref(msg, ref_src, action = "ticket") + if(!ref_src) + ref_src = "\ref[src]" + return "[msg]" + +//message from the initiator without a target, all people with mentor powers will see this +/datum/mentor_help/proc/MessageNoRecipient(msg) + var/ref_src = "\ref[src]" + var/chat_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)]: [msg]" + AddInteraction("[LinkedReplyName(ref_src)]: [msg]") + for (var/client/C in GLOB.mentors) + if (C.is_preference_enabled(/datum/client_preference/play_mentorhelp_ping)) + C << 'sound/effects/mentorhelp.mp3' + for (var/client/C in GLOB.admins) + if (C.is_preference_enabled(/datum/client_preference/play_mentorhelp_ping)) + C << 'sound/effects/mentorhelp.mp3' + message_mentors(chat_msg) + +//Reopen a closed ticket +/datum/mentor_help/proc/Reopen() + if(state == AHELP_ACTIVE) + to_chat(usr, "This ticket is already open.") + return + + if(GLOB.mhelp_tickets.CKey2ActiveTicket(initiator_ckey)) + to_chat(usr, "This user already has an active ticket, cannot reopen this one.") + return + + statclick = new(null, src) + GLOB.mhelp_tickets.active_tickets += src + GLOB.mhelp_tickets.resolved_tickets -= src + switch(state) + if(AHELP_RESOLVED) + feedback_dec("mhelp_resolve") + state = AHELP_ACTIVE + closed_at = null + if(initiator) + initiator.current_mentorhelp = src + + AddInteraction("Reopened by [usr.ckey]") + if(initiator) + to_chat(initiator, "Ticket [TicketHref("#[id]")] was reopened by [usr.ckey].") + var/msg = "Ticket [TicketHref("#[id]")] reopened by [usr.ckey]." + message_mentors(msg) + log_admin(msg) + feedback_inc("mhelp_reopen") + TicketPanel() //can only be done from here, so refresh it + +//private +/datum/mentor_help/proc/RemoveActive() + if(state != AHELP_ACTIVE) + return + closed_at = world.time + QDEL_NULL(statclick) + GLOB.mhelp_tickets.active_tickets -= src + if(initiator && initiator.current_mentorhelp == src) + initiator.current_mentorhelp = null + +//Mark open ticket as resolved/legitimate, returns mentorhelp verb +/datum/mentor_help/proc/Resolve(silent = FALSE) + if(state != AHELP_ACTIVE) + return + RemoveActive() + state = AHELP_RESOLVED + GLOB.mhelp_tickets.ListInsert(src) + + AddInteraction("Resolved by [usr.ckey].") + if(initiator) + to_chat(initiator, "Ticket [TicketHref("#[id]")] was marked resolved by [usr.ckey].") + if(!silent) + feedback_inc("mhelp_resolve") + var/msg = "Ticket [TicketHref("#[id]")] resolved by [usr.ckey]" + message_mentors(msg) + log_admin(msg) + +//Show the ticket panel +/datum/mentor_help/proc/TicketPanel() + var/list/dat = list("Ticket #[id]") + var/ref_src = "\ref[src]" + dat += "

Mentor Help Ticket #[id]: [LinkedReplyName(ref_src)]

" + dat += "State: " + switch(state) + if(AHELP_ACTIVE) + dat += "OPEN" + if(AHELP_RESOLVED) + dat += "RESOLVED" + else + dat += "UNKNOWN" + dat += "[GLOB.TAB][TicketHref("Refresh", ref_src)]" + if(state != AHELP_ACTIVE) + dat += "[GLOB.TAB][TicketHref("Reopen", ref_src, "reopen")]" + dat += "

Opened at: [gameTimestamp(wtime = opened_at)] (Approx [(world.time - opened_at) / 600] minutes ago)" + if(closed_at) + dat += "
Closed at: [gameTimestamp(wtime = closed_at)] (Approx [(world.time - closed_at) / 600] minutes ago)" + dat += "

" + if(initiator) + dat += "Actions: [Context(ref_src)]
" + else + dat += "DISCONNECTED[GLOB.TAB][ClosureLinks(ref_src)]
" + dat += "
Log:

" + for(var/I in _interactions) + dat += "[I]
" + + usr << browse(dat.Join(), "window=mhelp[id];size=620x480") + +/datum/mentor_help/proc/Context(ref_src) + if(!ref_src) + ref_src = "\ref[src]" + if(state == AHELP_ACTIVE) + . += ClosureLinks(ref_src) + +//Forwarded action from admin/Topic OR mentor/Topic depending on which rank the caller has +/datum/mentor_help/proc/Action(action) + switch(action) + if("ticket") + TicketPanel() + if("reply") + usr.client.cmd_mhelp_reply(initiator) + if("resolve") + Resolve() + if("reopen") + Reopen() + +// +// TICKET STATCLICK +// + +/obj/effect/statclick/mhelp + var/datum/mentor_help/mhelp_datum + +/obj/effect/statclick/mhelp/New(loc, datum/mentor_help/MH) + mhelp_datum = MH + ..(loc) + +/obj/effect/statclick/mhelp/update() + return ..(mhelp_datum.name) + +/obj/effect/statclick/mhelp/Click() + mhelp_datum.TicketPanel() + +/obj/effect/statclick/mhelp/Destroy() + mhelp_datum = null + return ..() + +// +// CLIENT PROCS +// + +/client/verb/mentorhelp(msg as text) + set category = "Admin" + set name = "Mentorhelp" + + if(say_disabled) //This is here to try to identify lag problems + to_chat(usr, "Speech is currently admin-disabled.") + return + + //handle muting and automuting + if(prefs.muted & MUTE_ADMINHELP) + to_chat(src, "Error: Mentor-PM: You cannot send adminhelps (Muted).") + return + if(handle_spam_prevention(msg,MUTE_ADMINHELP)) + return + + if(!msg) + return + + //remove out adminhelp verb temporarily to prevent spamming of admins. + src.verbs -= /client/verb/mentorhelp + spawn(600) + src.verbs += /client/verb/mentorhelp // 1 minute cool-down for mentorhelps + + feedback_add_details("admin_verb","Mentorhelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + if(current_mentorhelp) + if(tgui_alert(usr, "You already have a ticket open. Is this for the same issue?","Duplicate?",list("Yes","No")) != "No") + if(current_mentorhelp) + log_admin("Mentorhelp: [key_name(src)] sent [msg]") + current_mentorhelp.MessageNoRecipient(msg) + to_chat(usr, "Mentor-PM to-Mentors: [msg]") + return + else + to_chat(usr, "Ticket not found, creating new one...") + else + current_mentorhelp.AddInteraction("[usr.ckey] opened a new ticket.") + current_mentorhelp.Resolve() + + new /datum/mentor_help(msg, src, FALSE) + +//admin proc +/client/proc/cmd_mentor_ticket_panel() + set name = "Mentor Ticket List" + set category = "Admin" + + var/browse_to + + switch(tgui_input_list(usr, "Display which ticket list?", "List Choice", list("Active Tickets", "Resolved Tickets"))) + if("Active Tickets") + browse_to = AHELP_ACTIVE + if("Resolved Tickets") + browse_to = AHELP_RESOLVED + else + return + + GLOB.mhelp_tickets.BrowseTickets(browse_to) + +/proc/message_mentors(var/msg) + msg = "Mentor: [msg]" + + for(var/client/C in GLOB.mentors) + to_chat(C, msg) + for(var/client/C in GLOB.admins) + to_chat(C, msg) \ No newline at end of file diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index f3a315827d..d6e72e4e33 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -215,3 +215,10 @@ to_chat(user, "Last code attempt, [previousattempt], had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions.") return ..() + +/obj/structure/closet/crate/secure/loot/damage(var/damage) + if(contents.len) + visible_message("[src] makes a grinding noise as its contents are destroyed by the deca-lock safety!") + for(var/obj/O in src.contents) + qdel(O) + ..() \ No newline at end of file diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm index 9d6eea4607..b1427946c9 100644 --- a/code/modules/mining/drilling/scanner.dm +++ b/code/modules/mining/drilling/scanner.dm @@ -51,7 +51,7 @@ if(ore_type) metals[ore_type] += T.resources[metal] - var/message = "[bicon(src)] The scanner beeps and displays a readout." + var/message = "\icon[src][bicon(src)] The scanner beeps and displays a readout." for(var/ore_type in metals) var/result = "no sign" diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 47649a2bb9..b4633f1cf5 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -363,7 +363,7 @@ var/list/mining_overlay_cache = list() //Not even going to touch this pile of spaghetti /turf/simulated/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob) - if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index a7728a0624..fd5f6b0c51 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -107,11 +107,13 @@ var/list/holder_mob_icon_cache = list() to_chat(held, "You extricate yourself from [holster].") forceMove(get_turf(src)) held.reset_view(null) - else if(isitem(loc)) + var/obj/item/I = loc to_chat(held, "You struggle free of [loc].") forceMove(get_turf(src)) held.reset_view(null) + if(istype(I)) + I.on_holder_escape(src) //Mob specific holders. /obj/item/weapon/holder/diona diff --git a/code/modules/mob/language/monkey.dm b/code/modules/mob/language/monkey.dm index 0ceaf4a88f..8224ca7aa8 100644 --- a/code/modules/mob/language/monkey.dm +++ b/code/modules/mob/language/monkey.dm @@ -1,58 +1,13 @@ -/datum/language/human/monkey - name = "Chimpanzee" +/datum/language/human/animal + name = LANGUAGE_ANIMAL desc = "A collection of ooking noises made by monkeys" - speech_verb = "chimpers" - ask_verb = "chimpers" - exclaim_verb = "screeches" + speech_verb = "says" + ask_verb = "inquires" + exclaim_verb = "yells" key = "C" - syllables = list("ook","eek") + syllables = list("chrp","tweet","squick","croak","hiss","gronk","meow","mew","bark", "woof", "bowwow", "yap", "arf") //This is a generalized animal language. If spoken by an animal, it comes out with the mob noises. This only occurs when spoken by a carbon (human). machine_understands = 0 -/datum/language/skrell/monkey - name = "Neaera" - desc = "A collection of squiking noises made by naera." - key = "8" - syllables = list("squick","croak") - machine_understands = 0 - -/datum/language/unathi/monkey - name = "Stok" - desc = "A collection of hissing noises made by stok." - key = "7" - syllables = list("hiss","gronk") - machine_understands = 0 - -/datum/language/tajaran/monkey - name = "Farwa" - desc = "A collection of meowing noises made by farwa." - key = "9" - syllables = list("meow","mew") - machine_understands = 0 - -/datum/language/corgi - name = "Dog" - desc = "A set of barks and woofs that only dogs can understand." - speech_verb = "barks" - ask_verb = "woofs" - exclaim_verb = "howls" - key = "n" - flags = RESTRICTED - machine_understands = 0 - space_chance = 100 - syllables = list("bark", "woof", "bowwow", "yap", "arf") - -/datum/language/cat - name = "Cat" - desc = "A set of meows and mrowls that only cats can understand." - speech_verb = "meows" - ask_verb = "mrowls" - exclaim_verb = "yowls" - key = "c" - flags = RESTRICTED - machine_understands = 0 - space_chance = 100 - syllables = list("meow", "mrowl", "purr", "meow", "meow", "meow") - /datum/language/mouse name = "Mouse" desc = "A set of squeaks that only mice can understand." @@ -65,18 +20,6 @@ space_chance = 100 syllables = list("squeak") // , "gripes", "oi", "meow") -/datum/language/bird - name = "Bird" - desc = "A set of chirps and squawks that only birds can understand." - speech_verb = "chirps" - ask_verb = "tweets" - exclaim_verb = "squawks" - key = "B" - flags = RESTRICTED - machine_understands = 0 - space_chance = 100 - syllables = list("chirp", "squawk", "tweet") - /datum/language/teppi name = "Teppi" desc = "A set of gyohs that only teppi can understand." diff --git a/code/modules/mob/language/outsider.dm b/code/modules/mob/language/outsider.dm index 649c9814d6..99b5f03e8c 100644 --- a/code/modules/mob/language/outsider.dm +++ b/code/modules/mob/language/outsider.dm @@ -74,17 +74,6 @@ "gal'h'rfikk", "harfrandid", "mud'gib", "il", "fuu", "ma'jin", "dedo", "ol'btoh", "n'ath", "reth", "sh'yro", "eth", \ "d'rekkathnor", "khari'd", "gual'te", "nikka", "nikt'o", "barada", "kla'atu", "barhah", "hra" ,"zar'garis", "spiri", "malum") -/datum/language/cult - name = LANGUAGE_OCCULT - desc = "The initiated can share their thoughts by means defying all reason." - speech_verb = "intones" - ask_verb = "intones" - exclaim_verb = "chants" - colour = "cult" - key = "y" - machine_understands = 0 - flags = RESTRICTED | HIVEMIND - /datum/language/xenocommon name = "Xenomorph" colour = "alien" @@ -143,32 +132,6 @@ "danya","da","mied","zan","das","krem","myka","cyka","blyat","to","st","no","na","ni", "ko","ne","en","po","ra","li","on","byl","cto","eni","ost","ol","ego","ver","stv","pro") -//For your event purposes. -/datum/language/occursus - name = LANGUAGE_EVENT1 - desc = "The Powers That Be have seen it fit to grace you with a special language that sounds like... something. This description should be overridden by the time you see this." - speech_verb = "says" - ask_verb = "asks" - exclaim_verb = "shouts" - colour = "warning" - key = "]" - flags = RESTRICTED - syllables = list("chan","ange","thi","se") - -//Bloblang. -/datum/language/blob - name = LANGUAGE_BLOB - desc = "The massive processing power of the Blob's core gives the overmind finely tuned abilities to transmit messages to nearby life-forms through chemical signals." - speech_verb = "resonates" - ask_verb = "reverberates" - exclaim_verb = "shudders" - colour = "blob" - key = "}" - machine_understands = TRUE - flags = RESTRICTED - - syllables = list("^", "˅", "-", "°", "~") - /datum/language/corticalborer/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) var/mob/living/simple_mob/animal/borer/B diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index 0100d1d36e..daa7ac74f0 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -122,22 +122,9 @@ colour = "skrell" key = "k" space_chance = 30 -// flags = WHITELISTED (YWEdit) + // flags = WHITELISTED ( YW Edit ) syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix") -/datum/language/skrellfar - name = LANGUAGE_SKRELLIANFAR - desc = "The most common language among the Skrellian Far Kingdoms. Has an even higher than usual concentration of inaudible phonemes. Native to Skrell." - speech_verb = "warbles" - ask_verb = "warbles" - exclaim_verb = "sings" - whisper_verb = "hums" - colour = "skrellfar" - key = "p" - space_chance = 30 -// flags = WHITELISTED (YWEdit) - syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix", "...", "oo", "q", "nq", "x", "xq", "ll", "...", "...", "...") //should sound like there's holes in it - /datum/language/skrell/get_random_name(var/gender) var/list/first_names = file2list('config/names/first_name_skrell.txt') var/list/last_names = file2list('config/names/last_name_skrell.txt') @@ -150,7 +137,7 @@ whisper_verb = "whispers" colour = "solcom" key = "1" -// flags = WHITELISTED (YWEdit) + // flags = WHITELISTED ( YW Edit ) //syllables are at the bottom of the file /datum/language/human/get_spoken_verb(var/msg_end) @@ -196,7 +183,7 @@ exclaim_verb = "trills" colour = "alien" key = "v" -// flags = WHITELISTED (YWEdit) + // flags = WHITELISTED ( YW Edit ) space_chance = 50 syllables = list( "ca", "ra", "ma", "sa", "na", "ta", "la", "sha", "scha", "a", "a", diff --git a/code/modules/mob/language/station_vr.dm b/code/modules/mob/language/station_vr.dm index 77375a9c80..7322c463e8 100644 --- a/code/modules/mob/language/station_vr.dm +++ b/code/modules/mob/language/station_vr.dm @@ -103,36 +103,6 @@ machine_understands = FALSE flags = WHITELISTED | HIVEMIND -/datum/language/slavic - name = LANGUAGE_SLAVIC - desc = "The official language of the Independent Colonial Confederation of Gilgamesh, originally established in 2122 by the short-lived United Slavic Confederation on Earth." - speech_verb = "govorit" // All Russian for "says" "asks" and "shouts". Mostly here as a joke. - ask_verb = "sprashivaet" - exclaim_verb = "krichit" - whisper_verb = "shepchet" - colour = "attack" // Red for slav! - key = "P" - syllables = list( - "rus", "zem", "ave", "blyat", "cyk", "groz", "ski", "ska", "ven", "konst", "pol", "lin", "svy", - "danya", "da", "mied", "kuz,", "zan", "das", "krem", "myka", "to", "st", "no", "na", "ni", - "ko", "ne", "en", "po", "tro", "ra", "li", "on", "byl", "cto", "eni", "ost", "ol", "ego", - "ver", "stv", "pro", "ski" - ) - -/datum/language/clownish - name = LANGUAGE_CLOWNISH - desc = "A special elective language course for those studying at the Clown Planet Institute." - speech_verb = "honks" - ask_verb = "seins" - exclaim_verb = "crenks" - whisper_verb = "squeaks" - colour = "#F785F2" // Pink for the clown. - key = "<" - flags = WHITELISTED | CLOWN - syllables = list( - "honk", "knock", "salt", "slip", "lube", "banana", "flower", "pie", "did you hear", "🅱️", "haha", "bully", "going up", - ) - /datum/language/drudakar name = LANGUAGE_DRUDAKAR desc = "The native language of the D'Rudak'Ar, a loosely tied together community of dragons and demi-dragons based in the Diul system. Features include many hard consonants and rolling 'r's." @@ -202,11 +172,5 @@ machine_understands = FALSE desc = "A dialect of Tradeband not uncommon amongst traders in the Free Trade Union. The language is often difficult to translate due to changing frequently and being highly colloquial." partial_understanding = list(LANGUAGE_TRADEBAND = 30, LANGUAGE_SOL_COMMON = 10) -/datum/language/human/monkey - flags = RESTRICTED -/datum/language/skrell/monkey - flags = RESTRICTED -/datum/language/unathi/monkey - flags = RESTRICTED -/datum/language/tajaran/monkey - flags = RESTRICTED +/datum/language/human/animal + flags = RESTRICTED \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b0557e2bc1..3904656a99 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -236,7 +236,7 @@ status += "MISSING" if(org.status & ORGAN_MUTATED) status += "weirdly shapen" - if(org.dislocated == 2) + if(org.dislocated == 1) //VOREStation Edit Bugfix status += "dislocated" if(org.status & ORGAN_BROKEN) status += "hurts when touched" diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 6d5841659b..91c4658afd 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -96,6 +96,15 @@ var/list/_human_default_emotes = list( /decl/emote/visible/floorspin, /decl/emote/visible/flip, //VOREStation Add + /decl/emote/audible/bug_hiss, + /decl/emote/audible/bug_buzz, + /decl/emote/audible/bug_chitter, + /decl/emote/audible/hiss, + /decl/emote/audible/chirp, + /decl/emote/audible/warble, + /decl/emote/audible/vox_shriek, + /decl/emote/audible/purr, + /decl/emote/audible/purrlong, /decl/emote/audible/awoo, /decl/emote/audible/awoo2, /decl/emote/audible/belch, @@ -146,6 +155,9 @@ var/list/_human_default_emotes = list( /decl/emote/audible/coyawoo5, /decl/emote/audible/fennecscream, /decl/emote/audible/zoom, + /decl/emote/audible/mothscream, + /decl/emote/audible/mothchitter, + /decl/emote/audible/mothlaugh, //VOREStation Add End //YW ADDITION: Add Start /decl/emote/audible/chirp, @@ -285,7 +297,16 @@ var/list/_simple_mob_default_emotes = list( /decl/emote/audible/gyoh, /decl/emote/audible/rumble, /decl/emote/audible/fennecscream, - /decl/emote/audible/zoom + /decl/emote/audible/zoom, + /decl/emote/audible/bug_hiss, + /decl/emote/audible/bug_buzz, + /decl/emote/audible/bug_chitter, + /decl/emote/audible/hiss, + /decl/emote/audible/chirp, + /decl/emote/audible/warble, + /decl/emote/audible/vox_shriek, + /decl/emote/audible/purr, + /decl/emote/audible/purrlong ) //VOREStation Add End diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index b7b494ae65..1d3a36bd94 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -101,7 +101,7 @@ else if(species.name != "Human") name_ender = ", \a [species.get_examine_name()]![species.get_additional_examine_text(src)]" - var/list/msg = list("*---------*","This is [bicon(src)] [src.name][name_ender]") + var/list/msg = list("*---------*","This is \icon[src.examine_icon()][bicon(src)] [src.name][name_ender]") //uniform if(w_uniform && !(skip_gear & EXAMINE_SKIPJUMPSUIT) && w_uniform.show_examine) @@ -136,16 +136,16 @@ tie_msg += " Near the waist it has [english_list(pocket_msg)]." if(w_uniform.blood_DNA) - msg += "[T.He] [T.is] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]" + msg += "[T.He] [T.is] wearing \icon[w_uniform][bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]" else - msg += "[T.He] [T.is] wearing [bicon(w_uniform)] \a [w_uniform].[tie_msg]" + msg += "[T.He] [T.is] wearing \icon[w_uniform][bicon(w_uniform)] \a [w_uniform].[tie_msg]" //head if(head && !(skip_gear & EXAMINE_SKIPHELMET) && head.show_examine) if(head.blood_DNA) - msg += "[T.He] [T.is] wearing [bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!" + msg += "[T.He] [T.is] wearing \icon[head][bicon(head)] [head.gender==PLURAL?"some":"a"] [(head.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [head.name] on [T.his] head!" else - msg += "[T.He] [T.is] wearing [bicon(head)] \a [head] on [T.his] head." + msg += "[T.He] [T.is] wearing \icon[head][bicon(head)] \a [head] on [T.his] head." //suit/armour if(wear_suit) @@ -156,71 +156,71 @@ tie_msg += " Attached to it is [english_list(U.accessories)]." if(wear_suit.blood_DNA) - msg += "[T.He] [T.is] wearing [bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_suit.name][tie_msg]!" + msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] [wear_suit.gender==PLURAL?"some":"a"] [(wear_suit.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_suit.name][tie_msg]!" else - msg += "[T.He] [T.is] wearing [bicon(wear_suit)] \a [wear_suit].[tie_msg]" + msg += "[T.He] [T.is] wearing \icon[wear_suit][bicon(wear_suit)] \a [wear_suit].[tie_msg]" //suit/armour storage if(s_store && !(skip_gear & EXAMINE_SKIPSUITSTORAGE) && s_store.show_examine) if(s_store.blood_DNA) - msg += "[T.He] [T.is] carrying [bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!" + msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] [s_store.gender==PLURAL?"some":"a"] [(s_store.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [s_store.name] on [T.his] [wear_suit.name]!" else - msg += "[T.He] [T.is] carrying [bicon(s_store)] \a [s_store] on [T.his] [wear_suit.name]." + msg += "[T.He] [T.is] carrying \icon[s_store][bicon(s_store)] \a [s_store] on [T.his] [wear_suit.name]." //back if(back && !(skip_gear & EXAMINE_SKIPBACKPACK) && back.show_examine) if(back.blood_DNA) - msg += "[T.He] [T.has] [bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back." + msg += "[T.He] [T.has] \icon[back][bicon(back)] [back.gender==PLURAL?"some":"a"] [(back.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [back] on [T.his] back." else - msg += "[T.He] [T.has] [bicon(back)] \a [back] on [T.his] back." + msg += "[T.He] [T.has] \icon[back][bicon(back)] \a [back] on [T.his] back." //left hand if(l_hand && l_hand.show_examine) if(l_hand.blood_DNA) - msg += "[T.He] [T.is] holding [bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!" + msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] [l_hand.gender==PLURAL?"some":"a"] [(l_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [l_hand.name] in [T.his] left hand!" else - msg += "[T.He] [T.is] holding [bicon(l_hand)] \a [l_hand] in [T.his] left hand." + msg += "[T.He] [T.is] holding \icon[l_hand][bicon(l_hand)] \a [l_hand] in [T.his] left hand." //right hand if(r_hand && r_hand.show_examine) if(r_hand.blood_DNA) - msg += "[T.He] [T.is] holding [bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!" + msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] [r_hand.gender==PLURAL?"some":"a"] [(r_hand.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [r_hand.name] in [T.his] right hand!" else - msg += "[T.He] [T.is] holding [bicon(r_hand)] \a [r_hand] in [T.his] right hand." + msg += "[T.He] [T.is] holding \icon[r_hand][bicon(r_hand)] \a [r_hand] in [T.his] right hand." //gloves if(gloves && !(skip_gear & EXAMINE_SKIPGLOVES) && gloves.show_examine) if(gloves.blood_DNA) - msg += "[T.He] [T.has] [bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!" + msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] [gloves.gender==PLURAL?"some":"a"] [(gloves.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [gloves.name] on [T.his] hands!" else - msg += "[T.He] [T.has] [bicon(gloves)] \a [gloves] on [T.his] hands." + msg += "[T.He] [T.has] \icon[gloves][bicon(gloves)] \a [gloves] on [T.his] hands." else if(blood_DNA && !(skip_body & EXAMINE_SKIPHANDS)) msg += "[T.He] [T.has] [(hand_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained hands!" //handcuffed? if(handcuffed && handcuffed.show_examine) if(istype(handcuffed, /obj/item/weapon/handcuffs/cable)) - msg += "[T.He] [T.is] [bicon(handcuffed)] restrained with cable!" + msg += "[T.He] [T.is] \icon[handcuffed][bicon(handcuffed)] restrained with cable!" else - msg += "[T.He] [T.is] [bicon(handcuffed)] handcuffed!" + msg += "[T.He] [T.is] \icon[handcuffed][bicon(handcuffed)] handcuffed!" //buckled if(buckled) - msg += "[T.He] [T.is] [bicon(buckled)] buckled to [buckled]!" + msg += "[T.He] [T.is] \icon[buckled][bicon(buckled)] buckled to [buckled]!" //belt if(belt && !(skip_gear & EXAMINE_SKIPBELT) && belt.show_examine) if(belt.blood_DNA) - msg += "[T.He] [T.has] [bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!" + msg += "[T.He] [T.has] \icon[belt][bicon(belt)] [belt.gender==PLURAL?"some":"a"] [(belt.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [belt.name] about [T.his] waist!" else - msg += "[T.He] [T.has] [bicon(belt)] \a [belt] about [T.his] waist." + msg += "[T.He] [T.has] \icon[belt][bicon(belt)] \a [belt] about [T.his] waist." //shoes if(shoes && !(skip_gear & EXAMINE_SKIPSHOES) && shoes.show_examine) if(shoes.blood_DNA) - msg += "[T.He] [T.is] wearing [bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!" + msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] [shoes.gender==PLURAL?"some":"a"] [(shoes.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [shoes.name] on [T.his] feet!" else - msg += "[T.He] [T.is] wearing [bicon(shoes)] \a [shoes] on [T.his] feet." + msg += "[T.He] [T.is] wearing \icon[shoes][bicon(shoes)] \a [shoes] on [T.his] feet." else if(feet_blood_DNA && !(skip_body & EXAMINE_SKIPHANDS)) msg += "[T.He] [T.has] [(feet_blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained feet!" @@ -231,24 +231,24 @@ descriptor = "in [T.his] mouth" if(wear_mask.blood_DNA) - msg += "[T.He] [T.has] [bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!" + msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] [wear_mask.gender==PLURAL?"some":"a"] [(wear_mask.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [wear_mask.name] [descriptor]!" else - msg += "[T.He] [T.has] [bicon(wear_mask)] \a [wear_mask] [descriptor]." + msg += "[T.He] [T.has] \icon[wear_mask][bicon(wear_mask)] \a [wear_mask] [descriptor]." //eyes if(glasses && !(skip_gear & EXAMINE_SKIPEYEWEAR) && glasses.show_examine) if(glasses.blood_DNA) - msg += "[T.He] [T.has] [bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!" + msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] [glasses.gender==PLURAL?"some":"a"] [(glasses.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [glasses] covering [T.his] eyes!" else - msg += "[T.He] [T.has] [bicon(glasses)] \a [glasses] covering [T.his] eyes." + msg += "[T.He] [T.has] \icon[glasses][bicon(glasses)] \a [glasses] covering [T.his] eyes." //left ear if(l_ear && !(skip_gear & EXAMINE_SKIPEARS) && l_ear.show_examine) - msg += "[T.He] [T.has] [bicon(l_ear)] \a [l_ear] on [T.his] left ear." + msg += "[T.He] [T.has] \icon[l_ear][bicon(l_ear)] \a [l_ear] on [T.his] left ear." //right ear if(r_ear && !(skip_gear & EXAMINE_SKIPEARS) && r_ear.show_examine) - msg += "[T.He] [T.has] [bicon(r_ear)] \a [r_ear] on [T.his] right ear." + msg += "[T.He] [T.has] \icon[r_ear][bicon(r_ear)] \a [r_ear] on [T.his] right ear." //ID if(wear_id && wear_id.show_examine) @@ -260,9 +260,9 @@ var/obj/item/weapon/card/id/idcard = wear_id id = idcard.registered_name if(id && (id != real_name) && (get_dist(src, usr) <= 1) && prob(10)) - msg += "[T.He] [T.is] wearing [bicon(wear_id)] \a [wear_id] yet something doesn't seem right..." + msg += "[T.He] [T.is] wearing \icon[wear_id][bicon(wear_id)] \a [wear_id] yet something doesn't seem right..." else*/ - msg += "[T.He] [T.is] wearing [bicon(wear_id)] \a [wear_id]." + msg += "[T.He] [T.is] wearing \icon[wear_id][bicon(wear_id)] \a [wear_id]." //Jitters if(is_jittery) @@ -370,7 +370,7 @@ wound_flavor_text["[temp.name]"] = "[T.He] [T.has] [temp.get_wounds_desc()] on [T.his] [temp.name]." else wound_flavor_text["[temp.name]"] = "" - if(temp.dislocated == 2) + if(temp.dislocated == 1) //VOREStation Edit Bugfix wound_flavor_text["[temp.name]"] += "[T.His] [temp.joint] is dislocated!" if(temp.brute_dam > temp.min_broken_damage || (temp.status & (ORGAN_BROKEN | ORGAN_MUTATED))) wound_flavor_text["[temp.name]"] += "[T.His] [temp.name] is dented and swollen!" diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm index 8611142906..1deab398f0 100644 --- a/code/modules/mob/living/carbon/human/examine_vr.dm +++ b/code/modules/mob/living/carbon/human/examine_vr.dm @@ -83,13 +83,13 @@ /mob/living/carbon/human/proc/examine_pickup_size(mob/living/H) var/message = "" - if(istype(H) && (H.get_effective_size() - src.get_effective_size()) >= 0.50) + if(istype(H) && (H.get_effective_size(FALSE) - src.get_effective_size(TRUE)) >= 0.50) message = "They are small enough that you could easily pick them up!" return message /mob/living/carbon/human/proc/examine_step_size(mob/living/H) var/message = "" - if(istype(H) && (H.get_effective_size() - src.get_effective_size()) >= 0.75) + if(istype(H) && (H.get_effective_size(FALSE) - src.get_effective_size(TRUE)) >= 0.75) message = "They are small enough that you could easily trample them!" return message diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index b0244149d8..ff43db0922 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -347,7 +347,7 @@ emp_act return 1 /mob/living/carbon/human/proc/attack_joint(var/obj/item/organ/external/organ, var/obj/item/W, var/effective_force, var/dislocate_mult, var/blocked, var/soaked) - if(!organ || (organ.dislocated == 2) || (organ.dislocated == -1) || blocked >= 100) + if(!organ || (organ.dislocated == 1) || (organ.dislocated == -1) || blocked >= 100) //VOREStation Edit Bugfix return 0 if(W.damtype != BRUTE) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index c3eedab5ec..2e880f5e4a 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -202,7 +202,13 @@ if(restrained()) return 0 if(..()) //Can move due to other reasons, don't use jetpack fuel - return 1 + return TRUE + + if(species.can_space_freemove || (species.can_zero_g_move && !istype(get_turf(src), /turf/space))) //VOREStation Edit. + return TRUE //VOREStation Edit. + + if(flying) //VOREStation Edit. If you're flying, you glide around! + return TRUE //VOREStation Edit. //Do we have a working jetpack? var/obj/item/weapon/tank/jetpack/thrust = get_jetpack() @@ -210,22 +216,23 @@ if(thrust) if(((!check_drift) || (check_drift && thrust.stabilization_on)) && (!lying) && (thrust.do_thrust(0.01, src))) inertia_dir = 0 - return 1 - if(flying) //VOREStation Edit. If you're flying, you glide around! - return 0 //VOREStation Edit. + return TRUE - return 0 + return FALSE /mob/living/carbon/human/Process_Spaceslipping(var/prob_slip = 5) //If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such. if(species.flags & NO_SLIP) - return 0 + return FALSE + + if(species.can_space_freemove || species.can_zero_g_move) + return FALSE var/obj/item/weapon/tank/jetpack/thrust = get_jetpack() if(thrust?.can_thrust(0.01)) - return 0 + return FALSE if(stat) prob_slip = 0 // Changing this to zero to make it line up with the comment, and also, make more sense. diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index 43225a6d34..7350d093e4 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -30,8 +30,8 @@ icon = null icon_state = "" . = ..() - - dress_up() + + dress_up() turntable() /mob/living/carbon/human/dummy/mannequin/autoequip/proc/dress_up() @@ -42,7 +42,7 @@ var/obj/item/clothing/C = I C.species_restricted = null equip_to_appropriate_slot(I) - + if(istype(back, /obj/item/weapon/rig)) var/obj/item/weapon/rig/rig = back rig.toggle_seals(src) @@ -130,6 +130,3 @@ /mob/living/carbon/human/stok/Initialize(var/new_loc) return ..(new_loc, SPECIES_MONKEY_UNATHI) - -/mob/living/carbon/human/event1/Initialize(var/new_loc) - return ..(new_loc, SPECIES_EVENT1) diff --git a/code/modules/mob/living/carbon/human/human_vr.dm b/code/modules/mob/living/carbon/human/human_vr.dm index a60521b5ab..2c621fa3f8 100644 --- a/code/modules/mob/living/carbon/human/human_vr.dm +++ b/code/modules/mob/living/carbon/human/human_vr.dm @@ -11,4 +11,7 @@ /mob/living/carbon/human/Destroy() alt_farmanimals -= src - . = ..() \ No newline at end of file + . = ..() + +/mob/living/carbon/human/get_digestion_nutrition_modifier() + return species.digestion_nutrition_modifier \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/outsider/replicant.dm b/code/modules/mob/living/carbon/human/species/outsider/replicant.dm index ec13e29908..7e8bf25f6e 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/replicant.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/replicant.dm @@ -72,7 +72,7 @@ blood_color = "#55ff55" species_language = LANGUAGE_SIGN - assisted_langs = list(LANGUAGE_ROOTGLOBAL, LANGUAGE_SOL_COMMON, LANGUAGE_SKRELLIANFAR) + assisted_langs = list(LANGUAGE_ROOTGLOBAL, LANGUAGE_SOL_COMMON) inherent_verbs = list( /mob/living/carbon/human/proc/shapeshifter_select_shape, diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index ff775a5063..2fb9c4b9ae 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -72,7 +72,7 @@ // The languages the species can't speak without an assisted organ. // This list is a guess at things that no one other than the parent species should be able to speak - var/list/assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //VOREStation Edit + var/list/assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //VOREStation Edit //Soundy emotey things. var/scream_verb_1p = "scream" @@ -201,7 +201,8 @@ var/has_glowing_eyes = 0 // Whether the eyes are shown above all lighting var/water_movement = 0 // How much faster or slower the species is in water var/snow_movement = 0 // How much faster or slower the species is on snow - + var/can_space_freemove = FALSE // Can we freely move in space? + var/can_zero_g_move = FALSE // What about just in zero-g non-space? var/item_slowdown_mod = 1 // How affected by item slowdown the species is. var/primitive_form // Lesser form, if any (ie. monkey for humans) diff --git a/code/modules/mob/living/carbon/human/species/species_attack_vr.dm b/code/modules/mob/living/carbon/human/species/species_attack_vr.dm index 110b76ef9b..2c79aaee37 100644 --- a/code/modules/mob/living/carbon/human/species/species_attack_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_attack_vr.dm @@ -60,4 +60,21 @@ /datum/unarmed_attack/bite/sharp/shadekin/apply_effects(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) ..() if(!(target == user)) - user.shadekin_adjust_energy(attack_damage) \ No newline at end of file + user.shadekin_adjust_energy(attack_damage) + +/datum/unarmed_attack/claws/chimera //special feral attack that gets stronger as they get angrier + +/datum/unarmed_attack/claws/chimera/get_unarmed_damage(var/mob/living/carbon/human/user) + return user.feral/5 + +/datum/unarmed_attack/claws/chimera/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone) + ..() + if(user.feral && !(target == user)) + var/selfdamage = ((user.feral/10)-7.5) + if(selfdamage > 0) + var/selfdamagezone = null + if (user.hand) + selfdamagezone=pick(BP_L_ARM, BP_L_HAND) + else + selfdamagezone=pick(BP_R_ARM, BP_R_HAND) + user.apply_damage(selfdamage, BRUTE, selfdamagezone, 0, 0, sharp=FALSE, edge=FALSE) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/species_getters.dm b/code/modules/mob/living/carbon/human/species/species_getters.dm index bcb9de1f29..27bb09baa6 100644 --- a/code/modules/mob/living/carbon/human/species/species_getters.dm +++ b/code/modules/mob/living/carbon/human/species/species_getters.dm @@ -103,8 +103,10 @@ if(!name_language) if(gender == FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - else + else if(gender == MALE) return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + else + return capitalize(prob(50) ? pick(first_names_male) : pick(first_names_female)) + " " + capitalize(pick(last_names)) var/datum/language/species_language = GLOB.all_languages[name_language] if(!species_language) diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm index e8d9e4b059..ceb8a026d2 100644 --- a/code/modules/mob/living/carbon/human/species/species_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_vr.dm @@ -16,6 +16,8 @@ var/base_species = null // Unused outside of a few species var/selects_bodytype = FALSE // Allows the species to choose from body types like custom species can, affecting suit fitting and etcetera as you would expect. + var/bloodsucker = FALSE // Allows safely getting nutrition from blood. + var/is_weaver = FALSE var/silk_production = FALSE var/silk_reserve = 100 @@ -27,6 +29,10 @@ var/list/copy_vars = list("base_species", "icobase", "deform", "tail", "tail_animation", "icobase_tail", "color_mult", "primitive_form", "appearance_flags", "flesh_color", "base_color", "blood_mask", "damage_mask", "damage_overlays", "move_trail", "has_floating_eyes") var/trait_points = 0 + var/micro_size_mod = 0 // How different is our size for interactions that involve us being small? + var/macro_size_mod = 0 // How different is our size for interactions that involve us being big? + var/digestion_nutrition_modifier = 1 + /datum/species/proc/give_numbing_bite() //Holy SHIT this is hacky, but it works. Updating a mob's attacks mid game is insane. unarmed_attacks = list() diff --git a/code/modules/mob/living/carbon/human/species/station/greyYW.dm b/code/modules/mob/living/carbon/human/species/station/greyYW.dm index 28227839f2..55c06af5c7 100644 --- a/code/modules/mob/living/carbon/human/species/station/greyYW.dm +++ b/code/modules/mob/living/carbon/human/species/station/greyYW.dm @@ -19,7 +19,7 @@ species_language = LANGUAGE_PSIONIC secondary_langs = list(LANGUAGE_PSIONIC) name_language = null // Use the first-name last-name generator rather than a language scrambler - assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) + assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) flesh_color = "#a598ad" blood_color = "#A200FF" brute_mod = 1.25 diff --git a/code/modules/mob/living/carbon/human/species/station/monkey.dm b/code/modules/mob/living/carbon/human/species/station/monkey.dm index 587f4d918d..f90a61111c 100644 --- a/code/modules/mob/living/carbon/human/species/station/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/station/monkey.dm @@ -9,7 +9,7 @@ damage_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi' blood_mask = 'icons/mob/human_races/masks/blood_monkey.dmi' language = null - default_language = "Chimpanzee" + default_language = LANGUAGE_ANIMAL greater_form = SPECIES_HUMAN mob_size = MOB_SMALL has_fine_manipulation = 0 @@ -75,7 +75,7 @@ deform = 'icons/mob/human_races/monkeys/r_farwa.dmi' greater_form = SPECIES_TAJ - default_language = "Farwa" + default_language = LANGUAGE_ANIMAL flesh_color = "#AFA59E" base_color = "#333333" tail = "farwatail" @@ -88,7 +88,7 @@ deform = 'icons/mob/human_races/monkeys/r_neaera.dmi' greater_form = SPECIES_SKRELL - default_language = "Neaera" + default_language = LANGUAGE_ANIMAL flesh_color = "#8CD7A3" blood_color = "#1D2CBF" reagent_tag = IS_SKRELL @@ -103,7 +103,7 @@ tail = "stoktail" greater_form = SPECIES_UNATHI - default_language = "Stok" + default_language = LANGUAGE_ANIMAL flesh_color = "#34AF10" base_color = "#066000" reagent_tag = IS_UNATHI diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index fb8ffbc9dd..a96e21755c 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -13,7 +13,7 @@ species_language = LANGUAGE_SOL_COMMON secondary_langs = list(LANGUAGE_SOL_COMMON, LANGUAGE_TERMINUS) name_language = null // Use the first-name last-name generator rather than a language scrambler - assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) + assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) min_age = 18 max_age = 130 @@ -389,7 +389,7 @@ taste_sensitivity = TASTE_SENSITIVE num_alternate_languages = 3 secondary_langs = list(LANGUAGE_ZADDAT, LANGUAGE_UNATHI) - assisted_langs = list(LANGUAGE_EAL, LANGUAGE_TERMINUS, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_SOL_COMMON, LANGUAGE_AKHANI, LANGUAGE_SIIK, LANGUAGE_GUTTER) //limited vocal range; can talk Unathi and magical Galcom but not much else + assisted_langs = list(LANGUAGE_EAL, LANGUAGE_TERMINUS, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_SOL_COMMON, LANGUAGE_AKHANI, LANGUAGE_SIIK, LANGUAGE_GUTTER) //limited vocal range; can talk Unathi and magical Galcom but not much else name_language = LANGUAGE_ZADDAT species_language = LANGUAGE_ZADDAT health_hud_intensity = 2.5 diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index 34a7054643..a4333760a8 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -3,10 +3,18 @@ set category = "Abilities" // Sanity is mostly handled in chimera_regenerate() - - var/confirm = tgui_alert(usr, "Are you sure you want to completely reconstruct your form? This process can take up to twenty minutes, depending on how hungry you are, and you will be unable to move.", "Confirm Regeneration", list("Yes", "No")) - if(confirm == "Yes") - chimera_regenerate() + if(stat == DEAD) + var/confirm = tgui_alert(usr, "Are you sure you want to regenerate your corpse? This process can take up to thirty minutes.", "Confirm Regeneration", list("Yes", "No")) + if(confirm == "Yes") + chimera_regenerate() + else if (quickcheckuninjured()) + var/confirm = tgui_alert(usr, "Are you sure you want to regenerate? As you are uninjured this will only take 30 seconds and match your appearance to your character slot.", "Confirm Regeneration", list("Yes", "No")) + if(confirm == "Yes") + chimera_regenerate() + else + var/confirm = tgui_alert(usr, "Are you sure you want to completely reconstruct your form? This process can take up to fifteen minutes, depending on how hungry you are, and you will be unable to move.", "Confirm Regeneration", list("Yes", "No")) + if(confirm == "Yes") + chimera_regenerate() /mob/living/carbon/human/proc/chimera_regenerate() //If they're already regenerating @@ -21,40 +29,40 @@ to_chat(src, "You can't use that ability again so soon!") return - var/nutrition_used = nutrition * 0.5 - var/time = (240+960/(1 + nutrition_used/75)) + var/time = min(900, (120+780/(1 + nutrition/100))) //capped at 15 mins, roughly 6 minutes at 250 (yellow) nutrition, 4.1 minutes at 500 (grey), cannot be below 2 mins + if (quickcheckuninjured()) //if you're completely uninjured, then you get a speedymode - check health first for quickness + time = 30 //Clicked regen while dead. if(stat == DEAD) - //Has nutrition and dead, allow regen. - if(hasnutriment()) - to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.") + //reviving from dead takes extra nutriment to be provided from outside OR takes twice as long and consumes extra at the end + if(!hasnutriment()) + time = time*2 - //Scary spawnerization. - revive_ready = REVIVING_NOW - revive_finished = (world.time + time SECONDS) // When do we finish reviving? Allows us to find out when we're done, called by the alert currently. - throw_alert("regen", /obj/screen/alert/xenochimera/reconstitution) - spawn(time SECONDS) - // Was dead, now not dead. - if(stat != DEAD) - to_chat(src, "Your body has recovered from its ordeal, ready to regenerate itself again.") - revive_ready = REVIVING_READY //reset their cooldown - clear_alert("regen") - throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) + to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.") - // Was dead, still dead. - else - to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch.") - verbs |= /mob/living/carbon/human/proc/hatch - revive_ready = REVIVING_DONE - src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) - clear_alert("regen") - throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) + //Scary spawnerization. + revive_ready = REVIVING_NOW + revive_finished = (world.time + time SECONDS) // When do we finish reviving? Allows us to find out when we're done, called by the alert currently. + throw_alert("regen", /obj/screen/alert/xenochimera/reconstitution) + spawn(time SECONDS) + // check to see if they've been fixed by outside forces in the meantime such as defibbing + if(stat != DEAD) + to_chat(src, "Your body has recovered from its ordeal, ready to regenerate itself again.") + revive_ready = REVIVING_READY //reset their cooldown + clear_alert("regen") + throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) + + // Was dead, still dead. + else + to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch.") + verbs |= /mob/living/carbon/human/proc/hatch + revive_ready = REVIVING_DONE + src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) + clear_alert("regen") + throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) - //Dead until nutrition injected. - else - to_chat(src, "Your body is too damaged to regenerate without additional nutrients to feed what few living cells remain.") //Clicked regen while NOT dead else @@ -66,29 +74,17 @@ throw_alert("regen", /obj/screen/alert/xenochimera/reconstitution) spawn(time SECONDS) - //If they're still alive after regenning. - if(stat != DEAD) + //Slightly different flavour messages + if(stat != DEAD || hasnutriment()) to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch..") - verbs |= /mob/living/carbon/human/proc/hatch - revive_ready = REVIVING_DONE - src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) - clear_alert("regen") - throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) - - //Was alive, now dead - else if(hasnutriment()) - to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch..") - verbs |= /mob/living/carbon/human/proc/hatch - revive_ready = REVIVING_DONE - src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) - clear_alert("regen") - throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) - - //Dead until nutrition injected. else - to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.") - revive_ready = REVIVING_READY //reset their cooldown - clear_alert("regen") + to_chat(src, "Consciousness begins to stir as your battered body struggles to recover from its ordeal..") + verbs |= /mob/living/carbon/human/proc/hatch + revive_ready = REVIVING_DONE + src << sound('sound/effects/mob_effects/xenochimera/hatch_notification.ogg',0,0,0,30) + clear_alert("regen") + throw_alert("hatch", /obj/screen/alert/xenochimera/readytohatch) + /mob/living/carbon/human/proc/hasnutriment() if (bloodstr.has_reagent("nutriment", 30) || src.bloodstr.has_reagent("protein", 15)) //protein needs half as much. For reference, a steak contains 9u protein. @@ -97,6 +93,16 @@ return TRUE else return FALSE +/mob/living/carbon/human/proc/quickcheckuninjured() + if (getBruteLoss() || getFireLoss() || getHalLoss() || getToxLoss() || getOxyLoss() || getBrainLoss()) //fails if they have any of the main damage types + return FALSE + for (var/obj/item/organ/O in organs) //check their organs just in case they're being sneaky and somehow have organ damage but no health damage + if (O.damage) + return FALSE + for (var/obj/item/organ/O in internal_organs) //check their organs just in case they're being sneaky and somehow have organ damage but no health damage + if (O.damage) + return FALSE + return TRUE /mob/living/carbon/human/proc/hatch() set name = "Hatch" @@ -112,58 +118,54 @@ //Dead when hatching if(stat == DEAD) - //Check again for nutriment (necessary?) - if(hasnutriment()) - chimera_hatch() - adjustBrainLoss(10) // if they're reviving from dead, they come back with 10 brainloss on top of whatever's unhealed. - visible_message("

The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.

") //Bloody hell... - clear_alert("hatch") - return - - //Don't have nutriment to hatch! Or you somehow died in between completing your revive and hitting hatch. - else - to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.") - verbs -= /mob/living/carbon/human/proc/hatch - revive_ready = REVIVING_READY //reset their cooldown they can try again when they're given a kickstart - clear_alert("hatch") + //Reviving from ded takes extra nutrition - if it isn't provided from outside sources, it comes from you + if(!hasnutriment()) + nutrition=nutrition * 0.75 + chimera_hatch() + adjustBrainLoss(5) // if they're reviving from dead, they come back with 5 brainloss on top of whatever's unhealed. + visible_message("

The former corpse staggers to its feet, all its former wounds having vanished...

") //Bloody hell... + clear_alert("hatch") + return //Alive when hatching else chimera_hatch() - visible_message("

The dormant husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.

") //Bloody hell... + + visible_message("

[src] rises to \his feet.

") //Bloody hell... clear_alert("hatch") /mob/living/carbon/human/proc/chimera_hatch() verbs -= /mob/living/carbon/human/proc/hatch to_chat(src, "Your new body awakens, bursting free from your old skin.") - //Modify and record values (half nutrition and braindamage) - var/old_nutrition = nutrition * 0.5 - var/braindamage = (brainloss * 0.5) //Can only heal half brain damage. - + var/old_nutrition = nutrition + var/braindamage = min(5, max(0, (brainloss-1) * 0.5)) //brainloss is tricky to heal and might take a couple of goes to get rid of completely. + var/uninjured=quickcheckuninjured() //I did have special snowflake code, but this is easier. revive() mutations.Remove(HUSK) - nutrition = old_nutrition setBrainLoss(braindamage) - //Drop everything - for(var/obj/item/W in src) - drop_from_inventory(W) + if(!uninjured) + nutrition = old_nutrition * 0.5 + //Drop everything + for(var/obj/item/W in src) + drop_from_inventory(W) + //Visual effects + var/T = get_turf(src) + var/blood_color = species.blood_color + var/flesh_color = species.flesh_color + new /obj/effect/gibspawner/human/xenochimera(T, null, flesh_color, blood_color) + visible_message("

The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.

") //Bloody hell... + playsound(T, 'sound/effects/mob_effects/xenochimera/hatch.ogg', 50) + else //lower cost for doing a quick cosmetic revive + nutrition = old_nutrition * 0.9 //Unfreeze some things does_not_breathe = FALSE update_canmove() weakened = 2 - //Visual effects - var/T = get_turf(src) - var/blood_color = species.blood_color - var/flesh_color = species.flesh_color - new /obj/effect/gibspawner/human/xenochimera(T, null, flesh_color, blood_color) - - playsound(T, 'sound/effects/mob_effects/xenochimera/hatch.ogg', 50) - revive_ready = world.time + 10 MINUTES //set the cooldown CHOMPEdit: Reduced this to 10 minutes, you're playing with fire if you're reviving that often. /mob/living/carbon/human/proc/revivingreset() // keep this as a debug proc or potential future use diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index 7c30b9df50..26ced96f0a 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -9,7 +9,7 @@ name_plural = "Xenochimeras" icobase = 'icons/mob/human_races/r_xenochimera.dmi' deform = 'icons/mob/human_races/r_def_xenochimera.dmi' - unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/chimera, /datum/unarmed_attack/bite/sharp) darksight = 8 //critters with instincts to hide in the dark need to see in the dark - about as good as tajara. slowdown = -0.2 //scuttly, but not as scuttly as a tajara or a teshari. brute_mod = 0.8 //About as tanky to brute as a Unathi. They'll probably snap and go feral when hurt though. @@ -55,13 +55,13 @@ genders = list(MALE, FEMALE, PLURAL, NEUTER) - has_organ = list( //Same organ list as tajarans. + has_organ = list( //Same organ list as tajarans, except for their SPECIAL BRAIN. O_HEART = /obj/item/organ/internal/heart, O_LUNGS = /obj/item/organ/internal/lungs, O_VOICE = /obj/item/organ/internal/voicebox, O_LIVER = /obj/item/organ/internal/liver, O_KIDNEYS = /obj/item/organ/internal/kidneys, - O_BRAIN = /obj/item/organ/internal/brain, + O_BRAIN = /obj/item/organ/internal/brain/xenochimera, O_EYES = /obj/item/organ/internal/eyes, O_STOMACH = /obj/item/organ/internal/stomach, O_INTESTINE = /obj/item/organ/internal/intestine @@ -97,6 +97,9 @@ //Very low pressure damage if(adjusted_pressure2 <= 20) H.take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") + //they handle areas where they can't breathe better than most, but it still lowers their effective health as well as all the other bad stuff that comes with unbreathable environments + if(H.getOxyLoss() >= 50) + H.does_not_breathe = TRUE //Cold hurts and gives them pain messages, eventually weakening and paralysing, but doesn't damage or trigger feral. //NB: 'body_temperature' used here is the 'setpoint' species var @@ -105,17 +108,24 @@ H.shock_stage = min(H.shock_stage + (temp_diff/20), 160) // Divided by 20 is the same as previous numbers, but a full scale H.eye_blurry = max(5,H.eye_blurry) +/obj/item/organ/internal/brain/xenochimera + var/laststress = 0 /datum/species/xenochimera/proc/handle_feralness(var/mob/living/carbon/human/H) + //first, calculate how stressed the chimera is + var/laststress = 0 + var/obj/item/organ/internal/brain/xenochimera/B = H.internal_organs_by_name[O_BRAIN] + if(B) //if you don't have a chimera brain in a chimera body somehow, you don't get the feraless protection + laststress = B.laststress - //Low-ish nutrition has messages and eventually feral - var/hungry = H.nutrition <= 200 + //Low-ish nutrition has messages and can eventually cause feralness + var/hunger = max(0, 150 - H.nutrition) - //At 360 nutrition, this is 30 brute/burn, or 18 halloss. Capped at 50 brute/30 halloss - if they take THAT much, no amount of satiation will help them. Also they're fat. - var/shock = H.traumatic_shock > min(60, H.nutrition/10) + //pain makes feralness a thing + var/shock = 0.75*H.traumatic_shock - //Caffeinated xenochimera can become feral and have special messages - var/jittery = H.jitteriness >= 100 + //Caffeinated or otherwise overexcited xenochimera can become feral and have special messages + var/jittery = max(0, H.jitteriness - 100) //To reduce distant object references var/feral = H.feral @@ -124,11 +134,25 @@ var/danger = FALSE var/feral_state = FALSE - //Handle feral triggers and pre-feral messages - if(!feral && (hungry || shock || jittery)) + //finally, calculate the current stress total the chimera is operating under, and the cause + var/currentstress = (hunger + shock + jittery) + var/cause = "stress" + if(hunger > shock && hunger > jittery) + cause = "hunger" + else if (shock > hunger && shock > jittery) + cause = "shock" + else if (jittery > shock && jittery > hunger) + cause = "jittery" - // If they're hungry, give nag messages (when not bellied) - if(H.nutrition >= 100 && prob(0.5) && !isbelly(H.loc)) + //check to see if they go feral if they weren't before + if(!feral) + // if stress is below 15, no chance of snapping. Also if they weren't feral before, they won't suddenly become feral unless they get MORE stressed + if((currentstress > laststress) && prob(clamp(currentstress-15, 0, 100)) ) + go_feral(H, currentstress, cause) + feral = currentstress //update the local var + + //they didn't go feral, give 'em a chance of hunger messages + else if(H.nutrition <= 200 && prob(0.5) && !isbelly(H.loc)) switch(H.nutrition) if(150 to 200) to_chat(H,"You feel rather hungry. It might be a good idea to find some some food...") @@ -136,81 +160,26 @@ to_chat(H,"You feel like you're going to snap and give in to your hunger soon... It would be for the best to find some [pick("food","prey")] to eat...") danger = TRUE - // Going feral due to hunger - else if(H.nutrition < 100 && !isbelly(H.loc)) - to_chat(H,"Something in your mind flips, your instincts taking over, no longer able to fully comprehend your surroundings as survival becomes your primary concern - you must feed, survive, there is nothing else. Hunt. Eat. Hide. Repeat.") - log_and_message_admins("has gone feral due to hunger.", H) - feral = 5 - danger = TRUE - feral_state = TRUE - if(!H.stat) - H.emote("twitch") - - // If they're hurt, chance of snapping. - else if(shock) - - //If the majority of their shock is due to halloss, greater chance of snapping. - if(2.5*H.halloss >= H.traumatic_shock) - if(prob(min(10,(0.2 * H.traumatic_shock)))) - to_chat(H,"The pain! It stings! Got to get away! Your instincts take over, urging you to flee, to hide, to go to ground, get away from here...") - log_and_message_admins("has gone feral due to halloss.", H) - feral = 5 - danger = TRUE - feral_state = TRUE - if(!H.stat) - H.emote("twitch") - - //Majority due to other damage sources - else if(prob(min(10,(0.1 * H.traumatic_shock)))) - to_chat(H,"Your fight-or-flight response kicks in, your injuries too much to simply ignore - you need to flee, to hide, survive at all costs - or destroy whatever is threatening you.") - feral = 5 - danger = TRUE - feral_state = TRUE - log_and_message_admins("has gone feral due to injury.", H) - if(!H.stat) - H.emote("twitch") - - //No hungry or shock, but jittery - else if(jittery) - to_chat(H,"Suddenly, something flips - everything that moves is... potential prey. A plaything. This is great! Time to hunt!") - feral = 5 - danger = TRUE - feral_state = TRUE - log_and_message_admins("has gone feral due to jitteriness.", H) - if(!H.stat) - H.emote("twitch") + //now the check's done, update their brain so it remembers how stressed they were + B.laststress = currentstress // Handle being feral if(feral) //We're feral feral_state = TRUE - //Shock due to mostly halloss. More feral. - if(shock && 2.5*H.halloss >= H.traumatic_shock) + //If they're still stressed, they stay feral + if(currentstress >= 15) danger = TRUE - feral = max(feral, H.halloss) + feral = max(feral, currentstress) - //Shock due to mostly injury. More feral. - else if(shock) - danger = TRUE - feral = max(feral, H.traumatic_shock * 2) - - //Still jittery? More feral. - if(jittery) - danger = TRUE - feral = max(feral, H.jitteriness-100) - - //Still hungry? More feral. - if(H.feral + H.nutrition < 150) - danger = TRUE - feral++ else feral = max(0,--feral) - // Being in a belly or in the darkness decreases stress further. Helps mechanically reward players for staying in darkness + RP'ing appropriately. :9 - var/turf/T = get_turf(H) - if(feral && (isbelly(H.loc) || T.get_lumcount() <= 0.1)) - feral = max(0,--feral) + // Being in a belly or in the darkness decreases stress further. Helps mechanically reward players for staying in darkness + RP'ing appropriately. :9 + var/turf/T = get_turf(H) + if(feral && (isbelly(H.loc) || T.get_lumcount() <= 0.1)) + feral = max(0,--feral) //Set our real mob's var to our temp var H.feral = feral @@ -227,7 +196,7 @@ H.shock_stage = max(H.shock_stage-(feral/20), 0) //Handle light/dark areas - // var/turf/T = get_turf(H) // Moved up to before the in-belly/dark combined check, should still safely reach here just fine. + var/turf/T = get_turf(H) if(!T) update_xenochimera_hud(H, danger, feral_state) return //Nullspace @@ -257,15 +226,15 @@ // In the darkness, or "hidden", or in a belly. No need for custom scene-protection checks as it's just an occational infomessage. if(darkish || !isturf(H.loc) || isbelly(H.loc)) // Specific check for if in belly. !isturf should do this, but JUST in case. // If hurt, tell 'em to heal up - if (shock) + if (cause == "shock") to_chat(H,"This place seems safe, secure, hidden, a place to lick your wounds and recover...") //If hungry, nag them to go and find someone or something to eat. - else if(hungry) + else if(cause == "hunger") to_chat(H,"Secure in your hiding place, your hunger still gnaws at you. You need to catch some food...") //If jittery, etc - else if(jittery) + else if(cause == "jittery") to_chat(H,"sneakysneakyyesyesyescleverhidingfindthingsyessssss") //Otherwise, just tell them to keep hiding. @@ -284,16 +253,16 @@ // Someone/something nearby if(nearby.len) var/M = pick(nearby) - if(shock) + if(cause == "shock") to_chat(H,"You're hurt, in danger, exposed, and [M] looks to be a little too close for comfort...") - else if(hungry || jittery) + else to_chat(H,"Every movement, every flick, every sight and sound has your full attention, your hunting instincts on high alert... In fact, [M] looks extremely appetizing...") // Nobody around else - if(hungry) + if(cause == "hunger") to_chat(H,"Confusing sights and sounds and smells surround you - scary and disorienting it may be, but the drive to hunt, to feed, to survive, compels you.") - else if(jittery) + else if(cause == "jittery") to_chat(H,"yesyesyesyesyesyesgetthethingGETTHETHINGfindfoodsfindpreypounceyesyesyes") else to_chat(H,"Confusing sights and sounds and smells surround you, this place is wrong, confusing, frightening. You need to hide, go to ground...") @@ -301,6 +270,37 @@ // HUD update time update_xenochimera_hud(H, danger, feral_state) +/datum/species/xenochimera/proc/go_feral(var/mob/living/carbon/human/H, var/stress, var/cause) + // Going feral due to hunger + if(cause == "hunger") + to_chat(H,"Something in your mind flips, your instincts taking over, no longer able to fully comprehend your surroundings as survival becomes your primary concern - you must feed, survive, there is nothing else. Hunt. Eat. Hide. Repeat.") + log_and_message_admins("has gone feral due to hunger.", H) + + // If they're hurt, chance of snapping. + else if(cause == "shock") + //If the majority of their shock is due to halloss, give them a different message (3x multiplier on check as halloss is 2x - meaning t_s must be at least 3x for other damage sources to be the greater part) + if(3*H.halloss >= H.traumatic_shock) + to_chat(H,"The pain! It stings! Got to get away! Your instincts take over, urging you to flee, to hide, to go to ground, get away from here...") + log_and_message_admins("has gone feral due to halloss.", H) + + //Majority due to other damage sources + else + to_chat(H,"Your fight-or-flight response kicks in, your injuries too much to simply ignore - you need to flee, to hide, survive at all costs - or destroy whatever is threatening you.") + log_and_message_admins("has gone feral due to injury.", H) + + //No hungry or shock, but jittery + else if(cause == "jittery") + to_chat(H,"Suddenly, something flips - everything that moves is... potential prey. A plaything. This is great! Time to hunt!") + log_and_message_admins("has gone feral due to jitteriness.", H) + + else // catch-all just in case something weird happens + to_chat(H,"The stress of your situation is too much for you, and your survival instincts kick in!") + log_and_message_admins("has gone feral for unknown reasons.", H) + //finally, set their feral var + H.feral = stress + if(!H.stat) + H.emote("twitch") + /datum/species/xenochimera/get_race_key() var/datum/species/real = GLOB.all_species[base_species] return real.race_key diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm index 116fd369de..345216ef10 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm @@ -562,3 +562,60 @@ "You feel uncomfortably warm.", "Your chitin feels hot." ) + +/datum/species/altevian + name = SPECIES_ALTEVIAN + name_plural = "Altevians" + icobase = 'icons/mob/human_races/r_altevian.dmi' + deform = 'icons/mob/human_races/r_def_altevian.dmi' + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) + language = LANGUAGE_TAVAN + num_alternate_languages = 3 + secondary_langs = list(LANGUAGE_TAVAN) + name_language = null + color_mult = 1 + inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) + + min_age = 18 + max_age = 80 + + blurb = "The Altevian are a species of tall, rodent humanoids that are akin to rats for their features. \ + The Altevian, unlike most species, do not have a home planet, nor system, adopting a fully nomadic lifestyle \ + for their survival across the stars. Instead, they have opted to live in massive super capital-class colony-ships \ + with a flagship as their place they would call home." + + wikilink="https://wiki.vore-station.net/Altevian" + + catalogue_data = list(/datum/category_item/catalogue/fauna/altevian) + + spawn_flags = SPECIES_CAN_JOIN + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + + flesh_color = "#AFA59E" + base_color = "#777777" + + genders = list(MALE, FEMALE, PLURAL, NEUTER) + + burn_mod = 1.15 + hunger_factor = 0.04 + can_zero_g_move = TRUE + + heat_discomfort_strings = list( + "Your fur prickles in the heat.", + "You feel uncomfortably warm.", + "Your overheated skin itches." + ) + + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index fd10b3140a..35e9d46d0c 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -150,8 +150,8 @@ YW change end */ desc = "Makes you unable to gain nutrition from anything but blood. To compenstate, you get fangs that can be used to drain blood from prey." cost = 0 custom_only = FALSE - var_changes = list("organic_food_coeff" = 0) - excludes = list(/datum/trait/neutral/bloodsucker_freeform,/datum/trait/neutral/bloodsucker_freeform) //YW EDIT: /datum/trait/neutral/bloodsucker_freeform + var_changes = list("organic_food_coeff" = 0, "bloodsucker" = TRUE) + excludes = list(/datum/trait/positive/bloodsucker_plus) //YW EDIT: /datum/trait/positive/bloodsucker_plus /datum/trait/neutral/bloodsucker/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) @@ -162,6 +162,7 @@ YW change end */ desc = "You get fangs that can be used to drain blood from prey." cost = 0 custom_only = FALSE + var_changes = list("bloodsucker" = TRUE) excludes = list(/datum/trait/neutral/bloodsucker) */ /datum/trait/neutral/bloodsucker_freeform/apply(var/datum/species/S,var/mob/living/carbon/human/H) @@ -387,7 +388,7 @@ YW change end */ custom_only = FALSE var_changes = list("spice_mod" = 0.25) // 25% as effective if spice_mod is set to 1. If it's not 1 in species.dm, update this! -/*YW CHANGE START: Commented out because we got our own variants +/*YW CHANGE START: Commented out because we got our own variants // Alcohol Traits Start Here, from negative to positive. /datum/trait/neutral/alcohol_intolerance_advanced name = "Liver of Air" @@ -607,3 +608,45 @@ YW CHANGE STOP*/ /datum/trait/neutral/vertical_nom/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/proc/vertical_nom + +/datum/trait/neutral/micro_size_down + name = "Light Frame" + desc = "You are considered smaller than you are for micro interactions." + cost = 0 + custom_only = FALSE + var_changes = list("micro_size_mod" = -0.15) + +/datum/trait/neutral/micro_size_up + name = "Heavy Frame" + desc = "You are considered bigger than you are for micro interactions." + cost = 0 + custom_only = FALSE + var_changes = list("micro_size_mod" = 0.15) + +/datum/trait/neutral/digestion_value_up + name = "Highly Filling" + desc = "You provide notably more nutrition to anyone who makes a meal of you." + cost = 0 + custom_only = FALSE + var_changes = list("digestion_nutrition_modifier" = 2) + +/datum/trait/neutral/digestion_value_up_plus + name = "Extremely Filling" + desc = "You provide a lot more nutrition to anyone who makes a meal of you." + cost = 0 + custom_only = FALSE + var_changes = list("digestion_nutrition_modifier" = 3) + +/datum/trait/neutral/digestion_value_down + name = "Slightly Filling" + desc = "You provide notably less nutrition to anyone who makes a meal of you." + cost = 0 + custom_only = FALSE + var_changes = list("digestion_nutrition_modifier" = 0.5) + +/datum/trait/neutral/digestion_value_down_plus + name = "Barely Filling" + desc = "You provide a lot less nutrition to anyone who makes a meal of you." + cost = 0 + custom_only = FALSE + var_changes = list("digestion_nutrition_modifier" = 0.25) diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm index 30622e3184..fff6638ff1 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm @@ -164,13 +164,13 @@ desc = "You've drunk so much that most booze doesn't even faze you. It takes something like a Pan-Galactic or a pint of Deathbell for you to even get slightly buzzed. You may wish to note this down in your medical records." cost = 2 var_changes = list("alcohol_mod" = 0.25) - + /datum/trait/positive/pain_tolerance_basic name = "Pain Tolerant" desc = "You're a little more resistant to pain than most, and experience 10% less pain from from all sources." cost = 1 var_changes = list("pain_mod" = 0.9) - + /datum/trait/positive/pain_tolerance_advanced name = "Pain Tolerance, High " desc = "You are noticeably more resistant to pain than most, and experience 20% less pain from all sources." @@ -238,7 +238,7 @@ name = "Evolved Bloodsucker" desc = "Makes you able to gain nutrition by draining blood as well as eating food. To compensate, you get fangs that can be used to drain blood from prey." cost = 1 - var_changes = list("organic_food_coeff" = 0.5) // Hopefully this works??? + var_changes = list("organic_food_coeff" = 0.5, "bloodsucker" = TRUE) excludes = list(/datum/trait/neutral/bloodsucker) /datum/trait/positive/bloodsucker_plus/apply(var/datum/species/S,var/mob/living/carbon/human/H) @@ -261,7 +261,7 @@ var_changes = list("cold_level_1" = 200, "cold_level_2" = 150, "cold_level_3" = 90, "breath_cold_level_1" = 180, "breath_cold_level_2" = 100, "breath_cold_level_3" = 60, "cold_discomfort_level" = 210, "heat_level_1" = 305, "heat_level_2" = 360, "heat_level_3" = 700, "breath_heat_level_1" = 345, "breath_heat_level_2" = 380, "breath_heat_level_3" = 780, "heat_discomfort_level" = 295) excludes = list(/datum/trait/positive/hotadapt) can_take = ORGANICS - + /datum/trait/positive/hotadapt name = "Heat-Adapted" desc = "You are able to withstand much hotter temperatures than other species, and can even be comfortable in extremely hot environments. You are also more vulnerable to cold environments as a consequence of these adaptations." @@ -321,4 +321,4 @@ cost = 2 var_changes = list("gun_accuracy_mod" = 25) custom_only = FALSE - varchange_type = TRAIT_VARCHANGE_MORE_BETTER \ No newline at end of file + varchange_type = TRAIT_VARCHANGE_MORE_BETTER diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 3c513052cf..a85af45962 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -66,7 +66,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define MOB_DAM_LAYER 4 //Injury overlay sprites like open wounds #define SURGERY_LAYER 5 //Overlays for open surgical sites #define UNDERWEAR_LAYER 6 //Underwear/bras/etc -#define TAIL_SOUTH_LAYER 7 //Tail as viewed from the south +#define TAIL_LOWER_LAYER 7 //Tail as viewed from the south #define SHOES_LAYER_ALT 8 //Shoe-slot item (when set to be under uniform via verb) #define UNIFORM_LAYER 9 //Uniform-slot item #define ID_LAYER 10 //ID-slot item @@ -74,7 +74,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define GLOVES_LAYER 12 //Glove-slot item #define BELT_LAYER 13 //Belt-slot item #define SUIT_LAYER 14 //Suit-slot item -#define TAIL_NORTH_LAYER 15 //Some species have tails to render (As viewed from the N, E, or W) +#define TAIL_UPPER_LAYER 15 //Some species have tails to render (As viewed from the N, E, or W) #define GLASSES_LAYER 16 //Eye-slot item #define BELT_LAYER_ALT 17 //Belt-slot item (when set to be above suit via verb) #define SUIT_STORE_LAYER 18 //Suit storage-slot item @@ -90,7 +90,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define L_HAND_LAYER 28 //Left-hand item #define R_HAND_LAYER 29 //Right-hand item #define WING_LAYER 30 //Wings or protrusions over the suit. -#define TAIL_NORTH_LAYER_ALT 31 //Modified tail-sprite layer. Tend to be larger. +#define TAIL_UPPER_LAYER_ALT 31 //Modified tail-sprite layer. Tend to be larger. #define MODIFIER_EFFECTS_LAYER 32 //Effects drawn by modifiers #define FIRE_LAYER 33 //'Mob on fire' overlay layer #define MOB_WATER_LAYER 34 //'Mob submerged' overlay layer @@ -98,8 +98,6 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define TOTAL_LAYERS 35 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. ////////////////////////////////// -#define GET_TAIL_LAYER (dir == SOUTH ? TAIL_SOUTH_LAYER : TAIL_NORTH_LAYER) - /mob/living/carbon/human var/list/overlays_standing[TOTAL_LAYERS] var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed @@ -146,6 +144,17 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() var/matrix/M = matrix() var/anim_time = 3 + // VOREStation Edit Start: Porting Taur Loafing + if(tail_style?.can_loaf && resting) // Only call these if we're resting? + update_tail_showing() + return // No need to do the rest, we return early + /* // Commenting this out as sleeping is fucky + if(tail_style?.can_loaf && lying && sleeping) // If we're put under by anesthetic or fainting + update_tail_showing() + // return // No need to do the rest, we return early + */ + // VOREStation Edit End + //Due to some involuntary means, you're laying now if(lying && !resting && !sleeping) anim_time = 1 //Thud @@ -165,6 +174,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() else M.Scale(desired_scale_x, desired_scale_y)//VOREStation Edit M.Translate(0, (vis_height/2)*(desired_scale_y-1)) //VOREStation edit + if(tail_style?.can_loaf) // VOREStation Edit: Taur Loafing + update_tail_showing() // VOREStation Edit: Taur Loafing layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters animate(src, transform = M, time = anim_time) @@ -839,7 +850,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() suit_sprite = INV_SUIT_DEF_ICON var/icon/c_mask = null - var/tail_is_rendered = (overlays_standing[TAIL_NORTH_LAYER] || overlays_standing[TAIL_NORTH_LAYER_ALT] || overlays_standing[TAIL_SOUTH_LAYER]) + var/tail_is_rendered = (overlays_standing[TAIL_UPPER_LAYER] || overlays_standing[TAIL_UPPER_LAYER_ALT] || overlays_standing[TAIL_LOWER_LAYER]) var/valid_clip_mask = tail_style?.clip_mask if(tail_is_rendered && valid_clip_mask && !(istype(suit) && suit.taurized)) //Clip the lower half of the suit off using the tail's clip mask for taurs since taur bodies aren't hidden. @@ -952,19 +963,29 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() apply_layer(L_HAND_LAYER) +/mob/living/carbon/human/proc/get_tail_layer() + var/list/lower_layer_dirs = list(SOUTH) + if(tail_style) + lower_layer_dirs = tail_style.lower_layer_dirs.Copy() + + if(dir in lower_layer_dirs) + return TAIL_LOWER_LAYER + else + return TAIL_UPPER_LAYER + /mob/living/carbon/human/proc/update_tail_showing() if(QDESTROYING(src)) return - remove_layer(TAIL_NORTH_LAYER) - remove_layer(TAIL_NORTH_LAYER_ALT) - remove_layer(TAIL_SOUTH_LAYER) + remove_layer(TAIL_UPPER_LAYER) + remove_layer(TAIL_UPPER_LAYER_ALT) + remove_layer(TAIL_LOWER_LAYER) - var/tail_layer = GET_TAIL_LAYER + var/tail_layer = get_tail_layer() if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_NORTH_LAYER // Use default, let clip mask handle everything - if(tail_alt && tail_layer == TAIL_NORTH_LAYER) - tail_layer = TAIL_NORTH_LAYER_ALT + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything + if(tail_alt && tail_layer == TAIL_UPPER_LAYER) + tail_layer = TAIL_UPPER_LAYER_ALT var/image/tail_image = get_tail_image() if(tail_image) @@ -1003,16 +1024,16 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() return tail_icon /mob/living/carbon/human/proc/set_tail_state(var/t_state) - var/tail_layer = GET_TAIL_LAYER + var/tail_layer = get_tail_layer() if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_NORTH_LAYER // Use default, let clip mask handle everything - if(tail_alt && tail_layer == TAIL_NORTH_LAYER) - tail_layer = TAIL_NORTH_LAYER_ALT + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything + if(tail_alt && tail_layer == TAIL_UPPER_LAYER) + tail_layer = TAIL_UPPER_LAYER_ALT var/image/tail_overlay = overlays_standing[tail_layer] - remove_layer(TAIL_NORTH_LAYER) - remove_layer(TAIL_NORTH_LAYER_ALT) - remove_layer(TAIL_SOUTH_LAYER) + remove_layer(TAIL_UPPER_LAYER) + remove_layer(TAIL_UPPER_LAYER_ALT) + remove_layer(TAIL_LOWER_LAYER) if(tail_overlay) overlays_standing[tail_layer] = tail_overlay @@ -1030,9 +1051,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() return var/t_state = "[species.get_tail(src)]_once" - var/tail_layer = GET_TAIL_LAYER + var/tail_layer = get_tail_layer() if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_NORTH_LAYER // Use default, let clip mask handle everything + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything var/image/tail_overlay = overlays_standing[tail_layer] if(tail_overlay && tail_overlay.icon_state == t_state) @@ -1225,11 +1246,12 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() //If you have a custom tail selected if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !istaurtail(tail_style))) - var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state) + var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style.can_loaf && resting) ? "[tail_style.icon_state]_loaf" : (wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)) // VOREStation Edit: Taur Loafing + pixel_y = (tail_style.can_loaf && resting) ? -tail_style.loaf_offset : 0 //move player down, then taur up, to fit the overlays correctly // VOREStation Edit: Taur Loafing if(tail_style.do_colouration) tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode) if(tail_style.extra_overlay) - var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay) + var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = (tail_style?.can_loaf && resting) ? "[tail_style.extra_overlay]_loaf" : tail_style.extra_overlay) // VOREStation Edit: Taur Loafing if(wagging && tail_style.ani_state) overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w) overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode) @@ -1259,6 +1281,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(istaurtail(tail_style)) var/datum/sprite_accessory/tail/taur/taurtype = tail_style working.pixel_x = -16 + working.pixel_y = (tail_style.can_loaf && resting) ? tail_style.loaf_offset : 0 // VOREStation Edit: Taur Loafing if(taurtype.can_ride && !riding_datum) riding_datum = new /datum/riding/taur(src) verbs |= /mob/living/carbon/human/proc/taur_mount @@ -1292,9 +1315,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #undef GLOVES_LAYER #undef BELT_LAYER #undef SUIT_LAYER -#undef TAIL_NORTH_LAYER -#undef TAIL_SOUTH_LAYER -#undef GET_TAIL_LAYER +#undef TAIL_UPPER_LAYER +#undef TAIL_LOWER_LAYER #undef GLASSES_LAYER #undef BELT_LAYER_ALT #undef SUIT_STORE_LAYER diff --git a/code/modules/mob/living/living_vr.dm b/code/modules/mob/living/living_vr.dm index 9689953ebb..ad35515ef1 100644 --- a/code/modules/mob/living/living_vr.dm +++ b/code/modules/mob/living/living_vr.dm @@ -33,4 +33,76 @@ to_chat(usr, "OOC notes updated.") log_admin("[key_name(usr)] updated their OOC notes mid-round.") +/mob/living/verb/set_voice_freq() + set name = "Set Voice Frequency" + set desc = "Sets your voice frequency to be higher or lower pitched!" + set category = "OOC" + var/list/preset_voice_freqs = list("high" = MAX_VOICE_FREQ, "middle-high" = 56250, "middle" = 425000, "middle-low"= 28750, "low" = MIN_VOICE_FREQ, "custom" = 1, "random" = 0) + var/choice = tgui_input_list(src, "What would you like to set your voice frequency to?", "Voice Frequency", preset_voice_freqs) + if(!choice) + return + choice = preset_voice_freqs[choice] + if(choice == 0) + voice_freq = choice + return + else if(choice == 1) + choice = tgui_input_number(src, "Choose your character's voice frequency, ranging from [MIN_VOICE_FREQ] to [MAX_VOICE_FREQ]", "Custom Voice Frequency", null, MAX_VOICE_FREQ, MIN_VOICE_FREQ, round_value = TRUE) + else if(choice > MAX_VOICE_FREQ) + choice = MAX_VOICE_FREQ + else if(choice < MIN_VOICE_FREQ) + choice = MIN_VOICE_FREQ + voice_freq = choice + +/mob/living/verb/set_voice_type() + set name = "Set Voice Type" + set desc = "Sets your voice style!" + set category = "OOC" + + var/list/possible_voice_types = list( + "beep-boop", + "goon speak 1", + "goon speak 2", + "goon speak 3", + "goon speak 4", + "goon speak blub", + "goon speak bottalk", + "goon speak buwoo", + "goon speak cow", + "goon speak lizard", + "goon speak pug", + "goon speak pugg", + "goon speak roach", + "goon speak skelly") + var/choice = tgui_input_list(usr, "Which set of sounds would you like to use for your character's speech sounds?", "Voice Sounds", possible_voice_types) + if(!choice) + voice_sounds_list = talk_sound + switch(choice) + if("beep-boop") + voice_sounds_list = talk_sound + if("goon speak 1") + voice_sounds_list = goon_speak_one_sound + if("goon speak 2") + voice_sounds_list = goon_speak_two_sound + if("goon speak 3") + voice_sounds_list = goon_speak_three_sound + if("goon speak 4") + voice_sounds_list = goon_speak_four_sound + if("goon speak blub") + voice_sounds_list = goon_speak_blub_sound + if("goon speak bottalk") + voice_sounds_list = goon_speak_bottalk_sound + if("goon speak buwoo") + voice_sounds_list = goon_speak_buwoo_sound + if("goon speak cow") + voice_sounds_list = goon_speak_cow_sound + if("goon speak lizard") + voice_sounds_list = goon_speak_lizard_sound + if("goon speak pug") + voice_sounds_list = goon_speak_pug_sound + if("goon speak pugg") + voice_sounds_list = goon_speak_pugg_sound + if("goon speak roach") + voice_sounds_list = goon_speak_roach_sound + if("goon speak skelly") + voice_sounds_list = goon_speak_skelly_sound diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 5d2836779b..d6aec7d322 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -13,16 +13,52 @@ to_chat(src,"Mob AI disabled while you are controlling the mob.") AddComponent(/datum/component/character_setup) - + // Vore stuff verbs |= /mob/living/proc/escapeOOC verbs |= /mob/living/proc/lick verbs |= /mob/living/proc/smell verbs |= /mob/living/proc/switch_scaling - + if(!no_vore) verbs |= /mob/living/proc/vorebelly_printout if(!vorePanel) AddComponent(/datum/component/vore_panel) + //VOREStation Add Start + if(!voice_sounds_list.len || !voice_sounds_list) + if(client.prefs.voice_sound) + var/prefsound = client.prefs.voice_sound + switch(prefsound) + if("beep-boop") + voice_sounds_list = talk_sound + if("goon speak 1") + voice_sounds_list = goon_speak_one_sound + if("goon speak 2") + voice_sounds_list = goon_speak_two_sound + if("goon speak 3") + voice_sounds_list = goon_speak_three_sound + if("goon speak 4") + voice_sounds_list = goon_speak_four_sound + if("goon speak blub") + voice_sounds_list = goon_speak_blub_sound + if("goon speak bottalk") + voice_sounds_list = goon_speak_bottalk_sound + if("goon speak buwoo") + voice_sounds_list = goon_speak_buwoo_sound + if("goon speak cow") + voice_sounds_list = goon_speak_cow_sound + if("goon speak lizard") + voice_sounds_list = goon_speak_lizard_sound + if("goon speak pug") + voice_sounds_list = goon_speak_pug_sound + if("goon speak pugg") + voice_sounds_list = goon_speak_pugg_sound + if("goon speak roach") + voice_sounds_list = goon_speak_roach_sound + if("goon speak skelly") + voice_sounds_list = goon_speak_skelly_sound + else + voice_sounds_list = talk_sound + //VOREStation Add End return . diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 7c5af248ff..8ec168f39d 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -18,6 +18,7 @@ var/list/department_radio_keys = list( ":p" = "AI Private", ".p" = "AI Private", ":y" = "Explorer", ".y" = "Explorer", ":a" = "Talon", ".a" = "Talon", //VOREStation Add, + ":g" = "Casino", ".g" = "Casino", ":R" = "right ear", ".R" = "right ear", ":L" = "left ear", ".L" = "left ear", @@ -37,6 +38,7 @@ var/list/department_radio_keys = list( ":P" = "AI Private", ".P" = "AI Private", ":Y" = "Explorer", ".Y" = "Explorer", ":A" = "Talon", ".A" = "Talon", //VOREStation Add, + ":G" = "Casino", ".G" = "Casino", // Cyrillic characters on the same keys on the Russian QWERTY (phonetic) layout ":к" = "right ear", ".к" = "right ear", @@ -57,7 +59,8 @@ var/list/department_radio_keys = list( ":м" = "Service", ".м" = "Service", ":з" = "AI Private", ".з" = "AI Private", ":н" = "Explorer", ".н" = "Explorer", - ":ф" = "Talon", ".ф" = "Talon" //VOREStation Add + ":ф" = "Talon", ".ф" = "Talon", //VOREStation Add + ":п" = "Casino", ".п" = "Casino", ) @@ -259,6 +262,9 @@ var/list/channel_to_radio_key = new //Default range and italics, may be overridden past here var/message_range = world.view var/italics = 0 + var/do_sound = TRUE + if(!voice_sounds_list || !voice_sounds_list.len) + do_sound = FALSE //Speaking into radios if(used_radios.len) @@ -302,6 +308,7 @@ var/list/channel_to_radio_key = new for(var/datum/multilingual_say_piece/S in message_pieces) if((S.speaking.flags & NONVERBAL) || (S.speaking.flags & INAUDIBLE)) custom_emote(1, "[pick(S.speaking.signlang_verb)].") + do_sound = FALSE //These will contain the main receivers of the message var/list/listening = list() @@ -398,12 +405,20 @@ var/list/channel_to_radio_key = new C.images -= I qdel(I) + var/ourfreq = null + if(voice_freq > 0 ) + ourfreq = voice_freq //Log the message to file if(message_mode) message = "([message_mode == "headset" ? "Common" : capitalize(message_mode)]) [message]" //Adds radio keys used if available if(whispering) + if(do_sound && message) + playsound(T, pick(voice_sounds_list), 25, TRUE, extrarange = -6, falloff = 1 , is_global = TRUE, frequency = ourfreq, ignore_walls = FALSE, preference = /datum/client_preference/whisper_sounds) + log_whisper(message, src) else + if(do_sound && message) + playsound(T, pick(voice_sounds_list), 75, TRUE, falloff = 1 , is_global = TRUE, frequency = ourfreq, ignore_walls = FALSE, preference = /datum/client_preference/say_sounds) log_say(message, src) return 1 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ca5319313f..a2ce47c2be 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -161,7 +161,6 @@ var/list/ai_verbs_default = list( add_language(LANGUAGE_SIIK, 1) add_language(LANGUAGE_AKHANI, 1) add_language(LANGUAGE_SKRELLIAN, 1) - add_language(LANGUAGE_SKRELLIANFAR, 0) add_language(LANGUAGE_TRADEBAND, 1) add_language(LANGUAGE_GUTTER, 1) add_language(LANGUAGE_EAL, 1) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 039c64e663..94595c9516 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -145,6 +145,7 @@ // Vorestation Edit: Meta Info for pAI if (client.prefs) ooc_notes = client.prefs.metadata + src << sound('sound/effects/pai_login.ogg', volume = 75) //VOREStation Add // this function shows the information about being silenced as a pAI in the Status panel /mob/living/silicon/pai/proc/show_silenced() diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm index d8594fd5fc..139fc3831c 100644 --- a/code/modules/mob/living/silicon/pai/software_modules.dm +++ b/code/modules/mob/living/silicon/pai/software_modules.dm @@ -140,7 +140,7 @@ /datum/pai_software/med_records/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + var/list/records = list() for(var/datum/data/record/general in sortRecord(data_core.general)) var/list/record = list() @@ -196,7 +196,7 @@ /datum/pai_software/sec_records/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + var/list/records = list() for(var/datum/data/record/general in sortRecord(data_core.general)) var/list/record = list() @@ -404,7 +404,6 @@ user.add_language(LANGUAGE_ZADDAT) user.add_language(LANGUAGE_SCHECHI) user.add_language(LANGUAGE_DRUDAKAR) - user.add_language(LANGUAGE_SLAVIC) user.add_language(LANGUAGE_BIRDSONG) user.add_language(LANGUAGE_SAGARU) user.add_language(LANGUAGE_CANILUNZT) @@ -413,24 +412,15 @@ user.add_language(LANGUAGE_ENOCHIAN) user.add_language(LANGUAGE_VESPINAE) user.add_language(LANGUAGE_SPACER) - user.add_language(LANGUAGE_CLOWNISH) user.add_language(LANGUAGE_TAVAN) user.add_language(LANGUAGE_ECHOSONG) - user.add_language(LANGUAGE_CHIMPANZEE) - user.add_language(LANGUAGE_NEAERA) - user.add_language(LANGUAGE_STOK) - user.add_language(LANGUAGE_FARWA) user.add_language(LANGUAGE_ROOTLOCAL) user.add_language(LANGUAGE_VOX) - user.add_language(LANGUAGE_SKRELLIANFAR) user.add_language(LANGUAGE_MINBUS) user.add_language(LANGUAGE_ALAI) user.add_language(LANGUAGE_PROMETHEAN) user.add_language(LANGUAGE_GIBBERISH) - user.add_language("Mouse") - user.add_language("Cat") - user.add_language("Bird") - user.add_language("Dog") + user.add_language("Animal") user.add_language("Teppi") else user.remove_language(LANGUAGE_UNATHI) @@ -440,7 +430,6 @@ user.remove_language(LANGUAGE_ZADDAT) user.remove_language(LANGUAGE_SCHECHI) user.remove_language(LANGUAGE_DRUDAKAR) - user.remove_language(LANGUAGE_SLAVIC) user.remove_language(LANGUAGE_BIRDSONG) user.remove_language(LANGUAGE_SAGARU) user.remove_language(LANGUAGE_CANILUNZT) @@ -449,24 +438,15 @@ user.remove_language(LANGUAGE_ENOCHIAN) user.remove_language(LANGUAGE_VESPINAE) user.remove_language(LANGUAGE_SPACER) - user.remove_language(LANGUAGE_CLOWNISH) user.remove_language(LANGUAGE_TAVAN) user.remove_language(LANGUAGE_ECHOSONG) - user.remove_language(LANGUAGE_CHIMPANZEE) - user.remove_language(LANGUAGE_NEAERA) - user.remove_language(LANGUAGE_STOK) - user.remove_language(LANGUAGE_FARWA) user.remove_language(LANGUAGE_ROOTLOCAL) user.remove_language(LANGUAGE_VOX) - user.remove_language(LANGUAGE_SKRELLIANFAR) user.remove_language(LANGUAGE_MINBUS) user.remove_language(LANGUAGE_ALAI) user.remove_language(LANGUAGE_PROMETHEAN) user.remove_language(LANGUAGE_GIBBERISH) - user.remove_language("Mouse") - user.remove_language("Cat") - user.remove_language("Bird") - user.remove_language("Dog") + user.remove_language("Animal") user.remove_language("Teppi") /datum/pai_software/translator/is_active(mob/living/silicon/pai/user) @@ -486,7 +466,7 @@ /datum/pai_software/signaller/tgui_data(mob/living/silicon/pai/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + var/obj/item/radio/integrated/signal/R = user.sradio data["frequency"] = R.frequency @@ -509,7 +489,7 @@ spawn(0) R.send_signal("ACTIVATE") for(var/mob/O in hearers(1, R.loc)) - O.show_message("[bicon(R)] *beep* *beep*", 3, "*beep* *beep*", 2) + O.show_message("\icon[R][bicon(R)] *beep* *beep*", 3, "*beep* *beep*", 2) if("freq") var/frequency = unformat_frequency(params["freq"]) frequency = sanitize_frequency(frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm index 24426b2710..e832207bb9 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_modules_vr.dm @@ -66,12 +66,12 @@ var/agony = 60 // Copied from stun batons var/stun = 0 // ... same - + var/obj/item/organ/external/affecting = null if(ishuman(target)) var/mob/living/carbon/human/H = target affecting = H.get_organ(hit_zone) - + if(user.a_intent == I_HURT) // Parent handles messages . = ..() @@ -91,7 +91,7 @@ var/mob/living/silicon/robot/R = loc if(R.cell?.use(charge_cost) == charge_cost) stunning = TRUE - + if(stunning) target.stun_effect_act(stun, agony, hit_zone, src) msg_admin_attack("[key_name(user)] stunned [key_name(target)] with the [src].") @@ -216,6 +216,11 @@ desc = "An advanced chemical synthesizer and injection system utilizing carrier's reserves." reagent_ids = list("tricordrazine", "inaprovaline", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin") +/obj/item/weapon/reagent_containers/borghypo/hound/trauma + name = "Hound hypospray" + desc = "An advanced chemical synthesizer and injection system utilizing carrier's reserves." + reagent_ids = list("inaprovaline", "dexalin", "bicaridine", "anti_toxin", "spaceacillin", "paracetamol") + //Tongue stuff /obj/item/device/dogborg/tongue diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index 97af632c94..8af6fddc8f 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -42,11 +42,13 @@ var/digest_multiplier = 1 var/recycles = FALSE var/medsensor = TRUE //Does belly sprite come with patient ok/dead light? + var/obj/item/device/healthanalyzer/med_analyzer = null /obj/item/device/dogborg/sleeper/New() ..() flags |= NOBLUDGEON //No more attack messages files = new /datum/research/techonly(src) + med_analyzer = new /obj/item/device/healthanalyzer /obj/item/device/dogborg/sleeper/Destroy() go_out() @@ -216,6 +218,8 @@ dat += "Eject port: [eject_port]" if(!cleaning) dat += "Self-Clean" + if(medsensor) + dat += "Analyze Patient" else dat += "Self-Clean" if(delivery) @@ -336,6 +340,8 @@ if(cleaning) sleeperUI(usr) return + if(href_list["analyze"]) //DO HEALTH ANALYZER STUFF HERE. + med_analyzer.scan_mob(patient,hound) if(href_list["port"]) switch(eject_port) if("ingestion") @@ -548,7 +554,8 @@ var/actual_burn = T.getFireLoss() - old_burn var/damage_gain = actual_brute + actual_burn drain(-25 * damage_gain) //25*total loss as with voreorgan stats. - water.add_charge(damage_gain) + if(water) + water.add_charge(damage_gain) if(T.stat == DEAD) if(ishuman(T)) message_admins("[key_name(hound)] has digested [key_name(T)] as a dogborg. ([hound ? "JMP" : "null"])") @@ -585,10 +592,12 @@ if(ishuman(T)) var/mob/living/carbon/human/Prey = T volume = (Prey.bloodstr.total_volume + Prey.ingested.total_volume + Prey.touching.total_volume + Prey.weight) * Prey.size_multiplier - water.add_charge(volume) + if(water) + water.add_charge(volume) if(T.reagents) volume = T.reagents.total_volume - water.add_charge(volume) + if(water) + water.add_charge(volume) if(patient == T) patient_laststat = null patient = null @@ -612,7 +621,7 @@ for(var/tech in tech_item.origin_tech) files.UpdateTech(tech, tech_item.origin_tech[tech]) synced = FALSE - if(volume) + if(volume && water) water.add_charge(volume) if(recycles && T.matter) for(var/material in T.matter) @@ -620,14 +629,14 @@ if(istype(T,/obj/item/stack)) var/obj/item/stack/stack = T total_material *= stack.get_amount() - if(material == MAT_STEEL) + if(material == MAT_STEEL && metal) metal.add_charge(total_material) - if(material == "glass") + if(material == "glass" && glass) glass.add_charge(total_material) if(decompiler) - if(material == "plastic") + if(material == "plastic" && plastic) plastic.add_charge(total_material) - if(material == "wood") + if(material == "wood" && wood) wood.add_charge(total_material) drain(-50 * digested) else if(istype(target,/obj/effect/decal/remains)) @@ -724,4 +733,11 @@ icon_state = "sleeperert" injection_chems = list("inaprovaline", "paracetamol") // short list +/obj/item/device/dogborg/sleeper/compactor/trauma //Trauma borg belly + name = "Recovery Belly" + desc = "A downgraded model of the medihound sleeper." + icon_state = "sleeper" + injection_chems = list("inaprovaline", "dexalin", "bicaridine", "anti_toxin", "spaceacillin", "paracetamol") + max_item_count = 1 + #undef SLEEPER_INJECT_COST diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index 9972a80b92..57309dd427 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -125,7 +125,6 @@ /obj/item/slimepotion, /obj/item/slime_extract, /obj/item/weapon/reagent_containers/food/snacks/monkeycube - ) /obj/item/weapon/gripper/circuit @@ -180,7 +179,8 @@ desc = "A specialized grasping tool used to preserve and manipulate organic material." can_hold = list( - /obj/item/organ + /obj/item/organ, + /obj/item/device/nif //NIFs can be slapped in during surgery ) /obj/item/weapon/gripper/no_use/organ/Entered(var/atom/movable/AM) @@ -208,7 +208,8 @@ /obj/item/organ/external, /obj/item/organ/internal/brain, //to insert into MMIs, /obj/item/organ/internal/cell, - /obj/item/organ/internal/eyes/robot + /obj/item/organ/internal/eyes/robot, + /obj/item/device/nif //NIFs can be slapped in during surgery ) /obj/item/weapon/gripper/no_use/mech diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index d6a7ee6caa..ad800ed257 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -261,6 +261,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src) src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src) + src.modules += new /obj/item/weapon/surgical/bioregen/cyborg(src) //VoreStation Edit: LET ME SUCC src.modules += new /obj/item/weapon/gripper/no_use/organ(src) src.modules += new /obj/item/weapon/gripper/medical(src) src.modules += new /obj/item/weapon/shockpaddles/robot(src) @@ -607,7 +608,6 @@ var/global/list/robot_modules = list( LANGUAGE_SIIK = 1, LANGUAGE_AKHANI = 1, LANGUAGE_SKRELLIAN = 1, - LANGUAGE_SKRELLIANFAR = 0, LANGUAGE_ROOTLOCAL = 0, LANGUAGE_TRADEBAND = 1, LANGUAGE_GUTTER = 1, diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 45935c90be..666e78edc7 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -52,6 +52,7 @@ robot_modules["BoozeHound"] = /obj/item/weapon/robot_module/robot/booze robot_modules["KMine"] = /obj/item/weapon/robot_module/robot/kmine robot_modules["Stray"] = /obj/item/weapon/robot_module/robot/stray + robot_modules["TraumaHound"] = /obj/item/weapon/robot_module/robot/medical/trauma return 1 //Just add a new proc with the robot_module type if you wish to run some other vore code @@ -274,20 +275,27 @@ src.modules += new /obj/item/device/healthanalyzer(src) // See who's hurt specificially. src.modules += new /obj/item/borg/sight/hud/med(src) //See who's hurt generally. src.modules += new /obj/item/weapon/reagent_containers/syringe(src) //In case the chemist is nice! - src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)//For holding the chemicals when the chemist is nice + src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)//For holding the chemicals when the chemist is nice, made it the large variant in 2022 src.modules += new /obj/item/device/sleevemate(src) //Lets them scan people. src.modules += new /obj/item/weapon/shockpaddles/robot/hound(src) //Paws of life src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src) //This is kinda important for rescuing people without making it worse for everyone + src.modules += new /obj/item/weapon/gripper/medical(src) //Let them do literally anything in medbay other than patch external damage and lick people + src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src) //dropper is nice to have for so much actually src.emag = new /obj/item/weapon/dogborg/pounce(src) //Pounce - var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(2000) + var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000) synths += medicine var/obj/item/stack/medical/advanced/clotting/C = new (src) + var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src) C.uses_charge = 1 - C.charge_costs = list(1000) + C.charge_costs = list(5000) C.synths = list(medicine) + S.uses_charge = 1 + S.charge_costs = list(1000) + S.synths = list(medicine) src.modules += C + src.modules += S var/datum/matter_synth/water = new /datum/matter_synth(500) water.name = "Water reserves" @@ -323,6 +331,72 @@ R.verbs |= /mob/living/silicon/robot/proc/rest_style ..() +/obj/item/weapon/robot_module/robot/medical/trauma + name = "traumahound robot module" + channels = list("Medical" = 1) + networks = list(NETWORK_MEDICAL) + subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor) + pto_type = PTO_MEDICAL + can_be_pushed = 0 + sprites = list( + "Traumahound" = "traumavale", + ) + +/obj/item/weapon/robot_module/robot/medical/trauma/New(var/mob/living/silicon/robot/R) + src.modules += new /obj/item/device/healthanalyzer(src) + src.modules += new /obj/item/weapon/dogborg/jaws/small(src) + src.modules += new /obj/item/device/dogborg/boop_module(src) + src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) + src.modules += new /obj/item/weapon/surgical/hemostat/cyborg(src) + src.modules += new /obj/item/weapon/surgical/retractor/cyborg(src) + src.modules += new /obj/item/weapon/surgical/cautery/cyborg(src) + src.modules += new /obj/item/weapon/surgical/bonegel/cyborg(src) + src.modules += new /obj/item/weapon/surgical/FixOVein/cyborg(src) + src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src) + src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) + src.modules += new /obj/item/weapon/gripper/no_use/organ(src) + src.modules += new /obj/item/weapon/gripper/medical(src) + src.modules += new /obj/item/weapon/shockpaddles/robot(src) + src.modules += new /obj/item/weapon/reagent_containers/dropper(src) // Allows surgeon borg to fix necrosis + src.modules += new /obj/item/weapon/reagent_containers/syringe(src) + src.emag = new /obj/item/weapon/reagent_containers/spray(src) + src.emag.reagents.add_reagent("pacid", 250) + src.emag.name = "Polyacid spray" + + var/datum/matter_synth/water = new /datum/matter_synth(500) + water.name = "Water reserves" + water.recharge_rate = 0 + R.water_res = water + synths += water + + var/obj/item/device/dogborg/tongue/T = new /obj/item/device/dogborg/tongue(src) + T.water = water + src.modules += T + + var/obj/item/weapon/reagent_containers/borghypo/hound/H = new /obj/item/weapon/reagent_containers/borghypo/hound/trauma(src) + H.water = water + src.modules += H + + var/obj/item/device/dogborg/sleeper/compactor/trauma/B = new /obj/item/device/dogborg/sleeper/compactor/trauma(src) //So they can nom people and heal them + B.water = water + src.modules += B + + R.icon = 'icons/mob/widerobot_trauma_vr.dmi' + R.wideborg_dept = 'icons/mob/widerobot_trauma_vr.dmi' + R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' + R.ui_style_vr = TRUE + R.pixel_x = -16 + R.old_x = -16 + R.default_pixel_x = -16 + R.dogborg = TRUE + R.wideborg = TRUE + R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill + R.verbs |= /mob/living/silicon/robot/proc/robot_mount + R.verbs |= /mob/living/proc/toggle_rider_reins + R.verbs |= /mob/living/proc/shred_limb + R.verbs |= /mob/living/silicon/robot/proc/rest_style + ..() + /obj/item/weapon/robot_module/robot/ert name = "Emergency Responce module" channels = list("Security" = 1) @@ -493,7 +567,15 @@ //Added a circuit gripper src.modules += new /obj/item/weapon/gripper/circuit(src) src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src) + //src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src) //these are on the normal one, but do not appear to have a purpose other than borging + //src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src) //so I am leaving them here but commented out because robotics no do the borging w/o medical + src.modules += new /obj/item/weapon/portable_destructive_analyzer(src) //destructive analyzer option for pref respect while also being able to do job src.modules += new /obj/item/weapon/gripper/no_use/mech(src) + src.modules += new /obj/item/weapon/shockpaddles/robot/jumper(src) //unkilling synths may be important actually + src.modules += new /obj/item/weapon/melee/baton/slime/robot(src) //save the xenobio from themselves + src.modules += new /obj/item/weapon/gun/energy/taser/xeno/robot(src) //save the xenobio from themselves from a distance + src.modules += new /obj/item/device/xenoarch_multi_tool(src) //go find fancy rock + src.modules += new /obj/item/weapon/pickaxe/excavationdrill(src) //go get fancy rock src.emag = new /obj/item/weapon/hand_tele(src) var/datum/matter_synth/water = new /datum/matter_synth(500) @@ -586,27 +668,27 @@ //Painfully slow charger regen but high capacity. Also starts with low amount. var/datum/matter_synth/metal = new /datum/matter_synth/metal() metal.name = "Steel reserves" - metal.recharge_rate = 100 + metal.recharge_rate = 500 metal.max_energy = 50000 metal.energy = 10000 var/datum/matter_synth/glass = new /datum/matter_synth/glass() glass.name = "Glass reserves" - glass.recharge_rate = 100 + glass.recharge_rate = 500 glass.max_energy = 50000 glass.energy = 10000 var/datum/matter_synth/wood = new /datum/matter_synth/wood() wood.name = "Wood reserves" - wood.recharge_rate = 100 + wood.recharge_rate = 500 wood.max_energy = 50000 wood.energy = 10000 var/datum/matter_synth/plastic = new /datum/matter_synth/plastic() plastic.name = "Plastic reserves" - plastic.recharge_rate = 100 + plastic.recharge_rate = 500 plastic.max_energy = 50000 plastic.energy = 10000 var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel() plasteel.name = "Plasteel reserves"// Adding plasteel synthesizer to move in-line with Engiborg. - plasteel.recharge_rate = 100 + plasteel.recharge_rate = 250 plasteel.max_energy = 20000 plasteel.energy = 10000 var/datum/matter_synth/water = new /datum/matter_synth(500) @@ -975,7 +1057,7 @@ N.add_reagent("beer2", 50) src.emag.name = "Mickey Finn's Special Brew" R.icon = 'icons/mob/widerobot_colors_yw.dmi' //YW edit - R.wideborg_dept = 'icons/mob/widerobot_colors_yw.dmi' + R.wideborg_dept = 'icons/mob/widerobot_colors_yw.dmi' //YW edit R.hands.icon = 'icons/mob/screen1_robot_vr.dmi' R.ui_style_vr = TRUE R.pixel_x = -16 diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm index d8f7aa8a3a..324e4afabc 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm @@ -10,7 +10,6 @@ LANGUAGE_SIIK = 0, LANGUAGE_AKHANI = 0, LANGUAGE_SKRELLIAN = 0, - LANGUAGE_SKRELLIANFAR = 0, LANGUAGE_ROOTLOCAL = 0, LANGUAGE_GUTTER = 1, LANGUAGE_SCHECHI = 0, diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm index 1340beb8d5..7c31c3c83d 100644 --- a/code/modules/mob/living/simple_mob/defense.dm +++ b/code/modules/mob/living/simple_mob/defense.dm @@ -45,7 +45,22 @@ if(I_HURT) var/armor = run_armor_check(def_zone = null, attack_flag = "melee") - apply_damage(damage = harm_intent_damage, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE) + if(istype(L,/mob/living/carbon/human)) //VOREStation EDIT START Is it a human? + var/mob/living/carbon/human/attacker = L //We are a human! + var/datum/unarmed_attack/attack = attacker.get_unarmed_attack(src, BP_TORSO) //What attack are we using? Also, just default to attacking the chest. + var/rand_damage = rand(1, 5) //Like normal human attacks, let's randomize the damage... + var/real_damage = rand_damage //Let's go ahead and start calculating our damage. + var/hit_dam_type = attack.damage_type //Let's get the type of damage. Brute? Burn? Defined by the unarmed_attack. + real_damage += attack.get_unarmed_damage(attacker) //Add the damage that their special attack has. Some have 0. Some have 15. + if(real_damage <= damage_threshold) + L.visible_message("\The [L] uselessly hits \the [src]!") + L.do_attack_animation(src) + return + apply_damage(damage = real_damage, damagetype = hit_dam_type, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE) + L.visible_message("\The [L] [pick(attack.attack_verb)] \the [src]!") + L.do_attack_animation(src) + return //VOREStation EDIT END + apply_damage(damage = harm_intent_damage, damagetype = BRUTE, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE) //VOREStation EDIT Somebody set this to burn instead of brute. L.visible_message("\The [L] [response_harm] \the [src]!") L.do_attack_animation(src) diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm index ebbb7bd73e..72cf906d67 100644 --- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm +++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm @@ -51,6 +51,7 @@ var/obj/item/device/radio/headset/mob_headset/mob_radio //Adminbus headset for simplemob shenanigans. does_spin = FALSE can_be_drop_pred = TRUE // Mobs are pred by default. + var/damage_threshold = 0 //For some mobs, they have a damage threshold required to deal damage to them. // Release belly contents before being gc'd! diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm index 16253f4b7f..7a6a3458d9 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/catslug.dm @@ -160,7 +160,7 @@ else to_chat(user, "\The [src] takes a bite of \the [O].") if(user != src) - to_chat(user, "\The [user] feeds \the [O] to you.") + to_chat(src, "\The [user] feeds \the [O] to you.") playsound(src, 'sound/items/eatfood.ogg', 75, 1) /mob/living/simple_mob/vore/alienanimals/catslug/attack_hand(mob/living/carbon/human/M as mob) @@ -714,7 +714,7 @@ //Admin-spawn only catslugs below - Expect overpowered things & silliness below //============================================================================= -//Deathsquad catslug +//Deathsquad catslug /mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/deathslug name = "Asset Purrtection" desc = "What are you doing staring at this angry little fella? Run." @@ -739,7 +739,7 @@ "bomb" = 40, "bio" = 100, "rad" = 100 - ) + ) minbodytemp = 0 maxbodytemp = 5000 @@ -751,8 +751,8 @@ mob_radio = new /obj/item/device/radio/headset/mob_headset(src) mob_radio.frequency = DTH_FREQ //Can't tell if bugged, deathsquad freq in general seems broken mobcard.access |= get_all_station_access() - -//Syndicate catslug + +//Syndicate catslug /mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/syndislug name = "Mercenyary" desc = "What are you doing staring at this crimson-hardsuit wearing angry little fella? Run." @@ -769,7 +769,7 @@ health = 100 taser_kill = 0 melee_damage_lower = 15 - melee_damage_upper = 20 + melee_damage_upper = 20 mob_size = MOB_MEDIUM //Something something hardsuits are heavy. siemens_coefficient = 0 armor = list( @@ -780,7 +780,7 @@ "bomb" = 80, "bio" = 100, "rad" = 60 - ) + ) minbodytemp = 0 maxbodytemp = 5000 @@ -797,7 +797,7 @@ mob_radio.recalculateChannels(1) mobcard.access |= get_all_station_access() -//ERT catslug +//ERT catslug /mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/responseslug name = "Emeowgency Responder" desc = "The cavalry has arrived." @@ -822,7 +822,7 @@ "bomb" = 30, "bio" = 100, "rad" = 100 - ) + ) minbodytemp = 0 maxbodytemp = 5000 @@ -834,7 +834,7 @@ /mob/living/simple_mob/vore/alienanimals/catslug/custom/spaceslug/responseslug/Initialize() . = ..() mob_radio = new /obj/item/device/radio/headset/mob_headset(src) - mob_radio.frequency = ERT_FREQ + mob_radio.frequency = ERT_FREQ mob_radio.centComm = 1 mob_radio.ks2type = /obj/item/device/encryptionkey/ert mob_radio.keyslot2 = new /obj/item/device/encryptionkey/ert(mob_radio) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm index 0520bd5351..3d7c0d4059 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/spookyghost.dm @@ -192,7 +192,7 @@ . = ..() icon_living = "spookyghost-[rand(1,2)]" icon_state = icon_living - addtimer(CALLBACK(src, .proc/death), 2 MINUTES) + addtimer(CALLBACK(src, .proc/death), 35 SECONDS) update_icon() /datum/ai_holder/simple_mob/melee/space_ghost diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm index 7b8b777972..266174b7c3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm @@ -79,7 +79,7 @@ if( ishuman(AM) ) if(!stat) var/mob/M = AM - M.visible_message("[bicon(src)] Squeek!") + M.visible_message("\icon[src][bicon(src)] Squeek!") playsound(src, 'sound/effects/mouse_squeak.ogg', 35, 1) ..() diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm index c4f41bd3ba..840b424994 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm @@ -47,4 +47,12 @@ add_modifier(/datum/modifier/berserk, 30 SECONDS) /decl/mob_organ_names/goose - hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing", "neck") \ No newline at end of file + hit_zones = list("head", "chest", "left leg", "right leg", "left wing", "right wing", "neck") + +/mob/living/simple_mob/animal/space/goose/white + icon = 'icons/mob/animal_vr.dmi' + icon_state = "whitegoose" + icon_living = "whitegoose" + icon_dead = "whitegoose_dead" + name = "white goose" + desc = "And just when you thought it was a lovely day..." \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm index e43caff8c3..eaa796f45c 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm @@ -13,6 +13,7 @@ turn_sound = 'sound/mecha/mechturn.ogg' maxHealth = 300 mob_size = MOB_LARGE + damage_threshold = 5 //Anything that's 5 or less damage will not do damage. organ_names = /decl/mob_organ_names/mecha diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm index 33d2494884..83910850e3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm @@ -25,7 +25,7 @@ softfall = TRUE //Beings made of Hellmarble and powered by the tears of the damned are not concerned with mortal things such as 'gravity'. parachuting = TRUE - has_langs = list(LANGUAGE_GALCOM, LANGUAGE_CULT, LANGUAGE_OCCULT) + has_langs = list(LANGUAGE_GALCOM, LANGUAGE_CULT) has_eye_glow = TRUE diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm b/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm index e4e58f75dc..4b36fb7b1e 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/c_pet.dm @@ -39,7 +39,7 @@ "rad" = 0 ) - has_langs = list("Coulrian") + has_langs = list("Animal") /mob/living/simple_mob/animal/passive/honkpet/attack_hand(mob/living/user as mob) if(user.a_intent == I_DISARM) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm index 706031ce78..48953e15a8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/vore.dm @@ -11,6 +11,31 @@ verbs |= /mob/living/simple_mob/proc/set_name verbs |= /mob/living/simple_mob/proc/set_desc + ooc_notes = client.prefs.metadata + digestable = client.prefs_vr.digestable + devourable = client.prefs_vr.devourable + absorbable = client.prefs_vr.absorbable + feeding = client.prefs_vr.feeding + can_be_drop_prey = client.prefs_vr.can_be_drop_prey + can_be_drop_pred = client.prefs_vr.can_be_drop_pred + allow_inbelly_spawning = client.prefs_vr.allow_inbelly_spawning + allow_spontaneous_tf = client.prefs_vr.allow_spontaneous_tf + digest_leave_remains = client.prefs_vr.digest_leave_remains + allowmobvore = client.prefs_vr.allowmobvore + permit_healbelly = client.prefs_vr.permit_healbelly + noisy = client.prefs_vr.noisy + selective_preference = client.prefs_vr.selective_preference + + drop_vore = client.prefs_vr.drop_vore + stumble_vore = client.prefs_vr.stumble_vore + slip_vore = client.prefs_vr.slip_vore + + resizable = client.prefs_vr.resizable + show_vore_fx = client.prefs_vr.show_vore_fx + step_mechanics_pref = client.prefs_vr.step_mechanics_pref + pickup_pref = client.prefs_vr.pickup_pref + + /mob/living/simple_mob/proc/set_name() set name = "Set Name" set desc = "Sets your mobs name. You only get to do this once." diff --git a/code/modules/mob/living/voice/voice.dm b/code/modules/mob/living/voice/voice.dm index 0e9e805dc9..2752292ee2 100644 --- a/code/modules/mob/living/voice/voice.dm +++ b/code/modules/mob/living/voice/voice.dm @@ -83,7 +83,7 @@ var/new_name = sanitizeSafe(tgui_input_text(src, "Who would you like to be now?", "Communicator", src.client.prefs.real_name, MAX_NAME_LEN), MAX_NAME_LEN) if(new_name) if(comm) - comm.visible_message("[bicon(comm)] [src.name] has left, and now you see [new_name].") + comm.visible_message("\icon[comm][bicon(comm)] [src.name] has left, and now you see [new_name].") //Do a bit of logging in-case anyone tries to impersonate other characters for whatever reason. var/msg = "[src.client.key] ([src]) has changed their communicator identity's name to [new_name]." message_admins(msg) diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm index 77e1a8348e..f11edd8192 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm @@ -850,4 +850,13 @@ icon_state = "bunny-tall" extra_overlay = "bunny-tall-inner" do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/altevian + name = "Altevian Ears" + desc = "" + icon = 'icons/mob/vore/ears_vr.dmi' + icon_state = "altevian" + extra_overlay = "altevian-inner" + do_colouration = 1 color_blend_mode = ICON_MULTIPLY \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm index 742480858c..aa01f6c465 100644 --- a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm @@ -3,7 +3,7 @@ /datum/sprite_accessory/marking //Override for base markings color_blend_mode = ICON_ADD - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use /datum/sprite_accessory/marking/vr_vulp_belly name = "belly fur (Vulp)" @@ -850,4 +850,39 @@ icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "thunderthighs" color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_L_LEG,BP_R_LEG) \ No newline at end of file + body_parts = list(BP_L_LEG,BP_R_LEG) + +/datum/sprite_accessory/marking/vr_altevian_snout + name = "Altevian Snout" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "altevian-snout" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_altevian_chin + name = "Altevian Chin" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "altevian-chin" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_altevian_nose + name = "Altevian Nose" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "altevian-nose" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_altevian_fangs + name = "Altevian Fangs" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "altevian-fangs" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_altevian_incisors + name = "Altevian Incisors" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "altevian-incisors" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_tail.dm b/code/modules/mob/new_player/sprite_accessories_tail.dm index 06dcdb9ebb..f5b6aefe4a 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail.dm @@ -25,6 +25,10 @@ var/clip_mask_state = null //Icon state to generate clip mask. Clip mask is used to 'clip' off the lower part of clothing such as jumpsuits & full suits. var/icon/clip_mask = null //Instantiated clip mask of given icon and state + // VOREStation Edit: Taur Loafing + var/can_loaf = FALSE + var/loaf_offset = 0 + //species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3) //Removing Polaris whitelits, ones we need are defined in our files /datum/sprite_accessory/tail/New() diff --git a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm index a1c1034be5..cf9632ccda 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm @@ -11,6 +11,8 @@ do_colouration = 0 //Set to 1 to enable coloration using the tail color. species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use + var/list/lower_layer_dirs = list(SOUTH) + /datum/sprite_accessory/tail/New() . = ..() if(clip_mask_icon && clip_mask_state) @@ -1175,6 +1177,14 @@ color_blend_mode = ICON_MULTIPLY ckeys_allowed = list("prettiebyrd") +/datum/sprite_accessory/tail/altevian + name = "Altevian Tail" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "altevian" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + lower_layer_dirs = list(SOUTH, WEST) + /datum/sprite_accessory/tail/tentacle name = "Tentacle, colorable (vwag)" desc = "" @@ -1201,4 +1211,4 @@ /datum/sprite_accessory/tail/longtail/shadekin_tail/shadekin_tail_long name = "Shadekin Long Tail" - icon_state = "shadekin_long_s" + icon_state = "shadekin_long_s" \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm index 2a574510b0..4eee002177 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm @@ -419,6 +419,8 @@ extra_overlay = "drake_markings" suit_sprites = 'icons/mob/taursuits_drake_vr.dmi' icon_sprite_tag = "drake" + can_loaf = TRUE // VOREStation Edit: Taur Loafing + loaf_offset = 6 // VOREStation Edit: Taur Loafing /datum/sprite_accessory/tail/taur/ch/fatdrake name = "Drake (Fat Taur dual-color)" @@ -614,4 +616,4 @@ extra_overlay2 = "noodle_markings_2" suit_sprites = 'icons/mob/taursuits_noodle_vr.dmi' clip_mask_state = "taur_clip_mask_noodle" - icon_sprite_tag = "noodle" \ No newline at end of file + icon_sprite_tag = "noodle" diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index 66a2cc952b..bf9ee1b263 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -6,7 +6,7 @@ /datum/sprite_accessory/hair - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_SHADEKIN_YW) //This lets all races use the default hairstyles. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_SHADEKIN_YW) //This lets all races use the default hairstyles. // yw edit shadekin /datum/sprite_accessory/hair/astolfo name = "Astolfo" @@ -91,7 +91,7 @@ name = "Bald" icon_state = "bald" gender = MALE - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //Lets all the races be bald if they want. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //Lets all the races be bald if they want. /datum/sprite_accessory/hair/ponytail6_fixed name = "Ponytail 6 but fixed" @@ -472,20 +472,20 @@ /datum/sprite_accessory/facial_hair icon = 'icons/mob/human_face_or_vr.dmi' color_blend_mode = ICON_MULTIPLY - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use the facial hair styles. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use the facial hair styles. /datum/sprite_accessory/facial_hair/shaved name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This needed to be manually defined, apparantly. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This needed to be manually defined, apparantly. /datum/sprite_accessory/facial_hair/neck_fluff name = "Neck Fluff" icon = 'icons/mob/human_face_or_vr.dmi' icon_state = "facial_neckfluff" gender = NEUTER - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) /datum/sprite_accessory/facial_hair/vulp_none name = "None" diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index f10ce85b86..d8ed1c311e 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -67,6 +67,8 @@ else spawn(0) M.show_message(message, 2) + if(M.is_preference_enabled(/datum/client_preference/subtle_sounds)) + M << sound('sound/talksounds/subtle_sound.ogg', volume = 50) for(var/obj/O as anything in vis_objs) spawn(0) @@ -145,10 +147,14 @@ else pb = db.pred_body to_chat(pb, "The captive mind of \the [M] thinks, \"[message]\"") //To our pred if dominated brain + if(pb.is_preference_enabled(/datum/client_preference/subtle_sounds)) + pb << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE else if(M.absorbed && isbelly(M.loc)) pb = M.loc.loc to_chat(pb, "\The [M] thinks, \"[message]\"") //To our pred if absorbed + if(pb.is_preference_enabled(/datum/client_preference/subtle_sounds)) + pb << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE if(pb) //We are prey, let's do the prey thing. @@ -157,11 +163,15 @@ if(istype(I, /mob/living/dominated_brain) && I != M) var/mob/living/dominated_brain/db = I to_chat(db, "The captive mind of \the [M] thinks, \"[message]\"") //To any dominated brains in the pred + if(db.is_preference_enabled(/datum/client_preference/subtle_sounds)) + db << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE for(var/B in pb.vore_organs) for(var/mob/living/L in B) if(L.absorbed && L != M && L.ckey) to_chat(L, "\The [M] thinks, \"[message]\"") //To any absorbed people in the pred + if(L.is_preference_enabled(/datum/client_preference/subtle_sounds)) + L << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE //Let's also check and see if there's anyone inside of us to send the message to. @@ -169,18 +179,26 @@ if(istype(I, /mob/living/dominated_brain)) var/mob/living/dominated_brain/db = I to_chat(db, "\The [M] thinks, \"[message]\"") //To any dominated brains inside us + if(db.is_preference_enabled(/datum/client_preference/subtle_sounds)) + db << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE for(var/B in M.vore_organs) for(var/mob/living/L in B) if(L.absorbed) to_chat(L, "\The [M] thinks, \"[message]\"") //To any absorbed people inside us + if(L.is_preference_enabled(/datum/client_preference/subtle_sounds)) + L << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE if(f) //We found someone to send the message to if(pb) to_chat(M, "You think \"[message]\"") //To us if we are the prey + if(M.is_preference_enabled(/datum/client_preference/subtle_sounds)) + M << sound('sound/talksounds/subtle_sound.ogg', volume = 50) else to_chat(M, "You think \"[message]\"") //To us if we are the pred + if(M.is_preference_enabled(/datum/client_preference/subtle_sounds)) + M << sound('sound/talksounds/subtle_sound.ogg', volume = 50) for (var/mob/G in player_list) if (istype(G, /mob/new_player)) continue @@ -225,11 +243,15 @@ else pb = db.pred_body to_chat(pb, "\The [M] [message]") //To our pred if dominated brain + if(pb.is_preference_enabled(/datum/client_preference/subtle_sounds)) + pb << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE else if(M.absorbed && isbelly(M.loc)) pb = M.loc.loc to_chat(pb, "\The [M] [message]") //To our pred if absorbed + if(pb.is_preference_enabled(/datum/client_preference/subtle_sounds)) + pb << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE if(pb) //We are prey, let's do the prey thing. @@ -238,11 +260,15 @@ if(istype(I, /mob/living/dominated_brain) && I != M) var/mob/living/dominated_brain/db = I to_chat(db, "\The [M] [message]") //To any dominated brains in the pred + if(db.is_preference_enabled(/datum/client_preference/subtle_sounds)) + db << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE for(var/B in pb.vore_organs) for(var/mob/living/L in B) if(L.absorbed && L != M && L.ckey) to_chat(L, "\The [M] [message]") //To any absorbed people in the pred + if(L.is_preference_enabled(/datum/client_preference/subtle_sounds)) + L << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE //Let's also check and see if there's anyone inside of us to send the message to. @@ -250,18 +276,26 @@ if(istype(I, /mob/living/dominated_brain)) var/mob/living/dominated_brain/db = I to_chat(db, "\The [M] [message]") //To any dominated brains inside us + if(db.is_preference_enabled(/datum/client_preference/subtle_sounds)) + db << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE for(var/B in M.vore_organs) for(var/mob/living/L in B) if(L.absorbed) to_chat(L, "\The [M] [message]") //To any absorbed people inside us + if(L.is_preference_enabled(/datum/client_preference/subtle_sounds)) + L << sound('sound/talksounds/subtle_sound.ogg', volume = 50) f = TRUE if(f) //We found someone to send the message to if(pb) to_chat(M, "\The [M] [message]") //To us if we are the prey + if(M.is_preference_enabled(/datum/client_preference/subtle_sounds)) + M << sound('sound/talksounds/subtle_sound.ogg', volume = 50) else to_chat(M, "\The [M] [message]") //To us if we are the pred + if(M.is_preference_enabled(/datum/client_preference/subtle_sounds)) + M << sound('sound/talksounds/subtle_sound.ogg', volume = 50) for (var/mob/G in player_list) if (istype(G, /mob/new_player)) continue diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index d334b91c21..1ba7bb739f 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -383,7 +383,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable last_notification = message // TGUI Hook - to_chat(human,"\[[bicon(src.big_icon)]NIF\] displays, \"[message]\"") + to_chat(human,"\[\icon[src.big_icon][bicon(src.big_icon)]NIF\] displays, \"[message]\"") if(prob(1)) human.visible_message("\The [human] [pick(look_messages)].") if(alert) human << bad_sound diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index f4f3135b8e..a684c696d7 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -377,3 +377,32 @@ ..() for(var/i = 0 to 7) new /obj/item/weapon/disk/nifsoft/mining(src) + +// Pilot Disk // +/obj/item/weapon/disk/nifsoft/pilot + name = "NIFSoft Uploader - Pilot" + desc = "Contains free NIFSofts useful for pilot members.\n\ + It has a small label: \n\ + \"Portable NIFSoft Installation Media. \n\ + Align ocular port with eye socket and depress red plunger.\"" + + icon_state = "pilot" + stored_organic = /datum/nifsoft/package/pilot + stored_synthetic = /datum/nifsoft/package/pilot_synth + +/datum/nifsoft/package/pilot + software = list(/datum/nifsoft/spare_breath) + +/datum/nifsoft/package/pilot_synth + software = list(/datum/nifsoft/pressure,/datum/nifsoft/heatsinks) + +/obj/item/weapon/storage/box/nifsofts_pilot + name = "pilot nifsoft uploaders" + desc = "A box of free nifsofts for pilot employees." + icon = 'icons/obj/boxes.dmi' + icon_state = "nifsoft_kit_pilot" + +/obj/item/weapon/storage/box/nifsofts_pilot/New() + ..() + for(var/i = 0 to 7) + new /obj/item/weapon/disk/nifsoft/pilot(src) \ No newline at end of file diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index a8f66619a6..04766a51e4 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -72,11 +72,11 @@ /datum/nifsoft/soulcatcher/proc/notify_into(var/message) var/sound = nif.good_sound - to_chat(nif.human,"\[[bicon(nif.big_icon)]NIF\] Soulcatcher displays, \"[message]\"") + to_chat(nif.human,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] Soulcatcher displays, \"[message]\"") nif.human << sound for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) - to_chat(CS,"\[[bicon(nif.big_icon)]NIF\] Soulcatcher displays, \"[message]\"") + to_chat(CS,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] Soulcatcher displays, \"[message]\"") CS << sound /datum/nifsoft/soulcatcher/proc/say_into(var/message, var/mob/living/sender, var/mob/eyeobj) @@ -88,9 +88,9 @@ //Not AR Projecting else - to_chat(nif.human,"\[[bicon(nif.big_icon)]NIF\] [sender_name] speaks, \"[message]\"") + to_chat(nif.human,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] [sender_name] speaks, \"[message]\"") for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) - to_chat(CS,"\[[bicon(nif.big_icon)]NIF\] [sender_name] speaks, \"[message]\"") + to_chat(CS,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] [sender_name] speaks, \"[message]\"") log_nsay(message,nif.human.real_name,sender) @@ -103,9 +103,9 @@ //Not AR Projecting else - to_chat(nif.human,"\[[bicon(nif.big_icon)]NIF\] [sender_name] [message]") + to_chat(nif.human,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] [sender_name] [message]") for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) - to_chat(CS,"\[[bicon(nif.big_icon)]NIF\] [sender_name] [message]") + to_chat(CS,"\[\icon[nif.big_icon][bicon(nif.big_icon)]NIF\] [sender_name] [message]") log_nme(message,nif.human.real_name,sender) diff --git a/code/modules/nifsoft/software/14_commlink.dm b/code/modules/nifsoft/software/14_commlink.dm index 75a04fc589..47b602e184 100644 --- a/code/modules/nifsoft/software/14_commlink.dm +++ b/code/modules/nifsoft/software/14_commlink.dm @@ -81,7 +81,7 @@ var/message = combined["formatted"] var/name_used = M.GetVoice() var/rendered = null - rendered = "[bicon(icon_object)] [name_used] [message]" + rendered = "\icon[icon_object][bicon(icon_object)] [name_used] [message]" mob.show_message(rendered, 2) //Not supported by the internal one diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm index 8ec76a36d0..6e93222b2d 100644 --- a/code/modules/organs/internal/lungs.dm +++ b/code/modules/organs/internal/lungs.dm @@ -11,14 +11,26 @@ if(!owner) return - if(is_bruised()) + //VOREStation Edit Start Lungs were a surprisingly lethal cause of bloodloss. + if(is_broken()) if(prob(4)) - spawn owner?.custom_emote(VISIBLE_MESSAGE, "coughs up blood!") - owner.drip(10) - if(prob(8)) + spawn owner?.custom_emote(VISIBLE_MESSAGE, "coughs up a large amount of blood!") + var/bleeding_rng = rand(3,5) + owner.drip(bleeding_rng) + if(prob(8)) //This is a medical emergency. Will kill within minutes unless exceedingly lucky. spawn owner?.custom_emote(VISIBLE_MESSAGE, "gasps for air!") owner.AdjustLosebreath(15) + else if(is_bruised()) //Only bruised? That's an annoyance and can cause some more damage (via brainloss due to oxyloss) + if(prob(2)) //But let's not kill people too quickly. + spawn owner?.custom_emote(VISIBLE_MESSAGE, "coughs up a small amount of blood!") + var/bleeding_rng = rand(1,2) + owner.drip(bleeding_rng) + if(prob(4)) //Get to medical quickly. but shouldn't kill without exceedingly bad RNG. + spawn owner?.custom_emote(VISIBLE_MESSAGE, "gasps for air!") + owner.AdjustLosebreath(10) //Losebreath is a DoT that does 1:1 damage and prevents oxyloss healing via breathing. + //VOREStation Edit End + if(owner.internal_organs_by_name[O_BRAIN]) // As the brain starts having Trouble, the lungs start malfunctioning. var/obj/item/organ/internal/brain/Brain = owner.internal_organs_by_name[O_BRAIN] if(Brain.get_control_efficiency() <= 0.8) diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 8f5d5bc9a0..9ef9460c60 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -594,6 +594,8 @@ This function completely restores a damaged organ to perfect condition. return 1 else last_dam = brute_dam + burn_dam + if (number_wounds != 0) + return 1 if(germ_level) return 1 return 0 @@ -730,8 +732,8 @@ Note that amputating the affected organ does in fact remove the infection from t return for(var/datum/wound/W in wounds) - // wounds can disappear after 10 minutes at the earliest - if(W.damage <= 0 && W.created + 10 * 10 * 60 <= world.time) + // wounds used to be able to disappear after 10 minutes at the earliest, for now just remove them as soon as there is no damage + if(W.damage <= 0) wounds -= W continue // let the GC handle the deletion of the wound diff --git a/code/modules/organs/robolimbs_custom.dm b/code/modules/organs/robolimbs_custom.dm index 2cd26b7f4b..96d80669c1 100644 --- a/code/modules/organs/robolimbs_custom.dm +++ b/code/modules/organs/robolimbs_custom.dm @@ -175,3 +175,31 @@ VS Edit - anyone can select these. */ /obj/item/weapon/disk/limb/dsi_teshari company = "DSI - Teshari" + +/datum/robolimb/dsi_zorren + company = "DSI - Zorren" + desc = "This limb feels soft and fluffy, realistic design and squish. Seems a little mischievous. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSIZorren/dsi_zorren.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Zorren" + +/obj/item/weapon/disk/limb/dsi_zorren + company = "DSI - Zorren" + +/datum/robolimb/dsi_fennec + company = "DSI - Fennec" + desc = "This limb feels soft and fluffy, realistic design and squish. Seems a little mischievous. By Darkside Incorperated." + icon = 'icons/mob/human_races/cyberlimbs/DSIFennec/dsi_fennec.dmi' + blood_color = "#ffe2ff" + lifelike = 1 + unavailable_to_build = 1 + includes_tail = 1 + skin_tone = 1 + suggested_species = "Fennec" + +/obj/item/weapon/disk/limb/dsi_fennec + company = "DSI - Fennec" diff --git a/code/modules/organs/subtypes/skrell.dm b/code/modules/organs/subtypes/skrell.dm index 3ac237c2b5..5f2d494105 100644 --- a/code/modules/organs/subtypes/skrell.dm +++ b/code/modules/organs/subtypes/skrell.dm @@ -25,7 +25,7 @@ /obj/item/organ/internal/voicebox/skrell icon_state = "skrell_larynx" - will_assist_languages = list(LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR) + will_assist_languages = list(LANGUAGE_SKRELLIAN) /obj/item/organ/internal/appendix/skrell icon_state = "skrell_appendix" diff --git a/code/modules/pda/app.dm b/code/modules/pda/app.dm index 93245c2a85..c86f9e507d 100644 --- a/code/modules/pda/app.dm +++ b/code/modules/pda/app.dm @@ -34,7 +34,7 @@ L = get(pda, /mob/living/silicon) if(L) - to_chat(L, "[bicon(pda)] [message]") + to_chat(L, "\icon[pda][bicon(pda)] [message]") SStgui.update_user_uis(L, pda) // Update the receiving user's PDA UI so that they can see the new message if(!notify_silent) diff --git a/code/modules/pda/messenger.dm b/code/modules/pda/messenger.dm index 6aa833fd83..73e0944a65 100644 --- a/code/modules/pda/messenger.dm +++ b/code/modules/pda/messenger.dm @@ -117,7 +117,7 @@ create_message(usr, P) if(href_list["target"] in conversations) // Need to make sure the message went through, if not welp. active_conversation = href_list["target"] - + /datum/data/pda/app/messenger/proc/create_message(var/mob/living/U, var/obj/item/device/pda/P) var/t = tgui_input_text(U, "Please enter message", name, null) @@ -178,7 +178,7 @@ SStgui.update_user_uis(U, P) // Update the sending user's PDA UI so that they can see the new message log_pda("(PDA: [src.name]) sent \"[t]\" to [P.name]", usr) - to_chat(U, "[bicon(pda)] Sent message to [P.owner] ([P.ownjob]), \"[t]\"") + to_chat(U, "\icon[pda][bicon(pda)] Sent message to [P.owner] ([P.ownjob]), \"[t]\"") else to_chat(U, "ERROR: Messaging server is not responding.") @@ -224,7 +224,7 @@ /datum/data/pda/app/messenger/multicast /datum/data/pda/app/messenger/multicast/receive_message(list/data, ref) . = ..() - + var/obj/item/device/pda/multicaster/M = pda if(!istype(M)) return diff --git a/code/modules/pda/pda.dm b/code/modules/pda/pda.dm index c61624e40b..e0408d024c 100644 --- a/code/modules/pda/pda.dm +++ b/code/modules/pda/pda.dm @@ -99,7 +99,7 @@ var/global/list/obj/item/device/pda/PDAs = list() S = 'sound/machines/twobeep.ogg' playsound(loc, S, 50, 1) for(var/mob/O in hearers(3, loc)) - O.show_message(text("[bicon(src)] *[ttone]*")) + O.show_message(text("\icon[src][bicon(src)] *[ttone]*")) /obj/item/device/pda/proc/set_ringtone() var/t = tgui_input_text(usr, "Please enter new ringtone", name, ttone) diff --git a/code/modules/planet/virgo3c_vr.dm b/code/modules/planet/virgo3c_vr.dm index 0555d29a3a..3afd9ca6c4 100644 --- a/code/modules/planet/virgo3c_vr.dm +++ b/code/modules/planet/virgo3c_vr.dm @@ -147,11 +147,11 @@ var/datum/planet/virgo3c/planet_virgo3c = null /datum/weather/virgo3c/clear name = "clear" transition_chances = list( - WEATHER_CLEAR = 60, - WEATHER_OVERCAST = 20, - WEATHER_LIGHT_SNOW = 1, - WEATHER_BLOOD_MOON = 1, - WEATHER_EMBERFALL = 0.5) + WEATHER_CLEAR = 120, + WEATHER_OVERCAST = 40, + WEATHER_LIGHT_SNOW = 2, + WEATHER_BLOOD_MOON = 2, + WEATHER_EMBERFALL = 1) transition_messages = list( "The sky clears up.", "The sky is visible.", diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 494e4152fc..8af3bbae52 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -366,7 +366,7 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity) // VOREStation Edit Start var/area/A = get_area(T) - if(A.forbid_events) //No going to dorms + if(A.forbid_singulo) //No going to dorms return 0 // VOREStation Edit End diff --git a/code/modules/projectiles/ammunition/ammo_boxes.dm b/code/modules/projectiles/ammunition/ammo_boxes.dm index 566b878c44..533a27bc4c 100644 --- a/code/modules/projectiles/ammunition/ammo_boxes.dm +++ b/code/modules/projectiles/ammunition/ammo_boxes.dm @@ -10,7 +10,7 @@ # # Use this format, followed by the caliber. For example, a shotgun's caliber # variable is "12g" as a result. Ergo, a shotgun round's path would have "a12g", -# or a magazine with shotgun shells would be "m12g" instead. To avoid confusion +# or a magazine with shotgun shells would be "m12g" instead. To avoid confusion // Avoid confusion my ass, when ammo is called only shells and suddenly switches to being called some obscure-ass military number # for developers and in-game admins spawning these items, stick to this format. # Likewise, when creating new rounds, the caliber variable should match whatever # the name says. diff --git a/code/modules/projectiles/guns/energy/special_vr.dm b/code/modules/projectiles/guns/energy/special_vr.dm index 73e878eed6..e7e2b70201 100644 --- a/code/modules/projectiles/guns/energy/special_vr.dm +++ b/code/modules/projectiles/guns/energy/special_vr.dm @@ -1,27 +1,102 @@ -/obj/item/weapon/gun/energy/ionrifle/pistol - projectile_type = /obj/item/projectile/ion/pistol // still packs a punch but no AoE - -/obj/item/weapon/gun/energy/ionrifle/weak - projectile_type = /obj/item/projectile/ion/small - -/obj/item/weapon/gun/energy/medigun //Adminspawn/ERT etc - name = "directed restoration system" - desc = "The BL-3 'Phoenix' is an adaptation on the ML-3 'Medbeam' design that channels the power of the beam into a single healing laser. It is highly energy-inefficient, but its medical power cannot be denied." - force = 5 - icon_state = "medbeam" - item_state = "medbeam" - icon = 'icons/obj/gun_vr.dmi' - item_icons = list( - slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', - slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi', - ) - slot_flags = SLOT_BELT - accuracy = 100 - fire_delay = 12 - fire_sound = 'sound/weapons/eluger.ogg' - - projectile_type = /obj/item/projectile/beam/medigun - - accept_cell_type = /obj/item/weapon/cell - cell_type = /obj/item/weapon/cell/high - charge_cost = 2500 \ No newline at end of file +/obj/item/weapon/gun/energy/ionrifle/pistol + projectile_type = /obj/item/projectile/ion/pistol // still packs a punch but no AoE + +/obj/item/weapon/gun/energy/ionrifle/weak + projectile_type = /obj/item/projectile/ion/small + +/obj/item/weapon/gun/energy/medigun //Adminspawn/ERT etc + name = "directed restoration system" + desc = "The BL-3 'Phoenix' is an adaptation on the ML-3 'Medbeam' design that channels the power of the beam into a single healing laser. It is highly energy-inefficient, but its medical power cannot be denied." + force = 5 + icon_state = "medbeam" + item_state = "medbeam" + icon = 'icons/obj/gun_vr.dmi' + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_guns_vr.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_guns_vr.dmi', + ) + slot_flags = SLOT_BELT + accuracy = 100 + fire_delay = 12 + fire_sound = 'sound/weapons/eluger.ogg' + + projectile_type = /obj/item/projectile/beam/medigun + + accept_cell_type = /obj/item/weapon/cell + cell_type = /obj/item/weapon/cell/high + charge_cost = 2500 + +/obj/item/weapon/gun/energy/bfgtaser + name = "9000-series Ball Lightning Taser" + desc = "The brainchild of Hephaestus Industries Civil Pacification Division, the BLT-9000 was intended for riot control but despite enthusiastic interest from law-enforcement agencies across the Commonwealth and beyond, its indiscriminate nature led to it being banned from civilian use in virtually all jurisdictions. As a result, most pieces are found in the hands of collectors." + icon = 'icons/obj/gun_vr.dmi' + icon_state = "BFG" + fire_sound = 'sound/effects/phasein.ogg' + item_state = "mhdhowitzer" + wielded_item_state = "mhdhowitzer-wielded" //Placeholder + slot_flags = SLOT_BELT|SLOT_BACK + projectile_type = /obj/item/projectile/bullet/BFGtaser + fire_delay = 20 + w_class = ITEMSIZE_LARGE + one_handed_penalty = 90 // The thing's heavy and huge. + accuracy = 45 + charge_cost = 2400 //yes, this bad boy empties an entire weapon cell in one shot. What of it? + var/spinning_up = FALSE + +/obj/item/weapon/gun/energy/bfgtaser/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0) + if(spinning_up) + return + if(!power_supply || !power_supply.check_charge(charge_cost)) + handle_click_empty(user) + return + + playsound(src, 'sound/weapons/chargeup.ogg', 100, 1) + spinning_up = TRUE + update_icon() + user.visible_message("[user] starts charging the [src]!", \ + "You start charging the [src]!") + if(do_after(user, 8, src)) + spinning_up = FALSE + ..() + else + spinning_up = FALSE + +/obj/item/projectile/beam/stun/weak/BFG + fire_sound = 'sound/effects/sparks6.ogg' + hitsound = 'sound/effects/sparks4.ogg' + hitsound_wall = 'sound/effects/sparks7.ogg' + +/obj/item/projectile/bullet/BFGtaser + name = "lightning ball" + icon = 'icons/obj/projectiles_vr.dmi' + icon_state = "minitesla" + speed=5 + damage = 100 + damage_type = AGONY + check_armour = "energy" + embed_chance = 0 + hitsound = 'sound/weapons/zapbang.ogg' + hitsound_wall = 'sound/weapons/effects/searwall.ogg' + var/zaptype = /obj/item/projectile/beam/stun/weak/BFG + +/obj/item/projectile/bullet/BFGtaser/process() + var/list/victims = list() + for(var/mob/living/M in living_mobs(world.view)) + if(M != firer) + victims += M + if(LAZYLEN(victims)) + var/target = pick(victims) + var/obj/item/projectile/P = new zaptype(src.loc) + P.launch_projectile_from_turf(target = target, target_zone = null, user = firer, params = null, angle_override = null, forced_spread = 0) + ..() + +/obj/item/projectile/bullet/BFGtaser/on_hit() + var/list/victims = list() + for(var/mob/living/M in living_mobs(world.view)) + if(M != firer) + victims += M + if(LAZYLEN(victims)) + for(var/target in victims) + var/obj/item/projectile/P = new zaptype(src.loc) + P.launch_projectile_from_turf(target = target, target_zone = null, user = firer, params = null, angle_override = null, forced_spread = 0) + ..() \ No newline at end of file diff --git a/code/modules/projectiles/guns/toy.dm b/code/modules/projectiles/guns/toy.dm index a4ef0dbf3b..22f8ef9f74 100644 --- a/code/modules/projectiles/guns/toy.dm +++ b/code/modules/projectiles/guns/toy.dm @@ -54,6 +54,19 @@ handle_casings = null recoil = null //it's a toy +/* + * Moist Nugget + */ +/obj/item/weapon/gun/projectile/shotgun/pump/toy/moistnugget + name = "\improper Donk-Soft mosin-nagant" + desc = "Donk-Soft foam mosin-nagant! It's Donk or Don't! Ages 8 and up." + description_fluff = "A special Donk-Soft rifle originally made to pair with a Soviet Soldier costume. It didn't catch on quite as well as other Donk-Soft products." + icon = 'icons/obj/gun_toy.dmi' + icon_state = "moistnugget" + item_state = "moistnugget" + max_shells = 5 + matter = list(MAT_PLASTIC = 2500) + /* * Pistol */ diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm index a9273f5ec0..17c10cad1a 100644 --- a/code/modules/random_map/noise/ore.dm +++ b/code/modules/random_map/noise/ore.dm @@ -53,7 +53,7 @@ var/current_cell = map[get_map_cell(x,y)] if(current_cell < rare_val) // Surface metals. - T.resources["hematite"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) + T.resources["hematite"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) T.resources["gold"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["silver"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["uranium"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) @@ -81,17 +81,17 @@ T.resources["lead"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) T.resources["hydrogen"] = 0 T.resources["diamond"] = 0 - T.resources["hematite"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) + T.resources["hematite"] = 0 T.resources["marble"] = 0 //T.resources["copper"] = 0 //T.resources["tin"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) //T.resources["bauxite"] = 0 - T.resources["rutile"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) + T.resources["rutile"] = 0 //T.resources["void opal"] = 0 //T.resources["quartz"] = 0 //T.resources["painite"] = 0 else // Deep metals. - T.resources["uranium"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) + T.resources["uranium"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["diamond"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["verdantium"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) T.resources["phoron"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) @@ -99,13 +99,13 @@ T.resources["hydrogen"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["marble"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) T.resources["lead"] = rand(RESOURCE_LOW_MIN, RESOURCE_HIGH_MAX) - T.resources["hematite"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX) - T.resources["gold"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) - T.resources["silver"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) + T.resources["hematite"] = 0 + T.resources["gold"] = 0 + T.resources["silver"] = 0 //T.resources["copper"] = 0 //T.resources["tin"] = 0 //T.resources["bauxite"] = 0 - T.resources["rutile"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) + T.resources["rutile"] = 0 //T.resources["void opal"] = 0 //T.resources["quartz"] = 0 //T.resources["painite"] = 0 diff --git a/code/modules/reagents/reactions/_reactions.dm b/code/modules/reagents/reactions/_reactions.dm index d63967d900..61c926153e 100644 --- a/code/modules/reagents/reactions/_reactions.dm +++ b/code/modules/reagents/reactions/_reactions.dm @@ -119,7 +119,7 @@ var/list/seen = viewers(4, T) for(var/mob/M in seen) if(M.client) - M.show_message("[bicon(container)] [mix_message]", 1) + M.show_message("\icon[container][bicon(container)] [mix_message]", 1) playsound(T, reaction_sound, 80, 1) //obtains any special data that will be provided to the reaction products diff --git a/code/modules/reagents/reagents/_reagents.dm b/code/modules/reagents/reagents/_reagents.dm index 2ad71a4de1..a2db264456 100644 --- a/code/modules/reagents/reagents/_reagents.dm +++ b/code/modules/reagents/reagents/_reagents.dm @@ -171,7 +171,7 @@ if(overdose && (volume > overdose * M?.species.chemOD_threshold) && (active_metab.metabolism_class != CHEM_TOUCH && !can_overdose_touch)) overdose(M, alien, removed) if(M.species.allergens & allergen_type) //uhoh, we can't handle this! - M.add_chemical_effect(CE_ALLERGEN,allergen_factor) + M.add_chemical_effect(CE_ALLERGEN, allergen_factor * removed) remove_self(removed) return diff --git a/code/modules/reagents/reagents/core.dm b/code/modules/reagents/reagents/core.dm index 901b803cbb..0d803b63d3 100644 --- a/code/modules/reagents/reagents/core.dm +++ b/code/modules/reagents/reagents/core.dm @@ -46,12 +46,12 @@ var/effective_dose = dose if(issmall(M)) effective_dose *= 2 - var/is_vampire = 0 //VOREStation Edit START + var/is_vampire = FALSE //VOREStation Edit START if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.species.organic_food_coeff == 0) - H.adjust_nutrition(removed) - is_vampire = 1 //VOREStation Edit END + if(H.species.bloodsucker) + H.adjust_nutrition(removed*30) + is_vampire = TRUE //VOREStation Edit END if(alien == IS_SLIME) // Treat it like nutriment for the jello, but not equivalent. if(data["species"] == M.species.name) // Unless it's Promethean goo, then refill this one's goo. M.inject_blood(src, volume * volume_mod) @@ -65,10 +65,10 @@ return if(effective_dose > 5) - if(is_vampire == 0) //VOREStation Edit. + if(!is_vampire) //VOREStation Edit. M.adjustToxLoss(removed) //VOREStation Edit. if(effective_dose > 15) - if(is_vampire == 0) //VOREStation Edit. + if(!is_vampire) //VOREStation Edit. M.adjustToxLoss(removed) //VOREStation Edit. if(data && data["virus2"]) var/list/vlist = data["virus2"] diff --git a/code/modules/reagents/reagents/food_drinks_vr.dm b/code/modules/reagents/reagents/food_drinks_vr.dm index ef301925cb..668df0d83e 100644 --- a/code/modules/reagents/reagents/food_drinks_vr.dm +++ b/code/modules/reagents/reagents/food_drinks_vr.dm @@ -140,7 +140,7 @@ M.adjust_nutrition(alt_nutriment_factor * removed) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.feral > 0 && H.nutrition > 100 && H.traumatic_shock < min(60, H.nutrition/10) && H.jitteriness < 100) // same check as feral triggers to stop them immediately re-feralling + if(H.feral > 0 && H.nutrition > 150 && H.traumatic_shock < 20 && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling H.feral -= removed * 3 // should calm them down quick, provided they're actually in a state to STAY calm. if (H.feral <=0) //check if they're unferalled H.feral = 0 @@ -523,6 +523,7 @@ color = "#caa3c9" /datum/reagent/nutriment/protein/brainzsnax/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() if(prob(5) && !(alien == IS_CHIMERA || alien == IS_SLIME || alien == IS_PLANT || alien == IS_DIONA || alien == IS_SHADEKIN && !M.isSynthetic())) M.adjustBrainLoss(removed) //Any other species risks prion disease. M.Confuse(5) @@ -530,7 +531,7 @@ if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.feral > 0 && H.nutrition > 100 && H.traumatic_shock < min(60, H.nutrition/10) && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling + if(H.feral > 0 && H.nutrition > 150 && H.traumatic_shock < 20 && H.jitteriness < 100) //Same check as feral triggers to stop them immediately re-feralling H.feral -= removed * 3 //Should calm them down quick, provided they're actually in a state to STAY calm. if(H.feral <=0) //Check if they're unferalled H.feral = 0 diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index cceea53713..e77708d51a 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -84,7 +84,7 @@ var/global/list/obj/machinery/message_server/message_servers = list() /obj/machinery/message_server/examine(mob/user, distance, infix, suffix) . = ..() - . += "It appears to be [active ? "online" : "offline"]." + . += "It appears to be [active ? "online" : "offline"]." /obj/machinery/message_server/proc/GenerateKey() //Feel free to move to Helpers. @@ -131,12 +131,12 @@ var/global/list/obj/machinery/message_server/message_servers = list() if(2) if(!Console.silent) playsound(Console, 'sound/machines/twobeep.ogg', 50, 1) - Console.audible_message(text("[bicon(Console)] *The Requests Console beeps: 'PRIORITY Alert in [sender]'"),,5, runemessage = "beep! beep!") + Console.audible_message(text("\icon[Console][bicon(Console)] *The Requests Console beeps: 'PRIORITY Alert in [sender]'"),,5, runemessage = "beep! beep!") Console.message_log += list(list("High Priority message from [sender]", "[authmsg]")) else if(!Console.silent) playsound(Console, 'sound/machines/twobeep.ogg', 50, 1) - Console.audible_message(text("[bicon(Console)] *The Requests Console beeps: 'Message from [sender]'"),,4, runemessage = "beep beep") + Console.audible_message(text("\icon[Console][bicon(Console)] *The Requests Console beeps: 'Message from [sender]'"),,4, runemessage = "beep beep") Console.message_log += list(list("Message from [sender]", "[authmsg]")) Console.set_light(2) diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 53c2f129ea..d7d244bac4 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -259,14 +259,14 @@ return if (src.active) - user.visible_message("[bicon(src)] [user] deactivated the shield generator.", \ - "[bicon(src)] You deactivate the shield generator.", \ + user.visible_message("\icon[src][bicon(src)] [user] deactivated the shield generator.", \ + "\icon[src][bicon(src)] You deactivate the shield generator.", \ "You hear heavy droning fade out.") src.shields_down() else if(anchored) - user.visible_message("[bicon(src)] [user] activated the shield generator.", \ - "[bicon(src)] You activate the shield generator.", \ + user.visible_message("\icon[src][bicon(src)] [user] activated the shield generator.", \ + "\icon[src][bicon(src)] You activate the shield generator.", \ "You hear heavy droning.") src.shields_up() else diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm index b1ba46b57a..2bd6818d25 100644 --- a/code/modules/shieldgen/shield_capacitor.dm +++ b/code/modules/shieldgen/shield_capacitor.dm @@ -49,7 +49,7 @@ else if(W.is_wrench()) src.anchored = !src.anchored playsound(src, W.usesound, 75, 1) - src.visible_message("[bicon(src)] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].") + src.visible_message("\icon[src][bicon(src)] [src] has been [anchored ? "bolted to the floor" : "unbolted from the floor"] by [user].") if(anchored) spawn(0) diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm index bf40ac9052..2617d6c28f 100644 --- a/code/modules/shieldgen/shield_gen.dm +++ b/code/modules/shieldgen/shield_gen.dm @@ -69,7 +69,7 @@ else if(W.is_wrench()) src.anchored = !src.anchored playsound(src, W.usesound, 75, 1) - src.visible_message("[bicon(src)] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user].") + src.visible_message("\icon[src][bicon(src)] [src] has been [anchored?"bolted to the floor":"unbolted from the floor"] by [user].") if(active) toggle() @@ -122,7 +122,7 @@ "failing" = (C.time_since_fail <= 2), ))) lockedData["capacitors"] = caps - + lockedData["active"] = active lockedData["failing"] = (time_since_fail <= 2) lockedData["radius"] = field_radius @@ -242,7 +242,7 @@ covered_turfs = null for(var/mob/M in view(5,src)) - to_chat(M, "[bicon(src)] You hear heavy droning start up.") + to_chat(M, "\icon[src][bicon(src)] You hear heavy droning start up.") for(var/obj/effect/energy_field/E in field) // Update the icons here to ensure all the shields have been made already. E.update_icon() else @@ -252,7 +252,7 @@ qdel(D) for(var/mob/M in view(5,src)) - to_chat(M, "[bicon(src)] You hear heavy droning fade out.") + to_chat(M, "\icon[src][bicon(src)] You hear heavy droning fade out.") /obj/machinery/shield_gen/update_icon() if(stat & BROKEN) diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index acbc8655dc..745dc3e892 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -124,7 +124,14 @@ if(..()) var/obj/item/organ/external/affected = target.get_organ(target_zone) if(istype(user,/mob/living/silicon/robot)) - return + if(istype(tool, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/Gripper = tool + if(Gripper.wrapped) + tool = Gripper.wrapped + else + return + else + return if(affected && affected.cavity) var/total_volume = tool.w_class for(var/obj/item/I in affected.implants) @@ -135,6 +142,9 @@ /datum/surgery_step/cavity/place_item/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = target.get_organ(target_zone) + if(isrobot(user) && istype(tool, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/G = tool + tool = G.wrapped user.visible_message("[user] starts putting \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ "You start putting \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) //Nobody will probably ever see this, but I made these two blue. ~CK target.custom_pain("The pain in your chest is living hell!",1) @@ -142,7 +152,12 @@ /datum/surgery_step/cavity/place_item/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - + if(isrobot(user) && istype(tool, /obj/item/weapon/gripper)) + var/obj/item/weapon/gripper/G = tool + tool = G.wrapped + G.drop_item() + else + user.drop_item() user.visible_message("[user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \ "You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." ) if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && (affected.robotic < ORGAN_ROBOT)) @@ -150,7 +165,6 @@ var/datum/wound/internal_bleeding/I = new (10) affected.wounds += I affected.owner.custom_pain("You feel something rip in your [affected.name]!", 1) - user.drop_item() affected.implants += tool tool.loc = affected if(istype(tool,/obj/item/device/nif)){var/obj/item/device/nif/N = tool;N.implant(target)} //VOREStation Add - NIF support diff --git a/code/modules/tgs/v5/chat_commands.dm b/code/modules/tgs/v5/chat_commands.dm index 53aeb57a3a..5a4386e6da 100644 --- a/code/modules/tgs/v5/chat_commands.dm +++ b/code/modules/tgs/v5/chat_commands.dm @@ -4,8 +4,26 @@ admin_only = FALSE /* YW EDIT: replaced by yw variant /datum/tgs_chat_command/status/Run(datum/tgs_chat_user/sender, params) - return "Current server status:\n**Web Manifest:** \n**Players:** [TGS_CLIENT_COUNT]\n**Round Duration:** [roundduration2text()]" + var/counts = 0 + var/afks = 0 + var/active = 0 + var/bellied = 0 + + for(var/X in GLOB.clients) + var/client/C = X + if(C) + counts++ + if(C && !(istype(C.mob,/mob/new_player) || istype(C.mob, /mob/observer))) + if(C && C.mob && isbelly(C.mob.loc)) + bellied++ + if(C.is_afk()) + afks++ + else + active++ + + return "Current server status:\n**Web Manifest:** \n**Players:** [counts]\n**Active:** [active]\n**AFK:** [afks]\n**Bellied:** [bellied]\n\n**Round Duration:** [roundduration2text()]" */ + /datum/tgs_chat_command/parsetest name = "parsetest" help_text = "Shows the current production server status" @@ -76,13 +94,13 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) query.Execute() if(query.NextRow()) return "[sender.friendly_name], your Discord ID is already registered to a Byond username. Please contact an administrator if you changed your Byond username or Discord ID." - + var/key_to_find = "[ckey(params)]" // They didn't provide anything worth looking up. if(!length(key_to_find)) return "[sender.friendly_name], you need to provide your Byond username at the end of the command. It can be in 'key' format (with spaces and characters) or 'ckey' format (without spaces or special characters)." - + // Try to find their client. var/client/user for(var/client/C in GLOB.clients) @@ -93,7 +111,7 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) // Couldn't find them logged in. if(!user) return "[sender.friendly_name], I couldn't find a logged-in user with the username of '[key_to_find]', which is what you provided after conversion to Byond's ckey format. Please connect to the game server and try again." - + var/sql_ckey = sql_sanitize_text(key_to_find) query = dbcon.NewQuery("SELECT discord_id FROM erro_player WHERE ckey = '[sql_ckey]'") query.Execute() @@ -101,11 +119,11 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) // We somehow found their client, BUT they don't exist in the database if(!query.NextRow()) return "[sender.friendly_name], the server's database is either not responding or there's no evidence you've ever logged in. Please contact an administrator." - + // We found them in the database, AND they already have a discord ID assigned if(query.item[1]) return "[sender.friendly_name], it appears you've already registered your chat and game IDs. If you've changed game or chat usernames, please contact an administrator for help." - + // Okay. We found them, they're in the DB, and they have no discord ID set. var/message = "A request has been sent from Discord to validate your Byond username, by '[sender.friendly_name]' in '[sender.channel.friendly_name]'\
If you did not send this request, do not click the link below, and do notify an administrator in-game or on Discord ASAP.\ @@ -115,13 +133,26 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) // To stifle href hacking GLOB.pending_discord_registrations.len++ GLOB.pending_discord_registrations[GLOB.pending_discord_registrations.len] = list("ckey" = key_to_find, "id" = sender.id, "time" = world.realtime) - + return "[sender.friendly_name], I've sent you a message in-game. Please verify your username there to complete your registration within 10 minutes." //YW Commands //Status /datum/tgs_chat_command/status/Run(datum/tgs_chat_user/sender, params) - return "Current server status:**Players:** [TGS_CLIENT_COUNT]\n**Round Duration:** [roundduration2text()]" + var/counts = 0 + var/afks = 0 + var/active = 0 + + for(var/X in GLOB.clients) + var/client/C = X + if(C) + counts++ + if(C.is_afk()) + afks++ + else + active++ + + return "Current server status: **Players:** [counts]\n**Active:** [active]\n**AFK:** [afks]\n\n**Round Duration:** [roundduration2text()]" // - FAX /datum/tgs_chat_command/readfax @@ -134,4 +165,4 @@ GLOBAL_LIST_EMPTY(pending_discord_registrations) var/list/all_params = splittext(params, " ") var/faxid = all_params[1] var/faxmsg = return_file_text("[config.fax_export_dir]/fax_[faxid].html") - return "FAX: ```[strip_html_properly(faxmsg)]```" \ No newline at end of file + return "FAX: ```[strip_html_properly(faxmsg)]```" diff --git a/code/modules/vchat/css/ss13styles.css b/code/modules/vchat/css/ss13styles.css index b43f33600a..4f1fc8df99 100644 --- a/code/modules/vchat/css/ss13styles.css +++ b/code/modules/vchat/css/ss13styles.css @@ -90,6 +90,8 @@ body.inverted { .pm .other {color: #0000ff;} /* Admin: Channels */ +.mentor {color: #808000;} +.mentor_channel {color: #808000; font-weight: bold;} .mod_channel {color: #735638; font-weight: bold;} .mod_channel .admin {color: #b82e00; font-weight: bold;} .admin_channel {color: #9611D4; font-weight: bold;} diff --git a/code/modules/vchat/js/vchat.js b/code/modules/vchat/js/vchat.js index 4bddf0e212..adccd59712 100644 --- a/code/modules/vchat/js/vchat.js +++ b/code/modules/vchat/js/vchat.js @@ -194,6 +194,14 @@ function start_vue() { admin: false }, //VOREStation Add End + { + matches: ".mentor_channel, .mentor", + becomes: "vc_mentor", + pretty: "Mentor messages", + tooltip: "Mentorchat and mentor pms", + required: false, + admin: false + }, { matches: ".filter_pm, .pm", becomes: "vc_adminpm", diff --git a/code/modules/vchat/vchat_client.dm b/code/modules/vchat/vchat_client.dm index 7520b41abb..0f5ef6a14b 100644 --- a/code/modules/vchat/vchat_client.dm +++ b/code/modules/vchat/vchat_client.dm @@ -316,7 +316,7 @@ GLOBAL_LIST_EMPTY(bicon_cache) // Cache of the tag results, not the icons if(use_class) class = "class='icon [A.icon_state] [custom_classes]'" - return "" + return "" //Checks if the message content is a valid to_chat message /proc/is_valid_tochat_message(message) diff --git a/code/modules/virus2/biohazard destroyer.dm b/code/modules/virus2/biohazard destroyer.dm index eabb3f8c62..fe5bb7c853 100644 --- a/code/modules/virus2/biohazard destroyer.dm +++ b/code/modules/virus2/biohazard destroyer.dm @@ -17,4 +17,4 @@ I.loc = src.loc for(var/mob/O in hearers(src, null)) - O.show_message("[bicon(src)] The [src.name] beeps.", 2) \ No newline at end of file + O.show_message("\icon[src][bicon(src)] The [src.name] beeps.", 2) \ No newline at end of file diff --git a/code/modules/virus2/items_devices.dm b/code/modules/virus2/items_devices.dm index 167a88296c..4fae221b5a 100644 --- a/code/modules/virus2/items_devices.dm +++ b/code/modules/virus2/items_devices.dm @@ -31,7 +31,7 @@ report("Antibodies detected: [antigens2string(C.antibodies)]", user) /obj/item/device/antibody_scanner/proc/report(var/text, mob/user as mob) - to_chat(user, "[bicon(src)] \The [src] beeps, \"[text]\"") + to_chat(user, "\icon[src][bicon(src)] \The [src] beeps, \"[text]\"") ///////////////VIRUS DISH/////////////// diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 6ffdd0cca5..4f494192cd 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -16,6 +16,7 @@ desc = "It's a belly! You're in it!" // Flavor text description of inside sight/sound/smells/feels. var/vore_sound = "Gulp" // Sound when ingesting someone var/vore_verb = "ingest" // Verb for eating with this in messages + var/release_verb = "expels" // Verb for releasing something from a stomach var/human_prey_swallow_time = 100 // Time in deciseconds to swallow /mob/living/carbon/human var/nonhuman_prey_swallow_time = 30 // Time in deciseconds to swallow anything else var/nutrition_percent = 100 // Nutritional percentage per tick in digestion mode @@ -30,7 +31,7 @@ var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles. var/transferchance = 0 // % Chance of prey being trasnsfered, goes from 0-100% var/transferchance_secondary = 0 // % Chance of prey being transfered to transferchance_secondary, also goes 0-100% - var/save_digest_mode = TRUE // Whether this belly's digest mode persists across rounds + var/save_digest_mode = TRUE // Whether this belly's digest mode persists across rounds var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone. var/bulge_size = 0.25 // The minimum size the prey has to be in order to show up on examine. var/display_absorbed_examine = FALSE // Do we display absorption examine messages for this belly at all? @@ -50,6 +51,7 @@ var/emote_time = 60 // How long between stomach emotes at prey (in seconds) var/emote_active = TRUE // Are we even giving emotes out at all or not? var/next_emote = 0 // When we're supposed to print our next emote, as a world.time + var/selective_preference = DM_DIGEST // Which type of selective bellymode do we default to? // Generally just used by AI var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location @@ -58,7 +60,7 @@ //I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere. //Actual full digest modes - var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG) + var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_SELECT,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG) //Digest mode addon flags var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS, "Complete Absorb" = DM_FLAG_FORCEPSAY) //Item related modes @@ -164,6 +166,7 @@ "absorbed_desc", "vore_sound", "vore_verb", + "release_verb", "human_prey_swallow_time", "nonhuman_prey_swallow_time", "emote_time", @@ -200,6 +203,7 @@ "emote_lists", "emote_time", "emote_active", + "selective_preference", "mode_flags", "item_digest_mode", "contaminates", @@ -343,7 +347,7 @@ //Print notifications/sound if necessary if(!silent && count) - owner.visible_message("[owner] expels everything from their [lowertext(name)]!") + owner.visible_message("[owner] [release_verb] everything from their [lowertext(name)]!") var/soundfile if(!fancy_vore) soundfile = classic_release_sounds[release_sound] @@ -411,7 +415,7 @@ //Print notifications/sound if necessary if(!silent) - owner.visible_message("[owner] expels [M] from their [lowertext(name)]!") + owner.visible_message("[owner] [release_verb] [M] from their [lowertext(name)]!") var/soundfile if(!fancy_vore) soundfile = classic_release_sounds[release_sound] @@ -1094,6 +1098,7 @@ dupe.absorbed_desc = absorbed_desc dupe.vore_sound = vore_sound dupe.vore_verb = vore_verb + dupe.release_verb = release_verb dupe.human_prey_swallow_time = human_prey_swallow_time dupe.nonhuman_prey_swallow_time = nonhuman_prey_swallow_time dupe.emote_time = emote_time @@ -1128,6 +1133,7 @@ dupe.egg_type = egg_type dupe.emote_time = emote_time dupe.emote_active = emote_active + dupe.selective_preference = selective_preference dupe.save_digest_mode = save_digest_mode //// Object-holding variables diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index ef09c033a3..6eb115e044 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -57,9 +57,9 @@ GLOBAL_LIST_INIT(digest_modes, list()) var/mob/living/silicon/robot/R = B.owner R.cell.charge += 25 * damage_gain if(offset) // If any different than default weight, multiply the % of offset. - B.owner.adjust_nutrition(offset*(4.5 * (damage_gain) / difference)) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved. + B.owner.adjust_nutrition(offset*(4.5 * (damage_gain) / difference)*L.get_digestion_nutrition_modifier()) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved. else - B.owner.adjust_nutrition(4.5 * (damage_gain) / difference) + B.owner.adjust_nutrition((4.5 * (damage_gain) / difference)*L.get_digestion_nutrition_modifier()) if(L.stat != oldstat) return list("to_update" = TRUE) @@ -218,3 +218,40 @@ GLOBAL_LIST_INIT(digest_modes, list()) B.ownegg = null return list("to_update" = TRUE) return + +/datum/digest_mode/selective //unselectable, "smart" digestion mode for mobs only + id = DM_SELECT + +/datum/digest_mode/selective/process_mob(obj/belly/B, mob/living/L) + var/datum/digest_mode/tempmode = GLOB.digest_modes[DM_HOLD] // Default to Hold in case of big oof fallback + //if not absorbed, see if they're food + switch(L.selective_preference) // First, we respect prey prefs + if(DM_DIGEST) + if(L.digestable) + tempmode = GLOB.digest_modes[DM_DIGEST] // They want to be digested and can be, Digest + else + tempmode = GLOB.digest_modes[DM_DRAIN] // They want to be digested but can't be! Drain. + if(DM_ABSORB) + if(L.absorbable) + tempmode = GLOB.digest_modes[DM_ABSORB] // They want to be absorbed and can be. Absorb. + else + tempmode = GLOB.digest_modes[DM_DRAIN] // They want to be absorbed but can't be! Drain. + if(DM_DRAIN) + tempmode = GLOB.digest_modes[DM_DRAIN] // They want to be drained. Drain. + if(DM_DEFAULT) + switch(B.selective_preference) // They don't actually care? Time for our own preference. + if(DM_DIGEST) + if(L.digestable) + tempmode = GLOB.digest_modes[DM_DIGEST] // We prefer digestion and they're digestible? Digest + else if(L.absorbable) + tempmode = GLOB.digest_modes[DM_ABSORB] // If not digestible, are they absorbable? Then absorb. + else + tempmode = GLOB.digest_modes[DM_DRAIN] // Otherwise drain. + if(DM_ABSORB) + if(L.absorbable) + tempmode = GLOB.digest_modes[DM_ABSORB] // We prefer absorption and they're absorbable? Absorb. + else if(L.digestable) + tempmode = GLOB.digest_modes[DM_DIGEST] // If not absorbable, are they digestible? Then digest. + else + tempmode = GLOB.digest_modes[DM_DRAIN] // Otherwise drain. + return tempmode.process_mob(B, L) diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 3435541f19..e2c244be53 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -106,7 +106,7 @@ if(emote_active) var/list/EL = emote_lists[digest_mode] - if((LAZYLEN(EL) || LAZYLEN(emote_lists[DM_HOLD_ABSORBED]) || (digest_mode == DM_DIGEST && LAZYLEN(emote_lists[DM_HOLD]))) && next_emote <= world.time) + if((LAZYLEN(EL) || LAZYLEN(emote_lists[DM_HOLD_ABSORBED]) || (digest_mode == DM_DIGEST && LAZYLEN(emote_lists[DM_HOLD])) || (digest_mode == DM_SELECT && (LAZYLEN(emote_lists[DM_HOLD])||LAZYLEN(emote_lists[DM_DIGEST])||LAZYLEN(emote_lists[DM_ABSORB])) )) && next_emote <= world.time) var/living_count = 0 var/absorbed_count = 0 for(var/mob/living/L in contents) @@ -127,7 +127,14 @@ if(formatted_message) to_chat(M, "[formatted_message]") else - if(digest_mode == DM_DIGEST && !M.digestable) + if (digest_mode == DM_SELECT) + if (M.digestable) + EL = emote_lists[DM_DIGEST] + else if (M.absorbable) + EL = emote_lists[DM_ABSORB] + else + EL = emote_lists[DM_HOLD] + else if(digest_mode == DM_DIGEST && !M.digestable) EL = emote_lists[DM_HOLD] // Use Hold's emote list if we're indigestible var/raw_message = pick(EL) @@ -283,6 +290,8 @@ if(M.ckey) GLOB.prey_digested_roundstat++ + var/personal_nutrition_modifier = M.get_digestion_nutrition_modifier() + if((mode_flags & DM_FLAG_LEAVEREMAINS) && M.digest_leave_remains) handle_remains_leaving(M) digestion_death(M) @@ -290,9 +299,9 @@ owner.update_icons() if(isrobot(owner)) var/mob/living/silicon/robot/R = owner - R.cell.charge += (nutrition_percent / 100) * compensation * 25 + R.cell.charge += (nutrition_percent / 100) * compensation * 25 * personal_nutrition_modifier else - owner.adjust_nutrition((nutrition_percent / 100) * compensation * 4.5) + owner.adjust_nutrition((nutrition_percent / 100) * compensation * 4.5 * personal_nutrition_modifier) /obj/belly/proc/steal_nutrition(mob/living/L) if(L.nutrition >= 100) diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm index 3e76a34101..9e8851bdfb 100644 --- a/code/modules/vore/eating/digest_act_vr.dm +++ b/code/modules/vore/eating/digest_act_vr.dm @@ -9,6 +9,9 @@ var/obj/item/device/pda/P = src if(P.id) P.id = null + + for(var/mob/living/voice/V in possessed_voice) // Delete voices. + V.Destroy() //Destroy the voice. for(var/mob/living/M in contents)//Drop mobs from objects(shoes) before deletion M.forceMove(item_storage) for(var/obj/item/O in contents) @@ -40,6 +43,8 @@ var/obj/item/device/pda/P = src if(P.id) P.id = null + for(var/mob/living/voice/V in possessed_voice) // Delete voices. + V.Destroy() //Destroy the voice. for(var/mob/living/M in contents)//Drop mobs from objects(shoes) before deletion M.forceMove(item_storage) for(var/obj/item/O in contents) @@ -96,7 +101,8 @@ icon = 'icons/obj/card_vr.dmi' icon_state = "[initial(icon_state)]_digested" else - sprite_stack += "digested" + if(!sprite_stack.Find("digested")) + sprite_stack += "digested" update_icon() return FALSE diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index d1435cbfbf..224f055f44 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -31,6 +31,8 @@ var/absorbing_prey = 0 // Determines if the person is using the succubus drain or not. See station_special_abilities_vr. var/drain_finalized = 0 // Determines if the succubus drain will be KO'd/absorbed. Can be toggled on at any time. var/fuzzy = 0 // Preference toggle for sharp/fuzzy icon. + var/voice_freq = 0 // Preference for character voice frequency + var/list/voice_sounds_list = list() // The sound list containing our voice sounds! var/permit_healbelly = TRUE var/stumble_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway var/slip_vore = TRUE //Enabled by default since you have to enable drop pred/prey to do this anyway @@ -43,6 +45,7 @@ var/adminbus_eat_minerals = FALSE // This creature subsists on a diet of pure adminium. var/vis_height = 32 // Sprite height used for resize features. var/show_vore_fx = TRUE // Show belly fullscreens + var/selective_preference = DM_DEFAULT // Preference for selective bellymode var/regen_sounds = list( 'sound/effects/mob_effects/xenochimera/regen_1.ogg', 'sound/effects/mob_effects/xenochimera/regen_2.ogg', @@ -53,8 +56,8 @@ var/nutrition_message_visible = TRUE var/list/nutrition_messages = list( - "They are starving! You can hear their stomach snarling from across the room!" = 1, - "They are extremely hungry. A deep growl occasionally rumbles from their empty stomach." = 2, + "They are starving! You can hear their stomach snarling from across the room!", + "They are extremely hungry. A deep growl occasionally rumbles from their empty stomach.", "", "They have a stuffed belly, bloated fat and round from eating too much.", "They have a rotund, thick gut. It bulges from their body obscenely, close to sagging under its own weight.", @@ -261,6 +264,7 @@ P.vore_smell = src.vore_smell P.permit_healbelly = src.permit_healbelly P.noisy = src.noisy + P.selective_preference = src.selective_preference P.show_vore_fx = src.show_vore_fx P.can_be_drop_prey = src.can_be_drop_prey P.can_be_drop_pred = src.can_be_drop_pred @@ -305,6 +309,7 @@ vore_taste = P.vore_taste vore_smell = P.vore_smell permit_healbelly = P.permit_healbelly + selective_preference = P.selective_preference noisy = P.noisy show_vore_fx = P.show_vore_fx can_be_drop_prey = P.can_be_drop_prey @@ -506,8 +511,23 @@ crystal.bound_mob = null crystal.bound_mob = capture_crystal = 0 log_and_message_admins("[key_name(src)] used the OOC escape button to get out of [crystal] owned by [crystal.owner]. [ADMIN_FLW(src)]") + + //You've been turned into an item! + else if(tf_mob_holder && istype(src, /mob/living/voice) && istype(src.loc, /obj/item)) + var/obj/item/item_to_destroy = src.loc //If so, let's destroy the item they just TF'd out of. + if(istype(src.loc, /obj/item/clothing)) //Are they in clothes? Delete the item then revert them. + qdel(item_to_destroy) + log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into an object.") + revert_mob_tf() + else //Are they in any other type of object? If qdel is done first, the mob is deleted from the world. + forceMove(get_turf(src)) + qdel(item_to_destroy) + log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into an object.") + revert_mob_tf() + + //You've been turned into a mob! else if(tf_mob_holder) - log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into another mob. [ADMIN_FLW(src)]") + log_and_message_admins("[key_name(src)] used the OOC escape button to revert back to their original form from being TFed into another mob.") revert_mob_tf() //Don't appear to be in a vore situation else @@ -704,6 +724,9 @@ /obj/item var/trash_eatable = TRUE +/mob/living/proc/get_digestion_nutrition_modifier() + return 1 + /mob/living/proc/eat_trash() set name = "Eat Trash" set category = "Abilities" @@ -792,7 +815,7 @@ to_chat(src, "You can taste the flavor of aromatic rolling paper and funny looks.") else if(istype(I,/obj/item/weapon/paper)) to_chat(src, "You can taste the dry flavor of bureaucracy.") - else if(istype(I,/obj/item/weapon/dice)) + else if(istype(I,/obj/item/weapon/dice) || istype(I,/obj/item/roulette_ball)) to_chat(src, "You can taste the bitter flavor of cheating.") else if(istype(I,/obj/item/weapon/lipstick)) to_chat(src, "You can taste the flavor of couture and style. Toddler at the make-up bag style.") @@ -1008,6 +1031,7 @@ dispvoreprefs += "Leaves Remains: [digest_leave_remains ? "Enabled" : "Disabled"]
" dispvoreprefs += "Mob Vore: [allowmobvore ? "Enabled" : "Disabled"]
" dispvoreprefs += "Healbelly permission: [permit_healbelly ? "Allowed" : "Disallowed"]
" + dispvoreprefs += "Selective Mode Pref: [src.selective_preference]
" dispvoreprefs += "Spontaneous vore prey: [can_be_drop_prey ? "Enabled" : "Disabled"]
" dispvoreprefs += "Spontaneous vore pred: [can_be_drop_pred ? "Enabled" : "Disabled"]
" dispvoreprefs += "Drop Vore: [drop_vore ? "Enabled" : "Disabled"]
" @@ -1038,6 +1062,7 @@ to_chat(src, "Belly desc: [B.desc]") to_chat(src, "Belly absorbed desc: [B.absorbed_desc]") to_chat(src, "Vore verb: [B.vore_verb]") + to_chat(src, "Release verb: [B.release_verb]") to_chat(src, "Struggle messages (outside):") for(var/msg in B.struggle_messages_outside) to_chat(src, "[msg]") diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index b4d4ef8c7b..ab5ec6bd96 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -70,11 +70,13 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/vore_taste = "nothing in particular" var/vore_smell = "nothing in particular" + var/selective_preference = DM_DEFAULT + var/nutrition_message_visible = TRUE var/list/nutrition_messages = list( - "They are starving! You can hear their stomach snarling from across the room!" = 1, - "They are extremely hungry. A deep growl occasionally rumbles from their empty stomach." = 2, + "They are starving! You can hear their stomach snarling from across the room!", + "They are extremely hungry. A deep growl occasionally rumbles from their empty stomach.", "", "They have a stuffed belly, bloated fat and round from eating too much.", "They have a rotund, thick gut. It bulges from their body obscenely, close to sagging under its own weight.", @@ -168,6 +170,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE vore_smell = json_from_file["vore_smell"] permit_healbelly = json_from_file["permit_healbelly"] noisy = json_from_file["noisy"] + selective_preference = json_from_file["selective_preference"] show_vore_fx = json_from_file["show_vore_fx"] can_be_drop_prey = json_from_file["can_be_drop_prey"] can_be_drop_pred = json_from_file["can_be_drop_pred"] @@ -201,6 +204,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE allowmobvore = TRUE if(isnull(permit_healbelly)) permit_healbelly = TRUE + if(isnull(selective_preference)) + selective_preference = DM_DEFAULT if (isnull(noisy)) noisy = FALSE if(isnull(show_vore_fx)) @@ -274,6 +279,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "vore_smell" = vore_smell, "permit_healbelly" = permit_healbelly, "noisy" = noisy, + "selective_preference" = selective_preference, "show_vore_fx" = show_vore_fx, "can_be_drop_prey" = can_be_drop_prey, "can_be_drop_pred" = can_be_drop_pred, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 19ca08a71c..be65e90cda 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -163,6 +163,7 @@ "mode" = selected.digest_mode, "item_mode" = selected.item_digest_mode, "verb" = selected.vore_verb, + "release_verb" = selected.release_verb, "desc" = selected.desc, "absorbed_desc" = selected.absorbed_desc, "fancy" = selected.fancy_vore, @@ -181,6 +182,7 @@ "shrink_grow_size" = selected.shrink_grow_size, "emote_time" = selected.emote_time, "emote_active" = selected.emote_active, + "selective_preference" = selected.selective_preference, "nutrition_ex" = host.nutrition_message_visible, "weight_ex" = host.weight_message_visible, "belly_fullscreen" = selected.belly_fullscreen, @@ -487,6 +489,14 @@ host.stumble_vore = !host.stumble_vore unsaved_changes = TRUE return TRUE + if("switch_selective_mode_pref") + host.selective_preference = tgui_input_list(usr, "What would you prefer happen to you with selective bellymode?","Selective Bellymode", list(DM_DEFAULT, DM_DIGEST, DM_ABSORB, DM_DRAIN)) + if(!(host.selective_preference)) + host.selective_preference = DM_DEFAULT + if(host.client.prefs_vr) + host.client.prefs_vr.selective_preference = host.selective_preference + unsaved_changes = TRUE + return TRUE if("toggle_nutrition_ex") host.nutrition_message_visible = !host.nutrition_message_visible unsaved_changes = TRUE @@ -580,7 +590,7 @@ //Handle the [All] choice. Ugh inelegant. Someone make this pretty. if(params["pickall"]) - intent = tgui_alert(usr, "Eject all, Move all?","Query",list("Eject all","Cancel","Move all")) + intent = tgui_alert(user, "Eject all, Move all?","Query",list("Eject all","Cancel","Move all")) switch(intent) if("Cancel") return TRUE @@ -598,7 +608,7 @@ to_chat(user,"You can't do that in your state!") return TRUE - var/obj/belly/choice = tgui_input_list(usr, "Move all where?","Select Belly", host.vore_organs) + var/obj/belly/choice = tgui_input_list(user, "Move all where?","Select Belly", host.vore_organs) if(!choice) return FALSE @@ -611,10 +621,10 @@ var/atom/movable/target = locate(params["pick"]) if(!(target in host.vore_selected)) return TRUE // Not in our X anymore, update UI - var/list/available_options = list("Examine", "Eject", "Move") + var/list/available_options = list("Examine", "Eject", "Move", "Transfer") if(ishuman(target)) available_options += "Transform" - intent = tgui_alert(user, "What would you like to do with [target]?", "Vore Pick", available_options, strict_byond = TRUE) + intent = tgui_input_list(user, "What would you like to do with [target]?", "Vore Pick", available_options) switch(intent) if("Examine") var/list/results = target.examine(host) @@ -635,13 +645,51 @@ if(host.stat) to_chat(user,"You can't do that in your state!") return TRUE - var/obj/belly/choice = tgui_input_list(usr, "Move [target] where?","Select Belly", host.vore_organs) if(!choice || !(target in host.vore_selected)) return TRUE - to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!") host.vore_selected.transfer_contents(target, choice) + + + if("Transfer") + if(host.stat) + to_chat(user,"You can't do that in your state!") + return TRUE + + var/mob/living/belly_owner = host + + var/list/viable_candidates = list() + for(var/mob/living/candidate in range(1, host)) + if(istype(candidate) && !(candidate == host)) + if(candidate.vore_organs.len && candidate.feeding && !candidate.no_vore) + viable_candidates += candidate + if(!viable_candidates.len) + to_chat(user, "There are no viable candidates around you!") + return TRUE + belly_owner = tgui_input_list(user, "Who do you want to recieve the target?", "Select Predator", viable_candidates) + + if(!belly_owner || !(belly_owner in range(1, host))) + return TRUE + + var/obj/belly/choice = tgui_input_list(user, "Move [target] where?","Select Belly", belly_owner.vore_organs) + if(!choice || !(target in host.vore_selected) || !belly_owner || !(belly_owner in range(1, host))) + return TRUE + + if(belly_owner != host) + to_chat(user, "Transfer offer sent. Await their response.") + var/accepted = tgui_alert(belly_owner, "[host] is trying to transfer [target] from their [lowertext(host.vore_selected.name)] into your [lowertext(choice.name)]. Do you accept?", "Feeding Offer", list("Yes", "No")) + if(accepted != "Yes") + to_chat(user, "[belly_owner] refused the transfer!!") + return TRUE + if(!belly_owner || !(belly_owner in range(1, host))) + return TRUE + to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to [belly_owner]'s [lowertext(choice.name)]!") + to_chat(belly_owner,"[target] is squished from [host]'s [lowertext(host.vore_selected.name)] to your [lowertext(choice.name)]!") + host.vore_selected.transfer_contents(target, choice) + else + to_chat(target,"You're squished from [host]'s [lowertext(host.vore_selected.name)] to their [lowertext(choice.name)]!") + host.vore_selected.transfer_contents(target, choice) return TRUE if("Transform") @@ -932,6 +980,15 @@ host.vore_selected.vore_verb = new_verb . = TRUE + if("b_release_verb") + var/new_release_verb = html_encode(tgui_input_text(usr,"New verb when releasing from stomach (e.g. expels or coughs or drops):","New Release Verb")) + + if(length(new_release_verb) > BELLIES_NAME_MAX || length(new_release_verb) < BELLIES_NAME_MIN) + tgui_alert_async(usr, "Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error") + return FALSE + + host.vore_selected.release_verb = new_release_verb + . = TRUE if("b_fancy_sound") host.vore_selected.fancy_vore = !host.vore_selected.fancy_vore host.vore_selected.vore_sound = "Gulp" @@ -1041,6 +1098,12 @@ if("b_emoteactive") host.vore_selected.emote_active = !host.vore_selected.emote_active . = TRUE + if("b_selective_mode_pref_toggle") + if(host.vore_selected.selective_preference == DM_DIGEST) + host.vore_selected.selective_preference = DM_ABSORB + else + host.vore_selected.selective_preference = DM_DIGEST + . = TRUE if("b_emotetime") var/new_time = tgui_input_number(user, "Choose the period it takes for idle belly emotes to be shown to prey. Measured in seconds, Minimum 1 minute, Maximum 10 minutes.", "Set Belly Emote Delay.", host.vore_selected.digest_brute, 600, 60) if(new_time == null) diff --git a/code/modules/vore/fluffstuff/custom_clothes_vr.dm b/code/modules/vore/fluffstuff/custom_clothes_vr.dm index dd570ad0b1..7d148099e8 100644 --- a/code/modules/vore/fluffstuff/custom_clothes_vr.dm +++ b/code/modules/vore/fluffstuff/custom_clothes_vr.dm @@ -2096,14 +2096,14 @@ Departamental Swimsuits, for general use translocator_unequip(translocator, user) T.forceMove(src) translocator = T - user.show_message("[bicon(src)]*click!*") + user.show_message("\icon[src][bicon(src)]*click!*") playsound(src, 'sound/machines/click.ogg', 30, 1) /obj/item/clothing/head/fluff/nikki/proc/translocator_unequip(var/obj/item/device/perfect_tele/T, var/mob/living/carbon/human/user) if (translocator) if (user) user.put_in_hands(T) - user.show_message("[bicon(src)]*click!*") + user.show_message("\icon[src][bicon(src)]*click!*") else translocator.forceMove(get_turf(src)) translocator = null @@ -2486,4 +2486,26 @@ Departamental Swimsuits, for general use desc = "Appearing in a classic Jordan Brand colorway, the Air Jordan 1 Mid 'Black Gym Red' released in May 2021. Built with leather, the shoe's upper sports a white base, contrasted by black on the overlays and highlighted by Gym Red on the padded collar, 'Wings' logo and Swoosh branding. A breathable nylon tongue and perforated toe box support the fit, while underfoot, a standard rubber cupsole with Air in the heel anchors the build." icon_state = "airjordans" icon = 'icons/vore/custom_clothes_vr.dmi' - icon_override = 'icons/vore/custom_onmob_vr.dmi' \ No newline at end of file + icon_override = 'icons/vore/custom_onmob_vr.dmi' + +//Pandora029:Seona Young +/obj/item/clothing/under/fluff/foxoflightsuit + name = "padded flightsui" + desc = "A ruddy-orange combination immersion-and-flight suit, fitted with extra padding across the front of its legs. Warm, waterproof and practical, seveal patches are scattered across it alongside a hard-wearing harness." + + icon = 'icons/vore/custom_clothes_vr.dmi' + icon_state = "foxflightsuit" + worn_state = "foxflightsuit_mob" + rolled_sleeves = 0 + rolled_down = 0 + + icon_override = 'icons/vore/custom_clothes_vr.dmi' + item_state = "foxflightsuit_mob" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS + +//Shalax: Cerise Duelliste +/obj/item/weapon/storage/belt/security/fluff/cerise + name = "champion's belt" + desc = "Cerise's hard-won belt from her glory days. Her skill might have waned since then, but her renown lives on." + icon_state = "champion" + item_state = null // i swear to god this works - hatterhat diff --git a/code/modules/vore/mouseray.dm b/code/modules/vore/mouseray.dm index dc9e503cd1..d1d2b23a52 100644 --- a/code/modules/vore/mouseray.dm +++ b/code/modules/vore/mouseray.dm @@ -230,6 +230,7 @@ new_mob.allowmobvore = allowmobvore new_mob.permit_healbelly = permit_healbelly new_mob.noisy = noisy + new_mob.selective_preference = selective_preference new_mob.drop_vore = drop_vore new_mob.stumble_vore = stumble_vore new_mob.slip_vore = slip_vore @@ -268,6 +269,22 @@ tf_admin_pref_override = FALSE /obj/item/projectile/beam/mouselaser/reversion/on_hit(var/atom/target) + if(istype(target,/obj/item)) //Are we shooting an item? + var/obj/item/O = target + if(O.possessed_voice.len) //Does the object have a voice? AKA, if someone inhabiting it? + for(var/mob/living/M in O.possessed_voice) + if(M.tf_mob_holder) //Is this item possessed by IC methods? + if(istype(M.loc, /obj/item/clothing)) //Are they in clothes? Delete the item then revert them. + qdel(O) + M.revert_mob_tf() //Voices can't eat, so this is the least intensive way to revert them. + else + M.forceMove(get_turf(O)) //Non-clothing items require a bit extra work since they don't drop contents when qdeleted. + qdel(O) + M.revert_mob_tf() + else + continue //In case they have multiple voices through adminbus. + else + return var/mob/living/M = target if(!istype(M)) return diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index 9882ea11b6..02b444febd 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -39,12 +39,20 @@ * but in the future we may also incorporate the "mob_size", so that * a macro mouse is still only effectively "normal" or a micro dragon is still large etc. */ -/mob/proc/get_effective_size() +/mob/proc/get_effective_size(var/micro = FALSE) return 100000 //Whatever it is, it's too big to pick up, or it's a ghost, or something. -/mob/living/get_effective_size() +/mob/living/get_effective_size(var/micro = FALSE) return size_multiplier +/mob/living/carbon/human/get_effective_size(var/micro = FALSE) // Set micro to TRUE for interactions where you're small, to FALSE for ones where you're large. + var/effective_size = size_multiplier + if(micro) + effective_size += species.micro_size_mod + else + effective_size += species.macro_size_mod + return effective_size + /atom/movable/proc/size_range_check(size_select) //both objects and mobs needs to have that var/area/A = get_area(src) //Get the atom's area to check for size limit. if((A?.limit_mob_size && (size_select > 200 || size_select < 25)) || (size_select > 600 || size_select <1)) @@ -163,7 +171,7 @@ return 0 if(!(M.a_intent == I_HELP)) return 0 - var/size_diff = M.get_effective_size() - get_effective_size() + var/size_diff = M.get_effective_size(FALSE) - get_effective_size(TRUE) if(!holder_default && holder_type) holder_default = holder_type if(!istype(M)) @@ -197,16 +205,16 @@ return TRUE //Both small! Go ahead and go. - if(get_effective_size() <= RESIZE_A_SMALLTINY && tmob.get_effective_size() <= RESIZE_A_SMALLTINY) + if(get_effective_size(TRUE) <= RESIZE_A_SMALLTINY && tmob.get_effective_size(TRUE) <= RESIZE_A_SMALLTINY) // For help intent interaction just assume both are 'smol' return TRUE //Worthy of doing messages at all - if(abs(get_effective_size() - tmob.get_effective_size()) >= 0.50) + if(abs(get_effective_size(TRUE) - tmob.get_effective_size(TRUE)) >= 0.50) var/src_message = null var/tmob_message = null //Smaller person being stepped onto - if(get_effective_size() > tmob.get_effective_size() && ishuman(src)) + if(get_effective_size(TRUE) > tmob.get_effective_size(TRUE) && ishuman(src)) src_message = "You carefully step over [tmob]." tmob_message = "[src] steps over you carefully!" var/mob/living/carbon/human/H = src @@ -218,7 +226,7 @@ tmob_message = tail.msg_prey_help_run //Smaller person stepping under larger person - else if(get_effective_size() < tmob.get_effective_size() && ishuman(tmob)) + else if(get_effective_size(TRUE) < tmob.get_effective_size(TRUE) && ishuman(tmob)) src_message = "You run between [tmob]'s legs." tmob_message = "[src] runs between your legs." var/mob/living/carbon/human/H = tmob @@ -269,7 +277,7 @@ // We need to be above a certain size ratio in order to do anything to the prey. // For DISARM and HURT intent, this is >=0.75, for GRAB it is >=0.5 - var/size_ratio = get_effective_size() - tmob.get_effective_size() + var/size_ratio = get_effective_size(FALSE) - tmob.get_effective_size(TRUE) if(a_intent == I_GRAB && size_ratio < 0.5) return FALSE if((a_intent == I_DISARM || a_intent == I_HURT) && size_ratio < 0.75) diff --git a/code/modules/vore/resizing/sizegun_slow_vr.dm b/code/modules/vore/resizing/sizegun_slow_vr.dm index 5a267cb6da..d6edc19361 100644 --- a/code/modules/vore/resizing/sizegun_slow_vr.dm +++ b/code/modules/vore/resizing/sizegun_slow_vr.dm @@ -50,16 +50,16 @@ if(unresizable) return TRUE - if(!(target.has_large_resize_bounds()) && (target.get_effective_size() >= RESIZE_MAXIMUM) && sizeshift_mode == SIZE_GROW) + if(!(target.has_large_resize_bounds()) && (target.size_multiplier >= RESIZE_MAXIMUM) && sizeshift_mode == SIZE_GROW) return TRUE - if(target.get_effective_size() >= RESIZE_MAXIMUM_DORMS && sizeshift_mode == SIZE_GROW) + if(target.size_multiplier >= RESIZE_MAXIMUM_DORMS && sizeshift_mode == SIZE_GROW) return TRUE - if(!(target.has_large_resize_bounds()) && (target.get_effective_size() <= RESIZE_MINIMUM) && sizeshift_mode == SIZE_SHRINK) + if(!(target.has_large_resize_bounds()) && (target.size_multiplier <= RESIZE_MINIMUM) && sizeshift_mode == SIZE_SHRINK) return TRUE - if(target.get_effective_size() <= RESIZE_MINIMUM_DORMS && sizeshift_mode == SIZE_SHRINK) + if(target.size_multiplier <= RESIZE_MINIMUM_DORMS && sizeshift_mode == SIZE_SHRINK) return TRUE return FALSE @@ -123,9 +123,9 @@ stoplag(3) if(sizeshift_mode == SIZE_SHRINK) - L.resize((L.get_effective_size() - size_increment), uncapped = L.has_large_resize_bounds(), aura_animation = FALSE) + L.resize((L.size_multiplier - size_increment), uncapped = L.has_large_resize_bounds(), aura_animation = FALSE) else if(sizeshift_mode == SIZE_GROW) - L.resize((L.get_effective_size() + size_increment), uncapped = L.has_large_resize_bounds(), aura_animation = FALSE) + L.resize((L.size_multiplier + size_increment), uncapped = L.has_large_resize_bounds(), aura_animation = FALSE) busy = FALSE current_target = null diff --git a/code/modules/vore/smoleworld/smoleworld_vr.dm b/code/modules/vore/smoleworld/smoleworld_vr.dm index f9d1c92a64..ae44a9ab2b 100644 --- a/code/modules/vore/smoleworld/smoleworld_vr.dm +++ b/code/modules/vore/smoleworld/smoleworld_vr.dm @@ -19,9 +19,9 @@ var/mob/living/L = A if(L.hovering) // Flying things shouldn't make footprints. return ..() - if(L.get_effective_size() <= RESIZE_NORMAL) + if(L.get_effective_size(FALSE) <= RESIZE_NORMAL) return ..() - if(L.get_effective_size() >= RESIZE_A_BIGNORMAL) + if(L.get_effective_size(FALSE) >= RESIZE_A_BIGNORMAL) playsound(src, 'sound/effects/footstep/giantstep_gigga.ogg', 35, 1, -1, volume_channel = VOLUME_CHANNEL_MASTER) var/mdir = "[A.dir]" crossed_dirs[mdir] = 1 @@ -365,7 +365,7 @@ // . = ..() // if(.) // -// if(M.get_effective_size() > RESIZE_TINY) +// if(M.get_effective_size(TRUE) > RESIZE_TINY) // to_chat(M, SPAN_WARNING("You are to big to fit in \the [src].")) // . = FALSE // diff --git a/code/modules/xenoarcheaology/artifacts/artifact_find.dm b/code/modules/xenoarcheaology/artifacts/artifact_find.dm index fe91bbadbc..dcbe6bea84 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact_find.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact_find.dm @@ -13,6 +13,7 @@ 25;/obj/machinery/power/supermatter/shard, 100;/obj/machinery/auto_cloner, 100;/obj/machinery/giga_drill, - 100;/obj/machinery/replicator, + 100;/obj/machinery/replicator/clothing, //VOREStation Edit: use virgo-specific subtype that allows TF into items. + 100;/obj/machinery/replicator/vore, //VOREStation Edit: use virgo-specific subtype that allows TF into mobs. 150;/obj/structure/crystal, 1000;/obj/machinery/artifact) diff --git a/code/modules/xenoarcheaology/artifacts/autocloner.dm b/code/modules/xenoarcheaology/artifacts/autocloner.dm index 96195fd700..03ece599dd 100644 --- a/code/modules/xenoarcheaology/artifacts/autocloner.dm +++ b/code/modules/xenoarcheaology/artifacts/autocloner.dm @@ -46,17 +46,17 @@ if(!previous_power_state) previous_power_state = 1 icon_state = "cellold1" - src.visible_message("[bicon(src)] [src] suddenly comes to life!") + src.visible_message("\icon[src][bicon(src)] [src] suddenly comes to life!") //slowly grow a mob if(prob(5)) - src.visible_message("[bicon(src)] [src] [pick("gloops","glugs","whirrs","whooshes","hisses","purrs","hums","gushes")].") + src.visible_message("\icon[src][bicon(src)] [src] [pick("gloops","glugs","whirrs","whooshes","hisses","purrs","hums","gushes")].") //if we've finished growing... if(time_spent_spawning >= time_per_spawn) time_spent_spawning = 0 update_use_power(USE_POWER_IDLE) - src.visible_message("[bicon(src)] [src] pings!") + src.visible_message("\icon[src][bicon(src)] [src] pings!") icon_state = "cellold1" desc = "It's full of a bubbling viscous liquid, and is lit by a mysterious glow." if(spawn_type) @@ -77,7 +77,7 @@ if(previous_power_state) previous_power_state = 0 icon_state = "cellold0" - src.visible_message("[bicon(src)] [src] suddenly shuts down.") + src.visible_message("\icon[src][bicon(src)] [src] suddenly shuts down.") //cloned mob slowly breaks down time_spent_spawning = max(time_spent_spawning + last_process - world.time, 0) diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm index f3ad6d674c..d6796c6ad1 100644 --- a/code/modules/xenoarcheaology/artifacts/replicator.dm +++ b/code/modules/xenoarcheaology/artifacts/replicator.dm @@ -98,7 +98,7 @@ "foreground" = colors[color], ))) - fail_message = "[bicon(src)] a [pick("loud","soft","sinister","eery","triumphant","depressing","cheerful","angry")] \ + fail_message = "\icon[src][bicon(src)] a [pick("loud","soft","sinister","eery","triumphant","depressing","cheerful","angry")] \ [pick("horn","beep","bing","bleep","blat","honk","hrumph","ding")] sounds and a \ [pick("yellow","purple","green","blue","red","orange","white")] \ [pick("light","dial","meter","window","protrusion","knob","antenna","swirly thing")] \ @@ -110,7 +110,7 @@ if(spawning_types.len && powered()) spawn_progress_time += world.time - last_process_time if(spawn_progress_time > max_spawn_time) - src.visible_message("[bicon(src)] [src] pings!") + src.visible_message("\icon[src][bicon(src)] [src] pings!") var/obj/source_material = pop(stored_materials) var/spawn_type = pop(spawning_types) @@ -133,7 +133,7 @@ icon_state = "borgcharger0(old)" else if(prob(5)) - src.visible_message("[bicon(src)] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].") + src.visible_message("\icon[src][bicon(src)] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].") last_process_time = world.time @@ -161,9 +161,9 @@ if(key in construction) if(LAZYLEN(stored_materials) > LAZYLEN(spawning_types)) if(LAZYLEN(spawning_types)) - visible_message("[bicon(src)] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].") + visible_message("\icon[src][bicon(src)] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].") else - visible_message("[bicon(src)] [src]'s front compartment slides shut.") + visible_message("\icon[src][bicon(src)] [src]'s front compartment slides shut.") spawning_types.Add(construction[key]) spawn_progress_time = 0 update_use_power(USE_POWER_ACTIVE) diff --git a/code/modules/xenoarcheaology/artifacts/replicator_vr.dm b/code/modules/xenoarcheaology/artifacts/replicator_vr.dm new file mode 100644 index 0000000000..8fc3dba9b4 --- /dev/null +++ b/code/modules/xenoarcheaology/artifacts/replicator_vr.dm @@ -0,0 +1,598 @@ + +////////////////////////////// +//////VORE-MOB REPLICATOR///// +////////////////////////////// +/obj/machinery/replicator/vore + name = "alien machine" + desc = "It's some kind of pod with strange wires and gadgets all over it. This one appears to have a humanoid shaped slot as an input. It has depictions of various creatures on the buttons." //Explain to the user that it turns people into mobs. + icon = 'icons/obj/xenoarchaeology.dmi' + icon_state = "borgcharger0(old)" + var/quantity = 18 //This needs to be replaced with a GUI that lets you select the item you want. + var/list/created_mobs = list() + var/list/tgui_vore_selection = list() + var/list/viable_mobs = list( + /mob/living/simple_mob/animal/passive/fox, + /mob/living/simple_mob/animal/passive/cow, + /mob/living/simple_mob/animal/passive/chicken, + /mob/living/simple_mob/animal/passive/opossum, + /mob/living/simple_mob/animal/passive/mouse, + /mob/living/simple_mob/vore/rabbit, + /mob/living/simple_mob/animal/goat, + /mob/living/simple_mob/animal/sif/tymisian, + /mob/living/simple_mob/animal/wolf/direwolf, + /mob/living/simple_mob/otie/friendly, + /mob/living/simple_mob/vore/alienanimals/catslug, + /mob/living/simple_mob/vore/alienanimals/teppi, + /mob/living/simple_mob/vore/fennec, + /mob/living/simple_mob/vore/xeno_defanged, + /mob/living/simple_mob/vore/redpanda/fae, + /mob/living/simple_mob/vore/aggressive/rat, + /mob/living/simple_mob/vore/aggressive/panther, + /mob/living/simple_mob/vore/aggressive/frog + ) + //Mostly friendly mobs, but occasionally some dangerous ones. + //So if xenoarch isn't careful and is just shoving items willy-nilly without taking the proper precautions they can end up in a bit of trouble! + + +/obj/machinery/replicator/vore/New() //This replicator turns people into mobs! + ..() //TODO: Someone can replace the 'alien' interface with something neater sometime. It is simply out of my abilities at the current moment. + + for(var/i=0, i max_spawn_time) + src.visible_message("\icon[src][bicon(src)] [src] pings!") + + var/obj/source_material = pop(stored_materials) + var/spawn_type = pop(spawning_types) + var/mob/living/simple_mob/new_mob = new spawn_type(src.loc) //The MOB that's spawned in. + + if(source_material) + if(length(source_material.name) < MAX_MESSAGE_LEN) + new_mob.name = "[source_material] " + new_mob.name + if(length(source_material.desc) < MAX_MESSAGE_LEN * 2) + if(new_mob.desc) + new_mob.desc += " It is made of [source_material]." + else + new_mob.desc = "It is made of [source_material]." + //Did they use an item? If so, we're done here. + + //Did they put a micro in it? + if(istype(source_material,/obj/item/weapon/holder/micro)) + var/obj/item/weapon/holder/micro/micro_holder = source_material + var/mob/mob_to_be_changed = micro_holder.held_mob + var/mob/living/M = mob_to_be_changed + //Start of mob code shamelessly ripped from mouseray + new_mob.faction = M.faction + + if(new_mob && isliving(new_mob)) + for(var/obj/belly/B as anything in new_mob.vore_organs) + new_mob.vore_organs -= B + qdel(B) + new_mob.vore_organs = list() + new_mob.name = M.name + new_mob.real_name = M.real_name + for(var/lang in M.languages) + new_mob.languages |= lang + M.copy_vore_prefs_to_mob(new_mob) + new_mob.vore_selected = M.vore_selected + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.gender = H.gender + N.identifying_gender = H.identifying_gender + else + new_mob.gender = H.identifying_gender + else + new_mob.gender = M.gender + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.identifying_gender = M.gender + + for(var/obj/belly/B as anything in M.vore_organs) + B.loc = new_mob + B.forceMove(new_mob) + B.owner = new_mob + M.vore_organs -= B + new_mob.vore_organs += B + + new_mob.ckey = M.ckey + if(M.ai_holder && new_mob.ai_holder) + var/datum/ai_holder/old_AI = M.ai_holder + old_AI.set_stance(STANCE_SLEEP) + var/datum/ai_holder/new_AI = new_mob.ai_holder + new_AI.hostile = old_AI.hostile + new_AI.retaliate = old_AI.retaliate + M.loc = new_mob + M.forceMove(new_mob) + new_mob.tf_mob_holder = M + ///End of mobcode. + qdel(source_material) + M.forceMove(new_mob) + + //Did they put a person in it? + else if(istype(source_material,/mob/living)) + var/mob/living/M = source_material + //Start of mob code shamelessly ripped from mouseray + new_mob.faction = M.faction + + if(new_mob && isliving(new_mob)) + for(var/obj/belly/B as anything in new_mob.vore_organs) + new_mob.vore_organs -= B + qdel(B) + new_mob.vore_organs = list() + new_mob.name = M.name + new_mob.real_name = M.real_name + for(var/lang in M.languages) + new_mob.languages |= lang + M.copy_vore_prefs_to_mob(new_mob) + new_mob.vore_selected = M.vore_selected + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.gender = H.gender + N.identifying_gender = H.identifying_gender + else + new_mob.gender = H.identifying_gender + else + new_mob.gender = M.gender + if(ishuman(new_mob)) + var/mob/living/carbon/human/N = new_mob + N.identifying_gender = M.gender + + for(var/obj/belly/B as anything in M.vore_organs) + B.loc = new_mob + B.forceMove(new_mob) + B.owner = new_mob + M.vore_organs -= B + new_mob.vore_organs += B + + new_mob.ckey = M.ckey + if(M.ai_holder && new_mob.ai_holder) + var/datum/ai_holder/old_AI = M.ai_holder + old_AI.set_stance(STANCE_SLEEP) + var/datum/ai_holder/new_AI = new_mob.ai_holder + new_AI.hostile = old_AI.hostile + new_AI.retaliate = old_AI.retaliate + M.loc = new_mob + M.forceMove(new_mob) + new_mob.tf_mob_holder = M + ///End of mobcode. + + + spawn_progress_time = 0 + max_spawn_time = rand(30,100) + + if(!spawning_types.len || !stored_materials.len) + update_use_power(USE_POWER_IDLE) + icon_state = "borgcharger0(old)" + + else if(prob(5)) + src.visible_message("\icon[src][bicon(src)] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].") + + last_process_time = world.time + + +/obj/machinery/replicator/vore/attackby(obj/item/weapon/W as obj, mob/living/user as mob) + if(!W.canremove || !user.canUnEquip(W) || W.possessed_voice || is_type_in_list(W,item_vore_blacklist)) //No armblades, no putting possessed items in it! + to_chat(user, "You cannot put \the [W] into the machine.") + return + if(istype(W, /obj/item/weapon/holder/micro)) //Are you putting a micro in it? + var/obj/item/weapon/holder/micro/micro_holder = W + var/mob/living/inserted_mob = micro_holder.held_mob //Get the actual mob. + if(!inserted_mob.allow_spontaneous_tf) //Do they allow TF? + to_chat(user, "You cannot put \the [W] into the machine. ((The prefs of the micro forbid this action.))") + return + if(inserted_mob.stat == DEAD) //Hey medical... + to_chat(user, "[W] is dead.") + return + if(inserted_mob.tf_mob_holder) + to_chat(user, "[W] must be in their original form.") + return + if(inserted_mob.client) + var/response //Let's see if they are SURE they accept the fact they will be a clothing, plushie, or something else. + response = tgui_alert(inserted_mob, "Are you -sure- you want to be put in this machine?\n(This machine will turn you into one of the various types of mobs in the game.)", "WARNING: Are you sure you want to be put in the machine and transformed?", list("No", "Certain")) + if(response != "Certain") //If they don't agree, stop. + to_chat(user, "[W] stops you from placing them in the machine.") + return + else //If they /do/ agree, give them one last chance. + response = tgui_alert(inserted_mob, "This is the last warning: Are you absolutely certain you want to be transformed into a mob?", "WARNING: FINAL CHANCE!", list("No", "Certain")) + if(response != "Certain") + to_chat(user, "[W] stops you from placing them in the machine.") + return + if(istype(inserted_mob, /mob/living/voice) || W.loc == src) //Sanity. + return + log_and_message_admins("[user] has just placed [inserted_mob] into a mob transformation machine.", user) + else + to_chat(user, "You cannot put \the [W] into the machine. ((The micro must be connected to the server.))") + return + else if(istype(W,/obj/item/weapon/grab)) //Is someone being shoved into the machine? + var/obj/item/weapon/grab/the_grab = W + var/mob/living/inserted_mob = the_grab.affecting //Get the mob that is grabbed. + if(!inserted_mob.allow_spontaneous_tf) + to_chat(user, "You cannot put \the [W] into the machine. ((The prefs of the micro forbid this action.))") + return + if(inserted_mob.stat == DEAD) + to_chat(user, "[W] is dead.") + return + if(inserted_mob.tf_mob_holder) + to_chat(user, "[W] must be in their original form.") + return + if(inserted_mob.client) + var/response + response = tgui_alert(inserted_mob, "Are you -sure- you want to be put in this machine?\n(This machine will turn you into one of the various types of mobs in the game.)", "WARNING: Are you sure you want to be put in the machine and transformed?", list("No", "Certain")) + if(response != "Certain") + to_chat(user, "[W] stops you from placing them in the machine.") + return + else + response = tgui_alert(inserted_mob, "This is the last warning: Are you absolutely certain you want to be transformed into a mob?", "WARNING: FINAL CHANCE!", list("No", "Certain")) + if(response != "Certain") + to_chat(user, "[W] stops you from placing them in the machine.") + return + if(istype(inserted_mob, /mob/living/voice) || W.loc == src) + return + log_and_message_admins("[user] has just placed [inserted_mob] into a mob transformation machine.", user) + user.drop_item() //Dropping a grab destroys it. + //Grabs require a bit of extra work. + //We want them to drop their clothing/items as well. + if(istype(inserted_mob, /mob/living/carbon/human)) //So, this WORKS. Works very well! + var/mob/living/carbon/human/inserted_human = inserted_mob + for(var/obj/item/I in inserted_mob) + if(istype(I, /obj/item/weapon/implant) || istype(I, /obj/item/device/nif)) + continue + inserted_human.drop_from_inventory(I) + inserted_mob.loc = src + stored_materials.Add(inserted_mob) + src.visible_message("\The [user] inserts \the [inserted_mob] into \the [src].") + return + else + to_chat(user, "You cannot put \the [W] into the machine. ((The micro must be connected to the server.))") + return + else if(istype(W, /obj/item/weapon/holder/mouse)) //No you can't turn your army of mice into giant rats. + to_chat(user, "You cannot put \the [W] into the machine. The machine reads 'NOT ENOUGH BIOMASS'.") + return + user.drop_item() //Put the micro on the floor (or drop the item) + if(istype(W, /obj/item/weapon/holder/micro)) //I hate this but it's the only way to get their stuff to drop. + var/obj/item/weapon/holder/micro/micro_holder = W + var/mob/living/inserted_mob = micro_holder.held_mob //Get the actual mob. + if(istype(inserted_mob, /mob/living/carbon/human)) //Only humans have the drop_from_inventory proc. + var/mob/living/carbon/human/inserted_human = inserted_mob + for(var/obj/item/I in inserted_human) //Drop any remaining items! This only really seems to affect hands. + if(istype(I, /obj/item/weapon/implant) || istype(I, /obj/item/device/nif)) + continue + inserted_human.drop_from_inventory(I) + //Now that we've dropped all the items they have, let's shove them back into the micro holder. + W.loc = src + stored_materials.Add(W) + src.visible_message("\The [user] inserts \the [W] into \the [src].") + +/obj/machinery/replicator/vore/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) + var/list/data = ..() + data["tgui_construction"] = tgui_vore_selection + return data + +/obj/machinery/replicator/vore/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + switch(action) + if("construct") + var/key = params["key"] + if(key in created_mobs) + if(LAZYLEN(stored_materials) > LAZYLEN(spawning_types)) + if(LAZYLEN(spawning_types)) + visible_message("\icon[src][bicon(src)] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].") + else + visible_message("\icon[src][bicon(src)] [src]'s front compartment slides shut.") + spawning_types.Add(created_mobs[key]) + spawn_progress_time = 0 + update_use_power(USE_POWER_ACTIVE) + icon_state = "borgcharger1(old)" + else + visible_message(fail_message) + + +/obj/machinery/replicator/clothing/tgui_interact(mob/user, datum/tgui/ui) //This creates the menu. + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "XenoarchReplicator_voremob_vr", name) + ui.open() + + + + + +////////////////////////////// +//////CLOTHING REPLICATOR///// +////////////////////////////// + +/obj/machinery/replicator/clothing + name = "alien machine" + desc = "It's some kind of pod with strange wires and gadgets all over it. This one appears to have a humanoid shaped slot as an input and images of various objects on the buttons." //This hole was made for me! + icon = 'icons/obj/xenoarchaeology.dmi' + icon_state = "borgcharger0(old)" + var/quantity = 35 //This needs to be replaced with a GUI that lets you select the item you want. + var/list/created_items = list() + var/list/tgui_vore_selection = list() + var/list/viable_items = list( + /obj/item/clothing/gloves/ring, + /obj/item/clothing/gloves/evening, + /obj/item/clothing/gloves/black, + /obj/item/clothing/under/swimsuit/black, + /obj/item/clothing/under/shorts/black, + /obj/item/clothing/under/wetsuit_skimpy, + /obj/item/clothing/under/dress/maid, + /obj/item/clothing/under/fluff/latexmaid, + /obj/item/clothing/suit/oversize, + /obj/item/clothing/suit/kimono/red, + /obj/item/clothing/suit/storage/fluff/loincloth, + /obj/item/toy/plushie/lizardplushie/kobold, + /obj/item/toy/plushie/borgplushie/medihound, + /obj/item/toy/plushie/marble_fox, + /obj/item/toy/plushie/lizard, + /obj/item/toy/plushie/tuxedo_cat, + /obj/item/clothing/head/pin/flower, + /obj/item/clothing/head/wizard, + /obj/item/clothing/head/wizard/marisa, + /obj/item/clothing/head/beret, + /obj/item/clothing/head/that, + /obj/item/clothing/head/bowler, + /obj/item/clothing/shoes/hitops/red, + /obj/item/clothing/shoes/boots/jackboots, + /obj/item/clothing/shoes/boots/workboots, + /obj/item/clothing/shoes/boots/workboots/toeless, + /obj/item/clothing/shoes/flipflop, + /obj/item/clothing/shoes/boots/duty, + /obj/item/clothing/shoes/footwraps, + /obj/item/weapon/storage/smolebrickcase, + /obj/item/weapon/lipstick, + /obj/item/weapon/material/fishing_rod/modern, + /obj/item/weapon/inflatable_duck, + /obj/item/toy/syndicateballoon, + /obj/item/weapon/towel, + /obj/item/weapon/bedsheet/rainbowdouble + ) // Currently: 3 gloves, 5 undersuits, 3 oversuits, 5 plushies, 5 headwear, 7 shoes, 7 misc. = 35 + //Fishing hat was going to be added, but it was simply too powerful for this world. + +/obj/machinery/replicator/clothing/New() //The specific thing about the VORE replicator is that it will only contain obj/items. Only things that can be picked up, used, and worn! + ..() //TODO: Someone can replace the 'alien' interface with something neater sometime. It is simply out of my abilities at the current moment. + + for(var/i=0, i max_spawn_time) + src.visible_message("\icon[src][bicon(src)] [src] pings!") + + var/obj/source_material = pop(stored_materials) + var/spawn_type = pop(spawning_types) + var/obj/item/spawned_obj = new spawn_type(src.loc) + var/obj/item/original_name = spawned_obj.name //Get the item's name before it's prefixed. Used for micro code. + if(source_material) + if(length(source_material.name) < MAX_MESSAGE_LEN) + spawned_obj.name = "[source_material] " + spawned_obj.name + if(length(source_material.desc) < MAX_MESSAGE_LEN * 2) + if(spawned_obj.desc) + spawned_obj.desc += " It is made of [source_material]." + else + spawned_obj.desc = "It is made of [source_material]." + if(istype(source_material,/obj/item/weapon/holder/micro)) + var/obj/item/weapon/holder/micro/micro_holder = source_material //Tells the machine that a micro is the material being used + var/mob/mob_to_be_changed = micro_holder.held_mob //Get the mob. + var/mob/living/M = mob_to_be_changed + M.release_vore_contents(TRUE, TRUE) //Release their stomach contents. Don't spam the chat, either. + spawned_obj.inhabit_item(M, original_name, M) //Take the spawned mob and call the TF proc on it. + var/mob/living/possessed_voice = spawned_obj.possessed_voice //Get the possessed voice. + qdel(source_material) //Deletes the micro holder, we don't need it anymore. + spawned_obj.trash_eatable = M.devourable //Can this item be eaten? Let's decide based on the person's prefs! + spawned_obj.unacidable = !M.digestable //Can this item be digested? + M.forceMove(possessed_voice) //Places them in the 'voice' for later recovery! Essentially: The item contains a 'possessed voice' mob, which contains their original mob. + + + else if(istype(source_material,/mob/living))//Did they shove a person in there normally? + var/mob/living/M = source_material //If so, this cuts down the work we have to do! + M.release_vore_contents(TRUE, TRUE) //Release their stomach contents. Don't spam the chat, either. + spawned_obj.inhabit_item(M, original_name, M) + var/mob/living/possessed_voice = spawned_obj.possessed_voice + spawned_obj.trash_eatable = M.devourable + spawned_obj.unacidable = !M.digestable + M.forceMove(possessed_voice) + + + spawn_progress_time = 0 + max_spawn_time = rand(30,100) + + if(!spawning_types.len || !stored_materials.len) + update_use_power(USE_POWER_IDLE) + icon_state = "borgcharger0(old)" + + else if(prob(5)) + src.visible_message("\icon[src][bicon(src)] [src] [pick("clicks","whizzes","whirrs","whooshes","clanks","clongs","clonks","bangs")].") + + last_process_time = world.time + +/obj/machinery/replicator/clothing/attackby(obj/item/weapon/W as obj, mob/living/user as mob) + if(!W.canremove || !user.canUnEquip(W) || W.possessed_voice || is_type_in_list(W,item_vore_blacklist)) //No armblades, no putting already possessed items in it! + to_chat(user, "You cannot put \the [W] into the machine.") + return + if(istype(W, /obj/item/weapon/holder/micro) || istype(W, /obj/item/weapon/holder/mouse)) //Are you putting a micro/mouse in it? + var/obj/item/weapon/holder/micro/micro_holder = W + var/mob/living/inserted_mob = micro_holder.held_mob //Get the actual mob. + if(!inserted_mob.allow_spontaneous_tf) //Do they allow TF? + to_chat(user, "You cannot put \the [W] into the machine. ((The prefs of the micro forbid this action.))") + return + if(inserted_mob.stat == DEAD) //Hey medical... + to_chat(user, "[W] is dead.") + return + if(inserted_mob.tf_mob_holder) //No recursion!!! + to_chat(user, "[W] must be in their original form.") + return + if(inserted_mob.client) + var/response //Let's see if they are SURE they accept the fact they will be a clothing, plushie, or something else. + response = tgui_alert(inserted_mob, "Are you -sure- you want to be put in this machine?\n(This machine can turn you into various clothing, footwear, plushies, and other miscellaneous objects. This means that more likely than not, you will be used as whatever object is used. Make certain your preferences align with this possibility.)", "WARNING: Are you sure you want to be put in the machine and transformed?", list("No", "Certain")) + if(response != "Certain") //If they don't agree, stop. + to_chat(user, "[W] stops you from placing them in the machine.") + return + else //If they /do/ agree, give them one last chance. + response = tgui_alert(inserted_mob, "This is the last warning: Are you absolutely certain you want to be transformed into an object and have the possibility of being used as such?", "WARNING: FINAL CHANCE!", list("No", "I accept the possibilities")) + if(response != "I accept the possibilities") + to_chat(user, "[W] stops you from placing them in the machine.") + return + if(istype(inserted_mob, /mob/living/voice) || W.loc == src) //This is a sanity check to keep them from entering it multiple times. + return + log_and_message_admins("[user] has just placed [inserted_mob] into an item transformation machine.", user) + else + to_chat(user, "You cannot put \the [W] into the machine. ((The micro must be connected to the server.))") + return + else if(istype(W,/obj/item/weapon/grab)) //Is someone being shoved into the machine? + var/obj/item/weapon/grab/the_grab = W + var/mob/living/inserted_mob = the_grab.affecting //Get the mob that is grabbed. + if(!inserted_mob.allow_spontaneous_tf) + to_chat(user, "You cannot put \the [W] into the machine. ((The prefs of the micro forbid this action.))") + return + if(inserted_mob.stat == DEAD) + to_chat(user, "[W] is dead.") + return + if(inserted_mob.tf_mob_holder) + to_chat(user, "[W] must be in their original form.") + return + if(inserted_mob.client) + var/response + response = tgui_alert(inserted_mob, "Are you -sure- you want to be put in this machine?\n(This machine can turn you into various clothing, footwear, plushies, and other miscellaneous objects. This means that more likely than not, you will be used as whatever object is used. Make certain your preferences align with this possibility.)", "WARNING: Are you sure you want to be put in the machine and transformed?", list("No", "Certain")) + if(response != "Certain") + to_chat(user, "[W] stops you from placing them in the machine.") + return + else + response = tgui_alert(inserted_mob, "This is the last warning: Are you absolutely certain you want to be transformed into an object and have the possibility of being used as such?", "WARNING: FINAL CHANCE!", list("No", "I accept the possibilities")) + if(response != "I accept the possibilities") + to_chat(user, "[W] stops you from placing them in the machine.") + return + if(istype(inserted_mob, /mob/living/voice) || W.loc == src) + return + log_and_message_admins("[user] has just placed [inserted_mob] into an item transformation machine.", user) + user.drop_item() //Dropping a grab destroys it. + //Grabs require a bit of extra work. + //We want them to drop their clothing/items as well. + if(istype(inserted_mob, /mob/living/carbon/human)) //So, this WORKS. Works very well! + var/mob/living/carbon/human/inserted_human = inserted_mob + for(var/obj/item/I in inserted_mob) + if(istype(I, /obj/item/weapon/implant) || istype(I, /obj/item/device/nif)) + continue + inserted_human.drop_from_inventory(I) + inserted_mob.loc = src + stored_materials.Add(inserted_mob) + src.visible_message("\The [user] inserts \the [inserted_mob] into \the [src].") + return + else + to_chat(user, "You cannot put \the [W] into the machine. ((They must be connected to the server.))") + return + + user.drop_item() //Put the micro on the floor (or drop the item) + if(istype(W, /obj/item/weapon/holder/micro)) //I hate this but it's the only way to get their stuff to drop. + var/obj/item/weapon/holder/micro/micro_holder = W + var/mob/living/inserted_mob = micro_holder.held_mob //Get the actual mob. + if(istype(inserted_mob, /mob/living/carbon/human)) //Only humans have the drop_from_inventory proc. + var/mob/living/carbon/human/inserted_human = inserted_mob + for(var/obj/item/I in inserted_human) //Drop any remaining items! This only really seems to affect hands. + if(istype(I, /obj/item/weapon/implant) || istype(I, /obj/item/device/nif)) + continue + inserted_human.drop_from_inventory(I) + //Now that we've dropped all the items they have, let's shove them back into the micro holder. + W.loc = src + stored_materials.Add(W) + src.visible_message("\The [user] inserts \the [W] into \the [src].") + + +/obj/machinery/replicator/clothing/tgui_interact(mob/user, datum/tgui/ui) //This creates the menu. + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "XenoarchReplicator_clothing_vr", name) //This is required to prevent UI contamination. + ui.open() + +/obj/machinery/replicator/clothing/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) //Gives data to the menu. + var/list/data = ..() + data["tgui_construction"] = tgui_vore_selection + return data + +/obj/machinery/replicator/clothing/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return TRUE + + switch(action) + if("construct") + var/key = params["key"] + if(key in created_items) + if(LAZYLEN(stored_materials) > LAZYLEN(spawning_types)) + if(LAZYLEN(spawning_types)) + visible_message("\icon[src][bicon(src)] a [pick("light","dial","display","meter","pad")] on [src]'s front [pick("blinks","flashes")] [pick("red","yellow","blue","orange","purple","green","white")].") + else + visible_message("\icon[src][bicon(src)] [src]'s front compartment slides shut.") + spawning_types.Add(created_items[key]) + spawn_progress_time = 0 + update_use_power(USE_POWER_ACTIVE) + icon_state = "borgcharger1(old)" + else + visible_message(fail_message) \ No newline at end of file diff --git a/code/modules/xenoarcheaology/effect.dm b/code/modules/xenoarcheaology/effect.dm index 93c344aa83..7409c8744f 100644 --- a/code/modules/xenoarcheaology/effect.dm +++ b/code/modules/xenoarcheaology/effect.dm @@ -92,7 +92,7 @@ var/atom/toplevelholder = target while(!istype(toplevelholder.loc, /turf)) toplevelholder = toplevelholder.loc - toplevelholder.visible_message("[bicon(toplevelholder)] [toplevelholder] [display_msg]") + toplevelholder.visible_message("\icon[toplevelholder][bicon(toplevelholder)] [toplevelholder] [display_msg]") /datum/artifact_effect/proc/DoEffectTouch(var/mob/user) /datum/artifact_effect/proc/DoEffectAura(var/atom/holder) diff --git a/code/modules/xenoarcheaology/finds/fossils.dm b/code/modules/xenoarcheaology/finds/fossils.dm index 19516f47cc..0ad06af468 100644 --- a/code/modules/xenoarcheaology/finds/fossils.dm +++ b/code/modules/xenoarcheaology/finds/fossils.dm @@ -77,7 +77,7 @@ ..() else if(istype(W,/obj/item/weapon/pen)) plaque_contents = sanitize(tgui_input_text(usr, "What would you like to write on the plaque:","Skeleton plaque","")) - user.visible_message("[user] writes something on the base of [src].","You relabel the plaque on the base of [bicon(src)] [src].") + user.visible_message("[user] writes something on the base of [src].","You relabel the plaque on the base of \icon[src][bicon(src)] [src].") if(src.contents.Find(/obj/item/weapon/fossil/skull/horned)) src.desc = "A creature made of [src.contents.len-1] assorted bones and a horned skull. The plaque reads \'[plaque_contents]\'." else diff --git a/code/modules/xenoarcheaology/finds/special.dm b/code/modules/xenoarcheaology/finds/special.dm index 02a5096b98..f2dcfc5183 100644 --- a/code/modules/xenoarcheaology/finds/special.dm +++ b/code/modules/xenoarcheaology/finds/special.dm @@ -99,7 +99,7 @@ if(charges >= 0.1) if(prob(5)) - src.visible_message("[bicon(src)] [src]'s eyes glow ruby red for a moment!") + src.visible_message("\icon[src][bicon(src)] [src]'s eyes glow ruby red for a moment!") charges -= 0.1 //check on our shadow wights diff --git a/code/modules/xenoarcheaology/finds/talking.dm b/code/modules/xenoarcheaology/finds/talking.dm index 4a6af1444d..48b7720f00 100644 --- a/code/modules/xenoarcheaology/finds/talking.dm +++ b/code/modules/xenoarcheaology/finds/talking.dm @@ -54,7 +54,7 @@ var/list/options = list("[holder_atom] seems to be listening intently to [source]...",\ "[holder_atom] seems to be focusing on [source]...",\ "[holder_atom] seems to turn it's attention to [source]...") - holder_atom.loc.visible_message("[bicon(holder_atom)] [pick(options)]") + holder_atom.loc.visible_message("\icon[holder_atom][bicon(holder_atom)] [pick(options)]") if(prob(20)) spawn(2) @@ -118,5 +118,5 @@ listening|=M for(var/mob/M in listening) - to_chat(M, "[bicon(holder_atom)] [holder_atom] reverberates, \"[msg]\"") + to_chat(M, "\icon[holder_atom][bicon(holder_atom)] [holder_atom] reverberates, \"[msg]\"") last_talk_time = world.time diff --git a/code/modules/xenoarcheaology/tools/ano_device_battery.dm b/code/modules/xenoarcheaology/tools/ano_device_battery.dm index 3c7b988211..a83462c43b 100644 --- a/code/modules/xenoarcheaology/tools/ano_device_battery.dm +++ b/code/modules/xenoarcheaology/tools/ano_device_battery.dm @@ -67,7 +67,7 @@ /obj/item/weapon/anodevice/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + data["inserted_battery"] = inserted_battery data["anomaly"] = null data["charge"] = null @@ -103,7 +103,7 @@ if("startup") if(inserted_battery && inserted_battery.battery_effect && (inserted_battery.stored_charge > 0)) activated = TRUE - visible_message("[bicon(src)] [src] whirrs.", "[bicon(src)]You hear something whirr.") + visible_message("\icon[src][bicon(src)] [src] whirrs.", "\icon[src][bicon(src)]You hear something whirr.") if(!inserted_battery.battery_effect.activated) inserted_battery.battery_effect.ToggleActivate(1) time_end = world.time + duration @@ -146,9 +146,9 @@ if(interval > 0) //apply the touch effect to the holder if(holder) - to_chat(holder, "the [bicon(src)] [src] held by [holder] shudders in your grasp.") + to_chat(holder, "the \icon[src][bicon(src)] [src] held by [holder] shudders in your grasp.") else - src.loc.visible_message("the [bicon(src)] [src] shudders.") + src.loc.visible_message("the \icon[src][bicon(src)] [src] shudders.") //consume power inserted_battery.use_power(energy_consumed_on_touch) @@ -175,13 +175,13 @@ //work out if we need to shutdown if(inserted_battery.stored_charge <= 0) - src.loc.visible_message("[bicon(src)] [src] buzzes.", "[bicon(src)] You hear something buzz.") + src.loc.visible_message("\icon[src][bicon(src)] [src] buzzes.", "\icon[src][bicon(src)] You hear something buzz.") shutdown_emission() else if(world.time > time_end) - src.loc.visible_message("[bicon(src)] [src] chimes.", "[bicon(src)] You hear something chime.") + src.loc.visible_message("\icon[src][bicon(src)] [src] chimes.", "\icon[src][bicon(src)] You hear something chime.") shutdown_emission() else - src.visible_message("[bicon(src)] [src] buzzes.", "[bicon(src)] You hear something buzz.") + src.visible_message("\icon[src][bicon(src)] [src] buzzes.", "\icon[src][bicon(src)] You hear something buzz.") shutdown_emission() last_process = world.time diff --git a/code/modules/xenoarcheaology/tools/artifact_analyser.dm b/code/modules/xenoarcheaology/tools/artifact_analyser.dm index 41d4ad1bc2..6e0e1ceb19 100644 --- a/code/modules/xenoarcheaology/tools/artifact_analyser.dm +++ b/code/modules/xenoarcheaology/tools/artifact_analyser.dm @@ -125,7 +125,7 @@ P.name = "[src] report #[++report_num]" P.info = "[src] analysis report #[report_num]
" P.info += "
" - P.info += "[bicon(scanned_object)] [results]" + P.info += "\icon[scanned_object][bicon(scanned_object)] [results]" P.stamped = list(/obj/item/weapon/stamp) P.add_overlay("paper_stamped") diff --git a/code/modules/xenoarcheaology/tools/geosample_scanner.dm b/code/modules/xenoarcheaology/tools/geosample_scanner.dm index dc634789bf..4ab22878c1 100644 --- a/code/modules/xenoarcheaology/tools/geosample_scanner.dm +++ b/code/modules/xenoarcheaology/tools/geosample_scanner.dm @@ -126,7 +126,7 @@ /obj/machinery/radiocarbon_spectrometer/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) var/list/data = ..() - + // this is the data which will be sent to the ui data["scanned_item"] = (scanned_item ? scanned_item.name : "") data["scanned_item_desc"] = (scanned_item ? (scanned_item.desc ? scanned_item.desc : "No information on record.") : "") @@ -268,16 +268,16 @@ //emergency stop if seal integrity reaches 0 if(scanner_seal_integrity <= 0 || (scanner_temperature >= 1273 && !rad_shield)) stop_scanning() - src.visible_message("[bicon(src)] buzzes unhappily. It has failed mid-scan!", 2) + src.visible_message("\icon[src][bicon(src)] buzzes unhappily. It has failed mid-scan!", 2) if(prob(5)) - src.visible_message("[bicon(src)] [pick("whirrs","chuffs","clicks")][pick(" excitedly"," energetically"," busily")].", 2) + src.visible_message("\icon[src][bicon(src)] [pick("whirrs","chuffs","clicks")][pick(" excitedly"," energetically"," busily")].", 2) else //gradually cool down over time if(scanner_temperature > 0) scanner_temperature = max(scanner_temperature - 5 - 10 * rand(), 0) if(prob(0.75)) - src.visible_message("[bicon(src)] [pick("plinks","hisses")][pick(" quietly"," softly"," sadly"," plaintively")].", 2) + src.visible_message("\icon[src][bicon(src)] [pick("plinks","hisses")][pick(" quietly"," softly"," sadly"," plaintively")].", 2) playsound(src, 'sound/effects/ding.ogg', 25) last_process_worldtime = world.time @@ -296,7 +296,7 @@ used_coolant = 0 /obj/machinery/radiocarbon_spectrometer/proc/complete_scan() - src.visible_message("[bicon(src)] makes an insistent chime.", 2) + src.visible_message("\icon[src][bicon(src)] makes an insistent chime.", 2) if(scanned_item) //create report diff --git a/code/modules/xenoarcheaology/tools/suspension_generator.dm b/code/modules/xenoarcheaology/tools/suspension_generator.dm index 2f2c87954e..902264308a 100644 --- a/code/modules/xenoarcheaology/tools/suspension_generator.dm +++ b/code/modules/xenoarcheaology/tools/suspension_generator.dm @@ -147,10 +147,10 @@ for(var/mob/living/M in T) M.Weaken(5) - M.visible_message("[bicon(M)] [M] begins to float in the air!","You feel tingly and light, but it is difficult to move.") + M.visible_message("\icon[M][bicon(M)] [M] begins to float in the air!","You feel tingly and light, but it is difficult to move.") suspension_field = new(T) - visible_message("[bicon(src)] [src] activates with a low hum.") + visible_message("\icon[src][bicon(src)] [src] activates with a low hum.") icon_state = "suspension3" for(var/obj/item/I in T) @@ -160,7 +160,7 @@ if(collected) suspension_field.icon_state = "energynet" suspension_field.add_overlay("shield2") - visible_message("[bicon(suspension_field)] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"].") + visible_message("\icon[suspension_field][bicon(suspension_field)] [suspension_field] gently absconds [collected > 1 ? "something" : "several things"].") else if(istype(T,/turf/simulated/mineral) || istype(T,/turf/simulated/wall)) suspension_field.icon_state = "shieldsparkles" @@ -175,7 +175,7 @@ to_chat(M, "You no longer feel like floating.") M.Weaken(3) - visible_message("[bicon(src)] [src] deactivates with a gentle shudder.") + visible_message("\icon[src][bicon(src)] [src] deactivates with a gentle shudder.") qdel(suspension_field) suspension_field = null icon_state = "suspension2" diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm index 14bda53ca2..20c08c70ca 100644 --- a/code/modules/xenoarcheaology/tools/tools.dm +++ b/code/modules/xenoarcheaology/tools/tools.dm @@ -131,7 +131,7 @@ positive_locations.Add(D) - to_chat(user, "[bicon(src)] [src] pings.") + to_chat(user, "\icon[src][bicon(src)] [src] pings.") else if(istype(A, /obj/structure/boulder)) var/obj/structure/boulder/B = A @@ -149,7 +149,7 @@ positive_locations.Add(D) - to_chat(user, "[bicon(src)] [src] pings [pick("madly","wildly","excitedly","crazily")]!") + to_chat(user, "\icon[src][bicon(src)] [src] pings [pick("madly","wildly","excitedly","crazily")]!") /obj/item/device/depth_scanner/attack_self(var/mob/living/user) tgui_interact(user) @@ -197,7 +197,7 @@ if(..()) return TRUE - switch(action) + switch(action) if("select") var/index = text2num(params["select"]) if(index && index <= LAZYLEN(positive_locations)) @@ -269,9 +269,9 @@ scan_ticks = 0 var/turf/T = get_turf(src) if(target_radio) - T.visible_message("[bicon(src)] [src] [pick("chirps","chirrups","cheeps")] happily.") + T.visible_message("\icon[src][bicon(src)] [src] [pick("chirps","chirrups","cheeps")] happily.") else - T.visible_message("[bicon(src)] [src] [pick("chirps","chirrups","cheeps")] sadly.") + T.visible_message("\icon[src][bicon(src)] [src] [pick("chirps","chirrups","cheeps")] sadly.") else icon_state = "pinoff" diff --git a/code/modules/xenobio/items/extracts.dm b/code/modules/xenobio/items/extracts.dm index 188c8874c2..c5ec91d239 100644 --- a/code/modules/xenobio/items/extracts.dm +++ b/code/modules/xenobio/items/extracts.dm @@ -55,7 +55,7 @@ var/obj/item/slime_extract/T = holder.my_atom T.uses-- if(T.uses <= 0) - T.visible_message("[bicon(T)]\The [T] goes inert.") + T.visible_message("\icon[T][bicon(T)]\The [T] goes inert.") T.name = "inert [initial(T.name)]" diff --git a/code/modules/xenobio/items/extracts_vr.dm b/code/modules/xenobio/items/extracts_vr.dm index 00abebfcb1..bd232c153a 100644 --- a/code/modules/xenobio/items/extracts_vr.dm +++ b/code/modules/xenobio/items/extracts_vr.dm @@ -60,7 +60,7 @@ var/obj/item/slime_extract/T = holder.my_atom T.uses-- if(T.uses <= 0) - T.visible_message("[bicon(T)]\The [T] goes inert.") + T.visible_message("\icon[T][bicon(T)]\The [T] goes inert.") T.name = "inert [initial(T.name)]" diff --git a/code/modules/xenobio2/machinery/core_extractor.dm b/code/modules/xenobio2/machinery/core_extractor.dm index 4a6b8651e2..e2882001e1 100644 --- a/code/modules/xenobio2/machinery/core_extractor.dm +++ b/code/modules/xenobio2/machinery/core_extractor.dm @@ -93,7 +93,7 @@ /obj/machinery/slime/extractor/proc/extract_cores() if(!src.occupant) - src.visible_message("[bicon(src)] [src] pings unhappily.") + src.visible_message("\icon[src][bicon(src)] [src] pings unhappily.") else if(inuse) return diff --git a/code/modules/xenobio2/machinery/gene_manipulators.dm b/code/modules/xenobio2/machinery/gene_manipulators.dm index c896f14309..b8e5cfc616 100644 --- a/code/modules/xenobio2/machinery/gene_manipulators.dm +++ b/code/modules/xenobio2/machinery/gene_manipulators.dm @@ -102,15 +102,15 @@ in_use = 0 if(failed_task) failed_task = 0 - visible_message("[bicon(src)] [src] pings unhappily, flashing a red warning light.") + visible_message("\icon[src][bicon(src)] [src] pings unhappily, flashing a red warning light.") else - visible_message("[bicon(src)] [src] pings happily.") + visible_message("\icon[src][bicon(src)] [src] pings happily.") if(eject_disk) eject_disk = 0 if(loaded_disk) loaded_disk.forceMove(get_turf(src)) - visible_message("[bicon(src)] [src] beeps and spits out [loaded_disk].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [loaded_disk].") loaded_disk = null /obj/machinery/xenobio/extractor @@ -126,7 +126,7 @@ /obj/machinery/xenobio/extractor/Initialize() . = ..() default_apply_parts() - + /obj/machinery/xenobio/extractor/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/xenoproduct)) if(product) @@ -183,7 +183,7 @@ /obj/machinery/xenobio/proc/eject_disk() if(!loaded_disk) return loaded_disk.forceMove(loc) - visible_message("[bicon(src)] [src] beeps and spits out [loaded_disk].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [loaded_disk].") loaded_disk = null /obj/machinery/xenobio/extractor/Topic(href, href_list) @@ -195,7 +195,7 @@ if(!product) return product.forceMove(get_turf(src)) - visible_message("[bicon(src)] [src] beeps and spits out [product].") + visible_message("\icon[src][bicon(src)] [src] beeps and spits out [product].") product = null if(href_list["eject_disk"]) diff --git a/code/modules/xenobio2/machinery/slime_replicator.dm b/code/modules/xenobio2/machinery/slime_replicator.dm index f845ad6e8d..30c3e372a5 100644 --- a/code/modules/xenobio2/machinery/slime_replicator.dm +++ b/code/modules/xenobio2/machinery/slime_replicator.dm @@ -57,7 +57,7 @@ /obj/machinery/slime/replicator/proc/replicate_slime() if(!src.core) - src.visible_message("[bicon(src)] [src] pings unhappily.") + src.visible_message("\icon[src][bicon(src)] [src] pings unhappily.") else if(inuse) return diff --git a/code/stylesheet.dm b/code/stylesheet.dm index a8109a52fe..0c280e6680 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -34,6 +34,8 @@ em {font-style: normal;font-weight: bold;} .pm .other {color: #0000ff;} /* Admin: Channels */ +.mentor_channel {color: #808000; font-weight: bold;} +.mentor {color: #808000;} .mod_channel {color: #735638; font-weight: bold;} .mod_channel .admin {color: #b82e00; font-weight: bold;} .admin_channel {color: #9611D4; font-weight: bold;} diff --git a/config/custom_sprites.txt b/config/custom_sprites.txt index b99307d173..1c9f5c0b38 100644 --- a/config/custom_sprites.txt +++ b/config/custom_sprites.txt @@ -1,3 +1,4 @@ -ckey|state -lunarfleet|Clea-Nor -jademanique|B.A.U-Kingside \ No newline at end of file +ckey|state +lunarfleet|Clea-Nor +jademanique|B.A.U-Kingside +argonne|RUSS \ No newline at end of file diff --git a/config/jukebox.json b/config/jukebox.json index 0674a8e329..0f17d87d86 100644 --- a/config/jukebox.json +++ b/config/jukebox.json @@ -4047,6 +4047,16 @@ "jukebox": true }, { +"url": "https://files.catbox.moe/6ivc7w.mp3", +"title": "Bury the Light", +"duration": 5830, +"artist": "Victor Borba & Casey Edwards", +"genre": "Video Game", +"secret": false, +"lobby": false, +"jukebox": true +}, +{ "url": "https://files.catbox.moe/pbtbjv.mp3", "title": "Dog Song", "duration": 380, diff --git a/icons/_nanomaps/cryogaia_nanomap_z4.png b/icons/_nanomaps/cryogaia_nanomap_z4.png index 92a4cfcad4..770ef7c976 100644 Binary files a/icons/_nanomaps/cryogaia_nanomap_z4.png and b/icons/_nanomaps/cryogaia_nanomap_z4.png differ diff --git a/icons/_nanomaps/tether_nanomap_z1.png b/icons/_nanomaps/tether_nanomap_z1.png index 2cf0c71d84..a2ef4f92e0 100644 Binary files a/icons/_nanomaps/tether_nanomap_z1.png and b/icons/_nanomaps/tether_nanomap_z1.png differ diff --git a/icons/_nanomaps/tether_nanomap_z2.png b/icons/_nanomaps/tether_nanomap_z2.png index 53492f77ee..5f1eacdb19 100644 Binary files a/icons/_nanomaps/tether_nanomap_z2.png and b/icons/_nanomaps/tether_nanomap_z2.png differ diff --git a/icons/_nanomaps/tether_nanomap_z3.png b/icons/_nanomaps/tether_nanomap_z3.png index 53888984ca..b6d0eed70d 100644 Binary files a/icons/_nanomaps/tether_nanomap_z3.png and b/icons/_nanomaps/tether_nanomap_z3.png differ diff --git a/icons/_nanomaps/tether_nanomap_z4.png b/icons/_nanomaps/tether_nanomap_z4.png index 510d22b3d6..c2623219ee 100644 Binary files a/icons/_nanomaps/tether_nanomap_z4.png and b/icons/_nanomaps/tether_nanomap_z4.png differ diff --git a/icons/_nanomaps/tether_nanomap_z5.png b/icons/_nanomaps/tether_nanomap_z5.png index 0e85f1c55a..26843c0640 100644 Binary files a/icons/_nanomaps/tether_nanomap_z5.png and b/icons/_nanomaps/tether_nanomap_z5.png differ diff --git a/icons/chattags.dmi b/icons/chattags.dmi index a0b1d335d0..ef7eee0f4c 100644 Binary files a/icons/chattags.dmi and b/icons/chattags.dmi differ diff --git a/icons/inventory/head/item_vr_altevian.dmi b/icons/inventory/head/item_vr_altevian.dmi new file mode 100644 index 0000000000..63f3e13437 Binary files /dev/null and b/icons/inventory/head/item_vr_altevian.dmi differ diff --git a/icons/inventory/head/mob_vr_altevian.dmi b/icons/inventory/head/mob_vr_altevian.dmi new file mode 100644 index 0000000000..cdd6fe581a Binary files /dev/null and b/icons/inventory/head/mob_vr_altevian.dmi differ diff --git a/icons/inventory/suit/item.dmi b/icons/inventory/suit/item.dmi index 018fd23935..81ec437202 100644 Binary files a/icons/inventory/suit/item.dmi and b/icons/inventory/suit/item.dmi differ diff --git a/icons/inventory/suit/item_vr_altevian.dmi b/icons/inventory/suit/item_vr_altevian.dmi new file mode 100644 index 0000000000..a3aa3a0e69 Binary files /dev/null and b/icons/inventory/suit/item_vr_altevian.dmi differ diff --git a/icons/inventory/suit/mob.dmi b/icons/inventory/suit/mob.dmi index eed3749711..0e4a4ba3e1 100644 Binary files a/icons/inventory/suit/mob.dmi and b/icons/inventory/suit/mob.dmi differ diff --git a/icons/inventory/suit/mob_vr_altevian.dmi b/icons/inventory/suit/mob_vr_altevian.dmi new file mode 100644 index 0000000000..8afd7064fa Binary files /dev/null and b/icons/inventory/suit/mob_vr_altevian.dmi differ diff --git a/icons/mob/animal_vr.dmi b/icons/mob/animal_vr.dmi index 87b050acbc..75edbf2629 100644 Binary files a/icons/mob/animal_vr.dmi and b/icons/mob/animal_vr.dmi differ diff --git a/icons/mob/custom_synthetic_vr.dmi b/icons/mob/custom_synthetic_vr.dmi index 8c9cd318f7..efd3e24386 100644 Binary files a/icons/mob/custom_synthetic_vr.dmi and b/icons/mob/custom_synthetic_vr.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/DSIFennec/dsi_fennec.dmi b/icons/mob/human_races/cyberlimbs/DSIFennec/dsi_fennec.dmi new file mode 100644 index 0000000000..7823146b3a Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/DSIFennec/dsi_fennec.dmi differ diff --git a/icons/mob/human_races/cyberlimbs/DSIZorren/dsi_zorren.dmi b/icons/mob/human_races/cyberlimbs/DSIZorren/dsi_zorren.dmi new file mode 100644 index 0000000000..c2b46c5b60 Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/DSIZorren/dsi_zorren.dmi differ diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi index 6a96c24689..ee1c196b37 100644 Binary files a/icons/mob/human_races/markings_vr.dmi and b/icons/mob/human_races/markings_vr.dmi differ diff --git a/icons/mob/human_races/r_altevian.dmi b/icons/mob/human_races/r_altevian.dmi new file mode 100644 index 0000000000..66822d745a Binary files /dev/null and b/icons/mob/human_races/r_altevian.dmi differ diff --git a/icons/mob/human_races/r_def_altevian.dmi b/icons/mob/human_races/r_def_altevian.dmi new file mode 100644 index 0000000000..66822d745a Binary files /dev/null and b/icons/mob/human_races/r_def_altevian.dmi differ diff --git a/icons/mob/vore/ears_vr.dmi b/icons/mob/vore/ears_vr.dmi index 4bde02b8bf..427f1fb7b7 100644 Binary files a/icons/mob/vore/ears_vr.dmi and b/icons/mob/vore/ears_vr.dmi differ diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi index d5a4d7ad57..1b2e946079 100644 Binary files a/icons/mob/vore/tails_vr.dmi and b/icons/mob/vore/tails_vr.dmi differ diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi index 20ddaee2a4..8ae4803803 100644 Binary files a/icons/mob/vore/taurs_vr.dmi and b/icons/mob/vore/taurs_vr.dmi differ diff --git a/icons/mob/widerobot_trauma_vr.dmi b/icons/mob/widerobot_trauma_vr.dmi new file mode 100644 index 0000000000..c5694be909 Binary files /dev/null and b/icons/mob/widerobot_trauma_vr.dmi differ diff --git a/icons/obj/boxes.dmi b/icons/obj/boxes.dmi index 7978b9a564..948cb472da 100644 Binary files a/icons/obj/boxes.dmi and b/icons/obj/boxes.dmi differ diff --git a/icons/obj/casino.dmi b/icons/obj/casino.dmi index 17405361e2..6a1bfda2ea 100644 Binary files a/icons/obj/casino.dmi and b/icons/obj/casino.dmi differ diff --git a/icons/obj/gun_toy.dmi b/icons/obj/gun_toy.dmi index bee6bcc49d..738911bcd6 100644 Binary files a/icons/obj/gun_toy.dmi and b/icons/obj/gun_toy.dmi differ diff --git a/icons/obj/gun_vr.dmi b/icons/obj/gun_vr.dmi index e0788a56e9..538ff61b76 100644 Binary files a/icons/obj/gun_vr.dmi and b/icons/obj/gun_vr.dmi differ diff --git a/icons/obj/nanomods.dmi b/icons/obj/nanomods.dmi index 7068034dad..f957c63983 100644 Binary files a/icons/obj/nanomods.dmi and b/icons/obj/nanomods.dmi differ diff --git a/icons/obj/overmap.dmi b/icons/obj/overmap.dmi index cef405461a..c4dd9c4232 100644 Binary files a/icons/obj/overmap.dmi and b/icons/obj/overmap.dmi differ diff --git a/icons/obj/projectiles_vr.dmi b/icons/obj/projectiles_vr.dmi index 7cdadb1a0e..a274d3edc2 100644 Binary files a/icons/obj/projectiles_vr.dmi and b/icons/obj/projectiles_vr.dmi differ diff --git a/icons/obj/tools_vr.dmi b/icons/obj/tools_vr.dmi index 05de9a423a..576d69cfab 100644 Binary files a/icons/obj/tools_vr.dmi and b/icons/obj/tools_vr.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 0e0894a345..5c8b632d6e 100644 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/icons/turf/flooring/carpet.dmi b/icons/turf/flooring/carpet.dmi index f7dcf3c046..9e3472fcbf 100644 Binary files a/icons/turf/flooring/carpet.dmi and b/icons/turf/flooring/carpet.dmi differ diff --git a/icons/vore/custom_clothes_vr.dmi b/icons/vore/custom_clothes_vr.dmi index 217c90c4b4..78fa46a05c 100644 Binary files a/icons/vore/custom_clothes_vr.dmi and b/icons/vore/custom_clothes_vr.dmi differ diff --git a/maps/expedition_vr/aerostat/_aerostat.dm b/maps/expedition_vr/aerostat/_aerostat.dm index 6917ca41c0..6bc8ab8522 100644 --- a/maps/expedition_vr/aerostat/_aerostat.dm +++ b/maps/expedition_vr/aerostat/_aerostat.dm @@ -36,6 +36,81 @@ /datum/random_map/noise/ore/virgo2/check_map_sanity() return 1 //Totally random, but probably beneficial. +/datum/random_map/noise/ore/virgo2/apply_to_turf(var/x,var/y) //Same as normal + Rutile + + var/tx = ((origin_x-1)+x)*chunk_size + var/ty = ((origin_y-1)+y)*chunk_size + + for(var/i=0,i[M] triggered the [bicon(src)] [src]
") + to_chat(O, "[M] triggered the \icon[src][bicon(src)] [src]") triggered = 1 call(src,triggerproc)(M) diff --git a/maps/gateway_vr/lucky_7.dm b/maps/gateway_vr/lucky_7.dm new file mode 100644 index 0000000000..66a6dd9486 --- /dev/null +++ b/maps/gateway_vr/lucky_7.dm @@ -0,0 +1,140 @@ +/obj/effect/overmap/visitable/sector/common_gateway/lucky7 + initial_generic_waypoints = list("tether_excursion_lucky7") + name = "Lucky 7 Casino and Restaraunt" + scanner_desc = @{"[i]Registration[/i]: _ERROR +[i]Class[/i]: Installation +[i]Transponder[/i]: Weak Signal +[b]Notice[/b]: Current estimated wait time: 999999"} + unknown_state = "station" + known = FALSE + icon_state = "lucky7_g" + +// -- Areas -- // + +/area/awaymission/lucky7 + icon_state = "away1" + +/area/awaymission/lucky7/casinofloor + name = "\improper Gateway - Casino Floor" + icon_state = "casino" + +/area/awaymission/lucky7/arcade + name = "\improper Gateway - Arcade" + icon_state = "arcade" + +/area/awaymission/lucky7/gateway + name = "\improper Gateway - Gateway" + icon_state = "away" + +/area/awaymission/lucky7/privategameroom + name = "\improper Gateway - Private Game Room One" + icon_state = "arcade2" + +/area/awaymission/lucky7/privategameroom/two + name = "\improper Gateway - Private Game Room Two" + +/area/awaymission/lucky7/privategameroom/three + name = "\improper Gateway - Private Game Room Three" + +/area/awaymission/lucky7/privateroom + name = "\improper Gateway - Private Room One" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/privateroom/two + name = "\improper Gateway - Private Room Two" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/privateroom/three + name = "\improper Gateway - Private Room Three" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/privateroom/four + name = "\improper Gateway - Private Room Four" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/privateroom/five + name = "\improper Gateway - Private Room Five" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/privateroom/vip + name = "\improper Gateway - VIP Room" + icon_state = "crew_quarters" + +/area/awaymission/lucky7/security + name = "\improper Gateway - Security" + icon_state = "security" + +/area/awaymission/lucky7/kitchen + name = "\improper Gateway - Kitchen" + icon_state = "kitchen" + +/area/awaymission/lucky7/bar + name = "\improper Gateway - Bar" + icon_state = "bar" + +/area/awaymission/lucky7/barbackroom + name = "\improper Gateway - Bar Backroom" + icon_state = "bar" + +/area/awaymission/lucky7/breakroom + name = "\improper Gateway - Breakroom" + icon_state = "green" + +/area/awaymission/lucky7/loungeprivateroom + name = "\improper Gateway - Private Lounge" + icon_state = "lounge" + +/area/awaymission/lucky7/lounge + name = "\improper Gateway - Lounge" + icon_state = "lounge" + +/area/awaymission/lucky7/laundry + name = "\improper Gateway - Laundry Room" + icon_state = "laundry" + +/area/awaymission/lucky7/medical + name = "\improper Gateway - Clinic" + icon_state = "medbay" + +/area/awaymission/lucky7/workshop + name = "\improper Gateway - Workshop" + icon_state = "yellow" + +/area/awaymission/lucky7/maint1 + name = "\improper Gateway - Maint 1" + icon_state = "maint" + +/area/awaymission/lucky7/maint2 + name = "\improper Gateway - Maint 2" + icon_state = "maint" + +/area/awaymission/lucky7/hall1 + name = "\improper Gateway - Hall 1" + icon_state = "hallway" + +/area/awaymission/lucky7/hall2 + name = "\improper Gateway - Hall 2" + icon_state = "hallway" + +/area/awaymission/lucky7/hotelhall + name = "\improper Gateway - Hotel Hall" + icon_state = "hallway" + +/area/awaymission/lucky7/trash + name = "\improper Gateway - Trash Collection" + icon_state = "disposal" + +/area/awaymission/lucky7/dock1 + name = "\improper Gateway - Dock 1" + icon_state = "entry_1" + +/area/awaymission/lucky7/dock2 + name = "\improper Gateway - Dock 2" + icon_state = "entry_2" + +/area/awaymission/lucky7/entry + name = "\improper Gateway - Entry Hall" + icon_state = "entry_3" + +/obj/machinery/telecomms/allinone/casino + freq_listening = list(PUB_FREQ, CSN_FREQ) \ No newline at end of file diff --git a/maps/gateway_vr/lucky_7.dmm b/maps/gateway_vr/lucky_7.dmm new file mode 100644 index 0000000000..a74d18d72d --- /dev/null +++ b/maps/gateway_vr/lucky_7.dmm @@ -0,0 +1,1299 @@ +"aa" = (/obj/effect/floor_decal/techfloor/orange{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"ab" = (/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"ac" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/embedded_controller/radio/airlock/docking_port{dir = 8; frequency = 1380; id_tag = "l7_dock_d1a3"; pixel_x = 28},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"ad" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light_switch{dir = 4; pixel_x = -26; pixel_y = -7},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"ae" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"af" = (/obj/structure/table/woodentable,/obj/machinery/light,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"ag" = (/obj/structure/table/borosilicate,/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/awaymission/lucky7/loungeprivateroom) +"ah" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"ai" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"aj" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"ak" = (/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"al" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"am" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"an" = (/obj/structure/casino_table/craps{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"ao" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"ap" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/item/weapon/material/knife/butch,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"aq" = (/obj/effect/floor_decal/spline/plain{dir = 10},/obj/structure/flora/pottedplant/stoutbush,/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"ar" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/structure/cable/green,/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; pixel_y = -27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"as" = (/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"at" = (/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"au" = (/obj/structure/casino_table/craps{dir = 1},/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"av" = (/obj/structure/table/borosilicate,/obj/structure/dancepole,/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/awaymission/lucky7/loungeprivateroom) +"aw" = (/obj/effect/floor_decal/borderfloor{dir = 1},/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/machinery/light{dir = 1},/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"ax" = (/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"ay" = (/obj/structure/table/borosilicate,/turf/simulated/floor/tiled/eris/steel/bar_light,/area/awaymission/lucky7/loungeprivateroom) +"az" = (/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"aA" = (/obj/structure/table/bench/padded,/obj/effect/floor_decal/spline/plain,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/awaymission/lucky7/loungeprivateroom) +"aB" = (/obj/structure/table/bench/padded,/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/awaymission/lucky7/loungeprivateroom) +"aC" = (/obj/item/weapon/stool/padded{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aD" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/privateroom/four) +"aE" = (/obj/structure/casino_table/blackjack_m{dir = 4},/obj/machinery/light/floortube{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aF" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"aG" = (/obj/structure/table/bench/padded,/obj/effect/floor_decal/spline/plain,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/eris/steel/bar_dance,/area/awaymission/lucky7/loungeprivateroom) +"aH" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"aI" = (/obj/structure/casino_table/blackjack_r{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aJ" = (/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"aK" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/disposalpipe/junction{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"aL" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"aM" = (/obj/structure/casino_table/blackjack_r,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aN" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"aO" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/grey/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"aP" = (/obj/effect/floor_decal/rust,/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"aQ" = (/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"aR" = (/obj/machinery/door/airlock/maintenance/common,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"aS" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"aT" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"aU" = (/obj/structure/casino_table/blackjack_r{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aV" = (/obj/machinery/light/floortube{dir = 8},/obj/structure/casino_table/roulette_chart,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"aW" = (/obj/structure/cable/green,/obj/machinery/power/fractal_reactor/fluff/smes,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"aX" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/yellow/border{dir = 10},/obj/machinery/telecomms/allinone/casino,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"aY" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/storage/box/roulette_balls_normal,/obj/item/weapon/storage/box/roulette_balls_fancy,/obj/item/weapon/storage/box/roulette_balls_cheat,/obj/structure/table/rack/shelf,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"ba" = (/obj/structure/table/borosilicate,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"bc" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"be" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"bf" = (/obj/machinery/gateway{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"bh" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"bj" = (/obj/structure/window/basic,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"bn" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"bo" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"bp" = (/turf/simulated/wall,/area/awaymission/lucky7/privategameroom) +"bt" = (/obj/machinery/light/small,/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "l7_dock_d2a1"; pixel_y = 28},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1a1_sensor"; pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "dock_d1a1_pump"},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"bu" = (/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"bw" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"bx" = (/obj/structure/sink/kitchen{name = "sink"; pixel_y = 20},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"by" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/microwave,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"bB" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"bC" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"bD" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/obj/item/device/radio{pixel_x = 10; pixel_y = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"bE" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"bH" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"bK" = (/obj/structure/bed/chair/bay/comfy/blue,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"bL" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/lightgrey/bordercorner,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"bN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"bP" = (/obj/structure/casino_table/blackjack_m{dir = 4},/obj/item/weapon/deck/cards/casino,/obj/machinery/light/floortube{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"bX" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"cb" = (/obj/machinery/gateway{dir = 9},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"cc" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"cm" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"cn" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"cp" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/loungeprivateroom) +"cq" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cr" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"cz" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"cD" = (/obj/structure/table/darkglass,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cF" = (/obj/structure/bed/chair/bay/comfy/blue{dir = 1},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cG" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"cH" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) +"cI" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"cJ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cK" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"cL" = (/obj/structure/bed/chair/bay/comfy/blue{dir = 1},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cM" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cN" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"cO" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/grey/border{dir = 10},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"cR" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"cT" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"cV" = (/obj/effect/shuttle_landmark{base_area = /area/space; base_turf = /turf/space; docking_controller = "l7_dock_d2a2"; landmark_tag = "l7_dockarm_d2a2"; name = "Dock D2A2"},/turf/space,/area/space) +"cY" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"da" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 7; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -7; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -7; pixel_y = -3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_y = -3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 7; pixel_y = -3},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"dd" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"df" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 4},/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hotelhall) +"dg" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/entry) +"dn" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/lightgrey/border{dir = 10},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"do" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"dr" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"du" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"dw" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"dy" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"dz" = (/obj/machinery/computer/arcade/orion_trail,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"dC" = (/obj/structure/bed/chair/sofa/left/brown{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"dE" = (/obj/machinery/computer/arcade/battle,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"dF" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/space_heater,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"dG" = (/obj/structure/window/basic,/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"dP" = (/obj/structure/flora/pottedplant/largebush,/obj/machinery/firealarm{pixel_y = 26},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"dS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/morgue{dir = 2; name = "Private Room"; req_access = null},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"dW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"dX" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/lightgrey/border{dir = 6},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/lightgrey/bordercorner2,/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"dZ" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"ea" = (/obj/machinery/bodyscanner{dir = 4},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"ec" = (/obj/machinery/door/morgue{dir = 2; name = "Private Room"; req_access = null},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/loungeprivateroom) +"ed" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"ei" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"ej" = (/obj/structure/kitchenspike,/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"em" = (/obj/machinery/door/airlock/maintenance/common,/obj/effect/floor_decal/rust,/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"en" = (/obj/structure/table/glass,/obj/machinery/door/window/eastleft{req_access = null},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"eo" = (/obj/structure/bed/chair/sofa/left/brown,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"ep" = (/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"er" = (/obj/effect/floor_decal/rust,/obj/structure/table/steel,/obj/item/weapon/weldingtool{pixel_x = 1; pixel_y = -4},/obj/item/clothing/glasses/welding{pixel_x = -3; pixel_y = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"et" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"ev" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"ey" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/bluedouble,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"ez" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"eC" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"eF" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"eG" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"eH" = (/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"eL" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/handcuffs{pixel_y = -5},/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs{pixel_y = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"eS" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"eU" = (/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"eV" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/firealarm{dir = 8; pixel_x = -27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"eW" = (/obj/machinery/door/airlock{id_tag = "L7 Room 3"; name = "Private Room 3"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"eY" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/item/weapon/material/kitchen/rollingpin,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"fb" = (/obj/random/trash_pile,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"fc" = (/obj/structure/bed/chair/wood{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"ff" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/storage/pill_bottle/happy,/obj/item/clothing/under/bathrobe,/obj/item/clothing/under/bathrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"fi" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"fl" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"fu" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/machinery/door/firedoor/glass/hidden/steel{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"fv" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"fx" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"fy" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/firealarm{pixel_y = 26},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"fA" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/alarm{dir = 8; pixel_x = 27},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"fD" = (/obj/machinery/door/airlock{id_tag = "L7 Room 1"; name = "Private Room 1"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"fH" = (/turf/simulated/wall,/area/awaymission/lucky7/privategameroom/three) +"fM" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"fN" = (/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"fO" = (/obj/structure/flora/pottedplant/tall,/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hotelhall) +"fQ" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/privateroom) +"fS" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hall2) +"fT" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"fU" = (/obj/structure/table/woodentable,/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"fX" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/structure/closet/firecloset,/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/entry) +"fZ" = (/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/medical) +"ga" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/bed/chair/office,/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"ge" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall2) +"gf" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"gh" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"gi" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor/eastleft{dir = 2},/obj/item/weapon/pen,/obj/machinery/door/firedoor/glass,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "casino_check"; opacity = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"gr" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/lightgrey/border{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"gx" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"gB" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{icon_state = "2-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"gD" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"gG" = (/turf/simulated/wall,/area/awaymission/lucky7/hall2) +"gH" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"gL" = (/turf/simulated/wall,/area/awaymission/lucky7/dock1) +"gN" = (/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"gS" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"gU" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"gV" = (/obj/machinery/door/airlock{name = "Arcade"},/obj/structure/cable/green{icon_state = "4-8"},/obj/item/tape/engineering,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"gZ" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"hc" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"hh" = (/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"hi" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "1-8"},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"hm" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"hn" = (/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"ho" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"hq" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"hu" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"hw" = (/obj/machinery/clawmachine,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"hy" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/privateroom/five) +"hD" = (/obj/item/weapon/stool/padded{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"hF" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/lightgrey/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"hI" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "dock_d1l_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1l_sensor"; pixel_x = 30; pixel_y = 8},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"hM" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/gateway) +"hN" = (/obj/structure/table/marble,/obj/effect/floor_decal/spline/plain{dir = 8},/obj/machinery/chemical_dispenser/premium/full{dir = 4},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"hO" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom) +"hS" = (/obj/structure/table/marble,/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"hU" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"ia" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"ib" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"id" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space) +"il" = (/obj/machinery/firealarm{dir = 8; pixel_x = -26},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"ip" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"ir" = (/obj/structure/table/gamblingtable,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/machinery/light,/turf/simulated/floor/carpet/retro,/area/awaymission/lucky7/arcade) +"it" = (/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"iu" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"iv" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"iy" = (/obj/structure/table/bench/padded,/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"iA" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/machinery/door/firedoor/glass/hidden/steel{dir = 2},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"iB" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"iE" = (/obj/effect/floor_decal/techfloor/orange{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"iG" = (/obj/random/trash_pile,/obj/random/trash,/obj/random/trash,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"iJ" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"iM" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 1},/obj/machinery/vending/wallmed1/public{pixel_y = 28},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"iV" = (/obj/structure/flora/pottedplant/tropical,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"iZ" = (/obj/effect/floor_decal/techfloor/orange,/obj/machinery/light,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"jb" = (/obj/structure/flora/pottedplant/tall,/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hall2) +"jc" = (/obj/effect/floor_decal/rust,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"jd" = (/obj/structure/cable/green{icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"je" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"jl" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"jo" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"jp" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"jq" = (/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"jr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/door/firedoor/glass/hidden/steel,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"jt" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"jv" = (/obj/machinery/light,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/medical) +"jx" = (/obj/structure/table/woodentable,/obj/item/trash/asian_bowl,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"jA" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"jB" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"jC" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"jH" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"jI" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "dock_d1l"; name = "interior access button"; pixel_x = -28; pixel_y = -26; req_access = list(13)},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"jJ" = (/obj/machinery/light{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"jK" = (/obj/structure/table/steel,/obj/random/junk,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"jM" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"jN" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"jP" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"jQ" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"jS" = (/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"jV" = (/obj/structure/cable/green{icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"jW" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"ka" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/effect/floor_decal/rust,/obj/machinery/atmospherics/pipe/tank/air/full{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"kb" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"kc" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/lightgrey/bordercorner,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"kd" = (/turf/simulated/floor/carpet/purcarpet,/area/awaymission/lucky7/privateroom/vip) +"ke" = (/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"kh" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"km" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"kp" = (/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"ks" = (/obj/machinery/firealarm{dir = 8; pixel_x = -26},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"kv" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"kx" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"ky" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"kz" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/effect/floor_decal/corner/lightgrey/border,/obj/machinery/light,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"kD" = (/turf/simulated/wall,/area/awaymission/lucky7/security) +"kF" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 4},/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hall2) +"kJ" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"kL" = (/obj/structure/table/marble,/obj/effect/floor_decal/spline/plain{dir = 1},/obj/machinery/alarm{pixel_y = 28},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"kN" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"kO" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"kP" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"kQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"kV" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"lh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"li" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"lm" = (/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"ln" = (/obj/item/weapon/stool/padded{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"lp" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal/deliveryChute,/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"lq" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"lu" = (/turf/simulated/wall,/area/awaymission/lucky7/maint1) +"lw" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"lx" = (/obj/random/drinkbottle,/obj/structure/table/fancyblack,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"lB" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/lightgrey/border{dir = 5},/obj/structure/flora/pottedplant/stoutbush,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"lE" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area/space) +"lF" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning/cee{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"lI" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"lL" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"lS" = (/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"lZ" = (/obj/structure/bed/chair/comfy/beige,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"mb" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"md" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"mh" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/atmospherics/pipe/tank/air/full{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"mo" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"mp" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"mq" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 6},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"mt" = (/obj/structure/closet/crate/trashcart,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"mu" = (/obj/structure/closet/secure_closet/freezer/meat,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"mv" = (/obj/structure/table/standard,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"mw" = (/obj/structure/flora/pottedplant/unusual,/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"mC" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"mD" = (/obj/effect/floor_decal/techfloor/orange{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"mE" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"mH" = (/obj/machinery/gateway,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"mI" = (/obj/random/trash,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"mJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/janitor,/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"mK" = (/turf/simulated/wall,/area/awaymission/lucky7/casinofloor) +"mL" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"mN" = (/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{dir = 1; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"mO" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"mQ" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"mR" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/bed/chair/office,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"mS" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"mT" = (/obj/random/trash,/obj/random/trash,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"mV" = (/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"mW" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"mX" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"na" = (/obj/structure/casino_table/blackjack_m{dir = 8},/obj/machinery/light/floortube{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"ng" = (/obj/item/weapon/stool/padded{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"nh" = (/obj/structure/window/basic,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"nj" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"nl" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"nn" = (/obj/machinery/vending/deluxe_boozeomat/open,/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/tiled/techmaint/airless,/area/awaymission/lucky7/barbackroom) +"np" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"nq" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"ns" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"nv" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"nw" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"nz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"nA" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"nC" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"nD" = (/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 9},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 9},/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"nE" = (/obj/machinery/door/airlock{id_tag = "L7 PGR 1"; name = "Private Game Room 1"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"nK" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"nM" = (/obj/machinery/door/airlock{id_tag = "L7 PGR 2"; name = "Private Game Room 2"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"nN" = (/obj/machinery/gibber,/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"nR" = (/obj/structure/table/bench/padded,/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"nS" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/obj/structure/cable/green,/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"nX" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"nY" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"ob" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"og" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"oh" = (/obj/machinery/door/airlock{id_tag = "L7 PGR 3"; name = "Private Game Room 3"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"ol" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"op" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"oq" = (/obj/effect/floor_decal/techfloor/orange{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"or" = (/obj/structure/bed/chair/sofa/left/purp,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"os" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"oA" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"oD" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"oE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"oF" = (/obj/random/trash_pile,/obj/random/trash,/obj/random/junk,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"oG" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"oH" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/obj/machinery/light,/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"oO" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"oP" = (/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"oS" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"oT" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/radio,/obj/item/ammo_casing/spent{pixel_x = -12; pixel_y = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"oV" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"oY" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 8},/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hotelhall) +"pb" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/arcade) +"pe" = (/obj/machinery/door/airlock/glass_security{req_one_access = null},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"pk" = (/obj/structure/table/glass,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 8},/obj/random/medical,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"pn" = (/obj/item/weapon/flame/candle/candelabra/everburn,/obj/structure/table/fancyblack,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"pr" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1a1"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"ps" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/book/manual/wizzoffguide,/obj/item/weapon/deck/wizoff,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah/black,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"py" = (/obj/machinery/button/remote/airlock{id = "L7 PGR 1"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"pA" = (/obj/structure/bed/chair/sofa/bench/left{dir = 1},/obj/effect/floor_decal/borderfloorblack{dir = 10},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"pB" = (/obj/machinery/button/remote/airlock{id = "L7 PGR 2"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"pE" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"pH" = (/obj/machinery/button/remote/blast_door{dir = 8; id = "L7 Cell 1"; name = "Cell 1 Door"; pixel_x = 28; req_access = null},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"pL" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"pM" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"pN" = (/obj/structure/bed/chair/comfy/beige,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"pO" = (/obj/structure/table/rack/shelf/steel,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/random/tool,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"pP" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"pV" = (/turf/simulated/wall,/area/awaymission/lucky7/loungeprivateroom) +"pX" = (/obj/structure/table/reinforced,/obj/item/ammo_magazine/m45{pixel_x = -5; pixel_y = -3},/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45{pixel_x = 5; pixel_y = 3},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"qd" = (/obj/machinery/button/remote/airlock{id = "L7 PGR 3"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"qg" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/vending/sol,/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/hotelhall) +"qk" = (/obj/structure/railing{dir = 1},/obj/random/trash_pile,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"qs" = (/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"qt" = (/obj/effect/shuttle_landmark{base_area = /area/space; base_turf = /turf/space; docking_controller = null; landmark_tag = "l7_dock_near"; name = "Near Dock"},/turf/space,/area/space) +"qv" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/captaindouble,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet/purcarpet,/area/awaymission/lucky7/privateroom/vip) +"qw" = (/obj/effect/floor_decal/rust,/obj/structure/table/rack/shelf/steel,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"qz" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"qA" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"qB" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"qF" = (/turf/simulated/wall,/area/awaymission/lucky7/breakroom) +"qG" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"qH" = (/obj/structure/cable/green{icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"qL" = (/obj/structure/table/borosilicate,/obj/structure/dancepole,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"qM" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"qN" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/lounge) +"qS" = (/obj/structure/casino_table/blackjack_l{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"qU" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"qW" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/grey/border{dir = 1},/obj/machinery/vending/wallmed1/public{pixel_y = 28},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"qY" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"rb" = (/obj/machinery/gateway{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"re" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"rf" = (/obj/effect/floor_decal/techfloor/orange{dir = 10},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"rg" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/grey/border{dir = 6},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"rj" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/casinofloor) +"rm" = (/turf/space,/area/space) +"rn" = (/obj/structure/table/woodentable,/obj/effect/floor_decal/spline/plain{dir = 8},/obj/item/clothing/mask/smokable/pipe,/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"rp" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"ru" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"rw" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/bar) +"rx" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"rA" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance/common{name = "Trash Collection"},/obj/structure/catwalk,/obj/structure/cable/green{dir = 1; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"rB" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"rK" = (/obj/structure/bed/chair/sofa/bench/right{dir = 1},/obj/effect/floor_decal/borderfloorblack{dir = 6},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"rM" = (/obj/effect/decal/cleanable/blood/oil,/obj/structure/railing,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"rN" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/bar_guide,/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"rT" = (/obj/structure/casino_table/blackjack_r{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"rU" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"rZ" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"sc" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"sg" = (/obj/machinery/sleeper{dir = 4},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"si" = (/obj/structure/bed/chair/wood{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"sk" = (/obj/random/trash,/obj/random/trash,/obj/random/junk,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"sm" = (/obj/structure/table/standard,/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"so" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"sp" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/firealarm{dir = 8; pixel_x = -27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"sq" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"ss" = (/obj/structure/table/woodentable,/obj/item/trash/plate,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"sv" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"sB" = (/obj/machinery/washing_machine,/obj/item/clothing/under/modjump3,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"sH" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/yellow/border{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"sM" = (/obj/structure/catwalk,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"sQ" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"sS" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"sT" = (/turf/simulated/wall,/area/awaymission/lucky7/maint2) +"sU" = (/obj/effect/floor_decal/techfloor/orange{dir = 6},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"sV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"sX" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/cigar/havana{pixel_x = -2; pixel_y = 2},/obj/item/weapon/storage/fancy/cigar{pixel_x = 2; pixel_y = 3},/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/bar) +"sZ" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"tc" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"td" = (/obj/structure/casino_table/roulette_chart,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"te" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"tm" = (/obj/machinery/vending/deluxe_dinner/open,/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/tiled/techmaint/airless,/area/awaymission/lucky7/barbackroom) +"to" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/item/weapon/stool/padded{dir = 8},/obj/effect/decal/cleanable/filth,/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"tp" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"tr" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"ts" = (/obj/effect/decal/cleanable/blood/oil,/obj/structure/closet/crate/internals,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"tt" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/alarm{dir = 8; pixel_x = 27},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"tv" = (/obj/structure/casino_table/roulette_table,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"tz" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"tD" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"tE" = (/obj/structure/table/marble,/obj/item/weapon/material/ashtray/glass,/obj/machinery/light/floortube{dir = 4},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"tG" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"tH" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/yellow/border{dir = 1},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"tJ" = (/obj/effect/floor_decal/sign/dock/one,/obj/machinery/atmospherics/pipe/manifold4w/hidden,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"tM" = (/obj/structure/table/gamblingtable,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/structure/cable/green{icon_state = "0-2"},/obj/effect/floor_decal/corner/yellow/border{dir = 5},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"tQ" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"tV" = (/obj/effect/floor_decal/techfloor/orange{dir = 1},/obj/effect/floor_decal/techfloor/hole/right{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"tY" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"tZ" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"ua" = (/obj/machinery/door/firedoor/glass/hidden/steel,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"ub" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"uc" = (/obj/effect/floor_decal/techfloor/orange{dir = 5},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"ue" = (/obj/structure/bed/chair/sofa/bench/right,/obj/effect/floor_decal/borderfloorblack{dir = 9},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"uf" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 4},/obj/structure/flora/pottedplant,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"up" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"uu" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom/two) +"uv" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"ux" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/door/firedoor/glass/hidden/steel,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"uy" = (/obj/structure/cable/green{icon_state = "2-4"},/obj/effect/floor_decal/rust,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"uz" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"uA" = (/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance/engineering,/obj/structure/table/rack/steel,/obj/random/contraband,/obj/structure/railing,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"uB" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"uE" = (/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"uF" = (/obj/structure/casino_table/craps,/obj/item/weapon/dice{pixel_x = 4; pixel_y = 6},/obj/machinery/light/floortube{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"uG" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"uH" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"uI" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"uJ" = (/obj/machinery/door/window/brigdoor/southleft{dir = 8; id = "L7 Cell 1"; name = "Cell 1"; req_access = list(2)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"uL" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/closet/firecloset,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"uO" = (/obj/random/trash_pile,/obj/effect/floor_decal/rust,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"uR" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom/four) +"uY" = (/obj/structure/casino_table/craps{dir = 1},/obj/item/weapon/dice,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"uZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"va" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{dir = 1; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"vb" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"vd" = (/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"vf" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 6},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"vg" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"vk" = (/obj/effect/floor_decal/rust,/obj/random/trash_pile,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"vo" = (/obj/machinery/door/airlock/glass{name = "Dock Lounge"},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"vq" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"vr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"vt" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"vu" = (/obj/effect/floor_decal/spline/plain{dir = 5},/obj/item/weapon/stool/padded{dir = 8},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"vx" = (/obj/structure/casino_table/blackjack_m,/obj/machinery/light/floortube{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"vy" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"vN" = (/obj/effect/floor_decal/rust,/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"vO" = (/obj/structure/lattice,/turf/space,/area/space) +"vR" = (/obj/structure/casino_table/blackjack_l{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"vT" = (/obj/effect/floor_decal/rust,/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"vU" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"vZ" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"wb" = (/obj/structure/bed/chair/sofa/left/black{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"wc" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"wd" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"we" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/casino,/obj/item/weapon/pen,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"wj" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/firedoor/glass/hidden/steel{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"wk" = (/obj/structure/bed/chair/sofa/right/black{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"wl" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"wo" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"wq" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/button/remote/airlock{id = "L7 Room 4"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"wt" = (/obj/structure/cable/green{icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"wu" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"wv" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"ww" = (/obj/structure/table/marble,/obj/effect/floor_decal/spline/plain{dir = 8},/obj/machinery/chemical_dispenser/premium/full{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"wC" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"wG" = (/obj/structure/table/woodentable,/obj/item/trash/asian_bowl,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"wJ" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"wK" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"wL" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"wT" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"wY" = (/obj/structure/bed/chair/sofa/corner/brown{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"xb" = (/obj/structure/table/rack/steel,/obj/random/maintenance,/obj/random/maintenance,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"xd" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"xh" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/embedded_controller/radio/airlock/docking_port{dir = 8; frequency = 1380; id_tag = "l7_dock_d2a3"; pixel_x = 28},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"xm" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/lightgrey/border{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"xn" = (/turf/simulated/wall,/area/awaymission/lucky7/dock2) +"xq" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/yellow/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"xr" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/random/medical,/obj/machinery/light,/obj/random/medical,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"xt" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"xv" = (/obj/structure/table/woodentable,/obj/item/trash/plate,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"xz" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"xC" = (/obj/machinery/light,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"xF" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"xH" = (/obj/structure/casino_table/craps,/obj/machinery/light/floortube{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"xJ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/firedoor/glass/hidden/steel{dir = 1},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"xK" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"xL" = (/obj/effect/decal/cleanable/blood/oil,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"xM" = (/obj/item/weapon/stool/baystool/padded{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"xN" = (/obj/machinery/holoplant,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"xU" = (/obj/item/weapon/gun/projectile/shotgun/pump{ammo_type = /obj/item/ammo_casing/a12g/pellet; pixel_x = 1; pixel_y = 4},/obj/item/weapon/gun/projectile/shotgun/pump{ammo_type = /obj/item/ammo_casing/a12g/pellet; pixel_x = 2; pixel_y = -6},/obj/structure/table/rack/gun_rack,/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,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"xZ" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"yb" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"yf" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"yg" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"yi" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"yk" = (/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"yo" = (/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"yp" = (/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"yv" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"yw" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/grey/border{dir = 5},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"yy" = (/obj/structure/bed/chair/sofa/right/purp{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"yz" = (/obj/machinery/door/airlock/multi_tile/glass{name = "Dock Lounge"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/lounge) +"yA" = (/obj/structure/table/woodentable,/obj/random/maintenance/foodstuff,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"yD" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"yH" = (/obj/structure/table/steel,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"yO" = (/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"yR" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/door/firedoor/glass,/obj/random/maintenance/foodstuff,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"yX" = (/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"yY" = (/turf/simulated/wall,/area/awaymission/lucky7/arcade) +"yZ" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"za" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"zg" = (/obj/structure/table/gamblingtable,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"zk" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"zp" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"zq" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"zr" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "dock_d1l_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1l_sensor"; pixel_x = 30; pixel_y = 8},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"zv" = (/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"zx" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"zD" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"zE" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"zH" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"zK" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"zM" = (/obj/structure/table/woodentable,/obj/item/trash/plate,/obj/item/weapon/material/kitchen/utensil/fork/plastic,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"zQ" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"zR" = (/obj/structure/railing{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"zV" = (/obj/effect/floor_decal/rust,/obj/structure/table/steel,/obj/random/tool,/obj/random/maintenance,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"zW" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"zY" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/catwalk,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Ab" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"Am" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"Ap" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Ar" = (/obj/effect/floor_decal/rust,/obj/structure/table/rack/shelf/steel,/obj/random/maintenance/engineering,/obj/random/contraband,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"Av" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "dock_d1l"; name = "interior access button"; pixel_x = -28; pixel_y = -26; req_access = list(13)},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"Ax" = (/obj/machinery/door/airlock/maintenance/common,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Ay" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "dock_d1a1"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"AF" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"AG" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"AJ" = (/obj/random/trash_pile,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"AK" = (/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 4},/turf/simulated/floor/tiled/freezer,/area/awaymission/lucky7/privateroom/vip) +"AN" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/privateroom/three) +"AO" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"AP" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 1},/obj/structure/flora/pottedplant,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"AQ" = (/obj/machinery/vending/deluxe_cigs/open,/obj/effect/floor_decal/spline/plain,/obj/structure/cable/green{icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/tiled/techmaint/airless,/area/awaymission/lucky7/barbackroom) +"AS" = (/obj/structure/bed/chair/sofa/bench,/obj/effect/floor_decal/borderfloorblack{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"AU" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/grey/border{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"AW" = (/obj/effect/floor_decal/steeldecal/steel_decals6{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals6,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"AX" = (/obj/structure/disposalpipe/junction/yjunction{dir = 1},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"AY" = (/obj/structure/flora/pottedplant/tall,/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hotelhall) +"Ba" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"Be" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Bf" = (/turf/simulated/wall,/area/awaymission/lucky7/lounge) +"Bi" = (/obj/effect/floor_decal/rust,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Bm" = (/obj/machinery/door/airlock/maintenance/common,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/maint2) +"Bq" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/grey/border{dir = 1},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Bs" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"BA" = (/obj/structure/closet/secure_closet/bar,/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"BE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"BH" = (/obj/structure/bed/chair/sofa/right/black{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"BK" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"BM" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/disposalpipe/junction{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"BQ" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"BT" = (/obj/structure/table/woodentable,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"BV" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/bed/chair/sofa/left/black{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"BW" = (/obj/effect/floor_decal/rust,/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"Cb" = (/obj/structure/table/standard,/obj/item/clothing/under/suit_jacket/really_black{pixel_x = 5; pixel_y = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Cf" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"Ch" = (/obj/machinery/door/airlock/glass_security{req_one_access = null},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Ci" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"Ck" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Cl" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/bar) +"Cm" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Cn" = (/obj/machinery/door/airlock{id_tag = "br bathroom"; name = "Bathroom"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"Co" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"Cp" = (/obj/machinery/door/airlock/freezer{name = "Freezer"},/turf/simulated/floor/tiled/freezer/cold,/area/awaymission/lucky7/kitchen) +"Cu" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"CC" = (/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"CD" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"CE" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/machinery/door/firedoor/glass/hidden/steel,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"CG" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"CI" = (/obj/machinery/door/firedoor/glass/hidden/steel{dir = 2},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"CM" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/yellow/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"CN" = (/obj/effect/floor_decal/spline/plain{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"CO" = (/obj/structure/disposalpipe/junction{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"CQ" = (/obj/effect/floor_decal/spline/plain{dir = 9},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"CR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"CU" = (/obj/structure/table/steel,/obj/random/tool,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"CW" = (/obj/structure/table/steel,/obj/item/stack/cable_coil,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"CZ" = (/obj/structure/frame,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Db" = (/obj/effect/floor_decal/spline/plain{dir = 1},/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Dg" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"Dh" = (/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"Di" = (/turf/simulated/wall,/area/awaymission/lucky7/workshop) +"Dk" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"Dm" = (/obj/effect/floor_decal/spline/plain{dir = 10},/obj/item/weapon/stool/padded{dir = 1},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Dn" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"Dp" = (/obj/effect/floor_decal/techfloor/orange{dir = 8},/obj/effect/floor_decal/techfloor/hole/right{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"Dv" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/bar) +"Dw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Dx" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_coffee/full{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"DD" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"DF" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"DG" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"DH" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"DI" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"DL" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom/five) +"DO" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"DP" = (/obj/structure/morgue{dir = 2},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/medical) +"DQ" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"DR" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"DS" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"DT" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"DY" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"DZ" = (/obj/effect/shuttle_landmark{base_area = /area/space; base_turf = /turf/space; docking_controller = "l7_dock_d1a1"; landmark_tag = "l7_dockarm_d1a1"; name = "Dock D1A1"},/turf/space,/area/space) +"Ee" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "dock_d1a3_pump"},/obj/machinery/light/small,/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1a3_sensor"; pixel_y = -25},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "l7_dock_d1a2"; pixel_y = 28},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/obj/effect/floor_decal/industrial/warning/cee{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Ei" = (/obj/machinery/door/airlock{id_tag = "L7 VIP Room"; name = "VIP Room"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Es" = (/obj/effect/map_helper/airlock/door/int_door,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 8},/obj/machinery/door/airlock/glass_external,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Et" = (/obj/machinery/door/airlock/engineering{name = "Workshop"; req_one_access = null},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Ew" = (/obj/effect/map_helper/airlock/door/int_door,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 8},/obj/machinery/door/airlock/glass_external,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"Ez" = (/obj/structure/table/steel,/obj/item/stack/material/diamond{amount = 50; pixel_x = -5; pixel_y = -5},/obj/item/stack/material/diamond{amount = 50},/obj/item/stack/material/diamond{amount = 50; pixel_x = 5; pixel_y = 5},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"EB" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"EC" = (/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"EF" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"EI" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/gateway) +"EM" = (/obj/effect/floor_decal/techfloor/orange,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"EN" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"EO" = (/obj/machinery/door/airlock/maintenance/common,/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"ES" = (/obj/structure/railing,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"ET" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"EW" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/oil,/obj/structure/railing,/obj/machinery/power/terminal{dir = 1},/obj/structure/cable{icon_state = "0-2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Fa" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance/engineering,/obj/item/device/flashlight/color,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Fd" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"Fj" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"Fl" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Fm" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/grey/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Fp" = (/obj/effect/floor_decal/spline/plain{dir = 10},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"Fr" = (/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"Ft" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_one_access = null},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/medical) +"Fu" = (/turf/simulated/wall,/area/awaymission/lucky7/bar) +"Fv" = (/obj/item/weapon/stool/padded{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Fw" = (/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"FF" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"FG" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/grey/border,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hotelhall) +"FJ" = (/obj/machinery/door/airlock/maintenance/common,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"FK" = (/obj/structure/railing,/obj/structure/railing{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"FL" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"FN" = (/obj/random/trash_pile,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"FQ" = (/obj/effect/landmark/hidden_level,/turf/space,/area/space) +"FT" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "1-2"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"FU" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"FV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"FW" = (/obj/random/trash,/obj/machinery/light/small{dir = 4},/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"FY" = (/obj/structure/closet,/obj/random/junk,/obj/random/junk,/obj/random/maintenance,/obj/random/maintenance,/obj/effect/floor_decal/rust,/obj/random/contraband,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"FZ" = (/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Ge" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"Gf" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Gg" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"Gh" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"Gi" = (/obj/structure/railing{dir = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Gj" = (/turf/simulated/wall,/area/awaymission/lucky7/hotelhall) +"Gk" = (/obj/structure/table/woodentable,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/carpet/purcarpet,/area/awaymission/lucky7/privateroom/vip) +"Gm" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{icon_state = "1-4"},/obj/machinery/button/remote/airlock{id = "L7 VIP Room"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Gn" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Gp" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"Gr" = (/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Gs" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Gz" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"GA" = (/obj/effect/floor_decal/techfloor/orange{dir = 4},/obj/effect/floor_decal/techfloor/hole/right{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/gateway) +"GE" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"GJ" = (/turf/simulated/wall,/area/awaymission/lucky7/privategameroom/two) +"GO" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"GP" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 8},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"GQ" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/bodybags,/obj/random/maintenance/medical,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/medical) +"GR" = (/obj/structure/table/standard,/obj/machinery/button/remote/airlock{id = "br bathroom"; name = "Bathroom Lock"; pixel_x = -20; pixel_y = 10; specialfunctions = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"GS" = (/obj/effect/floor_decal/rust,/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"GT" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"GV" = (/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"GX" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"Ha" = (/obj/machinery/vending/wallmed1/public{pixel_x = 28},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"Hb" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"Hf" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/obj/machinery/light,/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"Hg" = (/obj/effect/floor_decal/borderfloorblack,/obj/structure/bed/chair/sofa/bench{dir = 1},/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"Hl" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Hm" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Hn" = (/obj/structure/table/marble,/obj/machinery/light/floortube{dir = 1},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Ht" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1a1"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Hx" = (/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Hz" = (/obj/random/trash,/obj/structure/railing{dir = 8},/obj/structure/railing{dir = 1},/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"HA" = (/obj/structure/bed/chair/comfy/beige{dir = 1},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"HB" = (/obj/structure/bed/chair/comfy/beige{dir = 1},/obj/machinery/light,/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"HF" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/grille,/turf/space,/area/space) +"HH" = (/obj/effect/floor_decal/rust,/obj/structure/mopbucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"HJ" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"HM" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/yellow/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/yellow/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"HQ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/button/remote/airlock{id = "L7 Room 1"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"HS" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"HW" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"HZ" = (/obj/structure/table/rack/steel,/obj/item/weapon/spacecash/c1000{pixel_x = 6; pixel_y = 6},/obj/item/weapon/spacecash/c1000{pixel_x = 3; pixel_y = 3},/obj/item/weapon/spacecash/c1000,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"Ig" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Ij" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Ik" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Im" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/breakroom) +"In" = (/obj/structure/table/glass,/obj/random/medical,/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 8},/obj/item/weapon/tool/screwdriver,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Iq" = (/obj/structure/table/rack,/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = 3; pixel_y = -3},/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = -5; pixel_y = -3},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = 3; pixel_y = 3},/obj/item/ammo_magazine/ammo_box/b12g/pellet{pixel_x = -5; pixel_y = 3},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Ir" = (/obj/structure/table/glass,/obj/random/soap,/obj/item/weapon/towel/random,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"Is" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"It" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"Iu" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"Iv" = (/obj/effect/floor_decal/rust,/obj/random/maintenance,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"Iw" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"IC" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"IF" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"IJ" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"IM" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/reagentgrinder,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"IN" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/grey/border{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"IR" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"IS" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Jc" = (/obj/structure/table/steel,/obj/random/cash/huge{pixel_y = 8},/obj/random/cash/huge,/obj/item/weapon/bikehorn{pixel_x = -7; pixel_y = 7},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"Jd" = (/obj/structure/toilet{pixel_y = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"Jg" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/industrial/danger/corner{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Jj" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Jp" = (/obj/machinery/body_scanconsole{dir = 4},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Jq" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Jw" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "casino_check"},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Jy" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Jz" = (/obj/structure/cable/green{icon_state = "2-4"},/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/disposalpipe/junction/yjunction{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"JB" = (/turf/simulated/wall,/area/awaymission/lucky7/barbackroom) +"JC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"JE" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/item/weapon/stool/padded{dir = 8},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"JK" = (/obj/machinery/light/small,/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "l7_dock_d1a1"; pixel_y = 28},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1a1_sensor"; pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "dock_d1a1_pump"},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/obj/effect/floor_decal/industrial/warning/cee{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"JL" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"JN" = (/obj/structure/casino_table/roulette_table,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"JP" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"JR" = (/obj/structure/disposalpipe/junction/yjunction{dir = 1},/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"JU" = (/obj/machinery/door/airlock/maintenance/common,/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/door/firedoor/glass,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"JW" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"Ka" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/bed/chair/sofa/bench/left,/obj/effect/floor_decal/borderfloorblack{dir = 5},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"Kf" = (/turf/simulated/wall,/area/awaymission/lucky7/kitchen) +"Ki" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Kj" = (/obj/structure/flora/pottedplant/tall,/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/hall2) +"Kk" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"Kl" = (/turf/simulated/wall,/area/awaymission/lucky7/medical) +"Km" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/alarm{dir = 1; pixel_y = -27},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Kn" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Ks" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"Kt" = (/obj/structure/closet/secure_closet/personal/cabinet,/obj/item/weapon/towel/random,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"Ku" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"Kw" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/obj/item/stack/material/phoron{amount = 2},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Kx" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/junction{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"KA" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"KC" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"KE" = (/obj/structure/casino_table/blackjack_l,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"KG" = (/obj/machinery/door/airlock,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"KH" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"KI" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"KK" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom/three) +"KL" = (/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"KM" = (/obj/machinery/door/airlock{id_tag = "L7 Room 4"; name = "Private Room 4"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"KN" = (/turf/simulated/wall/r_wall,/area/awaymission/lucky7/security) +"KR" = (/obj/random/trash_pile,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"KS" = (/obj/structure/table/steel,/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/oil,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"KT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning/cee{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"KU" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/obj/effect/floor_decal/sign/dock/two,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"KY" = (/obj/structure/table/rack/steel,/obj/random/maintenance,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"KZ" = (/obj/structure/bed/chair/sofa/left/purp{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Le" = (/obj/random/trash_pile,/obj/effect/floor_decal/rust,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Lg" = (/obj/random/trash,/obj/random/trash,/obj/machinery/light/small,/obj/structure/railing{dir = 8},/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"Lh" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"Li" = (/obj/effect/floor_decal/rust,/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Lj" = (/obj/machinery/door/airlock{name = "Breakroom"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"Lk" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1l"; name = "exterior access button"; pixel_x = 28; pixel_y = -6; req_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Ll" = (/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -26},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Lo" = (/obj/structure/table/woodentable,/obj/item/trash/bowl,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Lq" = (/obj/item/modular_computer/console{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Lr" = (/obj/structure/closet/crate,/obj/random/tool,/obj/random/tool,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/obj/machinery/light,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Ls" = (/obj/effect/floor_decal/borderfloor{dir = 1},/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/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/flora/pottedplant/unusual,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Lw" = (/turf/simulated/wall,/area/awaymission/lucky7/privateroom/vip) +"Lx" = (/obj/structure/salvageable/slotmachine2,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Ly" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/purcarpet,/area/awaymission/lucky7/privateroom/vip) +"LA" = (/obj/structure/bed/chair/comfy/beige,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"LB" = (/obj/structure/salvageable/slotmachine1,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"LC" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"LE" = (/obj/machinery/slot_machine,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"LF" = (/obj/structure/table/steel,/obj/random/tool,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"LI" = (/obj/item/modular_computer/console{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"LJ" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/purpledouble,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"LL" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/obj/structure/closet/firecloset,/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"LN" = (/obj/structure/table/marble,/obj/random/drinkbottle,/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"LO" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/bed/chair/office,/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"LU" = (/obj/structure/table/woodentable,/obj/item/trash/plate,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"LV" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/structure/extinguisher_cabinet{dir = 8; pixel_x = 30},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"LY" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"Ma" = (/obj/structure/table/steel,/obj/random/tool,/obj/random/tool,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Mb" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Mc" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 7; pixel_y = -3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_y = -3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -7; pixel_y = -3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = 7; pixel_y = 3},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass{pixel_x = -7; pixel_y = 3},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Md" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/obj/structure/cable/green{icon_state = "0-4"},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"Me" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/book/manual/wizzoffguide,/obj/item/weapon/deck/wizoff,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah/black,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"Mf" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"Mg" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Mh" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/grey/border{dir = 4},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Mk" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1a3"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Mm" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/yellow/border,/obj/machinery/light,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Mn" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/grey/border{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hotelhall) +"Mo" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Mq" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/machinery/vending/cola/soft{dir = 4},/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/lounge) +"Ms" = (/obj/machinery/vending/assist{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/yellow/border{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Mt" = (/obj/structure/bed/chair/sofa/brown,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Mw" = (/turf/simulated/wall,/area/awaymission/lucky7/gateway) +"My" = (/obj/machinery/gateway/centeraway,/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"MA" = (/obj/structure/flora/pottedplant/stoutbush,/obj/effect/floor_decal/spline/plain{dir = 10},/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/bar) +"ME" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/lightgrey/border{dir = 10},/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"MG" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"MJ" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/lightgrey/border{dir = 6},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/lightgrey/bordercorner2,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"MQ" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"MV" = (/obj/effect/floor_decal/rust,/obj/random/junk,/obj/structure/table/rack/steel,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"MX" = (/obj/structure/table/steel,/obj/item/weapon/tool/wrench{pixel_x = 6; pixel_y = -3},/obj/item/device/multitool{pixel_x = -6},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"MY" = (/obj/effect/floor_decal/rust,/obj/structure/table/steel,/obj/item/stack/material/phoron{amount = 19},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"MZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"Na" = (/obj/structure/table/marble,/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Nb" = (/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/structure/closet/secure_closet/brig{id = "Cell 1"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"Nc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Nd" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Ng" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "1-8"},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Ni" = (/obj/random/trash_pile,/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Nl" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/breakroom) +"Nm" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"No" = (/obj/machinery/door/morgue{dir = 2; name = "Private Room"; req_access = null},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Nq" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Nr" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Ny" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Nz" = (/obj/structure/coatrack,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"NC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/lounge) +"ND" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/button/remote/airlock{id = "L7 Room 5"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"NF" = (/obj/structure/cable{icon_state = "0-8"},/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"NG" = (/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"NI" = (/obj/structure/bed/chair/comfy/beige{dir = 1; icon_state = "comfychair_preview"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"NJ" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"NL" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock2) +"NN" = (/obj/machinery/washing_machine,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"NQ" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"NR" = (/obj/machinery/button/remote/blast_door{dir = 8; id = "L7 Cell 2"; name = "Cell 2 Door"; pixel_x = 28; req_access = null},/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"NS" = (/obj/structure/table/woodentable,/obj/random/maintenance/foodstuff,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"NT" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "brig_lockdown"; name = "Security Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/security) +"NV" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"NY" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/medical) +"Oa" = (/obj/structure/undies_wardrobe,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"Of" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_security{req_one_access = null},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Og" = (/obj/machinery/gateway{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"Oj" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Ok" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Ol" = (/obj/item/weapon/stool/padded{dir = 1},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Om" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/flora/pottedplant,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Oo" = (/obj/structure/table/woodentable,/obj/random/drinkbottle,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Oq" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/door/firedoor/glass/hidden/steel{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"Or" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "dock_d1a1"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"Ot" = (/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/structure/closet/secure_closet/brig{id = "Cell 2"},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"Ou" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"Ow" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Ox" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"OA" = (/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"OB" = (/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/machinery/light/small{dir = 1},/obj/structure/bed/padded,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"OC" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"OE" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"OI" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"OJ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"OM" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"ON" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"OO" = (/obj/effect/floor_decal/corner/lightorange{dir = 5},/obj/effect/floor_decal/borderfloor/shifted{dir = 1},/obj/effect/floor_decal/corner/lightorange/border/shifted{dir = 1},/obj/structure/table/steel,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"OP" = (/turf/simulated/wall,/area/awaymission/lucky7/laundry) +"OS" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"OT" = (/obj/machinery/slot_machine,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"OW" = (/obj/effect/floor_decal/rust,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Pa" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Pc" = (/obj/structure/table/steel,/obj/random/maintenance/engineering,/obj/random/junk,/obj/effect/floor_decal/rust,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Pj" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Pk" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/chem_master/condimaster,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Pm" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "dock_d1l_pump"},/obj/effect/map_helper/airlock/atmos/chamber_pump,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Pn" = (/obj/structure/table/rack/steel,/obj/random/maintenance,/obj/random/junk,/obj/random/junk,/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/blood/oil,/obj/random/contraband,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Pq" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Ps" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Pu" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"Pw" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"Py" = (/obj/structure/closet/walllocker_double{dir = 8; name = "Game Cabinet"; pixel_x = -28},/obj/item/weapon/book/manual/wizzoffguide,/obj/item/weapon/deck/wizoff,/obj/item/weapon/storage/pill_bottle/dice_nerd,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards/casino,/obj/item/weapon/deck/cah,/obj/item/weapon/deck/cah/black,/obj/item/weapon/storage/dicecup,/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"PC" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/button/remote/airlock{id = "L7 Room 3"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"PE" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"PF" = (/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"PG" = (/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"PI" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"PJ" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"PN" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"PP" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"PQ" = (/obj/structure/bed/chair/sofa/right/brown,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"PT" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/light{dir = 1},/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"PV" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/sink/kitchen{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"PX" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_soft/full{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Qa" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"Qd" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Qg" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/medical{name = "Clinic"; req_one_access = null},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Qi" = (/obj/machinery/door/airlock,/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"Qm" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/cooker/grill,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Qo" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/cooker/fryer,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Qp" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/vending/bepis,/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/hotelhall) +"Qq" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"Qr" = (/obj/machinery/door/airlock/highsecurity{locked = 1; name = "Safe"; req_one_access = null},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"Qs" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/lightgrey/border{dir = 5},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Qt" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"Qv" = (/obj/structure/disposalpipe/segment{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Qz" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"QC" = (/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"QD" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"QG" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"QK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"QM" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 1; pixel_y = 27; start_charge = 0},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"QR" = (/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"QU" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"QV" = (/obj/machinery/casino_prize_dispenser,/obj/effect/floor_decal/spline/plain{dir = 10},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"Rb" = (/obj/machinery/sleep_console{dir = 4},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Rc" = (/obj/effect/floor_decal/spline/plain,/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/glass,/obj/random/cash/big{pixel_x = 5; pixel_y = 8},/obj/random/cash/big,/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"Rf" = (/obj/machinery/casino_prize_dispenser,/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"Rk" = (/obj/machinery/chipmachine{pixel_y = 32},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Rm" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"Ro" = (/obj/structure/bed/chair/sofa/brown{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"Ru" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Rw" = (/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"Rx" = (/obj/effect/floor_decal/spline/plain,/obj/item/weapon/stool/padded{dir = 1},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"RF" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"RH" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"RL" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"RM" = (/turf/simulated/floor/carpet/purple,/area/awaymission/lucky7/privategameroom) +"RN" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"RQ" = (/obj/effect/floor_decal/rust,/obj/structure/table/rack/steel,/obj/random/tool,/obj/random/junk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"RT" = (/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"RV" = (/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"RW" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/lucky7/barbackroom) +"RX" = (/obj/structure/table/woodentable,/obj/item/trash/bowl,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"RY" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"RZ" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/grey/border{dir = 9},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Sd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Sj" = (/obj/item/weapon/stool/padded,/obj/structure/disposalpipe/junction/yjunction{dir = 8},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Sk" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"Sl" = (/obj/machinery/door/airlock{id_tag = "L7 Room 4"; name = "Private Room 4"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"Sm" = (/obj/effect/shuttle_landmark{base_area = /area/space; base_turf = /turf/space; docking_controller = "l7_dock_d1a2"; landmark_tag = "l7_dockarm_d1a2"; name = "Dock D1A2"},/turf/space,/area/space) +"Sn" = (/obj/structure/bed/chair/sofa/brown{dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"Sr" = (/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/breakroom) +"Ss" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"Sv" = (/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"Sw" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hotelhall) +"SE" = (/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"SF" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/grey/bordercorner,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"SG" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/two) +"SI" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/grey/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/laundry) +"SK" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"SM" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"SO" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/grey/border{dir = 6},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hotelhall) +"SP" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"SR" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"SS" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "dock_d1a3_pump"},/obj/machinery/light/small,/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "dock_d1a3_sensor"; pixel_y = -25},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "l7_dock_d2a2"; pixel_y = 28},/obj/effect/map_helper/airlock/atmos/chamber_pump,/obj/effect/map_helper/airlock/sensor/chamber_sensor,/obj/effect/floor_decal/industrial/warning/cee{dir = 4},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"SX" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"SY" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"SZ" = (/obj/effect/floor_decal/borderfloor{dir = 1},/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/structure/disposalpipe/segment{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Ta" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/stack/material/phoron{amount = 6},/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Td" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"Te" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"Tf" = (/obj/structure/cable{icon_state = "0-8"},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/power/port_gen/pacman{anchored = 1},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"Th" = (/obj/machinery/door/window/brigdoor/southleft{dir = 8; id = "L7 Cell 2"; name = "Cell 2"; req_access = list(2)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/security) +"Tj" = (/obj/structure/bed/chair/sofa/brown{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"Tk" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"Tl" = (/obj/structure/mirror{pixel_y = 38},/obj/structure/sink{pixel_y = 20},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"Tn" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor/eastright{dir = 2},/obj/machinery/door/firedoor/glass,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "casino_check"; opacity = 0},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Ts" = (/obj/structure/flora/pottedplant/stoutbush,/obj/effect/floor_decal/spline/plain{dir = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/bar) +"Tt" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Tu" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"Tv" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/vip) +"Tx" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/effect/decal/cleanable/egg_smudge,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Ty" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"TB" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/industrial/danger/corner{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"TD" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"TF" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/lightgrey/border{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"TH" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"TI" = (/obj/machinery/door/airlock{id_tag = "L7 Room 2"; name = "Private Room 2"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"TK" = (/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"TM" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"TP" = (/obj/machinery/light{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"TQ" = (/obj/machinery/gateway{dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"TR" = (/obj/structure/window/basic,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"TT" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"TU" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"TV" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/lucky7/dock1) +"TW" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/cable/green{icon_state = "2-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"TX" = (/obj/random/trash_pile,/obj/random/maintenance,/obj/effect/floor_decal/rust,/obj/structure/railing{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"TY" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"TZ" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/obj/structure/cable/green{icon_state = "0-4"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"Ub" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Ud" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Uf" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Ug" = (/obj/effect/floor_decal/corner/grey/diagonal,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Um" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1l"; name = "exterior access button"; pixel_x = 28; pixel_y = -6; req_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"Ut" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/pen,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Uu" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"Uv" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/borderfloorblack/corner2{dir = 5},/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/gateway) +"Ux" = (/obj/machinery/firealarm{pixel_y = 26},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"UD" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/lightgrey/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"UE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/maint1) +"UG" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/orangedouble,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/three) +"UM" = (/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"US" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "dock_d1l_pump"},/obj/effect/map_helper/airlock/atmos/chamber_pump,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"UW" = (/turf/simulated/wall,/area/awaymission/lucky7/trash) +"UY" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/alarm{dir = 4; pixel_x = -27},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"Va" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/machinery/door/airlock/glass{name = "Kitchen"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Vd" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/button/remote/airlock{id = "L7 Room 2"; name = "Door Lock"; pixel_x = 24; pixel_y = 26},/obj/machinery/light_switch{pixel_x = 33; pixel_y = 26},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/two) +"Vi" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/machinery/vending/security{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Vk" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{icon_state = "2-4"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Vm" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"Vp" = (/obj/machinery/gateway{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"Vs" = (/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"Vt" = (/obj/machinery/light,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Vu" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/paper_bin{pixel_x = -1; pixel_y = 4},/obj/item/weapon/folder/white,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Vv" = (/obj/effect/floor_decal/spline/plain{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Vw" = (/obj/machinery/slot_machine,/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hall2) +"Vx" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "dock_d1a3"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/ext_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"Vz" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/machinery/door/firedoor/glass/hidden/steel{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"VC" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/industrial/danger{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"VD" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/greendouble,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"VO" = (/obj/machinery/door/firedoor/glass,/obj/structure/grille,/obj/structure/window/reinforced/full,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"VS" = (/turf/simulated/floor/plating,/area/awaymission/lucky7/trash) +"VT" = (/obj/structure/table/bench/padded,/turf/simulated/floor/wood,/area/awaymission/lucky7/lounge) +"VU" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/three) +"VV" = (/obj/effect/floor_decal/spline/plain{dir = 9},/obj/structure/flora/pottedplant/stoutbush,/turf/simulated/floor/carpet/turcarpet,/area/awaymission/lucky7/casinofloor) +"VW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Wc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"Wd" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/structure/extinguisher_cabinet{dir = 8; pixel_x = 30},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"Wh" = (/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Wi" = (/obj/effect/floor_decal/corner/lightgrey{dir = 10},/obj/effect/floor_decal/corner/lightgrey{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/machinery/vending/cigarette{dir = 4},/turf/simulated/floor/tiled/monotile,/area/awaymission/lucky7/lounge) +"Wj" = (/obj/structure/table/rack,/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/red/border{dir = 6},/obj/item/clothing/suit/armor/bulletproof/alt{pixel_x = -6},/obj/item/clothing/suit/armor/bulletproof/alt{pixel_x = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Wm" = (/obj/structure/table/gamblingtable,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet/green,/area/awaymission/lucky7/privategameroom/two) +"Wp" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Wr" = (/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Ws" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Wu" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Wy" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/yellowdouble,/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"Wz" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock2) +"WA" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"WB" = (/obj/machinery/door/firedoor/glass/hidden/steel,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"WC" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/random/donkpocketbox{pixel_x = 1; pixel_y = 4},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"WE" = (/obj/structure/cable/green{icon_state = "1-2"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"WG" = (/obj/effect/floor_decal/spline/plain{dir = 9},/turf/simulated/floor/water/pool,/area/awaymission/lucky7/privateroom/vip) +"WI" = (/obj/effect/floor_decal/rust,/obj/random/maintenance,/turf/simulated/floor/plating,/area/awaymission/lucky7/maint1) +"WJ" = (/obj/machinery/door/airlock/glass_external,/obj/effect/map_helper/airlock/door/int_door,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled/dark,/area/awaymission/lucky7/dock1) +"WK" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom) +"WM" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"WP" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"WQ" = (/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/obj/structure/table/standard,/obj/item/device/healthanalyzer,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"WR" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"WU" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"WV" = (/obj/structure/disposalpipe/segment,/obj/structure/catwalk,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/lucky7/maint2) +"WX" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"WZ" = (/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"Xa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/five) +"Xf" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Xg" = (/obj/structure/table/woodentable,/obj/random/maintenance/foodstuff,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"Xn" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Xo" = (/obj/machinery/gateway{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/techfloor/grid,/area/awaymission/lucky7/gateway) +"Xr" = (/obj/structure/bed/chair{dir = 1},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Xs" = (/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/lightgrey/border{dir = 6},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/lightgrey/bordercorner2,/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) +"Xw" = (/obj/effect/floor_decal/corner/grey/diagonal,/obj/structure/table/marble,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/kitchen) +"Xz" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"XA" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/lightgrey/border{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 9},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"XH" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"XK" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 5},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 5},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"XO" = (/obj/machinery/door/window/eastleft{req_access = null},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"XP" = (/obj/machinery/firealarm{dir = 4; pixel_x = 27},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"XS" = (/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"XT" = (/obj/structure/table/woodentable,/obj/random/maintenance/foodstuff,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"XU" = (/obj/structure/table/woodentable,/obj/item/pizzabox/margherita,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"XZ" = (/obj/effect/decal/cleanable/filth,/turf/simulated/floor/lino,/area/awaymission/lucky7/bar) +"Yb" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Yc" = (/obj/structure/cable/green{icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"Ye" = (/obj/effect/overmap/visitable/sector/common_gateway/lucky7,/turf/space,/area/space) +"Yj" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/lightgrey/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Yk" = (/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"Yn" = (/obj/structure/cable/green{icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/workshop) +"Yp" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"Yw" = (/obj/machinery/alarm{pixel_y = 27},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/hotelhall) +"Yy" = (/turf/simulated/wall,/area/awaymission/lucky7/entry) +"YA" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"YC" = (/obj/structure/flora/pottedplant{icon_state = "plant-21"},/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/obj/machinery/alarm{dir = 8; pixel_x = 27},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"YD" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"YE" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/lightgrey/border{dir = 9},/obj/machinery/alarm{pixel_y = 27},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"YG" = (/obj/machinery/media/jukebox,/turf/simulated/floor/wood,/area/awaymission/lucky7/bar) +"YO" = (/obj/random/soap,/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom) +"YQ" = (/obj/structure/casino_table/blackjack_m,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/floortube{dir = 1},/turf/simulated/floor/carpet/brown,/area/awaymission/lucky7/casinofloor) +"YT" = (/obj/structure/cable/green{icon_state = "4-8"},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"YX" = (/turf/simulated/wall,/area/awaymission/lucky7/hall1) +"YY" = (/obj/structure/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"YZ" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/machinery/door/firedoor/glass/hidden/steel,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock2) +"Za" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/four) +"Ze" = (/obj/structure/table/reinforced,/obj/item/weapon/handcuffs,/obj/item/weapon/handcuffs,/obj/item/ammo_casing/spent,/obj/effect/floor_decal/borderfloor{dir = 6},/obj/effect/floor_decal/corner/red/border{dir = 6},/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/red/bordercorner2,/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Zf" = (/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/lightgrey/border{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"Zh" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock{name = "Custodial Closet"; req_access = null},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"Zi" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/security) +"Zj" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/obj/machinery/light,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"Zu" = (/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/lightgrey/border{dir = 9},/obj/structure/flora/pottedplant/stoutbush,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"Zx" = (/obj/structure/bed/chair/sofa/right/purp,/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/vip) +"ZB" = (/obj/structure/bed/chair/sofa/right/brown,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"ZC" = (/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/structure/cable/green,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 4; pixel_x = 27; start_charge = 0},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/medical) +"ZD" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/awaymission/lucky7/privateroom/five) +"ZE" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/lightgrey/border,/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"ZF" = (/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/soap/nanotrasen,/obj/structure/closet,/obj/effect/floor_decal/rust,/obj/item/weapon/storage/bag/trash,/turf/simulated/floor/tiled,/area/awaymission/lucky7/maint1) +"ZJ" = (/obj/structure/bed/chair/sofa/brown,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"ZK" = (/obj/structure/bed/chair/sofa/corner/brown,/turf/simulated/floor/carpet,/area/awaymission/lucky7/hall1) +"ZL" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/lightgrey/border{dir = 1},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/awaymission/lucky7/hall1) +"ZO" = (/obj/structure/table/steel,/obj/item/weapon/spacecasinocash/c1000{pixel_x = -3; pixel_y = -3},/obj/item/weapon/spacecasinocash/c1000,/obj/item/weapon/spacecasinocash/c1000{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/tiled/techfloor,/area/awaymission/lucky7/security) +"ZP" = (/obj/structure/bed/chair/comfy/beige{dir = 4},/obj/machinery/power/apc{alarms_hidden = 1; cell_type = /obj/item/weapon/cell/apc; dir = 8; pixel_x = -27; start_charge = 0},/obj/structure/cable/green{icon_state = "0-4"},/turf/simulated/floor/carpet/blue2,/area/awaymission/lucky7/privategameroom/three) +"ZR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/green{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/awaymission/lucky7/entry) +"ZT" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/privateroom/two) +"ZV" = (/obj/structure/cable/green{icon_state = "1-4"},/turf/simulated/floor/wood,/area/awaymission/lucky7/privateroom/four) +"ZW" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/lightgrey/border{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals7{dir = 5},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/lightgrey/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/awaymission/lucky7/dock1) + +(1,1,1) = {" +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmcpcpcpcpcprmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmcpcpagavagcpcprmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmcpagayagayagcprmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVpVaAaBaBaBaGpVpVrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVaJaQbobubububupVrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVbKbKbNcqbubKbKpVrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVcDcDbNpVbucDcDpVrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVcFcFbNcJbucFcLpVrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVbububNbububucMyYyYpbpbpbyYpbpbpbyYyYrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVpVcTbNbubucYpVyYdodzdEdzabdEdzdEdPyYrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmpVpVpVdSececpVpVyYameFeFeFeHeFeFeFeHpbrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgGKjypflfvfvfvfyyYadeHeHeHeHeHeHeHeHpbrmrmrmrmvOidididvOididididrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmidrmrmrmrmrmrmidrmrmrmrmrmrmrmvOidididvOvOididididvOidvOrmrmrmrmrmrmrmgGfSypgBgNgNgNgNgVgZeHeHeHeHhmhoaeeHpbrmrmrmrmrmvOrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOidididvOvOididididvOvOididididvOidvOvOididvOrmrmrmrmrmrmrmrmidrmrmvOrmrmrmvOrmrmrmrmrmrmrmrmrmrmgGKjyphuypypypypyYeHhwafhweHhmiraeeHyYrmrmrmrmrmvOrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmvOrmrmrmrmrmrmvOrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmvOrmrmvOrmrmrmvOrmrmrmrmrmrmrmrmrmrmgGgGgGTuypypgGgGgGgGgGgGgGgGgGgGgGgGgGgGgegegegGgGgGrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmMwMwMwMwMwMwMwMwMwMwYXYXYXYXYXrmvOrmrmrmrmrmrmrmrmrmidrmUWUWUWUWUWUWUWUWrmrmrmrmrmrmrmrmgGdwitiBypypypypypypypTkypypypypypTkypypypypypypjbgGvOvOvOidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmMwmDoqaatVucueASKaMwZuZLuLlBYXrmvOrmrmrmrmrmrmrmrmrmvOrmUWjejljKjVVSkeUWrmrmrmrmrmrmrmrmgekxkxmOgNgNgNgNgNgNgNopgNgNgNgNgNopgNgNgNgNgNqHkFgGrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmMwcKcbbfTQiETMuEUvEIzpYkYkobYXrmidrmrmrmrmrmrmrmrmrmidrmUWkJkNlhlilpVSUWrmrmrmrmrmrmrmrmgelwlwTuypypypypypypypMZypypypypypMZypypypypypMZjbgGrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOvOidididvOidMweSVpMyrbGATMuEbchMYTFFYkCDYXvOidvOidididvOididvOididrmUWrxmNkeHzmTFWUWrmrmrmrmrmrmrmrmgemXmXTuypypnhnhbpbpbpnEbpbpGJGJGJnMGJGJfHfHfHohfHfHfHrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmMwDpOgmHXoiETMuEvfEIHWWEYkobYXrmrmrmrmrmvOrmrmrmrmvOvOvOUWVSmNkJLgskiGUWrmrmrmrmrmrmrmrmgGypypTuypypLEVwbppsRMpyRMRMGJMefNpBfNfNfHPyFrqdFrFrfHvOididrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmMwrfEMiZEMsUpAHgrKMwWRWEYkobYXrmrmrmrmrmvOrmrmrmrmvOrmrmUWVSmNqkUWoFmIUWrmrmrmrmrmrmrmrmgGypypTuypypvyvybpRMrepNreRMGJfNDnlZDnfNfHFrItLAItFrfHrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmDiDiDiDiDiDiDiDiDiDinAWEYkJLsTsTsTsTsTsTsTsTsTsTsTsTsTsTsTUWrAUWUWUWUWUWqFNlNlNlqFqFqFqFqFkxkxTuypypnhnhbpMdCGAGscsqGJTZnvWmxtwTfHZPQttYlLYYfHrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmDisHsSsZsZtdtvtHtMDiWRWEYkupsTeruyuzuIrprMsThhhhjPFNuOuvhhhhvavksTvNvTsTvUwbwewkwtqFImbXqFwGlwTuypypLEVwbpwLscQascxdGJNVxtqMxtrBfHLhlLtZlLwlfHrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOvOvOvODixqyoyHCCCCCCzazgSXzpWEYkobsTGSzqzEaWzRzYAxQKQKQKQKQKAFAFQKAXAFAxQKBeBmBEBHBTBVCiCnruCoqFmXmXTuypypvyvybprUscscscsqGJqYxtxtxtwTfHpPlLlLlLYYfHrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmididvOididrmvOrmDiCMCUCWCZCCCCDHYnEtXSEBYkCDsTcmECESEWFKFTsTFUFYhhFZhhFNjPGiGiGisThhWVsTSrGzKLSraYqFGRHaqFypypTuypypypypbpRMHbHfHbRMGJfNNIoHNIfNfHFrHAHBHAFrfHvOidHFrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmvOrmDixqCCCCCCCCHJCCHMSXHWJzXSJPJUKiKnbDKwKxKIkDkDkDKNKNKNKNKNKShhKYsThhGrsTqFLjqFqFqFqFqFqFqFmKmKOwmVmVmKmKbpbpbpbpbpbpGJGJGJGJGJGJfHfHfHfHfHfHfHrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmvOrmrmrmrmvOrmDiaXLrLxLBLFMaMmMsDiMEMGYkMJsTMVMXMYNdNyNFkDQCNRNTOtOBOOKNPcOWPnsTjPLiKfPqPsPTPVQmQoGsQGKfmVQMOwmVmVkVmVQRmVQVRcRfmVRkmVkVRTRVmVmVmVmVkVmVmVmKrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlKlNYNYNYKlKlKlKlKlKlKlKlKlKlKlYXYXsoSEWBsoYXYXYXYXSRTaTfkDyOyOThDhDhDhKNKNKNKNKNhhLiKfTyUbUdUfUgUgUgUgVamVVkahmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVVVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlWhWpWpWpWrKlWQXfXHXOWpYbYAYCKlYEalXzMGYkZfZBZJZKYXsTaRsTkDyOZiKNKNKNKNKNZOKuHZKNFaLiKfeYUgKmnCUgUgUgTxKfmwkQsiHmHmfcmVmVmVmVmVmVmVmVmVmVaVJNmVmVuFanmVmVfUrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlHxJpeaInDYWpIkWUWUUtWUWUWUXKfMzpYkYkMGYkobGXXgSnYXKRyXzVkDyOpHNTNbOBOOKNEzVsHZKNuAGrKfKfCpKfKfUgbyPkUgXwmVkQsijxbCfcPJmKWXmVrThDPJmKWXmVmVmVmVmVmVmVmVmVaqrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidvOvOKlzvWUWUWUWUWUWUWUNGenWUWUWUYcQgXSzQXSSPYkRHGXGXRoYXKRsMRQkDyOyOuJDhDhDhKNJcVsHZKNhhGrKfczlSlSKfUgSMWCUgXwmVkQVWmVmVmVmVmVmVngbPhDmVmVmVmVmVmVmVmVmVmVmVmVmVmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlLlRbsgpkPGgUNJWUWUVuWUWUWUmqfMHWJCYkWEYkobGXRXSnYXxLyXxbkDyOZiKNKNKNKNKNKNQrKNKNuvGrKfmulSnNKfkOIMapUgyRmVkQsiHmqAfcmVmVmVmVqShDmVmVmVmVaVJNmVmVxHuYmVmVPJmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlnDAWLCgUasKlkvQUxrGPgUygXrZCKldnarqUWEYkMJdCTjwYYXBiIwFNkDyOyOUxPFOfyOLsSZQvtQkDNiGrKftelSejKfTxUgUgUgKfWXkQsiHmNSfcmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmKlKlFtKlKlKlKlKlKlKlKlKlKlKlKlYyYyYykmFwuakmkmkmYyYysTemsTYyiVyOyOyOChyOPIyOyOOkkDsTEOKfKfKfKfKfVaKfXwKfKfNzkQVWmVmVmVPJmKWXmVmVmVPJmKWXmVmVmVmVmVmVmVmVmVmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlGQfZDPDPDPKlkswowomowowoBKwokmxmOjybykazPEOjOjcNddOjBMQsYykDChkDkDkDCkPIQCyOVikDTXLiJBtmAQnnJBCQVvrZDbkLvukQsiNSHmfcmVmVmVmVmVmVmVmVmVmVaVJNmVmVxHaumVmVmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOidvOidvOvOKlfZjvfZfZfZKloPwoTeTeTewooDlIvoISISISTKTtTtTtTtTtTtTtWuIsYyiMyOawLLkDQzpMoTaxLqkDLeaoQiPPibogKGOMOAhSOALNtokQsiHmLofcmVmVmVMgaUaCdWdWdWdWdWdWdWdWdWdWdWdWnjmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmKlKlKlKlKlKlKlwowoDGMbxvwowowokmhFZEZEZjZEZEZEZEZjZEUDxzeGYynqyOyOJwkDTYmppXyOeLkDjPhhJBRWogBAJBwwOAdaOAtEJEkQVWmVmVmVmVmVmVFvaEhDmVmVmVmVmVmVmVmVmVmVmVmVPJmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmBfVTVTiywowoBfQdwovZvZvZwowoHSluluFJlulululululululuCECIVzYyLIaFyOZekDFLmpxUIqWjkDFZhhJBkPrNEFJBhNXZOAOAhSJEkQsiHmLUfcPJmKWXVWqShDPJmKWXmVmVngvRmVmVmVrThDmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmBfbabaVTwowoNowowowowowowowoPXlufbxZBWfbAJpOluqwArluETxzPjYykDgiTnkDkDkDpekDkDkDkDsTmdJBJBJBJBJBNawdHnLNhSJEkQsizMHmfcmVQRmVVWmVmVmVRkmVmVmVngnahDmVngaEhDmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmBfqLbaVTwowoNowowoTeTeTewowoDxluAJepmWepepxZFJxZxKluETxzaznlTBVCVCJgOjybxzPEOjYjrwzxzxDQMAsXTsYGDmRxRxRxRxhnkQVWmVmVmVmVmVmVVWmVmVmVmVmVmVmVngaImVmVmVqShDmVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOidvOvOBfbabaVTwowoNowowossMbDGwowoMcluWIeplumtcRIvluepepluONaKTtXnTtTtTtTtTtTtHlTtTtTtDvuZuZNguZuZuZuZuZuZuZuZuZBshidGTRTRTRTRWcWcSjmVmVbjbjbjbjbjmVmVmVYDmVmVmVatmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmBfVTVTnRwowoBfQdwovZvZvZwowoHSlulupLlululululutsjcjpduaLaznlbLZEZjZEZEZEZEZjZEUDrwzxzxzxzxzxzxzxzxzxzxzxzxPamVOTOTOTOTOTmVKEYQaMmVOTOTOTOTOTmVmVKEvxaMmVmVjJmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmBfBfBfBfBfBfBfwowowowowowowowolusmoVlubxhcHHlubERmluipSYaNYyYyYyYyYyYyYyYyYyYyYyFuzxGfGfGfzxGfGfGfzxGfGfGfPamVxMxMxMxMxMmVlnOllnmVxMxMxMxMxMmVmVlnlnlnmVmVVVrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmvOvOvOvOBfWiOxwoPQMteowowokpMQludFoEZhFVRNBalumhgSlugxSYeGYyvOvOvOrmrmrmrmrmvOvOFutDXUuHfizxfiSKXTzxfiuHqGPamVbjbjbjbjbjmVmVJqmVmVbjbjbjbjbjmVmVbjbjbjmVmVrnrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOidididvOidvOYyYyYyBfMqOxwoDGMbyABQwonpwoludrUEluZFaPmJlukaCRluETSYeGYyvOrmvOrmrmrmrmvOvOrmFuilYpYpYpzxYpYpYpzxYpYpYpPamVOTOTOTOTOTmVmVJqmVmVOTOTOTOTOTmVmVOTOTOTmVmVaqrjrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmYyYydgfXBfBfBfBfqNqNqNBfyzNCBfluluyZlulululululululuCExJVzYyididvOidididvOidvOidFulmzxzxzxApzxzxzxApzxzxzxWsxCxMxMxMxMxMxCmVJqmVxCxMxMxMxMxMxCmVxMxMxMxCmVmVmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmYygrivivGniAOjOmmRmRmRAPazsVufaSiAcIOmLOgamROmOjGnOjYjSYeGYyrmrmvOrmrmrmvOrmrmrmFuFuClClClFuClClClFuClClClFuOPOPOPOPOPOPGjeUTDeUGjmKmKmKmKmKmKmKmKmKmKmKmKmKmKrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOidididvOYyONiJjdNrjrNcNcNcNcNrNrNrKHNrGVsvNqZRZRZRZRZRZRZRZRZRDDIsYyrmrmidrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOPRZqWBqAUywGjeUTDeUGjrmrmvOrmrmrmrmrmrmrmrmvOrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmYyjBkbkcZEfuZEZEZEZjZEZEZEZEZEZEfuZEZEkzZEZEZEZEZEZEZEGTTFYyvOidvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmSkSINNosmvFmGjeUTDeUSwrmrmvOrmrmrmrmrmrmrmrmidrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmgLlqmLmSgLgLVOVOVOgLYykmkmkmYyYykmkmkmYyYykmkmkmYyxnWMTHWMxnrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmSkSIsBosCbMhGjeUTDeUSwrmididididididvOvOidididvOidvOvOidvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLnsWAnSgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxnajDOjHxnrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmSkSINNosolINGjeUTDeUSwrmrmrmrmrmrmvOrmvOrmrmidrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmOPcOaOosSFrgGjeUTDeUGjrmrmrmrmrmrmvOGjGjGjGjvOrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmGjGjGjGjGjGjMnFGSOGjGjeUTDeUGjGjGjGjGjGjGjGjGjQpqgGjGjGjGjrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmcHvOvOGjAYeUeUeUeUNmCNTUeUvbeUTDeUvbeUeUeUvdYweUakaTNmNmvbeUfOGjrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLspWAttgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxneVGhfAxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmGjoYGOIgIgIgCORuDSIgCOIgJRIgTWIgIgIgTWIgIgSdFleUeUeUeUdfGjvOvOidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmGjAYTDeUVteUTDeUeUeUTDeUVteUTDeUeUeUTDeUVteUTDeUeUeUeUfOGjrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOididcHvOvOhOhOfDhOuuuuTIuuKKKKeWKKuRuRKMuRDLDLSlDLLwLwEiLwLwLwLwLwLwrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmhOjMHQKtuuDwVdyvKKoSPCIJuRaiwqwKDLzHNDIuLwoAGmqsuBoAIjoALwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLuxwjwvgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxnYZOqqzxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmhOjChUfTuuCmoOJyKKENnzghuRccxFbnDLJWXaKCLwffOJZxorkdkdLyLwrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmhODgGgiauuOonYMoKKdytzjQuRKAZVPuDLmCIFRFLwOaOJpnlxkdkdqvLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmhOtpcrWyuusQcnLJKKTdvgUGuRAbNQVDDLtGUMeyLwjAcGKZyykdkdGkLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidvOvOhOcrcrWKuucncnTTKKvgvgzWuRNQNQXPDLUMUMkyLwoAoAoAoAoAJjvqLwvOvOidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLspWAwJgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxneVGhyDxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmhOuGhOhOuuGeuuuuKKpEKKKKuRFduRuRDLICDLDLLwRYLwLwLwLwLwLwLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmzkububDFDRWAQqDTubgfAmrmrmrmrmrmrmrmrmrmrmrmrmrmrmkhiuiujoWPGheteiiubhbHrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmhOWZwuwCuuPNevAOKKtrjWeduRyiyfDkDLdZSsJdLwOuTlGpAKWGUuDILwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmDZrmHtJKKTVmOrtJvrEsbeEeMkrmSmrmrmrmrmrmrmrmrmrmrmrmrmprbtlFnKAyKUCuEwGESSVxrmcVrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmhOQDWZWZuuSGPNPNKKVUtrtruRZayiyiDLZDdZdZLwTvOuOuAKeCRwqBLwrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmPwRLRLDFTPWAOIDTRLaHTVrmrmrmrmrmrmrmrmrmrmrmrmrmrmjNMfMfjoOEGhXAeiMfNLgDrmrmrmrmrmrmrmrmrmrmrmrmrmididvOvOhOWZYOfQuuPNIRZTKKtrbBANuRyivtaDDLdZCfhyLwIrOuOuAKeCjSbwLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLUYWAWdgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxnOSGhLVxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmhOhOhOhOuuuuuuuuKKKKKKKKuRuRuRuRDLDLDLDLLwTvOuOuAKeCjSqBLwvOvOvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmvOrmrmrmvOrmrmrmvOrmrmrmvOrmvOrmLwOuOuxNAKFpjqSvLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOnXWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCzKGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmvOrmrmrmvOrmrmrmvOrmidvOLwLwLwLwLwLwLwLwLwrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmVOZWWAoGVOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmOCfxGhLYOCrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOididlEidididcHidvOvOcHidvOidcHididrmrmvOrmrmrmrmrmvOrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLjIWAXsgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxnAvGhdXxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmidrmrmrmrmrmrmrmrmrmvOididcHvOididvOidcHididvOvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmgLwcWJDFgLrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmxnWzmbjoxnrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmKknwacezrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmtcKsxhgHrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmidrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmKkPmzrezrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmtcUShIgHrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmvOrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmhqmELkmQrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmFjjtUmzDrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmqtrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmYeFQrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +rmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrmrm +"} diff --git a/maps/gateway_vr/snowfield.dmm b/maps/gateway_vr/snowfield.dmm index 7292de11f1..1912a56992 100644 --- a/maps/gateway_vr/snowfield.dmm +++ b/maps/gateway_vr/snowfield.dmm @@ -1188,7 +1188,7 @@ /turf/simulated/floor/tiled/dark, /area/awaymission/snowfield/base) "ds" = ( -/obj/structure/closet/fireaxecabinet{ +/obj/structure/fireaxecabinet{ pixel_y = 32 }, /turf/simulated/floor/tiled/dark, diff --git a/maps/gateway_vr/wildwest.dm b/maps/gateway_vr/wildwest.dm index e697c3812d..2260db08ed 100644 --- a/maps/gateway_vr/wildwest.dm +++ b/maps/gateway_vr/wildwest.dm @@ -125,7 +125,7 @@ if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) for(var/mob/O in viewers(world.view, src.loc)) - to_chat(O, "[M] triggered the [bicon(src)] [src]") + to_chat(O, "[M] triggered the \icon[src][bicon(src)] [src]") triggered = 1 call(src,triggerproc)(M) @@ -187,7 +187,7 @@ in_space = 1 unknown_state = "field" known = FALSE - + skybox_icon = 'icons/skybox/anomaly.dmi' skybox_icon_state = "shimmer_r" skybox_pixel_x = 0 diff --git a/maps/groundbase/gb-z1.dmm b/maps/groundbase/gb-z1.dmm index 9faa853c6b..869d267d54 100644 --- a/maps/groundbase/gb-z1.dmm +++ b/maps/groundbase/gb-z1.dmm @@ -105,11 +105,8 @@ /turf/simulated/floor, /area/maintenance/groundbase/trashpit) "an" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/turf/simulated/wall/r_wall, +/area/groundbase/command/tcomms/chamber) "ao" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -539,6 +536,14 @@ outdoors = 0 }, /area/groundbase/security/lobby) +"bq" = ( +/obj/machinery/vending/wardrobe/atmosdrobe, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/sign/scenery/fakefireaxe{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled, +/area/groundbase/engineering/atmos/monitoring) "br" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -578,6 +583,12 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/outdoors/sidewalk/virgo3c, /area/groundbase/level1/westspur) +"bw" = ( +/obj/structure/closet/toolcloset, +/obj/item/weapon/pickaxe, +/obj/item/weapon/chainsaw, +/turf/simulated/floor/tiled, +/area/groundbase/engineering/workshop) "bx" = ( /obj/structure/table/reinforced, /obj/item/device/floor_painter, @@ -628,12 +639,18 @@ /obj/machinery/alarm{ dir = 4 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/turf/simulated/floor, +/area/maintenance/groundbase/substation/medcargo) "bC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/groundbase/security/processing) +"bD" = ( +/obj/structure/closet/secure_closet/engineering_electrical/double, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/turf/simulated/floor/tiled, +/area/groundbase/engineering/workshop) "bE" = ( /obj/structure/cable/yellow{ icon_state = "0-8" @@ -672,9 +689,34 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/security/armory) +"bH" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light, +/obj/structure/closet/secure_closet/engineering_welding/double, +/turf/simulated/floor/tiled, +/area/groundbase/engineering/workshop) +"bI" = ( +/obj/machinery/porta_turret/stationary, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "bJ" = ( /turf/simulated/floor/outdoors/newdirt_nograss/virgo3c, /area/groundbase/level1/eastspur) +"bK" = ( +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "bL" = ( /obj/machinery/vending/loadout/accessory, /obj/item/device/radio/intercom{ @@ -703,6 +745,15 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/civilian/womensrestroom) +"bN" = ( +/obj/machinery/camera/network/command, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "bO" = ( /obj/structure/table/bench/steel, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -733,6 +784,14 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/office) +"bR" = ( +/obj/machinery/telecomms/hub/preset/groundbase, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "bS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -742,22 +801,13 @@ /turf/simulated/floor/tiled/white, /area/groundbase/medical/office) "bT" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - external_pressure_bound = 140; - external_pressure_bound_default = 140; - icon_state = "map_vent_out"; - pressure_checks = 0; - pressure_checks_default = 0; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; +/obj/machinery/telecomms/server/presets/common, +/turf/simulated/floor/tiled/dark{ nitrogen = 100; oxygen = 0; temperature = 80 }, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "bU" = ( /obj/machinery/light{ dir = 8 @@ -765,10 +815,24 @@ /turf/simulated/floor/wood, /area/groundbase/civilian/gameroom) "bV" = ( -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/turf/simulated/floor/lino, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, +/area/groundbase/level1/northspur) +"bW" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "bX" = ( /obj/structure/cable/yellow{ @@ -813,11 +877,13 @@ /turf/simulated/floor/tiled, /area/groundbase/engineering/engine) "cc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 +/obj/machinery/telecomms/broadcaster/preset_right/groundbase, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "cd" = ( /obj/structure/grille, /obj/machinery/door/firedoor/glass, @@ -849,14 +915,13 @@ /turf/simulated/floor/tiled, /area/groundbase/engineering/techstorage) "ch" = ( -/obj/machinery/atmospherics/binary/passive_gate/on{ - dir = 8 +/obj/machinery/pda_multicaster/prebuilt, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "ci" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/dark, @@ -892,6 +957,14 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/equipment) +"cm" = ( +/obj/machinery/telecomms/receiver/preset_right/groundbase, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "cn" = ( /obj/structure/table/reinforced, /obj/item/device/retail_scanner/security, @@ -941,6 +1014,14 @@ /obj/random/paicard, /turf/simulated/floor/tiled, /area/groundbase/civilian/toolstorage) +"cr" = ( +/obj/machinery/telecomms/server/presets/command, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "cs" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -950,9 +1031,26 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/groundbase/command/ai/robot) "ct" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; + use_power = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "cu" = ( /obj/item/weapon/storage/secure/briefcase/ml3m_pack_med, /obj/structure/table/reinforced, @@ -964,16 +1062,13 @@ /turf/simulated/wall/r_wall, /area/groundbase/security/briefing) "cw" = ( -/obj/structure/table/hardwoodtable, -/obj/machinery/camera/network/civilian{ - dir = 8 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock{ + id_tag = "z1barstall2"; + name = "Restroom Stall" }, -/obj/random/mug, -/obj/random/mug, -/obj/random/mug, -/obj/random/mug, -/turf/simulated/floor/lino, -/area/groundbase/civilian/cafe) +/turf/simulated/floor/tiled/white, +/area/groundbase/civilian/bar) "cx" = ( /obj/machinery/atmospherics/valve/digital{ name = "supply isolation valve" @@ -982,14 +1077,16 @@ /turf/simulated/floor, /area/groundbase/security/armory) "cy" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, /turf/simulated/floor/bluegrid{ name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80 }, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "cz" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -1043,13 +1140,11 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/groundbase/command/ai/foyer) "cH" = ( -/obj/item/weapon/stool/baystool/padded{ - dir = 4 +/obj/structure/table/hardwoodtable, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, +/turf/simulated/floor/lino, /area/groundbase/civilian/cafe) "cI" = ( /obj/machinery/power/apc{ @@ -1086,6 +1181,17 @@ }, /turf/simulated/floor/tiled/techmaint, /area/groundbase/engineering/atmos) +"cM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/telecomms/server/presets/engineering, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "cN" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -1142,11 +1248,16 @@ /turf/simulated/floor/bluegrid, /area/groundbase/command/ai/storage) "cR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/black{ + dir = 1 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "cS" = ( /obj/structure/bed/chair/office/light{ dir = 8 @@ -1220,26 +1331,46 @@ /turf/simulated/floor/tiled, /area/groundbase/engineering/techstorage) "cX" = ( -/obj/machinery/porta_turret/stationary, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/telecomms/server/presets/medical, +/turf/simulated/floor/tiled/dark{ nitrogen = 100; oxygen = 0; temperature = 80 }, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "cY" = ( /obj/machinery/camera/network/medbay{ dir = 1 }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/or1) +"cZ" = ( +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + external_pressure_bound = 140; + external_pressure_bound_default = 140; + icon_state = "map_vent_out"; + pressure_checks = 0; + pressure_checks_default = 0; + use_power = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "da" = ( /turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, /area/groundbase/level1/northspur) "db" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ + id_tag = "z1barstall1"; name = "Restroom Stall" }, /turf/simulated/floor/tiled/white, @@ -1264,6 +1395,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/techfloor, /area/groundbase/civilian/arrivals) +"de" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "df" = ( /turf/simulated/mineral/cave/virgo3c, /area/groundbase/level1/eastspur) @@ -1279,6 +1421,14 @@ }, /turf/simulated/floor/outdoors/sidewalk/side/virgo3c, /area/groundbase/level1/centsquare) +"di" = ( +/obj/machinery/telecomms/server/presets/science, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "dj" = ( /obj/structure/table/marble, /obj/machinery/chemical_dispenser/bar_soft/full, @@ -1321,6 +1471,15 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/security/briefing) +"do" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/obj/machinery/telecomms/server/presets/unused, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "dp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -1340,12 +1499,31 @@ }, /turf/simulated/floor/carpet, /area/groundbase/security/detective) +"dr" = ( +/obj/machinery/telecomms/server/presets/security, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "ds" = ( /obj/structure/bed/chair/sofa/bench/right{ dir = 1 }, /turf/simulated/floor/outdoors/newdirt_nograss/virgo3c, /area/groundbase/level1/centsquare) +"dt" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "du" = ( /obj/structure/table/standard, /obj/item/stack/nanopaste, @@ -1357,6 +1535,14 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/or2) +"dv" = ( +/obj/machinery/telecomms/server/presets/service/groundbase, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "dw" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1380,16 +1566,13 @@ /turf/simulated/floor/bluegrid, /area/groundbase/command/ai/robot) "dy" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/black{ - dir = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; +/obj/machinery/telecomms/processor/preset_two, +/turf/simulated/floor/tiled/dark{ nitrogen = 100; oxygen = 0; temperature = 80 }, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "dz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -1598,10 +1781,24 @@ /obj/effect/map_effect/portal/line/side_a, /turf/simulated/floor/outdoors/grass/forest/virgo3c, /area/groundbase/level1/nw) +"dT" = ( +/obj/machinery/telecomms/bus/preset_two/groundbase, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "dU" = ( /obj/machinery/alarm, /turf/simulated/floor/tiled, /area/groundbase/engineering/atmos) +"dV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/groundbase/civilian/cafe) "dW" = ( /obj/structure/bed/chair/comfy/orange{ dir = 4 @@ -1618,6 +1815,16 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/storage) +"dY" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "dZ" = ( /obj/structure/extinguisher_cabinet{ dir = 1; @@ -1773,11 +1980,13 @@ /turf/simulated/floor, /area/maintenance/groundbase/substation/aiciv) "eo" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 +/obj/machinery/telecomms/bus/preset_four, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "ep" = ( /obj/machinery/computer/secure_data, /turf/simulated/floor/tiled/dark, @@ -1815,6 +2024,22 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/engine) +"eu" = ( +/obj/machinery/telecomms/processor/preset_four, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) +"ev" = ( +/obj/machinery/telecomms/server/presets/supply, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "ew" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/black{ @@ -1835,10 +2060,22 @@ /turf/simulated/floor/tiled/white, /area/groundbase/civilian/bar) "ez" = ( -/obj/structure/closet/toolcloset, -/obj/item/weapon/pickaxe, -/turf/simulated/floor/tiled, -/area/groundbase/engineering/workshop) +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4; + external_pressure_bound = 140; + external_pressure_bound_default = 140; + icon_state = "map_vent_out"; + pressure_checks = 0; + pressure_checks_default = 0; + use_power = 1 + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "eA" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -1868,9 +2105,17 @@ /turf/simulated/floor/tiled, /area/groundbase/engineering/atmos) "eD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/obj/machinery/porta_turret/stationary, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "eE" = ( /obj/structure/flora/pottedplant, /obj/machinery/camera/network/security, @@ -1953,9 +2198,31 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/morgue) +"eQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/ntnet_relay, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "eR" = ( /turf/simulated/floor/outdoors/grass/virgo3c, /area/groundbase/unexplored/outdoors) +"eS" = ( +/obj/machinery/telecomms/bus/preset_one, +/obj/machinery/atmospherics/pipe/manifold/hidden/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "eT" = ( /obj/structure/railing/grey{ dir = 4 @@ -2021,6 +2288,17 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/groundbase/command/ai/hall) +"fa" = ( +/obj/machinery/telecomms/processor/preset_one, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "fb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/dark, @@ -2029,6 +2307,15 @@ /obj/machinery/light, /turf/simulated/floor/tiled/dark, /area/groundbase/security/briefing) +"fd" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/black, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "fe" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/multi_tile/glass/polarized{ @@ -2070,26 +2357,29 @@ /turf/simulated/floor/tiled/white, /area/groundbase/medical/or1) "fi" = ( -/obj/machinery/telecomms/processor/preset_four, +/obj/machinery/telecomms/processor/preset_three, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, /turf/simulated/floor/tiled/dark{ nitrogen = 100; oxygen = 0; temperature = 80 }, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "fj" = ( -/obj/structure/table/hardwoodtable, -/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask, -/obj/machinery/firealarm{ - dir = 4 +/obj/structure/toilet{ + dir = 8 }, -/obj/structure/sign/painting/library_secure{ - pixel_y = -30 +/obj/machinery/light/small, +/obj/machinery/button/remote/airlock{ + id = "z1barstall2"; + pixel_x = -10; + pixel_y = 27; + specialfunctions = 4 }, -/obj/item/weapon/reagent_containers/food/drinks/shaker, -/obj/item/weapon/reagent_containers/glass/rag, -/turf/simulated/floor/lino, -/area/groundbase/civilian/cafe) +/turf/simulated/floor/tiled/white, +/area/groundbase/civilian/bar) "fk" = ( /obj/structure/cable{ icon_state = "1-8" @@ -2185,12 +2475,16 @@ }, /area/maintenance/groundbase/level1/nwtunnel) "fu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/machinery/telecomms/bus/preset_three, +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "fv" = ( /obj/machinery/computer/atmos_alert, /obj/machinery/requests_console/preset/engineering{ @@ -2254,6 +2548,19 @@ }, /turf/simulated/floor/bluegrid, /area/groundbase/command/ai/chamber) +"fF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black{ + dir = 4 + }, +/obj/machinery/exonet_node{ + anchored = 1 + }, +/turf/simulated/floor/tiled/dark{ + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "fG" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2275,20 +2582,26 @@ /turf/simulated/floor, /area/maintenance/groundbase/trashpit) "fJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/freezer{ - dir = 1; - icon_state = "freezer_1"; - set_temperature = 73; +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 8; + external_pressure_bound = 0; + external_pressure_bound_default = 0; + icon_state = "map_vent_in"; + initialize_directions = 1; + internal_pressure_bound = 4000; + internal_pressure_bound_default = 4000; + pressure_checks = 2; + pressure_checks_default = 2; + pump_direction = 0; use_power = 1 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "fK" = ( /obj/structure/table/bench/steel, /obj/structure/cable/yellow{ @@ -2305,6 +2618,15 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/storage) +"fM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/floor/bluegrid{ + name = "Mainframe Base"; + nitrogen = 100; + oxygen = 0; + temperature = 80 + }, +/area/groundbase/command/tcomms/chamber) "fN" = ( /obj/structure/cable{ icon_state = "1-4" @@ -2314,6 +2636,12 @@ }, /turf/simulated/floor, /area/maintenance/groundbase/substation/secsci) +"fO" = ( +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/turf/simulated/floor, +/area/groundbase/command/tcomms/chamber) "fP" = ( /obj/structure/cable{ icon_state = "2-4" @@ -2392,6 +2720,10 @@ alpha = 0 }, /area/groundbase/level1/ne) +"fW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/black, +/turf/simulated/wall/r_wall, +/area/groundbase/command/tcomms/chamber) "fX" = ( /obj/structure/table/standard, /obj/machinery/alarm/angled, @@ -2409,6 +2741,27 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/security/briefing) +"fZ" = ( +/obj/machinery/access_button{ + command = "cycle_exterior"; + dir = 1; + frequency = 1380; + master_tag = "tcommsairlock"; + pixel_x = -32; + req_one_access = list(61) + }, +/obj/effect/map_helper/airlock/door/ext_door, +/obj/machinery/door/airlock/maintenance_hatch{ + frequency = null; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "Telecoms Server Access"; + req_access = list(61) + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_ridged, +/area/groundbase/command/tcomms/chamber) "ga" = ( /obj/structure/cable/yellow{ icon_state = "2-8" @@ -2416,19 +2769,24 @@ /turf/simulated/floor/tiled, /area/groundbase/engineering/lobby) "gb" = ( -/obj/structure/table/hardwoodtable, +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced/full, /obj/machinery/door/blast/gate/thin{ - dir = 8; id = "Cafe"; layer = 3.3 }, -/turf/simulated/floor/lino, +/turf/simulated/floor, /area/groundbase/civilian/cafe) "gc" = ( /obj/structure/disposaloutlet, /obj/structure/disposalpipe/trunk, /turf/simulated/floor, /area/groundbase/cargo/mining) +"gd" = ( +/obj/machinery/holoplant, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "ge" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -2441,6 +2799,22 @@ }, /turf/simulated/floor/tiled/techmaint, /area/groundbase/engineering/atmos) +"gg" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass{ + name = "Cafe" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/bmarble, +/area/groundbase/civilian/cafe) "gh" = ( /turf/unsimulated/wall/planetary/virgo3c{ icon_state = "riveted" @@ -2568,6 +2942,9 @@ "gv" = ( /turf/simulated/wall/r_wall, /area/groundbase/security/hos) +"gw" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "gx" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2603,18 +2980,14 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/groundbase/command/ai/foyer) "gB" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 }, /turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, /area/groundbase/level1/northspur) @@ -2738,6 +3111,20 @@ }, /turf/simulated/floor/tiled, /area/groundbase/civilian/gateway) +"gP" = ( +/obj/machinery/airlock_sensor{ + dir = 8; + pixel_x = 25 + }, +/obj/effect/map_helper/airlock/sensor/chamber_sensor, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + frequency = 1380; + id_tag = "tcommsairlock"; + pixel_y = 24; + req_one_access = list(61) + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "gQ" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/dark, @@ -2761,11 +3148,12 @@ /turf/simulated/floor/tiled/techmaint, /area/groundbase/command/tcomms/storage) "gU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1 +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -30 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "gV" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2774,7 +3162,14 @@ /turf/simulated/floor/tiled/techmaint, /area/groundbase/command/tcomms/storage) "gW" = ( -/turf/simulated/floor/lino, +/obj/structure/table/marble, +/obj/machinery/alarm{ + pixel_y = 28 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "gX" = ( /obj/structure/table/bench/padded, @@ -2784,21 +3179,17 @@ /turf/simulated/floor/tiled/dark, /area/groundbase/civilian/bar) "gY" = ( -/obj/machinery/telecomms/hub/preset/groundbase, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 }, -/area/groundbase/command/tcomms) +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "gZ" = ( -/obj/machinery/telecomms/server/presets/common, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/area/groundbase/command/tcomms) +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "ha" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -2817,6 +3208,12 @@ }, /turf/simulated/floor/tiled, /area/groundbase/civilian/gateway) +"hc" = ( +/obj/machinery/camera/network/command{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "hd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/techfloor/grid, @@ -2900,6 +3297,15 @@ outdoors = 0 }, /area/maintenance/groundbase/level1/nwtunnel) +"hn" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/air/airlock{ + start_pressure = 4559.63 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "ho" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2969,6 +3375,12 @@ /obj/effect/landmark/start/security, /turf/simulated/floor/tiled/dark, /area/groundbase/security/equipment) +"hy" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "hz" = ( /obj/machinery/vending/assist, /obj/machinery/light, @@ -3003,11 +3415,9 @@ /turf/simulated/floor/outdoors/newdirt_nograss/virgo3c, /area/groundbase/level1/se) "hF" = ( -/obj/structure/table/hardwoodtable, -/obj/machinery/chemical_dispenser/bar_coffee/full{ - dir = 8 - }, -/turf/simulated/floor/lino, +/obj/structure/table/marble, +/obj/random/paicard, +/turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "hG" = ( /obj/structure/cable{ @@ -3107,13 +3517,19 @@ /turf/simulated/floor/tiled, /area/groundbase/cargo/mining) "hS" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 8; + id_tag = null }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/groundbase/engineering/workshop) +/obj/effect/map_helper/airlock/atmos/chamber_pump, +/obj/machinery/firealarm{ + dir = 4 + }, +/obj/machinery/camera/network/command{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "hT" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, @@ -3147,13 +3563,11 @@ /turf/simulated/floor/tiled/dark, /area/groundbase/security/armory) "hY" = ( -/obj/machinery/telecomms/server/presets/command, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 +/obj/machinery/camera/network/command{ + dir = 4 }, -/area/groundbase/command/tcomms) +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "hZ" = ( /obj/structure/cable{ icon_state = "1-8" @@ -3169,6 +3583,12 @@ outdoors = 0 }, /area/maintenance/groundbase/level1/swtunnel) +"ia" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "ib" = ( /obj/machinery/door/airlock/mining{ name = "Trash Pit"; @@ -3324,6 +3744,18 @@ outdoors = 0 }, /area/maintenance/groundbase/level1/netunnel) +"is" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) +"it" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "iu" = ( /obj/machinery/light/small{ dir = 8 @@ -3342,6 +3774,12 @@ /obj/machinery/firealarm, /turf/simulated/floor/tiled/dark, /area/groundbase/security/warden) +"ix" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "iy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/white, @@ -3470,6 +3908,10 @@ /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/tiled/dark, /area/groundbase/security/iaa1) +"iL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "iM" = ( /obj/structure/cable{ icon_state = "0-8" @@ -3478,10 +3920,19 @@ /turf/simulated/floor, /area/groundbase/engineering/storage) "iN" = ( -/obj/effect/floor_decal/industrial/danger/corner{ - dir = 4 +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "engine_public_access"; + layer = 3.1; + name = "Engine Public Access Shutters"; + opacity = 0 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor, /area/groundbase/engineering/engine) "iO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -3493,12 +3944,30 @@ /turf/simulated/floor/tiled/white, /area/groundbase/medical/equipment) "iP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1380; + master_tag = "tcommsairlock"; + pixel_x = 32; + req_one_access = list(61) }, +/obj/effect/map_helper/airlock/door/int_door, +/obj/machinery/door/airlock/maintenance_hatch{ + frequency = null; + icon_state = "door_locked"; + id_tag = null; + locked = 1; + name = "Telecoms Server Access"; + req_access = list(61) + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled/steel_ridged, +/area/groundbase/command/tcomms/chamber) +"iQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "iR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -3508,6 +3977,16 @@ "iS" = ( /turf/simulated/wall/r_wall, /area/groundbase/engineering/atmos/monitoring) +"iT" = ( +/obj/machinery/computer/telecomms/monitor{ + dir = 8; + network = "tcommsat" + }, +/obj/machinery/status_display{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "iU" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -3543,6 +4022,15 @@ outdoors = 0 }, /area/groundbase/unexplored/rock) +"iX" = ( +/obj/machinery/power/apc{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "iY" = ( /turf/simulated/mineral/floor/virgo3c, /area/maintenance/groundbase/level1/netunnel) @@ -3584,6 +4072,13 @@ "jd" = ( /turf/simulated/wall, /area/maintenance/groundbase/substation/medcargo) +"je" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "jf" = ( /obj/structure/table/reinforced, /obj/fiftyspawner/steel, @@ -3647,6 +4142,27 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/lhallway) +"jk" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) +"jl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/freezer{ + dir = 1; + icon_state = "freezer_1"; + set_temperature = 73; + use_power = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "jm" = ( /obj/structure/cable/yellow{ icon_state = "1-8" @@ -3716,6 +4232,15 @@ }, /turf/simulated/floor/tiled/techmaint, /area/groundbase/engineering/atmos) +"ju" = ( +/obj/machinery/atmospherics/binary/passive_gate/on{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "jv" = ( /obj/machinery/door_timer/cell_3{ id = "Cell C"; @@ -3766,6 +4291,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled/dark, /area/groundbase/security/briefing) +"jy" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "jz" = ( /turf/simulated/wall, /area/groundbase/medical/or2) @@ -3864,6 +4396,12 @@ }, /turf/simulated/floor/tiled/techmaint, /area/groundbase/engineering/atmos) +"jN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "jO" = ( /obj/structure/cable/heavyduty{ icon_state = "1-4" @@ -4001,16 +4539,12 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/groundbase/command/ai/robot) "kf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 8 }, -/obj/machinery/telecomms/server/presets/engineering, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) +/obj/machinery/firealarm, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "kg" = ( /obj/structure/table/reinforced, /obj/item/weapon/storage/toolbox/mechanical{ @@ -4110,6 +4644,16 @@ "kq" = ( /turf/simulated/floor/tiled, /area/groundbase/engineering/storage) +"kr" = ( +/obj/machinery/computer/telecomms/server{ + dir = 8; + network = "tcommsat" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "ks" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -4214,6 +4758,12 @@ }, /turf/simulated/floor/tiled/techfloor, /area/groundbase/civilian/arrivals) +"kD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "kE" = ( /obj/machinery/button/remote/airlock{ desc = "A remote control switch for the medbay recovery room door."; @@ -4251,7 +4801,7 @@ "kG" = ( /obj/machinery/turretid/lethal{ ailock = 1; - control_area = /area/groundbase/command/tcomms; + control_area = /area/groundbase/command/tcomms/chamber; name = "Telecoms turret control"; pixel_y = 32; req_access = list(61) @@ -4347,6 +4897,20 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/security/equipment) +"kN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) +"kO" = ( +/obj/machinery/hologram/holopad, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "kP" = ( /obj/structure/table/glass, /obj/random/paicard, @@ -4374,22 +4938,28 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/civilian/bar) -"kT" = ( -/obj/machinery/computer/telecomms/server{ - dir = 8; - network = "tcommsat" +"kS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/machinery/light{ +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) +"kT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "kU" = ( -/obj/machinery/camera/network/command{ +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/alarm{ dir = 8 }, /turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "kV" = ( /obj/machinery/light/small{ dir = 4 @@ -4425,6 +4995,15 @@ }, /turf/simulated/floor/wood, /area/groundbase/civilian/gameroom) +"kZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "la" = ( /obj/structure/table/marble, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -4466,13 +5045,15 @@ /turf/simulated/floor/tiled, /area/groundbase/engineering/lobby) "le" = ( -/obj/machinery/telecomms/broadcaster/preset_right/groundbase, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 }, -/area/groundbase/command/tcomms) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "lf" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/multi_tile/glass{ @@ -4575,6 +5156,15 @@ }, /turf/simulated/floor/tiled, /area/groundbase/civilian/apparel) +"lm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "ln" = ( /obj/machinery/vending/wardrobe/detdrobe, /turf/simulated/floor/tiled/dark, @@ -4616,6 +5206,16 @@ /obj/item/clothing/head/helmet/bulletproof, /turf/simulated/floor/tiled/dark, /area/groundbase/security/armory) +"ls" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "lt" = ( /obj/effect/floor_decal/industrial/danger, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -4623,12 +5223,31 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/atmos) +"lu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "lv" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, /turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/area/groundbase/command/tcomms/chamber) "lw" = ( /obj/machinery/shieldgen, /turf/simulated/floor, @@ -4762,12 +5381,28 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/lhallway) +"lK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "lL" = ( /obj/machinery/computer/aiupload{ dir = 4 }, /turf/simulated/floor/bluegrid, /area/groundbase/command/ai/upload) +"lM" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "lN" = ( /obj/item/weapon/stool/baystool/padded{ dir = 4 @@ -4880,11 +5515,21 @@ /turf/simulated/wall/r_wall, /area/groundbase/security/halle) "mb" = ( -/obj/structure/bed/chair/wood{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/lino, /area/groundbase/civilian/cafe) +"mc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/groundbase/command/tcomms/chamber) "md" = ( /obj/structure/cable{ icon_state = "1-2" @@ -4893,11 +5538,18 @@ /turf/simulated/floor/outdoors/sidewalk/virgo3c, /area/groundbase/level1/southeastspur) "me" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/door/airlock/hatch{ + name = "Telecoms Control Room"; + req_access = list(61) }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/steel_ridged, +/area/groundbase/command/tcomms/chamber) "mf" = ( /obj/machinery/power/apc{ dir = 8 @@ -4971,6 +5623,22 @@ }, /turf/simulated/floor/carpet/oracarpet, /area/groundbase/engineering/ce) +"mp" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/glass{ + name = "Crew Access" + }, +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 8; + icon_state = "shutter0"; + id = "engine_public_access"; + layer = 3.1; + name = "Engine Public Access Shutters"; + opacity = 0 + }, +/turf/simulated/floor/bmarble, +/area/groundbase/engineering/engine) "mq" = ( /obj/machinery/alarm{ dir = 8 @@ -5000,6 +5668,20 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/security/lobby) +"mu" = ( +/obj/effect/floor_decal/industrial/danger/corner{ + dir = 4 + }, +/obj/machinery/button/remote/blast_door{ + dir = 4; + id = "engine_public_access"; + name = "Public Access Shutters"; + pixel_x = -25; + pixel_y = 0; + req_access = list(10) + }, +/turf/simulated/floor/tiled, +/area/groundbase/engineering/engine) "mv" = ( /obj/structure/cable/yellow{ icon_state = "2-8" @@ -5115,8 +5797,20 @@ /turf/simulated/floor/tiled/steel_ridged, /area/groundbase/security/briefing) "mL" = ( -/obj/machinery/media/jukebox, -/turf/simulated/floor/wood, +/obj/structure/table/hardwoodtable, +/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask, +/obj/structure/sign/painting/library_secure{ + pixel_y = -30 + }, +/obj/item/weapon/reagent_containers/food/drinks/shaker, +/obj/item/weapon/reagent_containers/glass/rag, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/lino, /area/groundbase/civilian/cafe) "mM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -5153,15 +5847,6 @@ outdoors = 0 }, /area/maintenance/groundbase/level1/nwtunnel) -"mQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "mR" = ( /obj/structure/bed/chair/comfy/orange{ dir = 4 @@ -5266,6 +5951,7 @@ }, /obj/item/clothing/glasses/welding/superior, /obj/item/device/flashlight/lamp, +/obj/item/weapon/stamp/ce, /turf/simulated/floor/carpet/oracarpet, /area/groundbase/engineering/ce) "nf" = ( @@ -5339,13 +6025,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/groundbase/engineering/atmos/monitoring) -"np" = ( -/obj/machinery/light, -/obj/item/weapon/stool/baystool/padded{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/groundbase/civilian/cafe) "nq" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -5612,12 +6291,6 @@ }, /turf/simulated/floor/carpet/sblucarpet, /area/groundbase/security/iaa1) -"nW" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "nX" = ( /obj/machinery/atmospherics/unary/freezer{ dir = 8 @@ -5645,6 +6318,22 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/civilian/bar) +"oa" = ( +/obj/structure/disposalpipe/sortjunction/flipped{ + dir = 4; + name = "Resleeving"; + sortType = "Resleeving" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, +/area/groundbase/level1/centsquare) "ob" = ( /obj/effect/landmark/vines, /turf/simulated/floor/outdoors/grass/virgo3c, @@ -5761,15 +6450,6 @@ /obj/machinery/light, /turf/simulated/floor/tiled/white, /area/groundbase/medical/morgue) -"oq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "or" = ( /obj/structure/stairs/spawner/west, /obj/structure/railing/grey{ @@ -6035,6 +6715,12 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/medical/morgue) +"oX" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "oY" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/black{ @@ -6300,16 +6986,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/techstorage) -"pI" = ( -/obj/effect/floor_decal/industrial/warning/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "pJ" = ( /obj/machinery/light{ dir = 4 @@ -6418,6 +7094,18 @@ outdoors = 0 }, /area/groundbase/unexplored/rock) +"pW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "pX" = ( /obj/structure/cable{ icon_state = "0-4" @@ -6429,10 +7117,6 @@ /obj/machinery/light, /turf/simulated/floor/tiled/dark, /area/groundbase/security/warden) -"pZ" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/wood, -/area/groundbase/civilian/cafe) "qa" = ( /turf/simulated/wall/r_wall, /area/groundbase/security/iaa1) @@ -6501,17 +7185,6 @@ /obj/item/device/radio/off, /turf/simulated/floor/tiled, /area/groundbase/civilian/gateway) -"qh" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "qi" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -6556,27 +7229,6 @@ "qp" = ( /turf/simulated/floor/tiled/white, /area/groundbase/medical/office) -"qq" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 8; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "qr" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical{ @@ -6784,19 +7436,21 @@ /turf/simulated/floor/tiled, /area/groundbase/cargo/mining) "qV" = ( -/obj/item/weapon/stool/baystool/padded{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/groundbase/civilian/cafe) -"qX" = ( -/obj/structure/bed/chair/wood{ - dir = 4 +/obj/structure/table/hardwoodtable, +/obj/item/weapon/reagent_containers/glass/rag, +/obj/machinery/alarm{ + dir = 8 }, /obj/structure/sign/painting/library_secure{ pixel_y = 30 }, -/turf/simulated/floor/wood, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/lino, /area/groundbase/civilian/cafe) "qY" = ( /obj/structure/closet/crate, @@ -6946,14 +7600,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/techstorage) -"rk" = ( -/obj/machinery/telecomms/receiver/preset_right/groundbase, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "rl" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -6984,6 +7630,15 @@ outdoors = 0 }, /area/maintenance/groundbase/level1/nwtunnel) +"ro" = ( +/obj/machinery/firealarm{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "rp" = ( /obj/machinery/atmospherics/binary/pump{ dir = 8 @@ -7119,17 +7774,6 @@ /obj/machinery/alarm, /turf/simulated/floor/tiled/dark, /area/groundbase/medical/autoresleeving) -"rG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/obj/machinery/telecomms/server/presets/medical, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "rH" = ( /obj/machinery/atmospherics/portables_connector{ dir = 8 @@ -7446,27 +8090,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/groundbase/engineering/storage) -"st" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - dir = 1; - frequency = 1380; - master_tag = "tcommsairlock"; - pixel_x = -32; - req_one_access = list(61) - }, -/obj/effect/map_helper/airlock/door/ext_door, -/obj/machinery/door/airlock/maintenance_hatch{ - frequency = null; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "Telecoms Server Access"; - req_access = list(61) - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/groundbase/command/tcomms) "su" = ( /obj/structure/cable{ icon_state = "4-8" @@ -7666,25 +8289,6 @@ }, /turf/simulated/floor/outdoors/grass/virgo3c, /area/groundbase/level1/southwestspur) -"sT" = ( -/obj/machinery/telecomms/server/presets/science, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) -"sU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/obj/machinery/ntnet_relay, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "sV" = ( /turf/simulated/floor/outdoors/newdirt/virgo3c{ outdoors = 0 @@ -7750,6 +8354,12 @@ }, /turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, /area/groundbase/level1/eastspur) +"te" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "tf" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -8064,12 +8674,6 @@ }, /turf/simulated/floor/outdoors/sidewalk/side/virgo3c, /area/groundbase/level1/centsquare) -"tQ" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/turf/simulated/floor, -/area/groundbase/command/tcomms) "tS" = ( /obj/structure/table/rack/shelf/steel, /obj/item/weapon/gun/energy/laser{ @@ -8521,18 +9125,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/eva) -"uY" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "uZ" = ( /obj/machinery/photocopier, /turf/simulated/floor/tiled/dark, @@ -8606,7 +9198,8 @@ /turf/simulated/floor/tiled/white, /area/groundbase/medical/lhallway) "vi" = ( -/turf/simulated/floor/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/lino, /area/groundbase/civilian/cafe) "vj" = ( /turf/simulated/floor/outdoors/newdirt_nograss/virgo3c{ @@ -8644,15 +9237,8 @@ /turf/simulated/floor/carpet/sblucarpet, /area/groundbase/security/iaa1) "vo" = ( -/obj/structure/table/hardwoodtable, -/obj/item/weapon/reagent_containers/glass/rag, -/obj/machinery/alarm{ - dir = 8 - }, -/obj/structure/sign/painting/library_secure{ - pixel_y = 30 - }, -/turf/simulated/floor/lino, +/obj/structure/table/marble, +/turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "vp" = ( /turf/simulated/floor/outdoors/newdirt/virgo3c{ @@ -8812,18 +9398,6 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/civilian/bar) -"vG" = ( -/obj/machinery/porta_turret/stationary, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "vH" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass_security{ @@ -8905,11 +9479,6 @@ /obj/item/weapon/hand_labeler, /turf/simulated/floor/carpet, /area/groundbase/security/detective) -"vS" = ( -/obj/machinery/vending/wardrobe/atmosdrobe, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/groundbase/engineering/atmos/monitoring) "vT" = ( /obj/machinery/atmospherics/portables_connector{ dir = 8 @@ -9445,7 +10014,7 @@ }, /obj/machinery/button/remote/airlock{ dir = 4; - id = "z1stall4"; + id = "z1stall5"; pixel_x = -27; specialfunctions = 4 }, @@ -9496,16 +10065,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/civilian/foodplace) -"xl" = ( -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "xm" = ( /obj/effect/floor_decal/industrial/danger, /obj/machinery/atmospherics/pipe/simple/hidden/black, @@ -9614,8 +10173,6 @@ }, /area/maintenance/groundbase/level1/nwtunnel) "xt" = ( -/obj/structure/table/marble, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "xu" = ( @@ -9704,17 +10261,6 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/civilian/womensrestroom) -"xG" = ( -/obj/machinery/telecomms/processor/preset_one, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "xH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -9759,17 +10305,6 @@ /obj/machinery/firealarm, /turf/simulated/floor/tiled/dark, /area/groundbase/security/iaa2) -"xN" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - dir = 8; - id = "engineaccess"; - name = "Engine Access Shutters" - }, -/turf/simulated/floor, -/area/groundbase/engineering/engine) "xO" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -9785,24 +10320,10 @@ }, /turf/simulated/floor/tiled, /area/groundbase/civilian/toolstorage) -"xQ" = ( -/obj/machinery/telecomms/server/presets/supply, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "xR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/item/weapon/stool/baystool/padded{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "xS" = ( @@ -10010,10 +10531,6 @@ }, /turf/simulated/floor/tiled/techmaint, /area/groundbase/engineering/atmos) -"yt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/wall/r_wall, -/area/groundbase/command/tcomms) "yu" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -10285,14 +10802,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/white, /area/groundbase/medical/lhallway) -"za" = ( -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "zb" = ( /obj/machinery/door/airlock/multi_tile/glass/polarized{ id_tag = null; @@ -10378,15 +10887,6 @@ }, /turf/simulated/wall/r_wall, /area/groundbase/engineering/techstorage) -"zm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/obj/machinery/telecomms/server/presets/unused, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "zn" = ( /obj/structure/stairs/spawner/north, /turf/simulated/floor/outdoors/sidewalk/virgo3c, @@ -10451,16 +10951,9 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/groundbase/command/ai/robot) "zu" = ( -/obj/structure/table/hardwoodtable, -/obj/machinery/door/blast/gate/thin{ - dir = 8; - id = "Cafe"; - layer = 3.3 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/lino, +/obj/structure/table/marble, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "zv" = ( /obj/machinery/requests_console/preset/engineering{ @@ -10482,15 +10975,6 @@ }, /turf/simulated/floor/tiled/techmaint, /area/groundbase/engineering/atmos) -"zy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "zz" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -10503,17 +10987,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/command/tcomms/foyer) -"zA" = ( -/obj/machinery/telecomms/processor/preset_three, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "zB" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, @@ -10589,13 +11062,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/button/remote/blast_door{ - dir = 4; - id = "engineaccess"; - name = "Engine Access"; - pixel_x = -25; - req_access = list(10) - }, /turf/simulated/floor/tiled, /area/groundbase/engineering/engine) "zJ" = ( @@ -10611,13 +11077,6 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/security/iaa1) -"zL" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "zM" = ( /obj/machinery/power/terminal{ dir = 8 @@ -11036,13 +11495,6 @@ "AN" = ( /turf/simulated/floor/tiled/dark, /area/groundbase/security/briefing) -"AO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "AP" = ( /obj/machinery/firealarm{ dir = 8 @@ -11070,13 +11522,6 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/medical/resleeving) -"AU" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "AV" = ( /obj/machinery/light{ dir = 4 @@ -11108,6 +11553,17 @@ "AZ" = ( /turf/simulated/mineral/cave/virgo3c, /area/groundbase/level1/sw) +"Ba" = ( +/obj/structure/table/hardwoodtable, +/obj/machinery/camera/network/civilian{ + dir = 8 + }, +/obj/random/mug, +/obj/random/mug, +/obj/random/mug, +/obj/random/mug, +/turf/simulated/floor/lino, +/area/groundbase/civilian/cafe) "Bb" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -11408,12 +11864,6 @@ /obj/effect/landmark/vermin, /turf/simulated/floor/tiled, /area/groundbase/engineering/workshop) -"BI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "BJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular{ @@ -11444,6 +11894,12 @@ }, /turf/simulated/floor/tiled, /area/groundbase/civilian/apparel) +"BM" = ( +/obj/structure/sign/painting/library_secure{ + pixel_y = -30 + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "BN" = ( /obj/machinery/alarm, /turf/simulated/floor/tiled, @@ -11455,6 +11911,22 @@ /obj/machinery/light, /turf/simulated/floor/tiled/white, /area/groundbase/medical/lhallway) +"BP" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, +/area/groundbase/level1/centsquare) "BQ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass{ @@ -11486,20 +11958,6 @@ }, /turf/simulated/floor/carpet/sblucarpet, /area/groundbase/security/iaa1) -"BU" = ( -/obj/machinery/airlock_sensor{ - dir = 8; - pixel_x = 25 - }, -/obj/effect/map_helper/airlock/sensor/chamber_sensor, -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - frequency = 1380; - id_tag = "tcommsairlock"; - pixel_y = 24; - req_one_access = list(61) - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "BV" = ( /obj/machinery/light{ dir = 8 @@ -11693,14 +12151,6 @@ /obj/machinery/atmospherics/pipe/manifold/visible/cyan, /turf/simulated/floor/tiled/techmaint, /area/groundbase/engineering/atmos) -"Cu" = ( -/obj/machinery/telecomms/bus/preset_two/groundbase, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "Cv" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass{ @@ -11839,12 +12289,6 @@ outdoors = 0 }, /area/groundbase/level1/northspur) -"CN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "CO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/green{ dir = 9 @@ -11864,17 +12308,6 @@ /obj/effect/landmark/start/bartender, /turf/simulated/floor/lino, /area/groundbase/civilian/bar) -"CQ" = ( -/obj/machinery/telecomms/bus/preset_three, -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "CR" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 4 @@ -11940,10 +12373,6 @@ }, /turf/simulated/floor/tiled/techmaint, /area/groundbase/command/tcomms/storage) -"CZ" = ( -/obj/machinery/holoplant, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "Db" = ( /turf/simulated/floor/outdoors/newdirt/virgo3c, /area/groundbase/level1/southeastspur) @@ -12180,15 +12609,6 @@ }, /turf/simulated/floor, /area/maintenance/groundbase/substation/medcargo) -"DF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/wood, -/area/groundbase/civilian/cafe) "DG" = ( /obj/machinery/atmospherics/pipe/simple/visible/black{ dir = 6 @@ -12420,15 +12840,6 @@ }, /turf/simulated/floor/virgo3c, /area/groundbase/unexplored/outdoors) -"Ei" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "Ej" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -12567,15 +12978,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/groundbase/engineering/workshop) -"Ez" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "EA" = ( /obj/machinery/computer/secure_data, /obj/machinery/light{ @@ -12639,15 +13041,9 @@ }, /area/maintenance/groundbase/level1/nwtunnel) "EM" = ( -/obj/machinery/door/firedoor, -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/blast/gate/thin{ - dir = 8; - id = "Cafe"; - layer = 3.3 - }, -/turf/simulated/floor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "EO" = ( /obj/machinery/light/bigfloorlamp, @@ -12907,13 +13303,6 @@ /obj/effect/landmark/start/engineer, /turf/simulated/floor/tiled, /area/groundbase/engineering/lobby) -"Fs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/universal{ - dir = 8 - }, -/obj/machinery/firealarm, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "Ft" = ( /obj/structure/bed/chair/comfy/black, /obj/effect/landmark/start/hos, @@ -13020,19 +13409,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/civilian/gateway) -"FI" = ( -/obj/machinery/door/airlock/hatch{ - name = "Telecoms Control Room"; - req_access = list(61) - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/steel_ridged, -/area/groundbase/command/tcomms) "FJ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/black{ @@ -13113,12 +13489,6 @@ }, /turf/simulated/floor/tiled, /area/holodeck_control) -"FW" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor/tiled, -/area/groundbase/engineering/workshop) "FX" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass_security/polarized{ @@ -13145,14 +13515,6 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/security/armory) -"FZ" = ( -/obj/machinery/telecomms/server/presets/security, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "Ga" = ( /obj/item/device/radio/intercom{ dir = 4; @@ -13774,27 +14136,6 @@ "Hz" = ( /turf/unsimulated/wall/planetary/virgo3c, /area/groundbase/level1/southeastspur) -"HA" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 4; - external_pressure_bound = 0; - external_pressure_bound_default = 0; - icon_state = "map_vent_in"; - initialize_directions = 1; - internal_pressure_bound = 4000; - internal_pressure_bound_default = 4000; - pressure_checks = 2; - pressure_checks_default = 2; - pump_direction = 0; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "HB" = ( /obj/structure/sign/double/barsign{ pixel_y = -32 @@ -13874,20 +14215,10 @@ /turf/simulated/floor, /area/maintenance/groundbase/substation/aiciv) "HI" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Cafe" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/bmarble, +/turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "HJ" = ( /obj/machinery/door/firedoor, @@ -14259,6 +14590,17 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/storage) +"IE" = ( +/obj/machinery/light/floortube{ + dir = 8; + pixel_x = -6 + }, +/obj/item/weapon/stool/padded{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/lino, +/area/groundbase/civilian/cafe) "IF" = ( /obj/machinery/suit_cycler/engineering, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -14577,9 +14919,6 @@ /obj/machinery/clonepod/transhuman, /turf/simulated/floor/tiled/dark, /area/groundbase/medical/resleeving) -"Jw" = ( -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "Jx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -14701,23 +15040,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/steel_ridged, /area/groundbase/medical/resleeving) -"JK" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 4; - external_pressure_bound = 140; - external_pressure_bound_default = 140; - icon_state = "map_vent_out"; - pressure_checks = 0; - pressure_checks_default = 0; - use_power = 1 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "JM" = ( /turf/simulated/wall/r_wall, /area/groundbase/engineering/storage) @@ -15023,17 +15345,6 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/medical/autoresleeving) -"Kp" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "Kq" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/highsecurity{ @@ -15243,22 +15554,8 @@ }, /turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, /area/groundbase/level1/centsquare) -"KV" = ( -/obj/machinery/telecomms/server/presets/service/groundbase, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "KW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/simulated/floor/wood, +/turf/simulated/floor/lino, /area/groundbase/civilian/cafe) "KX" = ( /obj/machinery/door/firedoor, @@ -15313,20 +15610,6 @@ outdoors = 0 }, /area/groundbase/level1/eastspur) -"Lc" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 8; - id_tag = null - }, -/obj/effect/map_helper/airlock/atmos/chamber_pump, -/obj/machinery/firealarm{ - dir = 4 - }, -/obj/machinery/camera/network/command{ - dir = 1 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "Ld" = ( /obj/structure/table/steel_reinforced, /obj/structure/cable/yellow{ @@ -15358,13 +15641,20 @@ /turf/simulated/floor/tiled, /area/groundbase/civilian/toolstorage) "Lf" = ( -/obj/machinery/power/apc{ - dir = 1 +/obj/machinery/button/remote/blast_door{ + id = "Cafe"; + name = "Cafe shutters"; + pixel_x = -3; + pixel_y = 26 }, -/obj/structure/cable/yellow{ - icon_state = "0-2" +/obj/machinery/light_switch{ + pixel_x = 5; + pixel_y = 30 }, -/turf/simulated/floor/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/lino, /area/groundbase/civilian/cafe) "Lg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -15381,15 +15671,6 @@ }, /turf/simulated/floor/carpet/sblucarpet, /area/groundbase/security/hos) -"Li" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "Lj" = ( /obj/structure/bed/chair/backed_red{ dir = 4 @@ -15583,19 +15864,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/cargo/mining) -"LF" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "LG" = ( /obj/machinery/computer/power_monitor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -15718,13 +15986,6 @@ /obj/machinery/light, /turf/simulated/floor/tiled, /area/groundbase/engineering/workshop) -"LW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden, -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "LX" = ( /obj/machinery/alarm, /turf/simulated/floor/tiled/white, @@ -15934,6 +16195,12 @@ dir = 8 }, /obj/machinery/light/small, +/obj/machinery/button/remote/airlock{ + id = "z1barstall1"; + pixel_x = -10; + pixel_y = 27; + specialfunctions = 4 + }, /turf/simulated/floor/tiled/white, /area/groundbase/civilian/bar) "Mw" = ( @@ -16082,16 +16349,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/storage) -"MN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/light, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "MO" = ( /turf/simulated/mineral/cave/virgo3c, /area/groundbase/level1/nw) @@ -16122,6 +16379,18 @@ }, /turf/simulated/floor/tiled, /area/groundbase/cargo/mining) +"MT" = ( +/obj/structure/table/hardwoodtable, +/obj/machinery/door/blast/gate/thin{ + id = "Cafe"; + layer = 3.3 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/lino, +/area/groundbase/civilian/cafe) "MU" = ( /obj/structure/cable{ icon_state = "1-2" @@ -16151,6 +16420,18 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/security/lobby) +"Na" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "Nb" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light_switch{ @@ -16298,19 +16579,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/atmos) -"Nu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/obj/machinery/exonet_node{ - anchored = 1 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "Nv" = ( /turf/simulated/floor/outdoors/grass/forest/virgo3c, /area/groundbase/level1/centsquare) @@ -16493,27 +16761,6 @@ /obj/effect/landmark/start/security, /turf/simulated/floor/tiled, /area/groundbase/security/processing) -"NR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1380; - master_tag = "tcommsairlock"; - pixel_x = 32; - req_one_access = list(61) - }, -/obj/effect/map_helper/airlock/door/int_door, -/obj/machinery/door/airlock/maintenance_hatch{ - frequency = null; - icon_state = "door_locked"; - id_tag = null; - locked = 1; - name = "Telecoms Server Access"; - req_access = list(61) - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/tiled/steel_ridged, -/area/groundbase/command/tcomms) "NS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, @@ -16682,21 +16929,16 @@ /turf/simulated/floor, /area/maintenance/groundbase/substation/secsci) "Om" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/blast/gate/thin{ + dir = 8; + id = "Cafe"; + layer = 3.3 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, -/area/groundbase/level1/centsquare) +/turf/simulated/floor, +/area/groundbase/civilian/cafe) "On" = ( /obj/structure/cable/yellow{ icon_state = "1-8" @@ -16846,15 +17088,6 @@ }, /turf/simulated/floor/lino, /area/groundbase/civilian/bar) -"OL" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air/airlock{ - start_pressure = 4559.63 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "OM" = ( /obj/machinery/transhuman/resleever, /obj/machinery/light{ @@ -17135,16 +17368,6 @@ outdoors = 0 }, /area/maintenance/groundbase/level1/swtunnel) -"PD" = ( -/obj/machinery/computer/telecomms/monitor{ - dir = 8; - network = "tcommsat" - }, -/obj/machinery/status_display{ - pixel_x = 32 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "PE" = ( /obj/machinery/door/firedoor, /obj/structure/table/reinforced, @@ -17172,17 +17395,18 @@ /turf/simulated/floor/outdoors/sidewalk/side/virgo3c, /area/groundbase/level1/centsquare) "PH" = ( -/obj/machinery/light, -/turf/simulated/floor/lino, -/area/groundbase/civilian/cafe) -"PI" = ( -/obj/machinery/telecomms/processor/preset_two, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 +/obj/structure/table/marble, +/obj/machinery/power/apc{ + dir = 1 }, -/area/groundbase/command/tcomms) +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "PJ" = ( /obj/structure/table/standard, /obj/item/device/healthanalyzer, @@ -17314,14 +17538,6 @@ outdoors = 0 }, /area/maintenance/groundbase/level1/nwtunnel) -"PZ" = ( -/obj/machinery/telecomms/bus/preset_four, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "Qa" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -17430,14 +17646,18 @@ "Qq" = ( /turf/simulated/wall/r_wall, /area/maintenance/groundbase/level1/swtunnel) -"Qs" = ( -/obj/machinery/pda_multicaster/prebuilt, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 +"Qt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/area/groundbase/command/tcomms) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/outdoors/sidewalk/side/virgo3c, +/area/groundbase/level1/centsquare) "Qu" = ( /obj/structure/table/rack/shelf/steel, /obj/item/clothing/suit/storage/vest/heavy/officer{ @@ -17529,18 +17749,6 @@ "QD" = ( /turf/simulated/floor/outdoors/grass/forest/virgo3c, /area/groundbase/level1/westspur) -"QE" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Crew Apparel Care" - }, -/obj/machinery/door/blast/shutters{ - dir = 8; - id = "engineaccess"; - name = "Engine Access Shutters" - }, -/turf/simulated/floor/bmarble, -/area/groundbase/engineering/engine) "QF" = ( /obj/effect/floor_decal/techfloor/orange{ dir = 10 @@ -17550,17 +17758,6 @@ }, /turf/simulated/floor/tiled/techfloor, /area/groundbase/civilian/arrivals) -"QG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/black{ - dir = 4 - }, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "QH" = ( /obj/structure/table/reinforced, /obj/item/device/sleevemate, @@ -17649,6 +17846,13 @@ /obj/machinery/pipedispenser/disposal, /turf/simulated/floor/tiled, /area/groundbase/engineering/atmos) +"QU" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/flora/pottedplant/decorative, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "QV" = ( /obj/structure/toilet, /obj/machinery/button/remote/airlock{ @@ -17833,13 +18037,13 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/groundbase/command/ai/robot) "Rs" = ( -/obj/machinery/door/window/brigdoor/northleft{ - dir = 8; - name = "Cafe"; - req_access = list(25) +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock{ + id_tag = "z1barstall3"; + name = "Restroom Stall" }, -/turf/simulated/floor/lino, -/area/groundbase/civilian/cafe) +/turf/simulated/floor/tiled/white, +/area/groundbase/civilian/bar) "Rt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/techmaint, @@ -17909,17 +18113,12 @@ /turf/simulated/floor/tiled/white, /area/groundbase/medical/office) "RA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/simulated/floor/outdoors/sidewalk/side/virgo3c, -/area/groundbase/level1/centsquare) +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "RB" = ( /obj/effect/landmark{ name = "carpspawn" @@ -17982,10 +18181,12 @@ /turf/simulated/floor/tiled, /area/groundbase/engineering/storage) "RI" = ( -/obj/item/weapon/stool/baystool/padded{ - dir = 8 +/obj/machinery/door/window/brigdoor/northleft{ + dir = 8; + name = "Cafe"; + req_access = list(25) }, -/turf/simulated/floor/wood, +/turf/simulated/floor/lino, /area/groundbase/civilian/cafe) "RJ" = ( /obj/structure/stairs/spawner/north, @@ -18118,12 +18319,6 @@ }, /turf/simulated/floor/wood, /area/groundbase/civilian/gameroom) -"RZ" = ( -/obj/machinery/camera/network/command{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "Sa" = ( /obj/structure/table/marble, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -18236,15 +18431,6 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/techstorage) -"Sn" = ( -/obj/machinery/power/apc{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "So" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -18312,6 +18498,13 @@ }, /turf/simulated/floor/tiled, /area/groundbase/command/tcomms/foyer) +"Sx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "Sy" = ( /obj/machinery/cryopod/robot, /obj/machinery/power/apc{ @@ -18472,13 +18665,7 @@ /turf/simulated/floor/tiled/steel_ridged, /area/groundbase/security/halls) "SO" = ( -/obj/structure/table/marble, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/structure/sign/painting/library_secure{ - pixel_y = -30 - }, +/obj/machinery/media/jukebox, /turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "SP" = ( @@ -19177,9 +19364,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/bluegrid, /area/groundbase/command/ai/robot) -"Uv" = ( -/turf/simulated/wall/r_wall, -/area/groundbase/command/tcomms) "Uw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -19302,18 +19486,18 @@ /turf/simulated/floor/carpet/gaycarpet, /area/groundbase/civilian/clown) "UO" = ( -/obj/machinery/button/remote/blast_door{ - id = "Cafe"; - name = "Cafe shutters"; - pixel_x = -3; - pixel_y = 26 +/obj/structure/toilet{ + dir = 8 }, -/obj/machinery/light_switch{ - pixel_x = 5; - pixel_y = 30 +/obj/machinery/light/small, +/obj/machinery/button/remote/airlock{ + id = "z1barstall3"; + pixel_x = -10; + pixel_y = 27; + specialfunctions = 4 }, -/turf/simulated/floor/lino, -/area/groundbase/civilian/cafe) +/turf/simulated/floor/tiled/white, +/area/groundbase/civilian/bar) "UP" = ( /obj/structure/table/rack/steel, /obj/item/clothing/gloves/arm_guard/laserproof, @@ -19332,13 +19516,6 @@ "UQ" = ( /turf/simulated/floor/tiled/white, /area/groundbase/medical/morgue) -"UR" = ( -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -30 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "US" = ( /obj/structure/bed/chair/sofa/bench, /obj/effect/landmark/start/visitor, @@ -19519,6 +19696,20 @@ /obj/structure/cable/yellow, /turf/simulated/floor/tiled, /area/groundbase/civilian/toolstorage) +"Vw" = ( +/obj/structure/table/hardwoodtable, +/obj/machinery/door/blast/gate/thin{ + id = "Cafe"; + layer = 3.3 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/lino, +/area/groundbase/civilian/cafe) "Vx" = ( /obj/structure/cable{ icon_state = "1-2" @@ -19608,6 +19799,13 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/white, /area/groundbase/civilian/womensrestroom) +"VH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/item/weapon/stool/baystool/padded{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "VI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -19764,11 +19962,13 @@ /turf/simulated/floor/bluegrid, /area/groundbase/command/ai/robot) "Wb" = ( -/obj/machinery/light{ - dir = 1 +/obj/structure/table/hardwoodtable, +/obj/machinery/door/blast/gate/thin{ + dir = 8; + id = "Cafe"; + layer = 3.3 }, -/obj/structure/table/woodentable, -/turf/simulated/floor/wood, +/turf/simulated/floor/lino, /area/groundbase/civilian/cafe) "Wc" = ( /obj/machinery/vending/tool, @@ -19783,14 +19983,10 @@ /turf/simulated/floor/tiled/dark, /area/groundbase/security/armory) "Wg" = ( -/obj/item/weapon/stool/padded{ - dir = 8 +/obj/item/weapon/stool/baystool/padded{ + dir = 1 }, -/obj/machinery/light/floortube{ - dir = 8; - pixel_x = -6 - }, -/turf/simulated/floor/lino, +/turf/simulated/floor/wood, /area/groundbase/civilian/cafe) "Wh" = ( /obj/machinery/button/remote/blast_door{ @@ -19931,17 +20127,6 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/civilian/bar) -"WA" = ( -/obj/machinery/telecomms/bus/preset_one, -/obj/machinery/atmospherics/pipe/manifold/hidden/black{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark{ - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "WB" = ( /turf/simulated/floor/outdoors/newdirt/virgo3c{ outdoors = 0 @@ -19979,6 +20164,21 @@ }, /turf/simulated/floor, /area/groundbase/security/warden) +"WF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/item/weapon/stool/baystool/padded{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "WG" = ( /obj/machinery/light_switch{ dir = 8; @@ -20608,18 +20808,24 @@ }, /turf/simulated/floor/tiled, /area/groundbase/engineering/atmos/monitoring) -"Ye" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled/techfloor/grid, -/area/groundbase/command/tcomms) "Yf" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/outdoors/sidewalk/side/virgo3c, /area/groundbase/level1/westspur) +"Yg" = ( +/obj/item/weapon/stool/baystool/padded{ + dir = 1 + }, +/obj/structure/sign/painting/library_secure{ + pixel_x = 30 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/groundbase/civilian/cafe) "Yh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -20745,7 +20951,10 @@ /obj/item/device/radio/intercom{ pixel_y = -24 }, -/turf/simulated/floor/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/lino, /area/groundbase/civilian/cafe) "Yy" = ( /obj/structure/cable/yellow{ @@ -20770,15 +20979,6 @@ "YC" = ( /turf/simulated/floor/outdoors/newdirt/virgo3c, /area/groundbase/level1/centsquare) -"YD" = ( -/obj/machinery/camera/network/command, -/turf/simulated/floor/bluegrid{ - name = "Mainframe Base"; - nitrogen = 100; - oxygen = 0; - temperature = 80 - }, -/area/groundbase/command/tcomms) "YE" = ( /obj/machinery/door/firedoor, /obj/machinery/door/window/brigdoor/southleft{ @@ -20917,22 +21117,21 @@ /turf/simulated/floor/tiled, /area/groundbase/engineering/workshop) "YW" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/disposalpipe/sortjunction/flipped{ - dir = 4; - name = "Resleeving"; - sortType = "Resleeving" +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, /turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, /area/groundbase/level1/centsquare) "YX" = ( @@ -22204,22 +22403,22 @@ MO MO MO MO -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv +an +an +an +an +an +an +an +an +an +an +an +an +an +an +an +an MO MO MO @@ -22346,22 +22545,22 @@ MO MO MO MO -Uv -cX -za -HA -Kp -za -JK -cX -Uv -CZ -nW -Ye -Sn -eo -CZ -Uv +an +bI +bK +ct +de +bK +ez +bI +an +gd +gY +ix +iX +kD +gd +an Dc Dc Dc @@ -22488,22 +22687,22 @@ MO MO MO MO -Uv -za -za -QG -za -za -QG -za -tQ -Jw -CN -ct -AO -fu -mQ -Uv +an +bK +bK +cy +bK +bK +cy +bK +fO +gw +gZ +iL +je +kN +kZ +an Ij uv Hu @@ -22630,22 +22829,22 @@ MO MO MO MO -Uv -za -za -kf -sT -za -QG -za -tQ -Jw -Jw -Jw -me -Jw -MN -Uv +an +bK +bK +cM +di +bK +cy +bK +fO +gw +gw +gw +jk +gw +le +an KK Rt By @@ -22772,22 +22971,22 @@ MO MO MO MO -Uv -za -gZ -QG -za -KV -vG -za -tQ -Jw -Jw -Jw -me -Jw -oq -Uv +an +bK +bT +cy +bK +dv +eD +bK +fO +gw +gw +gw +jk +gw +lm +an Hs gT DP @@ -22914,22 +23113,22 @@ MO MO MO MO -Uv -YD -za -QG -za -za -QG -za -tQ -Jw -Jw -Jw -me -Jw -oq -Uv +an +bN +bK +cy +bK +bK +cy +bK +fO +gw +gw +gw +jk +gw +lm +an bd gT Xs @@ -23056,22 +23255,22 @@ MO MO MO MO -Uv -za -cX -QG -za -PI -sU -za -Uv -Jw -kU -Jw -me -Jw -oq -Uv +an +bK +bI +cy +bK +dy +eQ +bK +an +gw +hc +gw +jk +gw +lm +an lp cC lc @@ -23198,22 +23397,22 @@ MO MO MO MO -Uv -za -za -QG -za -Cu -WA -Ez -yt -yt -yt -yt -fJ -Jw -oq -Uv +an +bK +bK +cy +bK +dT +eS +fM +fW +fW +fW +fW +jl +gw +lm +an Dc Dc PT @@ -23340,22 +23539,22 @@ MO MO MO MO -Uv -za -le -QG -za -za -xG -za -Uv -bB -OL -Uv -ch -Jw -pI -Uv +an +bK +cc +cy +bK +bK +fa +bK +an +gw +hn +an +ju +gw +ls +an kG au zz @@ -23482,22 +23681,22 @@ MO MO MO MO -Uv -gY -Qs -dy -zm -xl -cy -za -st -Jw -gU -NR -LW -zL -LF -FI +an +bR +ch +cR +do +dY +fd +bK +fZ +gw +hy +iP +jy +kO +lu +me FC DX Bn @@ -23624,22 +23823,22 @@ MO MO MO MO -Uv -za -rk -QG -za -za -zA -za -Uv -BU -Lc -Uv -cR -Jw -uY -Uv +an +bK +cm +cy +bK +bK +fi +bK +an +gP +hS +an +jN +gw +lv +an KC Sv zz @@ -23766,22 +23965,22 @@ MO MO MO MO -Uv -za -za -QG -za -PZ -CQ -za -Uv -Uv -Uv -Uv -Fs -Jw -zy -Uv +an +bK +bK +cy +bK +eo +fu +bK +an +an +an +an +kf +gw +lK +an SS SS Hf @@ -23908,22 +24107,22 @@ MO MO MO MO -Uv -za -cX -QG -za -fi -Nu -za -Uv -UR -RZ -Jw -CN -ct -AU -Uv +an +bK +bI +cy +bK +eu +fF +bK +an +gU +hY +gw +gZ +iL +lM +an Pm zS lC @@ -24050,22 +24249,22 @@ MO MO MO MO -Uv -YD -za -QG -za -za -QG -za -tQ -Jw -Jw -Jw -Jw -Jw -oq -Uv +an +bN +bK +cy +bK +bK +cy +bK +fO +gw +gw +gw +gw +gw +lm +an PL Ne zt @@ -24192,22 +24391,22 @@ MO MO MO MO -Uv -za -hY -QG -za -xQ -vG -za -tQ -Jw -Jw -Jw -Jw -Jw -MN -Uv +an +bK +cr +cy +bK +ev +eD +bK +fO +gw +gw +gw +gw +gw +le +an Qg hN lC @@ -24334,22 +24533,22 @@ MO MO MO MO -Uv -za -za -rG -FZ -za -QG -za -tQ -Jw an -eD -eD -iP -Ei -Uv +bK +bK +cX +dr +bK +cy +bK +fO +gw +ia +iQ +iQ +kS +mc +an Rr Ui ZJ @@ -24476,22 +24675,22 @@ MO MO MO MO -Uv -za -za -QG -za -za -QG -za -tQ -Jw -cc -Jw -Jw -lv -Jw -Uv +an +bK +bK +cy +bK +bK +cy +bK +fO +gw +is +gw +gw +kT +gw +an Sy Uu SI @@ -24618,22 +24817,22 @@ MO MO MO MO -Uv -cX -za -bT -qh -za -qq -cX -Uv -CZ -BI -PD -kT -Li -CZ -Uv +an +bI +bK +cZ +dt +bK +fJ +bI +an +gd +it +iT +kr +kU +gd +an TQ YT lC @@ -24760,22 +24959,22 @@ MO MO MO MO -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv -Uv +an +an +an +an +an +an +an +an +an +an +an +an +an +an +an +an el el Kq @@ -27932,9 +28131,9 @@ Wz pj db pj -db +cw pj -db +Rs pj MO Wx @@ -28074,9 +28273,9 @@ yh pj Mv pj -Mv +fj pj -Mv +UO pj MO MO @@ -30624,7 +30823,7 @@ ZR tG tG ZR -tG +GK tG tG tG @@ -30774,8 +30973,8 @@ ng Dg Iy Eb -Eb -Eb +Nv +Nv Eb Eb Eb @@ -30908,25 +31107,25 @@ tG tG tG tG -UX +tG tG tG GK hW +YC +Eb +Eb +Eb +Eb +Eb +Eb +Eb Eb Eb Eb -Nv -Nv -Nv -Nv Eb Eb Eb -Nv -Nv -Nv -Nv Eb Eb Eb @@ -31054,26 +31253,26 @@ UX tG tG tG -hW -Eb -Eb -Nv -Nv -Nv -Nv -Eb -Eb -Eb -Nv -Nv -Nv -Eb -Eb -Eb -Eb -Eb -Eb -Vh +bV +Gx +Gx +Gx +Gx +Gx +BP +Gx +Gx +Gx +Gx +Gx +Gx +Gx +Gx +Gx +Gx +Gx +Gx +oa Eb Eb Eb @@ -31196,17 +31395,17 @@ UX tG tG tG -hW +NL +YC +Eb +Yt +Eb +YC +Qt YC Eb Eb -Eb -Eb -Eb -Eb -Eb -Eb -Eb +Yt Eb Eb Eb @@ -31223,7 +31422,7 @@ Eb Eb Eb Eb -Eb +YC uB Eb Eb @@ -31339,24 +31538,24 @@ tG gM tG gB -Gx -Gx -Gx -Gx -Gx -Gx -Gx +Eb +hr +hr Om -Gx -Gx -Gx -Gx -Gx -Gx -Gx -Gx -Gx -Gx +Om +gg +Om +Om +Om +hr +hr +Eb +Eb +Nv +Nv +Nv +Eb +Eb YW ay ay @@ -31481,24 +31680,24 @@ bb ZA GK NL -YC -Eb -Eb -Eb -Eb -Yt Eb +hr +gW +Wg +xt +pW +bW RA -Eb -Eb -Yt +oX +QU +hr Eb Eb Eb Eb Eb jD -YC +Eb Vh mG eR @@ -31507,7 +31706,7 @@ eR eR eR eR -Eb +YC TK Eb Eb @@ -31624,15 +31823,15 @@ Mw ED uu Eb -Eb -Eb -Eb -Eb -hr +gb +hF +Wg +xt +Na EM HI -EM -EM +xt +BM hr dk uR @@ -31766,12 +31965,12 @@ kz ED xH Lk -Eb -Eb -qE -qE -hr -qX +gb +vo +Wg +te +WF +xR xR xt SO @@ -31908,15 +32107,15 @@ Pi Pi kx kd -Lk -qE -qE -qE -hr +gb +zu +VH +Sx +MT +Wb Wb -DF RI -np +Wb hr Oa Pb @@ -32050,13 +32249,13 @@ qE mI Bs mI -qE -qE -qE -qE hr +PH +Yg +ro +Vw mb -DF +IE vi Yx hr @@ -32199,8 +32398,8 @@ yu hr Lf KW -pZ -vi +KW +dV hr jS BL @@ -32222,9 +32421,9 @@ qI Gv Ge Eb -Eb +YC Qy -Eb +YC Eb qI Gv @@ -32341,7 +32540,7 @@ Mu hr qV cH -vi +Ba mL hr zT @@ -32481,10 +32680,10 @@ ZG pK hM hr -gb -zu -Rs -gb +hr +hr +hr +hr hr bL Pb @@ -32622,12 +32821,12 @@ ZO Kg XB bl -hr -UO -Wg -gW -gW -hr +nb +qE +qE +qE +qE +dk mV Pb Cr @@ -32742,7 +32941,7 @@ Qb Qb ub kn -pM +bB RM pM GL @@ -32764,12 +32963,12 @@ nb to EV KA -hr -bV -gW -gW -PH -hr +nb +qE +qE +qE +qE +dk Vb Pb ll @@ -32906,12 +33105,12 @@ nb rF Tc Te -hr -vo -hF -cw -fj -hr +nb +qE +qE +qE +qE +dk mw Pb CL @@ -33051,8 +33250,8 @@ DQ DQ DQ DQ -bb -bb +qE +qE dk dk kB @@ -34090,9 +34289,9 @@ aw aw aw aw -xN -QE -xN +iN +mp +iN aw aw Lt @@ -34235,7 +34434,7 @@ xD ME ME ME -iN +mu aw Lt Lt @@ -35206,14 +35405,14 @@ pe Wl VC XJ -ez +bw zv NY ER jf BH -FW -hS +bD +bH JM ph aE @@ -36624,7 +36823,7 @@ Lt Lt Lt iS -vS +bq wu aM iS diff --git a/maps/groundbase/gb-z2.dmm b/maps/groundbase/gb-z2.dmm index 304434ff5c..e8a8f8356f 100644 --- a/maps/groundbase/gb-z2.dmm +++ b/maps/groundbase/gb-z2.dmm @@ -2235,7 +2235,9 @@ /area/groundbase/cargo/office) "go" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/light/small/fairylights, +/obj/machinery/light/small/fairylights{ + pixel_y = -2 + }, /turf/simulated/floor/outdoors/sidewalk/virgo3c, /area/groundbase/level2/nw) "gq" = ( @@ -5071,6 +5073,12 @@ outdoors = 0 }, /area/groundbase/level2/se) +"oG" = ( +/obj/machinery/light/small/fairylights{ + pixel_y = -1 + }, +/turf/simulated/floor/outdoors/grass/virgo3c, +/area/groundbase/level2/nw) "oH" = ( /turf/simulated/open/virgo3c, /area/groundbase/level2/eastspur) @@ -7693,6 +7701,12 @@ }, /turf/simulated/floor/tiled/white, /area/groundbase/dorms/room1) +"wl" = ( +/obj/machinery/light/small/fairylights{ + pixel_y = -1 + }, +/turf/simulated/floor/outdoors/newdirt/virgo3c, +/area/groundbase/level2/nw) "wm" = ( /obj/machinery/computer/supplycomp/control{ dir = 8 @@ -11523,7 +11537,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/obj/machinery/light/small/fairylights, +/obj/machinery/light/small/fairylights{ + pixel_y = -2 + }, /turf/simulated/floor/outdoors/sidewalk/virgo3c, /area/groundbase/level2/nw) "Hs" = ( @@ -24377,13 +24393,13 @@ bY bY bY bY -EZ +wl ml pw -lM +oG bY bY -lM +oG bY bY bY @@ -24661,13 +24677,13 @@ bY bY bY bY -EZ +wl sN pw -lM +oG bY Oa -lM +oG bY bY bY @@ -28057,16 +28073,16 @@ VR VR VR VR -VR -VR -VR -VR -VR -VR -VR -VR -VR -VR +fp +fp +fp +fp +fp +fp +fp +fp +fp +fp VR VR VR @@ -28199,16 +28215,16 @@ VR VR VR VR -VR -VR -VR -VR -VR -VR -VR -VR -VR -VR +fp +fp +fp +fp +fp +fp +fp +fp +fp +fp VR VR VR @@ -28341,10 +28357,10 @@ Wd VR VR VR -VR -VR -VR -VR +fp +fp +fp +fp to fp fp @@ -28483,8 +28499,8 @@ BW VR to to -VR -VR +fp +fp to to to diff --git a/maps/groundbase/gb-z3.dmm b/maps/groundbase/gb-z3.dmm index 95d87ed2be..508002d17d 100644 --- a/maps/groundbase/gb-z3.dmm +++ b/maps/groundbase/gb-z3.dmm @@ -2,6 +2,24 @@ "aa" = ( /turf/simulated/wall, /area/groundbase/exploration/equipment) +"ab" = ( +/obj/machinery/suit_cycler/medical, +/obj/structure/sign/scenery/fakefireaxe{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/groundbase/medical/paramedic) +"ac" = ( +/obj/effect/landmark/start/pilot, +/obj/structure/closet/walllocker_double{ + dir = 8; + name = "misc equipment cabinet"; + pixel_x = -32 + }, +/obj/item/weapon/storage/box/nifsofts_pilot, +/obj/item/device/multitool/groundbase_buffered, +/turf/simulated/floor/tiled, +/area/groundbase/civilian/pilot) "ak" = ( /obj/structure/table/glass, /obj/item/weapon/paper_bin, @@ -5599,7 +5617,7 @@ Qa qO fz bm -Tk +ac pd Tk bm @@ -16835,7 +16853,7 @@ ID lz Cv Vm -og +ab to to Qk diff --git a/maps/groundbase/groundbase_areas.dm b/maps/groundbase/groundbase_areas.dm index 19af27e4ec..f814f39053 100644 --- a/maps/groundbase/groundbase_areas.dm +++ b/maps/groundbase/groundbase_areas.dm @@ -360,6 +360,7 @@ name = "Arrivals" lightswitch = 1 forbid_events = TRUE + forbid_singulo = TRUE /area/groundbase/civilian/toolstorage name = "Tool Storage" lightswitch = 1 @@ -446,6 +447,7 @@ limit_mob_size = FALSE block_suit_sensors = TRUE forbid_events = TRUE + forbid_singulo = TRUE /area/groundbase/dorms/bathroom name = "Dormitory Bathroom" diff --git a/maps/groundbase/groundbase_defines.dm b/maps/groundbase/groundbase_defines.dm index de61e75d2f..1a74e22b62 100644 --- a/maps/groundbase/groundbase_defines.dm +++ b/maps/groundbase/groundbase_defines.dm @@ -422,7 +422,7 @@ . = ..() // seed_submaps(list(Z_LEVEL_MINING), 60, /area/gb_mine/unexplored, /datum/map_template/space_rocks) //POI seeding new /datum/random_map/automata/cave_system/no_cracks(null, 3, 3, Z_LEVEL_MINING, world.maxx - 4, world.maxy - 4) - new /datum/random_map/noise/ore/mining(null, 1, 1, Z_LEVEL_MINING, 64, 64) + new /datum/random_map/noise/ore/gb_mining(null, 1, 1, Z_LEVEL_MINING, 64, 64) /datum/map_z_level/gb_lateload/mining z = Z_LEVEL_MINING diff --git a/maps/groundbase/groundbase_mining.dm b/maps/groundbase/groundbase_mining.dm index 27cd9c6a0a..c4ee180a40 100644 --- a/maps/groundbase/groundbase_mining.dm +++ b/maps/groundbase/groundbase_mining.dm @@ -8,7 +8,7 @@ "uranium" = 10, "platinum" = 10, "hematite" = 20, - "carbon" = 5, + "carbon" = 20, "diamond" = 1, "gold" = 8, "silver" = 8, @@ -21,7 +21,7 @@ "uranium" = 5, "platinum" = 5, "hematite" = 35, - "carbon" = 5, + "carbon" = 35, "gold" = 3, "silver" = 3, "phoron" = 25, @@ -32,10 +32,10 @@ UpdateMineral() update_icon() -/datum/random_map/noise/ore/mining - descriptor = "asteroid field ore distribution map" - deep_val = 0.2 - rare_val = 0.1 +/datum/random_map/noise/ore/gb_mining + descriptor = "groundbase underground ore distribution map" + deep_val = 0.7 + rare_val = 0.5 /datum/random_map/noise/ore/mining/check_map_sanity() return 1 //Totally random, but probably beneficial. diff --git a/maps/groundbase/groundbase_poi_stuff.dm b/maps/groundbase/groundbase_poi_stuff.dm index e24fe9b14a..161472287d 100644 --- a/maps/groundbase/groundbase_poi_stuff.dm +++ b/maps/groundbase/groundbase_poi_stuff.dm @@ -1063,7 +1063,11 @@ name = "wide building 6" mappath = 'southwilds/villagepois/wide6.dmm' /area/submap/groundbase/poi/wildvillage/wide/wide6 - +/obj/item/weapon/paper/wide6 + name = "\improper hand written letter" + info = {"It is hard for me to write this out, and I hope you will be back soon, but I fear that by the time you return I will already be gone. I will try my best to hold on, but even as I write this, I can feel myself slipping.

+ I know that you all do not believe me but I really can see them, just beyond the walls, and they're even closer now than they were before. I can see them even when I close my eyes. Seven golden eyes watch me, and I can feel their heat pouring into me. As they come closer, I can feel myself being tugged in. Like I'm a little lost moon being tugged into the embrace of a passing star.

It still doesn't hurt. It's getting hard to see anything else, and I can't move anymore. I feel like everything is going to be okay. If you see seven eyes, don't be afraid. Just promise you'll come find me, okay?

+ I'll keep hol"} /datum/map_template/groundbase/wildvillage/long/long1 name = "long building 1" diff --git a/maps/groundbase/southwilds/villagepois/wide6.dmm b/maps/groundbase/southwilds/villagepois/wide6.dmm index 90f8197b9c..78b99a7beb 100644 --- a/maps/groundbase/southwilds/villagepois/wide6.dmm +++ b/maps/groundbase/southwilds/villagepois/wide6.dmm @@ -53,10 +53,7 @@ /obj/item/weapon/bedsheet/double, /obj/random/plushie, /obj/structure/curtain/open/privacy, -/obj/item/weapon/paper{ - info = "It is hard for me to write this out, and I hope you will be back soon, but I fear that by the time you return I will already be gone. I will try my best to hold on, but even as I write this, I can feel myself slipping.

I know that you all do not believe me but I really can see them, just beyond the walls, and they're even closer now than they were before. I can see them even when I close my eyes. Seven golden eyes watch me, and I can feel their heat pouring into me. As they come closer, I can feel myself being tugged in. Like I'm a little lost moon being tugged into the embrace of a passing star.

It still doesn't hurt. It's getting hard to see anything else, and I can't move anymore. I feel like everything is going to be okay. If you see seven eyes, don't be afraid. Just promise you'll come find me, okay?

I'll keep hol
"; - name = "A hand written letter" - }, +/obj/item/weapon/paper/wide6, /turf/simulated/floor/tiled/white, /area/submap/groundbase/poi/wildvillage/wide/wide6) "n" = ( diff --git a/maps/offmap_vr/common_offmaps.dm b/maps/offmap_vr/common_offmaps.dm index b726a2fec3..1076f00dd3 100644 --- a/maps/offmap_vr/common_offmaps.dm +++ b/maps/offmap_vr/common_offmaps.dm @@ -220,6 +220,7 @@ mappath = 'maps/gateway_vr/wildwest.dmm' associated_map_datum = /datum/map_z_level/common_lateload/gateway_destination +#include "../gateway_vr/lucky_7.dm" ///////////////////////////////////////////////////////////////////////////////////// diff --git a/maps/om_adventure/pois/darkstar.dmm b/maps/om_adventure/pois/darkstar.dmm index a41ef6cb59..809c5b7aa7 100644 --- a/maps/om_adventure/pois/darkstar.dmm +++ b/maps/om_adventure/pois/darkstar.dmm @@ -2,11 +2,13 @@ "a" = ( /turf/template_noop, /area/template_noop) -"e" = ( +"b" = ( +/mob/living/simple_mob/vore/alienanimals/space_ghost{ + faction = "spookyland" + }, /turf/simulated/floor/weird_things/dark, /area/om_adventure/poi/darkstar) -"z" = ( -/mob/living/simple_mob/vore/alienanimals/space_ghost, +"e" = ( /turf/simulated/floor/weird_things/dark, /area/om_adventure/poi/darkstar) @@ -50,7 +52,7 @@ a e e e -z +b e e e diff --git a/maps/om_adventure/pois/fleshtear1.dmm b/maps/om_adventure/pois/fleshtear1.dmm index e2a3d25f18..bfe4b8089f 100644 --- a/maps/om_adventure/pois/fleshtear1.dmm +++ b/maps/om_adventure/pois/fleshtear1.dmm @@ -3,7 +3,9 @@ /turf/template_noop, /area/template_noop) "b" = ( -/mob/living/simple_mob/creature, +/mob/living/simple_mob/creature{ + faction = "spookyland" + }, /turf/simulated/floor/flesh{ base_icon = 'icons/turf/stomach_vr.dmi' }, diff --git a/maps/om_adventure/pois/fleshtear2.dmm b/maps/om_adventure/pois/fleshtear2.dmm index 19d435ce33..970059ac12 100644 --- a/maps/om_adventure/pois/fleshtear2.dmm +++ b/maps/om_adventure/pois/fleshtear2.dmm @@ -4,15 +4,17 @@ base_icon = 'icons/turf/stomach_vr.dmi' }, /area/om_adventure/poi/fleshtear2) +"b" = ( +/mob/living/simple_mob/creature{ + faction = "spookyland" + }, +/turf/simulated/floor/flesh{ + base_icon = 'icons/turf/stomach_vr.dmi' + }, +/area/om_adventure/poi/fleshtear2) "B" = ( /turf/template_noop, /area/template_noop) -"H" = ( -/mob/living/simple_mob/creature, -/turf/simulated/floor/flesh{ - base_icon = 'icons/turf/stomach_vr.dmi' - }, -/area/om_adventure/poi/fleshtear2) (1,1,1) = {" B @@ -45,7 +47,7 @@ B B B a -H +b a a B diff --git a/maps/om_adventure/pois/fleshtear3.dmm b/maps/om_adventure/pois/fleshtear3.dmm index 1c77a34996..c23cca7ebd 100644 --- a/maps/om_adventure/pois/fleshtear3.dmm +++ b/maps/om_adventure/pois/fleshtear3.dmm @@ -2,8 +2,10 @@ "a" = ( /turf/template_noop, /area/template_noop) -"M" = ( -/mob/living/simple_mob/creature, +"b" = ( +/mob/living/simple_mob/creature{ + faction = "spookyland" + }, /turf/simulated/floor/flesh{ base_icon = 'icons/turf/stomach_vr.dmi' }, @@ -62,7 +64,7 @@ Q Q a Q -M +b Q Q a diff --git a/maps/om_adventure/pois/fleshtear4.dmm b/maps/om_adventure/pois/fleshtear4.dmm index 077d29a8b7..b41923a34c 100644 --- a/maps/om_adventure/pois/fleshtear4.dmm +++ b/maps/om_adventure/pois/fleshtear4.dmm @@ -2,13 +2,15 @@ "a" = ( /turf/template_noop, /area/template_noop) -"m" = ( +"b" = ( +/mob/living/simple_mob/creature{ + faction = "spookyland" + }, /turf/simulated/floor/flesh{ base_icon = 'icons/turf/stomach_vr.dmi' }, /area/om_adventure/poi/fleshtear4) -"n" = ( -/mob/living/simple_mob/creature, +"m" = ( /turf/simulated/floor/flesh{ base_icon = 'icons/turf/stomach_vr.dmi' }, @@ -31,7 +33,7 @@ a (3,1,1) = {" a a -n +b m a "} @@ -65,7 +67,7 @@ a "} (8,1,1) = {" a -n +b m m a diff --git a/maps/stellar_delight/stellar_delight1.dmm b/maps/stellar_delight/stellar_delight1.dmm index 666ed451eb..2a1622a32f 100644 --- a/maps/stellar_delight/stellar_delight1.dmm +++ b/maps/stellar_delight/stellar_delight1.dmm @@ -6150,6 +6150,7 @@ /area/stellardelight/deck1/lowermed) "mK" = ( /obj/structure/table/sifwooden_reinforced, +/obj/item/weapon/storage/box/nifsofts_pilot, /turf/simulated/floor/tiled/eris/steel/panels, /area/stellardelight/deck1/pilot) "mL" = ( @@ -8379,6 +8380,7 @@ pixel_x = -3; pixel_y = -2 }, +/obj/item/weapon/book/manual/robotics_manual, /obj/item/weapon/book/manual/robotics_cyborgs, /turf/simulated/floor/tiled/steel_dirty, /area/assembly/robotics) @@ -10622,12 +10624,18 @@ /obj/item/clothing/shoes/magboots, /obj/item/clothing/mask/breath, /obj/item/clothing/mask/breath, +/obj/item/device/suit_cooling_unit{ + pixel_y = -5 + }, +/obj/item/device/suit_cooling_unit{ + pixel_y = -5 + }, +/obj/item/weapon/tank/oxygen, +/obj/item/weapon/tank/oxygen, /obj/item/clothing/suit/space/void/pilot, /obj/item/clothing/suit/space/void/pilot, /obj/item/clothing/head/helmet/space/void/pilot, /obj/item/clothing/head/helmet/space/void/pilot, -/obj/item/weapon/tank/oxygen, -/obj/item/weapon/tank/oxygen, /turf/simulated/floor/tiled/eris/steel/panels, /area/stellardelight/deck1/pilot) "wu" = ( @@ -22368,6 +22376,7 @@ /obj/item/weapon/book/manual/resleeving, /obj/item/weapon/book/manual/ripley_build_and_repair, /obj/item/weapon/book/manual/robotics_cyborgs, +/obj/item/weapon/book/manual/robotics_manual, /obj/item/weapon/book/manual/rust_engine, /obj/item/weapon/book/manual/security_space_law, /obj/item/weapon/book/manual/standard_operating_procedure, diff --git a/maps/stellar_delight/stellar_delight2.dmm b/maps/stellar_delight/stellar_delight2.dmm index e54c49f0b2..6b6601dda9 100644 --- a/maps/stellar_delight/stellar_delight2.dmm +++ b/maps/stellar_delight/stellar_delight2.dmm @@ -1896,6 +1896,18 @@ /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/eris/dark/orangecorner, /area/engineering/locker_room) +"dT" = ( +/obj/machinery/computer/atmos_alert{ + dir = 1 + }, +/obj/machinery/camera/network/engineering{ + dir = 4 + }, +/obj/structure/sign/scenery/fakefireaxe{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/engineering/atmos/monitoring) "dU" = ( /obj/structure/bed/chair/backed_red{ dir = 4 @@ -1907,6 +1919,12 @@ /obj/structure/disposalpipe/segment, /turf/simulated/wall/bay/r_wall/steel, /area/stellardelight/deck2/o2production) +"dW" = ( +/obj/structure/closet/secure_closet/engineering_electrical/double{ + anchored = 1 + }, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/engineering/locker_room) "dX" = ( /obj/machinery/light{ dir = 8 @@ -2059,6 +2077,10 @@ }, /turf/simulated/open, /area/stellardelight/deck2/aftstarboard) +"eo" = ( +/obj/structure/closet/secure_closet/engineering_welding/double, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/engineering/locker_room) "ep" = ( /obj/machinery/power/apc/angled{ dir = 4; @@ -2125,7 +2147,7 @@ }, /obj/item/clothing/shoes/black, /obj/item/device/communicator, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "ew" = ( /obj/structure/table/steel_reinforced, @@ -2469,6 +2491,10 @@ }, /turf/simulated/floor/tiled/eris/steel/brown_platform, /area/crew_quarters/bar) +"fj" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/simulated/floor/tiled/techfloor, +/area/stellardelight/deck2/o2production) "fk" = ( /obj/machinery/vending/engivend, /obj/machinery/light{ @@ -2522,6 +2548,10 @@ }, /turf/simulated/floor/lino, /area/crew_quarters/bar) +"fq" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/turf/simulated/floor/tiled/techfloor, +/area/stellardelight/deck2/o2production) "fr" = ( /obj/structure/sign/painting/public{ pixel_x = -30 @@ -3568,7 +3598,7 @@ /obj/machinery/disposal/wall/cleaner{ dir = 4 }, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "hQ" = ( /obj/structure/table/standard, @@ -5604,7 +5634,7 @@ /obj/machinery/vending/loadout/loadout_misc, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/landmark/vines, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "me" = ( /obj/structure/cable/white{ @@ -5835,7 +5865,7 @@ /obj/item/clothing/shoes/black, /obj/machinery/light, /obj/item/device/communicator, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "mH" = ( /obj/structure/table/steel_reinforced, @@ -7081,12 +7111,6 @@ /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/eris/steel/cargo, /area/quartermaster/storage) -"pF" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/item/clothing/gloves/yellow, -/obj/item/clothing/gloves/yellow, -/turf/simulated/floor/tiled/eris/dark/orangecorner, -/area/engineering/locker_room) "pG" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -7898,9 +7922,6 @@ }, /turf/simulated/floor/tiled/eris/cafe, /area/crew_quarters/kitchen) -"ro" = ( -/turf/simulated/floor/tiled/techfloor, -/area/stellardelight/deck2/o2production) "rp" = ( /obj/structure/cable/cyan{ icon_state = "1-2" @@ -10630,7 +10651,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "xJ" = ( /obj/structure/table/reinforced, @@ -11697,7 +11718,7 @@ }, /obj/machinery/vending/loadout/uniform, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "Af" = ( /obj/structure/table/reinforced, @@ -12896,7 +12917,7 @@ }, /obj/machinery/vending/loadout/clothing, /obj/machinery/alarm/angled, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "CW" = ( /obj/effect/floor_decal/steeldecal/steel_decals5{ @@ -13085,7 +13106,7 @@ }, /obj/structure/undies_wardrobe, /obj/effect/landmark/vermin, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "Dv" = ( /obj/structure/cable/white{ @@ -14279,7 +14300,7 @@ }, /obj/machinery/vending/loadout/overwear, /obj/machinery/camera/network/civilian, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "FS" = ( /obj/structure/cable/green{ @@ -14630,15 +14651,6 @@ }, /turf/simulated/floor/tiled/eris/cafe, /area/crew_quarters/kitchen) -"GC" = ( -/obj/machinery/computer/atmos_alert{ - dir = 1 - }, -/obj/machinery/camera/network/engineering{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/engineering/atmos/monitoring) "GD" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/green, @@ -15262,7 +15274,7 @@ /area/engineering/storage) "HV" = ( /obj/machinery/washing_machine, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "HW" = ( /obj/machinery/door/firedoor/glass, @@ -18291,10 +18303,6 @@ }, /turf/simulated/floor/tiled/eris/cafe, /area/crew_quarters/kitchen) -"OB" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/turf/simulated/floor/tiled/eris/dark/orangecorner, -/area/engineering/locker_room) "OC" = ( /obj/structure/closet/crate/bin{ anchored = 1 @@ -21564,7 +21572,7 @@ dir = 8 }, /obj/machinery/vending/loadout/gadget, -/turf/simulated/floor/holofloor/tiled/dark, +/turf/simulated/floor/tiled/dark, /area/crew_quarters/locker) "VV" = ( /obj/structure/cable/orange{ @@ -29887,7 +29895,7 @@ NK eq sz to -GC +dT Ag Fl sp @@ -30183,7 +30191,7 @@ UY OK pO Qu -ro +fj Sz ZG Jh @@ -30325,7 +30333,7 @@ pY DE sT WM -ro +fq Sz QW Jh @@ -35561,7 +35569,7 @@ Re OI da iw -pF +dW To To Vo @@ -35705,7 +35713,7 @@ Kv dS vb Nm -OB +eo OF Oq rf diff --git a/maps/stellar_delight/stellar_delight3.dmm b/maps/stellar_delight/stellar_delight3.dmm index ab630a0974..96c4712459 100644 --- a/maps/stellar_delight/stellar_delight3.dmm +++ b/maps/stellar_delight/stellar_delight3.dmm @@ -11701,7 +11701,7 @@ layer = 3.1; name = "HoP's Shutters" }, -/obj/structure/low_wall/bay/reinforced/blue, +/obj/structure/table/reinforced, /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) "PL" = ( diff --git a/maps/stellar_delight/stellar_delight_areas.dm b/maps/stellar_delight/stellar_delight_areas.dm index 7d8e9a5326..a720cb6060 100644 --- a/maps/stellar_delight/stellar_delight_areas.dm +++ b/maps/stellar_delight/stellar_delight_areas.dm @@ -130,6 +130,7 @@ limit_mob_size = FALSE block_suit_sensors = TRUE forbid_events = TRUE + forbid_singulo = TRUE /area/stellardelight/deck1/dorms/dorm1 name = "Dormitory One" @@ -273,9 +274,11 @@ /area/stellardelight/deck3/transitgateway name = "Transit Gateway" forbid_events = TRUE + forbid_singulo = TRUE /area/stellardelight/deck3/cryo name = "Cryogenic Storage" forbid_events = TRUE + forbid_singulo = TRUE /area/stellardelight/deck3/readingroom name = "Reading Rooms" diff --git a/maps/stellar_delight/stellar_delight_defines.dm b/maps/stellar_delight/stellar_delight_defines.dm index 0405b9f199..36553996ec 100644 --- a/maps/stellar_delight/stellar_delight_defines.dm +++ b/maps/stellar_delight/stellar_delight_defines.dm @@ -339,7 +339,7 @@ . = ..() seed_submaps(list(Z_LEVEL_SPACE_ROCKS), 60, /area/sdmine/unexplored, /datum/map_template/space_rocks) new /datum/random_map/automata/cave_system/no_cracks(null, 3, 3, Z_LEVEL_SPACE_ROCKS, world.maxx - 4, world.maxy - 4) - new /datum/random_map/noise/ore/spacerocks(null, 1, 1, Z_LEVEL_SPACE_ROCKS, 64, 64) + new /datum/random_map/noise/ore(null, 1, 1, Z_LEVEL_SPACE_ROCKS, 64, 64) /datum/map_z_level/ship_lateload/space_rocks z = Z_LEVEL_SPACE_ROCKS diff --git a/maps/stellar_delight/stellar_delight_things.dm b/maps/stellar_delight/stellar_delight_things.dm index 7175333ea0..2cdc2a0382 100644 --- a/maps/stellar_delight/stellar_delight_things.dm +++ b/maps/stellar_delight/stellar_delight_things.dm @@ -152,7 +152,7 @@ layer = ABOVE_WINDOW_LAYER /obj/machinery/vending/wallmed2 layer = ABOVE_WINDOW_LAYER -/obj/structure/closet/fireaxecabinet +/obj/structure/fireaxecabinet layer = ABOVE_WINDOW_LAYER /obj/structure/extinguisher_cabinet layer = ABOVE_WINDOW_LAYER @@ -175,3 +175,6 @@ /obj/machinery/power/quantumpad/scioutpost +/datum/random_map/noise/ore/virgo2 // Less OP generation map, but better than Underdark + deep_val = 0.7 + rare_val = 0.5 \ No newline at end of file diff --git a/maps/stellar_delight/stellar_delight_turfs.dm b/maps/stellar_delight/stellar_delight_turfs.dm index 9e7927efe2..6e8e86fb33 100644 --- a/maps/stellar_delight/stellar_delight_turfs.dm +++ b/maps/stellar_delight/stellar_delight_turfs.dm @@ -45,3 +45,38 @@ VIRGO3B_TURF_CREATE(/turf/simulated/floor/outdoors/dirt) icon_state = "asteroid" VIRGO3B_TURF_CREATE(/turf/simulated/floor/outdoors/rocks) + +/turf/simulated/mineral/virgo2/make_ore(var/rare_ore) // Override V2 ore generation + if(mineral || ignore_mapgen) + return + var/mineral_name + if(rare_ore) + mineral_name = pickweight(list( + "marble" = 7, + "uranium" = 10, + "platinum" = 10, + "hematite" = 10, + "carbon" = 10, + "diamond" = 4, + "gold" = 15, + "silver" = 15, + "lead" = 5, + "verdantium" = 2, + "rutile" = 10)) + else + mineral_name = pickweight(list( + "marble" = 5, + "uranium" = 7, + "platinum" = 7, + "hematite" = 28, + "carbon" = 28, + "diamond" = 2, + "gold" = 7, + "silver" = 7, + "lead" = 4, + "verdantium" = 1, + "rutile" = 10)) + if(mineral_name && (mineral_name in GLOB.ore_data)) + mineral = GLOB.ore_data[mineral_name] + UpdateMineral() + update_icon() diff --git a/maps/submaps/space_rocks/space_rocks.dm b/maps/submaps/space_rocks/space_rocks.dm index 3951d51171..62437676d5 100644 --- a/maps/submaps/space_rocks/space_rocks.dm +++ b/maps/submaps/space_rocks/space_rocks.dm @@ -11,7 +11,7 @@ "uranium" = 10, "platinum" = 10, "hematite" = 20, - "carbon" = 5, + "carbon" = 20, "diamond" = 1, "gold" = 8, "silver" = 8, @@ -24,7 +24,7 @@ "uranium" = 5, "platinum" = 5, "hematite" = 35, - "carbon" = 5, + "carbon" = 35, "gold" = 3, "silver" = 3, "phoron" = 25, @@ -35,15 +35,7 @@ UpdateMineral() update_icon() -/datum/random_map/noise/ore/spacerocks - descriptor = "asteroid field ore distribution map" - deep_val = 0.2 - rare_val = 0.1 - -/datum/random_map/noise/ore/spacerocks/check_map_sanity() - return 1 //Totally random, but probably beneficial. - -/area/sdmine/ +/area/sdmine ambience = list('sound/ambience/ambimine.ogg', 'sound/ambience/song_game.ogg') base_turf = /turf/simulated/mineral/floor/vacuum /area/sdmine/unexplored diff --git a/maps/submaps/surface_submaps/plains/Thiefc.dmm b/maps/submaps/surface_submaps/plains/Thiefc.dmm index d83aa9631f..a19b8e603e 100644 --- a/maps/submaps/surface_submaps/plains/Thiefc.dmm +++ b/maps/submaps/surface_submaps/plains/Thiefc.dmm @@ -13,7 +13,7 @@ "m" = (/obj/structure/table/steel,/obj/item/weapon/paper{desc = "This is some bullshit. First chance we got to knick something that looks half decent turns out to be mostly junk. And now we're getting calls that the other stash we've got has got a spider problem. Fuck this, Between the shitty weather, The pissed of bugs, And now apparently some NT goon running around in the area there's hardly enough reason to stick around. I'm telling Carl I'm out tommorow."; name = "Note"},/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) "n" = (/obj/vehicle/train/trolley,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) "o" = (/obj/structure/closet/crate,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) -"p" = (/obj/structure/closet/crate,/obj/item/ammo_magazine/ammo_box/b12g,/obj/item/weapon/storage/box/practiceshells,/obj/random/projectile/scrapped_gun,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) +"p" = (/obj/structure/closet/crate,/obj/item/ammo_magazine/ammo_box/b12g,/obj/item/ammo_magazine/ammo_box/b12g/practice,/obj/random/projectile/scrapped_gun,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Thiefc) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/submaps/surface_submaps/plains/Thiefc_vr.dmm b/maps/submaps/surface_submaps/plains/Thiefc_vr.dmm index 599d352155..5528c6029c 100644 --- a/maps/submaps/surface_submaps/plains/Thiefc_vr.dmm +++ b/maps/submaps/surface_submaps/plains/Thiefc_vr.dmm @@ -119,7 +119,7 @@ /area/submap/Thiefc) "p" = ( /obj/structure/closet/crate, -/obj/item/weapon/storage/box/practiceshells, +/obj/item/ammo_magazine/ammo_box/b12g/practice, /turf/simulated/floor/outdoors/dirt/virgo3b{ outdoors = 0 }, diff --git a/maps/tether/submaps/_tether_submaps.dm b/maps/tether/submaps/_tether_submaps.dm index 20d42087c0..899241c829 100644 --- a/maps/tether/submaps/_tether_submaps.dm +++ b/maps/tether/submaps/_tether_submaps.dm @@ -50,7 +50,7 @@ . = ..() seed_submaps(list(Z_LEVEL_UNDERDARK), 100, /area/mine/unexplored/underdark, /datum/map_template/underdark) new /datum/random_map/automata/cave_system/no_cracks(null, 3, 3, Z_LEVEL_UNDERDARK, world.maxx - 4, world.maxy - 4) // Create the mining Z-level. - new /datum/random_map/noise/ore(null, 1, 1, Z_LEVEL_UNDERDARK, 64, 64) // Create the mining ore distribution map. + new /datum/random_map/noise/ore/underdark(null, 1, 1, Z_LEVEL_UNDERDARK, 64, 64) // Create the mining ore distribution map. #include "../../submaps/surface_submaps/plains/plains_vr.dm" #include "../../submaps/surface_submaps/plains/plains_areas.dm" diff --git a/maps/tether/submaps/tether_centcom.dmm b/maps/tether/submaps/tether_centcom.dmm index aec901cfe7..736d80200d 100644 --- a/maps/tether/submaps/tether_centcom.dmm +++ b/maps/tether/submaps/tether_centcom.dmm @@ -456,6 +456,20 @@ /obj/machinery/status_display/supply_display, /turf/simulated/wall/r_wall, /area/centcom) +"bn" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = null + }, +/obj/effect/map_helper/airlock/atmos/pump_out_internal, +/obj/machinery/embedded_controller/radio/airlock/docking_port{ + frequency = 1380; + id_tag = "ccboat"; + pixel_y = 29 + }, +/turf/simulated/floor/plating, +/area/shuttle/ccboat) "bo" = ( /obj/structure/sign/department/bar, /turf/simulated/wall/r_wall, @@ -500,6 +514,25 @@ /obj/structure/sign/warning/nosmoking_2, /turf/simulated/wall/r_wall, /area/centcom/terminal) +"by" = ( +/obj/machinery/airlock_sensor{ + dir = 8; + frequency = 1380; + id_tag = null; + pixel_x = 24 + }, +/obj/effect/map_helper/airlock/sensor/chamber_sensor, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 1; + frequency = 1380; + id_tag = null + }, +/obj/effect/map_helper/airlock/atmos/pump_out_internal, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/shuttle/ccboat) "bz" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'HIGH VOLTAGE'"; @@ -524,6 +557,24 @@ }, /turf/simulated/shuttle/floor, /area/shuttle/supply) +"bC" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = null + }, +/obj/effect/map_helper/airlock/atmos/chamber_pump, +/obj/effect/shuttle_landmark/shuttle_initializer/ccboat, +/obj/effect/overmap/visitable/ship/landable/ccboat, +/turf/simulated/floor/plating, +/area/shuttle/ccboat) +"bD" = ( +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + frequency = 1380; + id_tag = null + }, +/obj/effect/map_helper/airlock/atmos/chamber_pump, +/turf/simulated/floor/plating, +/area/shuttle/ccboat) "bE" = ( /obj/effect/floor_decal/fancy_shuttle{ fancy_shuttle_tag = "tram" @@ -538,6 +589,41 @@ /area/shuttle/escape{ base_turf = /turf/simulated/floor/tiled/techfloor/grid }) +"bF" = ( +/obj/machinery/door/firedoor/glass, +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/blast/angled/open{ + id = "ccshuttleshutter" + }, +/turf/simulated/floor/plating, +/area/shuttle/ccboat) +"bG" = ( +/obj/machinery/door/firedoor/glass, +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/door/blast/angled/open{ + dir = 4; + id = "ccshuttleshutter" + }, +/turf/simulated/floor/plating, +/area/shuttle/ccboat) +"bH" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/shuttle/ccboat) "bJ" = ( /obj/structure/table/rack, /obj/item/weapon/storage/box/pillbottles, @@ -1031,12 +1117,6 @@ icon_state = "dark" }, /area/centcom/specops) -"df" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/shuttle/ccboat) "dh" = ( /turf/simulated/floor/tiled/white, /area/centcom/bar) @@ -1895,20 +1975,10 @@ /obj/machinery/vending/cigarette{ name = "hacked cigarette machine"; prices = list(); - products = list(/obj/item/weapon/storage/fancy/cigarettes=10,/obj/item/weapon/storage/box/matches=10,/obj/item/weapon/flame/lighter/zippo=4,/obj/item/clothing/mask/smokable/cigarette/cigar/havana=2) + products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) }, /turf/simulated/floor/wood, /area/centcom/specops) -"gh" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = null - }, -/obj/effect/map_helper/airlock/atmos/chamber_pump, -/obj/effect/shuttle_landmark/shuttle_initializer/ccboat, -/obj/effect/overmap/visitable/ship/landable/ccboat, -/turf/simulated/floor/airless, -/area/shuttle/ccboat) "gj" = ( /obj/machinery/vending/cola{ name = "hacked Robust Softdrinks"; @@ -2092,25 +2162,6 @@ /area/centcom/security{ name = "\improper CentCom Residential Security" }) -"gN" = ( -/obj/machinery/airlock_sensor{ - dir = 8; - frequency = 1380; - id_tag = null; - pixel_x = 24 - }, -/obj/effect/map_helper/airlock/sensor/chamber_sensor, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = null - }, -/obj/effect/map_helper/airlock/atmos/pump_out_internal, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/airless, -/area/shuttle/ccboat) "gP" = ( /obj/structure/table/rack, /obj/item/clothing/under/color/green, @@ -3782,22 +3833,6 @@ /obj/item/weapon/melee/energy/sword/red, /turf/unsimulated/floor/techfloor_grid, /area/tdome/tdome1) -"mS" = ( -/obj/machinery/door/firedoor/glass, -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/door/blast/angled/open{ - dir = 4; - id = "ccshuttleshutter" - }, -/turf/simulated/floor, -/area/shuttle/ccboat) "mT" = ( /obj/machinery/camera/network/crescent, /obj/structure/table/reinforced, @@ -5479,19 +5514,6 @@ }, /turf/unsimulated/floor/techfloor_grid, /area/tdome/tdome1) -"vY" = ( -/obj/machinery/door/firedoor/glass, -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/blast/angled/open{ - id = "ccshuttleshutter" - }, -/turf/simulated/floor, -/area/shuttle/ccboat) "vZ" = ( /obj/structure/table/reinforced, /obj/effect/floor_decal/borderfloorblack{ @@ -5617,14 +5639,6 @@ }, /turf/simulated/floor/tiled, /area/centcom/control) -"ww" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - frequency = 1380; - id_tag = null - }, -/obj/effect/map_helper/airlock/atmos/chamber_pump, -/turf/simulated/floor/airless, -/area/shuttle/ccboat) "wx" = ( /obj/structure/bed/chair/shuttle{ dir = 1 @@ -6632,20 +6646,6 @@ "Cj" = ( /turf/simulated/shuttle/floor, /area/shuttle/supply) -"Cl" = ( -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 1; - frequency = 1380; - id_tag = null - }, -/obj/effect/map_helper/airlock/atmos/pump_out_internal, -/obj/machinery/embedded_controller/radio/airlock/docking_port{ - frequency = 1380; - id_tag = "ccboat"; - pixel_y = 29 - }, -/turf/simulated/floor/airless, -/area/shuttle/ccboat) "Cn" = ( /turf/unsimulated/wall, /area/centcom/main_hall) @@ -25757,7 +25757,7 @@ gn mY zN uf -mS +bG uf sX sX @@ -25893,11 +25893,11 @@ sX WO uf uf -mS -mS +bG +bG go -Cl -gh +bn +bC gn wr uf @@ -26032,14 +26032,14 @@ nJ px uf uf -mS +bG uf vq bP Bn go -gN -ww +by +bD xJ wm HU @@ -26172,7 +26172,7 @@ ZQ ac nJ px -vY +bF Bc DW uf @@ -26314,7 +26314,7 @@ ZQ ac nJ px -vY +bF LB cX qL @@ -26328,7 +26328,7 @@ uf vi YD cY -df +bH pR nJ ac @@ -26456,7 +26456,7 @@ ZQ ac nJ px -vY +bF Ti nA sp @@ -26598,7 +26598,7 @@ ZQ ac nJ px -vY +bF UE CK jK @@ -26612,7 +26612,7 @@ uf fG YD cY -df +bH pR nJ ac @@ -26740,7 +26740,7 @@ ZQ ac nJ px -vY +bF VJ vG uf @@ -26884,7 +26884,7 @@ nJ px uf uf -mS +bG uf vq bP @@ -27029,8 +27029,8 @@ sX sX uf uf -mS -mS +bG +bG pw tT tT @@ -27177,7 +27177,7 @@ UC uf uf uf -mS +bG uf sX sX diff --git a/maps/tether/submaps/tether_underdark.dmm b/maps/tether/submaps/tether_underdark.dmm index e81b9daf60..3f9cab4abb 100644 --- a/maps/tether/submaps/tether_underdark.dmm +++ b/maps/tether/submaps/tether_underdark.dmm @@ -1,5 +1,129 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( +"aa" = ( +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"ab" = ( +/turf/simulated/mineral/floor/virgo3b, +/area/mine/explored/underdark) +"ac" = ( +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"ad" = ( +/obj/effect/decal/remains/deer, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"ae" = ( +/turf/unsimulated/mineral/virgo3b, +/area/mine/explored/underdark) +"af" = ( +/turf/simulated/mineral/virgo3b/rich, +/area/mine/unexplored/underdark) +"ag" = ( +/turf/simulated/mineral/virgo3b/rich, +/area/mine/explored/underdark) +"ah" = ( +/turf/simulated/wall/r_wall, +/area/mine/explored/underdark) +"ai" = ( +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/floor/outdoors/dirt/virgo3b, +/area/mine/explored/underdark) +"aj" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"ak" = ( +/obj/structure/cable/green{ + icon_state = "4-10" + }, +/obj/machinery/light/small{ + icon_state = "bulb1"; + dir = 1 + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"al" = ( +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/turf/simulated/floor/outdoors/dirt/virgo3b, +/area/mine/explored/underdark) +"am" = ( +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/turf/simulated/floor/outdoors/dirt/virgo3b, +/area/mine/explored/underdark) +"an" = ( +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"ao" = ( +/turf/simulated/floor/outdoors/dirt/virgo3b, +/area/mine/explored/underdark) +"ap" = ( +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/turf/simulated/floor/outdoors/dirt/virgo3b, +/area/mine/explored/underdark) +"aq" = ( +/obj/structure/cable/green{ + icon_state = "5-8" + }, +/turf/simulated/floor/outdoors/dirt/virgo3b, +/area/mine/explored/underdark) +"ar" = ( +/obj/structure/cable/green{ + icon_state = "1-5" + }, +/turf/simulated/floor/outdoors/dirt/virgo3b, +/area/mine/explored/underdark) +"as" = ( +/turf/simulated/floor/tiled/steel_dirty/virgo3b, +/area/mine/explored/underdark) +"at" = ( +/obj/effect/step_trigger/teleporter/from_underdark{ + dir = 4; + pixel_x = -16 + }, +/turf/simulated/floor/tiled/steel_dirty/virgo3b, +/area/mine/explored/underdark) +"au" = ( +/obj/item/weapon/newspaper{ + pixel_x = 4 + }, +/turf/simulated/floor/tiled/steel_dirty/virgo3b, +/area/mine/explored/underdark) +"av" = ( +/obj/structure/cable/green{ + icon_state = "4-10" + }, +/turf/simulated/floor/outdoors/dirt/virgo3b, +/area/mine/explored/underdark) +"aw" = ( /obj/structure/cable/green{ icon_state = "0-10" }, @@ -10,20101 +134,20083 @@ pixel_y = 24; alarms_hidden = 1 }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"b" = ( -/turf/simulated/mineral/floor/virgo3b, -/area/mine/explored/underdark) -"c" = ( /turf/simulated/mineral/floor/virgo3b{ ignore_mapgen = 1 }, /area/mine/explored/underdark) -"d" = ( -/obj/effect/decal/remains/deer, +"ax" = ( +/obj/effect/decal/remains/mouse, /turf/simulated/mineral/floor/virgo3b{ ignore_mapgen = 1 }, /area/mine/explored/underdark) -"e" = ( -/turf/unsimulated/mineral/virgo3b, -/area/mine/explored/underdark) -"f" = ( -/turf/simulated/mineral/virgo3b/rich, -/area/mine/unexplored/underdark) -"g" = ( -/turf/simulated/mineral/virgo3b/rich, -/area/mine/explored/underdark) -"h" = ( -/turf/simulated/wall/r_wall, -/area/mine/explored/underdark) -"i" = ( -/obj/structure/cable/green{ - icon_state = "2-4" - }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"j" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/green{ - icon_state = "0-8" - }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"k" = ( -/obj/structure/cable/green{ - icon_state = "4-10" - }, -/obj/machinery/light/small{ - icon_state = "bulb1"; - dir = 1 - }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"l" = ( -/obj/structure/cable/green{ - icon_state = "2-8" - }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"n" = ( -/obj/structure/railing, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"o" = ( -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"p" = ( -/obj/structure/cable/green{ - icon_state = "1-4" - }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"q" = ( -/obj/structure/cable/green{ - icon_state = "5-8" - }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"r" = ( -/obj/structure/cable/green{ - icon_state = "1-5" - }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"s" = ( -/turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/mine/explored/underdark) -"t" = ( -/obj/effect/step_trigger/teleporter/from_underdark{ - dir = 4; - pixel_x = -16 - }, -/turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/mine/explored/underdark) -"u" = ( -/obj/item/weapon/newspaper{ - pixel_x = 4 - }, -/turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/mine/explored/underdark) -"v" = ( -/obj/machinery/light/small{ - icon_state = "bulb1"; - dir = 4 - }, -/obj/structure/railing{ - icon_state = "railing0"; - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"w" = ( -/obj/structure/railing{ - icon_state = "railing0"; - dir = 8 - }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"x" = ( -/obj/structure/railing{ - icon_state = "railing0"; - dir = 1 - }, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"y" = ( +"ay" = ( /turf/simulated/wall/iron, /area/mine/explored/underdark) -"z" = ( +"az" = ( /obj/structure/ore_box, /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/mine/explored/underdark) -"B" = ( -/obj/machinery/light/small{ - icon_state = "bulb1"; - dir = 8 +"aA" = ( +/obj/structure/cable/green{ + icon_state = "0-10" }, /turf/simulated/floor/outdoors/dirt/virgo3b, /area/mine/explored/underdark) -"C" = ( +"aB" = ( +/obj/structure/cable/green{ + icon_state = "1-4" + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"aC" = ( /obj/machinery/door/airlock/maintenance/cargo, /turf/simulated/floor/virgo3b, /area/mine/explored/underdark) -"D" = ( +"aD" = ( /obj/machinery/light/small{ icon_state = "bulb1"; dir = 4 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/mine/explored/underdark) -"E" = ( +"aE" = ( /obj/item/weapon/tool/wrench, /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/mine/explored/underdark) -"F" = ( +"aF" = ( /obj/structure/frame, /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/mine/explored/underdark) -"G" = ( -/obj/machinery/door/airlock/multi_tile/metal/mait{ - dir = 2 +"aG" = ( +/turf/simulated/floor/virgo3b, +/area/mine/explored/underdark) +"aH" = ( +/obj/structure/girder, +/turf/simulated/floor/virgo3b, +/area/mine/explored/underdark) +"aI" = ( +/obj/structure/cable/green{ + icon_state = "5-8" }, -/turf/simulated/floor/tiled/steel_dirty/virgo3b, -/area/mine/explored/underdark) -"H" = ( -/obj/machinery/light/small{ - icon_state = "bulb1"; - dir = 4 +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 }, -/turf/simulated/mineral/floor/virgo3b, /area/mine/explored/underdark) -"I" = ( -/obj/machinery/light/small, -/turf/simulated/floor/outdoors/dirt/virgo3b, -/area/mine/explored/underdark) -"J" = ( +"aJ" = ( /turf/simulated/mineral/floor/virgo3b, /area/mine/unexplored/underdark) -"K" = ( +"aK" = ( /obj/structure/sign/graffiti/pisoff{ pixel_x = 5; pixel_y = 3 }, /turf/simulated/wall/r_wall, /area/mine/explored/underdark) -"L" = ( +"aL" = ( /obj/structure/sign/hostilefauna, /turf/simulated/wall/r_wall, /area/mine/explored/underdark) -"N" = ( +"aM" = ( +/obj/structure/ore_box, +/turf/simulated/floor/virgo3b, +/area/mine/explored/underdark) +"aN" = ( /obj/effect/decal/remains/posi, /turf/simulated/floor/outdoors/dirt/virgo3b, /area/mine/explored/underdark) -"R" = ( +"aO" = ( +/obj/item/weapon/tool/wrench, +/turf/simulated/floor/virgo3b, +/area/mine/explored/underdark) +"aP" = ( +/obj/structure/frame, +/turf/simulated/floor/virgo3b, +/area/mine/explored/underdark) +"aQ" = ( +/obj/machinery/door/airlock/multi_tile/metal/mait{ + dir = 2 + }, +/turf/simulated/floor/tiled/steel_dirty/virgo3b, +/area/mine/explored/underdark) +"aR" = ( /obj/item/weapon/bone, /turf/simulated/floor/outdoors/dirt/virgo3b, /area/mine/explored/underdark) -"S" = ( +"aS" = ( /obj/item/weapon/bone, /turf/simulated/mineral/floor/virgo3b{ ignore_mapgen = 1 }, /area/mine/explored/underdark) -"T" = ( +"aT" = ( /obj/effect/decal/remains/mouse, /turf/simulated/floor/outdoors/dirt/virgo3b, /area/mine/explored/underdark) -"W" = ( +"aU" = ( +/obj/structure/cable/green{ + icon_state = "1-5" + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"aV" = ( +/obj/machinery/light/small{ + icon_state = "bulb1"; + dir = 8 + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"aW" = ( /obj/item/weapon/bone/skull, /turf/simulated/mineral/floor/virgo3b{ ignore_mapgen = 1 }, /area/mine/explored/underdark) -"Z" = ( +"aX" = ( +/obj/machinery/light/small{ + icon_state = "bulb1"; + dir = 4 + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"aY" = ( +/obj/item/weapon/bone, +/obj/machinery/light/small{ + icon_state = "bulb1"; + dir = 4 + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"aZ" = ( /obj/effect/decal/remains/ribcage, /turf/simulated/mineral/floor/virgo3b{ ignore_mapgen = 1 }, /area/mine/explored/underdark) +"ba" = ( +/obj/structure/railing, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"bb" = ( +/obj/effect/decal/remains/posi, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"bc" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 8 + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"bd" = ( +/obj/machinery/light/small, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) +"be" = ( +/obj/structure/railing{ + icon_state = "railing0"; + dir = 1 + }, +/turf/simulated/mineral/floor/virgo3b{ + ignore_mapgen = 1 + }, +/area/mine/explored/underdark) (1,1,1) = {" -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae "} (2,1,1) = {" -e -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -e +ae +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ae "} (3,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (4,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (5,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (6,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (7,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (8,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (9,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (10,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (11,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (12,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (13,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (14,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (15,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (16,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (17,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (18,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (19,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (20,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (21,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (22,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (23,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (24,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (25,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (26,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (27,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (28,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (29,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (30,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (31,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (32,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (33,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (34,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (35,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (36,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (37,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (38,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (39,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (40,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (41,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (42,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (43,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (44,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (45,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (46,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (47,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (48,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -c -c -c -J -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +aJ +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (49,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (50,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (51,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (52,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (53,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (54,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (55,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (56,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (57,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (58,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (59,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (60,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (61,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -f -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (62,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (63,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (64,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (65,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (66,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (67,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (68,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -h -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ah +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (69,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (70,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (71,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (72,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (73,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (74,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (75,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (76,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (77,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -h -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ah +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (78,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (79,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (80,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -f -c -c -c -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +af +ac +ac +ac +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (81,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (82,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (83,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (84,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -h -c -c -c -f -f -f -f -f -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ah +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (85,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (86,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (87,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (88,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (89,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (90,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -h -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ah +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (91,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (92,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (93,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (94,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -h -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ah +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (95,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (96,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (97,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -f -f -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +af +af +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (98,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -f -f -f -f -f -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (99,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (100,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -f -f -f -f -f -f -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +af +af +af +af +af +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (101,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -f -f -f -f -f -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (102,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (103,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -f -f -f -c -c -c -h -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +ac +ac +ac +ah +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (104,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -f -f -f -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (105,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -f -f -f -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (106,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -f -f -f -c -c -c -c -c -f -f -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +ac +ac +ac +ac +ac +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (107,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -f -f -f -c -c -c -c -c -f -f -f -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +af +af +af +ac +ac +ac +ac +ac +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (108,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -h -c -c -c -f -f -f -f -f -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ah +ac +ac +ac +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (109,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (110,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (111,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -f -c -c -c -f -f -f -f -f -f -f -f -f -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (112,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (113,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -g -g -g -g -c -c -h -W -f -f -f -f -f -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ag +ag +ag +ac +ac +ah +aW +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (114,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -g -g -g -g -c -c -c -c -c -c -f -f -f -c -c -h -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ag +ag +ag +ac +ac +ac +ac +ac +ac +af +af +af +ac +ac +ah +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (115,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -g -g -g -g -g -g -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ag +ag +ag +ag +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (116,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -g -g -g -g -g -c -S -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ag +ag +ag +ac +aS +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (117,1,1) = {" -e -g -f -f -f -f -f -f -f -f -f -f -f -g -g -g -c -c -c -K -c -c -c -c -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ag +ac +ac +ac +aK +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (118,1,1) = {" -e -g -g -g -g -g -g -g -g -g -g -g -g -g -c -c -c -c -c -c -c -b -c -c -c -h -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ac +ac +ac +ac +ac +ac +ac +ab +ac +ac +ac +ah +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (119,1,1) = {" -e -g -g -g -g -g -g -g -g -g -g -g -g -g -Z -c -c -c -c -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +aZ +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (120,1,1) = {" -e -g -g -g -g -g -g -g -g -g -g -g -g -g -c -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ac +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +ag +ae "} (121,1,1) = {" -e -g -g -g -g -g -g -g -g -g -g -g -g -c -c -c -c -c -c -c -c -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ac +ac +ac +ac +ac +ac +ac +ac +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ag +ag +ag +ac +ac +ac +ac +ac +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ae "} (122,1,1) = {" -e -g -g -g -g -g -g -g -g -g -g -g -g -c -s -s -H -d -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ac +aG +as +ab +ad +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ag +ag +ag +ag +ac +as +as +aX +ac +ag +ag +ag +ag +ag +ag +ag +ag +ag +ae "} (123,1,1) = {" -e -g -g -g -g -g -h -h -h -h -h -h -h -h -s -G -L -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +ah +ah +ah +ah +ah +ah +ah +as +aG +aL +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +ah +ah +ah +ah +as +aQ +aL +ah +ah +ah +ah +ah +ag +ag +ag +ag +ag +ae "} (124,1,1) = {" -e -g -g -g -g -g -h -g -g -g -g -T -o -B -o -o -o -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +ag +ag +ag +ag +aT +ao +ao +ao +ao +ao +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +ag +ax +ac +aV +ac +ac +ac +ac +ag +ag +ag +ah +ag +ag +ag +ag +ag +ae "} (125,1,1) = {" -e -g -g -g -g -g -h -g -g -g -o -R -o -o -o -o -o -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +ag +ag +ag +ao +aR +ao +ao +ao +ao +ao +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +ac +aS +ac +ac +ac +ac +ac +ac +ac +ag +ag +ah +ag +ag +ag +ag +ag +ae "} (126,1,1) = {" -e -g -g -g -g -g -h -g -N -o -o -o -o -o -o -o -o -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +ag +aN +ao +ao +ao +ao +ao +ao +ao +ao +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +aa +aB +ac +ac +ac +ac +ac +ac +bb +ac +ag +ah +ag +ag +ag +ag +ag +ae "} (127,1,1) = {" -e -g -g -g -g -g -h -i -p -o -o -o -o -o -o -s -o -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +ai +ap +ao +ao +ao +ao +ao +ao +aG +ao +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +aj +aI +ac +ac +ac +as +ac +ac +ac +ac +ag +ah +ag +ag +ag +ag +ag +ae "} (128,1,1) = {" -e -g -g -g -g -g -h -j -q -o -o -o -o -o -o -o -o -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +am +aq +ao +ao +ao +ao +ao +ao +ao +ao +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +ak +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ah +ag +ag +ag +ag +ag +ae "} (129,1,1) = {" -e -g -g -g -g -g -h -k -o -o -o -o -o -s -o -o -I -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +av +ao +ao +ao +ao +ao +as +ao +ao +ao +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +an +aU +ac +as +ac +ac +ac +ac +ac +ac +bd +ah +ag +ag +ag +ag +ag +ae "} (130,1,1) = {" -e -g -g -g -g -g -h -l -r -o -o -y -y -C -y -y -o -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +al +ar +ao +ao +ay +ay +aG +ay +ay +ao +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +aw +ay +ay +aC +ay +ay +ac +ac +ac +ac +ac +ah +ag +ag +ag +ag +ag +ae "} (131,1,1) = {" -e -g -g -g -g -g -h -a -s -s -o -y -s -s -E -y -o -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +aA +aG +aG +ao +aH +as +aG +aO +aH +ao +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +ac +ay +as +as +aE +ay +ac +ac +as +as +ac +ah +ag +ag +ag +ag +ag +ae "} (132,1,1) = {" -e -g -g -g -g -g -h -n -t -t -x -y -z -D -F -y -o -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +ao +aG +aG +ao +ay +aM +aG +aP +aH +ao +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +ac +ay +az +aD +aF +ay +ac +ba +at +at +be +ah +ag +ag +ag +ag +ag +ae "} (133,1,1) = {" -e -g -g -g -g -g -h -n -u -s -x -y -y -y -y -y -o -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +ao +aG +aG +ao +ay +aH +ay +ay +ay +ao +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +ac +ay +ay +ay +ay +ay +ac +ba +au +as +be +ah +ag +ag +ag +ag +ag +ae "} (134,1,1) = {" -e -g -g -g -g -g -h -o -v -w -o -o -o -o -o -o -R -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +ao +ao +ao +ao +ao +ao +ao +ao +ao +aR +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +ac +ac +ac +ac +ac +ac +aY +ac +bc +bc +ac +ah +ag +ag +ag +ag +ag +ae "} (135,1,1) = {" -e -g -g -g -g -g -h -h -h -h -h -h -h -h -h -h -h -h -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ah +ag +ag +ag +ag +ag +ae "} (136,1,1) = {" -e -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ae "} (137,1,1) = {" -e -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ae "} (138,1,1) = {" -e -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -f -g -e +ae +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ae "} (139,1,1) = {" -e -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -g -e +ae +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ag +ae "} (140,1,1) = {" -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e -e +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae "} diff --git a/maps/tether/submaps/underdark_pois/underdark_things.dm b/maps/tether/submaps/underdark_pois/underdark_things.dm index 22dd2e4e5e..c53b37c8a6 100644 --- a/maps/tether/submaps/underdark_pois/underdark_things.dm +++ b/maps/tether/submaps/underdark_pois/underdark_things.dm @@ -1,3 +1,8 @@ +/datum/random_map/noise/ore/underdark + descriptor = "Underdark ore distribution map" + deep_val = 0.7 + rare_val = 0.5 + // Weakened version of Phoron spiders /mob/living/simple_mob/animal/giant_spider/phorogenic/weak maxHealth = 100 diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index 432a231c7d..a9270e4a07 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -1990,7 +1990,7 @@ /obj/effect/floor_decal/spline/plain{ dir = 5 }, -/obj/structure/flora/pottedplant/stoutbush, +/obj/structure/closet/athletic_swimwear, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/pool) "acZ" = ( @@ -42489,6 +42489,13 @@ /obj/machinery/vending/fitness, /turf/simulated/floor/tiled, /area/tether/surfacebase/cafeteria) +"rwb" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/structure/flora/pottedplant/stoutbush, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/pool) "rxh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 10 @@ -52117,7 +52124,7 @@ fkn aWF aiJ akT -alE +rwb sSK amN amN diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index 38b069fc8a..2396932f10 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -35822,6 +35822,7 @@ /obj/effect/floor_decal/corner/green/border, /obj/machinery/light, /obj/machinery/portable_atmospherics/canister/oxygen, +/obj/item/weapon/storage/box/nifsofts_pilot, /turf/simulated/floor/tiled, /area/tether/exploration/pilot_office) "wEF" = ( diff --git a/maps/tether/tether-06-mining.dmm b/maps/tether/tether-06-mining.dmm index 7ca97d1565..0b2e5837bd 100644 --- a/maps/tether/tether-06-mining.dmm +++ b/maps/tether/tether-06-mining.dmm @@ -13815,7 +13815,7 @@ ab ab ab ab -ab +af ab ab ab @@ -14239,7 +14239,7 @@ ab ab ab ab -ab +af ab ab ab @@ -14666,7 +14666,7 @@ ab ab ab ab -ab +af ab ab ab @@ -14949,7 +14949,7 @@ ab ab ab ab -ab +af ab ab ab @@ -15516,7 +15516,7 @@ ab ab ab ab -ab +af ab ab ab @@ -15657,7 +15657,7 @@ ab ab ab ab -ab +af ab ab ab @@ -15942,7 +15942,7 @@ ab ab ab ab -ab +af ab ab ab @@ -16367,7 +16367,7 @@ ab ab ab ab -ab +af ab ab ab @@ -17079,7 +17079,7 @@ ab ab ab ab -ab +af ab ab ab @@ -17219,7 +17219,7 @@ ab ab ab ab -ab +af ab ab ab @@ -17363,7 +17363,7 @@ ab ab ab ab -ab +af ab ab ab @@ -17645,7 +17645,7 @@ ab ab ab ab -ab +af ab ab ab @@ -17790,7 +17790,7 @@ ab ab ab ab -ab +af ab ab ab @@ -18073,8 +18073,8 @@ ab ab ab ab -ab -ab +af +af ab ab ab @@ -18498,7 +18498,7 @@ ab ab ab ab -ab +af ab ab ab @@ -18926,7 +18926,7 @@ ab ab ab ab -ab +af ab ab ab @@ -19211,8 +19211,8 @@ ab ab ab ab -ab -ab +af +af ab ab ab @@ -19354,7 +19354,7 @@ ab ab ab ab -ab +af ab ab ab @@ -19497,7 +19497,7 @@ ab ab ab ab -ab +af ab ab ab @@ -19781,7 +19781,7 @@ ab ab ab ab -ab +af ab ab ab @@ -20065,7 +20065,7 @@ ab ab ab ab -ab +af ab ab ab @@ -20224,6 +20224,128 @@ ab ab ab ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab Nh Nh ab @@ -20233,128 +20355,6 @@ ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab aa "} (130,1,1) = {" @@ -20365,6 +20365,128 @@ ab ab ab ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab SW Cx Cx @@ -20375,128 +20497,6 @@ ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab aa "} (131,1,1) = {" @@ -20507,6 +20507,128 @@ ab ab ab ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab SW IY IY @@ -20517,128 +20639,6 @@ ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab aa "} (132,1,1) = {" @@ -20649,6 +20649,128 @@ ab ab ab ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab SW ab ab @@ -20659,128 +20781,6 @@ ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab aa "} (133,1,1) = {" @@ -20932,6 +20932,128 @@ ab ab ab ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab QI ab ab @@ -20943,128 +21065,6 @@ ab ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab aa "} (135,1,1) = {" diff --git a/maps/tether/tether_shuttles.dm b/maps/tether/tether_shuttles.dm index 27caa00596..ea8d600caa 100644 --- a/maps/tether/tether_shuttles.dm +++ b/maps/tether/tether_shuttles.dm @@ -101,18 +101,18 @@ #define MOVE_PER(x) move_time*(x/100) SECONDS - computer.visible_message("[bicon(computer)] Beginning flight and telemetry monitoring.") + computer.visible_message("\icon[computer][bicon(computer)] Beginning flight and telemetry monitoring.") sleep(MOVE_PER(5)) if(failures >= 1) - computer.visible_message("[bicon(computer)] Single engine failure, continuing flight.") + computer.visible_message("\icon[computer][bicon(computer)] Single engine failure, continuing flight.") sleep(MOVE_PER(10)) if(failures >= 2) - computer.visible_message("[bicon(computer)] Second engine failure, unable to complete flight.") + computer.visible_message("\icon[computer][bicon(computer)] Second engine failure, unable to complete flight.") playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(10)) - computer.visible_message("[bicon(computer)] Commencing RTLS abort mode.") + computer.visible_message("\icon[computer][bicon(computer)] Commencing RTLS abort mode.") sleep(MOVE_PER(20)) if(failures < 3) move(area_transition,origin) @@ -120,18 +120,18 @@ return 1 if(failures >= 3) - computer.visible_message("[bicon(computer)] Total engine failure, unable to complete abort mode.") + computer.visible_message("\icon[computer][bicon(computer)] Total engine failure, unable to complete abort mode.") playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) - computer.visible_message("[bicon(computer)] Distress signal broadcast.") + computer.visible_message("\icon[computer][bicon(computer)] Distress signal broadcast.") playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) - computer.visible_message("[bicon(computer)] Stall. Stall. Stall. Stall.") + computer.visible_message("\icon[computer][bicon(computer)] Stall. Stall. Stall. Stall.") playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) sleep(MOVE_PER(5)) - computer.visible_message("[bicon(computer)] Terrain! Pull up! Terrain! Pull up!") + computer.visible_message("\icon[computer][bicon(computer)] Terrain! Pull up! Terrain! Pull up!") playsound(computer,'sound/mecha/internaldmgalarm.ogg',100,0) playsound(computer,'sound/misc/bloblarm.ogg',100,0) sleep(MOVE_PER(10)) diff --git a/maps/tether/tether_things.dm b/maps/tether/tether_things.dm index ab3d00a8ee..476c9b6ed1 100644 --- a/maps/tether/tether_things.dm +++ b/maps/tether/tether_things.dm @@ -330,7 +330,7 @@ layer = ABOVE_WINDOW_LAYER /obj/machinery/vending/wallmed2 layer = ABOVE_WINDOW_LAYER -/obj/structure/closet/fireaxecabinet +/obj/structure/fireaxecabinet layer = ABOVE_WINDOW_LAYER /obj/structure/extinguisher_cabinet layer = ABOVE_WINDOW_LAYER diff --git a/sound/effects/mentorhelp.mp3 b/sound/effects/mentorhelp.mp3 new file mode 100644 index 0000000000..a72cec612a Binary files /dev/null and b/sound/effects/mentorhelp.mp3 differ diff --git a/sound/effects/pai_login.ogg b/sound/effects/pai_login.ogg new file mode 100644 index 0000000000..b3aa132905 Binary files /dev/null and b/sound/effects/pai_login.ogg differ diff --git a/sound/talksounds/a.ogg b/sound/talksounds/a.ogg new file mode 100644 index 0000000000..5c9920eaff Binary files /dev/null and b/sound/talksounds/a.ogg differ diff --git a/sound/talksounds/b.ogg b/sound/talksounds/b.ogg new file mode 100644 index 0000000000..294af704dc Binary files /dev/null and b/sound/talksounds/b.ogg differ diff --git a/sound/talksounds/c.ogg b/sound/talksounds/c.ogg new file mode 100644 index 0000000000..54d1dce5b4 Binary files /dev/null and b/sound/talksounds/c.ogg differ diff --git a/sound/talksounds/d.ogg b/sound/talksounds/d.ogg new file mode 100644 index 0000000000..e82bd21a8b Binary files /dev/null and b/sound/talksounds/d.ogg differ diff --git a/sound/talksounds/e.ogg b/sound/talksounds/e.ogg new file mode 100644 index 0000000000..2637136bbb Binary files /dev/null and b/sound/talksounds/e.ogg differ diff --git a/sound/talksounds/f.ogg b/sound/talksounds/f.ogg new file mode 100644 index 0000000000..2a30912e27 Binary files /dev/null and b/sound/talksounds/f.ogg differ diff --git a/sound/talksounds/g.ogg b/sound/talksounds/g.ogg new file mode 100644 index 0000000000..5f61e4b39d Binary files /dev/null and b/sound/talksounds/g.ogg differ diff --git a/sound/talksounds/goon/blub.ogg b/sound/talksounds/goon/blub.ogg new file mode 100644 index 0000000000..ee6de6ede4 Binary files /dev/null and b/sound/talksounds/goon/blub.ogg differ diff --git a/sound/talksounds/goon/blub_ask.ogg b/sound/talksounds/goon/blub_ask.ogg new file mode 100644 index 0000000000..193c3952b0 Binary files /dev/null and b/sound/talksounds/goon/blub_ask.ogg differ diff --git a/sound/talksounds/goon/blub_exclaim.ogg b/sound/talksounds/goon/blub_exclaim.ogg new file mode 100644 index 0000000000..b879fbd464 Binary files /dev/null and b/sound/talksounds/goon/blub_exclaim.ogg differ diff --git a/sound/talksounds/goon/bottalk_1.ogg b/sound/talksounds/goon/bottalk_1.ogg new file mode 100644 index 0000000000..b727224998 Binary files /dev/null and b/sound/talksounds/goon/bottalk_1.ogg differ diff --git a/sound/talksounds/goon/bottalk_2.ogg b/sound/talksounds/goon/bottalk_2.ogg new file mode 100644 index 0000000000..745b1a4edc Binary files /dev/null and b/sound/talksounds/goon/bottalk_2.ogg differ diff --git a/sound/talksounds/goon/bottalk_3.ogg b/sound/talksounds/goon/bottalk_3.ogg new file mode 100644 index 0000000000..e91f6bc156 Binary files /dev/null and b/sound/talksounds/goon/bottalk_3.ogg differ diff --git a/sound/talksounds/goon/bottalk_4.wav b/sound/talksounds/goon/bottalk_4.wav new file mode 100644 index 0000000000..130dfc3a8e Binary files /dev/null and b/sound/talksounds/goon/bottalk_4.wav differ diff --git a/sound/talksounds/goon/buwoo.ogg b/sound/talksounds/goon/buwoo.ogg new file mode 100644 index 0000000000..45bcbd50c6 Binary files /dev/null and b/sound/talksounds/goon/buwoo.ogg differ diff --git a/sound/talksounds/goon/buwoo_ask.ogg b/sound/talksounds/goon/buwoo_ask.ogg new file mode 100644 index 0000000000..d7011219b5 Binary files /dev/null and b/sound/talksounds/goon/buwoo_ask.ogg differ diff --git a/sound/talksounds/goon/buwoo_exclaim.ogg b/sound/talksounds/goon/buwoo_exclaim.ogg new file mode 100644 index 0000000000..935a802862 Binary files /dev/null and b/sound/talksounds/goon/buwoo_exclaim.ogg differ diff --git a/sound/talksounds/goon/cow.ogg b/sound/talksounds/goon/cow.ogg new file mode 100644 index 0000000000..db6c0a63ca Binary files /dev/null and b/sound/talksounds/goon/cow.ogg differ diff --git a/sound/talksounds/goon/cow_ask.ogg b/sound/talksounds/goon/cow_ask.ogg new file mode 100644 index 0000000000..aabd6f75c1 Binary files /dev/null and b/sound/talksounds/goon/cow_ask.ogg differ diff --git a/sound/talksounds/goon/cow_exclaim.ogg b/sound/talksounds/goon/cow_exclaim.ogg new file mode 100644 index 0000000000..dfac225463 Binary files /dev/null and b/sound/talksounds/goon/cow_exclaim.ogg differ diff --git a/sound/talksounds/goon/lizard.ogg b/sound/talksounds/goon/lizard.ogg new file mode 100644 index 0000000000..48638b0f23 Binary files /dev/null and b/sound/talksounds/goon/lizard.ogg differ diff --git a/sound/talksounds/goon/lizard_ask.ogg b/sound/talksounds/goon/lizard_ask.ogg new file mode 100644 index 0000000000..60cf84ff09 Binary files /dev/null and b/sound/talksounds/goon/lizard_ask.ogg differ diff --git a/sound/talksounds/goon/lizard_exclaim.ogg b/sound/talksounds/goon/lizard_exclaim.ogg new file mode 100644 index 0000000000..20d3c0b768 Binary files /dev/null and b/sound/talksounds/goon/lizard_exclaim.ogg differ diff --git a/sound/talksounds/goon/pug.ogg b/sound/talksounds/goon/pug.ogg new file mode 100644 index 0000000000..86d50225a5 Binary files /dev/null and b/sound/talksounds/goon/pug.ogg differ diff --git a/sound/talksounds/goon/pug_ask.ogg b/sound/talksounds/goon/pug_ask.ogg new file mode 100644 index 0000000000..4cdf1c8a5e Binary files /dev/null and b/sound/talksounds/goon/pug_ask.ogg differ diff --git a/sound/talksounds/goon/pug_exclaim.ogg b/sound/talksounds/goon/pug_exclaim.ogg new file mode 100644 index 0000000000..ed47bcf1c6 Binary files /dev/null and b/sound/talksounds/goon/pug_exclaim.ogg differ diff --git a/sound/talksounds/goon/pugg.ogg b/sound/talksounds/goon/pugg.ogg new file mode 100644 index 0000000000..90fa070e8b Binary files /dev/null and b/sound/talksounds/goon/pugg.ogg differ diff --git a/sound/talksounds/goon/pugg_ask.ogg b/sound/talksounds/goon/pugg_ask.ogg new file mode 100644 index 0000000000..463aa0afa0 Binary files /dev/null and b/sound/talksounds/goon/pugg_ask.ogg differ diff --git a/sound/talksounds/goon/pugg_exclaim.ogg b/sound/talksounds/goon/pugg_exclaim.ogg new file mode 100644 index 0000000000..c8d4ae1b4f Binary files /dev/null and b/sound/talksounds/goon/pugg_exclaim.ogg differ diff --git a/sound/talksounds/goon/radio.ogg b/sound/talksounds/goon/radio.ogg new file mode 100644 index 0000000000..0dcb87214f Binary files /dev/null and b/sound/talksounds/goon/radio.ogg differ diff --git a/sound/talksounds/goon/radio2.ogg b/sound/talksounds/goon/radio2.ogg new file mode 100644 index 0000000000..a9364857a5 Binary files /dev/null and b/sound/talksounds/goon/radio2.ogg differ diff --git a/sound/talksounds/goon/radio_ai.ogg b/sound/talksounds/goon/radio_ai.ogg new file mode 100644 index 0000000000..97eaf17417 Binary files /dev/null and b/sound/talksounds/goon/radio_ai.ogg differ diff --git a/sound/talksounds/goon/roach.ogg b/sound/talksounds/goon/roach.ogg new file mode 100644 index 0000000000..55a2ad8ac7 Binary files /dev/null and b/sound/talksounds/goon/roach.ogg differ diff --git a/sound/talksounds/goon/roach_ask.ogg b/sound/talksounds/goon/roach_ask.ogg new file mode 100644 index 0000000000..dc15d884cd Binary files /dev/null and b/sound/talksounds/goon/roach_ask.ogg differ diff --git a/sound/talksounds/goon/roach_exclaim.ogg b/sound/talksounds/goon/roach_exclaim.ogg new file mode 100644 index 0000000000..3a5a17d47a Binary files /dev/null and b/sound/talksounds/goon/roach_exclaim.ogg differ diff --git a/sound/talksounds/goon/skelly.ogg b/sound/talksounds/goon/skelly.ogg new file mode 100644 index 0000000000..b8e1a2921a Binary files /dev/null and b/sound/talksounds/goon/skelly.ogg differ diff --git a/sound/talksounds/goon/skelly_ask.ogg b/sound/talksounds/goon/skelly_ask.ogg new file mode 100644 index 0000000000..e81552d8df Binary files /dev/null and b/sound/talksounds/goon/skelly_ask.ogg differ diff --git a/sound/talksounds/goon/skelly_exclaim.ogg b/sound/talksounds/goon/skelly_exclaim.ogg new file mode 100644 index 0000000000..79eb112d1a Binary files /dev/null and b/sound/talksounds/goon/skelly_exclaim.ogg differ diff --git a/sound/talksounds/goon/speak_1.ogg b/sound/talksounds/goon/speak_1.ogg new file mode 100644 index 0000000000..ab8ddde4a6 Binary files /dev/null and b/sound/talksounds/goon/speak_1.ogg differ diff --git a/sound/talksounds/goon/speak_1_ask.ogg b/sound/talksounds/goon/speak_1_ask.ogg new file mode 100644 index 0000000000..89d631c6f6 Binary files /dev/null and b/sound/talksounds/goon/speak_1_ask.ogg differ diff --git a/sound/talksounds/goon/speak_1_exclaim.ogg b/sound/talksounds/goon/speak_1_exclaim.ogg new file mode 100644 index 0000000000..3be20fef39 Binary files /dev/null and b/sound/talksounds/goon/speak_1_exclaim.ogg differ diff --git a/sound/talksounds/goon/speak_2.ogg b/sound/talksounds/goon/speak_2.ogg new file mode 100644 index 0000000000..a8c9444a52 Binary files /dev/null and b/sound/talksounds/goon/speak_2.ogg differ diff --git a/sound/talksounds/goon/speak_2_ask.ogg b/sound/talksounds/goon/speak_2_ask.ogg new file mode 100644 index 0000000000..a2c9c86385 Binary files /dev/null and b/sound/talksounds/goon/speak_2_ask.ogg differ diff --git a/sound/talksounds/goon/speak_2_exclaim.ogg b/sound/talksounds/goon/speak_2_exclaim.ogg new file mode 100644 index 0000000000..7e0838d721 Binary files /dev/null and b/sound/talksounds/goon/speak_2_exclaim.ogg differ diff --git a/sound/talksounds/goon/speak_3.ogg b/sound/talksounds/goon/speak_3.ogg new file mode 100644 index 0000000000..33ec079b84 Binary files /dev/null and b/sound/talksounds/goon/speak_3.ogg differ diff --git a/sound/talksounds/goon/speak_3_ask.ogg b/sound/talksounds/goon/speak_3_ask.ogg new file mode 100644 index 0000000000..13156c332e Binary files /dev/null and b/sound/talksounds/goon/speak_3_ask.ogg differ diff --git a/sound/talksounds/goon/speak_3_exclaim.ogg b/sound/talksounds/goon/speak_3_exclaim.ogg new file mode 100644 index 0000000000..e10eb615b0 Binary files /dev/null and b/sound/talksounds/goon/speak_3_exclaim.ogg differ diff --git a/sound/talksounds/goon/speak_4.ogg b/sound/talksounds/goon/speak_4.ogg new file mode 100644 index 0000000000..6de26114ae Binary files /dev/null and b/sound/talksounds/goon/speak_4.ogg differ diff --git a/sound/talksounds/goon/speak_4_ask.ogg b/sound/talksounds/goon/speak_4_ask.ogg new file mode 100644 index 0000000000..76421d8fdd Binary files /dev/null and b/sound/talksounds/goon/speak_4_ask.ogg differ diff --git a/sound/talksounds/goon/speak_4_exclaim.ogg b/sound/talksounds/goon/speak_4_exclaim.ogg new file mode 100644 index 0000000000..ae6f3985be Binary files /dev/null and b/sound/talksounds/goon/speak_4_exclaim.ogg differ diff --git a/sound/talksounds/h.ogg b/sound/talksounds/h.ogg new file mode 100644 index 0000000000..9ed1f01341 Binary files /dev/null and b/sound/talksounds/h.ogg differ diff --git a/sound/talksounds/me_a.ogg b/sound/talksounds/me_a.ogg new file mode 100644 index 0000000000..8cb55c54f5 Binary files /dev/null and b/sound/talksounds/me_a.ogg differ diff --git a/sound/talksounds/me_b.ogg b/sound/talksounds/me_b.ogg new file mode 100644 index 0000000000..48e6b61d59 Binary files /dev/null and b/sound/talksounds/me_b.ogg differ diff --git a/sound/talksounds/me_c.ogg b/sound/talksounds/me_c.ogg new file mode 100644 index 0000000000..65476ee720 Binary files /dev/null and b/sound/talksounds/me_c.ogg differ diff --git a/sound/talksounds/me_d.ogg b/sound/talksounds/me_d.ogg new file mode 100644 index 0000000000..45d44bf2a1 Binary files /dev/null and b/sound/talksounds/me_d.ogg differ diff --git a/sound/talksounds/me_e.ogg b/sound/talksounds/me_e.ogg new file mode 100644 index 0000000000..d56c27d97d Binary files /dev/null and b/sound/talksounds/me_e.ogg differ diff --git a/sound/talksounds/me_f.ogg b/sound/talksounds/me_f.ogg new file mode 100644 index 0000000000..25e9754fec Binary files /dev/null and b/sound/talksounds/me_f.ogg differ diff --git a/sound/talksounds/subtle_sound.ogg b/sound/talksounds/subtle_sound.ogg new file mode 100644 index 0000000000..b8986f13fc Binary files /dev/null and b/sound/talksounds/subtle_sound.ogg differ diff --git a/sound/voice/moth/moth_chitter.ogg b/sound/voice/moth/moth_chitter.ogg new file mode 100644 index 0000000000..842bcf8e53 Binary files /dev/null and b/sound/voice/moth/moth_chitter.ogg differ diff --git a/sound/voice/moth/moth_laugh.ogg b/sound/voice/moth/moth_laugh.ogg new file mode 100644 index 0000000000..391d6c5aef Binary files /dev/null and b/sound/voice/moth/moth_laugh.ogg differ diff --git a/sound/weapons/chargeup.ogg b/sound/weapons/chargeup.ogg new file mode 100644 index 0000000000..263d2b1d99 Binary files /dev/null and b/sound/weapons/chargeup.ogg differ diff --git a/tgui/packages/tgui-polyfill/package.json b/tgui/packages/tgui-polyfill/package.json index 85d004bf99..a2f060fcc5 100644 --- a/tgui/packages/tgui-polyfill/package.json +++ b/tgui/packages/tgui-polyfill/package.json @@ -11,6 +11,6 @@ "unfetch": "^4.2.0" }, "devDependencies": { - "terser": "^5.13.1" + "terser": "^5.14.2" } } diff --git a/tgui/packages/tgui/interfaces/VorePanel.js b/tgui/packages/tgui/interfaces/VorePanel.js index 94c1a0410a..3d34716800 100644 --- a/tgui/packages/tgui/interfaces/VorePanel.js +++ b/tgui/packages/tgui/interfaces/VorePanel.js @@ -13,6 +13,7 @@ const digestModeToColor = { 'Absorb': 'purple', 'Unabsorb': 'purple', 'Drain': 'orange', + 'Selective': 'orange', 'Shrink': 'teal', 'Grow': 'teal', 'Size Steal': 'teal', @@ -26,6 +27,7 @@ const digestModeToPreyMode = { 'Absorb': 'being absorbed.', 'Unabsorb': 'being unabsorbed.', 'Drain': 'being drained.', + 'Selective': 'being processed.', 'Shrink': 'being shrunken.', 'Grow': 'being grown.', 'Size Steal': 'having your size stolen.', @@ -60,6 +62,7 @@ export const VorePanel = (props, context) => { // Descriptions verb, + release_verb, desc, absorbed_desc, } = data.selected; @@ -71,6 +74,7 @@ export const VorePanel = (props, context) => { result += 'Item Mode:\n' + item_mode + '\n\n'; result += '== Descriptions ==\n\n'; result += 'Verb:\n' + verb + '\n\n'; + result += 'Release Verb:\n' + release_verb + '\n\n'; result += 'Description:\n"' + desc + '"\n\n'; result += 'Absorbed Description:\n"' + absorbed_desc + '"\n\n'; @@ -350,7 +354,7 @@ const VoreSelectedBellyDescriptions = (props, context) => { const { act } = useBackend(context); const { belly } = props; - const { verb, desc, absorbed_desc } = belly; + const { verb, release_verb, desc, absorbed_desc } = belly; return ( @@ -367,6 +371,9 @@ const VoreSelectedBellyDescriptions = (props, context) => {