diff --git a/.travis.yml b/.travis.yml index 09cefa27b3..7474eba31d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ -#pretending we're C because otherwise ruby will initialize, even with "language: dm". -language: c +language: generic +os: linux +dist: bionic env: global: @@ -12,10 +13,14 @@ cache: addons: apt: packages: - - libc6-i386 + - libc6:i386 - libgcc1:i386 - libstdc++6:i386 - - libssl-dev:i386 + - libssl1.1:i386 + - g++-7 + - g++-7-multilib + - gcc-multilib + - zlib1g:i386 before_install: - chmod -R +x ./tools/travis @@ -27,6 +32,7 @@ before_script: - shopt -s globstar script: + - ldd librust_g.so - ./tools/travis/compile_and_run.sh # Build-specific settings diff --git a/_build_dependencies.sh b/_build_dependencies.sh index 835e8f81c2..be33811c98 100644 --- a/_build_dependencies.sh +++ b/_build_dependencies.sh @@ -4,7 +4,7 @@ export SPACEMANDMM_TAG=suite-1.4 # For NanoUI + TGUI export NODE_VERSION=12 # For the scripts in tools -export PHP_VERSION=5.6 +export PHP_VERSION=7.2 # Byond Major export BYOND_MAJOR=513 # Byond Minor diff --git a/code/__defines/_compile_options.dm b/code/__defines/_compile_options.dm index b68300eeb2..5ac591042b 100644 --- a/code/__defines/_compile_options.dm +++ b/code/__defines/_compile_options.dm @@ -7,10 +7,6 @@ 2 for preloading absolutely everything; */ -#define RUST_G "rust_g" // If uncommented, we will use the rust-g (https://github.com/tgstation/rust-g) native library for fast - // logging. This requires you to have the rust_g.dll or rust_g (renamed from librust_g.so) installed in the root folder or BYOND/bin - // The define's value should be the name of library file. - // ZAS Compile Options //#define ZASDBG // Uncomment to turn on super detailed ZAS debugging that probably won't even compile. #define MULTIZAS // Uncomment to turn on Multi-Z ZAS Support! diff --git a/code/__defines/dcs/flags.dm b/code/__defines/dcs/flags.dm new file mode 100644 index 0000000000..128c9f1938 --- /dev/null +++ b/code/__defines/dcs/flags.dm @@ -0,0 +1,41 @@ +/// Return this from `/datum/component/Initialize` or `datum/component/OnTransfer` to have the component be deleted if it's applied to an incorrect type. +/// `parent` must not be modified if this is to be returned. +/// This will be noted in the runtime logs +#define COMPONENT_INCOMPATIBLE 1 +/// Returned in PostTransfer to prevent transfer, similar to `COMPONENT_INCOMPATIBLE` +#define COMPONENT_NOTRANSFER 2 + +/// Return value to cancel attaching +#define ELEMENT_INCOMPATIBLE 1 + +// /datum/element flags +/// Causes the detach proc to be called when the host object is being deleted +#define ELEMENT_DETACH (1 << 0) +/** + * Only elements created with the same arguments given after `id_arg_index` share an element instance + * The arguments are the same when the text and number values are the same and all other values have the same ref + */ +#define ELEMENT_BESPOKE (1 << 1) + +// How multiple components of the exact same type are handled in the same datum +/// old component is deleted (default) +#define COMPONENT_DUPE_HIGHLANDER 0 +/// duplicates allowed +#define COMPONENT_DUPE_ALLOWED 1 +/// new component is deleted +#define COMPONENT_DUPE_UNIQUE 2 +/// old component is given the initialization args of the new +#define COMPONENT_DUPE_UNIQUE_PASSARGS 4 +/// each component of the same type is consulted as to whether the duplicate should be allowed +#define COMPONENT_DUPE_SELECTIVE 5 + +//Redirection component init flags +#define REDIRECT_TRANSFER_WITH_TURF 1 + +//Arch +#define ARCH_PROB "probability" //Probability for each item +#define ARCH_MAXDROP "max_drop_amount" //each item's max drop amount + +//Ouch my toes! +#define CALTROP_BYPASS_SHOES 1 +#define CALTROP_IGNORE_WALKERS 2 diff --git a/code/__defines/dcs/helpers.dm b/code/__defines/dcs/helpers.dm new file mode 100644 index 0000000000..144e94f1fe --- /dev/null +++ b/code/__defines/dcs/helpers.dm @@ -0,0 +1,15 @@ +/// Used to trigger signals and call procs registered for that signal +/// The datum hosting the signal is automaticaly added as the first argument +/// Returns a bitfield gathered from all registered procs +/// Arguments given here are packaged in a list and given to _SendSignal +#define SEND_SIGNAL(target, sigtype, arguments...) ( !target.comp_lookup || !target.comp_lookup[sigtype] ? NONE : target._SendSignal(sigtype, list(target, ##arguments)) ) + +#define SEND_GLOBAL_SIGNAL(sigtype, arguments...) ( SEND_SIGNAL(SSdcs, sigtype, ##arguments) ) + +/// A wrapper for _AddElement that allows us to pretend we're using normal named arguments +#define AddElement(arguments...) _AddElement(list(##arguments)) +/// A wrapper for _RemoveElement that allows us to pretend we're using normal named arguments +#define RemoveElement(arguments...) _RemoveElement(list(##arguments)) + +/// A wrapper for _AddComponent that allows us to pretend we're using normal named arguments +#define AddComponent(arguments...) _AddComponent(list(##arguments)) diff --git a/code/__defines/dcs/signals.dm b/code/__defines/dcs/signals.dm new file mode 100644 index 0000000000..26b1d2d44a --- /dev/null +++ b/code/__defines/dcs/signals.dm @@ -0,0 +1,732 @@ +// All signals. Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// global signals +// These are signals which can be listened to by any component on any parent +// start global signals with "!", this used to be necessary but now it's just a formatting choice + +///from base of datum/controller/subsystem/mapping/proc/add_new_zlevel(): (list/args) +#define COMSIG_GLOB_NEW_Z "!new_z" +/// called after a successful var edit somewhere in the world: (list/args) +#define COMSIG_GLOB_VAR_EDIT "!var_edit" +/// called after an explosion happened : (epicenter, devastation_range, heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range) +#define COMSIG_GLOB_EXPLOSION "!explosion" +/// mob was created somewhere : (mob) +#define COMSIG_GLOB_MOB_CREATED "!mob_created" +/// mob died somewhere : (mob , gibbed) +#define COMSIG_GLOB_MOB_DEATH "!mob_death" +/// global living say plug - use sparingly: (mob/speaker , message) +#define COMSIG_GLOB_LIVING_SAY_SPECIAL "!say_special" +/// called by datum/cinematic/play() : (datum/cinematic/new_cinematic) +#define COMSIG_GLOB_PLAY_CINEMATIC "!play_cinematic" + #define COMPONENT_GLOB_BLOCK_CINEMATIC (1<<0) +/// ingame button pressed (/obj/machinery/button/button) +#define COMSIG_GLOB_BUTTON_PRESSED "!button_pressed" + +/// signals from globally accessible objects + +///from SSsun when the sun changes position : (azimuth) +#define COMSIG_SUN_MOVED "sun_moved" + +////////////////////////////////////////////////////////////////// + +// /datum signals +/// when a component is added to a datum: (/datum/component) +#define COMSIG_COMPONENT_ADDED "component_added" +/// before a component is removed from a datum because of RemoveComponent: (/datum/component) +#define COMSIG_COMPONENT_REMOVING "component_removing" +/// before a datum's Destroy() is called: (force), returning a nonzero value will cancel the qdel operation +#define COMSIG_PARENT_PREQDELETED "parent_preqdeleted" +/// just before a datum's Destroy() is called: (force), at this point none of the other components chose to interrupt qdel and Destroy will be called +#define COMSIG_PARENT_QDELETING "parent_qdeleting" +/// generic topic handler (usr, href_list) +#define COMSIG_TOPIC "handle_topic" + +/// fires on the target datum when an element is attached to it (/datum/element) +#define COMSIG_ELEMENT_ATTACH "element_attach" +/// fires on the target datum when an element is attached to it (/datum/element) +#define COMSIG_ELEMENT_DETACH "element_detach" + +// /atom signals +///from base of atom/proc/Initialize(): sent any time a new atom is created +#define COMSIG_ATOM_CREATED "atom_created" +//from SSatoms InitAtom - Only if the atom was not deleted or failed initialization +#define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE "atom_init_success" +///from base of atom/attackby(): (/obj/item, /mob/living, params) +#define COMSIG_PARENT_ATTACKBY "atom_attackby" +///Return this in response if you don't want afterattack to be called + #define COMPONENT_NO_AFTERATTACK (1<<0) +///from base of atom/attack_hulk(): (/mob/living/carbon/human) +#define COMSIG_ATOM_HULK_ATTACK "hulk_attack" +///from base of atom/animal_attack(): (/mob/user) +#define COMSIG_ATOM_ATTACK_ANIMAL "attack_animal" +///from base of atom/examine(): (/mob) +#define COMSIG_PARENT_EXAMINE "atom_examine" +///from base of atom/get_examine_name(): (/mob, list/overrides) +#define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" + //Positions for overrides list + #define EXAMINE_POSITION_ARTICLE (1<<0) + #define EXAMINE_POSITION_BEFORE (1<<1) + //End positions + #define COMPONENT_EXNAME_CHANGED (1<<0) +///from base of atom/update_icon(): () +#define COMSIG_ATOM_UPDATE_ICON "atom_update_icon" + #define COMSIG_ATOM_NO_UPDATE_ICON_STATE (1<<0) + #define COMSIG_ATOM_NO_UPDATE_OVERLAYS (1<<1) +///from base of atom/update_overlays(): (list/new_overlays) +#define COMSIG_ATOM_UPDATE_OVERLAYS "atom_update_overlays" +///from base of atom/update_icon(): (signalOut, did_anything) +#define COMSIG_ATOM_UPDATED_ICON "atom_updated_icon" +///from base of atom/Entered(): (atom/movable/entering, /atom) +#define COMSIG_ATOM_ENTERED "atom_entered" +///from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc) +#define COMSIG_ATOM_EXIT "atom_exit" + #define COMPONENT_ATOM_BLOCK_EXIT (1<<0) +///from base of atom/Exited(): (atom/movable/exiting, atom/newloc) +#define COMSIG_ATOM_EXITED "atom_exited" +///from base of atom/Bumped(): (/atom/movable) +#define COMSIG_ATOM_BUMPED "atom_bumped" +///from base of atom/ex_act(): (severity, target) +#define COMSIG_ATOM_EX_ACT "atom_ex_act" +///from base of atom/emp_act(): (severity) +#define COMSIG_ATOM_EMP_ACT "atom_emp_act" +///from base of atom/fire_act(): (exposed_temperature, exposed_volume) +#define COMSIG_ATOM_FIRE_ACT "atom_fire_act" +///from base of atom/bullet_act(): (/obj/projectile, def_zone) +#define COMSIG_ATOM_BULLET_ACT "atom_bullet_act" +///from base of atom/blob_act(): (/obj/structure/blob) +#define COMSIG_ATOM_BLOB_ACT "atom_blob_act" +///from base of atom/acid_act(): (acidpwr, acid_volume) +#define COMSIG_ATOM_ACID_ACT "atom_acid_act" +///from base of atom/emag_act(): (/mob/user) +#define COMSIG_ATOM_EMAG_ACT "atom_emag_act" +///from base of atom/rad_act(intensity) +#define COMSIG_ATOM_RAD_ACT "atom_rad_act" +///from base of atom/narsie_act(): () +#define COMSIG_ATOM_NARSIE_ACT "atom_narsie_act" +///from base of atom/rcd_act(): (/mob, /obj/item/construction/rcd, passed_mode) +#define COMSIG_ATOM_RCD_ACT "atom_rcd_act" +///from base of atom/singularity_pull(): (S, current_size) +#define COMSIG_ATOM_SING_PULL "atom_sing_pull" +///from obj/machinery/bsa/full/proc/fire(): () +#define COMSIG_ATOM_BSA_BEAM "atom_bsa_beam_pass" + #define COMSIG_ATOM_BLOCKS_BSA_BEAM (1<<0) +///from base of atom/set_light(): (l_range, l_power, l_color) +#define COMSIG_ATOM_SET_LIGHT "atom_set_light" +///from base of atom/setDir(): (old_dir, new_dir) +#define COMSIG_ATOM_DIR_CHANGE "atom_dir_change" +///from base of atom/handle_atom_del(): (atom/deleted) +#define COMSIG_ATOM_CONTENTS_DEL "atom_contents_del" +///from base of atom/has_gravity(): (turf/location, list/forced_gravities) +#define COMSIG_ATOM_HAS_GRAVITY "atom_has_gravity" +///from proc/get_rad_contents(): () +#define COMSIG_ATOM_RAD_PROBE "atom_rad_probe" + #define COMPONENT_BLOCK_RADIATION (1<<0) +///from base of datum/radiation_wave/radiate(): (strength) +#define COMSIG_ATOM_RAD_CONTAMINATING "atom_rad_contam" + #define COMPONENT_BLOCK_CONTAMINATION (1<<0) +///from base of datum/radiation_wave/check_obstructions(): (datum/radiation_wave, width) +#define COMSIG_ATOM_RAD_WAVE_PASSING "atom_rad_wave_pass" + #define COMPONENT_RAD_WAVE_HANDLED (1<<0) +///from internal loop in atom/movable/proc/CanReach(): (list/next) +#define COMSIG_ATOM_CANREACH "atom_can_reach" + #define COMPONENT_BLOCK_REACH (1<<0) +///from base of atom/screwdriver_act(): (mob/living/user, obj/item/I) +#define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act" +///from base of atom/wrench_act(): (mob/living/user, obj/item/I) +#define COMSIG_ATOM_WRENCH_ACT "atom_wrench_act" +///from base of atom/multitool_act(): (mob/living/user, obj/item/I) +#define COMSIG_ATOM_MULTITOOL_ACT "atom_multitool_act" +///from base of atom/welder_act(): (mob/living/user, obj/item/I) +#define COMSIG_ATOM_WELDER_ACT "atom_welder_act" +///from base of atom/wirecutter_act(): (mob/living/user, obj/item/I) +#define COMSIG_ATOM_WIRECUTTER_ACT "atom_wirecutter_act" +///from base of atom/crowbar_act(): (mob/living/user, obj/item/I) +#define COMSIG_ATOM_CROWBAR_ACT "atom_crowbar_act" +///from base of atom/analyser_act(): (mob/living/user, obj/item/I) +#define COMSIG_ATOM_ANALYSER_ACT "atom_analyser_act" + #define COMPONENT_BLOCK_TOOL_ATTACK (1<<0) +///called when teleporting into a protected turf: (channel, turf/origin) +#define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport" + #define COMPONENT_BLOCK_TELEPORT (1<<0) +///called when an atom is added to the hearers on get_hearers_in_view(): (list/processing_list, list/hearers) +#define COMSIG_ATOM_HEARER_IN_VIEW "atom_hearer_in_view" +///called when an atom starts orbiting another atom: (atom) +#define COMSIG_ATOM_ORBIT_BEGIN "atom_orbit_begin" +///called when an atom stops orbiting another atom: (atom) +#define COMSIG_ATOM_ORBIT_STOP "atom_orbit_stop" +///////////////// +///from base of atom/attack_ghost(): (mob/dead/observer/ghost) +#define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" +///from base of atom/attack_hand(): (mob/user) +#define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" +///from base of atom/attack_paw(): (mob/user) +#define COMSIG_ATOM_ATTACK_PAW "atom_attack_paw" + #define COMPONENT_NO_ATTACK_HAND (1<<0) //works on all 3. +//This signal return value bitflags can be found in __DEFINES/misc.dm + +///called for each movable in a turf contents on /turf/zImpact(): (atom/movable/A, levels) +#define COMSIG_ATOM_INTERCEPT_Z_FALL "movable_intercept_z_impact" +///called on a movable (NOT living) when someone starts pulling it (atom/movable/puller, state, force) +#define COMSIG_ATOM_START_PULL "movable_start_pull" +///called on /living when someone starts pulling it (atom/movable/puller, state, force) +#define COMSIG_LIVING_START_PULL "living_start_pull" + +///////////////// + +///from base of area/Entered(): (/area) +#define COMSIG_ENTER_AREA "enter_area" +///from base of area/Exited(): (/area) +#define COMSIG_EXIT_AREA "exit_area" +///from base of atom/Click(): (location, control, params, mob/user) +#define COMSIG_CLICK "atom_click" +///from base of atom/ShiftClick(): (/mob) +#define COMSIG_CLICK_SHIFT "shift_click" + #define COMPONENT_ALLOW_EXAMINATE (1<<0) //Allows the user to examinate regardless of client.eye. +///from base of atom/CtrlClickOn(): (/mob) +#define COMSIG_CLICK_CTRL "ctrl_click" +///from base of atom/AltClick(): (/mob) +#define COMSIG_CLICK_ALT "alt_click" +///from base of atom/CtrlShiftClick(/mob) +#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" +///from base of atom/MouseDrop(): (/atom/over, /mob/user) +#define COMSIG_MOUSEDROP_ONTO "mousedrop_onto" + #define COMPONENT_NO_MOUSEDROP (1<<0) +///from base of atom/MouseDrop_T: (/atom/from, /mob/user) +#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto" + +// /area signals + +///from base of area/Entered(): (atom/movable/M) +#define COMSIG_AREA_ENTERED "area_entered" +///from base of area/Exited(): (atom/movable/M) +#define COMSIG_AREA_EXITED "area_exited" + +// /turf signals + +///from base of turf/ChangeTurf(): (path, list/new_baseturfs, flags, list/transferring_comps) +#define COMSIG_TURF_CHANGE "turf_change" +///from base of atom/has_gravity(): (atom/asker, list/forced_gravities) +#define COMSIG_TURF_HAS_GRAVITY "turf_has_gravity" +///from base of turf/New(): (turf/source, direction) +#define COMSIG_TURF_MULTIZ_NEW "turf_multiz_new" + +// /atom/movable signals + +///from base of atom/movable/Moved(): (/atom) +#define COMSIG_MOVABLE_PRE_MOVE "movable_pre_move" + #define COMPONENT_MOVABLE_BLOCK_PRE_MOVE (1<<0) +///from base of atom/movable/Moved(): (/atom, dir) +#define COMSIG_MOVABLE_MOVED "movable_moved" +///from base of atom/movable/Cross(): (/atom/movable) +#define COMSIG_MOVABLE_CROSS "movable_cross" +///from base of atom/movable/Crossed(): (/atom/movable) +#define COMSIG_MOVABLE_CROSSED "movable_crossed" +///when we cross over something (calling Crossed() on that atom) +#define COMSIG_CROSSED_MOVABLE "crossed_movable" +///from base of atom/movable/Uncross(): (/atom/movable) +#define COMSIG_MOVABLE_UNCROSS "movable_uncross" + #define COMPONENT_MOVABLE_BLOCK_UNCROSS (1<<0) +///from base of atom/movable/Uncrossed(): (/atom/movable) +#define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" +///from base of atom/movable/Bump(): (/atom) +#define COMSIG_MOVABLE_BUMP "movable_bump" +///from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum) +#define COMSIG_MOVABLE_IMPACT "movable_impact" + #define COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH (1<<0) //if true, flip if the impact will push what it hits + #define COMPONENT_MOVABLE_IMPACT_NEVERMIND (1<<1) //return true if you destroyed whatever it was you're impacting and there won't be anything for hitby() to run on +///from base of mob/living/hitby(): (mob/living/target, hit_zone) +#define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" +///from base of atom/movable/buckle_mob(): (mob, force) +#define COMSIG_MOVABLE_BUCKLE "buckle" +///from base of atom/movable/unbuckle_mob(): (mob, force) +#define COMSIG_MOVABLE_UNBUCKLE "unbuckle" +///from base of atom/movable/throw_at(): (list/args) +#define COMSIG_MOVABLE_PRE_THROW "movable_pre_throw" + #define COMPONENT_CANCEL_THROW (1<<0) +///from base of atom/movable/throw_at(): (datum/thrownthing, spin) +#define COMSIG_MOVABLE_POST_THROW "movable_post_throw" +///from base of atom/movable/onTransitZ(): (old_z, new_z) +#define COMSIG_MOVABLE_Z_CHANGED "movable_ztransit" +///called when the movable is placed in an unaccessible area, used for stationloving: () +#define COMSIG_MOVABLE_SECLUDED_LOCATION "movable_secluded" +///from base of atom/movable/Hear(): (proc args list(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)) +#define COMSIG_MOVABLE_HEAR "movable_hear" + #define HEARING_MESSAGE 1 + #define HEARING_SPEAKER 2 +// #define HEARING_LANGUAGE 3 + #define HEARING_RAW_MESSAGE 4 + /* #define HEARING_RADIO_FREQ 5 + #define HEARING_SPANS 6 + #define HEARING_MESSAGE_MODE 7 */ + +///called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source) +#define COMSIG_MOVABLE_DISPOSING "movable_disposing" + +// /mob signals + +///from base of /mob/Login(): () +#define COMSIG_MOB_LOGIN "mob_login" +///from base of /mob/Logout(): () +#define COMSIG_MOB_LOGOUT "mob_logout" +///from base of mob/death(): (gibbed) +#define COMSIG_MOB_DEATH "mob_death" +///from base of mob/set_stat(): (new_stat) +#define COMSIG_MOB_STATCHANGE "mob_statchange" +///from base of mob/clickon(): (atom/A, params) +#define COMSIG_MOB_CLICKON "mob_clickon" +///from base of mob/MiddleClickOn(): (atom/A) +#define COMSIG_MOB_MIDDLECLICKON "mob_middleclickon" +///from base of mob/AltClickOn(): (atom/A) +#define COMSIG_MOB_ALTCLICKON "mob_altclickon" + #define COMSIG_MOB_CANCEL_CLICKON (1<<0) + +///from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj +#define COMSIG_MOB_ALLOWED "mob_allowed" +///from base of mob/anti_magic_check(): (mob/user, magic, holy, tinfoil, chargecost, self, protection_sources) +#define COMSIG_MOB_RECEIVE_MAGIC "mob_receive_magic" + #define COMPONENT_BLOCK_MAGIC (1<<0) +///from base of mob/create_mob_hud(): () +#define COMSIG_MOB_HUD_CREATED "mob_hud_created" +///from base of atom/attack_hand(): (mob/user) +#define COMSIG_MOB_ATTACK_HAND "mob_attack_hand" +///from base of /obj/item/attack(): (mob/M, mob/user) +#define COMSIG_MOB_ITEM_ATTACK "mob_item_attack" + #define COMPONENT_ITEM_NO_ATTACK (1<<0) +///from base of /mob/living/proc/apply_damage(): (damage, damagetype, def_zone) +#define COMSIG_MOB_APPLY_DAMGE "mob_apply_damage" +///from base of obj/item/afterattack(): (atom/target, mob/user, proximity_flag, click_parameters) +#define COMSIG_MOB_ITEM_AFTERATTACK "mob_item_afterattack" +///from base of obj/item/attack_qdeleted(): (atom/target, mob/user, proxiumity_flag, click_parameters) +#define COMSIG_MOB_ITEM_ATTACK_QDELETED "mob_item_attack_qdeleted" +///from base of mob/RangedAttack(): (atom/A, params) +#define COMSIG_MOB_ATTACK_RANGED "mob_attack_ranged" +///from base of /mob/throw_item(): (atom/target) +#define COMSIG_MOB_THROW "mob_throw" +///from base of /mob/verb/examinate(): (atom/target) +#define COMSIG_MOB_EXAMINATE "mob_examinate" +///from base of /mob/update_sight(): () +#define COMSIG_MOB_UPDATE_SIGHT "mob_update_sight" +////from /mob/living/say(): () +#define COMSIG_MOB_SAY "mob_say" + #define COMPONENT_UPPERCASE_SPEECH (1<<0) + // used to access COMSIG_MOB_SAY argslist + #define SPEECH_MESSAGE 1 + // #define SPEECH_BUBBLE_TYPE 2 + #define SPEECH_SPANS 3 + /* #define SPEECH_SANITIZE 4 + #define SPEECH_LANGUAGE 5 + #define SPEECH_IGNORE_SPAM 6 + #define SPEECH_FORCED 7 */ + +///from /mob/say_dead(): (mob/speaker, message) +#define COMSIG_MOB_DEADSAY "mob_deadsay" + #define MOB_DEADSAY_SIGNAL_INTERCEPT (1<<0) +///from /mob/living/emote(): () +#define COMSIG_MOB_EMOTE "mob_emote" +///from base of mob/swap_hand(): (obj/item) +#define COMSIG_MOB_SWAP_HANDS "mob_swap_hands" + #define COMPONENT_BLOCK_SWAP (1<<0) + +// /mob/living signals + +///from base of mob/living/resist() (/mob/living) +#define COMSIG_LIVING_RESIST "living_resist" +///from base of mob/living/IgniteMob() (/mob/living) +#define COMSIG_LIVING_IGNITED "living_ignite" +///from base of mob/living/ExtinguishMob() (/mob/living) +#define COMSIG_LIVING_EXTINGUISHED "living_extinguished" +///from base of mob/living/electrocute_act(): (shock_damage, source, siemens_coeff, flags) +#define COMSIG_LIVING_ELECTROCUTE_ACT "living_electrocute_act" +///sent when items with siemen coeff. of 0 block a shock: (power_source, source, siemens_coeff, dist_check) +#define COMSIG_LIVING_SHOCK_PREVENTED "living_shock_prevented" +///sent by stuff like stunbatons and tasers: () +#define COMSIG_LIVING_MINOR_SHOCK "living_minor_shock" +///from base of mob/living/revive() (full_heal, admin_revive) +#define COMSIG_LIVING_REVIVE "living_revive" +///from base of /mob/living/regenerate_limbs(): (noheal, excluded_limbs) +#define COMSIG_LIVING_REGENERATE_LIMBS "living_regen_limbs" +///from base of /obj/item/bodypart/proc/attach_limb(): (new_limb, special) allows you to fail limb attachment +#define COMSIG_LIVING_ATTACH_LIMB "living_attach_limb" + #define COMPONENT_NO_ATTACH (1<<0) +///sent from borg recharge stations: (amount, repairs) +#define COMSIG_PROCESS_BORGCHARGER_OCCUPANT "living_charge" +///sent when a mob/login() finishes: (client) +#define COMSIG_MOB_CLIENT_LOGIN "comsig_mob_client_login" +///sent from borg mobs to itself, for tools to catch an upcoming destroy() due to safe decon (rather than detonation) +#define COMSIG_BORG_SAFE_DECONSTRUCT "borg_safe_decon" + +//ALL OF THESE DO NOT TAKE INTO ACCOUNT WHETHER AMOUNT IS 0 OR LOWER AND ARE SENT REGARDLESS! + +///from base of mob/living/Stun() (amount, update, ignore) +#define COMSIG_LIVING_STATUS_STUN "living_stun" +///from base of mob/living/Knockdown() (amount, update, ignore) +#define COMSIG_LIVING_STATUS_KNOCKDOWN "living_knockdown" +///from base of mob/living/Paralyze() (amount, update, ignore) +#define COMSIG_LIVING_STATUS_PARALYZE "living_paralyze" +///from base of mob/living/Immobilize() (amount, update, ignore) +#define COMSIG_LIVING_STATUS_IMMOBILIZE "living_immobilize" +///from base of mob/living/Unconscious() (amount, update, ignore) +#define COMSIG_LIVING_STATUS_UNCONSCIOUS "living_unconscious" +///from base of mob/living/Sleeping() (amount, update, ignore) +#define COMSIG_LIVING_STATUS_SLEEP "living_sleeping" + #define COMPONENT_NO_STUN (1<<0) //For all of them +///from base of /mob/living/can_track(): (mob/user) +#define COMSIG_LIVING_CAN_TRACK "mob_cantrack" + #define COMPONENT_CANT_TRACK (1<<0) + +// /mob/living/carbon signals + +///from base of mob/living/carbon/soundbang_act(): (list(intensity)) +#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" +///from /item/organ/proc/Insert() (/obj/item/organ/) +#define COMSIG_CARBON_GAIN_ORGAN "carbon_gain_organ" +///from /item/organ/proc/Remove() (/obj/item/organ/) +#define COMSIG_CARBON_LOSE_ORGAN "carbon_lose_organ" +///from /mob/living/carbon/doUnEquip(obj/item/I, force, newloc, no_move, invdrop, silent) +#define COMSIG_CARBON_EQUIP_HAT "carbon_equip_hat" +///from /mob/living/carbon/doUnEquip(obj/item/I, force, newloc, no_move, invdrop, silent) +#define COMSIG_CARBON_UNEQUIP_HAT "carbon_unequip_hat" +///defined twice, in carbon and human's topics, fired when interacting with a valid embedded_object to pull it out (mob/living/carbon/target, /obj/item, /obj/item/bodypart/L) +#define COMSIG_CARBON_EMBED_RIP "item_embed_start_rip" +///called when removing a given item from a mob, from mob/living/carbon/remove_embedded_object(mob/living/carbon/target, /obj/item) +#define COMSIG_CARBON_EMBED_REMOVAL "item_embed_remove_safe" + +// /mob/living/simple_animal/hostile signals +#define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget" + #define COMPONENT_HOSTILE_NO_ATTACK (1<<0) + +// /obj signals + +///from base of obj/deconstruct(): (disassembled) +#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" +///called in /obj/structure/setAnchored(): (value) +#define COMSIG_OBJ_SETANCHORED "obj_setanchored" +///from base of code/game/machinery +#define COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH "obj_default_unfasten_wrench" +///from base of /turf/proc/levelupdate(). (intact) true to hide and false to unhide +#define COMSIG_OBJ_HIDE "obj_hide" +///called in /obj/update_icon() +#define COMSIG_OBJ_UPDATE_ICON "obj_update_icon" + +// /obj/machinery signals + +///from /obj/machinery/obj_break(damage_flag): (damage_flag) +#define COMSIG_MACHINERY_BROKEN "machinery_broken" +///from base power_change() when power is lost +#define COMSIG_MACHINERY_POWER_LOST "machinery_power_lost" +///from base power_change() when power is restored +#define COMSIG_MACHINERY_POWER_RESTORED "machinery_power_restored" + +// /obj/item signals + +///from base of obj/item/attack(): (/mob/living/target, /mob/living/user) +#define COMSIG_ITEM_ATTACK "item_attack" +///from base of obj/item/attack_self(): (/mob) +#define COMSIG_ITEM_ATTACK_SELF "item_attack_self" + #define COMPONENT_NO_INTERACT (1<<0) +///from base of obj/item/attack_obj(): (/obj, /mob) +#define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj" + #define COMPONENT_NO_ATTACK_OBJ (1<<0) +///from base of obj/item/pre_attack(): (atom/target, mob/user, params) +#define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" + #define COMPONENT_NO_ATTACK (1<<0) +///from base of obj/item/afterattack(): (atom/target, mob/user, params) +#define COMSIG_ITEM_AFTERATTACK "item_afterattack" +///from base of obj/item/attack_qdeleted(): (atom/target, mob/user, params) +#define COMSIG_ITEM_ATTACK_QDELETED "item_attack_qdeleted" +///from base of obj/item/equipped(): (/mob/equipper, slot) +#define COMSIG_ITEM_EQUIPPED "item_equip" +///from base of obj/item/dropped(): (mob/user) +#define COMSIG_ITEM_DROPPED "item_drop" +///from base of obj/item/pickup(): (/mob/taker) +#define COMSIG_ITEM_PICKUP "item_pickup" +///from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone) +#define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" +///return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user) +#define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" +///called before marking an object for retrieval, checked in /obj/effect/proc_holder/spell/targeted/summonitem/cast() : (mob/user) +#define COMSIG_ITEM_MARK_RETRIEVAL "item_mark_retrieval" + #define COMPONENT_BLOCK_MARK_RETRIEVAL (1<<0) +///from base of obj/item/hit_reaction(): (list/args) +#define COMSIG_ITEM_HIT_REACT "item_hit_react" +///called on item when crossed by something (): (/atom/movable, mob/living/crossed) +#define COMSIG_ITEM_WEARERCROSSED "wearer_crossed" +///called on item when microwaved (): (obj/machinery/microwave/M) +#define COMSIG_ITEM_MICROWAVE_ACT "microwave_act" +///from base of item/sharpener/attackby(): (amount, max) +#define COMSIG_ITEM_SHARPEN_ACT "sharpen_act" + #define COMPONENT_BLOCK_SHARPEN_APPLIED (1<<0) + #define COMPONENT_BLOCK_SHARPEN_BLOCKED (1<<1) + #define COMPONENT_BLOCK_SHARPEN_ALREADY (1<<2) + #define COMPONENT_BLOCK_SHARPEN_MAXED (1<<3) +///from base of [/obj/item/proc/tool_check_callback]: (mob/living/user) +#define COMSIG_TOOL_IN_USE "tool_in_use" +///from base of [/obj/item/proc/tool_start_check]: (mob/living/user) +#define COMSIG_TOOL_START_USE "tool_start_use" +///from [/obj/item/proc/disableEmbedding]: +#define COMSIG_ITEM_DISABLE_EMBED "item_disable_embed" +///from [/obj/effect/mine/proc/triggermine]: +#define COMSIG_MINE_TRIGGERED "minegoboom" + +// /obj/item signals for economy +///called when an item is sold by the exports subsystem +#define COMSIG_ITEM_SOLD "item_sold" +///called when a wrapped up structure is opened by hand +#define COMSIG_STRUCTURE_UNWRAPPED "structure_unwrapped" +#define COMSIG_ITEM_UNWRAPPED "item_unwrapped" +///called when a wrapped up item is opened by hand + #define COMSIG_ITEM_SPLIT_VALUE (1<<0) +///called when getting the item's exact ratio for cargo's profit. +#define COMSIG_ITEM_SPLIT_PROFIT "item_split_profits" +///called when getting the item's exact ratio for cargo's profit, without selling the item. +#define COMSIG_ITEM_SPLIT_PROFIT_DRY "item_split_profits_dry" + +// /obj/item/clothing signals + +///from base of obj/item/clothing/shoes/proc/step_action(): () +#define COMSIG_SHOES_STEP_ACTION "shoes_step_action" +///from base of /obj/item/clothing/suit/space/proc/toggle_spacesuit(): (obj/item/clothing/suit/space/suit) +#define COMSIG_SUIT_SPACE_TOGGLE "suit_space_toggle" + +// /obj/item/implant signals +///from base of /obj/item/implant/proc/activate(): () +#define COMSIG_IMPLANT_ACTIVATED "implant_activated" +///from base of /obj/item/implant/proc/implant(): (list/args) +#define COMSIG_IMPLANT_IMPLANTING "implant_implanting" + #define COMPONENT_STOP_IMPLANTING (1<<0) +///called on already installed implants when a new one is being added in /obj/item/implant/proc/implant(): (list/args, obj/item/implant/new_implant) +#define COMSIG_IMPLANT_OTHER "implant_other" + //#define COMPONENT_STOP_IMPLANTING (1<<0) //The name makes sense for both + #define COMPONENT_DELETE_NEW_IMPLANT (1<<1) + #define COMPONENT_DELETE_OLD_IMPLANT (1<<2) +///called on implants being implanted into someone with an uplink implant: (datum/component/uplink) +#define COMSIG_IMPLANT_EXISTING_UPLINK "implant_uplink_exists" + //This uses all return values of COMSIG_IMPLANT_OTHER + +// /obj/item/pda signals + +///called on pda when the user changes the ringtone: (mob/living/user, new_ringtone) +#define COMSIG_PDA_CHANGE_RINGTONE "pda_change_ringtone" + #define COMPONENT_STOP_RINGTONE_CHANGE (1<<0) +#define COMSIG_PDA_CHECK_DETONATE "pda_check_detonate" + #define COMPONENT_PDA_NO_DETONATE (1<<0) + +// /obj/item/radio signals + +///called from base of /obj/item/radio/proc/set_frequency(): (list/args) +#define COMSIG_RADIO_NEW_FREQUENCY "radio_new_frequency" + +// /obj/item/pen signals + +///called after rotation in /obj/item/pen/attack_self(): (rotation, mob/living/carbon/user) +#define COMSIG_PEN_ROTATED "pen_rotated" + +// /obj/item/gun signals + +///called in /obj/item/gun/process_fire (user, target, params, zone_override) +#define COMSIG_MOB_FIRED_GUN "mob_fired_gun" + +// /obj/item/grenade signals + +///called in /obj/item/gun/process_fire (user, target, params, zone_override) +#define COMSIG_GRENADE_PRIME "grenade_prime" +///called in /obj/item/gun/process_fire (user, target, params, zone_override) +#define COMSIG_GRENADE_ARMED "grenade_armed" + +// /obj/projectile signals (sent to the firer) + +///from base of /obj/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle) +#define COMSIG_PROJECTILE_SELF_ON_HIT "projectile_self_on_hit" +///from base of /obj/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle) +#define COMSIG_PROJECTILE_ON_HIT "projectile_on_hit" +///from base of /obj/projectile/proc/fire(): (obj/projectile, atom/original_target) +#define COMSIG_PROJECTILE_BEFORE_FIRE "projectile_before_fire" +///from the base of /obj/projectile/proc/fire(): () +#define COMSIG_PROJECTILE_FIRE "projectile_fire" +///sent to targets during the process_hit proc of projectiles +#define COMSIG_PROJECTILE_PREHIT "com_proj_prehit" +///sent to targets during the process_hit proc of projectiles +#define COMSIG_PROJECTILE_RANGE_OUT "projectile_range_out" +///sent when trying to force an embed (mainly for projectiles, only used in the embed element) +#define COMSIG_EMBED_TRY_FORCE "item_try_embed" + +///sent to targets during the process_hit proc of projectiles +#define COMSIG_PELLET_CLOUD_INIT "pellet_cloud_init" + +// /obj/mecha signals + +///sent from mecha action buttons to the mecha they're linked to +#define COMSIG_MECHA_ACTION_ACTIVATE "mecha_action_activate" + +// /mob/living/carbon/human signals + +///from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity) +#define COMSIG_HUMAN_EARLY_UNARMED_ATTACK "human_early_unarmed_attack" +///from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity) +#define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" +///from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker) +#define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" +///Hit by successful disarm attack (mob/living/carbon/human/attacker,zone_targeted) +#define COMSIG_HUMAN_DISARM_HIT "human_disarm_hit" +///Whenever EquipRanked is called, called after job is set +#define COMSIG_JOB_RECEIVED "job_received" + +// /datum/species signals + +///from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species) +#define COMSIG_SPECIES_GAIN "species_gain" +///from datum/species/on_species_loss(): (datum/species/lost_species) +#define COMSIG_SPECIES_LOSS "species_loss" + +// /datum/song signals + +///sent to the instrument when a song starts playing +#define COMSIG_SONG_START "song_start" +///sent to the instrument when a song stops playing +#define COMSIG_SONG_END "song_end" + +/*******Component Specific Signals*******/ +//Janitor + +///(): Returns bitflags of wet values. +#define COMSIG_TURF_IS_WET "check_turf_wet" +///(max_strength, immediate, duration_decrease = INFINITY): Returns bool. +#define COMSIG_TURF_MAKE_DRY "make_turf_try" +///called on an object to clean it of cleanables. Usualy with soap: (num/strength) +#define COMSIG_COMPONENT_CLEAN_ACT "clean_act" + +//Creamed + +///called when you wash your face at a sink: (num/strength) +#define COMSIG_COMPONENT_CLEAN_FACE_ACT "clean_face_act" + +//Food + +///from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder) +#define COMSIG_FOOD_EATEN "food_eaten" + +//Gibs + +///from base of /obj/effect/decal/cleanable/blood/gibs/streak(): (list/directions, list/diseases) +#define COMSIG_GIBS_STREAK "gibs_streak" + +//Mood + +///called when you send a mood event from anywhere in the code. +#define COMSIG_ADD_MOOD_EVENT "add_mood" +///Mood event that only RnD members listen for +#define COMSIG_ADD_MOOD_EVENT_RND "RND_add_mood" +///called when you clear a mood event from anywhere in the code. +#define COMSIG_CLEAR_MOOD_EVENT "clear_mood" + +//NTnet + +///called on an object by its NTNET connection component on receive. (sending_id(number), sending_netname(text), data(datum/netdata)) +#define COMSIG_COMPONENT_NTNET_RECEIVE "ntnet_receive" + +//Nanites + +///() returns TRUE if nanites are found +#define COMSIG_HAS_NANITES "has_nanites" +///() returns TRUE if nanites have stealth +#define COMSIG_NANITE_IS_STEALTHY "nanite_is_stealthy" +///() deletes the nanite component +#define COMSIG_NANITE_DELETE "nanite_delete" +///(list/nanite_programs) - makes the input list a copy the nanites' program list +#define COMSIG_NANITE_GET_PROGRAMS "nanite_get_programs" +///(amount) Returns nanite amount +#define COMSIG_NANITE_GET_VOLUME "nanite_get_volume" +///(amount) Sets current nanite volume to the given amount +#define COMSIG_NANITE_SET_VOLUME "nanite_set_volume" +///(amount) Adjusts nanite volume by the given amount +#define COMSIG_NANITE_ADJUST_VOLUME "nanite_adjust" +///(amount) Sets maximum nanite volume to the given amount +#define COMSIG_NANITE_SET_MAX_VOLUME "nanite_set_max_volume" +///(amount(0-100)) Sets cloud ID to the given amount +#define COMSIG_NANITE_SET_CLOUD "nanite_set_cloud" +///(method) Modify cloud sync status. Method can be toggle, enable or disable +#define COMSIG_NANITE_SET_CLOUD_SYNC "nanite_set_cloud_sync" +///(amount) Sets safety threshold to the given amount +#define COMSIG_NANITE_SET_SAFETY "nanite_set_safety" +///(amount) Sets regeneration rate to the given amount +#define COMSIG_NANITE_SET_REGEN "nanite_set_regen" +///(code(1-9999)) Called when sending a nanite signal to a mob. +#define COMSIG_NANITE_SIGNAL "nanite_signal" +///(comm_code(1-9999), comm_message) Called when sending a nanite comm signal to a mob. +#define COMSIG_NANITE_COMM_SIGNAL "nanite_comm_signal" +///(mob/user, full_scan) - sends to chat a scan of the nanites to the user, returns TRUE if nanites are detected +#define COMSIG_NANITE_SCAN "nanite_scan" +///(list/data, scan_level) - adds nanite data to the given data list - made for ui_data procs +#define COMSIG_NANITE_UI_DATA "nanite_ui_data" +///(datum/nanite_program/new_program, datum/nanite_program/source_program) Called when adding a program to a nanite component +#define COMSIG_NANITE_ADD_PROGRAM "nanite_add_program" + ///Installation successful + #define COMPONENT_PROGRAM_INSTALLED (1<<0) + ///Installation failed, but there are still nanites + #define COMPONENT_PROGRAM_NOT_INSTALLED (1<<1) +///(datum/component/nanites, full_overwrite, copy_activation) Called to sync the target's nanites to a given nanite component +#define COMSIG_NANITE_SYNC "nanite_sync" + +// /datum/component/storage signals + +///() - returns bool. +#define COMSIG_CONTAINS_STORAGE "is_storage" +///(obj/item/inserting, mob/user, silent, force) - returns bool +#define COMSIG_TRY_STORAGE_INSERT "storage_try_insert" +///(mob/show_to, force) - returns bool. +#define COMSIG_TRY_STORAGE_SHOW "storage_show_to" +///(mob/hide_from) - returns bool +#define COMSIG_TRY_STORAGE_HIDE_FROM "storage_hide_from" +///returns bool +#define COMSIG_TRY_STORAGE_HIDE_ALL "storage_hide_all" +///(newstate) +#define COMSIG_TRY_STORAGE_SET_LOCKSTATE "storage_lock_set_state" +///() - returns bool. MUST CHECK IF STORAGE IS THERE FIRST! +#define COMSIG_IS_STORAGE_LOCKED "storage_get_lockstate" +///(type, atom/destination, amount = INFINITY, check_adjacent, force, mob/user, list/inserted) - returns bool - type can be a list of types. +#define COMSIG_TRY_STORAGE_TAKE_TYPE "storage_take_type" +///(type, amount = INFINITY, force = FALSE). Force will ignore max_items, and amount is normally clamped to max_items. +#define COMSIG_TRY_STORAGE_FILL_TYPE "storage_fill_type" +///(obj, new_loc, force = FALSE) - returns bool +#define COMSIG_TRY_STORAGE_TAKE "storage_take_obj" +///(loc) - returns bool - if loc is null it will dump at parent location. +#define COMSIG_TRY_STORAGE_QUICK_EMPTY "storage_quick_empty" +///(list/list_to_inject_results_into, recursively_search_inside_storages = TRUE) +#define COMSIG_TRY_STORAGE_RETURN_INVENTORY "storage_return_inventory" +///(obj/item/insertion_candidate, mob/user, silent) - returns bool +#define COMSIG_TRY_STORAGE_CAN_INSERT "storage_can_equip" + +// /datum/component/two_handed signals + +///from base of datum/component/two_handed/proc/wield(mob/living/carbon/user): (/mob/user) +#define COMSIG_TWOHANDED_WIELD "twohanded_wield" + #define COMPONENT_TWOHANDED_BLOCK_WIELD (1<<0) +///from base of datum/component/two_handed/proc/unwield(mob/living/carbon/user): (/mob/user) +#define COMSIG_TWOHANDED_UNWIELD "twohanded_unwield" + +// /datum/action signals + +///from base of datum/action/proc/Trigger(): (datum/action) +#define COMSIG_ACTION_TRIGGER "action_trigger" + #define COMPONENT_ACTION_BLOCK_TRIGGER (1<<0) + +//Xenobio hotkeys + +///from slime CtrlClickOn(): (/mob) +#define COMSIG_XENO_SLIME_CLICK_CTRL "xeno_slime_click_ctrl" +///from slime AltClickOn(): (/mob) +#define COMSIG_XENO_SLIME_CLICK_ALT "xeno_slime_click_alt" +///from slime ShiftClickOn(): (/mob) +#define COMSIG_XENO_SLIME_CLICK_SHIFT "xeno_slime_click_shift" +///from turf ShiftClickOn(): (/mob) +#define COMSIG_XENO_TURF_CLICK_SHIFT "xeno_turf_click_shift" +///from turf AltClickOn(): (/mob) +#define COMSIG_XENO_TURF_CLICK_CTRL "xeno_turf_click_alt" +///from monkey CtrlClickOn(): (/mob) +#define COMSIG_XENO_MONKEY_CLICK_CTRL "xeno_monkey_click_ctrl" + +///SSalarm signals +#define COMSIG_TRIGGERED_ALARM "ssalarm_triggered" +#define COMSIG_CANCELLED_ALARM "ssalarm_cancelled" diff --git a/code/__defines/rust_g.dm b/code/__defines/rust_g.dm new file mode 100644 index 0000000000..9c9e2637ce --- /dev/null +++ b/code/__defines/rust_g.dm @@ -0,0 +1,103 @@ +// rust_g.dm - DM API for rust_g extension library +// +// To configure, create a `rust_g.config.dm` and set what you care about from +// the following options: +// +// #define RUST_G "path/to/rust_g" +// Override the .dll/.so detection logic with a fixed path or with detection +// logic of your own. +// +// #define RUSTG_OVERRIDE_BUILTINS +// Enable replacement rust-g functions for certain builtins. Off by default. + +#ifndef RUST_G +// Default automatic RUST_G detection. +// On Windows, looks in the standard places for `rust_g.dll`. +// On Linux, looks in `.`, `$LD_LIBRARY_PATH`, and `~/.byond/bin` for either of +// `librust_g.so` (preferred) or `rust_g` (old). + +/* This comment bypasses grep checks */ /var/__rust_g + +/proc/__detect_rust_g() + if (world.system_type == UNIX) + if (fexists("./librust_g.so")) + // No need for LD_LIBRARY_PATH badness. + return __rust_g = "./librust_g.so" + else if (fexists("./rust_g")) + // Old dumb filename. + return __rust_g = "./rust_g" + else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/rust_g")) + // Old dumb filename in `~/.byond/bin`. + return __rust_g = "rust_g" + else + // It's not in the current directory, so try others + return __rust_g = "librust_g.so" + else + return __rust_g = "rust_g" + +#define RUST_G (__rust_g || __detect_rust_g()) +#endif + +#define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET" +#define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB" +#define RUSTG_JOB_ERROR "JOB PANICKED" + +#define rustg_dmi_strip_metadata(fname) call(RUST_G, "dmi_strip_metadata")(fname) +#define rustg_dmi_create_png(path, width, height, data) call(RUST_G, "dmi_create_png")(path, width, height, data) + +#define rustg_noise_get_at_coordinates(seed, x, y) call(RUST_G, "noise_get_at_coordinates")(seed, x, y) + +#define rustg_file_read(fname) call(RUST_G, "file_read")(fname) +#define rustg_file_exists(fname) call(RUST_G, "file_exists")(fname) +#define rustg_file_write(text, fname) call(RUST_G, "file_write")(text, fname) +#define rustg_file_append(text, fname) call(RUST_G, "file_append")(text, fname) + +#ifdef RUSTG_OVERRIDE_BUILTINS +#define file2text(fname) rustg_file_read("[fname]") +#define text2file(text, fname) rustg_file_append(text, "[fname]") +#endif + +#define rustg_git_revparse(rev) call(RUST_G, "rg_git_revparse")(rev) +#define rustg_git_commit_date(rev) call(RUST_G, "rg_git_commit_date")(rev) + +#define rustg_hash_string(algorithm, text) call(RUST_G, "hash_string")(algorithm, text) +#define rustg_hash_file(algorithm, fname) call(RUST_G, "hash_file")(algorithm, fname) + +#define RUSTG_HASH_MD5 "md5" +#define RUSTG_HASH_SHA1 "sha1" +#define RUSTG_HASH_SHA256 "sha256" +#define RUSTG_HASH_SHA512 "sha512" + +#ifdef RUSTG_OVERRIDE_BUILTINS +#define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing)) +#endif + +#define rustg_json_is_valid(text) (call(RUST_G, "json_is_valid")(text) == "true") + +#define rustg_log_write(fname, text, format) call(RUST_G, "log_write")(fname, text, format) +/proc/rustg_log_close_all() return call(RUST_G, "log_close_all")() + +#define rustg_url_encode(text) call(RUST_G, "url_encode")(text) +#define rustg_url_decode(text) call(RUST_G, "url_decode")(text) + +#ifdef RUSTG_OVERRIDE_BUILTINS +#define url_encode(text) rustg_url_encode(text) +#define url_decode(text) rustg_url_decode(text) +#endif + +#define RUSTG_HTTP_METHOD_GET "get" +#define RUSTG_HTTP_METHOD_PUT "put" +#define RUSTG_HTTP_METHOD_DELETE "delete" +#define RUSTG_HTTP_METHOD_PATCH "patch" +#define RUSTG_HTTP_METHOD_HEAD "head" +#define RUSTG_HTTP_METHOD_POST "post" +#define rustg_http_request_blocking(method, url, body, headers) call(RUST_G, "http_request_blocking")(method, url, body, headers) +#define rustg_http_request_async(method, url, body, headers) call(RUST_G, "http_request_async")(method, url, body, headers) +#define rustg_http_check_request(req_id) call(RUST_G, "http_check_request")(req_id) + +#define rustg_sql_connect_pool(options) call(RUST_G, "sql_connect_pool")(options) +#define rustg_sql_query_async(handle, query, params) call(RUST_G, "sql_query_async")(handle, query, params) +#define rustg_sql_query_blocking(handle, query, params) call(RUST_G, "sql_query_blocking")(handle, query, params) +#define rustg_sql_connected(handle) call(RUST_G, "sql_connected")(handle) +#define rustg_sql_disconnect_pool(handle) call(RUST_G, "sql_disconnect_pool")(handle) +#define rustg_sql_check_query(job_id) call(RUST_G, "sql_check_query")("[job_id]") diff --git a/code/__defines/species_languages_vr.dm b/code/__defines/species_languages_vr.dm index 54362278d4..8909238db2 100644 --- a/code/__defines/species_languages_vr.dm +++ b/code/__defines/species_languages_vr.dm @@ -9,6 +9,7 @@ #define LANGUAGE_DAEMON "Daemon" #define LANGUAGE_ENOCHIAN "Enochian" #define LANGUAGE_VESPINAE "Vespinae" +#define LANGUAGE_SPACER "Spacer" #define LANGUAGE_CHIMPANZEE "Chimpanzee" #define LANGUAGE_NEAERA "Neaera" diff --git a/code/__defines/vv.dm b/code/__defines/vv.dm index e71d6e2f8f..70ae1ff035 100644 --- a/code/__defines/vv.dm +++ b/code/__defines/vv.dm @@ -50,6 +50,7 @@ #define VV_HK_EXPOSE "expose" #define VV_HK_CALLPROC "proc_call" #define VV_HK_MARK "mark" +#define VV_HK_ADDCOMPONENT "addcomponent" // /atom #define VV_HK_ATOM_EXPLODE "turf_explode" diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index 757555f037..3bef9b4f15 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -1,25 +1,17 @@ //print an error message to world.log -// Fall back to using old format if we are not using rust-g -#ifdef RUST_G - #define WRITE_LOG(log, text) call(RUST_G, "log_write")(log, text) -#else - #define WRITE_LOG(log, text) log << "\[[time_stamp()]][text]" -#endif +//This is an external call, "true" and "false" are how rust parses out booleans +#define WRITE_LOG(log, text) rustg_log_write(log, text, "true") +#define WRITE_LOG_NO_FORMAT(log, text) rustg_log_write(log, text, "false") /* For logging round startup. */ /proc/start_log(log) - #ifndef RUST_G - log = file(log) - #endif WRITE_LOG(log, "START: Starting up [log_path].") return log /* Close open log handles. This should be called as late as possible, and no logging should hapen after. */ /proc/shutdown_logging() - #ifdef RUST_G - call(RUST_G, "log_close_all")() - #endif + rustg_log_close_all() /proc/error(msg) to_world_log("## ERROR: [msg]") diff --git a/code/_helpers/sorts/comparators.dm b/code/_helpers/sorts/comparators.dm index f4a8c575c9..704042531a 100644 --- a/code/_helpers/sorts/comparators.dm +++ b/code/_helpers/sorts/comparators.dm @@ -61,4 +61,7 @@ /proc/cmp_recipe_complexity_dsc(datum/recipe/A, datum/recipe/B) var/a_score = LAZYLEN(A.items) + LAZYLEN(A.reagents) + LAZYLEN(A.fruit) var/b_score = LAZYLEN(B.items) + LAZYLEN(B.reagents) + LAZYLEN(B.fruit) - return b_score - a_score \ No newline at end of file + return b_score - a_score + +/proc/cmp_typepaths_asc(A, B) + return sorttext("[B]","[A]") \ No newline at end of file diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index 77019ab7b9..52dada1cf9 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -381,3 +381,19 @@ . += copytext(text, last_found, found) last_found = found + delim_len while (found) + +/proc/type2parent(child) + var/string_type = "[child]" + var/last_slash = findlasttext(string_type, "/") + if(last_slash == 1) + switch(child) + if(/datum) + return null + if(/obj || /mob) + return /atom/movable + if(/area || /turf) + return /atom + else + return /datum + + return text2path(copytext(string_type, 1, last_slash)) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index eba949e02d..00ad3a0a58 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1605,3 +1605,7 @@ GLOBAL_REAL_VAR(list/stack_trace_storage) // Third one is the text that will be clickable. /proc/href(href_src, list/href_params, href_text) return "[href_text]" + +/proc/CallAsync(datum/source, proctype, list/arguments) + set waitfor = FALSE + return call(source, proctype)(arglist(arguments)) \ No newline at end of file diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 8f34599fba..ddfe620570 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -21,6 +21,8 @@ avoid code duplication. This includes items that may sometimes act as a standard // Called when the item is in the active hand, and clicked; alternately, there is an 'activate held object' verb or you can hit pagedown. /obj/item/proc/attack_self(mob/user) + if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_SELF, user) & COMPONENT_NO_INTERACT) + return return // Called at the start of resolve_attackby(), before the actual attack. @@ -35,10 +37,13 @@ avoid code duplication. This includes items that may sometimes act as a standard // No comment /atom/proc/attackby(obj/item/W, mob/user, var/attack_modifier, var/click_parameters) - return + if(SEND_SIGNAL(src, COMSIG_PARENT_ATTACKBY, W, user, click_parameters) & COMPONENT_NO_AFTERATTACK) + return TRUE + return FALSE /atom/movable/attackby(obj/item/W, mob/user, var/attack_modifier, var/click_parameters) - if(!(W.flags & NOBLUDGEON)) + . = ..() + if(!. && !(W.flags & NOBLUDGEON)) visible_message("[src] has been hit by [user] with [W].") /mob/living/attackby(obj/item/I, mob/user, var/attack_modifier, var/click_parameters) diff --git a/code/_onclick/observer_vr.dm b/code/_onclick/observer_vr.dm deleted file mode 100644 index b81ea955a4..0000000000 --- a/code/_onclick/observer_vr.dm +++ /dev/null @@ -1,21 +0,0 @@ -/obj/item/device/paicard/attack_ghost(mob/user as mob) - if(src.pai != null) //Have a person in them already? - user.examinate(src) - return - var/choice = input(user, "You sure you want to inhabit this PAI?") in list("Yes", "No") - var/pai_name = input(user, "Choose your character's name", "Character Name") as text - var/actual_pai_name = sanitize_name(pai_name) - var/pai_key - if (isnull(pai_name)) - return - if(choice == "Yes") - pai_key = user.key - else - return - var/turf/location = get_turf(src) - var/obj/item/device/paicard/card = new(location) - var/mob/living/silicon/pai/pai = new(card) - qdel(src) - pai.key = pai_key - card.setPersonality(pai) - pai.SetName(actual_pai_name) \ No newline at end of file diff --git a/code/controllers/subsystems/dcs.dm b/code/controllers/subsystems/dcs.dm new file mode 100644 index 0000000000..104c3eef31 --- /dev/null +++ b/code/controllers/subsystems/dcs.dm @@ -0,0 +1,54 @@ +PROCESSING_SUBSYSTEM_DEF(dcs) + name = "Datum Component System" + flags = SS_NO_INIT + wait = 1 SECONDS + + var/list/elements_by_type = list() + +/datum/controller/subsystem/processing/dcs/Recover() + comp_lookup = SSdcs.comp_lookup + +/datum/controller/subsystem/processing/dcs/proc/GetElement(list/arguments) + var/datum/element/eletype = arguments[1] + var/element_id = eletype + + if(!ispath(eletype, /datum/element)) + CRASH("Attempted to instantiate [eletype] as a /datum/element") + + if(initial(eletype.element_flags) & ELEMENT_BESPOKE) + element_id = GetIdFromArguments(arguments) + + . = elements_by_type[element_id] + if(.) + return + . = elements_by_type[element_id] = new eletype + +/**** + * Generates an id for bespoke elements when given the argument list + * Generating the id here is a bit complex because we need to support named arguments + * Named arguments can appear in any order and we need them to appear after ordered arguments + * We assume that no one will pass in a named argument with a value of null + **/ +/datum/controller/subsystem/processing/dcs/proc/GetIdFromArguments(list/arguments) + var/datum/element/eletype = arguments[1] + var/list/fullid = list("[eletype]") + var/list/named_arguments = list() + for(var/i in initial(eletype.id_arg_index) to length(arguments)) + var/key = arguments[i] + var/value + if(istext(key)) + value = arguments[key] + if(!(istext(key) || isnum(key))) + key = REF(key) + key = "[key]" // Key is stringified so numbers dont break things + if(!isnull(value)) + if(!(istext(value) || isnum(value))) + value = REF(value) + named_arguments["[key]"] = value + else + fullid += "[key]" + + if(length(named_arguments)) + named_arguments = sortList(named_arguments) + fullid += named_arguments + return list2params(fullid) diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index 9938fa20eb..5573b23ae8 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -284,9 +284,12 @@ SUBSYSTEM_DEF(garbage) if(isnull(D.gc_destroyed)) + if(SEND_SIGNAL(D, COMSIG_PARENT_PREQDELETED, force)) // Give the components a chance to prevent their parent from being deleted + return D.gc_destroyed = GC_CURRENTLY_BEING_QDELETED var/start_time = world.time var/start_tick = world.tick_usage + SEND_SIGNAL(D, COMSIG_PARENT_QDELETING, force) // Let the (remaining) components know about the result of Destroy var/hint = D.Destroy(force) // Let our friend know they're about to get fucked up. if(world.time != start_time) I.slept_destroy++ diff --git a/code/datums/components/README.md b/code/datums/components/README.md new file mode 100644 index 0000000000..03f7d3a587 --- /dev/null +++ b/code/datums/components/README.md @@ -0,0 +1,9 @@ +# Datum Component System (DCS) + +## Concept + +Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward it's arguments with a `SendSignal()` call. Now every component that want's to can also know about this happening. + +See [this thread](https://tgstation13.org/phpBB/viewtopic.php?f=5&t=22674) for an introduction to the system as a whole. + +### See/Define signals and their arguments in [__DEFINES\dcs\signals.dm](../../__DEFINES/dcs/signals.dm) diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm new file mode 100644 index 0000000000..4ada8af23b --- /dev/null +++ b/code/datums/components/_component.dm @@ -0,0 +1,537 @@ +/** + * # Component + * + * The component datum + * + * A component should be a single standalone unit + * of functionality, that works by receiving signals from it's parent + * object to provide some single functionality (i.e a slippery component) + * that makes the object it's attached to cause people to slip over. + * Useful when you want shared behaviour independent of type inheritance + */ +/datum/component + /** + * Defines how duplicate existing components are handled when added to a datum + * + * See [COMPONENT_DUPE_*][COMPONENT_DUPE_ALLOWED] definitions for available options + */ + var/dupe_mode = COMPONENT_DUPE_HIGHLANDER + + /** + * The type to check for duplication + * + * `null` means exact match on `type` (default) + * + * Any other type means that and all subtypes + */ + var/dupe_type + + /// The datum this components belongs to + var/datum/parent + + /** + * Only set to true if you are able to properly transfer this component + * + * At a minimum [RegisterWithParent][/datum/component/proc/RegisterWithParent] and [UnregisterFromParent][/datum/component/proc/UnregisterFromParent] should be used + * + * Make sure you also implement [PostTransfer][/datum/component/proc/PostTransfer] for any post transfer handling + */ + var/can_transfer = FALSE + +/** + * Create a new component. + * + * Additional arguments are passed to [Initialize()][/datum/component/proc/Initialize] + * + * Arguments: + * * datum/P the parent datum this component reacts to signals from + */ +/datum/component/New(list/raw_args) + parent = raw_args[1] + var/list/arguments = raw_args.Copy(2) + if(Initialize(arglist(arguments)) == COMPONENT_INCOMPATIBLE) + stack_trace("Incompatible [type] assigned to a [parent.type]! args: [json_encode(arguments)]") + qdel(src, TRUE, TRUE) + return + + _JoinParent(parent) + +/** + * Called during component creation with the same arguments as in new excluding parent. + * + * Do not call `qdel(src)` from this function, `return COMPONENT_INCOMPATIBLE` instead + */ +/datum/component/proc/Initialize(...) + return + +/** + * Properly removes the component from `parent` and cleans up references + * + * Arguments: + * * force - makes it not check for and remove the component from the parent + * * silent - deletes the component without sending a [COMSIG_COMPONENT_REMOVING] signal + */ +/datum/component/Destroy(force=FALSE, silent=FALSE) + if(!force && parent) + _RemoveFromParent() + if(!silent) + SEND_SIGNAL(parent, COMSIG_COMPONENT_REMOVING, src) + parent = null + return ..() + +/** + * Internal proc to handle behaviour of components when joining a parent + */ +/datum/component/proc/_JoinParent() + var/datum/P = parent + //lazy init the parent's dc list + var/list/dc = P.datum_components + if(!dc) + P.datum_components = dc = list() + + //set up the typecache + var/our_type = type + for(var/I in _GetInverseTypeList(our_type)) + var/test = dc[I] + if(test) //already another component of this type here + var/list/components_of_type + if(!length(test)) + components_of_type = list(test) + dc[I] = components_of_type + else + components_of_type = test + if(I == our_type) //exact match, take priority + var/inserted = FALSE + for(var/J in 1 to components_of_type.len) + var/datum/component/C = components_of_type[J] + if(C.type != our_type) //but not over other exact matches + components_of_type.Insert(J, I) + inserted = TRUE + break + if(!inserted) + components_of_type += src + else //indirect match, back of the line with ya + components_of_type += src + else //only component of this type, no list + dc[I] = src + + RegisterWithParent() + +/** + * Internal proc to handle behaviour when being removed from a parent + */ +/datum/component/proc/_RemoveFromParent() + var/datum/P = parent + var/list/dc = P.datum_components + for(var/I in _GetInverseTypeList()) + var/list/components_of_type = dc[I] + if(length(components_of_type)) // + var/list/subtracted = components_of_type - src + if(subtracted.len == 1) //only 1 guy left + dc[I] = subtracted[1] //make him special + else + dc[I] = subtracted + else //just us + dc -= I + if(!dc.len) + P.datum_components = null + + UnregisterFromParent() + +/** + * Register the component with the parent object + * + * Use this proc to register with your parent object + * + * Overridable proc that's called when added to a new parent + */ +/datum/component/proc/RegisterWithParent() + return + +/** + * Unregister from our parent object + * + * Use this proc to unregister from your parent object + * + * Overridable proc that's called when removed from a parent + * * + */ +/datum/component/proc/UnregisterFromParent() + return + +/** + * Register to listen for a signal from the passed in target + * + * This sets up a listening relationship such that when the target object emits a signal + * the source datum this proc is called upon, will recieve a callback to the given proctype + * Return values from procs registered must be a bitfield + * + * Arguments: + * * datum/target The target to listen for signals from + * * sig_type_or_types Either a string signal name, or a list of signal names (strings) + * * proctype The proc to call back when the signal is emitted + * * override If a previous registration exists you must explicitly set this + */ +/datum/proc/RegisterSignal(datum/target, sig_type_or_types, proctype, override = FALSE) + if(QDELETED(src) || QDELETED(target)) + return + + var/list/procs = signal_procs + if(!procs) + signal_procs = procs = list() + if(!procs[target]) + procs[target] = list() + var/list/lookup = target.comp_lookup + if(!lookup) + target.comp_lookup = lookup = list() + + var/list/sig_types = islist(sig_type_or_types) ? sig_type_or_types : list(sig_type_or_types) + for(var/sig_type in sig_types) + if(!override && procs[target][sig_type]) + stack_trace("[sig_type] overridden. Use override = TRUE to suppress this warning") + + procs[target][sig_type] = proctype + + if(!lookup[sig_type]) // Nothing has registered here yet + lookup[sig_type] = src + else if(lookup[sig_type] == src) // We already registered here + continue + else if(!length(lookup[sig_type])) // One other thing registered here + lookup[sig_type] = list(lookup[sig_type]=TRUE) + lookup[sig_type][src] = TRUE + else // Many other things have registered here + lookup[sig_type][src] = TRUE + + signal_enabled = TRUE + +/** + * Stop listening to a given signal from target + * + * Breaks the relationship between target and source datum, removing the callback when the signal fires + * + * Doesn't care if a registration exists or not + * + * Arguments: + * * datum/target Datum to stop listening to signals from + * * sig_typeor_types Signal string key or list of signal keys to stop listening to specifically + */ +/datum/proc/UnregisterSignal(datum/target, sig_type_or_types) + var/list/lookup = target.comp_lookup + if(!signal_procs || !signal_procs[target] || !lookup) + return + if(!islist(sig_type_or_types)) + sig_type_or_types = list(sig_type_or_types) + for(var/sig in sig_type_or_types) + if(!signal_procs[target][sig]) + continue + switch(length(lookup[sig])) + if(2) + lookup[sig] = (lookup[sig]-src)[1] + if(1) + stack_trace("[target] ([target.type]) somehow has single length list inside comp_lookup") + if(src in lookup[sig]) + lookup -= sig + if(!length(lookup)) + target.comp_lookup = null + break + if(0) + lookup -= sig + if(!length(lookup)) + target.comp_lookup = null + break + else + lookup[sig] -= src + + signal_procs[target] -= sig_type_or_types + if(!signal_procs[target].len) + signal_procs -= target + +/** + * Called on a component when a component of the same type was added to the same parent + * + * See [/datum/component/var/dupe_mode] + * + * `C`'s type will always be the same of the called component + */ +/datum/component/proc/InheritComponent(datum/component/C, i_am_original) + return + + +/** + * Called on a component when a component of the same type was added to the same parent with [COMPONENT_DUPE_SELECTIVE] + * + * See [/datum/component/var/dupe_mode] + * + * `C`'s type will always be the same of the called component + * + * return TRUE if you are absorbing the component, otherwise FALSE if you are fine having it exist as a duplicate component + */ +/datum/component/proc/CheckDupeComponent(datum/component/C, ...) + return + + +/** + * Callback Just before this component is transferred + * + * Use this to do any special cleanup you might need to do before being deregged from an object + */ +/datum/component/proc/PreTransfer() + return + +/** + * Callback Just after a component is transferred + * + * Use this to do any special setup you need to do after being moved to a new object + * + * Do not call `qdel(src)` from this function, `return COMPONENT_INCOMPATIBLE` instead + */ +/datum/component/proc/PostTransfer() + return COMPONENT_INCOMPATIBLE //Do not support transfer by default as you must properly support it + +/** + * Internal proc to create a list of our type and all parent types + */ +/datum/component/proc/_GetInverseTypeList(our_type = type) + //we can do this one simple trick + var/current_type = parent_type + . = list(our_type, current_type) + //and since most components are root level + 1, this won't even have to run + while (current_type != /datum/component) + current_type = type2parent(current_type) + . += current_type + +/** + * Internal proc to handle most all of the signaling procedure + * + * Will runtime if used on datums with an empty component list + * + * Use the [SEND_SIGNAL] define instead + */ +/datum/proc/_SendSignal(sigtype, list/arguments) + var/target = comp_lookup[sigtype] + if(!length(target)) + var/datum/C = target + if(!C.signal_enabled) + return NONE + var/proctype = C.signal_procs[src][sigtype] + return NONE | CallAsync(C, proctype, arguments) + . = NONE + for(var/I in target) + var/datum/C = I + if(!C.signal_enabled) + continue + var/proctype = C.signal_procs[src][sigtype] + . |= CallAsync(C, proctype, arguments) + +// The type arg is casted so initial works, you shouldn't be passing a real instance into this +/** + * Return any component assigned to this datum of the given type + * + * This will throw an error if it's possible to have more than one component of that type on the parent + * + * Arguments: + * * datum/component/c_type The typepath of the component you want to get a reference to + */ +/datum/proc/GetComponent(datum/component/c_type) + // RETURN_TYPE(c_type) + if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE) + stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]") + var/list/dc = datum_components + if(!dc) + return null + . = dc[c_type] + if(length(.)) + return .[1] + +// The type arg is casted so initial works, you shouldn't be passing a real instance into this +/** + * Return any component assigned to this datum of the exact given type + * + * This will throw an error if it's possible to have more than one component of that type on the parent + * + * Arguments: + * * datum/component/c_type The typepath of the component you want to get a reference to + */ +/datum/proc/GetExactComponent(datum/component/c_type) + // RETURN_TYPE(c_type) + if(initial(c_type.dupe_mode) == COMPONENT_DUPE_ALLOWED || initial(c_type.dupe_mode) == COMPONENT_DUPE_SELECTIVE) + stack_trace("GetComponent was called to get a component of which multiple copies could be on an object. This can easily break and should be changed. Type: \[[c_type]\]") + var/list/dc = datum_components + if(!dc) + return null + var/datum/component/C = dc[c_type] + if(C) + if(length(C)) + C = C[1] + if(C.type == c_type) + return C + return null + +/** + * Get all components of a given type that are attached to this datum + * + * Arguments: + * * c_type The component type path + */ +/datum/proc/GetComponents(c_type) + var/list/dc = datum_components + if(!dc) + return null + . = dc[c_type] + if(!length(.)) + return list(.) + +/** + * Creates an instance of `new_type` in the datum and attaches to it as parent + * + * Sends the [COMSIG_COMPONENT_ADDED] signal to the datum + * + * Returns the component that was created. Or the old component in a dupe situation where [COMPONENT_DUPE_UNIQUE] was set + * + * If this tries to add a component to an incompatible type, the component will be deleted and the result will be `null`. This is very unperformant, try not to do it + * + * Properly handles duplicate situations based on the `dupe_mode` var + */ +/datum/proc/_AddComponent(list/raw_args) + var/new_type = raw_args[1] + var/datum/component/nt = new_type + var/dm = initial(nt.dupe_mode) + var/dt = initial(nt.dupe_type) + + var/datum/component/old_comp + var/datum/component/new_comp + + if(ispath(nt)) + if(nt == /datum/component) + CRASH("[nt] attempted instantiation!") + else + new_comp = nt + nt = new_comp.type + + raw_args[1] = src + + if(dm != COMPONENT_DUPE_ALLOWED) + if(!dt) + old_comp = GetExactComponent(nt) + else + old_comp = GetComponent(dt) + if(old_comp) + switch(dm) + if(COMPONENT_DUPE_UNIQUE) + if(!new_comp) + new_comp = new nt(raw_args) + if(!QDELETED(new_comp)) + old_comp.InheritComponent(new_comp, TRUE) + QDEL_NULL(new_comp) + if(COMPONENT_DUPE_HIGHLANDER) + if(!new_comp) + new_comp = new nt(raw_args) + if(!QDELETED(new_comp)) + new_comp.InheritComponent(old_comp, FALSE) + QDEL_NULL(old_comp) + if(COMPONENT_DUPE_UNIQUE_PASSARGS) + if(!new_comp) + var/list/arguments = raw_args.Copy(2) + arguments.Insert(1, null, TRUE) + old_comp.InheritComponent(arglist(arguments)) + else + old_comp.InheritComponent(new_comp, TRUE) + if(COMPONENT_DUPE_SELECTIVE) + var/list/arguments = raw_args.Copy() + arguments[1] = new_comp + var/make_new_component = TRUE + for(var/i in GetComponents(new_type)) + var/datum/component/C = i + if(C.CheckDupeComponent(arglist(arguments))) + make_new_component = FALSE + QDEL_NULL(new_comp) + break + if(!new_comp && make_new_component) + new_comp = new nt(raw_args) + else if(!new_comp) + new_comp = new nt(raw_args) // There's a valid dupe mode but there's no old component, act like normal + else if(!new_comp) + new_comp = new nt(raw_args) // Dupes are allowed, act like normal + + if(!old_comp && !QDELETED(new_comp)) // Nothing related to duplicate components happened and the new component is healthy + SEND_SIGNAL(src, COMSIG_COMPONENT_ADDED, new_comp) + return new_comp + return old_comp + +/** + * Get existing component of type, or create it and return a reference to it + * + * Use this if the item needs to exist at the time of this call, but may not have been created before now + * + * Arguments: + * * component_type The typepath of the component to create or return + * * ... additional arguments to be passed when creating the component if it does not exist + */ +/datum/proc/LoadComponent(component_type, ...) + . = GetComponent(component_type) + if(!.) + return _AddComponent(args) + +/** + * Removes the component from parent, ends up with a null parent + */ +/datum/component/proc/RemoveComponent() + if(!parent) + return + var/datum/old_parent = parent + PreTransfer() + _RemoveFromParent() + parent = null + SEND_SIGNAL(old_parent, COMSIG_COMPONENT_REMOVING, src) + +/** + * Transfer this component to another parent + * + * Component is taken from source datum + * + * Arguments: + * * datum/component/target Target datum to transfer to + */ +/datum/proc/TakeComponent(datum/component/target) + if(!target || target.parent == src) + return + if(target.parent) + target.RemoveComponent() + target.parent = src + var/result = target.PostTransfer() + switch(result) + if(COMPONENT_INCOMPATIBLE) + var/c_type = target.type + qdel(target) + CRASH("Incompatible [c_type] transfer attempt to a [type]!") + + if(target == AddComponent(target)) + target._JoinParent() + +/** + * Transfer all components to target + * + * All components from source datum are taken + * + * Arguments: + * * /datum/target the target to move the components to + */ +/datum/proc/TransferComponents(datum/target) + var/list/dc = datum_components + if(!dc) + return + var/comps = dc[/datum/component] + if(islist(comps)) + for(var/datum/component/I in comps) + if(I.can_transfer) + target.TakeComponent(I) + else + var/datum/component/C = comps + if(C.can_transfer) + target.TakeComponent(comps) + +/** + * Return the object that is the host of any UI's that this component has + */ +/datum/component/tgui_host() + return parent diff --git a/code/datums/datum.dm b/code/datums/datum.dm index d806728f5d..1f9feeeacf 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -6,6 +6,10 @@ /datum var/gc_destroyed //Time when this object was destroyed. var/list/active_timers //for SStimer + var/list/datum_components //for /datum/components + var/list/comp_lookup + var/list/signal_procs + var/signal_enabled = FALSE var/weakref/weakref // Holder of weakref instance pointing to this datum var/datum_flags = NONE @@ -30,6 +34,38 @@ weakref = null // Clear this reference to ensure it's kept for as brief duration as possible. + //BEGIN: ECS SHIT + signal_enabled = FALSE + + var/list/dc = datum_components + if(dc) + var/all_components = dc[/datum/component] + if(length(all_components)) + for(var/I in all_components) + var/datum/component/C = I + qdel(C, FALSE, TRUE) + else + var/datum/component/C = all_components + qdel(C, FALSE, TRUE) + dc.Cut() + + var/list/lookup = comp_lookup + if(lookup) + for(var/sig in lookup) + var/list/comps = lookup[sig] + if(length(comps)) + for(var/i in comps) + var/datum/component/comp = i + comp.UnregisterSignal(src, sig) + else + var/datum/component/comp = comps + comp.UnregisterSignal(src, sig) + comp_lookup = lookup = null + + for(var/target in signal_procs) + UnregisterSignal(target, signal_procs[target]) + //END: ECS SHIT + tag = null SStgui.close_uis(src) return QDEL_HINT_QUEUE diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index aa28473fa3..95db63ff33 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -26,6 +26,7 @@ VV_DROPDOWN_OPTION(VV_HK_MARK, "Mark Object") VV_DROPDOWN_OPTION(VV_HK_DELETE, "Delete") VV_DROPDOWN_OPTION(VV_HK_EXPOSE, "Show VV To Player") + VV_DROPDOWN_OPTION(VV_HK_ADDCOMPONENT, "Add Component/Element") //This proc is only called if everything topic-wise is verified. The only verifications that should happen here is things like permission checks! //href_list is a reference, modifying it in these procs WILL change the rest of the proc in topic.dm of admin/view_variables! @@ -58,6 +59,34 @@ usr.client.mark_datum(src) IF_VV_OPTION(VV_HK_CALLPROC) usr.client.callproc_datum(src) + IF_VV_OPTION(VV_HK_ADDCOMPONENT) + if(!check_rights(NONE)) + return + var/list/names = list() + var/list/componentsubtypes = sortTim(subtypesof(/datum/component), /proc/cmp_typepaths_asc) + names += "---Components---" + names += componentsubtypes + names += "---Elements---" + names += sortTim(subtypesof(/datum/element), /proc/cmp_typepaths_asc) + var/result = input(usr, "Choose a component/element to add","better know what ur fuckin doin pal") as null|anything in names + if(!usr || !result || result == "---Components---" || result == "---Elements---") + return + if(QDELETED(src)) + to_chat(usr, "That thing doesn't exist anymore!", confidential = TRUE) + return + var/list/lst = usr.client.get_callproc_args() + if(!lst) + return + var/datumname = "error" + lst.Insert(1, result) + if(result in componentsubtypes) + datumname = "component" + _AddComponent(lst) + else + datumname = "element" + _AddElement(lst) + log_admin("[key_name(usr)] has added [result] [datumname] to [key_name(src)].") + message_admins("[key_name_admin(usr)] has added [result] [datumname] to [key_name_admin(src)].") /datum/proc/vv_get_header() . = list() diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm new file mode 100644 index 0000000000..caf02b65b9 --- /dev/null +++ b/code/datums/elements/_element.dm @@ -0,0 +1,55 @@ +/** + * A holder for simple behaviour that can be attached to many different types + * + * Only one element of each type is instanced during game init. + * Otherwise acts basically like a lightweight component. + */ +/datum/element + /// Option flags for element behaviour + var/element_flags = NONE + /** + * The index of the first attach argument to consider for duplicate elements + * + * Is only used when flags contains [ELEMENT_BESPOKE] + * + * This is infinity so you must explicitly set this + */ + var/id_arg_index = INFINITY + +/// Activates the functionality defined by the element on the given target datum +/datum/element/proc/Attach(datum/target) + // SHOULD_CALL_PARENT(1) + if(type == /datum/element) + return ELEMENT_INCOMPATIBLE + SEND_SIGNAL(target, COMSIG_ELEMENT_ATTACH, src) + if(element_flags & ELEMENT_DETACH) + RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Detach, override = TRUE) + +/// Deactivates the functionality defines by the element on the given datum +/datum/element/proc/Detach(datum/source, force) + SEND_SIGNAL(source, COMSIG_ELEMENT_DETACH, src) + // SHOULD_CALL_PARENT(1) + UnregisterSignal(source, COMSIG_PARENT_QDELETING) + +/datum/element/Destroy(force) + if(!force) + return QDEL_HINT_LETMELIVE + SSdcs.elements_by_type -= type + return ..() + +//DATUM PROCS + +/// Finds the singleton for the element type given and attaches it to src +/datum/proc/_AddElement(list/arguments) + var/datum/element/ele = SSdcs.GetElement(arguments) + arguments[1] = src + if(ele.Attach(arglist(arguments)) == ELEMENT_INCOMPATIBLE) + CRASH("Incompatible [arguments[1]] assigned to a [type]! args: [json_encode(args)]") + +/** + * Finds the singleton for the element type given and detaches it from src + * You only need additional arguments beyond the type if you're using [ELEMENT_BESPOKE] + */ +/datum/proc/_RemoveElement(list/arguments) + var/datum/element/ele = SSdcs.GetElement(arguments) + ele.Detach(src) diff --git a/code/datums/looping_sounds/item_sounds.dm b/code/datums/looping_sounds/item_sounds.dm index 4619acd3b5..855f4c5213 100644 --- a/code/datums/looping_sounds/item_sounds.dm +++ b/code/datums/looping_sounds/item_sounds.dm @@ -27,3 +27,19 @@ /datum/looping_sound/geiger/stop() . = ..() last_radiation = 0 + +/datum/looping_sound/small_motor + start_sound = 'sound/items/small_motor/motor_start_nopull.ogg' + start_length = 2 SECONDS + mid_sounds = list( + 'sound/items/small_motor/motor_idle.ogg', + 'sound/items/small_motor/motor_fast.ogg', + 'sound/items/small_motor/motor_faster.ogg' + ) + mid_length = 1.9 SECONDS //someone make this loop better please, i'm no good at sound. the clips should be 2 seconds exact but there's a gap if it's set to 2 + end_sound = 'sound/items/small_motor/motor_end.ogg' + var/speed = 1 + +/datum/looping_sound/small_motor/get_sound(starttime) + speed = clamp(speed, 1, 3) + return ..(starttime, mid_sounds[speed]) \ No newline at end of file diff --git a/code/datums/observation/moved.dm b/code/datums/observation/moved.dm index 311f9673f6..3cd61c1cc6 100644 --- a/code/datums/observation/moved.dm +++ b/code/datums/observation/moved.dm @@ -25,11 +25,6 @@ GLOBAL_DATUM_INIT(moved_event, /decl/observ/moved, new) /******************** * Movement Handling * ********************/ - -/atom/Entered(var/atom/movable/am, var/atom/old_loc) - . = ..() - GLOB.moved_event.raise_event(am, old_loc, am.loc) - /atom/movable/Entered(var/atom/movable/am, atom/old_loc) . = ..() if(GLOB.moved_event.has_listeners(am)) diff --git a/code/datums/supplypacks/engineering.dm b/code/datums/supplypacks/engineering.dm index 5d2bc99089..165c5fbfef 100644 --- a/code/datums/supplypacks/engineering.dm +++ b/code/datums/supplypacks/engineering.dm @@ -151,6 +151,13 @@ containername = "Singularity Generator crate" access = access_ce +/datum/supply_pack/eng/engine/tesla_gen + name = "Tesla Generator crate" + contains = list(/obj/machinery/the_singularitygen/tesla) + containertype = /obj/structure/closet/crate/secure/einstein + containername = "Tesla Generator crate" + access = access_ce + /datum/supply_pack/eng/engine/collector name = "Collector crate" contains = list(/obj/machinery/power/rad_collector = 3) diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index ec368f6c0b..3626cafb94 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -349,6 +349,13 @@ NOTE: there are two lists of areas in the end of this file: centcom and station 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 diff --git a/code/game/atoms.dm b/code/game/atoms.dm index b56db48dab..5ec5af0e6b 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -210,6 +210,7 @@ if(user.client?.prefs.examine_text_mode == EXAMINE_MODE_SWITCH_TO_PANEL) user.client.statpanel = "Examine" // Switch to stat panel + SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, output) return output // Don't make these call bicon or anything, these are what bicon uses. They need to return an icon. @@ -223,6 +224,7 @@ //called to set the atom's dir and used to add behaviour to dir-changes /atom/proc/set_dir(new_dir) + SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, new_dir) . = new_dir != dir dir = new_dir @@ -631,3 +633,17 @@ /atom/proc/speech_bubble(bubble_state = "", bubble_loc = src, list/bubble_recipients = list()) return + +/atom/Entered(atom/movable/AM, atom/old_loc) + . = ..() + GLOB.moved_event.raise_event(AM, old_loc, AM.loc) + SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, AM, old_loc) + +/atom/Exit(atom/movable/AM, atom/new_loc) + . = ..() + if(SEND_SIGNAL(src, COMSIG_ATOM_EXIT, AM, new_loc) & COMPONENT_ATOM_BLOCK_EXIT) + return FALSE + +/atom/Exited(atom/movable/AM, atom/new_loc) + . = ..() + SEND_SIGNAL(src, COMSIG_ATOM_EXITED, AM, new_loc) \ No newline at end of file diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 03185d31d3..64a14e29fb 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -300,8 +300,8 @@ var/global/list/datum/dna/gene/dna_genes[0] // Getter version of above. /datum/dna/proc/GetUIValueRange(var/block,var/maxvalue) if (block<=0) return 0 - var/value = GetUIValue(block) - return round(0.5 + (value / 4095) * maxvalue) + var/value = ((GetUIValue(block) / 4095) * maxvalue) + return round(0.5 + value) // Is the UI gene "on" or "off"? // For UI, this is simply a check of if the value is > 2050. @@ -386,8 +386,8 @@ var/global/list/datum/dna/gene/dna_genes[0] // Getter version of above. /datum/dna/proc/GetSEValueRange(var/block,var/maxvalue) if (block<=0) return 0 - var/value = GetSEValue(block) - return round(1 +(value / 4095)*maxvalue) + var/value = ((GetSEValue(block) / 4095) * maxvalue) + return round(0.5 + value) // Is the block "on" (1) or "off" (0)? (Un-assigned genes are always off.) /datum/dna/proc/GetSEState(var/block) diff --git a/code/game/jobs/job/exploration_vr.dm b/code/game/jobs/job/exploration_vr.dm index d555c531a2..7f3b57f0b1 100644 --- a/code/game/jobs/job/exploration_vr.dm +++ b/code/game/jobs/job/exploration_vr.dm @@ -130,6 +130,7 @@ var/const/SAR =(1<<14) outfit_type = /decl/hierarchy/outfit/job/assistant/explorer job_description = "Off-duty crew has no responsibilities or authority and is just there to spend their well-deserved time off." pto_type = PTO_EXPLORATION + economic_modifier = 5 /datum/alt_title/offduty_exp - title = "Off-duty Explorer" \ No newline at end of file + title = "Off-duty Explorer" diff --git a/code/game/jobs/job/offduty_vr.dm b/code/game/jobs/job/offduty_vr.dm index 416543956c..fa7e94f5a1 100644 --- a/code/game/jobs/job/offduty_vr.dm +++ b/code/game/jobs/job/offduty_vr.dm @@ -16,6 +16,7 @@ outfit_type = /decl/hierarchy/outfit/job/assistant/worker job_description = "Off-duty crew has no responsibilities or authority and is just there to spend their well-deserved time off." pto_type = PTO_CIVILIAN + economic_modifier = 2 /datum/alt_title/offduty_civ title = "Off-duty Worker" @@ -34,6 +35,7 @@ outfit_type = /decl/hierarchy/outfit/job/assistant/cargo job_description = "Off-duty crew has no responsibilities or authority and is just there to spend their well-deserved time off." pto_type = PTO_CARGO + economic_modifier = 2 /datum/alt_title/offduty_crg title = "Off-duty Cargo" @@ -52,6 +54,7 @@ outfit_type = /decl/hierarchy/outfit/job/assistant/engineer job_description = "Off-duty crew has no responsibilities or authority and is just there to spend their well-deserved time off." pto_type = PTO_ENGINEERING + economic_modifier = 5 /datum/alt_title/offduty_eng title = "Off-duty Engineer" @@ -70,6 +73,7 @@ outfit_type = /decl/hierarchy/outfit/job/assistant/medic job_description = "Off-duty crew has no responsibilities or authority and is just there to spend their well-deserved time off." pto_type = PTO_MEDICAL + economic_modifier = 5 /datum/alt_title/offduty_med title = "Off-duty Medic" @@ -88,6 +92,7 @@ outfit_type = /decl/hierarchy/outfit/job/assistant/scientist job_description = "Off-duty crew has no responsibilities or authority and is just there to spend their well-deserved time off." pto_type = PTO_SCIENCE + economic_modifier = 5 /datum/alt_title/offduty_sci title = "Off-duty Scientist" @@ -106,6 +111,7 @@ outfit_type = /decl/hierarchy/outfit/job/assistant/officer job_description = "Off-duty crew has no responsibilities or authority and is just there to spend their well-deserved time off." pto_type = PTO_SECURITY + economic_modifier = 4 /datum/alt_title/offduty_sec title = "Off-duty Officer" diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 3aec6c8c37..4e53589c2f 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -387,7 +387,7 @@ var/global/datum/controller/occupations/job_master if(job) //Equip custom gear loadout. - var/list/custom_equip_slots = list() //If more than one item takes the same slot, all after the first one spawn in storage. + var/list/custom_equip_slots = list() var/list/custom_equip_leftovers = list() if(H.client.prefs.gear && H.client.prefs.gear.len && !(job.mob_type & JOB_SILICON)) for(var/thing in H.client.prefs.gear) @@ -420,14 +420,15 @@ var/global/datum/controller/occupations/job_master I.implant_loadout(H) continue - // Try desperately (and sorta poorly) to equip the item + // Try desperately (and sorta poorly) to equip the item. Now with increased desperation! if(G.slot && !(G.slot in custom_equip_slots)) var/metadata = H.client.prefs.gear[G.display_name] if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head) custom_equip_leftovers += thing else if(H.equip_to_slot_or_del(G.spawn_item(H, metadata), G.slot)) to_chat(H, "Equipping you with \the [thing]!") - custom_equip_slots.Add(G.slot) + if(G.slot != slot_tie) + custom_equip_slots.Add(G.slot) else custom_equip_leftovers.Add(thing) else diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index cc18dc9e86..dde8b545b2 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -29,8 +29,7 @@ desc = "Used to control various station atmospheric systems. The light indicates the current air status of the area." icon = 'icons/obj/monitors_vr.dmi' //VOREStation Edit - Other icons icon_state = "alarm0" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER anchored = 1 use_power = USE_POWER_IDLE idle_power_usage = 80 diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 0f209a1a99..d15ea493ec 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -2,8 +2,7 @@ name = "button" icon = 'icons/obj/objects.dmi' icon_state = "launcherbtt" -// plane = TURF_PLANE //Can't have them under tables, oh well. -// layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER desc = "A remote control switch for something." var/id = null var/active = 0 diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 29783c4c9c..f04aba5a25 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -59,8 +59,7 @@ name = "Telescreen" desc = "Used for watching an empty arena." icon_state = "wallframe" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER icon_keyboard = null icon_screen = null light_range_on = 0 diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index 1a4ec083df..5fc8c77bd0 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -79,8 +79,7 @@ name = "guest pass terminal" desc = "Used to print temporary passes for people. Handy!" icon_state = "guest" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER icon_keyboard = null icon_screen = "pass" density = 0 diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index f3c930fe78..adf53c80a8 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -137,7 +137,7 @@ fields[++fields.len] = FIELD("Name", active1.fields["name"], null) fields[++fields.len] = FIELD("ID", active1.fields["id"], null) fields[++fields.len] = FIELD("Sex", active1.fields["sex"], "sex") - fields[++fields.len] = FIELD("Age", active1.fields["age"], "age") + fields[++fields.len] = FIELD("Age", "[active1.fields["age"]]", "age") fields[++fields.len] = FIELD("Fingerprint", active1.fields["fingerprint"], "fingerprint") fields[++fields.len] = FIELD("Physical Status", active1.fields["p_stat"], "p_stat") fields[++fields.len] = FIELD("Mental Status", active1.fields["m_stat"], "m_stat") diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index b7c8ecc45b..0b6ab77d7a 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -148,7 +148,7 @@ fields[++fields.len] = FIELD("ID", active1.fields["id"], "id") fields[++fields.len] = FIELD("Entity Classification", active1.fields["brain_type"], "brain_type") fields[++fields.len] = FIELD("Sex", active1.fields["sex"], "sex") - fields[++fields.len] = FIELD("Age", active1.fields["age"], "age") + fields[++fields.len] = FIELD("Age", "[active1.fields["age"]]", "age") fields[++fields.len] = FIELD("Rank", active1.fields["rank"], "rank") fields[++fields.len] = FIELD("Fingerprint", active1.fields["fingerprint"], "fingerprint") fields[++fields.len] = FIELD("Physical Status", active1.fields["p_stat"], null) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 521f07cf67..4fa8a41901 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -148,6 +148,7 @@ obj/machinery/door/airlock/Destroy() obj/machinery/airlock_sensor icon = 'icons/obj/airlock_machines.dmi' icon_state = "airlock_sensor_off" + layer = ABOVE_WINDOW_LAYER name = "airlock sensor" desc = "Sends atmospheric readings to a nearby controller." @@ -233,6 +234,7 @@ obj/machinery/airlock_sensor/airlock_exterior/shuttle/return_air() obj/machinery/access_button icon = 'icons/obj/airlock_machines.dmi' icon_state = "access_button_standby" + layer = ABOVE_WINDOW_LAYER name = "access button" anchored = 1 diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 30e0d6f82f..f4d9c900ed 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -22,6 +22,7 @@ name = "Door Timer" icon = 'icons/obj/status_display.dmi' icon_state = "frame" + layer = ABOVE_WINDOW_LAYER desc = "A remote control for a door." req_access = list(access_brig) anchored = 1.0 // can't pick it up diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 262ffacf41..96a7e15aa0 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -15,6 +15,7 @@ var/list/dummy_terminals = list() var/cycle_to_external_air = 0 valid_actions = list("cycle_ext", "cycle_int", "force_ext", "force_int", "abort", "purge", "secure") + layer = ABOVE_WINDOW_LAYER /obj/machinery/embedded_controller/radio/airlock/Destroy() // TODO - Leshana - Implement dummy terminals diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm index e80869e4d9..315d470432 100644 --- a/code/game/machinery/fire_alarm.dm +++ b/code/game/machinery/fire_alarm.dm @@ -6,8 +6,7 @@ FIRE ALARM desc = "\"Pull this in case of emergency\". Thus, keep pulling it forever." icon = 'icons/obj/monitors.dmi' icon_state = "fire0" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER var/detecting = 1.0 var/working = 1.0 var/time = 10.0 diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 5aa42ff26a..cbd688b643 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -4,6 +4,7 @@ desc = "A wall-mounted flashbulb device." icon = 'icons/obj/stationobjs.dmi' icon_state = "mflash1" + layer = ABOVE_WINDOW_LAYER var/id = null var/range = 2 //this is roughly the size of brig cell var/disable = 0 diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm index ee887db2f5..70a2e3ce4c 100755 --- a/code/game/machinery/igniter.dm +++ b/code/game/machinery/igniter.dm @@ -48,6 +48,7 @@ desc = "A wall-mounted ignition device." icon = 'icons/obj/stationobjs.dmi' icon_state = "migniter" + layer = ABOVE_WINDOW_LAYER var/id = null var/disable = 0 var/last_spark = 0 diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 81efc0f42b..a208e6eefd 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -6,6 +6,7 @@ desc = "It turns lights on and off. What are you, simple?" icon = 'icons/obj/power_vr.dmi' // VOREStation Edit icon_state = "light1" + layer = ABOVE_WINDOW_LAYER anchored = 1.0 use_power = USE_POWER_IDLE idle_power_usage = 10 diff --git a/code/game/machinery/neonsign.dm b/code/game/machinery/neonsign.dm index bdaa3b62fd..742a810d4a 100644 --- a/code/game/machinery/neonsign.dm +++ b/code/game/machinery/neonsign.dm @@ -4,6 +4,7 @@ desc = "Small wall-mounted electronic sign" icon = 'icons/obj/neonsigns.dmi' icon_state = "sign_off" + layer = ABOVE_WINDOW_LAYER plane = MOB_PLANE use_power = USE_POWER_IDLE idle_power_usage = 2 diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index de85f95e9a..c23d02f4d0 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -126,8 +126,7 @@ GLOBAL_LIST_BOILERPLATE(allCasters, /obj/machinery/newscaster) desc = "A standard newsfeed handler for use on commercial space stations. All the news you absolutely have no use for, in one place!" icon = 'icons/obj/terminals_vr.dmi' //VOREStation Edit icon_state = "newscaster_normal" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER var/isbroken = 0 //1 if someone banged it with something heavy var/ispowered = 1 //starts powered, changes with power_change() //var/list/datum/feed_channel/channel_list = list() //This list will contain the names of the feed channels. Each name will refer to a data region where the messages of the feed channels are stored. diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 86b339e6d5..a24bc582b9 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -28,8 +28,7 @@ var/list/obj/machinery/requests_console/allConsoles = list() anchored = 1 icon = 'icons/obj/terminals_vr.dmi' //VOREStation Edit icon_state = "req_comp0" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER circuit = /obj/item/weapon/circuitboard/request var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department var/list/message_log = list() //List of all messages diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 14b85a7861..949b8a4df6 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -13,7 +13,7 @@ icon = 'icons/obj/status_display.dmi' icon_state = "frame" plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER name = "status display" anchored = 1 density = 0 @@ -267,4 +267,4 @@ #undef FOND_SIZE #undef FONT_COLOR #undef FONT_STYLE -#undef SCROLL_SPEED \ No newline at end of file +#undef SCROLL_SPEED diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm index d0764221ba..4a88b7248b 100644 --- a/code/game/machinery/status_display_ai.dm +++ b/code/game/machinery/status_display_ai.dm @@ -59,6 +59,7 @@ var/list/ai_status_emotions = list( /obj/machinery/ai_status_display icon = 'icons/obj/status_display.dmi' icon_state = "frame" + layer = ABOVE_WINDOW_LAYER name = "AI display" anchored = 1 density = 0 diff --git a/code/game/machinery/vending_machines.dm b/code/game/machinery/vending_machines.dm index 8f09407df7..e04568c1d0 100644 --- a/code/game/machinery/vending_machines.dm +++ b/code/game/machinery/vending_machines.dm @@ -396,6 +396,7 @@ description_fluff = "NanoMed is NanoTrasen's medical science division, and provides almost all of the modern medbay essentials in-house at no extra charge. By using this vending machine, employees accept liability for products that may or may not be temporarily replaced by placebos or experimental treatments." product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?" icon_state = "wallmed" + layer = ABOVE_WINDOW_LAYER density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude products = list(/obj/item/stack/medical/bruise_pack = 2, /obj/item/stack/medical/ointment = 2, @@ -413,6 +414,7 @@ desc = "A wall-mounted version of the NanoMed, containing only vital first aid equipment." description_fluff = "NanoMed is NanoTrasen's medical science division, and provides almost all of the modern medbay essentials in-house at no extra charge. By using this vending machine, employees accept liability for products that may or may not be temporarily replaced by placebos or experimental treatments." icon_state = "wallmed" + layer = ABOVE_WINDOW_LAYER density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude products = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector = 5, /obj/item/weapon/reagent_containers/syringe/antitoxin = 3, @@ -814,3 +816,53 @@ /obj/item/stack/cable_coil/random = 4) premium = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1) contraband = list(/obj/item/weapon/storage/box/wormcan/deluxe = 1) + + +/obj/machinery/vending/virtual_autodrobe + name = "Virtual AutoDrobe" + desc = "A virtual vending machine for virtual avatar customization." + icon_state = "Theater" + product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!" + products = list(/obj/item/weapon/storage/box/syndie_kit/chameleon = 20) + + +/obj/machinery/vending/deathmatch + name = "Annihilation Shop (Green)" + desc = "A virtual vending machine for virtual murder equipment. This one's for green team." + products = list(/obj/item/weapon/melee/energy/sword = 5, + /obj/item/weapon/melee/energy/axe = 5, + /obj/item/weapon/melee/baton/loaded = 5, + /obj/item/weapon/gun/energy/laser = 5, + /obj/item/weapon/gun/projectile/shotgun/pump/combat = 5, + /obj/item/ammo_magazine/clip/c12g/pellet = 40, + /obj/item/ammo_magazine/clip/c12g = 50, + /obj/item/weapon/storage/box/flashbangs = 2, + /obj/item/clothing/head/helmet/swat = 5, + /obj/item/clothing/suit/armor/vest = 5, + /obj/item/clothing/head/helmet/thunderdome = 5, + /obj/item/clothing/shoes/brown = 5, + /obj/item/clothing/suit/armor/tdome/green = 5, + /obj/item/clothing/under/color/green = 5, + /obj/item/weapon/reagent_containers/pill/adminordrazine = 10, + /obj/item/weapon/tool/crowbar = 1) + + +/obj/machinery/vending/deathmatch/red + name = "Annihilation Shop (Red)" + desc = "A virtual vending machine for virtual murder equipment. This one's for red team." + products = list(/obj/item/weapon/melee/energy/sword = 5, + /obj/item/weapon/melee/energy/axe = 5, + /obj/item/weapon/melee/baton/loaded = 5, + /obj/item/weapon/gun/energy/laser = 5, + /obj/item/weapon/gun/projectile/shotgun/pump/combat = 5, + /obj/item/ammo_magazine/clip/c12g/pellet = 40, + /obj/item/ammo_magazine/clip/c12g = 50, + /obj/item/weapon/storage/box/flashbangs = 2, + /obj/item/clothing/head/helmet/swat = 5, + /obj/item/clothing/suit/armor/vest = 5, + /obj/item/clothing/head/helmet/thunderdome = 5, + /obj/item/clothing/shoes/brown = 5, + /obj/item/clothing/suit/armor/tdome/red = 5, + /obj/item/clothing/under/color/red = 5, + /obj/item/weapon/reagent_containers/pill/adminordrazine = 10, + /obj/item/weapon/tool/crowbar = 1) diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 77e463c0d0..c3850ad0dd 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -33,23 +33,29 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) QDEL_NULL(radio) return ..() -/obj/item/device/paicard/attack_ghost(mob/observer/dead/user) - if(istype(user) && user.can_admin_interact()) - switch(alert(user, "Would you like to become a pAI by force? (Admin)", "pAI Creation", "Yes", "No")) - if("Yes") - // Copied from paiController/Topic - var/mob/living/silicon/pai/pai = new(src) - pai.name = user.name - pai.real_name = pai.name - pai.key = user.key +// VOREStation Edit - Allow everyone to become a pAI +/obj/item/device/paicard/attack_ghost(mob/user as mob) + if(pai != null) //Have a person in them already? + return ..() - setPersonality(pai) - looking_for_personality = FALSE + var/choice = input(user, "You sure you want to inhabit this PAI?") in list("Yes", "No") + if(choice == "No") + return ..() - if(pai.mind) - update_antag_icons(pai.mind) + var/pai_name = input(user, "Choose your character's name", "Character Name") as text + var/actual_pai_name = sanitize_name(pai_name) + if(isnull(actual_pai_name)) + return ..() + + var/turf/location = get_turf(src) + var/obj/item/device/paicard/card = new(location) + var/mob/living/silicon/pai/new_pai = new(card) + qdel(src) + new_pai.key = user.key + card.setPersonality(new_pai) + new_pai.SetName(actual_pai_name) return ..() - +// VOREStation Edit End /obj/item/device/paicard/attack_self(mob/user) if (!in_range(src, user)) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index df39eeaf02..0833d5744b 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -3,8 +3,7 @@ desc = "Talk through this." icon = 'icons/obj/radio_vr.dmi' //VOREStation Edit - New Icon icon_state = "intercom" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER anchored = 1 w_class = ITEMSIZE_LARGE canhear_range = 7 //VOREStation Edit 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 99eba1931c..098926f535 100644 --- a/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm +++ b/code/game/objects/items/stacks/tiles/fifty_spawner_tiles.dm @@ -4,6 +4,10 @@ name = "stack of grass" type_to_spawn = /obj/item/stack/tile/grass +/obj/fiftyspawner/grass/sif + name = "stack of sifgrass" + type_to_spawn = /obj/item/stack/tile/grass/sif + /obj/fiftyspawner/wood name = "stack of wood" type_to_spawn = /obj/item/stack/tile/wood diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index f7282464e2..d2a6522ce2 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -41,6 +41,12 @@ no_variants = FALSE drop_sound = 'sound/items/drop/herb.ogg' pickup_sound = 'sound/items/pickup/herb.ogg' + +/obj/item/stack/tile/grass/sif + name = "sivian grass tile" + singular_name = "sivian grass floor tile" + desc = "A patch of grass like those that decorate the plains of Sif." + /* * Wood */ diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm index 0433d9041d..4391901918 100644 --- a/code/game/objects/items/toys/toys.dm +++ b/code/game/objects/items/toys/toys.dm @@ -114,6 +114,18 @@ w_class = ITEMSIZE_LARGE drop_sound = 'sound/items/drop/rubber.ogg' +/obj/item/toy/colorballoon /// To color it, VV the 'color' var with a hex color code with the # included. + name = "balloon" + desc = "It's a plain little balloon. Comes in many colors!" + throwforce = 0 + throw_speed = 4 + throw_range = 20 + force = 0 + icon = 'icons/obj/weapons.dmi' + icon_state = "colorballoon" + w_class = ITEMSIZE_LARGE + drop_sound = 'sound/items/drop/rubber.ogg' + /* * Fake telebeacon */ @@ -1438,4 +1450,36 @@ name = "purple king" desc = "A large king piece for playing chess. It's made of a purple-colored glass." description_info = "The King can move exactly one square horizontally, vertically, or diagonally. If your opponent captures this piece, you lose." - icon_state = "b-king" \ No newline at end of file + icon_state = "b-king" + +/// Balloon structures + +/obj/structure/balloon + name = "generic balloon" + desc = "A generic balloon. How boring." + icon = 'icons/obj/toy.dmi' + icon_state = "ghostballoon" + anchored = 0 + density = 0 + +/obj/structure/balloon/attack_hand(mob/user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + + if(user.a_intent == I_HELP) + user.visible_message("\The [user] pokes [src]!","You poke [src]!") + else if (user.a_intent == I_HURT) + user.visible_message("\The [user] punches [src]!","You punch [src]!") + else if (user.a_intent == I_GRAB) + user.visible_message("\The [user] attempts to pop [src]!","You attempt to pop [src]!") + else + user.visible_message("\The [user] lightly bats the [src].","You lightly bat the [src].") + +/obj/structure/balloon/bat + name = "giant bat balloon" + desc = "A large balloon in the shape of a spooky bat with orange eyes." + icon_state = "batballoon" + +/obj/structure/balloon/ghost + name = "giant ghost balloon" + desc = "Oh no, it's a ghost! Oh wait, it's just a balloon. Phew!" + icon_state = "ghostballoon" \ No newline at end of file diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index 19eaf7f776..cbf03b4535 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -152,4 +152,4 @@ ..(loc, "steel") /obj/item/weapon/material/shard/phoron/New(loc) - ..(loc, "phglass") + ..(loc, "borosilicate glass") diff --git a/code/game/objects/items/weapons/shields_vr.dm b/code/game/objects/items/weapons/shields_vr.dm index acaa4a58fd..a9bce1d548 100644 --- a/code/game/objects/items/weapons/shields_vr.dm +++ b/code/game/objects/items/weapons/shields_vr.dm @@ -79,6 +79,15 @@ desc = "A shield issued to exploration teams to help protect them when advancing into the unknown. It is lighter and cheaper but less protective than some of its counterparts. It has a flashlight straight in the middle to help draw attention. This one is POURPEL" icon_state = "explorer_shield_P" +/obj/item/weapon/shield/riot/explorer/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/material/knife/machete)) + if(cooldown < world.time - 25) + user.visible_message("[user] bashes [src] with [W]!") + playsound(src, 'sound/effects/shieldbash.ogg', 50, 1) + cooldown = world.time + else + ..() + /obj/item/weapon/shield/riot/explorer/purple/update_icon() if(on) icon_state = "explorer_shield_P_lighted" diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 034e37ff8e..7519525dd2 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -178,6 +178,7 @@ desc = "It doesn't seem all that secure. Oh well, it'll do." icon = 'icons/obj/storage.dmi' icon_state = "safe" + layer = ABOVE_WINDOW_LAYER icon_opened = "safe0" icon_locking = "safeb" icon_sparking = "safespark" diff --git a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm index b90a7961e2..9075c87272 100644 --- a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm +++ b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm @@ -1380,6 +1380,36 @@ "glass" = COLOR_WHITE ) +// Wall cabinets +/decl/closet_appearance/wall_double + base_icon = 'icons/obj/closets/bases/wall_double.dmi' + decal_icon = 'icons/obj/closets/decals/wall_double.dmi' + decals = list( + "vent" + ) + extra_decals = null + +/decl/closet_appearance/wall_double/kitchen + decals = null + color = COLOR_OFF_WHITE + +/decl/closet_appearance/wall_double/medical + decals = null + color = COLOR_OFF_WHITE + extra_decals = list( + "stripe_outer" = COLOR_BLUE_GRAY, + "stripe_inner" = COLOR_OFF_WHITE, + "cross" = COLOR_BLUE_GRAY + ) + +/decl/closet_appearance/wall_double/fire_safety + color = COLOR_RED_LIGHT + decals = null + extra_decals = list( + "stripes" = COLOR_OFF_WHITE, + "glass" = COLOR_WHITE + ) + // Carts /decl/closet_appearance/cart color = COLOR_GRAY20 diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm index 184b39e924..d0e260c220 100644 --- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm @@ -10,7 +10,7 @@ anchored = 1 store_mobs = 0 -//spawns endless (3 sets) amounts of breathmask, emergency oxy tank and crowbar +//spawns 2 sets of breathmask, emergency oxy tank and crowbar /obj/structure/closet/walllocker/emerglocker name = "emergency locker" @@ -54,3 +54,130 @@ /obj/structure/closet/walllocker/emerglocker/east pixel_x = 32 dir = EAST + +//VOREStation Add Start +/obj/structure/closet/walllocker/medical + name = "first-aid closet" + desc = "It's wall-mounted storage unit for first aid supplies." + closet_appearance = /decl/closet_appearance/wall/medical + +/obj/structure/closet/walllocker/medical/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker/medical/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker/medical/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker/medical/east + pixel_x = 32 + dir = EAST +//VOREStation Add End + +//double-size "cabinet" lockers, from Killian +/obj/structure/closet/walllocker_double + desc = "A wall mounted storage cabinet." + name = "Wall Cabinet" + icon = 'icons/obj/closets/bases/wall_double.dmi' + closet_appearance = /decl/closet_appearance/wall_double + density = 0 + anchored = 1 + plane = TURF_PLANE + layer = ABOVE_TURF_LAYER + +/obj/structure/closet/walllocker_double/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/east + pixel_x = 32 + dir = EAST + +/obj/structure/closet/walllocker_double/kitchen + desc = "A wall mounted storage cabinet, for the kitchen. Now where's the flour gone..?" + name = "Kitchen Cabinet" + icon = 'icons/obj/closets/bases/wall_double.dmi' + closet_appearance = /decl/closet_appearance/wall_double/kitchen + density = 0 + anchored = 1 + +/obj/structure/closet/walllocker_double/kitchen/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/kitchen/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/kitchen/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/kitchen/east + pixel_x = 32 + dir = EAST + +/obj/structure/closet/walllocker_double/medical + name = "Medical Cabinet" + desc = "A wall mounted medical supply cabinet. Probably full of drugs!" //not actually full of drugs, sorry! + closet_appearance = /decl/closet_appearance/wall_double/medical + +/obj/structure/closet/walllocker_double/medical/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/medical/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/medical/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/medical/east + pixel_x = 32 + dir = EAST + +/obj/structure/closet/walllocker_double/hydrant + name = "fire-safety closet" + desc = "It's a storage cabinet packed with fire-fighting supplies." + closet_appearance = /decl/closet_appearance/wall_double/fire_safety + anchored = 1 + density = 0 + wall_mounted = 1 + + starts_with = list( + /obj/item/clothing/suit/fire/firefighter, + /obj/item/clothing/mask/gas, + /obj/item/device/flashlight, + /obj/item/weapon/tank/oxygen/red, + /obj/item/weapon/extinguisher, + /obj/item/clothing/head/hardhat/red) + +/obj/structure/closet/walllocker_double/hydrant/north + pixel_y = 32 + dir = SOUTH + +/obj/structure/closet/walllocker_double/hydrant/south + pixel_y = -32 + dir = NORTH + +/obj/structure/closet/walllocker_double/hydrant/west + pixel_x = -32 + dir = WEST + +/obj/structure/closet/walllocker_double/hydrant/east + pixel_x = 32 + dir = EAST diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index ed3669247a..a5717bdf6e 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -3,8 +3,7 @@ desc = "A small wall mounted cabinet designed to hold a fire extinguisher." icon = 'icons/obj/closet.dmi' icon_state = "extinguisher_closed" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER anchored = 1 density = 0 var/obj/item/weapon/extinguisher/has_extinguisher diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm index 2e2251fabe..bccdcf56c3 100644 --- a/code/game/objects/structures/fireaxe.dm +++ b/code/game/objects/structures/fireaxe.dm @@ -5,6 +5,7 @@ var/obj/item/weapon/material/twohanded/fireaxe/fireaxe icon = 'icons/obj/closet.dmi' //Not bothering to move icons out for now. But its dumb still. icon_state = "fireaxe1000" + layer = ABOVE_WINDOW_LAYER anchored = 1 density = 0 var/open = 0 diff --git a/code/game/objects/structures/flora/flora_vr.dm b/code/game/objects/structures/flora/flora_vr.dm index 2e27319770..b7f722324c 100644 --- a/code/game/objects/structures/flora/flora_vr.dm +++ b/code/game/objects/structures/flora/flora_vr.dm @@ -36,3 +36,66 @@ /obj/structure/flora/pumpkin/carved/owo desc = "A fat, freshly picked pumpkin. This one has a face carved into it! This one has large, round eyes and a squiggly, cat-like smiling mouth. Its pleasantly surprised expression seems to suggest that the pumpkin has noticed something about you." icon_state = "decor-jackolantern-owo" + +// Various decorá +/obj/structure/flora/log1 + name = "waterlogged trunk" + icon = 'icons/obj/flora/amayastuff.dmi' + desc = "A part of a felled tree. Moss is growing across it." + icon_state = "log1" + +/obj/structure/flora/log2 + name = "driftwood" + icon = 'icons/obj/flora/amayastuff.dmi' + desc = "Driftwood carelessly lost in the water." + icon_state = "log2" + +/obj/structure/flora/lily1 + name = "red flowered lilypads" + icon = 'icons/obj/flora/amayastuff.dmi' + desc = "A bunch of lilypads. A beautiful red flower grows in the middle of them." + icon_state = "lilypad1" + +/obj/structure/flora/lily2 + name = "yellow flowered lilypads" + icon = 'icons/obj/flora/amayastuff.dmi' + desc = "A few lilypads. A sunny yellow flower stems from the water and from between the lilypads." + icon_state = "lilypad2" + +/obj/structure/flora/lily3 + name = "lilypads" + icon = 'icons/obj/flora/amayastuff.dmi' + desc = "A group of flowerless lilypads." + icon_state = "lilypad3" + +/obj/structure/flora/smallbould + name = "small boulder" + icon = 'icons/obj/flora/amayastuff.dmi' + desc = "A small boulder, with its top smothered with moss." + icon_state = "smallerboulder" + +/obj/structure/flora/bboulder1 + name = "large boulder" + icon = 'icons/obj/flora/amayastuff.dmi' + desc = "Small stones sit beside this large boulder. Moss grows on the top of each of them." + icon_state = "bigboulder1" + density = 1 + +/obj/structure/flora/bboulder2 + name = "jagged large boulder" + icon = 'icons/obj/flora/amayastuff.dmi' + desc = "This boulder has had plates broken off it. Moss grows in the cracks and across the top." + icon_state = "bigboulder2" + density = 1 + +/obj/structure/flora/rocks1 + name = "rocks" + icon = 'icons/obj/flora/amayastuff.dmi' + desc = "A bunch of mossy rocks." + icon_state = "rocks1" + +/obj/structure/flora/rocks2 + name = "rocks" + icon = 'icons/obj/flora/amayastuff.dmi' + desc = "A bunch of mossy rocks." + icon_state = "rocks2" \ No newline at end of file diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 1473c8fe90..2af3c3ccce 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -4,6 +4,7 @@ desc = "A SalonPro Nano-Mirror(TM) brand mirror! The leading technology in hair salon products, utilizing nano-machinery to style your hair just right." icon = 'icons/obj/watercloset.dmi' icon_state = "mirror" + layer = ABOVE_WINDOW_LAYER density = 0 anchored = 1 var/shattered = 0 diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index 12aa7fbcaa..08133f1b72 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -146,6 +146,7 @@ var/list/flooring_types flags = TURF_REMOVE_SHOVEL icon = 'icons/turf/outdoors.dmi' icon_base = "grass_sif" + build_type = /obj/item/stack/tile/grass/sif has_base_range = 1 /decl/flooring/water diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 4ee0213f8f..1afb52566c 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -34,11 +34,6 @@ log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]") message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]") return - //VOREStation Add - No talking during voting - if(SSvote && SSvote.mode) - to_chat(src, "OOC is not allowed during voting.") - return - //VOREStation Add End if(findtext(msg, "discord.gg") && !config.allow_discord_links) to_chat(src, "Advertising discords is not allowed.") log_admin("[key_name(src)] has attempted to advertise a discord server in OOC: [msg]") diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm index 5cc16d06bc..4ce9dcf6fc 100644 --- a/code/modules/asset_cache/asset_list.dm +++ b/code/modules/asset_cache/asset_list.dm @@ -119,18 +119,14 @@ GLOBAL_LIST_EMPTY(asset_datums) if (size[SPRSZ_STRIPPED]) continue - #ifdef RUST_G // save flattened version var/fname = "data/spritesheets/[name]_[size_id].png" fcopy(size[SPRSZ_ICON], fname) - var/error = call(RUST_G, "dmi_strip_metadata")(fname) + var/error = rustg_dmi_strip_metadata(fname) if(length(error)) stack_trace("Failed to strip [name]_[size_id].png: [error]") size[SPRSZ_STRIPPED] = icon(fname) fdel(fname) - #else - #warn It looks like you don't have RUST_G enabled. Without RUST_G, the RPD icons will not function, so it strongly recommended you reenable it. - #endif /datum/asset/spritesheet/proc/generate_css() var/list/out = list() diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm index 858dfd48ce..6245e48d59 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm @@ -8,7 +8,7 @@ /datum/gear/choker/New() ..() - gear_tweaks = list(gear_tweak_free_color_choice) + gear_tweaks += gear_tweak_free_color_choice /datum/gear/collar display_name = "collar, silver" @@ -18,7 +18,7 @@ /datum/gear/collar/New() ..() - gear_tweaks = list(gear_tweak_collar_tag) + gear_tweaks += gear_tweak_collar_tag /datum/gear/collar/golden display_name = "collar, golden" @@ -106,4 +106,4 @@ /datum/gear/accessory/flops/New() ..() - gear_tweaks = list(gear_tweak_free_color_choice) + gear_tweaks += gear_tweak_free_color_choice 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 f56331bcbc..bf0148f510 100644 --- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm @@ -25,7 +25,7 @@ /datum/gear/fluff/collar/New() ..() - gear_tweaks = list(gear_tweak_collar_tag) + gear_tweaks += gear_tweak_collar_tag // 0-9 CKEYS /datum/gear/fluff/malady_crop @@ -732,6 +732,13 @@ character_name = list("Tiemli Kroto") allowed_roles = list("Roboticist") +/datum/gear/fluff/clara_flask + path = /obj/item/weapon/reagent_containers/food/drinks/glass2/fluff/claraflask + display_name = "Clara's Vacuum Flask" + ckeywhitelist = list("rboys2") + character_name = list("Clara Mali") + cost = 1 + // S CKEYS /datum/gear/fluff/brynhild_medal path = /obj/item/clothing/accessory/medal/silver/valor diff --git a/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm b/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm index c6c51f5bbd..269f9e7aa9 100644 --- a/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm @@ -12,7 +12,7 @@ /datum/gear/gloves/colored/New() ..() - gear_tweaks = list(gear_tweak_free_color_choice) + gear_tweaks += gear_tweak_free_color_choice /datum/gear/gloves/latex/colorable @@ -21,7 +21,7 @@ /datum/gear/gloves/latex/colorable/New() ..() - gear_tweaks = list(gear_tweak_free_color_choice) + gear_tweaks += gear_tweak_free_color_choice /datum/gear/gloves/siren display_name = "gloves, Siren" diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index 366b54f81a..1ea12798cd 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -383,3 +383,7 @@ /datum/gear/head/rose_crown display_name = "rose crown" path = /obj/item/clothing/head/rose_crown + +/datum/gear/head/blackngoldheaddress + display_name = "black and gold headdress" + path = /obj/item/clothing/head/blackngoldheaddress \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_head_vr.dm b/code/modules/client/preference_setup/loadout/loadout_head_vr.dm index 41214cbd67..ce6ada61ab 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head_vr.dm @@ -12,7 +12,7 @@ /datum/gear/head/headbando/New() ..() - gear_tweaks = list(gear_tweak_free_color_choice) + gear_tweaks += gear_tweak_free_color_choice //Detective alternative /datum/gear/head/detective_alt diff --git a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm index 3dc33eb9b3..b9cae2ddd0 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm @@ -16,7 +16,7 @@ /datum/gear/suit/labcoat_colorable/New() ..() - gear_tweaks = list(gear_tweak_free_color_choice) + gear_tweaks += gear_tweak_free_color_choice /datum/gear/suit/jacket_modular display_name = "jacket, modular" diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 818d55e252..c9a9401aea 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -588,4 +588,29 @@ /datum/gear/uniform/cyberpunkharness display_name = "cyberpunk strapped harness" - path = /obj/item/clothing/under/cyberpunkharness \ No newline at end of file + path = /obj/item/clothing/under/cyberpunkharness + +/datum/gear/uniform/whitegown + display_name = "white gown" + path = /obj/item/clothing/under/wedding/whitegown + +/datum/gear/uniform/floofdress + display_name = "floofy dress" + path = /obj/item/clothing/under/wedding/floofdress + +/datum/gear/uniform/floofdress/New() + ..() + gear_tweaks += gear_tweak_free_color_choice + +/datum/gear/uniform/blackngold + display_name = "black and gold gown" + path = /obj/item/clothing/under/blackngold + +/datum/gear/uniform/sheerblue + display_name = "sheer blue dress" + path = /obj/item/clothing/under/sheerblue + +/datum/gear/uniform/disheveled + display_name = "disheveled suit" + path = /obj/item/clothing/under/disheveled + diff --git a/code/modules/client/preferences_factions.dm b/code/modules/client/preferences_factions.dm index 4371cdf860..00294d3a3e 100644 --- a/code/modules/client/preferences_factions.dm +++ b/code/modules/client/preferences_factions.dm @@ -13,6 +13,7 @@ var/global/list/seen_religions = list() seen_religions |= M.client.prefs.religion*/ return +// VOREStation Edits Start var/global/list/citizenship_choices = list( "Earth", "Mars", @@ -20,11 +21,19 @@ var/global/list/citizenship_choices = list( "Binma", "Moghes", "Meralar", - "Qerr'balak" + "Qerr'balak", + "Virgo 3b Colony", + "Virgo 4 NT Compound", + "Venus", + "Tiamat", + "An-Tahk-Et" ) var/global/list/home_system_choices = list( + "Virgo-Erigone", "Sol", + "Proxima Centauri", + "Procyon", "Vir", "Nyx", "Tau Ceti", @@ -33,8 +42,12 @@ var/global/list/home_system_choices = list( "Rarkajar" ) + var/global/list/faction_choices = list( - "Sol Central", + "Commonwealth of Sol-Procyon", + "United Fyrds", + "Elysian Colonies", + "Ares Confederation", "Vey Med", "Einstein Engines", "Free Trade Union", @@ -48,6 +61,7 @@ var/global/list/faction_choices = list( "Morpheus Cyberkinetics", "Xion Manufacturing Group" ) +// VOREStation Edits Stop var/global/list/antag_faction_choices = list() //Should be populated after brainstorming. Leaving as blank in case brainstorming does not occur. @@ -75,5 +89,7 @@ var/global/list/religion_choices = list( "Xilar Qall", "Tajr-kii Rarkajar", "Agnosticism", - "Deism" + "Deism", + "Neo-Moreauism", + "Orthodox Moreauism" ) \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index c8e9f3414c..1be43d63dd 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -735,6 +735,7 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) slot_flags = SLOT_OCLOTHING var/blood_overlay_type = "suit" + blood_sprite_state = "suitblood" //Defaults to the suit's blood overlay, so that some blood renders instead of no blood. siemens_coefficient = 0.9 w_class = ITEMSIZE_NORMAL preserve_item = 1 diff --git a/code/modules/clothing/clothing_icons.dm b/code/modules/clothing/clothing_icons.dm index 33e1da6000..2d4f00c665 100644 --- a/code/modules/clothing/clothing_icons.dm +++ b/code/modules/clothing/clothing_icons.dm @@ -29,6 +29,7 @@ /obj/item/clothing/suit/apply_blood(var/image/standing) if(blood_DNA && blood_sprite_state && ishuman(loc)) var/mob/living/carbon/human/H = loc - var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = "[blood_overlay_type]blood") + blood_sprite_state = "[blood_overlay_type]blood" + var/image/bloodsies = image(icon = H.species.get_blood_mask(H), icon_state = blood_sprite_state) bloodsies.color = blood_color standing.add_overlay(bloodsies) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index dff571c50f..dab5e97075 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -445,3 +445,10 @@ desc = "A gold-lined white cowl. It gives off uncomfortable cult vibes, but fancy." icon_state = "whitecowl" body_parts_covered = 0 + +/obj/item/clothing/head/blackngoldheaddress + name = "black and gold headdress" + desc = "An odd looking headdress that covers the eyes." + icon_state = "blackngoldheaddress" + flags_inv = HIDEEYES + body_parts_covered = HEAD|EYES diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index cb736737c6..bdf2be889d 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -2,7 +2,7 @@ desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. They're large enough to be worn over other footwear." name = "magboots" icon_state = "magboots0" - item_flags = PHORONGUARD + flags = PHORONGUARD item_state_slots = list(slot_r_hand_str = "magboots", slot_l_hand_str = "magboots") species_restricted = null center_of_mass = list("x" = 17,"y" = 12) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index cd65478a05..9606205cc4 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -11,6 +11,7 @@ name = "hardsuit control module" icon = 'icons/obj/rig_modules.dmi' desc = "A back-mounted hardsuit deployment and control mechanism." + flags = PHORONGUARD slot_flags = SLOT_BACK req_one_access = list() req_access = list() diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm index 82caf79deb..8ae8ca3674 100644 --- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm +++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm @@ -23,7 +23,8 @@ /obj/item/clothing/gloves/gauntlets/rig name = "gauntlets" - item_flags = THICKMATERIAL|PHORONGUARD + flags = PHORONGUARD + item_flags = THICKMATERIAL body_parts_covered = HANDS heat_protection = HANDS cold_protection = HANDS diff --git a/code/modules/clothing/spacesuits/rig/rig_tgui.dm b/code/modules/clothing/spacesuits/rig/rig_tgui.dm index 5fc1e17380..7f34fe11b8 100644 --- a/code/modules/clothing/spacesuits/rig/rig_tgui.dm +++ b/code/modules/clothing/spacesuits/rig/rig_tgui.dm @@ -98,12 +98,13 @@ if(module.charges && module.charges.len) module_data["charges"] = list() - var/datum/rig_charge/selected = module.charges[module.charge_selected] + var/datum/rig_charge/selected = module.charges["[module.charge_selected]"] + module_data["realchargetype"] = module.charge_selected module_data["chargetype"] = selected ? "[selected.display_name]" : "none" for(var/chargetype in module.charges) var/datum/rig_charge/charge = module.charges[chargetype] - module_data["charges"] += list(list("caption" = "[chargetype] ([charge.charges])", "index" = "[chargetype]")) + module_data["charges"] += list(list("caption" = "[charge.display_name] ([charge.charges])", "index" = "[chargetype]")) module_list += list(module_data) i++ diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 7fb4df785e..20f33104ca 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -278,6 +278,7 @@ name = "armor vest" desc = "A simple kevlar plate carrier." icon_state = "kvest" + blood_overlay_type = "armor" item_state_slots = list(slot_r_hand_str = "armor", slot_l_hand_str = "armor") armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 0, rad = 0) allowed = list(/obj/item/weapon/gun,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/device/flashlight/maglight,/obj/item/clothing/head/helmet) @@ -311,6 +312,7 @@ name = "Warden's jacket" desc = "An armoured jacket with silver rank pips and livery." icon_state = "warden_jacket" + blood_overlay_type = "suit" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS flags_inv = HIDETIE|HIDEHOLSTER @@ -332,6 +334,7 @@ name = "armored coat" desc = "A greatcoat enhanced with a special alloy for some protection and style." icon_state = "hos" + blood_overlay_type = "suit" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS flags_inv = HIDETIE|HIDEHOLSTER diff --git a/code/modules/clothing/suits/armor_vr.dm b/code/modules/clothing/suits/armor_vr.dm index 966dbe7b4f..ec3fda49a5 100644 --- a/code/modules/clothing/suits/armor_vr.dm +++ b/code/modules/clothing/suits/armor_vr.dm @@ -17,7 +17,7 @@ desc = "An armored vest that protects against some damage. It appears to be created for a wolf-taur." species_restricted = null //Species restricted since all it cares about is a taur half icon = 'icons/mob/taursuits_wolf_vr.dmi' - icon_state = "heavy_wolf_armor" + icon_state = "wolf_item" item_state = "heavy_wolf_armor" mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0) if(..()) @@ -86,7 +86,7 @@ icon = 'icons/obj/clothing/suits_vr.dmi' icon_override = 'icons/mob/suit_vr.dmi' -// Armor Versions Here +// Armor Versions Here /obj/item/clothing/suit/armor/combat/crusader name = "crusader armor" desc = "ye olde knight, risen again." @@ -96,7 +96,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO armor = list(melee = 80, bullet = 50, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 2 - + /obj/item/clothing/suit/armor/combat/crusader/bedevere name = "bedevere's armor" desc = "ye olde knight, risen again." @@ -113,7 +113,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) siemens_coefficient = 1 - + /obj/item/clothing/suit/armor/combat/crusader_costume/bedevere name = "bedevere's costume armor" desc = "ye olde knight, risen again." diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 1d4ba551d9..092f33fd86 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -603,6 +603,19 @@ obj/item/clothing/under/dress/yellowswoop flags_inv = HIDESHOES body_parts_covered = UPPER_TORSO|LOWER_TORSO +/obj/item/clothing/under/wedding/floofdress + name = "floofy dress" + desc = "A lovely floofed out dress for formal occasions. Comes in many colors!" + icon_state = "floofdress" + flags_inv = HIDESHOES + index = 1 + +/obj/item/clothing/under/wedding/whitegown + name = "white gown" + desc = "A elegant white gown with accents of sheer mesh." + icon_state = "whitegown" + index = 1 + /* Uniforms and such */ @@ -816,6 +829,24 @@ Uniforms and such icon_state = "cyberhell" index = 1 +/obj/item/clothing/under/blackngold + name = "black and gold gown" + desc = "A black and gold gown. You get the impression this is typically worn for religious purposes." + icon_state = "blackngold" + index = 1 + +/obj/item/clothing/under/sheerblue + name = "sheer blue dress" + desc = "An entirely sheer blue dress. Best worn with something underneath!" + icon_state = "sheerblue" + index = 1 + +/obj/item/clothing/under/disheveled + name = "disheveled suit" + desc = "What might pass as well maintained formal attire. If you're blind." + icon_state = "disheveled" + index = 1 + /* * swimsuit */ diff --git a/code/modules/food/drinkingglass/metaglass_vr.dm b/code/modules/food/drinkingglass/metaglass_vr.dm index 887c752ba6..a718acf86d 100644 --- a/code/modules/food/drinkingglass/metaglass_vr.dm +++ b/code/modules/food/drinkingglass/metaglass_vr.dm @@ -123,6 +123,31 @@ glass_center_of_mass = list("x"=16, "y"=9) glass_icon_file = 'icons/obj/drinks_vr.dmi' +/datum/reagent/ethanol/originalsin + glass_icon_state = "originalsinglass" + glass_center_of_mass = list("x"=16, "y"=9) + glass_icon_file = 'icons/obj/drinks_vr.dmi' + +/datum/reagent/ethanol/whiskeysour + glass_icon_state = "whiskeysourglass" + glass_center_of_mass = list("x"=16, "y"=9) + glass_icon_file = 'icons/obj/drinks_vr.dmi' + +/datum/reagent/ethanol/newyorksour + glass_icon_state = "newyorksourglass" + glass_center_of_mass = list("x"=16, "y"=9) + glass_icon_file = 'icons/obj/drinks_vr.dmi' + +/datum/reagent/ethanol/mudslide + glass_icon_state = "mudslideglass" + glass_center_of_mass = list("x"=16, "y"=9) + glass_icon_file = 'icons/obj/drinks_vr.dmi' + +/datum/reagent/ethanol/windgarita + glass_icon_state = "windgaritaglass" + glass_center_of_mass = list("x"=16, "y"=9) + glass_icon_file = 'icons/obj/drinks_vr.dmi' + /datum/reagent/drink/soda/kiraspecial glass_icon_file = 'icons/obj/drinks_vr.dmi' diff --git a/code/modules/food/recipe.dm b/code/modules/food/recipe.dm index 8c7f1092bd..dae450d310 100644 --- a/code/modules/food/recipe.dm +++ b/code/modules/food/recipe.dm @@ -208,7 +208,7 @@ var/obj/item/I = locate(i) in container if (I && I.reagents) I.reagents.trans_to_holder(buffer,I.reagents.total_volume) - qdel(I) + qdel(I) //Find fruits if (fruit && fruit.len) diff --git a/code/modules/food/recipe_dump.dm b/code/modules/food/recipe_dump.dm index 45f4c3e4ae..df0e6874aa 100644 --- a/code/modules/food/recipe_dump.dm +++ b/code/modules/food/recipe_dump.dm @@ -12,7 +12,8 @@ var/datum/chemical_reaction/drinks/CR = new path() drink_recipes[path] = list("Result" = CR.name, "ResAmt" = CR.result_amount, - "Reagents" = CR.required_reagents) + "Reagents" = CR.required_reagents, + "Catalysts" = CR.catalysts) qdel(CR) //////////////////////// FOOD @@ -30,8 +31,10 @@ "Result" = "[res.name]", "ResAmt" = "1", "Reagents" = R.reagents, + "Catalysts" = list(), "Fruit" = R.fruit, "Ingredients" = R.items, + "Coating" = R.coating, "Appliance" = R.appliance, "Image" = result_icon ) @@ -45,6 +48,7 @@ food_recipes[path] = list("Result" = CR.name, "ResAmt" = CR.result_amount, "Reagents" = CR.required_reagents, + "Catalysts" = CR.catalysts, "Fruit" = list(), "Ingredients" = list(), "Image" = null) @@ -54,8 +58,11 @@ //Items needs further processing into human-readability. for(var/Rp in food_recipes) var/working_ing_list = list() + food_recipes[Rp]["has_coatable_items"] = FALSE for(var/I in food_recipes[Rp]["Ingredients"]) var/atom/ing = new I() + if(istype(ing, /obj/item/weapon/reagent_containers/food/snacks)) // only subtypes of this have a coating variable and are checked for it (fruit are a subtype of this, so there's a check for them too later) + food_recipes[Rp]["has_coatable_items"] = TRUE //So now we add something like "Bread" = 3 if(ing.name in working_ing_list) @@ -64,6 +71,8 @@ else working_ing_list[ing.name] = 1 + if(LAZYLEN(food_recipes[Rp]["Fruit"])) + food_recipes[Rp]["has_coatable_items"] = TRUE food_recipes[Rp]["Ingredients"] = working_ing_list //Reagents can be resolved to nicer names as well @@ -77,6 +86,15 @@ var/amt = food_recipes[Rp]["Reagents"][rid] food_recipes[Rp]["Reagents"] -= rid food_recipes[Rp]["Reagents"][R_name] = amt + for(var/rid in food_recipes[Rp]["Catalysts"]) + var/datum/reagent/Rd = SSchemistry.chemical_reagents[rid] + if(!Rd) // Leaving this here in the event that if rd is ever invalid or there's a recipe issue, it'll be skipped and recipe dumps can still be ran. + log_runtime(EXCEPTION("Food \"[Rp]\" had an invalid RID: \"[rid]\"! Check your reagents list for a missing or mistyped reagent!")) + continue // This allows the dump to still continue, and it will skip the invalid recipes. + var/R_name = Rd.name + var/amt = food_recipes[Rp]["Catalysts"][rid] + food_recipes[Rp]["Catalysts"] -= rid + food_recipes[Rp]["Catalysts"][R_name] = amt for(var/Rp in drink_recipes) for(var/rid in drink_recipes[Rp]["Reagents"]) var/datum/reagent/Rd = SSchemistry.chemical_reagents[rid] @@ -87,6 +105,15 @@ var/amt = drink_recipes[Rp]["Reagents"][rid] drink_recipes[Rp]["Reagents"] -= rid drink_recipes[Rp]["Reagents"][R_name] = amt + for(var/rid in drink_recipes[Rp]["Catalysts"]) + var/datum/reagent/Rd = SSchemistry.chemical_reagents[rid] + if(!Rd) // Leaving this here in the event that if rd is ever invalid or there's a recipe issue, it'll be skipped and recipe dumps can still be ran. + log_runtime(EXCEPTION("Food \"[Rp]\" had an invalid RID: \"[rid]\"! Check your reagents list for a missing or mistyped reagent!")) + continue // This allows the dump to still continue, and it will skip the invalid recipes. + var/R_name = Rd.name + var/amt = drink_recipes[Rp]["Catalysts"][rid] + drink_recipes[Rp]["Catalysts"] -= rid + drink_recipes[Rp]["Catalysts"][R_name] = amt //We can also change the appliance to its proper name. for(var/Rp in food_recipes) @@ -174,6 +201,20 @@ if(pretty_ing != "") html += "
  • Ingredients: [pretty_ing]
  • " + //Coating + if(!food_recipes[Rp]["has_coatable_items"]) + html += "
  • Coating: N/A, no coatable items
  • " + // css can be used to style or hide these depending on the class. This has two classes + // coating and coating_not_applicable, which can each have styles applied. + else if(food_recipes[Rp]["Coating"] == -1) + html += "
  • Coating: Optionally, any coating
  • " + else if(isnull(food_recipes[Rp]["Coating"])) + html += "
  • Coating: Must be uncoated
  • " + else + var/coatingtype = food_recipes[Rp]["Coating"] + var/datum/reagent/coating = new coatingtype() + html += "
  • Coating: [coating.name]
  • " + //For each fruit var/pretty_fru = "" count = 0 @@ -192,6 +233,15 @@ if(pretty_rea != "") html += "
  • Mix in: [pretty_rea]
  • " + //For each catalyst + var/pretty_cat = "" + count = 0 + for(var/cat in food_recipes[Rp]["Catalysts"]) + pretty_cat += "[count == 0 ? "" : ", "][food_recipes[Rp]["Catalysts"][cat]]u [cat]" + count++ + if(pretty_cat != "") + html += "
  • Catalysts: [pretty_cat]
  • " + //Close ingredients html += "" //Close this row @@ -230,6 +280,15 @@ if(pretty_rea != "") html += "
  • Mix together: [pretty_rea]
  • " + //For each catalyst + var/pretty_cat = "" + count = 0 + for(var/cat in drink_recipes[Rp]["Catalysts"]) + pretty_cat += "[count == 0 ? "" : ", "][drink_recipes[Rp]["Catalysts"][cat]]u [cat]" + count++ + if(pretty_cat != "") + html += "
  • Catalysts: [pretty_cat]
  • " + html += "
  • Makes [drink_recipes[Rp]["ResAmt"]]u
  • " //Close reagents diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index 849b1a5a6e..4766f5c1ef 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -406,6 +406,7 @@ datum/unarmed_attack/holopugilism/unarmed_override(var/mob/living/carbon/human/u desc = "This device is used to declare ready. If all devices in an area are ready, the event will begin!" icon = 'icons/obj/monitors.dmi' icon_state = "auth_off" + layer = ABOVE_WINDOW_LAYER var/ready = 0 var/area/currentarea = null var/eventstarted = 0 diff --git a/code/modules/holomap/station_holomap.dm b/code/modules/holomap/station_holomap.dm index 39a1c30452..9556477f50 100644 --- a/code/modules/holomap/station_holomap.dm +++ b/code/modules/holomap/station_holomap.dm @@ -6,6 +6,7 @@ desc = "A virtual map of the surrounding station." icon = 'icons/obj/machines/stationmap.dmi' icon_state = "station_map" + layer = ABOVE_WINDOW_LAYER anchored = 1 density = 0 use_power = USE_POWER_IDLE @@ -19,9 +20,6 @@ var/light_range_on = 2 light_color = "#64C864" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER - var/mob/watching_mob = null var/image/small_station_map = null var/image/floor_markings = null diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 17eee1149c..9a226b836d 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -173,14 +173,14 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f var/dat = "Book Inventory Management\n" // switch(screenstate) if(0) - // Main Menu + // Main Menu //VOREStation Edit start dat += {"1. View General Inventory
    2. View Checked Out Inventory
    3. Check out a Book
    - 4. Connect to Internal Archive
    //VOREStation Edit + 4. Connect to Internal Archive
    5. Upload New Title to Archive
    6. Print a Bible
    - 8. Access External Archive
    "} //VOREStation Edit + 8. Access External Archive
    "} //VOREStation Edit end if(src.emagged) dat += "7. Access the Forbidden Lore Vault
    " if(src.arcanecheckout) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 32d47681c3..da315f2493 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -8,6 +8,7 @@ name = "production machine console" icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit icon_state = "console" + layer = ABOVE_WINDOW_LAYER density = TRUE anchored = TRUE diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index c1d6c4ee4c..fdabc49e7d 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -4,6 +4,7 @@ name = "stacking machine console" icon = 'icons/obj/machines/mining_machines_vr.dmi' // VOREStation Edit icon_state = "console" + layer = ABOVE_WINDOW_LAYER density = 1 anchored = 1 var/obj/machinery/mineral/stacking_machine/machine = null diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm index 0ab8381002..234d88334e 100644 --- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm @@ -17,7 +17,51 @@ var/icon_vend = "adh-tool-vend" circuit = /obj/item/weapon/circuitboard/mining_equipment_vendor var/obj/item/weapon/card/id/inserted_id - var/list/prize_list // Initialized just below! (if you're wondering why - check CONTRIBUTING.md, look for: "hidden" init proc) + var/list/prize_list = list( + new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10), + new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100), + new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300), + new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 125), + new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 125), + new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 150), + new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 200), + new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 900), + new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 750), + new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 300), + new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 200), +// new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 500), + new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500), +// new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1200), +// new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200), +// new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000), + new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 500), + new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000), +// new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000), + new /datum/data/mining_equipment("Industrial Hardsuit - Control Module", /obj/item/weapon/rig/industrial, 10000), + new /datum/data/mining_equipment("Industrial Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800), + new /datum/data/mining_equipment("Industrial Hardsuit - Drill", /obj/item/rig_module/device/drill, 5000), + new /datum/data/mining_equipment("Industrial Hardsuit - Ore Scanner", /obj/item/rig_module/device/orescanner, 1000), + new /datum/data/mining_equipment("Industrial Hardsuit - Advanced Optics", /obj/item/rig_module/vision/mining, 1250), + new /datum/data/mining_equipment("Industrial Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250), + new /datum/data/mining_equipment("Hardsuit - Intelligence Storage", /obj/item/rig_module/ai_container, 2500), + new /datum/data/mining_equipment("Hardsuit - Smoke Bomb Deployer", /obj/item/rig_module/grenade_launcher/smoke, 2000), + new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 3000), + new /datum/data/mining_equipment("Industrial Equipment - Sheet-Snatcher",/obj/item/weapon/storage/bag/sheetsnatcher, 500), new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 500), + new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 1000), + new /datum/data/mining_equipment("Fine Excavation Kit - Chisels",/obj/item/weapon/storage/excavation, 500), + new /datum/data/mining_equipment("Fine Excavation Kit - Measuring Tape",/obj/item/device/measuring_tape, 125), + new /datum/data/mining_equipment("Fine Excavation Kit - Hand Pick",/obj/item/weapon/pickaxe/hand, 375), + new /datum/data/mining_equipment("Explosive Excavation Kit - Plastic Charge",/obj/item/weapon/plastique/seismic, 1500), + new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 500), + new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 500), + new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 500), + new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 1000), + new /datum/data/mining_equipment("Defense Equipment - Phase Pistol",/obj/item/weapon/gun/energy/phasegun/pistol, 400), + new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 100), + new /datum/data/mining_equipment("Defense Equipment - Razor Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/manhacks/station, 1000), + new /datum/data/mining_equipment("Defense Equipment - Sentry Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/ward, 1500), + new /datum/data/mining_equipment("Defense Equipment - Steel Machete", /obj/item/weapon/material/knife/machete, 500) + ) var/dirty_items = FALSE // Used to refresh the static/redundant data in case the machine gets VV'd /datum/data/mining_equipment @@ -91,7 +135,7 @@ EQUIPMENT("Fine Excavation Kit - Measuring Tape", /obj/item/device/measuring_tape, 125), EQUIPMENT("Fine Excavation Kit - Hand Pick", /obj/item/weapon/pickaxe/hand, 375), EQUIPMENT("Explosive Excavation Kit - Plastic Charge",/obj/item/weapon/plastique/seismic/locked, 1500), - EQUIPMENT("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed, 3000), + EQUIPMENT("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 3000), EQUIPMENT("Industrial Equipment - Inducer", /obj/item/weapon/inducer, 900), EQUIPMENT("Industrial Equipment - Sheet-Snatcher", /obj/item/weapon/storage/bag/sheetsnatcher, 500), ) diff --git a/code/modules/mining/ore_redemption_machine/survey_vendor.dm b/code/modules/mining/ore_redemption_machine/survey_vendor.dm index eaf5667094..9956084c11 100644 --- a/code/modules/mining/ore_redemption_machine/survey_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/survey_vendor.dm @@ -8,6 +8,40 @@ circuit = /obj/item/weapon/circuitboard/exploration_equipment_vendor icon_deny = "exploration-deny" //VOREStation Edit icon_vend = "exploration-vend" //VOREStation Add + prize_list = list( + new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 1), + new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 10), + new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 30), + new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 120), + new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 120), + new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 15), + new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 20), + new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 90), + new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 75), + new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 30), + new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 10), + new /datum/data/mining_equipment("Extraction Equipment - Fulton Beacon", /obj/item/fulton_core, 100), + new /datum/data/mining_equipment("Extraction Equipment - Fulton Pack", /obj/item/extraction_pack, 50), + new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card/survey, 50), + new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 50), + new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 50), + new /datum/data/mining_equipment("Direct Payment - 1000", /obj/item/weapon/spacecash/c1000, 500), + new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 500), + new /datum/data/mining_equipment("Survey Tools - Shovel", /obj/item/weapon/shovel, 20), + new /datum/data/mining_equipment("Survey Tools - Mechanical Trap", /obj/item/weapon/beartrap, 30), + new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 100), + new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 300), + new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 30), + new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 30), + new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 50), + new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 50), + new /datum/data/mining_equipment("Defense Equipment - Phase Pistol",/obj/item/weapon/gun/energy/phasegun/pistol, 15), + new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 50), + new /datum/data/mining_equipment("Defense Equipment - Razor Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/manhacks/station, 50), + new /datum/data/mining_equipment("Defense Equipment - Sentry Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/ward, 100), + new /datum/data/mining_equipment("Defense Equipment - Steel Machete", /obj/item/weapon/material/knife/machete, 50), + new /datum/data/mining_equipment("Survival Equipment - Insulated Poncho", /obj/random/thermalponcho, 75) + ) /obj/machinery/mineral/equipment_vendor/survey/Initialize(mapload) . = ..() @@ -54,7 +88,7 @@ EQUIPMENT("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 15), EQUIPMENT("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 50), EQUIPMENT("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 100), - EQUIPMENT("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed, 300), + EQUIPMENT("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded, 300), EQUIPMENT("Industrial Equipment - Inducer", /obj/item/weapon/inducer, 90), EQUIPMENT("Laser Pointer", /obj/item/device/laser_pointer, 90), EQUIPMENT("Luxury Shelter Capsule", /obj/item/device/survivalcapsule/luxury, 310), diff --git a/code/modules/mob/language/station_vr.dm b/code/modules/mob/language/station_vr.dm index 268b81fd4b..c0913389e6 100644 --- a/code/modules/mob/language/station_vr.dm +++ b/code/modules/mob/language/station_vr.dm @@ -125,6 +125,16 @@ "roar", "hyaa", "ma", "ha", "ya", "shi", "yo", "go" ) +/datum/language/spacer + name = LANGUAGE_SPACER + desc = "A rough pidgin-language comprised of Tradeband, Gutter, and Sol Common used by various space-born communities unique to Humanity." + key = "J" + syllables = list( + "ada", "zir", "bian", "ach", "usk", "ado", "ich", "cuan", "iga", "qing", "le", "que", "ki", "qaf", "dei", "eta" + ) + colour = "spacer" + machine_understands = TRUE + /datum/language/unathi flags = 0 /datum/language/tajaran diff --git a/code/modules/mob/living/bot/SLed209bot.dm b/code/modules/mob/living/bot/SLed209bot.dm index fa17b05696..c4fd4b2767 100644 --- a/code/modules/mob/living/bot/SLed209bot.dm +++ b/code/modules/mob/living/bot/SLed209bot.dm @@ -21,6 +21,7 @@ xeno_harm_strength = 9 req_one_access = list(access_research, access_robotics) botcard_access = list(access_research, access_robotics, access_xenobiology, access_xenoarch, access_tox, access_tox_storage, access_maint_tunnels) + retaliates = FALSE var/xeno_stun_strength = 6 /mob/living/bot/secbot/ed209/slime/update_icons() diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index 77ee3409ce..583b2d7af6 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -23,6 +23,7 @@ var/declare_arrests = FALSE // If true, announces arrests over sechuds. var/threat = 0 // How much of a threat something is. Set upon acquiring a target. var/attacked = FALSE // If true, gives the bot enough threat assessment to attack immediately. + var/retaliates = TRUE //If this type of secbot should retaliate at all - so that slime securitrons don't go ballistic the second they get glomped. var/is_ranged = FALSE var/awaiting_surrender = 0 @@ -63,6 +64,7 @@ desc = "A little security robot, with a slime baton subsituted for the regular one." default_icon_state = "slimesecbot" stun_strength = 10 // Slimebatons aren't meant for humans. + retaliates = FALSE // No, you're not allowed to beat the slimes to death just because they scratched you. xeno_harm_strength = 9 // Weaker than regular slimesky but they can stun. baton_glow = "#33CCFF" @@ -193,7 +195,7 @@ ..() /mob/living/bot/secbot/proc/react_to_attack(mob/attacker) - if(!on) // We don't want it to react if it's off + if(!on || !retaliates) // We don't want it to react if it's off or doesn't care return if(!target) diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm index 2be90ec8dc..6a3e65b880 100644 --- a/code/modules/mob/living/carbon/human/emote_vr.dm +++ b/code/modules/mob/living/carbon/human/emote_vr.dm @@ -247,3 +247,17 @@ set desc = "Switch tail layer on top." tail_alt = !tail_alt update_tail_showing() + +/mob/living/carbon/human/verb/hide_wings_vr() + set name = "Show/Hide wings" + set category = "IC" + set desc = "Hide your wings, or show them if you already hid them." + wings_hidden = !wings_hidden + update_wing_showing() + var/message = "" + if(!wings_hidden) + message = "reveals their wings!" + else + message = "hides their wings." + visible_message("[src] [message]") + diff --git a/code/modules/mob/living/carbon/human/human_defines_vr.dm b/code/modules/mob/living/carbon/human/human_defines_vr.dm index 9316b90e88..3a52565d08 100644 --- a/code/modules/mob/living/carbon/human/human_defines_vr.dm +++ b/code/modules/mob/living/carbon/human/human_defines_vr.dm @@ -9,6 +9,7 @@ var/impersonate_bodytype //For impersonating a bodytype var/ability_flags = 0 //Shadekin abilities/potentially other species-based? var/sensorpref = 5 //Suit sensor loadout pref + var/wings_hidden = FALSE /mob/living/carbon/human/proc/shadekin_get_energy() var/datum/species/shadekin/SK = species @@ -48,4 +49,4 @@ if(!istype(SK)) return 0 - SK.set_energy(src, SK.get_energy(src) + amount) \ No newline at end of file + SK.set_energy(src, SK.get_energy(src) + amount) diff --git a/code/modules/mob/living/carbon/human/species/station/seromi.dm b/code/modules/mob/living/carbon/human/species/station/seromi.dm index 039d2e3978..4e72aee57d 100644 --- a/code/modules/mob/living/carbon/human/species/station/seromi.dm +++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm @@ -64,6 +64,8 @@ swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL push_flags = MONKEY|SLIME|SIMPLE_ANIMAL|ALIEN + body_temperature = 270 + cold_level_1 = 180 //Default 260 cold_level_2 = 130 //Default 200 cold_level_3 = 70 //Default 120 @@ -141,4 +143,4 @@ /datum/species/teshari/equip_survival_gear(var/mob/living/carbon/human/H) ..() - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes) \ No newline at end of file + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes) 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 add47b9d94..882a8b8e6d 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -198,7 +198,7 @@ home worlds and speak a variety of languages, especially Siik and Akhani." catalogue_data = list(/datum/category_item/catalogue/fauna/tajaran) - body_temperature = 320.15 //Even more cold resistant, even more flammable + body_temperature = 280.15 //Even more cold resistant, even more flammable cold_level_1 = 200 //Default 260 cold_level_2 = 140 //Default 200 @@ -235,7 +235,7 @@ "Your overheated skin itches." ) - cold_discomfort_level = 275 + cold_discomfort_level = 215 has_organ = list( //No appendix. O_HEART = /obj/item/organ/internal/heart, 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 54bddcdadf..b9841bb29e 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 @@ -62,6 +62,12 @@ cost = 2 var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp, /datum/unarmed_attack/bite/sharp/numbing)) +/datum/trait/fangs + name = "Numbing Fangs" + desc = "Provides fangs that makes the person bit unable to feel their body or pain." + cost = 1 + var_changes = list("unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite/sharp/numbing)) + /datum/trait/minor_brute_resist name = "Minor Brute Resist" desc = "Adds 15% resistance to brute damage sources." diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 92b87b41a4..1176e870a6 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -151,7 +151,10 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone. M.Turn(90) M.Scale(desired_scale_x, desired_scale_y) - M.Translate(1,-6) + if(species.icon_height == 64)//VOREStation Edit + M.Translate(13,-22) + else + M.Translate(1,-6) layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters else M.Scale(desired_scale_x, desired_scale_y) diff --git a/code/modules/mob/living/carbon/human/update_icons_vr.dm b/code/modules/mob/living/carbon/human/update_icons_vr.dm index 45a5690ae6..d05f8afa22 100644 --- a/code/modules/mob/living/carbon/human/update_icons_vr.dm +++ b/code/modules/mob/living/carbon/human/update_icons_vr.dm @@ -3,13 +3,13 @@ return //If you are FBP with wing style and didn't set a custom one - if(synthetic && synthetic.includes_wing && !wing_style) + if((synthetic && synthetic.includes_wing && !wing_style) && !wings_hidden) var/icon/wing_s = new/icon("icon" = synthetic.icon, "icon_state" = "wing") //I dunno. If synths have some custom wing? wing_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) return image(wing_s) //If you have custom wings selected - if(wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) + if((wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) && !wings_hidden) var/icon/wing_s = new/icon("icon" = wing_style.icon, "icon_state" = flapping && wing_style.ani_state ? wing_style.ani_state : wing_style.icon_state) if(wing_style.do_colouration) wing_s.Blend(rgb(src.r_wing, src.g_wing, src.b_wing), wing_style.color_blend_mode) 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 e84970c824..563f8c0b65 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 @@ -243,7 +243,7 @@ to_chat(user, "You finish off \the [target.name], and gain some charge!") var/mob/living/silicon/robot/R = user var/obj/item/weapon/cell/C = target - R.cell.charge += C.maxcharge / 3 + R.cell.charge += C.charge / 3 water.use_charge(5) qdel(target) return 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 d6f5acfb3d..bd608ca006 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -219,7 +219,8 @@ /obj/item/mecha_parts/part, /obj/item/mecha_parts/micro/part, //VOREStation Edit: Allow construction of micromechs, /obj/item/mecha_parts/mecha_equipment, - /obj/item/mecha_parts/mecha_tracking + /obj/item/mecha_parts/mecha_tracking, + /obj/item/mecha_parts/component ) /obj/item/weapon/gripper/no_use //Used when you want to hold and put items in other things, but not able to 'use' the item diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage_vr.dm index 3ac368a7ee..31c9cdf10f 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage_vr.dm @@ -1,4 +1,4 @@ -/datum/category_item/catalogue/technology/drone/hivebot/laser // Hivebot Scanner Data - This is for Laser Hivebots +/datum/category_item/catalogue/technology/drone/hivebot/rapidfire // Hivebot Scanner Data - This is for Rapidfire Hivebots name = "Drone - Rapidfire Hivebot" desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ rifle, built for high-rate fire. Other than that, it has similar yellowish color \ diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support_vr.dm index 0003b78124..434ce659e8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support_vr.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support_vr.dm @@ -5,7 +5,7 @@ to the other hivebots. Other than that, it has similar yellowish color to regular hivebots." value = CATALOGUER_REWARD_HARD -/datum/category_item/catalogue/technology/drone/hivebot/logistics // Hivebot Scanner Data - This is for Commander Hivebots +/datum/category_item/catalogue/technology/drone/hivebot/logistics // Hivebot Scanner Data - This is for Logistics Hivebots name = "Drone - Logistics Hivebot" desc = "A drone that walks on several legs, with yellow/gold armor plating. It appears to have some sort of \ ballistic weapon. It also appears to have supply deploying bays, and internal fabs to repair and buff their allies' special capabilities. \ diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm new file mode 100644 index 0000000000..c2e984864c --- /dev/null +++ b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm @@ -0,0 +1,304 @@ +/mob/living/simple_mob/vore/lamia + name = "purple lamia" + desc = "Combination snake-human. This one is purple." + + icon = 'icons/mob/vore_lamia.dmi' + icon_state = "ffta" + icon_living = "ffta" + icon_rest = "ffta_rest" + icon_dead = "ffta_dead" + + harm_intent_damage = 5 + melee_damage_lower = 0 + melee_damage_upper = 0 + + response_help = "pets" + response_disarm = "gently baps" + response_harm = "hits" + + health = 60 + maxHealth = 60 + + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + + // Vore tags + vore_active = 1 + vore_capacity = 1 + vore_bump_emote = "coils their tail around" + vore_icons = 0 + // Default stomach + vore_stomach_name = "upper stomach" + vore_stomach_flavor = "You've ended up inside of the lamia's human stomach. It's pretty much identical to any human stomach, but the valve leading deeper is much bigger." + + // Meaningful stats + vore_default_mode = DM_HOLD + vore_digest_chance = 0 + vore_pounce_chance = 65 + vore_bump_chance = 50 + vore_standing_too = TRUE + vore_escape_chance = 25 + + // Special lamia vore tags + var/vore_upper_transfer_chance = 50 + var/vore_tail_digest_chance = 25 + var/vore_tail_absorb_chance = 0 + var/vore_tail_transfer_chance = 50 + + say_list_type = /datum/say_list/lamia + ai_holder_type = /datum/ai_holder/simple_mob/passive + +/mob/living/simple_mob/vore/lamia/update_fullness() + var/new_fullness = 0 + // We only want to count our upper_stomach towards capacity + for(var/belly in vore_organs) + var/obj/belly/B = belly + if(B.name == "upper stomach") + for(var/mob/living/M in B) + new_fullness += M.size_multiplier + new_fullness /= size_multiplier + new_fullness = round(new_fullness, 1) + vore_fullness = min(vore_capacity, new_fullness) + +/mob/living/simple_mob/vore/lamia/update_icon() + . = ..() + + if(vore_active) + // Icon_state for fullness is as such if they are CONSCIOUS: + // [icon_living]_vore_[upper_shows]_[tail_shows] + // So copper_vore_1_1 is a full upper stomach *and* tail stomach + // And copper_vore_1_0 is full upper stomach, but empty tail stomach + // For unconscious: [icon_rest]_vore_[upper]_[tail] + // For dead, it doesn't show. + var/upper_shows = FALSE + var/tail_shows = FALSE + + for(var/belly in vore_organs) + var/obj/belly/B = belly + if(!(B.name in list("upper stomach", "tail stomach"))) + continue + var/belly_fullness = 0 + for(var/mob/living/M in B) + belly_fullness += M.size_multiplier + belly_fullness /= size_multiplier + belly_fullness = round(belly_fullness, 1) + + if(belly_fullness) + if(B.name == "upper stomach") + upper_shows = TRUE + else if(B.name == "tail stomach") + tail_shows = TRUE + + if(upper_shows || tail_shows) + if((stat == CONSCIOUS) && (!icon_rest || !resting || !incapacitated(INCAPACITATION_DISABLED))) + icon_state = "[icon_living]_vore_[upper_shows]_[tail_shows]" + else if(stat >= DEAD) + icon_state = icon_dead + else if(((stat == UNCONSCIOUS) || resting || incapacitated(INCAPACITATION_DISABLED) ) && icon_rest) + icon_state = "[icon_rest]_vore_[upper_shows]_[tail_shows]" + +/mob/living/simple_mob/vore/lamia/init_vore() + . = ..() + var/obj/belly/B = vore_selected + + B.transferchance = vore_upper_transfer_chance + B.transferlocation = "tail stomach" + + var/obj/belly/tail = new /obj/belly(src) + tail.immutable = TRUE + tail.name = "tail stomach" + tail.desc = "You slide out into the narrow, constricting tube of flesh that is the lamia's snake half, heated walls and strong muscles all around clinging to your form with every slither." + tail.digest_mode = vore_default_mode + tail.mode_flags = vore_default_flags + tail.item_digest_mode = vore_default_item_mode + tail.contaminates = vore_default_contaminates + tail.contamination_flavor = vore_default_contamination_flavor + tail.contamination_color = vore_default_contamination_color + tail.escapable = TRUE // needed for transferchance + tail.escapechance = 0 // No directly escaping a tail, gotta squirm back out. + tail.digestchance = vore_tail_digest_chance + tail.absorbchance = vore_tail_absorb_chance + tail.transferchance = vore_tail_transfer_chance + tail.transferlocation = "upper stomach" + tail.human_prey_swallow_time = swallowTime + tail.nonhuman_prey_swallow_time = swallowTime + tail.vore_verb = "stuff" + tail.emote_lists[DM_HOLD] = B.emote_lists[DM_HOLD].Copy() + tail.emote_lists[DM_DIGEST] = B.emote_lists[DM_DIGEST].Copy() + +// FFTA Bra +/mob/living/simple_mob/vore/lamia/bra + desc = "Combination snake-human. This one is purple. They're wearing a bra." + icon_state = "ffta_bra" + icon_living = "ffta_bra" + icon_rest = "ffta_bra_rest" + icon_dead = "ffta_bra_dead" + +// Albino +/mob/living/simple_mob/vore/lamia/albino + name = "albino lamia" + desc = "Combination snake-human. This one is albino." + icon_state = "albino" + icon_living = "albino" + icon_rest = "albino_rest" + icon_dead = "albino_dead" + +/mob/living/simple_mob/vore/lamia/albino/bra + desc = "Combination snake-human. This one is albino. They're wearing a bra." + icon_state = "albino_bra" + icon_living = "albino_bra" + icon_rest = "albino_bra_rest" + icon_dead = "albino_bra_dead" + +/mob/living/simple_mob/vore/lamia/albino/shirt + desc = "Combination snake-human. This one is albino. They're wearing a shirt." + icon_state = "albino_shirt" + icon_living = "albino_shirt" + icon_rest = "albino_shirt_rest" + icon_dead = "albino_shirt_dead" + +// Cobra +/mob/living/simple_mob/vore/lamia/cobra + name = "cobra lamia" + desc = "Combination snake-human. This one looks like a cobra." + icon_state = "cobra" + icon_living = "cobra" + icon_rest = "cobra_rest" + icon_dead = "cobra_dead" + +/mob/living/simple_mob/vore/lamia/cobra/bra + desc = "Combination snake-human. This one looks like a cobra. They're wearing a bra." + icon_state = "cobra_bra" + icon_living = "cobra_bra" + icon_rest = "cobra_bra_rest" + icon_dead = "cobra_bra_dead" + +/mob/living/simple_mob/vore/lamia/cobra/shirt + desc = "Combination snake-human. This one looks like a cobra. They're wearing a shirt." + icon_state = "cobra_shirt" + icon_living = "cobra_shirt" + icon_rest = "cobra_shirt_rest" + icon_dead = "cobra_shirt_dead" + +// Copper +/mob/living/simple_mob/vore/lamia/copper + name = "copper lamia" + desc = "Combination snake-human. This one is copper." + icon_state = "copper" + icon_living = "copper" + icon_rest = "copper_rest" + icon_dead = "copper_dead" + +/mob/living/simple_mob/vore/lamia/copper/bra + desc = "Combination snake-human. This one is copper. They're wearing a bra." + icon_state = "copper_bra" + icon_living = "copper_bra" + icon_rest = "copper_bra_rest" + icon_dead = "copper_bra_dead" + +/mob/living/simple_mob/vore/lamia/copper/shirt + desc = "Combination snake-human. This one is copper. They're wearing a shirt." + icon_state = "copper_shirt" + icon_living = "copper_shirt" + icon_rest = "copper_shirt_rest" + icon_dead = "copper_shirt_dead" + +// Green +/mob/living/simple_mob/vore/lamia/green + name = "green lamia" + desc = "Combination snake-human. This one is green." + icon_state = "green" + icon_living = "green" + icon_rest = "green_rest" + icon_dead = "green_dead" + +/mob/living/simple_mob/vore/lamia/green/bra + desc = "Combination snake-human. This one is green. They're wearing a bra." + icon_state = "green_bra" + icon_living = "green_bra" + icon_rest = "green_bra_rest" + icon_dead = "green_bra_dead" + +/mob/living/simple_mob/vore/lamia/green/shirt + desc = "Combination snake-human. This one is green. They're wearing a shirt." + icon_state = "green_shirt" + icon_living = "green_shirt" + icon_rest = "green_shirt_rest" + icon_dead = "green_shirt_dead" + +// Zebra +/mob/living/simple_mob/vore/lamia/zebra + name = "zebra lamia" + desc = "Combination snake-human. This one has a zebra pattern." + icon_state = "zebra" + icon_living = "zebra" + icon_rest = "zebra_rest" + icon_dead = "zebra_dead" + +/mob/living/simple_mob/vore/lamia/zebra/bra + desc = "Combination snake-human. This one has a zebra pattern. They're wearing a bra." + icon_state = "zebra_bra" + icon_living = "zebra_bra" + icon_rest = "zebra_bra_rest" + icon_dead = "zebra_bra_dead" + +/mob/living/simple_mob/vore/lamia/zebra/shirt + desc = "Combination snake-human. This one has a zebra pattern. They're wearing a shirt." + icon_state = "zebra_shirt" + icon_living = "zebra_shirt" + icon_rest = "zebra_shirt_rest" + icon_dead = "zebra_shirt_dead" + +GLOBAL_LIST_INIT(valid_random_lamias, list( + /mob/living/simple_mob/vore/lamia, + /mob/living/simple_mob/vore/lamia/bra, + /mob/living/simple_mob/vore/lamia/albino, + /mob/living/simple_mob/vore/lamia/albino/bra, + /mob/living/simple_mob/vore/lamia/albino/shirt, + /mob/living/simple_mob/vore/lamia/cobra, + /mob/living/simple_mob/vore/lamia/cobra/bra, + /mob/living/simple_mob/vore/lamia/cobra/shirt, + /mob/living/simple_mob/vore/lamia/copper, + /mob/living/simple_mob/vore/lamia/copper/bra, + /mob/living/simple_mob/vore/lamia/copper/shirt, + /mob/living/simple_mob/vore/lamia/green, + /mob/living/simple_mob/vore/lamia/green/bra, + /mob/living/simple_mob/vore/lamia/green/shirt, + /mob/living/simple_mob/vore/lamia/zebra, + /mob/living/simple_mob/vore/lamia/zebra/bra, + /mob/living/simple_mob/vore/lamia/zebra/shirt, +)) + +/mob/living/simple_mob/vore/lamia/random +/mob/living/simple_mob/vore/lamia/random/New() + var/mob/living/simple_mob/vore/lamia/new_attrs = pick(GLOB.valid_random_lamias) + + name = initial(new_attrs.name) + desc = initial(new_attrs.desc) + + icon_state = initial(new_attrs.icon_state) + icon_living = initial(new_attrs.icon_living) + icon_rest = initial(new_attrs.icon_rest) + icon_dead = initial(new_attrs.icon_dead) + + vore_default_mode = initial(new_attrs.vore_default_mode) + vore_digest_chance = initial(new_attrs.vore_digest_chance) + vore_pounce_chance = initial(new_attrs.vore_pounce_chance) + vore_bump_chance = initial(new_attrs.vore_bump_chance) + vore_standing_too = initial(new_attrs.vore_standing_too) + vore_escape_chance = initial(new_attrs.vore_escape_chance) + + vore_upper_transfer_chance = initial(new_attrs.vore_upper_transfer_chance) + vore_tail_digest_chance = initial(new_attrs.vore_tail_digest_chance) + vore_tail_absorb_chance = initial(new_attrs.vore_tail_absorb_chance) + vore_tail_transfer_chance = initial(new_attrs.vore_tail_transfer_chance) + + . = ..() + +/datum/say_list/lamia + speak = list("Sss...","Sss!","Hiss!","HSSSSS") + emote_hear = list("hisses","slithers") + emote_see = list("shakes her head","coils","stretches","slithers") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 2722a12f01..25e1f93695 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -222,16 +222,24 @@ if(istype(A, /obj/effect/decal/point)) return 0 - var/tile = get_turf(A) + var/turf/tile = get_turf(A) if (!tile) return 0 - var/obj/P = new /obj/effect/decal/point(tile) - P.invisibility = invisibility - P.plane = plane - spawn (20) - if(P) - qdel(P) // qdel + var/turf/our_tile = get_turf(src) + var/obj/visual = new /obj/effect/decal/point(our_tile) + visual.invisibility = invisibility + visual.plane = plane + + animate(visual, + pixel_x = (tile.x - our_tile.x) * world.icon_size + A.pixel_x, + pixel_y = (tile.y - our_tile.y) * world.icon_size + A.pixel_y, + time = 1.7, + easing = EASE_OUT) + + spawn(20) + if(visual) + qdel(visual) // qdel face_atom(A) return 1 diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index ff68a02eac..953f4d01ac 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -220,7 +220,7 @@ break if((equip_preview_mob & EQUIP_PREVIEW_LOADOUT) && !(previewJob && (equip_preview_mob & EQUIP_PREVIEW_JOB) && (previewJob.type == /datum/job/ai || previewJob.type == /datum/job/cyborg))) - var/list/equipped_slots = list() //If more than one item takes the same slot only spawn the first + var/list/equipped_slots = list() for(var/thing in gear) var/datum/gear/G = gear_datums[thing] if(G) @@ -243,7 +243,8 @@ if(G.slot && !(G.slot in equipped_slots)) var/metadata = gear[G.display_name] if(mannequin.equip_to_slot_or_del(G.spawn_item(mannequin, metadata), G.slot)) - equipped_slots += G.slot + if(G.slot != slot_tie) + equipped_slots += G.slot if((equip_preview_mob & EQUIP_PREVIEW_JOB) && previewJob) mannequin.job = previewJob.title diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 19fdbb8d0f..74578c8e9a 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1427,10 +1427,15 @@ var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines //Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD -/datum/sprite_accessory/marking/tat_heart - name = "Tattoo (Heart, Torso)" - icon_state = "tat_heart" - body_parts = list(BP_TORSO) +/datum/sprite_accessory/marking/tat_rheart + name = "Tattoo (Heart, R. Arm)" + icon_state = "tat_rheart" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/tat_lheart + name = "Tattoo (Heart, L. Arm)" + icon_state = "tat_lheart" + body_parts = list(BP_L_ARM) /datum/sprite_accessory/marking/tat_hive name = "Tattoo (Hive, Back)" diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index ad89abfd3b..32f0c45183 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -697,6 +697,11 @@ icon_state = "eyes_sergal" body_parts = list(BP_HEAD) + closedeyes + name = "Closed Eyes" + icon_state = "eyes_closed" + body_parts = list(BP_HEAD) + brows name = "Eyebrows" icon_state = "brows" diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 7a8f2412f2..52e843a9ee 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -14,7 +14,7 @@ set_typing_indicator(FALSE) usr.say(message) -/mob/verb/me_verb(message as text) +/mob/verb/me_verb(message as message) set name = "Me" set category = "IC" diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 05642705a1..4f48a4adf4 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -2,7 +2,7 @@ ////////////////////SUBTLE COMMAND//////////////////// ////////////////////////////////////////////////////// -/mob/verb/me_verb_subtle(message as text) //This would normally go in say.dm +/mob/verb/me_verb_subtle(message as message) //This would normally go in say.dm set name = "Subtle" set category = "IC" set desc = "Emote to nearby people (and your pred/prey)" diff --git a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm index 1f88ed6cb2..f56683451e 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm @@ -3,6 +3,7 @@ desc = "A wall-mounted touchscreen computer." icon = 'icons/obj/modular_telescreen.dmi' icon_state = "telescreen" + layer = ABOVE_WINDOW_LAYER icon_state_unpowered = "telescreen" icon_state_menu = "menu" icon_state_screensaver = "standby" diff --git a/code/modules/nifsoft/software/15_misc.dm b/code/modules/nifsoft/software/15_misc.dm index 7cdd364b16..bd0975269d 100644 --- a/code/modules/nifsoft/software/15_misc.dm +++ b/code/modules/nifsoft/software/15_misc.dm @@ -127,7 +127,7 @@ /datum/nifsoft/sizechange/activate() if((. = ..())) - var/new_size = input("Put the desired size (25-200%)", "Set Size", 200) as num + var/new_size = input("Put the desired size (25-200%)", "Set Size", 200) as num|null if (!ISINRANGE(new_size,25,200)) to_chat(nif.human,"The safety features of the NIF Program prevent you from choosing this size.") diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index 1c231fc4e0..16a44332cb 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -274,6 +274,7 @@ GLOBAL_LIST_EMPTY(all_waypoints) /obj/machinery/computer/ship/navigation/telescreen //little hacky but it's only used on one ship so it should be okay icon_state = "tele_nav" + layer = ABOVE_WINDOW_LAYER icon_keyboard = null icon_screen = null circuit = /obj/item/weapon/circuitboard/nav/tele diff --git a/code/modules/overmap/spacetravel.dm b/code/modules/overmap/spacetravel.dm index 658ae729a4..8bae95434a 100644 --- a/code/modules/overmap/spacetravel.dm +++ b/code/modules/overmap/spacetravel.dm @@ -73,8 +73,9 @@ proc/get_deepspace(x,y) /mob/lost_in_space() return isnull(client) -/mob/living/carbon/human/lost_in_space() - return isnull(client) && !key && stat == DEAD +/mob/living/lost_in_space() + return FALSE + // return isnull(client) && !key && stat == DEAD // Allows bodies that players have ghosted from to be deleted - Ater proc/overmap_spacetravel(var/turf/space/T, var/atom/movable/A) if (!T || !A) diff --git a/code/modules/pda/ai.dm b/code/modules/pda/ai.dm index 9072eef96e..10a04effb3 100644 --- a/code/modules/pda/ai.dm +++ b/code/modules/pda/ai.dm @@ -26,7 +26,7 @@ set name = "Use PDA" set src in usr - if(!can_use()) + if(!can_use(usr)) return tgui_interact(usr) diff --git a/code/modules/pda/messenger.dm b/code/modules/pda/messenger.dm index 38360e127a..a902bec3aa 100644 --- a/code/modules/pda/messenger.dm +++ b/code/modules/pda/messenger.dm @@ -109,7 +109,7 @@ // Specifically here for the chat message. /datum/data/pda/app/messenger/Topic(href, href_list) - if(!pda.can_use()) + if(!pda.can_use(usr)) return unnotify() @@ -140,7 +140,7 @@ if(last_text && world.time < last_text + 5) return - if(!pda.can_use()) + if(!pda.can_use(usr)) return last_text = world.time diff --git a/code/modules/pda/pda.dm b/code/modules/pda/pda.dm index 3c9b03ce1e..2c3b368730 100644 --- a/code/modules/pda/pda.dm +++ b/code/modules/pda/pda.dm @@ -147,16 +147,8 @@ var/global/list/obj/item/device/pda/PDAs = list() log_debug("Invalid switch for PDA, defaulting to old PDA icons. [pdachoice] chosen.") start_program(find_program(/datum/data/pda/app/main_menu)) -/obj/item/device/pda/proc/can_use() - if(!ismob(loc)) - return FALSE - - var/mob/M = loc - if(M.incapacitated(INCAPACITATION_ALL)) - return FALSE - if(src in M.contents) - return TRUE - return FALSE +/obj/item/device/pda/proc/can_use(mob/user) + return (tgui_status(user, GLOB.tgui_inventory_state) == STATUS_INTERACTIVE) /obj/item/device/pda/GetAccess() if(id) @@ -169,7 +161,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/MouseDrop(obj/over_object as obj, src_location, over_location) var/mob/M = usr - if((!istype(over_object, /obj/screen)) && can_use()) + if((!istype(over_object, /obj/screen)) && can_use(usr)) return attack_self(M) return diff --git a/code/modules/pda/pda_tgui.dm b/code/modules/pda/pda_tgui.dm index 0d70b6db02..6d57a6c25e 100644 --- a/code/modules/pda/pda_tgui.dm +++ b/code/modules/pda/pda_tgui.dm @@ -2,11 +2,6 @@ /obj/item/device/pda/tgui_state(mob/user) return GLOB.tgui_inventory_state -/obj/item/device/pda/tgui_status(mob/user, datum/tgui_state/state) - . = ..() - if(!can_use()) - . = min(., STATUS_UPDATE) - /obj/item/device/pda/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) @@ -50,6 +45,7 @@ data["idLink"] = (id ? text("[id.registered_name], [id.assignment]") : "--------") data["useRetro"] = retro_mode + data["touch_silent"] = touch_silent data["cartridge_name"] = cartridge ? cartridge.name : "" data["stationTime"] = stationtime2text() //worldtime2stationtime(world.time) // Aaa which fucking one is canonical there's SO MANY @@ -68,12 +64,6 @@ if(..()) return TRUE - if(!can_use()) - usr.unset_machine() - if(ui) - ui.close() - return FALSE - add_fingerprint(usr) usr.set_machine(src) @@ -113,6 +103,8 @@ id_check(usr, 1) if("Retro") retro_mode = !retro_mode + if("TouchSounds") + touch_silent = !touch_silent if("Ringtone") return set_ringtone() else diff --git a/code/modules/persistence/noticeboard.dm b/code/modules/persistence/noticeboard.dm index 046972ee36..c37e084ce8 100644 --- a/code/modules/persistence/noticeboard.dm +++ b/code/modules/persistence/noticeboard.dm @@ -3,6 +3,7 @@ desc = "A board for pinning important notices upon." icon = 'icons/obj/stationobjs.dmi' icon_state = "nboard00" + layer = ABOVE_WINDOW_LAYER density = 0 anchored = 1 var/list/notices diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 90ba2d1a36..97a2b9ae76 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -80,8 +80,7 @@ GLOBAL_LIST_EMPTY(apcs) desc = "A control terminal for the area electrical systems." icon = 'icons/obj/power.dmi' icon_state = "apc0" - plane = TURF_PLANE - layer = ABOVE_TURF_LAYER + layer = ABOVE_WINDOW_LAYER anchored = 1 use_power = USE_POWER_OFF clicksound = "switch" diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 996847b13b..c3927ec2bd 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -12,11 +12,19 @@ light_range = 4 var/obj/machinery/field_generator/FG1 = null var/obj/machinery/field_generator/FG2 = null + var/list/shockdirs var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second. /obj/machinery/containment_field/Initialize() + . = ..() + shockdirs = list(turn(dir,90),turn(dir,-90)) sense_proximity(callback = .HasProximity) +/obj/machinery/containment_field/set_dir(new_dir) + . = ..() + if(.) + shockdirs = list(turn(dir,90),turn(dir,-90)) + /obj/machinery/containment_field/Destroy() unsense_proximity(callback = .HasProximity) if(FG1 && !FG1.clean_up) @@ -36,11 +44,17 @@ /obj/machinery/containment_field/ex_act(severity) return 0 +/obj/machinery/containment_field/Crossed(mob/living/L) + if(!istype(L) || L.incorporeal_move) + return + shock(L) + /obj/machinery/containment_field/HasProximity(turf/T, atom/movable/AM, old_loc) - if(istype(AM,/mob/living/silicon) && prob(40)) - shock(AM) - return 1 - if(istype(AM,/mob/living/carbon) && prob(50)) + if(!istype(AM, /mob/living) || AM:incorporeal_move) + return 0 + if(!(get_dir(src,AM) in shockdirs)) + return 0 + if(issilicon(AM) ? prob(40) : prob(50)) shock(AM) return 1 return 0 diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 763dd32ca8..6112da7b00 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -285,11 +285,10 @@ field_generator power level display var/field_dir = get_dir(T,get_step(G.loc, NSEW)) T = get_step(T, NSEW) if(!locate(/obj/machinery/containment_field) in T) - var/obj/machinery/containment_field/CF = new/obj/machinery/containment_field() + var/obj/machinery/containment_field/CF = new/obj/machinery/containment_field(T) CF.set_master(src,G) fields += CF G.fields += CF - CF.loc = T CF.set_dir(field_dir) var/listcheck = 0 for(var/obj/machinery/field_generator/FG in connected_gens) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 850bb5807c..ec059bc5f4 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -24,13 +24,16 @@ GLOBAL_LIST_EMPTY(solars_list) var/ndir = SOUTH // target dir var/turn_angle = 0 var/obj/machinery/power/solar_control/control = null + var/glass_type = /obj/item/stack/material/glass /obj/machinery/power/solar/drain_power() return -1 -/obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S) +/obj/machinery/power/solar/Initialize(mapload, glass_type) . = ..() - Make(S) + if(glass_type == /obj/item/stack/material/glass/reinforced) //if the panel is in reinforced glass + health *= 2 + update_icon() connect_to_network() /obj/machinery/power/solar/Destroy() @@ -50,28 +53,16 @@ GLOBAL_LIST_EMPTY(solars_list) control.connected_panels.Remove(src) control = null -/obj/machinery/power/solar/proc/Make(var/obj/item/solar_assembly/S) - if(!S) - S = new /obj/item/solar_assembly(src) - S.glass_type = /obj/item/stack/material/glass - S.anchored = TRUE - S.loc = src - if(S.glass_type == /obj/item/stack/material/glass/reinforced) //if the panel is in reinforced glass - health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to - update_icon() - - - /obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user) if(W.is_crowbar()) playsound(src, 'sound/machines/click.ogg', 50, 1) user.visible_message("[user] begins to take the glass off the solar panel.") if(do_after(user, 50)) - var/obj/item/solar_assembly/S = locate() in src - if(S) - S.loc = src.loc - S.give_glass() + var/obj/item/solar_assembly/S = new(loc) + S.anchored = TRUE + var/obj/item/stack/glass = new glass_type(loc) + glass.amount = 2 playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the solar panel.") qdel(src) @@ -169,8 +160,8 @@ GLOBAL_LIST_EMPTY(solars_list) return -/obj/machinery/power/solar/fake/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc, S, 0) +/obj/machinery/power/solar/fake/New(var/turf/loc, var/glass_type) + ..(loc, glass_type, 0) /obj/machinery/power/solar/fake/process() . = PROCESS_KILL @@ -213,20 +204,11 @@ GLOBAL_LIST_EMPTY(solars_list) w_class = ITEMSIZE_LARGE // Pretty big! anchored = 0 var/tracker = 0 - var/glass_type = null /obj/item/solar_assembly/attack_hand(var/mob/user) if(!anchored || !isturf(loc)) // You can't pick it up ..() -// Give back the glass type we were supplied with -/obj/item/solar_assembly/proc/give_glass() - if(glass_type) - var/obj/item/stack/material/S = new glass_type(src.loc) - S.amount = 2 - glass_type = null - - /obj/item/solar_assembly/attackby(var/obj/item/weapon/W, var/mob/user) if (!isturf(loc)) return 0 @@ -246,13 +228,12 @@ GLOBAL_LIST_EMPTY(solars_list) if(istype(W, /obj/item/stack/material) && (W.get_material_name() == "glass" || W.get_material_name() == "rglass")) var/obj/item/stack/material/S = W if(S.use(2)) - glass_type = W.type playsound(src, 'sound/machines/click.ogg', 50, 1) user.visible_message("[user] places the glass on the solar assembly.") if(tracker) - new /obj/machinery/power/tracker(get_turf(src), src) + new /obj/machinery/power/tracker(get_turf(src), W.type) else - new /obj/machinery/power/solar(get_turf(src), src) + new /obj/machinery/power/solar(get_turf(src), W.type) qdel(src) else to_chat(user, "You need two sheets of glass to put them into a solar panel.") diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index b2a23126c0..9ec2d2e4ab 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -87,7 +87,7 @@ forceMove(T) set_dir(move_dir) for(var/mob/living/carbon/C in loc) - dust_mobs(C) + dust_mob(C) sleep(1) // So movement is smooth /obj/singularity/energy_ball/proc/handle_energy() @@ -112,7 +112,7 @@ var/Orchiectomy_target = pick(orbiting_balls) qdel(Orchiectomy_target) - else if(orbiting_balls.len) + else dissipate() //sing code has a much better system. /obj/singularity/energy_ball/proc/new_mini_ball() @@ -129,43 +129,38 @@ EB.orbit(src, orbitsize, pick(FALSE, TRUE), rand(10, 25), pick(3, 4, 5, 6, 36)) +/obj/singularity/energy_ball/attack_hand(mob/user) + dust_mob(user) + return 1 /obj/singularity/energy_ball/Bump(atom/A) - dust_mobs(A) + dust_mob(A) /obj/singularity/energy_ball/Bumped(atom/movable/AM) - dust_mobs(AM) + dust_mob(AM) /obj/singularity/energy_ball/orbit(obj/singularity/energy_ball/target) if (istype(target)) target.orbiting_balls += src //TODO-LESH-DEL global.poi_list -= src - target.dissipate_strength = target.orbiting_balls.len + target.dissipate_strength = target.orbiting_balls.len + 1 . = ..() /obj/singularity/energy_ball/stop_orbit() if (orbiting && istype(orbiting.orbiting, /obj/singularity/energy_ball)) var/obj/singularity/energy_ball/orbitingball = orbiting.orbiting orbitingball.orbiting_balls -= src - orbitingball.dissipate_strength = orbitingball.orbiting_balls.len + orbitingball.dissipate_strength = orbitingball.orbiting_balls.len + 1 ..() if (!loc && !QDELETED(src)) qdel(src) -/obj/singularity/energy_ball/proc/dust_mobs(atom/A) - if(isliving(A)) - var/mob/living/L = A - if(L.incorporeal_move) - return - if(!iscarbon(A)) +/obj/singularity/energy_ball/proc/dust_mob(mob/living/L) + if(!istype(L) || L.incorporeal_move) return - for(var/obj/machinery/power/grounding_rod/GR in orange(src, 2)) - if(GR.anchored) - return - var/mob/living/carbon/C = A - // C.dust() - Changing to do fatal elecrocution instead - C.electrocute_act(500, src, def_zone = BP_TORSO) + // L.dust() - Changing to do fatal elecrocution instead + L.electrocute_act(500, src, def_zone = BP_TORSO) /proc/tesla_zap(atom/source, zap_range = 3, power, explosive = FALSE, stun_mobs = TRUE) if(!source) // Some mobs and maybe some objects delete themselves when they die. diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 0e2cc7cbf8..c03d7db3b6 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -11,14 +11,15 @@ anchored = 1 density = 1 use_power = USE_POWER_OFF + var/glass_type = /obj/item/stack/material/glass var/id = 0 var/sun_angle = 0 // sun angle as set by sun datum var/obj/machinery/power/solar_control/control = null -/obj/machinery/power/tracker/New(var/turf/loc, var/obj/item/solar_assembly/S) - ..(loc) - Make(S) +/obj/machinery/power/tracker/Initialize(mapload, glass_type) + . = ..() + update_icon() connect_to_network() /obj/machinery/power/tracker/Destroy() @@ -38,15 +39,6 @@ control.connected_tracker = null control = null -/obj/machinery/power/tracker/proc/Make(var/obj/item/solar_assembly/S) - if(!S) - S = new /obj/item/solar_assembly(src) - S.glass_type = /obj/item/stack/material/glass - S.tracker = 1 - S.anchored = 1 - S.loc = src - update_icon() - //updates the tracker icon and the facing angle for the control computer /obj/machinery/power/tracker/proc/set_angle(var/angle) sun_angle = angle @@ -63,10 +55,11 @@ playsound(src, 'sound/machines/click.ogg', 50, 1) user.visible_message("[user] begins to take the glass off the solar tracker.") if(do_after(user, 50)) - var/obj/item/solar_assembly/S = locate() in src - if(S) - S.loc = src.loc - S.give_glass() + var/obj/item/solar_assembly/S = new(loc) + S.tracker = TRUE + S.anchored = TRUE + var/obj/item/stack/glass = new glass_type(loc) + glass.amount = 2 playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) user.visible_message("[user] takes the glass off the tracker.") qdel(src) diff --git a/code/modules/projectiles/guns/magnetic/bore.dm b/code/modules/projectiles/guns/magnetic/bore.dm index 0594e2abb3..d70439a440 100644 --- a/code/modules/projectiles/guns/magnetic/bore.dm +++ b/code/modules/projectiles/guns/magnetic/bore.dm @@ -1,27 +1,24 @@ /obj/item/weapon/gun/magnetic/matfed - name = "portable phoron bore" - desc = "A large man-portable tunnel bore, using phorogenic plasma blasts. Point away from user." - description_fluff = "An aging Grayson Manufactories mining tool used for rapidly digging through rock. Mass production was discontinued when many of the devices were stolen and used to break into a high security facility by Boiling Point drones." - description_antag = "This device is exceptional at breaking down walls, though it is incredibly loud when doing so." - description_info = "The projectile of this tool will travel six tiles before dissipating, excavating mineral walls as it does so. It can be reloaded with phoron sheets." - - icon_state = "bore" - item_state = "bore" - wielded_item_state = "bore-wielded" - one_handed_penalty = 5 - - projectile_type = /obj/item/projectile/bullet/magnetic/bore - - gun_unreliable = 0 - power_cost = 750 - load_type = /obj/item/stack/material + load_type = list(/obj/item/stack/material, /obj/item/weapon/ore) var/mat_storage = 0 // How much material is stored inside? Input in multiples of 2000 as per auto/protolathe. var/max_mat_storage = 8000 // How much material can be stored inside? var/mat_cost = 500 // How much material is used per-shot? - var/ammo_material = MAT_PHORON + var/ammo_material + var/obj/item/weapon/stock_parts/manipulator/manipulator // Installed manipulator. Mostly for Phoron Bore, higher rating == less mats consumed upon firing. Set to a path to spawn with one of that type. var/loading = FALSE +/obj/item/weapon/gun/magnetic/matfed/Initialize() + . = ..() + if(ispath(manipulator)) + manipulator = new manipulator(src) + if(manipulator) + mat_cost = initial(mat_cost) / (2*manipulator.rating) + +/obj/item/weapon/gun/magnetic/matfed/Destroy() + QDEL_NULL(manipulator) + . = ..() + /obj/item/weapon/gun/magnetic/matfed/examine(mob/user) . = ..() var/ammotext = show_ammo() @@ -46,6 +43,7 @@ overlays = overlays_to_add ..() + /obj/item/weapon/gun/magnetic/matfed/attack_hand(var/mob/user) // It doesn't keep a loaded item inside. if(user.get_inactive_hand() == src) var/obj/item/removing @@ -55,7 +53,6 @@ cell = null if(removing) - removing.forceMove(get_turf(src)) user.put_in_hands(removing) user.visible_message("\The [user] removes \the [removing] from \the [src].") playsound(src, 'sound/machines/click.ogg', 10, 1) @@ -77,91 +74,170 @@ /obj/item/weapon/gun/magnetic/matfed/attackby(var/obj/item/thing, var/mob/user) if(removable_components) - if(istype(thing, /obj/item/weapon/cell)) - if(cell) - to_chat(user, "\The [src] already has \a [cell] installed.") - return - cell = thing - user.drop_from_inventory(cell) - cell.forceMove(src) - playsound(src, 'sound/machines/click.ogg', 10, 1) - user.visible_message("\The [user] slots \the [cell] into \the [src].") - update_icon() - return if(thing.is_crowbar()) if(!manipulator) to_chat(user, "\The [src] has no manipulator installed.") return - manipulator.forceMove(get_turf(src)) user.put_in_hands(manipulator) user.visible_message("\The [user] levers \the [manipulator] from \the [src].") - playsound(src, 'sound/items/Crowbar.ogg', 50, 1) + playsound(src, thing.usesound, 50, 1) + mat_cost = initial(mat_cost) manipulator = null update_icon() return - if(thing.is_screwdriver()) - if(!capacitor) - to_chat(user, "\The [src] has no capacitor installed.") - return - capacitor.forceMove(get_turf(src)) - user.put_in_hands(capacitor) - user.visible_message("\The [user] unscrews \the [capacitor] from \the [src].") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) - capacitor = null - update_icon() - return - - if(istype(thing, /obj/item/weapon/stock_parts/capacitor)) - if(capacitor) - to_chat(user, "\The [src] already has \a [capacitor] installed.") - return - capacitor = thing - user.drop_from_inventory(capacitor) - capacitor.forceMove(src) - playsound(src, 'sound/machines/click.ogg', 10, 1) - power_per_tick = (power_cost*0.15) * capacitor.rating - user.visible_message("\The [user] slots \the [capacitor] into \the [src].") - update_icon() - return if(istype(thing, /obj/item/weapon/stock_parts/manipulator)) if(manipulator) to_chat(user, "\The [src] already has \a [manipulator] installed.") return manipulator = thing - user.drop_from_inventory(manipulator) - manipulator.forceMove(src) + user.drop_from_inventory(manipulator, src) playsound(src, 'sound/machines/click.ogg', 10,1) - mat_cost = initial(mat_cost) % (2*manipulator.rating) + mat_cost = initial(mat_cost) / (2*manipulator.rating) user.visible_message("\The [user] slots \the [manipulator] into \the [src].") update_icon() return - if(istype(thing, load_type)) - loading = TRUE + if(is_type_in_list(thing, load_type)) var/obj/item/stack/material/M = thing - if(!M.material || M.material.name != ammo_material) - return + if(istype(M)) //stack + if(!M.material || M.material.name != ammo_material || loading) + return - if(mat_storage + 2000 > max_mat_storage) - to_chat(user, "\The [src] cannot hold more [ammo_material].") - return + if(mat_storage + SHEET_MATERIAL_AMOUNT > max_mat_storage) + to_chat(user, "\The [src] cannot hold more [ammo_material].") + return - var/can_hold_val = 0 - while(can_hold_val < round(max_mat_storage / 2000)) - if(mat_storage + 2000 <= max_mat_storage && do_after(user,1.5 SECONDS)) + var/can_hold_val = 0 + loading = TRUE + while(mat_storage + SHEET_MATERIAL_AMOUNT <= max_mat_storage && do_after(user,1.5 SECONDS)) can_hold_val ++ - mat_storage += 2000 + mat_storage += SHEET_MATERIAL_AMOUNT playsound(src, 'sound/effects/phasein.ogg', 15, 1) - else - loading = FALSE - break - M.use(can_hold_val) + M.use(can_hold_val) + loading = FALSE + + else //ore + if(M.material != ammo_material) + return + + if(mat_storage + (SHEET_MATERIAL_AMOUNT/2*0.8) > max_mat_storage) + to_chat(user, "\The [src] cannot hold more [ammo_material].") + return + + qdel(M) + mat_storage += (SHEET_MATERIAL_AMOUNT/2*0.8) //two plasma ores needed per sheet, some inefficiency for not using refined product + user.visible_message("\The [user] loads \the [src] with \the [M].") playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) update_icon() return + . = ..() + +#define GEN_STARTING -1 +#define GEN_OFF 0 +#define GEN_IDLE 1 +#define GEN_ACTIVE 2 + +/obj/item/weapon/gun/magnetic/matfed/phoronbore + name = "portable phoron bore" + desc = "A large man-portable tunnel bore, using phorogenic plasma blasts. Point away from user." + description_fluff = "An aging Grayson Manufactories mining tool used for rapidly digging through rock. Mass production was discontinued when many of the devices were stolen and used to break into a high security facility by Boiling Point drones." + description_antag = "This device is exceptional at breaking down walls, though it is incredibly loud when doing so." + description_info = "The projectile of this tool will travel six tiles before dissipating, excavating mineral walls as it does so. It can be reloaded with phoron sheets or ore, and has a togglable generator that can recharge the power cell using stored phoron." + + icon_state = "bore" + item_state = "bore" + wielded_item_state = "bore-wielded" + one_handed_penalty = 5 + + projectile_type = /obj/item/projectile/bullet/magnetic/bore + + gun_unreliable = 0 + power_cost = 100 + ammo_material = MAT_PHORON + + action_button_name = "Toggle internal generator" + + var/generator_state = GEN_OFF + var/datum/looping_sound/small_motor/soundloop + var/time_started //to keep the soundloop from being "stopped" too soon and playing indefinitely + +/obj/item/weapon/gun/magnetic/matfed/phoronbore/Initialize() + . = ..() + soundloop = new(list(src), 0) + +/obj/item/weapon/gun/magnetic/matfed/phoronbore/Destroy() + QDEL_NULL(soundloop) + . = ..() + +/obj/item/weapon/gun/magnetic/matfed/phoronbore/ui_action_click() + toggle_generator(usr) + +/obj/item/weapon/gun/magnetic/matfed/phoronbore/process() + if(generator_state && !mat_storage) + audible_message(SPAN_NOTICE("\The [src] goes quiet."),SPAN_NOTICE("A motor noise cuts out.")) + soundloop.stop() + generator_state = GEN_OFF + + else if(generator_state > GEN_OFF) + if(generator_state == GEN_IDLE && (cell?.percent() < 80 || (!cell && capacitor && capacitor.charge/capacitor.max_charge < 0.8))) + generator_state = GEN_ACTIVE + else if(generator_state == GEN_ACTIVE && (!cell || cell.fully_charged()) && (!capacitor || capacitor.charge == capacitor.max_charge)) + generator_state = GEN_IDLE + soundloop.speed = generator_state + generator_generate() + + if(capacitor) + if(cell) + if(capacitor.charge < capacitor.max_charge && cell.checked_use(power_per_tick)) + capacitor.charge(power_per_tick) + else if(!generator_state) + capacitor.use(capacitor.charge * 0.05) + + update_state() + +/obj/item/weapon/gun/magnetic/matfed/phoronbore/proc/generator_generate() + var/fuel_used = generator_state == GEN_IDLE ? 5 : 25 + var/power_made = fuel_used * 800 * CELLRATE //20kW when active, same power as a pacman on setting one, but less efficient because compact and portable + if(cell) + cell.give(power_made) + else if(capacitor) + capacitor.charge(power_made) + mat_storage = max(mat_storage - fuel_used, 0) + var/turf/T = get_turf(src) + if(T) + T.assume_gas("carbon_dioxide", fuel_used * 0.01, T0C+200) + +/obj/item/weapon/gun/magnetic/matfed/phoronbore/proc/toggle_generator(mob/living/user) + if(!generator_state && !mat_storage) + to_chat(user, SPAN_NOTICE("\The [src] has no fuel!")) + return + + else if(!generator_state) + generator_state = GEN_STARTING + var/pull = (!cell || cell.charge < 100) ? rand(1,4) : 0 + while(pull) + playsound(src, 'sound/items/small_motor/motor_pull_attempt.ogg', 100) + if(!do_after(user, 2 SECONDS, src)) + generator_state = GEN_OFF + return + pull-- + soundloop.start() + time_started = world.time + cell?.use(100) + audible_message(SPAN_NOTICE("\The [src] starts chugging."),SPAN_NOTICE("A motor noise starts up.")) + generator_state = GEN_IDLE + + else if(generator_state > GEN_OFF && time_started + 3 SECONDS < world.time) + soundloop.stop() + audible_message(SPAN_NOTICE("\The [src] goes quiet."),SPAN_NOTICE("A motor noise cuts out.")) + generator_state = GEN_OFF + +/obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded + cell = /obj/item/weapon/cell/apc + capacitor = /obj/item/weapon/stock_parts/capacitor diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm index bbdcc29936..1b13bd8f8c 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic.dm @@ -17,7 +17,6 @@ var/obj/item/weapon/cell/cell // Currently installed powercell. var/obj/item/weapon/stock_parts/capacitor/capacitor // Installed capacitor. Higher rating == faster charge between shots. Set to a path to spawn with one of that type. - var/obj/item/weapon/stock_parts/manipulator/manipulator // Installed manipulator. Mostly for Phoron Bore, higher rating == less mats consumed upon firing. Set to a path to spawn with one of that type. var/removable_components = TRUE // Whether or not the gun can be dismantled. var/gun_unreliable = 15 // Percentage chance of detonating in your hands. @@ -38,16 +37,14 @@ if(ispath(capacitor)) capacitor = new capacitor(src) capacitor.charge = capacitor.max_charge - if(ispath(manipulator)) - manipulator = new manipulator(src) if(ispath(loaded)) loaded = new loaded(src) - + START_PROCESSING(SSobj, src) - + if(capacitor) power_per_tick = (power_cost*0.15) * capacitor.rating - + update_icon() /obj/item/weapon/gun/magnetic/Destroy() @@ -55,7 +52,6 @@ QDEL_NULL(cell) QDEL_NULL(loaded) QDEL_NULL(capacitor) - QDEL_NULL(manipulator) . = ..() /obj/item/weapon/gun/magnetic/get_cell() @@ -68,7 +64,7 @@ capacitor.charge(power_per_tick) else capacitor.use(capacitor.charge * 0.05) - + update_state() // May update icon, only if things changed. /obj/item/weapon/gun/magnetic/proc/update_state() @@ -80,7 +76,7 @@ newstate |= ICON_CELL if(capacitor) newstate |= ICON_CAP - + // Functional state if(!cell || !capacitor) newstate |= ICON_BAD @@ -88,7 +84,7 @@ newstate |= ICON_CHARGE else newstate |= ICON_READY - + // Ammo indicator if(loaded) newstate |= ICON_LOADED @@ -99,7 +95,7 @@ needs_update = TRUE state = newstate - + if(needs_update) update_icon() @@ -153,8 +149,7 @@ to_chat(user, "\The [src] already has \a [cell] installed.") return cell = thing - user.drop_from_inventory(cell) - cell.forceMove(src) + user.drop_from_inventory(cell, src) playsound(src, 'sound/machines/click.ogg', 10, 1) user.visible_message("\The [user] slots \the [cell] into \the [src].") update_icon() @@ -164,10 +159,9 @@ if(!capacitor) to_chat(user, "\The [src] has no capacitor installed.") return - capacitor.forceMove(get_turf(src)) user.put_in_hands(capacitor) user.visible_message("\The [user] unscrews \the [capacitor] from \the [src].") - playsound(src, 'sound/items/Screwdriver.ogg', 50, 1) + playsound(src, thing.usesound, 50, 1) capacitor = null update_icon() return @@ -177,8 +171,7 @@ to_chat(user, "\The [src] already has \a [capacitor] installed.") return capacitor = thing - user.drop_from_inventory(capacitor) - capacitor.forceMove(src) + user.drop_from_inventory(capacitor, src) playsound(src, 'sound/machines/click.ogg', 10, 1) power_per_tick = (power_cost*0.15) * capacitor.rating user.visible_message("\The [user] slots \the [capacitor] into \the [src].") diff --git a/code/modules/projectiles/projectile/magnetic.dm b/code/modules/projectiles/projectile/magnetic.dm index c4e0ab5e9d..d826ac7a34 100644 --- a/code/modules/projectiles/projectile/magnetic.dm +++ b/code/modules/projectiles/projectile/magnetic.dm @@ -161,6 +161,9 @@ irradiate = 20 range = 6 +/obj/item/projectile/bullet/magnetic/bore/get_structure_damage() + return damage * 3 //made for boring holes + /obj/item/projectile/bullet/magnetic/bore/Bump(atom/A, forced=0) if(istype(A, /turf/simulated/mineral)) var/turf/simulated/mineral/MI = A @@ -170,7 +173,6 @@ return 0 else if(istype(A, /turf/simulated/wall) || istype(A, /turf/simulated/shuttle/wall)) // Cause a loud, but relatively minor explosion on the wall it hits. explosion(A, -1, -1, 1, 3) - qdel(src) - return 1 + return ..() else ..() diff --git a/code/modules/radiation/radiation.dm b/code/modules/radiation/radiation.dm index cb701027d8..c467183cb5 100644 --- a/code/modules/radiation/radiation.dm +++ b/code/modules/radiation/radiation.dm @@ -45,7 +45,11 @@ /turf/simulated/wall/calc_rad_resistance() SSradiation.resistance_cache[src] = (length(contents) + 1) - cached_rad_resistance = (density ? (material.weight + material.radiation_resistance) / config.radiation_material_resistance_divisor : 0) + var/temp_rad_resistance + temp_rad_resistance += material.weight + material.radiation_resistance + if(reinf_material) + temp_rad_resistance += reinf_material.weight + reinf_material.radiation_resistance + cached_rad_resistance = (density ? (temp_rad_resistance) / config.radiation_material_resistance_divisor : 0) return /turf/simulated/mineral/calc_rad_resistance() diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm index d5e2b1a8df..902427783f 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm @@ -78,6 +78,50 @@ glass_name = "Pink Moo" glass_desc = "A very familiar looking drink. ...moo?" +/datum/reagent/ethanol/originalsin + name = "Original Sin" + id = "originalsin" + description = "Angel Ichor, entirely transformed by one drop of apple juice" + taste_description = "the apple Eve gave to Adam" + color = "#99CC35" + strength = 17 + + glass_name = "Original Sin" + glass_desc = "A drink so fine, you may just risk eternal damnation!" + +/datum/reagent/ethanol/newyorksour + name = "New York Sour" + id = "newyorksour" + description = "Whiskey sour, with a layer of wine and egg white." + taste_description = "refreshing lemoned whiskey, smoothed with wine" + color = "#FFBF3C" + strength = 17 + + glass_name = "New York Sour" + glass_desc = "A carefully poured three layered drink" + +/datum/reagent/ethanol/windgarita + name = "WND-Garita" + id = "windgarita" + description = "A highly questionable combination of margarita and Space Mountain Wind" + taste_description = "like sin, and some tequilia" + color = "#90D93D" + strength = 15 + + glass_name = "WND-Garita" + glass_desc = "Who the hell comes up with these drinks?!" + +/datum/reagent/ethanol/mudslide + name = "Mudslide" + id = "mudslide" + description = "Vodka, Kahlua and Irish Cream together at last." + taste_description = "a mocha milkshake, with a splash of vodka." + color = "#8B6338" + strength = 13 + + glass_name = "Mudslide" + glass_desc = "A richly coloured drink, comes with a chocolate garnish!" + /datum/reagent/ethanol/monstertamer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() diff --git a/code/modules/reagents/Chemistry-Recipes_vr.dm b/code/modules/reagents/Chemistry-Recipes_vr.dm index 496520f513..e08b3bd8f1 100644 --- a/code/modules/reagents/Chemistry-Recipes_vr.dm +++ b/code/modules/reagents/Chemistry-Recipes_vr.dm @@ -77,7 +77,7 @@ /datum/chemical_reaction/foam/softdrink required_reagents = list("cola" = 1, "mint" = 1) - + /datum/chemical_reaction/firefightingfoam //TODO: Make it so we can add this to the foam tanks to refill them name = "Firefighting Foam" id = "firefighting foam" @@ -85,6 +85,15 @@ required_reagents = list("water" = 1) catalysts = list("fluorine" = 10) result_amount = 1 + +/datum/chemical_reaction/firefightingfoamqol //Please don't abuse this and make us remove it. Seriously. + name = "Firefighting Foam EZ" + id = "firefighting foam ez" + result = "firefoam" + required_reagents = list("water" = 1) + catalysts = list("firefoam" = 5) + inhibitors = list("fluorine" = 0.01) + result_amount = 1 /////////////////////////////////////////////////////////////////////////////////// /// Vore Drugs @@ -290,6 +299,35 @@ required_reagents = list("blackrussian" = 2, "berryshake" = 1) result_amount = 3 +/datum/chemical_reaction/drinks/originalsin + name = "Original Sin" + id = "originalsin" + result = "originalsin" + required_reagents = list("holywine" = 1) + catalysts = list("applejuice" = 1) + result_amount = 1 + +/datum/chemical_reaction/drinks/windgarita + name = "WND-Garita" + id = "windgarita" + result = "windgarita" + required_reagents = list("margarita" = 3, "spacemountainwind" = 2, "melonliquor" = 1) + result_amount = 6 + +/datum/chemical_reaction/drinks/newyorksour + name = "New York Sour" + id = "newyorksour" + result = "newyorksour" + required_reagents = list("whiskeysour" = 3, "wine" = 2, "egg" = 1) + result_amount = 6 + +/datum/chemical_reaction/drinks/mudslide + name = "Mudslide" + id = "mudslide" + result = "mudslide" + required_reagents = list("blackrussian" = 1, "irishcream" = 1) + result_amount = 2 + /////////////////////////////////////////////////////////////////////////////////// /// Reagent colonies. /datum/chemical_reaction/meatcolony diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index 707bd3ccd9..8956e9e3c8 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -3,6 +3,7 @@ desc = "This device is used to trigger station functions, which require more than one ID card to authenticate." icon = 'icons/obj/monitors.dmi' icon_state = "auth_off" + layer = ABOVE_WINDOW_LAYER circuit = /obj/item/weapon/circuitboard/keycard_auth var/active = 0 //This gets set to 1 on all devices except the one where the initial request was made. var/event = "" diff --git a/code/modules/tgui/modules/communications.dm b/code/modules/tgui/modules/communications.dm index 1af2a003cc..7166a3db61 100644 --- a/code/modules/tgui/modules/communications.dm +++ b/code/modules/tgui/modules/communications.dm @@ -104,9 +104,10 @@ "line_2" = (stat_msg2 ? stat_msg2 : "-----"), "presets" = list( - list("name" = "blank", "label" = "Clear", "desc" = "Blank slate"), - list("name" = "shuttle", "label" = "Shuttle ETA", "desc" = "Display how much time is left."), - list("name" = "message", "label" = "Message", "desc" = "A custom message.") + list("name" = "blank", "label" = "Clear", "desc" = "Blank slate."), + list("name" = "time", "label" = "Station Time", "desc" = "The current time according to the station's clock."), + list("name" = "shuttle", "label" = "Tram ETA", "desc" = "Display how much time is left."), //VOREStation Edit - Shuttle ETA -> Tram ETA because we use trams + list("name" = "message", "label" = "Message", "desc" = "A custom message.") ), ) @@ -248,7 +249,7 @@ to_chat(usr, "Security measures prevent you from changing the alert level.") return - if(check_access(usr, access_captain)) + if(is_authenticated(usr)) change_security_level(text2num(params["level"])) else to_chat(usr, "You are not authorized to do this.") diff --git a/code/modules/turbolift/turbolift_console_vr.dm b/code/modules/turbolift/turbolift_console_vr.dm new file mode 100644 index 0000000000..a02730c08d --- /dev/null +++ b/code/modules/turbolift/turbolift_console_vr.dm @@ -0,0 +1,7 @@ +// TFF 6/10/20 - Just a little thing to prevent the button + // and console from being destroyed by explosions. +/obj/structure/lift/button/ex_act() + return + +/obj/structure/lift/panel/ex_act() + return \ No newline at end of file diff --git a/code/modules/vchat/vchat_client.dm b/code/modules/vchat/vchat_client.dm index 6890f0ba4c..f5b6613cdf 100644 --- a/code/modules/vchat/vchat_client.dm +++ b/code/modules/vchat/vchat_client.dm @@ -397,22 +397,22 @@ var/to_chat_src to_chat(src, "Error: Your chat log is already being prepared. Please wait until it's been downloaded before trying to export it again.") return - o_file = file(o_file) - // Write the CSS file to the log - o_file << "" + var/text_blob = "" // Write the messages to the log for(var/list/result in results) - o_file << "[result["message"]]
    " + text_blob += "[result["message"]]
    " CHECK_TICK - o_file << "" + text_blob += "" + + rustg_file_write(text_blob, o_file) // Send the log to the client - src << ftp(o_file, "log_[time2text(world.timeofday, "YYYY_MM_DD_(hh_mm)")].html") + src << ftp(file(o_file), "log_[time2text(world.timeofday, "YYYY_MM_DD_(hh_mm)")].html") // clean up the file on our end spawn(10 SECONDS) diff --git a/code/modules/virus2/isolator.dm b/code/modules/virus2/isolator.dm index ff5e6dbcfe..d4053e8e52 100644 --- a/code/modules/virus2/isolator.dm +++ b/code/modules/virus2/isolator.dm @@ -73,7 +73,7 @@ var/mob/living/carbon/human/D = B.data["donor"] pathogen_pool.Add(list(list(\ - "name" = "[D.get_species()] [B.name]", \ + "name" = "[istype(D) ? "[D.get_species()] " : ""][B.name]", \ "dna" = B.data["blood_DNA"], \ "unique_id" = V.uniqueID, \ "reference" = "\ref[V]", \ diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm index 4257afa1d6..e2c3a86b9d 100644 --- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm +++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm @@ -68,8 +68,13 @@ var/mob/living/carbon/human/H = M if(isTaurTail(H.tail_style)) - to_chat(src,"Too many legs. TOO MANY LEGS!!") - return FALSE + var/datum/sprite_accessory/tail/taur/ridertype = H.tail_style + if(ridertype.can_ride) + if(istype(ridertype, /datum/sprite_accessory/tail/taur/naga) || istype(ridertype, /datum/sprite_accessory/tail/taur/slug)) + to_chat(src,"Too few legs. TOO FEW LEGS!!") + return FALSE + to_chat(src,"Too many legs. TOO MANY LEGS!!") + return FALSE . = ..() if(.) @@ -190,18 +195,18 @@ extra_overlay = "fatwolf_markings" //icon_sprite_tag = "fatwolf2c" -/datum/sprite_accessory/tail/taur/wolf/skunk - name = "Skunk (Taur)" - icon_state = "skunk_s" - extra_overlay = "skunk_markings" - icon_sprite_tag = "skunk" - /datum/sprite_accessory/tail/taur/wolf/synthwolf name = "SynthWolf dual-color (Taur)" icon_state = "synthwolf_s" extra_overlay = "synthwolf_markings" //icon_sprite_tag = "synthwolf" +/datum/sprite_accessory/tail/taur/skunk + name = "Skunk (Taur)" + icon_state = "skunk_s" + extra_overlay = "skunk_markings" + icon_sprite_tag = "skunk" + /datum/sprite_accessory/tail/taur/naga name = "Naga (Taur)" icon_state = "naga_s" diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index fab6af6fca..247995a7e3 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -338,6 +338,8 @@ prey.forceMove(src) owner.updateVRPanel() + if(isanimal(owner)) + owner.update_icon() for(var/mob/living/M in contents) M.updateVRPanel() @@ -506,6 +508,8 @@ //Update owner owner.updateVRPanel() + if(isanimal(owner)) + owner.update_icon() //Digest a single item //Receives a return value from digest_act that's how much nutrition @@ -675,6 +679,8 @@ I.gurgle_contaminate(target.contents, target.contamination_flavor, target.contamination_color) items_preserved -= content owner.updateVRPanel() + if(isanimal(owner)) + owner.update_icon() for(var/mob/living/M in contents) M.updateVRPanel() diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index e9b31904f9..d5eaeb4d25 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -230,4 +230,6 @@ if(M.client) M.updateVRPanel() if(owner.client) - owner.updateVRPanel() \ No newline at end of file + owner.updateVRPanel() + if(isanimal(owner)) + owner.update_icon() \ No newline at end of file diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm index df59ffb35d..d5ec12ee85 100644 --- a/code/modules/vore/eating/digest_act_vr.dm +++ b/code/modules/vore/eating/digest_act_vr.dm @@ -28,7 +28,7 @@ if(g_damage > digest_stage) g_damage = digest_stage digest_stage -= g_damage - else + if(digest_stage <= 0) for(var/obj/item/O in contents) if(istype(O,/obj/item/weapon/storage/internal)) //Dump contents from dummy pockets. for(var/obj/item/SO in O) @@ -38,6 +38,8 @@ else if(item_storage) O.forceMove(item_storage) qdel(src) + if(g_damage > w_class) + return w_class return g_damage ///////////// diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 9ca0ddf045..449d8cd336 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -187,14 +187,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE return FALSE //Write it out -#ifdef RUST_G - call(RUST_G, "file_write")(json_to_file, path) -#else - // Fall back to using old format if we are not using rust-g - if(fexists(path)) - fdel(path) //Byond only supports APPENDING to files, not replacing. - text2file(json_to_file, path) -#endif + rustg_file_write(json_to_file, path) + if(!fexists(path)) log_debug("Saving: [path] failed file write") return FALSE diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index b9165442f3..31f47afe06 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -1287,4 +1287,25 @@ overlay_icon = 'icons/obj/modular_laptop.dmi' icon_state_unpowered = "shadowlaptop-open" icon_state = "shadowlaptop-open" - icon_state_closed = "shadowlaptop-closed" \ No newline at end of file + icon_state_closed = "shadowlaptop-closed" + +//Rboys2 - Clara Mali +/obj/item/weapon/reagent_containers/food/drinks/glass2/fluff/claraflask + name = "Clara's Vacuum Flask" + desc = "A rose gold vacuum flask." + base_name = "Clara's Vacuum Flask" + base_icon = "claraflask" + icon = 'icons/vore/custom_items_vr.dmi' + center_of_mass = list("x" = 15,"y" = 4) + filling_states = list(15, 30, 50, 60, 80, 100) + volume = 60 + +/obj/item/weapon/reagent_containers/food/drinks/glass2/fluff/claraflask/Initialize() + . = ..() + reagents.add_reagent("tea", 40) + reagents.add_reagent("milk", 20) + +/obj/item/weapon/reagent_containers/food/drinks/glass2/fluff/claraflask/update_icon() + ..() + name = initial(name) + desc = initial(desc) \ No newline at end of file diff --git a/code/modules/xenoarcheaology/finds/find_spawning.dm b/code/modules/xenoarcheaology/finds/find_spawning.dm index 27fd388c5f..b121724219 100644 --- a/code/modules/xenoarcheaology/finds/find_spawning.dm +++ b/code/modules/xenoarcheaology/finds/find_spawning.dm @@ -551,7 +551,9 @@ var/obj/item/weapon/reagent_containers/syringe/S = new_item S.volume = 30 - S.reagents.maximum_volume = 30 + //If S hasn't initialized yet, S.reagents will be null. + //However, in that case Initialize will set the maximum volume to the volume for us, so we don't need to do anything. + S.reagents?.maximum_volume = 30 item_type = new_item.name diff --git a/code/stylesheet.dm b/code/stylesheet.dm index ca7a9a51b7..4ca8fb9436 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -111,6 +111,7 @@ h1.alert, h2.alert {color: #000000;} .say_quote {font-family: Georgia, Verdana, sans-serif;} .terminus {font-family: "Times New Roman", Times, serif, sans-serif} .interface {color: #330033;} +.spacer {color: #9c660b;} BIG IMG.icon {width: 32px; height: 32px;} diff --git a/code/world.dm b/code/world.dm index 1c43ce6132..8e76fd11d7 100644 --- a/code/world.dm +++ b/code/world.dm @@ -5,3 +5,4 @@ area = /area/space view = "15x15" cache_lifespan = 7 + fps = 20 // If this isnt hard-defined, anything relying on this variable before world load will cry a lot diff --git a/html/changelogs/Meghan Rossi - borosilicate shard fix.yml b/html/changelogs/Meghan Rossi - borosilicate shard fix.yml new file mode 100644 index 0000000000..491d3380aa --- /dev/null +++ b/html/changelogs/Meghan Rossi - borosilicate shard fix.yml @@ -0,0 +1,4 @@ +author: Meghan-Rossi +delete-after: True +changes: + - bugfix: "Fixed borosilicate glass not producing shards in most situations." \ No newline at end of file diff --git a/html/changelogs/Meghan Rossi - fix infinite ratburgers.yml b/html/changelogs/Meghan Rossi - fix infinite ratburgers.yml new file mode 100644 index 0000000000..5932db7e4c --- /dev/null +++ b/html/changelogs/Meghan Rossi - fix infinite ratburgers.yml @@ -0,0 +1,4 @@ +author: Meghan-Rossi +delete-after: True +changes: + - bugfix: "Cooking a mouse into a mouseburger now uses up the mouse." \ No newline at end of file diff --git a/html/changelogs/Meghan Rossi - isolator fix.yml b/html/changelogs/Meghan Rossi - isolator fix.yml new file mode 100644 index 0000000000..4801a45890 --- /dev/null +++ b/html/changelogs/Meghan Rossi - isolator fix.yml @@ -0,0 +1,4 @@ +author: Meghan-Rossi +delete-after: True +changes: + - bugfix: "Blood from artifacts will no longer break the pathogenic isolator." \ No newline at end of file diff --git a/html/changelogs/Meghan Rossi - poiareas.yml b/html/changelogs/Meghan Rossi - poiareas.yml new file mode 100644 index 0000000000..2b845c8d26 --- /dev/null +++ b/html/changelogs/Meghan Rossi - poiareas.yml @@ -0,0 +1,4 @@ +author: Meghan-Rossi +delete-after: True +changes: + - bugfix: "Fixed some mountain POIs sometimes overlapping in odd ways" \ No newline at end of file diff --git a/html/changelogs/Meghan Rossi - tesla dissipation.yml b/html/changelogs/Meghan Rossi - tesla dissipation.yml new file mode 100644 index 0000000000..2ee721ad9a --- /dev/null +++ b/html/changelogs/Meghan Rossi - tesla dissipation.yml @@ -0,0 +1,4 @@ +author: Meghan-Rossi +delete-after: True +changes: + - tweak: "The tesla energy ball will now eventually disappear if not kept charged with the particle accelerator" \ No newline at end of file diff --git a/html/changelogs/Meghan Rossi - the_teslagen.yml b/html/changelogs/Meghan Rossi - the_teslagen.yml new file mode 100644 index 0000000000..ee59d5663e --- /dev/null +++ b/html/changelogs/Meghan Rossi - the_teslagen.yml @@ -0,0 +1,4 @@ +author: Meghan-Rossi +delete-after: True +changes: + - rscadd: "The Tesla Generator is now available from cargo. Coils and grounding rods for it may be printed on the protolathe and autolathe, respectively." \ No newline at end of file diff --git a/html/changelogs/Meghan Rossi - wall machine layering.yml b/html/changelogs/Meghan Rossi - wall machine layering.yml new file mode 100644 index 0000000000..1e3f903681 --- /dev/null +++ b/html/changelogs/Meghan Rossi - wall machine layering.yml @@ -0,0 +1,4 @@ +author: Meghan-Rossi +delete-after: True +changes: + - bugfix: "If you place wall-mounted machines such as status displays on a window, they will no longer be hidden underneath the window." \ No newline at end of file diff --git a/html/changelogs/Runa Dacino - Exosuit gripper tweak.yml b/html/changelogs/Runa Dacino - Exosuit gripper tweak.yml new file mode 100644 index 0000000000..fc17d241d0 --- /dev/null +++ b/html/changelogs/Runa Dacino - Exosuit gripper tweak.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: N3X15 + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Enabled research borgs equipped with 'exosuit gripper' to be able to replace internal exosuit parts like actuators, to upgrade or to repair" + diff --git a/html/changelogs/Woodrat - Vote.yml b/html/changelogs/Woodrat - Vote.yml new file mode 100644 index 0000000000..78317ec750 --- /dev/null +++ b/html/changelogs/Woodrat - Vote.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Woodrat + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Changes vote notification sound to that of World Server in order to help people realize there is a vote occurring." diff --git a/icons/effects/lighting_overlay.dmi b/icons/effects/lighting_overlay.dmi index bc3d25204c..80807db1e6 100644 Binary files a/icons/effects/lighting_overlay.dmi and b/icons/effects/lighting_overlay.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index d2be45594c..69842406d4 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human_races/markings.dmi b/icons/mob/human_races/markings.dmi index 46ed122c8f..f9f91da90b 100644 Binary files a/icons/mob/human_races/markings.dmi and b/icons/mob/human_races/markings.dmi differ diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi index 873d455872..a1579fa775 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/taursuits_wolf_vr.dmi b/icons/mob/taursuits_wolf_vr.dmi index 0f638ea6d3..140e6de426 100644 Binary files a/icons/mob/taursuits_wolf_vr.dmi and b/icons/mob/taursuits_wolf_vr.dmi differ diff --git a/icons/mob/uniform_1.dmi b/icons/mob/uniform_1.dmi index 20749c8afc..839aa8f388 100644 Binary files a/icons/mob/uniform_1.dmi and b/icons/mob/uniform_1.dmi differ diff --git a/icons/mob/vore_lamia.dmi b/icons/mob/vore_lamia.dmi new file mode 100644 index 0000000000..d062b473fc Binary files /dev/null and b/icons/mob/vore_lamia.dmi differ diff --git a/icons/obj/closets/bases/wall_double.dmi b/icons/obj/closets/bases/wall_double.dmi new file mode 100644 index 0000000000..e6b1a39271 Binary files /dev/null and b/icons/obj/closets/bases/wall_double.dmi differ diff --git a/icons/obj/closets/decals/large_crate.dmi b/icons/obj/closets/decals/large_crate.dmi index 2a9ff64380..4ced8d4f28 100644 Binary files a/icons/obj/closets/decals/large_crate.dmi and b/icons/obj/closets/decals/large_crate.dmi differ diff --git a/icons/obj/closets/decals/wall.dmi b/icons/obj/closets/decals/wall.dmi index 8d34c97d1a..8e5edd8148 100644 Binary files a/icons/obj/closets/decals/wall.dmi and b/icons/obj/closets/decals/wall.dmi differ diff --git a/icons/obj/closets/decals/wall_double.dmi b/icons/obj/closets/decals/wall_double.dmi new file mode 100644 index 0000000000..3649cd44ec Binary files /dev/null and b/icons/obj/closets/decals/wall_double.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 6f8f14c6a2..8be6774832 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/uniforms_1.dmi b/icons/obj/clothing/uniforms_1.dmi index 32a55ec9c2..9478ef888d 100644 Binary files a/icons/obj/clothing/uniforms_1.dmi and b/icons/obj/clothing/uniforms_1.dmi differ diff --git a/icons/obj/drinks_vr.dmi b/icons/obj/drinks_vr.dmi index 0f383a823f..280bf84cbd 100644 Binary files a/icons/obj/drinks_vr.dmi and b/icons/obj/drinks_vr.dmi differ diff --git a/icons/obj/flora/amayastuff.dmi b/icons/obj/flora/amayastuff.dmi new file mode 100644 index 0000000000..ed5196cd86 Binary files /dev/null and b/icons/obj/flora/amayastuff.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 21b649006c..33f220896e 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 24e8f9f541..dae925d5d9 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index 72a49c07c7..b83b49c93a 100644 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/icons/turf/areas_vr_talon.dmi b/icons/turf/areas_vr_talon.dmi new file mode 100644 index 0000000000..0878adbfea Binary files /dev/null and b/icons/turf/areas_vr_talon.dmi differ diff --git a/icons/vore/custom_items_vr.dmi b/icons/vore/custom_items_vr.dmi index 4b4f56ebc3..4856d6c311 100644 Binary files a/icons/vore/custom_items_vr.dmi and b/icons/vore/custom_items_vr.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 60141309ed..f4e955093e 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1225,6 +1225,7 @@ window "mapwindow" saved-params = "icon-size" on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\"" on-hide = ".winset\"mainwindow.mainvsplit.left=\"" + style=".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .small { font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .clown { color: #FF69Bf;} .tajaran {color: #803B56;} .skrell {color: #00CED1;} .solcom {color: #22228B;} .com_srus {color: #7c4848;} .zombie {color: #ff0000;} .soghun {color: #228B22;} .vox {color: #AA00AA;} .diona {color: #804000; font-weight: bold;} .trinary {color: #727272;} .kidan {color: #664205;} .slime {color: #0077AA;} .drask {color: #a3d4eb;} .vulpkanin {color: #B97A57;} .abductor {color: #800080; font-style: italic;} .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; }" window "outputwindow" elem "outputwindow" diff --git a/librust_g.so b/librust_g.so new file mode 100644 index 0000000000..3247fb19af Binary files /dev/null and b/librust_g.so differ diff --git a/maps/expedition_vr/space/_fueldepot.dm b/maps/expedition_vr/space/_fueldepot.dm index 4ec3236dd0..1f3241aee7 100644 --- a/maps/expedition_vr/space/_fueldepot.dm +++ b/maps/expedition_vr/space/_fueldepot.dm @@ -35,4 +35,10 @@ /turf/simulated/floor/tiled/techmaint/airless oxygen = 0 nitrogen = 0 - temperature = TCMB \ No newline at end of file + temperature = TCMB + +/obj/machinery/atmospherics/pipe/tank/phoron/full + start_pressure = 15000 + +/obj/machinery/atmospherics/pipe/tank/air/full + start_pressure = 15000 diff --git a/maps/expedition_vr/space/fueldepot.dmm b/maps/expedition_vr/space/fueldepot.dmm index 86e6cee6c0..381d051574 100644 --- a/maps/expedition_vr/space/fueldepot.dmm +++ b/maps/expedition_vr/space/fueldepot.dmm @@ -644,7 +644,7 @@ /turf/simulated/shuttle/plating/airless, /area/tether_away/fueldepot) "bo" = ( -/obj/machinery/atmospherics/pipe/tank/phoron, +/obj/machinery/atmospherics/pipe/tank/phoron/full, /obj/effect/floor_decal/industrial/outline/red, /turf/simulated/floor/tiled/techmaint/airless, /area/tether_away/fueldepot) @@ -1124,7 +1124,7 @@ /turf/simulated/shuttle/plating/airless, /area/tether_away/fueldepot) "cn" = ( -/obj/machinery/atmospherics/pipe/tank/air{ +/obj/machinery/atmospherics/pipe/tank/air/full{ icon_state = "air_map"; dir = 1 }, diff --git a/maps/offmap_vr/om_ships/gecko_cr.dmm b/maps/offmap_vr/om_ships/gecko_cr.dmm index 5d2dab7401..3bc59b8e4f 100644 --- a/maps/offmap_vr/om_ships/gecko_cr.dmm +++ b/maps/offmap_vr/om_ships/gecko_cr.dmm @@ -63,7 +63,9 @@ /turf/simulated/floor/plating, /area/shuttle/gecko_cr_engineering) "bJ" = ( -/obj/machinery/door/airlock/hatch, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor/glass, @@ -177,8 +179,10 @@ opacity = 0 }, /obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/hatch, /obj/structure/catwalk, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_cr_engineering) "eD" = ( @@ -499,12 +503,14 @@ /turf/simulated/floor/plating, /area/shuttle/gecko_cr_cockpit) "kU" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 4 }, /obj/structure/catwalk, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_cr_engineering) "lg" = ( @@ -814,7 +820,6 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr_cockpit) "qh" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/blast/regular{ density = 0; dir = 4; @@ -824,6 +829,9 @@ opacity = 0 }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr) "qx" = ( @@ -1401,8 +1409,10 @@ /turf/simulated/floor/plating, /area/shuttle/gecko_cr) "Br" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_cr_cockpit) "BH" = ( @@ -1480,6 +1490,15 @@ }, /turf/simulated/floor/plating, /area/shuttle/gecko_cr_engineering) +"Cs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, +/turf/simulated/floor/tiled/techmaint, +/area/shuttle/gecko_cr_cockpit) "Ct" = ( /obj/effect/floor_decal/industrial/warning/corner, /obj/machinery/airlock_sensor{ @@ -1901,7 +1920,9 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr_cockpit) "JE" = ( -/obj/machinery/computer/ship/helm, +/obj/machinery/computer/ship/helm{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_cr_cockpit) "JL" = ( @@ -1962,7 +1983,6 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_cr_cockpit) "KA" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor/glass, @@ -1971,6 +1991,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr_cockpit) "KS" = ( @@ -2223,7 +2246,6 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr_cockpit) "OJ" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/machinery/door/blast/regular{ density = 0; @@ -2233,6 +2255,9 @@ name = "Blast Shields"; opacity = 0 }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_cr) "ON" = ( @@ -2459,7 +2484,6 @@ /turf/simulated/floor/plating, /area/shuttle/gecko_cr) "RB" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -2476,6 +2500,9 @@ opacity = 0 }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr) "RG" = ( @@ -2848,7 +2875,6 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_cr_engineering) "Xs" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/machinery/door/blast/regular{ density = 0; @@ -2858,6 +2884,9 @@ name = "Blast Shields"; opacity = 0 }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_cr_engineering) "XJ" = ( @@ -3432,7 +3461,7 @@ Mf zE Gs fe -bJ +Cs dS jT kI @@ -3690,7 +3719,7 @@ HJ Iz XU mY -bJ +Cs Ct NE Jn diff --git a/maps/offmap_vr/om_ships/gecko_cr_wreck.dmm b/maps/offmap_vr/om_ships/gecko_cr_wreck.dmm index 1e1616251f..18aab66287 100644 --- a/maps/offmap_vr/om_ships/gecko_cr_wreck.dmm +++ b/maps/offmap_vr/om_ships/gecko_cr_wreck.dmm @@ -66,10 +66,12 @@ /turf/simulated/floor/airless, /area/shuttle/gecko_cr_engineering_wreck) "bJ" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr_cockpit_wreck) "bL" = ( @@ -838,13 +840,15 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr_cockpit_wreck) "qh" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/blast/regular{ dir = 4; id = "gecko_wreck_cr_blast"; name = "Blast Shields" }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr_wreck) "qx" = ( @@ -1352,8 +1356,10 @@ /turf/simulated/floor/airless, /area/shuttle/gecko_cr_wreck) "Br" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_cr_cockpit_wreck) "BC" = ( @@ -1818,7 +1824,9 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr_cockpit_wreck) "JE" = ( -/obj/machinery/computer/ship/helm, +/obj/machinery/computer/ship/helm{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_cr_cockpit_wreck) "JL" = ( @@ -1879,7 +1887,6 @@ }, /area/shuttle/gecko_cr_cockpit_wreck) "KA" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor/glass, @@ -1888,6 +1895,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr_cockpit_wreck) "KS" = ( @@ -2044,12 +2054,14 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_cr_cockpit_wreck) "NG" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 4 }, /obj/structure/catwalk, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/airless, /area/shuttle/gecko_cr_engineering_wreck) "NI" = ( @@ -2232,13 +2244,15 @@ /turf/simulated/floor/reinforced/airless, /area/shuttle/gecko_cr_wreck) "Pv" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/machinery/door/blast/regular{ dir = 4; id = "gecko_wreck_cr_blast"; name = "Blast Shields" }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_cr_wreck) "Px" = ( @@ -2410,7 +2424,6 @@ /turf/simulated/floor/airless, /area/shuttle/gecko_cr_wreck) "RB" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -2424,6 +2437,9 @@ name = "Blast Shields" }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techfloor{ nitrogen = 0; oxygen = 0 @@ -2797,8 +2813,10 @@ }, /area/shuttle/gecko_cr_engineering_wreck) "Xs" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techfloor{ nitrogen = 0; oxygen = 0 @@ -2951,8 +2969,10 @@ name = "Blast Shields" }, /obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/hatch, /obj/structure/catwalk, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/airless, /area/shuttle/gecko_cr_engineering_wreck) "Zs" = ( diff --git a/maps/offmap_vr/om_ships/gecko_sh.dmm b/maps/offmap_vr/om_ships/gecko_sh.dmm index c50673fe9a..c2a0dbec4e 100644 --- a/maps/offmap_vr/om_ships/gecko_sh.dmm +++ b/maps/offmap_vr/om_ships/gecko_sh.dmm @@ -237,8 +237,10 @@ opacity = 0 }, /obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/hatch, /obj/structure/catwalk, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_sh_engineering) "ec" = ( @@ -289,10 +291,12 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_sh_cockpit) "eP" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_sh) "fe" = ( @@ -500,7 +504,6 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_sh) "kJ" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 4 @@ -513,15 +516,20 @@ opacity = 0 }, /obj/structure/catwalk, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_sh_engineering) "kU" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ dir = 4 }, /obj/structure/catwalk, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_sh_engineering) "lh" = ( @@ -738,8 +746,10 @@ /turf/simulated/wall/rshull, /area/shuttle/gecko_sh) "qh" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_sh) "qx" = ( @@ -860,7 +870,6 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_sh) "rY" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/machinery/door/blast/regular{ density = 0; @@ -870,6 +879,9 @@ opacity = 0 }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_sh) "sB" = ( @@ -897,7 +909,6 @@ /turf/simulated/floor/plating, /area/shuttle/gecko_sh_engineering) "sS" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/blast/regular{ density = 0; dir = 4; @@ -907,6 +918,9 @@ opacity = 0 }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_sh) "te" = ( @@ -925,7 +939,6 @@ /turf/simulated/floor/plating, /area/shuttle/gecko_sh) "tM" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/blast/regular{ density = 0; dir = 4; @@ -935,6 +948,9 @@ opacity = 0 }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_sh_engineering) "tP" = ( @@ -1079,7 +1095,6 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_sh) "xc" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor/glass, @@ -1088,6 +1103,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_sh) "xd" = ( @@ -1307,7 +1325,6 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_sh) "Br" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/machinery/door/blast/regular{ density = 0; @@ -1316,6 +1333,9 @@ name = "Blast Shields"; opacity = 0 }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/plating, /area/shuttle/gecko_sh) "Bz" = ( @@ -1811,7 +1831,9 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_sh) "JE" = ( -/obj/machinery/computer/ship/helm, +/obj/machinery/computer/ship/helm{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_sh_cockpit) "Kn" = ( @@ -1856,10 +1878,12 @@ /turf/simulated/floor/plating, /area/shuttle/gecko_sh_engineering) "Lc" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_sh_cockpit) "Lf" = ( @@ -2257,7 +2281,6 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_sh) "RB" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -2266,6 +2289,9 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/gecko_sh_engineering) "RG" = ( @@ -2560,7 +2586,6 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_sh_engineering) "Xs" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/machinery/door/blast/regular{ density = 0; @@ -2570,6 +2595,9 @@ name = "Blast Shields"; opacity = 0 }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techfloor, /area/shuttle/gecko_sh_engineering) "XJ" = ( diff --git a/maps/offmap_vr/om_ships/mackerel_hc.dmm b/maps/offmap_vr/om_ships/mackerel_hc.dmm index 63ff651cda..2bc1ccf030 100644 --- a/maps/offmap_vr/om_ships/mackerel_hc.dmm +++ b/maps/offmap_vr/om_ships/mackerel_hc.dmm @@ -63,7 +63,9 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/mackerel_hc) "cv" = ( -/obj/machinery/computer/ship/helm, +/obj/machinery/computer/ship/helm{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_hc) "cD" = ( @@ -300,7 +302,10 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/mackerel_hc) "uR" = ( -/obj/machinery/door/airlock/hatch, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, +/obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_hc) "we" = ( @@ -371,13 +376,15 @@ /turf/simulated/floor/plating, /area/shuttle/mackerel_hc) "BN" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_hc) "BP" = ( diff --git a/maps/offmap_vr/om_ships/mackerel_hc_skel.dmm b/maps/offmap_vr/om_ships/mackerel_hc_skel.dmm index 83a9170b7a..0fd66f642e 100644 --- a/maps/offmap_vr/om_ships/mackerel_hc_skel.dmm +++ b/maps/offmap_vr/om_ships/mackerel_hc_skel.dmm @@ -69,7 +69,9 @@ /turf/simulated/floor/plating, /area/shuttle/mackerel_hc_skel_eng) "cv" = ( -/obj/machinery/computer/ship/helm, +/obj/machinery/computer/ship/helm{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_hc_skel_cockpit) "cD" = ( @@ -411,7 +413,6 @@ /turf/simulated/floor/plating, /area/shuttle/mackerel_hc_skel) "uR" = ( -/obj/machinery/door/airlock/hatch, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -428,6 +429,9 @@ d2 = 8; icon_state = "2-8" }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_hc_skel_cockpit) "we" = ( @@ -503,13 +507,15 @@ /turf/simulated/floor/plating, /area/shuttle/mackerel_hc_skel) "BN" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_hc_skel_eng) "BP" = ( diff --git a/maps/offmap_vr/om_ships/mackerel_lc.dmm b/maps/offmap_vr/om_ships/mackerel_lc.dmm index b1d65389bb..03d853964d 100644 --- a/maps/offmap_vr/om_ships/mackerel_lc.dmm +++ b/maps/offmap_vr/om_ships/mackerel_lc.dmm @@ -22,7 +22,9 @@ /turf/simulated/floor/plating, /area/shuttle/mackerel_lc) "bw" = ( -/obj/machinery/computer/ship/helm, +/obj/machinery/computer/ship/helm{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_lc) "bI" = ( @@ -43,13 +45,15 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_lc) "cg" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_lc) "cv" = ( @@ -314,7 +318,10 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/mackerel_lc) "ug" = ( -/obj/machinery/door/airlock/hatch, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_lc) "um" = ( diff --git a/maps/offmap_vr/om_ships/mackerel_lc_wreck.dmm b/maps/offmap_vr/om_ships/mackerel_lc_wreck.dmm index fa1ccb1128..418b6a416a 100644 --- a/maps/offmap_vr/om_ships/mackerel_lc_wreck.dmm +++ b/maps/offmap_vr/om_ships/mackerel_lc_wreck.dmm @@ -26,7 +26,9 @@ /turf/simulated/floor/airless, /area/shuttle/mackerel_lc_wreck) "bw" = ( -/obj/machinery/computer/ship/helm, +/obj/machinery/computer/ship/helm{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint/airless, /area/shuttle/mackerel_lc_wreck) "bI" = ( @@ -54,13 +56,15 @@ /turf/simulated/floor/airless, /area/shuttle/mackerel_lc_wreck) "cg" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_lc_wreck) "cv" = ( @@ -329,8 +333,10 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/mackerel_lc_wreck) "ug" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_lc_wreck) "um" = ( diff --git a/maps/offmap_vr/om_ships/mackerel_sh.dmm b/maps/offmap_vr/om_ships/mackerel_sh.dmm index de0c58a95c..7511ece7da 100644 --- a/maps/offmap_vr/om_ships/mackerel_sh.dmm +++ b/maps/offmap_vr/om_ships/mackerel_sh.dmm @@ -22,7 +22,9 @@ /turf/simulated/floor/plating, /area/shuttle/mackerel_sh) "bw" = ( -/obj/machinery/computer/ship/helm, +/obj/machinery/computer/ship/helm{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_sh) "bI" = ( @@ -43,13 +45,15 @@ /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_sh) "cg" = ( -/obj/machinery/door/airlock/hatch, /obj/machinery/door/firedoor/glass, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_sh) "cv" = ( @@ -324,7 +328,10 @@ /turf/simulated/floor/tiled/techfloor, /area/shuttle/mackerel_sh) "ug" = ( -/obj/machinery/door/airlock/hatch, +/obj/machinery/door/airlock/hatch{ + req_one_access = list() + }, +/obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/techmaint, /area/shuttle/mackerel_sh) "um" = ( diff --git a/maps/offmap_vr/talon/talon1.dmm b/maps/offmap_vr/talon/talon1.dmm index b63d7c156e..b194f0220a 100644 --- a/maps/offmap_vr/talon/talon1.dmm +++ b/maps/offmap_vr/talon/talon1.dmm @@ -53,8 +53,7 @@ "ah" = ( /obj/effect/floor_decal/industrial/outline/grey, /obj/machinery/atmospherics/portables_connector/aux{ - dir = 4; - icon_state = "map_connector-aux" + dir = 4 }, /obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled/eris/steel/gray_perforated, @@ -69,8 +68,7 @@ /area/talon/deckone/bridge) "aj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -96,8 +94,7 @@ /obj/item/weapon/pen, /obj/machinery/alarm/talon{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/brig) @@ -122,8 +119,7 @@ /area/talon/maintenance/deckone_port) "an" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 1; @@ -150,8 +146,7 @@ /area/talon/maintenance/deckone_port) "aq" = ( /obj/machinery/camera/network/talon{ - dir = 9; - icon_state = "camera" + dir = 9 }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -196,16 +191,14 @@ }, /obj/machinery/alarm/talon{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) "au" = ( /obj/effect/floor_decal/industrial/outline/grey, /obj/machinery/atmospherics/portables_connector/aux{ - dir = 8; - icon_state = "map_connector-aux" + dir = 8 }, /obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/tiled/eris/steel/gray_perforated, @@ -223,6 +216,9 @@ }, /obj/structure/table/standard, /obj/machinery/chemical_dispenser/full, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "ax" = ( @@ -241,8 +237,7 @@ icon_state = "1-2" }, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) @@ -254,8 +249,7 @@ icon_state = "1-2" }, /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard) @@ -322,35 +316,32 @@ "aG" = ( /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 8; - icon_state = "intact" + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 8; - icon_state = "intact" + dir = 8 }, /obj/structure/handrail{ dir = 8 }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port_fore_wing) "aH" = ( /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ - dir = 4; - icon_state = "intact" + dir = 4 }, /obj/structure/handrail{ dir = 4 }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard_fore_wing) "aI" = ( /obj/structure/catwalk, /obj/structure/sign/warning/moving_parts{ pixel_x = 30 }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port_fore_wing) "aJ" = ( /obj/structure/table/rack/shelf/steel, @@ -404,7 +395,6 @@ "aQ" = ( /obj/machinery/computer/ship/engines{ dir = 8; - icon_state = "computer"; req_one_access = list(301) }, /turf/simulated/floor/tiled/eris/dark/cyancorner, @@ -417,7 +407,7 @@ /obj/structure/sign/warning/moving_parts{ pixel_x = -30 }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard_fore_wing) "aT" = ( /obj/structure/catwalk, @@ -426,7 +416,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port_fore_wing) "aU" = ( /obj/structure/catwalk, @@ -434,14 +424,13 @@ dir = 1; icon_state = "4-8" }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard_fore_wing) "aV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux, /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) @@ -467,11 +456,11 @@ /area/talon/deckone/armory) "aZ" = ( /obj/structure/catwalk, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port_fore_wing) "ba" = ( /obj/structure/catwalk, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard_fore_wing) "bb" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -487,14 +476,14 @@ /obj/structure/handrail{ dir = 8 }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port_aft_wing) "bd" = ( /obj/structure/catwalk, /obj/structure/handrail{ dir = 4 }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard_aft_wing) "be" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -517,8 +506,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/brig) @@ -539,11 +527,15 @@ /obj/item/device/robotanalyzer{ pixel_y = -8 }, +/obj/machinery/alarm/talon{ + dir = 8; + pixel_x = 22 + }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "bi" = ( /obj/structure/catwalk, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port_aft_wing) "bj" = ( /obj/structure/window/reinforced, @@ -558,7 +550,7 @@ /area/talon/maintenance/deckone_starboard) "bl" = ( /obj/structure/catwalk, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard_aft_wing) "bm" = ( /obj/structure/catwalk, @@ -567,7 +559,7 @@ d2 = 8; icon_state = "4-8" }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port_aft_wing) "bn" = ( /obj/structure/catwalk, @@ -576,23 +568,21 @@ d2 = 8; icon_state = "4-8" }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard_aft_wing) "bo" = ( /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /obj/structure/catwalk, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) "bp" = ( /obj/machinery/light/small{ - dir = 8; - pixel_y = 0 + dir = 8 }, /obj/structure/catwalk, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard) "bq" = ( /obj/machinery/airlock_sensor{ @@ -603,12 +593,10 @@ /obj/effect/map_helper/airlock/atmos/chamber_pump, /obj/effect/map_helper/airlock/sensor/chamber_sensor, /obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" + dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/high_volume/aux{ - dir = 4; - icon_state = "map_vent_aux" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/gray_perforated, /area/shuttle/talonboat) @@ -634,8 +622,7 @@ }, /obj/effect/map_helper/airlock/atmos/chamber_pump, /obj/machinery/atmospherics/unary/vent_pump/high_volume/aux{ - dir = 8; - icon_state = "map_vent_aux" + dir = 8 }, /turf/simulated/floor/tiled/eris/dark/gray_perforated, /area/shuttle/talonboat) @@ -645,8 +632,7 @@ /area/talon/deckone/central_hallway) "bu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -677,8 +663,7 @@ /area/talon/maintenance/deckone_starboard) "bw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) @@ -691,12 +676,11 @@ }, /obj/effect/map_helper/airlock/sensor/ext_sensor, /obj/structure/catwalk, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) "by" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -721,7 +705,7 @@ }, /obj/effect/map_helper/airlock/sensor/ext_sensor, /obj/structure/catwalk, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard) "bA" = ( /obj/structure/catwalk, @@ -729,10 +713,9 @@ pixel_x = 30 }, /obj/machinery/camera/network/talon{ - dir = 8; - icon_state = "camera" + dir = 8 }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) "bB" = ( /obj/structure/catwalk, @@ -740,20 +723,15 @@ pixel_x = -30 }, /obj/machinery/camera/network/talon{ - dir = 4; - icon_state = "camera" + dir = 4 }, -/turf/space, +/turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard) "bC" = ( -/obj/structure/table/rack, -/obj/item/weapon/storage/box/bodybags, -/obj/item/roller, -/obj/item/roller{ - pixel_y = 8 - }, -/turf/simulated/floor/tiled/eris/white/bluecorner, -/area/talon/deckone/medical) +/obj/structure/catwalk, +/obj/structure/loot_pile/maint/technical, +/turf/simulated/floor/plating/eris/under, +/area/talon/maintenance/deckone_starboard) "bD" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -804,8 +782,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -813,8 +790,7 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /obj/machinery/computer/guestpass{ pixel_y = 30 @@ -868,12 +844,8 @@ /turf/simulated/floor/tiled/eris/dark/orangecorner, /area/talon/deckone/secure_storage) "bM" = ( -/obj/structure/closet/secure_closet/chemical{ - req_access = list(301) - }, -/obj/item/weapon/reagent_containers/spray/cleaner{ - desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; - name = "Chemistry Cleaner" +/obj/machinery/light/small{ + dir = 8 }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) @@ -885,7 +857,6 @@ alarms_hidden = 1; dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /obj/structure/mopbucket, @@ -920,8 +891,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -929,8 +899,7 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /obj/machinery/door/firedoor/glass{ dir = 2 @@ -982,9 +951,7 @@ "bW" = ( /obj/structure/table/steel, /obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 + dir = 8 }, /obj/machinery/button/remote/blast_door{ dir = 8; @@ -1053,8 +1020,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/aux, /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard) @@ -1071,8 +1037,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -1085,8 +1050,7 @@ }, /obj/machinery/door/firedoor/glass/talon, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/workroom) @@ -1209,8 +1173,7 @@ /area/talon/deckone/central_hallway) "cs" = ( /obj/structure/closet/hydrant{ - pixel_x = -32; - pixel_y = 0 + pixel_x = -32 }, /turf/simulated/floor/tiled/eris/dark/brown_platform, /area/talon/deckone/port_eng_store) @@ -1230,13 +1193,8 @@ icon_state = "2-8" }, /obj/machinery/alarm/talon{ - alarm_id = "anomaly_testing"; - breach_detection = 0; dir = 8; - frequency = 1439; - pixel_x = 22; - pixel_y = 0; - report_danger_level = 0 + pixel_x = 22 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) @@ -1257,9 +1215,7 @@ }, /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard) @@ -1271,12 +1227,10 @@ }, /obj/structure/cable/green{ d2 = 8; - dir = 2; icon_state = "0-8" }, /obj/machinery/camera/network/talon{ - dir = 10; - icon_state = "camera" + dir = 10 }, /turf/simulated/floor/tiled/eris/white/gray_platform, /area/talon/deckone/bridge_hallway) @@ -1309,8 +1263,7 @@ /area/talon/maintenance/deckone_starboard) "cC" = ( /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/white/golden, /area/talon/deckone/bridge) @@ -1327,8 +1280,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/effect/floor_decal/emblem/talon_big, /obj/machinery/camera/network/talon{ - dir = 10; - icon_state = "camera" + dir = 10 }, /turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) @@ -1340,8 +1292,7 @@ dir = 9 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /obj/machinery/firealarm{ dir = 1; @@ -1351,14 +1302,12 @@ /area/talon/deckone/central_hallway) "cH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 10; - icon_state = "intact-aux" + dir = 10 }, /obj/structure/catwalk, /obj/machinery/alarm/talon{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) @@ -1375,15 +1324,12 @@ /area/talon/deckone/armory) "cJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 6; - icon_state = "intact-aux" + dir = 6 }, /obj/structure/catwalk, /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard) @@ -1400,8 +1346,7 @@ /area/talon/deckone/bridge_hallway) "cL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -1410,17 +1355,14 @@ icon_state = "2-4" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/brig) "cM" = ( /obj/structure/closet/crate/solar, /obj/machinery/firealarm{ - dir = 2; layer = 3.3; - pixel_x = 0; pixel_y = 26 }, /turf/simulated/floor/tiled/eris/dark/brown_platform, @@ -1434,8 +1376,7 @@ /area/talon/deckone/port_eng_store) "cO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 9; - icon_state = "intact-aux" + dir = 9 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -1454,25 +1395,22 @@ dir = 10 }, /obj/machinery/light_switch{ - dir = 2; name = "light switch "; pixel_x = -12; pixel_y = 26 }, /obj/machinery/atmospherics/pipe/cap/hidden{ - dir = 4; - icon_state = "cap" - }, -/obj/structure/cable/green{ - dir = 1; - icon_state = "0-4" + dir = 4 }, /obj/machinery/power/apc/talon{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) "cQ" = ( @@ -1489,14 +1427,12 @@ dir = 6 }, /obj/machinery/light_switch{ - dir = 2; name = "light switch "; pixel_x = 12; pixel_y = 26 }, /obj/machinery/atmospherics/pipe/cap/hidden{ - dir = 8; - icon_state = "cap" + dir = 8 }, /obj/structure/cable/green{ icon_state = "0-4" @@ -1504,15 +1440,13 @@ /obj/machinery/power/apc/talon{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/starboard_eng) "cT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 5; - icon_state = "intact-aux" + dir = 5 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -1535,13 +1469,11 @@ "cV" = ( /obj/structure/cable/green, /obj/machinery/power/apc/talon{ - dir = 2; name = "south bump"; pixel_y = -24 }, /obj/machinery/light_switch{ dir = 4; - icon_state = "light1"; pixel_x = -24 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, @@ -1559,7 +1491,6 @@ /area/talon/deckone/starboard_eng) "cX" = ( /obj/machinery/atmospherics/unary/heater{ - anchored = 1; dir = 4 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, @@ -1569,12 +1500,9 @@ /area/talon/deckone/starboard_eng) "cZ" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 + dir = 8 }, /obj/machinery/atmospherics/unary/freezer{ - anchored = 1; dir = 4 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, @@ -1607,10 +1535,6 @@ "dd" = ( /obj/structure/table/standard, /obj/machinery/reagentgrinder, -/obj/structure/closet/medical_wall{ - pixel_x = 0; - pixel_y = 32 - }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "de" = ( @@ -1621,23 +1545,10 @@ /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "df" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, -/obj/structure/closet/crate/medical{ - name = "first-aid kits" - }, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/toxin, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/storage/firstaid/o2, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/fire, -/obj/item/weapon/storage/firstaid/adv, -/obj/item/weapon/storage/firstaid/adv, -/turf/simulated/floor/tiled/eris/white/bluecorner, -/area/talon/deckone/medical) +/obj/structure/catwalk, +/obj/structure/barricade, +/turf/simulated/floor/plating/eris/under, +/area/talon/maintenance/deckone_starboard) "dg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ @@ -1666,8 +1577,7 @@ /area/talon/deckone/starboard_eng) "dB" = ( /obj/item/modular_computer/console/preset/talon{ - dir = 8; - icon_state = "console" + dir = 8 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/bridge) @@ -1697,16 +1607,13 @@ "dP" = ( /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) "dQ" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 + dir = 8 }, /turf/simulated/floor/tiled/eris/dark/danger, /area/talon/deckone/secure_storage) @@ -1716,6 +1623,10 @@ }, /turf/simulated/floor/tiled/eris/dark/brown_platform, /area/talon/deckone/port_eng_store) +"dS" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/eris/white/bluecorner, +/area/talon/deckone/medical) "dU" = ( /obj/structure/cable/green{ d1 = 1; @@ -1736,8 +1647,7 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - icon_state = "intact-scrubbers" + dir = 5 }, /obj/structure/cable/green{ d1 = 1; @@ -1760,11 +1670,7 @@ pixel_x = 2; pixel_y = 5 }, -/obj/machinery/alarm/talon{ - dir = 1; - icon_state = "alarm0"; - pixel_y = -22 - }, +/obj/structure/closet/walllocker/medical/south, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "en" = ( @@ -1778,8 +1684,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/door/window/brigdoor/eastleft{ dir = 8; @@ -1812,8 +1717,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -1825,8 +1729,7 @@ req_one_access = list(301) }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/brig) @@ -1870,8 +1773,7 @@ /area/talon/deckone/brig) "fi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/starboard_eng) @@ -1934,8 +1836,7 @@ /area/talon/deckone/workroom) "gg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 5; - icon_state = "intact-aux" + dir = 5 }, /obj/structure/catwalk, /turf/simulated/floor/plating/eris/under, @@ -1996,8 +1897,7 @@ /area/talon/deckone/starboard_eng_store) "ho" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 4; - icon_state = "intact-aux" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -2011,13 +1911,9 @@ /turf/simulated/floor/tiled/eris/white/gray_platform, /area/shuttle/talonboat) "hv" = ( -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 8; - pixel_x = 0 - }, -/turf/simulated/floor/plating/eris/under, -/area/talon/maintenance/deckone_starboard) +/obj/machinery/suit_cycler/vintage/tmedic, +/turf/simulated/floor/tiled/eris/white/bluecorner, +/area/talon/deckone/medical) "hD" = ( /obj/machinery/autolathe, /turf/simulated/floor/tiled/eris/steel/gray_perforated, @@ -2027,8 +1923,7 @@ pixel_y = 30 }, /obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1; - icon_state = "map" + dir = 1 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/starboard_eng) @@ -2039,8 +1934,7 @@ "id" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ - dir = 4; - icon_state = "pipe-t" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -2050,8 +1944,7 @@ /area/talon/deckone/armory) "ij" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 4; - icon_state = "intact-aux" + dir = 4 }, /obj/machinery/door/airlock/maintenance/common, /obj/machinery/door/firedoor/glass/talon, @@ -2066,32 +1959,31 @@ icon_state = "1-2" }, /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/bridge_hallway) "iq" = ( /obj/machinery/light/small{ - dir = 8; - pixel_y = 0 + dir = 8 }, /turf/simulated/floor/tiled/eris/dark/orangecorner, /area/talon/deckone/brig) "ir" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/cap/hidden{ - dir = 1; - icon_state = "cap" + dir = 1 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) "it" = ( /obj/machinery/optable, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "ix" = ( @@ -2124,8 +2016,7 @@ /area/talon/deckone/brig) "iE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 4; - icon_state = "intact-aux" + dir = 4 }, /obj/machinery/airlock_sensor{ dir = 4; @@ -2142,19 +2033,17 @@ /area/talon/deckone/starboard_eng) "iN" = ( /obj/structure/ladder/up, -/turf/simulated/floor/tiled/steel_grid, +/turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) "iP" = ( /turf/simulated/floor/tiled/eris/white/gray_platform, /area/talon/deckone/bridge_hallway) "iR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10; - icon_state = "intact-fuel" + dir = 10 }, /obj/structure/extinguisher_cabinet{ dir = 8; - icon_state = "extinguisher_closed"; pixel_x = 30 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, @@ -2178,12 +2067,10 @@ /area/talon/deckone/brig) "jb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/cap/hidden{ - dir = 1; - icon_state = "cap" + dir = 1 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/starboard_eng) @@ -2207,7 +2094,6 @@ "jB" = ( /obj/structure/cable/green, /obj/machinery/power/apc/talon{ - cell_type = /obj/item/weapon/cell/apc; dir = 8; name = "west bump"; pixel_x = -28 @@ -2218,7 +2104,6 @@ }, /obj/machinery/firealarm{ dir = 1; - pixel_x = 0; pixel_y = -25 }, /obj/machinery/recharger, @@ -2226,8 +2111,7 @@ /area/talon/deckone/medical) "jD" = ( /obj/effect/floor_decal/emblem/talon_big{ - dir = 8; - icon_state = "talon_big" + dir = 8 }, /turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) @@ -2253,50 +2137,43 @@ /area/talon/deckone/starboard_eng) "jZ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 8; - icon_state = "map-fuel" + dir = 8 }, /turf/simulated/wall/rshull, /area/talon/deckone/port_eng) "kb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4; - icon_state = "intact-fuel" + dir = 4 }, /turf/simulated/wall/rshull, /area/talon/deckone/port_eng) "kc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10; - icon_state = "intact-fuel" + dir = 10 }, /turf/simulated/wall/rshull, /area/talon/deckone/port_eng) "kd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6; - icon_state = "intact-fuel" + dir = 6 }, /turf/simulated/wall/rshull, /area/talon/deckone/starboard_eng) "ke" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1; - icon_state = "map-fuel" + dir = 1 }, /turf/simulated/wall/rshull, /area/talon/deckone/starboard_eng) "kf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 4; - icon_state = "intact-fuel" + dir = 4 }, /turf/simulated/wall/rshull, /area/talon/deckone/starboard_eng) "kg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 9; - icon_state = "intact-fuel" + dir = 9 }, /turf/simulated/wall/rshull, /area/talon/deckone/starboard_eng) @@ -2450,8 +2327,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -2476,34 +2352,26 @@ /area/talon/maintenance/deckone_port_aft_wing) "lM" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 8; - icon_state = "map" + dir = 8 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) "mb" = ( /obj/structure/cable/green, /obj/machinery/power/apc/talon{ - cell_type = /obj/item/weapon/cell/apc; dir = 8; name = "west bump"; pixel_x = -28 }, /obj/machinery/alarm/talon{ - alarm_id = "anomaly_testing"; - breach_detection = 0; dir = 8; - frequency = 1439; - pixel_x = 22; - pixel_y = 0; - report_danger_level = 0 + pixel_x = 22 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) "me" = ( /obj/machinery/camera/network/talon{ - dir = 9; - icon_state = "camera" + dir = 9 }, /obj/structure/table/standard, /turf/simulated/floor/tiled/eris/white/gray_platform, @@ -2573,8 +2441,7 @@ /area/talon/deckone/central_hallway) "mF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 4; - icon_state = "intact-aux" + dir = 4 }, /obj/effect/map_helper/airlock/door/int_door, /obj/machinery/door/airlock/glass_external{ @@ -2590,7 +2457,6 @@ /obj/machinery/power/apc/talon{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /obj/structure/catwalk, @@ -2599,9 +2465,7 @@ "mO" = ( /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /obj/structure/catwalk, /turf/simulated/floor/plating/eris/under, @@ -2618,8 +2482,7 @@ }, /obj/machinery/portable_atmospherics/canister/air/airlock, /obj/machinery/atmospherics/portables_connector/aux{ - dir = 4; - icon_state = "map_connector-aux" + dir = 4 }, /turf/simulated/floor/tiled/eris/white/gray_platform, /area/shuttle/talonboat) @@ -2642,8 +2505,7 @@ /area/talon/deckone/central_hallway) "nu" = ( /obj/effect/floor_decal/emblem/talon_big{ - dir = 5; - icon_state = "talon_big" + dir = 5 }, /turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) @@ -2672,15 +2534,13 @@ /obj/machinery/atmospherics/binary/pump/fuel, /obj/effect/floor_decal/industrial/outline/red, /obj/machinery/camera/network/talon{ - dir = 9; - icon_state = "camera" + dir = 9 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/starboard_eng) "ob" = ( /obj/machinery/camera/network/talon{ - dir = 9; - icon_state = "camera" + dir = 9 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -2735,8 +2595,7 @@ /area/talon/deckone/bridge_hallway) "oS" = ( /obj/structure/bed/chair/bay/comfy/yellow{ - dir = 1; - icon_state = "bay_comfychair_preview" + dir = 1 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/bridge) @@ -2749,15 +2608,13 @@ /area/talon/maintenance/deckone_starboard) "oV" = ( /obj/effect/floor_decal/emblem/talon_big{ - dir = 4; - icon_state = "talon_big" + dir = 4 }, /turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "pc" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6; - icon_state = "intact" + dir = 6 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_starboard_fore_wing) @@ -2790,12 +2647,10 @@ icon_state = "1-2" }, /obj/structure/bed/chair/bay/chair{ - dir = 8; - icon_state = "bay_chair_preview" + dir = 8 }, /obj/machinery/camera/network/talon{ - dir = 9; - icon_state = "camera" + dir = 9 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/brig) @@ -2814,8 +2669,7 @@ /obj/machinery/atmospherics/binary/pump/fuel, /obj/effect/floor_decal/industrial/outline/red, /obj/machinery/camera/network/talon{ - dir = 4; - icon_state = "camera" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) @@ -2853,7 +2707,6 @@ icon_state = "0-4" }, /obj/machinery/power/apc/talon{ - dir = 2; name = "south bump"; pixel_y = -24 }, @@ -2888,7 +2741,6 @@ /obj/machinery/power/apc/talon{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /turf/simulated/floor/tiled/eris/dark/orangecorner, @@ -2910,30 +2762,28 @@ /area/talon/maintenance/deckone_port_aft_wing) "qp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6; - icon_state = "intact-fuel" + dir = 6 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) "qz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, /obj/structure/sign/warning/nosmoking_1{ pixel_x = -26 }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ - dir = 1; - icon_state = "pipe-t" + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) @@ -2944,8 +2794,7 @@ "qB" = ( /obj/machinery/alarm/talon{ dir = 4; - pixel_x = -35; - pixel_y = 0 + pixel_x = -22 }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) @@ -2968,8 +2817,7 @@ /area/talon/deckone/port_solar) "qR" = ( /obj/machinery/atmospherics/portables_connector/fuel{ - dir = 1; - icon_state = "map_connector-fuel" + dir = 1 }, /obj/effect/floor_decal/industrial/outline/red, /obj/machinery/portable_atmospherics/canister/phoron, @@ -2977,8 +2825,7 @@ /area/talon/deckone/starboard_eng) "rm" = ( /obj/effect/floor_decal/industrial/warning/dust/corner{ - dir = 1; - icon_state = "warningcorner_dust" + dir = 1 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_starboard_aft_wing) @@ -2994,8 +2841,7 @@ icon_state = "2-8" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel/cargo, /area/talon/deckone/workroom) @@ -3022,9 +2868,7 @@ /area/talon/deckone/workroom) "sa" = ( /obj/machinery/firealarm{ - dir = 2; layer = 3.3; - pixel_x = 0; pixel_y = 26 }, /turf/simulated/floor/tiled/eris/steel, @@ -3076,9 +2920,7 @@ /area/talon/maintenance/deckone_port) "sz" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 + dir = 8 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -3191,8 +3033,7 @@ /area/talon/deckone/central_hallway) "tw" = ( /obj/item/modular_computer/console/preset/talon{ - dir = 4; - icon_state = "console" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/bridge) @@ -3222,15 +3063,13 @@ /area/talon/deckone/brig) "tZ" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 8; - icon_state = "intact" + dir = 8 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_port_fore_wing) "uj" = ( /obj/machinery/power/solar_control{ - dir = 8; - icon_state = "solar" + dir = 8 }, /obj/structure/cable/yellow, /turf/simulated/floor/tiled/eris/dark/cyancorner, @@ -3299,7 +3138,6 @@ "uN" = ( /obj/structure/extinguisher_cabinet{ dir = 1; - icon_state = "extinguisher_closed"; pixel_y = 32 }, /turf/simulated/floor/tiled/eris/steel/gray_perforated, @@ -3309,8 +3147,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -3323,22 +3160,19 @@ icon_state = "2-8" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) "vb" = ( /obj/structure/bed/chair/bay/chair{ - dir = 8; - icon_state = "bay_chair_preview" + dir = 8 }, /turf/simulated/floor/tiled/eris/dark/orangecorner, /area/talon/deckone/brig) "vf" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5; - icon_state = "intact" + dir = 5 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_starboard_fore_wing) @@ -3421,8 +3255,7 @@ /area/talon/deckone/bridge) "wD" = ( /obj/machinery/power/terminal{ - dir = 8; - icon_state = "term" + dir = 8 }, /obj/structure/cable/yellow{ d2 = 4; @@ -3467,8 +3300,7 @@ /area/talon/maintenance/deckone_starboard) "xm" = ( /obj/machinery/power/solar_control{ - dir = 4; - icon_state = "solar" + dir = 4 }, /obj/structure/cable/yellow, /turf/simulated/floor/tiled/eris/dark/cyancorner, @@ -3484,8 +3316,7 @@ /area/shuttle/talonboat) "xv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - icon_state = "intact-scrubbers" + dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -3507,13 +3338,17 @@ /turf/simulated/floor/tiled/eris/dark/orangecorner, /area/talon/deckone/secure_storage) "xE" = ( -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" - }, -/turf/simulated/floor/plating/eris/under, -/area/talon/maintenance/deckone_port) +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/toxin, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/o2, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/fire, +/obj/item/weapon/storage/firstaid/adv, +/obj/item/weapon/storage/firstaid/adv, +/obj/structure/closet/walllocker/medical/east, +/turf/simulated/floor/tiled/eris/white/bluecorner, +/area/talon/deckone/medical) "xH" = ( /obj/machinery/chem_master, /turf/simulated/floor/tiled/eris/white/bluecorner, @@ -3541,8 +3376,7 @@ /obj/effect/map_helper/airlock/atmos/chamber_pump, /obj/effect/map_helper/airlock/sensor/chamber_sensor, /obj/machinery/atmospherics/unary/vent_pump/high_volume/aux{ - dir = 8; - icon_state = "map_vent_aux" + dir = 8 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard) @@ -3557,8 +3391,7 @@ /area/talon/maintenance/deckone_starboard_aft_wing) "yf" = ( /obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 4; - icon_state = "map" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/starboard_eng) @@ -3575,8 +3408,7 @@ icon_state = "1-4" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -3606,8 +3438,7 @@ }, /obj/effect/map_helper/airlock/sensor/int_sensor, /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 10; - icon_state = "intact-aux" + dir = 10 }, /turf/simulated/floor/tiled/eris/white/gray_platform, /area/shuttle/talonboat) @@ -3619,8 +3450,7 @@ /area/talon/maintenance/deckone_starboard_fore_wing) "yB" = ( /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{ - dir = 8; - icon_state = "up-scrubbers" + dir = 8 }, /obj/structure/disposalpipe/up{ dir = 8 @@ -3651,8 +3481,7 @@ /area/talon/deckone/starboard_solar) "yO" = ( /obj/effect/floor_decal/industrial/warning/dust/corner{ - dir = 1; - icon_state = "warningcorner_dust" + dir = 1 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_starboard_fore_wing) @@ -3689,15 +3518,13 @@ /obj/machinery/power/apc/talon{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /turf/simulated/floor/tiled/eris/white/orangecorner, /area/talon/deckone/armory) "zy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /turf/simulated/floor/tiled/eris/white/golden, /area/talon/deckone/bridge) @@ -3740,8 +3567,7 @@ /area/talon/deckone/starboard_solar) "Ar" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 4; - icon_state = "intact-aux" + dir = 4 }, /obj/machinery/airlock_sensor{ dir = 8; @@ -3756,20 +3582,17 @@ "At" = ( /obj/machinery/alarm/talon{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /obj/structure/catwalk, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) "Ay" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -3777,8 +3600,7 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel/cargo, /area/talon/deckone/workroom) @@ -3787,8 +3609,7 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/brig) @@ -3822,7 +3643,6 @@ "AQ" = ( /obj/machinery/firealarm{ dir = 1; - pixel_x = 0; pixel_y = -25 }, /turf/simulated/floor/tiled/eris/steel/gray_perforated, @@ -3848,8 +3668,7 @@ /area/talon/maintenance/deckone_port_fore_wing) "Bh" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4; - icon_state = "intact" + dir = 4 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_port_fore_wing) @@ -3884,7 +3703,6 @@ "Bu" = ( /obj/structure/extinguisher_cabinet{ dir = 1; - icon_state = "extinguisher_closed"; pixel_y = 32 }, /turf/simulated/floor/tiled/eris/steel, @@ -3940,15 +3758,13 @@ /area/talon/deckone/central_hallway) "CC" = ( /obj/item/modular_computer/console/preset/talon{ - dir = 1; - icon_state = "console" + dir = 1 }, /turf/simulated/floor/tiled/eris/steel/cargo, /area/talon/deckone/workroom) "CP" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 4; - icon_state = "intact" + dir = 4 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_starboard_fore_wing) @@ -3966,19 +3782,16 @@ /area/talon/deckone/central_hallway) "CU" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9; - icon_state = "intact" + dir = 9 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_starboard_fore_wing) "CW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - icon_state = "intact-scrubbers" + dir = 5 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) @@ -3993,8 +3806,7 @@ /area/talon/maintenance/deckone_port_aft_wing) "Dl" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10; - icon_state = "intact" + dir = 10 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_starboard_fore_wing) @@ -4005,19 +3817,16 @@ /area/talon/maintenance/deckone_port) "Do" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5; - icon_state = "intact" + dir = 5 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_port_fore_wing) "Dr" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6; - icon_state = "intact" + dir = 6 }, /obj/effect/floor_decal/industrial/warning/dust/corner{ - dir = 1; - icon_state = "warningcorner_dust" + dir = 1 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_port_fore_wing) @@ -4092,20 +3901,27 @@ /area/talon/deckone/central_hallway) "Ec" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9; - icon_state = "intact" + dir = 9 }, /obj/effect/floor_decal/industrial/warning/dust/corner, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_starboard_fore_wing) "Ee" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 9; - icon_state = "intact-aux" + dir = 9 }, /obj/structure/catwalk, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_starboard) +"Ej" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/white/bluecorner, +/area/talon/deckone/medical) "Eo" = ( /obj/effect/floor_decal/industrial/warning/dust/corner, /turf/simulated/floor/hull/airless, @@ -4124,8 +3940,7 @@ /area/talon/deckone/armory) "Ex" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 10; - icon_state = "intact-aux" + dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -4154,8 +3969,7 @@ /area/talon/maintenance/deckone_starboard_fore_wing) "EM" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10; - icon_state = "intact" + dir = 10 }, /obj/effect/floor_decal/industrial/warning/dust/corner{ dir = 4 @@ -4216,8 +4030,7 @@ /area/talon/deckone/armory) "Fs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -4232,15 +4045,13 @@ req_one_access = list(301) }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/deckone/medical) "Fw" = ( /obj/machinery/atmospherics/portables_connector/fuel{ - dir = 1; - icon_state = "map_connector-fuel" + dir = 1 }, /obj/effect/floor_decal/industrial/outline/red, /obj/machinery/portable_atmospherics/canister/phoron, @@ -4265,8 +4076,7 @@ req_one_access = list(301) }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/bridge) @@ -4293,15 +4103,13 @@ /area/talon/deckone/central_hallway) "Gq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/brig) @@ -4317,8 +4125,7 @@ /area/talon/deckone/workroom) "Gw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -4326,15 +4133,13 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel/cargo, /area/talon/deckone/workroom) "GC" = ( /obj/machinery/atmospherics/portables_connector/fuel{ - dir = 1; - icon_state = "map_connector-fuel" + dir = 1 }, /obj/effect/floor_decal/industrial/outline/red, /obj/machinery/portable_atmospherics/canister/phoron, @@ -4365,8 +4170,7 @@ /area/talon/deckone/medical) "GL" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 1; - icon_state = "intact" + dir = 1 }, /obj/structure/cable/green{ d1 = 4; @@ -4410,8 +4214,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -4422,8 +4225,7 @@ icon_state = "1-8" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -4453,8 +4255,7 @@ /area/talon/deckone/bridge) "Id" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 6; - icon_state = "intact-aux" + dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -4468,12 +4269,10 @@ /area/talon/deckone/central_hallway) "Ie" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 6; - icon_state = "intact-fuel" + dir = 6 }, /obj/structure/extinguisher_cabinet{ dir = 4; - icon_state = "extinguisher_closed"; pixel_x = -30 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, @@ -4498,8 +4297,7 @@ /area/talon/deckone/bridge_hallway) "Ij" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 9; - icon_state = "intact" + dir = 9 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_port_fore_wing) @@ -4522,8 +4320,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/emblem/talon_big{ - dir = 1; - icon_state = "talon_big" + dir = 1 }, /turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) @@ -4535,8 +4332,7 @@ }, /obj/structure/bed/chair/office/light, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel/cargo, /area/talon/deckone/workroom) @@ -4553,9 +4349,7 @@ "IO" = ( /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -4610,8 +4404,7 @@ /area/talon/deckone/central_hallway) "JB" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 1; - icon_state = "intact" + dir = 1 }, /obj/structure/cable/green{ dir = 1; @@ -4627,7 +4420,6 @@ /obj/machinery/power/apc/talon{ dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /obj/structure/catwalk, @@ -4713,21 +4505,18 @@ /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) "Ka" = ( -/obj/structure/catwalk, -/obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" +/obj/machinery/door/airlock/maintenance/medical{ + req_one_access = list(301) }, +/obj/machinery/door/firedoor/glass/talon, /turf/simulated/floor/plating/eris/under, -/area/talon/maintenance/deckone_starboard) +/area/talon/deckone/medical) "Kc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -4748,8 +4537,7 @@ icon_state = "4-8" }, /obj/effect/floor_decal/industrial/warning/dust/corner{ - dir = 1; - icon_state = "warningcorner_dust" + dir = 1 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_port_aft_wing) @@ -4796,12 +4584,10 @@ }, /obj/structure/sign/directions/bridge{ dir = 1; - icon_state = "direction_bridge"; pixel_y = 41 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -4885,8 +4671,7 @@ /area/talon/deckone/central_hallway) "LC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - icon_state = "intact-scrubbers" + dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -4919,8 +4704,7 @@ /area/talon/maintenance/deckone_port) "LW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -4939,8 +4723,7 @@ /area/talon/deckone/central_hallway) "LZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -4993,8 +4776,7 @@ /area/talon/deckone/brig) "MB" = ( /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -5010,8 +4792,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -5019,8 +4800,7 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -5038,8 +4818,7 @@ /obj/effect/map_helper/airlock/atmos/chamber_pump, /obj/effect/map_helper/airlock/sensor/chamber_sensor, /obj/machinery/atmospherics/unary/vent_pump/high_volume/aux{ - dir = 4; - icon_state = "map_vent_aux" + dir = 4 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) @@ -5117,7 +4896,6 @@ "Ns" = ( /obj/structure/cable/green, /obj/machinery/power/apc/talon{ - dir = 2; name = "south bump"; pixel_y = -24 }, @@ -5151,13 +4929,18 @@ /area/talon/maintenance/deckone_port) "Nz" = ( /obj/machinery/computer/ship/navigation{ - dir = 4; - icon_state = "computer" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/bridge) "NG" = ( -/obj/machinery/suit_cycler/vintage/tmedic, +/obj/structure/closet/secure_closet/chemical{ + req_access = list(301) + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "NP" = ( @@ -5171,8 +4954,7 @@ /area/talon/maintenance/deckone_starboard) "Os" = ( /obj/structure/bed/chair/bay/comfy/red{ - dir = 4; - icon_state = "bay_comfychair_preview" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/bridge) @@ -5180,16 +4962,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/aux, /obj/machinery/alarm/talon{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /obj/structure/catwalk, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/deckone_port) "OJ" = ( /obj/machinery/computer/shuttle_control/explore/talonboat{ - dir = 4; - icon_state = "computer" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) @@ -5240,8 +5020,7 @@ /area/talon/maintenance/deckone_starboard) "Py" = ( /obj/machinery/atmospherics/portables_connector/fuel{ - dir = 1; - icon_state = "map_connector-fuel" + dir = 1 }, /obj/effect/floor_decal/industrial/outline/red, /obj/machinery/portable_atmospherics/canister/phoron, @@ -5259,8 +5038,7 @@ /area/talon/deckone/central_hallway) "PF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 4; - icon_state = "intact-aux" + dir = 4 }, /obj/effect/map_helper/airlock/door/int_door, /obj/machinery/door/airlock/glass_external{ @@ -5278,7 +5056,6 @@ }, /obj/structure/extinguisher_cabinet{ dir = 4; - icon_state = "extinguisher_closed"; pixel_x = -30 }, /turf/simulated/floor/tiled/eris/steel, @@ -5298,15 +5075,13 @@ /area/talon/maintenance/deckone_port) "Qg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/fuel{ - dir = 10; - icon_state = "intact-fuel" + dir = 10 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/starboard_eng) "Qx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -5318,7 +5093,6 @@ }, /obj/structure/extinguisher_cabinet{ dir = 1; - icon_state = "extinguisher_closed"; pixel_y = 32 }, /obj/machinery/door/firedoor/glass{ @@ -5415,15 +5189,28 @@ alarms_hidden = 1; dir = 1; name = "north bump"; - pixel_x = 0; pixel_y = 28 }, /turf/simulated/floor/tiled/eris/dark/brown_platform, /area/talon/deckone/starboard_eng_store) +"So" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/white/bluecorner, +/area/talon/deckone/medical) +"Ss" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/eris/white/bluecorner, +/area/talon/deckone/medical) "SD" = ( /obj/effect/floor_decal/emblem/talon_big{ - dir = 9; - icon_state = "talon_big" + dir = 9 }, /turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) @@ -5436,7 +5223,6 @@ /area/talon/deckone/brig) "SF" = ( /obj/machinery/firealarm{ - dir = 2; layer = 3.3; pixel_x = 4; pixel_y = 26 @@ -5475,7 +5261,6 @@ "SS" = ( /obj/structure/cable/green, /obj/machinery/power/apc/talon{ - dir = 2; name = "south bump"; pixel_y = -24 }, @@ -5550,8 +5335,7 @@ /area/talon/maintenance/deckone_starboard) "TD" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 5; - icon_state = "intact" + dir = 5 }, /obj/effect/floor_decal/industrial/warning/dust/corner{ dir = 8 @@ -5575,9 +5359,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/aux, /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /obj/structure/catwalk, /turf/simulated/floor/plating/eris/under, @@ -5607,22 +5389,17 @@ "Uq" = ( /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/central_hallway) "Ur" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 + dir = 8 }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ - dir = 4; - icon_state = "pipe-t" + dir = 4 }, /turf/simulated/floor/tiled/eris/white/gray_platform, /area/talon/deckone/bridge_hallway) @@ -5648,21 +5425,18 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/effect/floor_decal/emblem/talon_big{ - dir = 6; - icon_state = "talon_big" + dir = 6 }, /turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "UG" = ( -/obj/machinery/door/airlock/maintenance/medical{ - req_one_access = list(301) +/obj/machinery/light/small{ + dir = 4 }, -/obj/machinery/door/firedoor/glass/talon, -/turf/simulated/floor/plating/eris/under, +/turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "UI" = ( /obj/structure/cable/green{ @@ -5703,10 +5477,14 @@ /turf/simulated/floor/tiled/eris/white, /area/talon/deckone/bridge_hallway) "UQ" = ( -/obj/structure/catwalk, -/obj/structure/loot_pile/maint/technical, -/turf/simulated/floor/plating/eris/under, -/area/talon/maintenance/deckone_starboard) +/obj/item/weapon/storage/box/bodybags, +/obj/item/roller, +/obj/item/roller{ + pixel_y = 8 + }, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/eris/white/bluecorner, +/area/talon/deckone/medical) "UT" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /obj/machinery/door/blast/regular{ @@ -5731,8 +5509,7 @@ /area/talon/maintenance/deckone_starboard_fore_wing) "UV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -5763,19 +5540,16 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/effect/floor_decal/emblem/talon_big{ - dir = 10; - icon_state = "talon_big" + dir = 10 }, /turf/simulated/floor/tiled/steel_grid, /area/talon/deckone/central_hallway) "Vf" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 10; - icon_state = "intact" + dir = 10 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_port_fore_wing) @@ -5846,8 +5620,7 @@ /area/talon/maintenance/deckone_starboard) "VU" = ( /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/bridge) @@ -5888,8 +5661,7 @@ /area/talon/deckone/central_hallway) "WA" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1; - icon_state = "map-fuel" + dir = 1 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/starboard_eng) @@ -5922,8 +5694,7 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel/cargo, /area/talon/deckone/workroom) @@ -5932,17 +5703,27 @@ req_one_access = list(301) }, /obj/machinery/door/firedoor/glass/talon, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "Xa" = ( /obj/item/modular_computer/console/preset/talon{ - dir = 4; - icon_state = "console" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/deckone/brig) "Xd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, /turf/simulated/floor/tiled/eris/white/bluecorner, /area/talon/deckone/medical) "Xe" = ( @@ -5965,15 +5746,13 @@ /area/talon/maintenance/deckone_starboard_aft_wing) "XC" = ( /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/monofloor, /area/talon/deckone/central_hallway) "XG" = ( /obj/machinery/light_switch{ dir = 4; - icon_state = "light1"; pixel_x = -24 }, /obj/structure/sink{ @@ -5989,6 +5768,12 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) +"XT" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/white/bluecorner, +/area/talon/deckone/medical) "XV" = ( /obj/effect/map_helper/airlock/door/int_door, /obj/machinery/atmospherics/pipe/simple/hidden/aux, @@ -6034,15 +5819,13 @@ /area/talon/deckone/central_hallway) "Yh" = ( /obj/structure/bed/chair/bay/comfy/brown{ - dir = 1; - icon_state = "bay_comfychair_preview" + dir = 1 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/bridge) "Ym" = ( /obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" + dir = 1 }, /obj/structure/toilet, /obj/machinery/door/window/brigdoor/eastleft{ @@ -6068,8 +5851,7 @@ /area/talon/deckone/starboard_eng) "YI" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/fuel{ - dir = 1; - icon_state = "map-fuel" + dir = 1 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) @@ -6084,15 +5866,13 @@ "YM" = ( /obj/structure/bed/chair/bay/comfy/blue{ dir = 8; - icon_state = "bay_comfychair_preview"; name = "doctor's seat" }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/bridge) "YO" = ( /obj/structure/bed/chair/bay/chair{ - dir = 1; - icon_state = "bay_chair_preview" + dir = 1 }, /turf/simulated/floor/tiled/eris/steel/techfloor_grid, /area/shuttle/talonboat) @@ -6102,8 +5882,7 @@ pixel_y = -25 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/deckone/bridge) @@ -6130,15 +5909,13 @@ pixel_y = 30 }, /obj/machinery/atmospherics/pipe/manifold/hidden{ - dir = 1; - icon_state = "map" + dir = 1 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, /area/talon/deckone/port_eng) "Zq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -6149,8 +5926,7 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /obj/effect/catwalk_plated, /turf/simulated/floor/plating/eris/under, @@ -6173,7 +5949,6 @@ "ZA" = ( /obj/machinery/alarm/talon{ dir = 1; - icon_state = "alarm0"; pixel_y = -22 }, /turf/simulated/floor/tiled/eris/dark/brown_perforated, @@ -6189,7 +5964,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light_switch{ dir = 4; - icon_state = "light1"; pixel_x = -24 }, /obj/machinery/recharger/wallcharger{ @@ -6200,8 +5974,7 @@ /area/talon/deckone/armory) "ZR" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ - dir = 6; - icon_state = "intact" + dir = 6 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/deckone_port_fore_wing) @@ -6213,8 +5986,7 @@ /obj/machinery/light, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ - dir = 1; - icon_state = "pipe-t" + dir = 1 }, /turf/simulated/floor/tiled/eris/steel/cargo, /area/talon/deckone/workroom) @@ -14820,7 +14592,7 @@ iY tm ID dH -xE +LU gU db PO @@ -16799,7 +16571,7 @@ Kc Bn Gb FA -Gb +So Gb Gb ce @@ -17083,7 +16855,7 @@ Nm dO dd FA -Gb +So Gb ek dO @@ -17376,7 +17148,7 @@ Nu wh ZW fJ -Ka +VT ci gW Yo @@ -17509,7 +17281,7 @@ qA dO NG bM -Gb +Ej qB bf dO @@ -17650,9 +17422,9 @@ co qA dO de -df -Gb -bC +dS +Ss +XT ct dO Gt @@ -17791,11 +17563,11 @@ co co Nm dO -dO -dO +hv +xE +Gb UG -dO -dO +UQ dO fJ rn @@ -17929,16 +17701,16 @@ xk qA aO mO +bC +df qA -qA -qA -qA -hv -qA -qA -Of -UQ -qA +dO +dO +dO +Ka +dO +dO +dO cJ Dz Dz @@ -18075,7 +17847,7 @@ sL sL sL sL -sL +az sL TC qA diff --git a/maps/offmap_vr/talon/talon2.dmm b/maps/offmap_vr/talon/talon2.dmm index c32cb4bfa1..207a914142 100644 --- a/maps/offmap_vr/talon/talon2.dmm +++ b/maps/offmap_vr/talon/talon2.dmm @@ -14,8 +14,7 @@ }, /obj/machinery/alarm/talon{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /turf/simulated/floor/carpet, /area/talon/decktwo/eng_room) @@ -39,8 +38,7 @@ }, /obj/machinery/alarm/talon{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /turf/simulated/floor/carpet, /area/talon/decktwo/med_room) @@ -54,9 +52,7 @@ "aj" = ( /obj/structure/railing, /obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 + dir = 8 }, /turf/simulated/open, /area/talon/decktwo/bridge_upper) @@ -74,8 +70,7 @@ /obj/machinery/portable_atmospherics/powered/scrubber, /obj/machinery/alarm/talon{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /turf/simulated/floor/tiled/techfloor/grid, /area/talon/decktwo/lifeboat) @@ -87,8 +82,7 @@ }, /obj/machinery/alarm/talon{ dir = 8; - pixel_x = 22; - pixel_y = 0 + pixel_x = 22 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -111,8 +105,7 @@ /area/talon/decktwo/cap_room) "aq" = ( /obj/machinery/atmospherics/portables_connector/aux{ - dir = 1; - icon_state = "map_connector-aux" + dir = 1 }, /obj/machinery/portable_atmospherics/canister/air/airlock, /turf/simulated/floor/plating/eris/under, @@ -171,9 +164,7 @@ "aA" = ( /obj/structure/table/woodentable, /obj/machinery/firealarm{ - dir = 2; layer = 3.3; - pixel_x = 0; pixel_y = 26 }, /turf/simulated/floor/carpet/blucarpet, @@ -185,9 +176,7 @@ icon_state = "1-2" }, /obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 + dir = 8 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/eris/steel, @@ -233,8 +222,7 @@ icon_state = "1-2" }, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_port) @@ -253,8 +241,7 @@ /area/talon/decktwo/cap_room) "aL" = ( /obj/machinery/light/small{ - dir = 1; - icon_state = "bulb1" + dir = 1 }, /obj/structure/closet/secure_closet/talon_captain, /obj/item/device/radio/off{ @@ -274,8 +261,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atm{ - pixel_x = 32; - step_x = 0 + pixel_x = 32 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -301,9 +287,7 @@ "aP" = ( /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /obj/structure/table/standard, /turf/simulated/floor/wood, @@ -319,8 +303,7 @@ /area/talon/maintenance/decktwo_solars) "aS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -338,8 +321,7 @@ /area/talon/decktwo/bar) "aU" = ( /obj/machinery/vending/dinnerware{ - dir = 1; - icon_state = "dinnerware" + dir = 1 }, /turf/simulated/floor/tiled/eris/steel/gray_perforated, /area/talon/decktwo/bar) @@ -358,8 +340,7 @@ /area/talon/decktwo/cap_room) "aX" = ( /obj/structure/bed/chair/bay/chair{ - dir = 1; - icon_state = "bay_chair_preview" + dir = 1 }, /turf/simulated/floor/wood, /area/talon/decktwo/bar) @@ -376,13 +357,10 @@ }, /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /obj/structure/table/standard, /obj/structure/closet/hydrant{ - pixel_x = 0; pixel_y = 32; starts_with = list(/obj/item/clothing/suit/fire/firefighter = 2, /obj/item/clothing/mask/gas = 2, /obj/item/device/flashlight = 2, /obj/item/weapon/tank/oxygen/red = 2, /obj/item/weapon/extinguisher = 2, /obj/item/clothing/head/hardhat/red = 2) }, @@ -416,8 +394,7 @@ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ icon_state = "4-8" @@ -434,8 +411,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ icon_state = "4-8" @@ -488,8 +464,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/door/firedoor/glass/talon, /obj/machinery/door/airlock/command{ @@ -510,8 +485,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -612,8 +586,7 @@ /area/talon/decktwo/med_room) "bu" = ( /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /turf/simulated/floor/wood, /area/talon/decktwo/cap_room) @@ -641,14 +614,12 @@ icon_state = "0-2" }, /obj/machinery/power/apc/talon{ - cell_type = /obj/item/weapon/cell/apc; dir = 8; name = "west bump"; pixel_x = -28 }, /obj/structure/bed/chair/bay/chair{ - dir = 1; - icon_state = "bay_chair_preview" + dir = 1 }, /turf/simulated/floor/wood, /area/talon/decktwo/bar) @@ -678,7 +649,6 @@ /area/talon/decktwo/sec_room) "bA" = ( /obj/machinery/power/apc/talon{ - cell_type = /obj/item/weapon/cell/apc; dir = 8; name = "west bump"; pixel_x = -28 @@ -693,9 +663,7 @@ "bB" = ( /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /turf/simulated/floor/wood, /area/talon/decktwo/cap_room) @@ -715,8 +683,7 @@ /area/talon/decktwo/cap_room) "bF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -726,8 +693,7 @@ pixel_y = -24 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -784,8 +750,7 @@ /obj/structure/catwalk, /obj/machinery/alarm/talon{ dir = 4; - pixel_x = -24; - pixel_y = 0 + pixel_x = -24 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_starboard) @@ -810,15 +775,13 @@ /obj/structure/catwalk, /obj/machinery/alarm/talon{ dir = 4; - pixel_x = -24; - pixel_y = 0 + pixel_x = -24 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_starboard) "bP" = ( /obj/structure/extinguisher_cabinet{ dir = 8; - icon_state = "extinguisher_closed"; pixel_x = 30 }, /obj/structure/disposalpipe/segment{ @@ -847,13 +810,11 @@ /area/talon/maintenance/decktwo_port) "bT" = ( /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 10; - icon_state = "intact-scrubbers" + dir = 10 }, /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) @@ -863,8 +824,7 @@ }, /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/aux{ - dir = 6; - icon_state = "intact-aux" + dir = 6 }, /obj/machinery/alarm/talon{ pixel_y = 22 @@ -876,8 +836,7 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -890,23 +849,20 @@ /area/talon/decktwo/bar) "bW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/oxygen_pump{ dir = 1; - icon_state = "oxygen_tank"; pixel_y = -30 }, /turf/simulated/floor/wood, /area/talon/decktwo/bar) "bX" = ( /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -1020,7 +976,6 @@ /area/talon/maintenance/decktwo_starboard) "cs" = ( /obj/structure/cable/heavyduty{ - dir = 2; icon_state = "0-4" }, /obj/structure/cable/yellow{ @@ -1055,8 +1010,7 @@ "cA" = ( /obj/structure/railing, /obj/structure/railing{ - dir = 4; - icon_state = "railing0" + dir = 4 }, /turf/simulated/open, /area/talon/decktwo/central_hallway) @@ -1100,30 +1054,25 @@ "cP" = ( /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) "cR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/structure/cable/green, /obj/machinery/power/apc/talon{ - dir = 2; name = "south bump"; pixel_y = -24 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -1203,7 +1152,6 @@ icon_state = "0-2" }, /obj/machinery/power/apc/talon{ - cell_type = /obj/item/weapon/cell/apc; dir = 8; name = "west bump"; pixel_x = -28 @@ -1228,9 +1176,7 @@ "dT" = ( /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /obj/effect/landmark/start{ name = "Talon Pilot" @@ -1267,8 +1213,7 @@ icon_state = "1-2" }, /obj/machinery/light/small{ - dir = 8; - pixel_y = 0 + dir = 8 }, /obj/machinery/suit_cycler/vintage/tengi, /turf/simulated/floor/wood, @@ -1291,8 +1236,7 @@ /area/talon/decktwo/tech) "ef" = ( /obj/machinery/camera/network/talon{ - dir = 9; - icon_state = "camera" + dir = 9 }, /obj/machinery/pointdefense_control{ id_tag = "talon_pd" @@ -1301,8 +1245,7 @@ /area/talon/decktwo/tech) "eg" = ( /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /obj/machinery/suit_cycler/vintage/tpilot, /turf/simulated/floor/wood, @@ -1396,8 +1339,7 @@ /area/talon/decktwo/lifeboat) "eQ" = ( /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 10; - icon_state = "intact-scrubbers" + dir = 10 }, /obj/structure/catwalk, /turf/simulated/floor/plating/eris/under, @@ -1468,7 +1410,6 @@ icon_state = "0-2" }, /obj/machinery/power/apc/talon{ - cell_type = /obj/item/weapon/cell/apc; dir = 8; name = "west bump"; pixel_x = -28 @@ -1494,9 +1435,7 @@ "fr" = ( /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /obj/effect/landmark/start{ name = "Talon Guard" @@ -1537,7 +1476,6 @@ }, /obj/machinery/light_switch{ dir = 4; - icon_state = "light1"; pixel_x = -24 }, /turf/simulated/floor/wood, @@ -1547,8 +1485,7 @@ /area/talon/decktwo/med_room) "fB" = ( /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /obj/machinery/suit_cycler/vintage/tmedic, /turf/simulated/floor/wood, @@ -1562,8 +1499,7 @@ /area/talon/decktwo/lifeboat) "fF" = ( /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /obj/machinery/suit_cycler/vintage/tguard, /turf/simulated/floor/wood, @@ -1656,8 +1592,7 @@ /area/talon/maintenance/decktwo_aft) "go" = ( /obj/structure/railing{ - dir = 4; - icon_state = "railing0" + dir = 4 }, /turf/simulated/open, /area/talon/maintenance/decktwo_aft) @@ -1684,8 +1619,7 @@ /area/talon/maintenance/decktwo_aft) "gD" = ( /obj/structure/railing{ - dir = 4; - icon_state = "railing0" + dir = 4 }, /obj/structure/railing{ dir = 1 @@ -1705,8 +1639,7 @@ /area/talon/maintenance/decktwo_aft) "gL" = ( /obj/structure/railing{ - dir = 4; - icon_state = "railing0" + dir = 4 }, /obj/structure/lattice, /turf/simulated/open, @@ -1721,8 +1654,7 @@ }, /obj/effect/map_helper/airlock/sensor/int_sensor, /obj/machinery/atmospherics/pipe/simple/visible/aux{ - dir = 10; - icon_state = "intact-aux" + dir = 10 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) @@ -1730,14 +1662,6 @@ /obj/structure/railing, /turf/simulated/open, /area/talon/maintenance/decktwo_aft) -"gU" = ( -/obj/structure/railing, -/obj/structure/railing{ - dir = 4; - icon_state = "railing0" - }, -/turf/simulated/open, -/area/talon/maintenance/decktwo_aft) "gV" = ( /obj/structure/railing, /obj/structure/railing{ @@ -1760,8 +1684,7 @@ dir = 1 }, /obj/structure/railing{ - dir = 4; - icon_state = "railing0" + dir = 4 }, /turf/simulated/open, /area/talon/maintenance/decktwo_aft) @@ -1790,8 +1713,7 @@ /area/talon/maintenance/decktwo_aft) "hz" = ( /obj/structure/railing{ - dir = 4; - icon_state = "railing0" + dir = 4 }, /obj/structure/railing, /turf/simulated/open, @@ -1799,8 +1721,7 @@ "hE" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/zpipe/down/supply{ - dir = 4; - icon_state = "down-supply" + dir = 4 }, /obj/machinery/door/firedoor/glass/talon, /turf/simulated/open, @@ -1808,8 +1729,7 @@ "hF" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ - dir = 8; - icon_state = "down-scrubbers" + dir = 8 }, /obj/machinery/door/firedoor/glass/talon, /obj/structure/disposalpipe/down{ @@ -1860,8 +1780,7 @@ /area/talon/maintenance/decktwo_aft) "ik" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -1897,29 +1816,24 @@ }, /obj/effect/floor_decal/industrial/outline/yellow, /obj/effect/floor_decal/industrial/warning/dust/corner{ - dir = 1; - icon_state = "warningcorner_dust" + dir = 1 }, /turf/simulated/floor/reinforced/airless, /area/talon/maintenance/decktwo_solars) "iw" = ( /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/catwalk, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) "ix" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 + dir = 8 }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ - dir = 1; - icon_state = "pipe-t" + dir = 1 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -1958,8 +1872,7 @@ /area/talon/decktwo/tech) "iV" = ( /obj/machinery/computer/ship/engines{ - dir = 1; - icon_state = "computer" + dir = 1 }, /turf/simulated/floor/tiled/eris/dark/violetcorener, /area/talon/decktwo/tech) @@ -1972,11 +1885,9 @@ "jz" = ( /obj/structure/cable/green{ d2 = 8; - dir = 2; icon_state = "0-8" }, /obj/machinery/power/apc/talon{ - dir = 2; name = "south bump"; pixel_y = -28; req_access = list(67) @@ -2011,8 +1922,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -2024,8 +1934,7 @@ dir = 6 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -2066,8 +1975,7 @@ }, /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_port) @@ -2163,8 +2071,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/camera/network/talon{ - dir = 9; - icon_state = "camera" + dir = 9 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -2180,8 +2087,7 @@ "mD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - icon_state = "intact-scrubbers" + dir = 5 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -2209,16 +2115,14 @@ icon_state = "pipe-j2" }, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/window/reinforced, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) "mR" = ( /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -2295,9 +2199,7 @@ icon_state = "1-2" }, /obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 + dir = 8 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/eris/steel, @@ -2391,8 +2293,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/wood, /area/talon/decktwo/bar) @@ -2415,15 +2316,13 @@ /area/talon/maintenance/decktwo_aft) "qi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -2439,7 +2338,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/sign/directions/roomnum{ dir = 4; - icon_state = "roomnum"; pixel_x = 32; pixel_y = -9 }, @@ -2459,23 +2357,20 @@ "rb" = ( /obj/structure/disposalpipe/trunk, /obj/machinery/disposal/deliveryChute{ - dir = 4; - icon_state = "intake" + dir = 4 }, /obj/effect/floor_decal/rust/steel_decals_rusted1{ dir = 8 }, /obj/effect/floor_decal/rust/steel_decals_rusted1{ - dir = 4; - icon_state = "steel_decals_rusted1" + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/talon/maintenance/decktwo_aft) "re" = ( /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/aux{ - dir = 6; - icon_state = "intact-aux" + dir = 6 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) @@ -2500,13 +2395,11 @@ /area/talon/decktwo/central_hallway) "rH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -2539,8 +2432,7 @@ /area/talon/decktwo/bar) "sm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -2579,8 +2471,7 @@ }, /obj/machinery/door/airlock/maintenance/common, /obj/machinery/atmospherics/pipe/simple/visible/aux{ - dir = 4; - icon_state = "intact-aux" + dir = 4 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) @@ -2607,8 +2498,7 @@ "sQ" = ( /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /obj/structure/cable/green{ d1 = 1; @@ -2661,8 +2551,7 @@ }, /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/aux{ - dir = 10; - icon_state = "intact-aux" + dir = 10 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) @@ -2687,8 +2576,7 @@ /area/talon/decktwo/lifeboat) "uz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -2728,8 +2616,7 @@ "uM" = ( /obj/item/weapon/stool/baystool/padded, /obj/machinery/camera/network/talon{ - dir = 6; - icon_state = "camera" + dir = 6 }, /turf/simulated/floor/tiled/eris/cafe, /area/talon/decktwo/bar) @@ -2762,7 +2649,6 @@ "vj" = ( /obj/machinery/conveyor{ dir = 8; - icon_state = "conveyor0"; id = "talontrash" }, /obj/machinery/door/blast/regular{ @@ -2776,22 +2662,19 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/sign/directions/evac{ pixel_y = -38 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) "vB" = ( /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/wood, /area/talon/decktwo/bar) @@ -2826,8 +2709,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -2850,15 +2732,13 @@ /area/talon/maintenance/decktwo_solars) "wW" = ( /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/wall/rshull, /area/talon/maintenance/decktwo_aft) "wZ" = ( /obj/structure/disposalpipe/trunk{ - dir = 4; - icon_state = "pipe-t" + dir = 4 }, /obj/structure/disposaloutlet, /turf/simulated/floor/plating/eris/under/airless, @@ -2879,8 +2759,7 @@ /area/talon/maintenance/decktwo_solars) "xi" = ( /obj/machinery/computer/shuttle_control/explore/talon_lifeboat{ - dir = 4; - icon_state = "computer" + dir = 4 }, /turf/simulated/floor/tiled/techfloor/grid, /area/talon/decktwo/lifeboat) @@ -2940,12 +2819,10 @@ /area/talon/decktwo/bridge_upper) "yF" = ( /obj/structure/disposalpipe/trunk{ - dir = 1; - icon_state = "pipe-t" + dir = 1 }, /obj/structure/disposaloutlet{ - dir = 8; - icon_state = "outlet" + dir = 8 }, /obj/structure/window/reinforced{ dir = 4 @@ -2954,8 +2831,7 @@ dir = 8 }, /obj/effect/floor_decal/rust/steel_decals_rusted1{ - dir = 4; - icon_state = "steel_decals_rusted1" + dir = 4 }, /turf/simulated/floor/tiled/techmaint, /area/talon/maintenance/decktwo_aft) @@ -3034,8 +2910,7 @@ "zW" = ( /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/aux{ - dir = 5; - icon_state = "intact-aux" + dir = 5 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) @@ -3061,7 +2936,6 @@ "As" = ( /obj/structure/bed/chair/bay/comfy/blue{ dir = 1; - icon_state = "bay_comfychair_preview"; pixel_y = 5 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, @@ -3098,9 +2972,7 @@ "AD" = ( /obj/machinery/alarm/talon{ dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 + pixel_x = -22 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/decktwo/bridge_upper) @@ -3126,15 +2998,13 @@ "AX" = ( /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_starboard) "Bb" = ( /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -3174,7 +3044,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/oxygen_pump{ dir = 8; - icon_state = "oxygen_tank"; pixel_x = -30 }, /obj/structure/disposalpipe/segment, @@ -3182,8 +3051,7 @@ /area/talon/decktwo/central_hallway) "Cg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/light/small{ dir = 1 @@ -3316,9 +3184,7 @@ /area/talon/decktwo/bar) "Dr" = ( /obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 + dir = 8 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -3336,8 +3202,7 @@ icon_state = "2-4" }, /obj/machinery/camera/network/talon{ - dir = 6; - icon_state = "camera" + dir = 6 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/hull/airless, @@ -3355,7 +3220,6 @@ "EA" = ( /obj/machinery/conveyor{ dir = 8; - icon_state = "conveyor0"; id = "talontrash" }, /turf/simulated/floor/tiled/techmaint, @@ -3376,7 +3240,6 @@ "Fu" = ( /obj/structure/extinguisher_cabinet{ dir = 4; - icon_state = "extinguisher_closed"; pixel_x = -30 }, /obj/structure/disposalpipe/segment, @@ -3384,8 +3247,7 @@ /area/talon/decktwo/central_hallway) "FA" = ( /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/cable/green{ d1 = 4; @@ -3444,27 +3306,23 @@ "Gi" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ - dir = 4; - icon_state = "pipe-t" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) "Gm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/oxygen_pump{ dir = 1; - icon_state = "oxygen_tank"; pixel_y = -30 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -3493,8 +3351,7 @@ /obj/machinery/door/airlock/maintenance/common, /obj/machinery/door/firedoor/glass/talon, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_starboard) @@ -3621,8 +3478,7 @@ }, /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) @@ -3637,8 +3493,7 @@ /area/talon/decktwo/central_hallway) "IX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -3647,8 +3502,7 @@ pixel_y = -31 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -3666,20 +3520,17 @@ /area/talon/decktwo/central_hallway) "Jh" = ( /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/catwalk, /obj/structure/sign/securearea{ - pixel_x = 0; pixel_y = 30 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) "Jo" = ( /obj/machinery/camera/network/talon{ - dir = 4; - icon_state = "camera" + dir = 4 }, /obj/item/weapon/paper/talon_lifeboat, /obj/structure/table/steel, @@ -3688,8 +3539,7 @@ "Ju" = ( /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/aux{ - dir = 9; - icon_state = "intact-aux" + dir = 9 }, /obj/machinery/firealarm{ dir = 1; @@ -3699,12 +3549,10 @@ /area/talon/maintenance/decktwo_aft) "JF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - icon_state = "intact-scrubbers" + dir = 5 }, /obj/structure/cable/green{ d1 = 1; @@ -3730,8 +3578,7 @@ /area/talon/decktwo/central_hallway) "KE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -3751,8 +3598,7 @@ /area/talon/decktwo/med_room) "KR" = ( /obj/machinery/chemical_dispenser/bar_alc/full{ - dir = 8; - icon_state = "booze_dispenser" + dir = 8 }, /obj/structure/table/marble, /obj/structure/cable/green{ @@ -3813,8 +3659,7 @@ }, /obj/structure/catwalk, /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_starboard) @@ -3891,7 +3736,6 @@ }, /obj/structure/extinguisher_cabinet{ dir = 8; - icon_state = "extinguisher_closed"; pixel_x = 30 }, /turf/simulated/floor/tiled/eris/steel, @@ -3904,8 +3748,7 @@ "Nm" = ( /obj/machinery/door/firedoor/glass/talon, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/techmaint_panels, /area/talon/decktwo/bar) @@ -3914,8 +3757,7 @@ dir = 8 }, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor/grid, @@ -3933,7 +3775,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/oxygen_pump{ dir = 4; - icon_state = "oxygen_tank"; pixel_x = 30 }, /turf/simulated/floor/tiled/eris/steel, @@ -3956,8 +3797,7 @@ icon_state = "pipe-c" }, /obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 10; - icon_state = "intact-scrubbers" + dir = 10 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) @@ -3968,8 +3808,7 @@ icon_state = "4-8" }, /obj/machinery/camera/network/talon{ - dir = 10; - icon_state = "camera" + dir = 10 }, /turf/simulated/floor/tiled/eris/dark/cyancorner, /area/talon/decktwo/bridge_upper) @@ -3995,7 +3834,6 @@ /area/talon/decktwo/central_hallway) "Ou" = ( /obj/structure/cable/heavyduty{ - dir = 2; icon_state = "0-4" }, /turf/simulated/floor/hull/airless, @@ -4033,7 +3871,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/sign/directions/roomnum{ dir = 1; - icon_state = "roomnum"; pixel_x = -31; pixel_y = -9 }, @@ -4050,7 +3887,6 @@ /obj/structure/catwalk, /obj/structure/cable/green{ d2 = 8; - dir = 2; icon_state = "0-8" }, /obj/machinery/power/apc/talon{ @@ -4078,8 +3914,7 @@ icon_state = "4-8" }, /obj/effect/floor_decal/industrial/warning/dust/corner{ - dir = 1; - icon_state = "warningcorner_dust" + dir = 1 }, /turf/simulated/floor/hull/airless, /area/talon/maintenance/decktwo_solars) @@ -4098,8 +3933,7 @@ pixel_y = 32 }, /obj/machinery/light/small{ - dir = 4; - pixel_y = 0 + dir = 4 }, /turf/simulated/floor/tiled/eris/white, /area/talon/decktwo/central_hallway) @@ -4126,7 +3960,6 @@ /obj/structure/catwalk, /obj/structure/cable/green{ d2 = 8; - dir = 2; icon_state = "0-8" }, /obj/machinery/power/apc/talon{ @@ -4220,15 +4053,13 @@ /area/talon/decktwo/tech) "RQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /obj/machinery/door/firedoor/glass{ dir = 2 @@ -4263,8 +4094,7 @@ icon_state = "1-2" }, /obj/machinery/camera/network/talon{ - dir = 9; - icon_state = "camera" + dir = 9 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -4351,8 +4181,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/wood, /area/talon/decktwo/bar) @@ -4383,7 +4212,6 @@ /area/talon/maintenance/decktwo_aft) "Us" = ( /obj/structure/cable/heavyduty{ - dir = 2; icon_state = "0-4" }, /obj/structure/cable/yellow{ @@ -4401,7 +4229,6 @@ "Uv" = ( /obj/structure/cable/heavyduty, /obj/structure/cable/heavyduty{ - dir = 2; icon_state = "0-4" }, /obj/structure/cable/heavyduty{ @@ -4415,8 +4242,7 @@ /area/talon/maintenance/decktwo_solars) "UJ" = ( /obj/machinery/camera/network/talon{ - dir = 4; - icon_state = "camera" + dir = 4 }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/eris/steel, @@ -4427,7 +4253,6 @@ }, /obj/structure/extinguisher_cabinet{ dir = 4; - icon_state = "extinguisher_closed"; pixel_x = -30 }, /obj/structure/disposalpipe/segment, @@ -4487,8 +4312,7 @@ "Vz" = ( /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/aux{ - dir = 4; - icon_state = "intact-aux" + dir = 4 }, /turf/simulated/floor/plating/eris/under, /area/talon/maintenance/decktwo_aft) @@ -4675,15 +4499,13 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" + dir = 4 }, /obj/structure/sign/department/shield{ pixel_y = -31 }, /obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-s" + dir = 4 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -4692,7 +4514,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/sign/directions/roomnum{ dir = 8; - icon_state = "roomnum"; pixel_x = 32; pixel_y = -9 }, @@ -4700,8 +4521,7 @@ /area/talon/decktwo/central_hallway) "YE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 + dir = 9 }, /turf/simulated/floor/tiled/eris/steel, /area/talon/decktwo/central_hallway) @@ -14220,7 +14040,7 @@ go go go go -gU +hX WG gC gn @@ -14788,7 +14608,7 @@ Jh gD gL go -gU +hX mm gC gT diff --git a/maps/offmap_vr/talon/talon_areas.dm b/maps/offmap_vr/talon/talon_areas.dm index 36aee1dd2e..848ce2ae99 100644 --- a/maps/offmap_vr/talon/talon_areas.dm +++ b/maps/offmap_vr/talon/talon_areas.dm @@ -1,73 +1,109 @@ +/area/talon + name = "\improper ITV Talon" + icon = 'icons/turf/areas_vr_talon.dmi' + icon_state = "dark" + /area/talon/maintenance/deckone_port name = "\improper Deck One - Port Maintenance" + icon_state = "dark-p" /area/talon/maintenance/deckone_starboard name = "\improper Deck One - Starboard Maintenance" + icon_state = "dark-s" /area/talon/maintenance/deckone_port_aft_wing name = "\improper Deck One - Aft Port Wing" + icon_state = "gray-p" /area/talon/maintenance/deckone_starboard_aft_wing name = "\improper Deck One - Aft Starboard Wing" + icon_state = "gray-s" /area/talon/maintenance/deckone_port_fore_wing name = "\improper Deck One - Fore Port Wing" + icon_state = "gray-p" /area/talon/maintenance/deckone_starboard_fore_wing name = "\improper Deck One - Fore Starboard Wing" + icon_state = "gray-s" /area/talon/maintenance/decktwo_port name = "\improper Deck Two - Port Maintenance" + icon_state = "dark-p" /area/talon/maintenance/decktwo_starboard name = "\improper Deck Two - Starboard Maintenance" + icon_state = "dark-s" /area/talon/maintenance/decktwo_aft name = "\improper Deck Two - Aft Maintenance" + icon_state = "dark-a" /area/talon/maintenance/decktwo_solars name = "\improper Deck Two - Ext Solars" - + icon_state = "yellow" /area/talon/deckone/central_hallway name = "\improper Deck One - Central Hallway" + icon_state = "gray-c" /area/talon/deckone/bridge_hallway name = "\improper Deck One - Bridge Hallway" + icon_state = "gray" /area/talon/deckone/medical name = "\improper Deck One - Medical" + icon_state = "green" /area/talon/deckone/workroom name = "\improper Deck One - Workroom" /area/talon/deckone/brig name = "\improper Deck One - Brig" + icon_state = "red" /area/talon/deckone/port_eng name = "\improper Deck One - Port Engineering" + icon_state = "yellow-p" /area/talon/deckone/port_eng_store name = "\improper Deck One - Port Eng. Storage" + icon_state = "yellow-p" /area/talon/deckone/starboard_eng name = "\improper Deck One - Starboard Engineering" + icon_state = "yellow-s" /area/talon/deckone/starboard_eng_store name = "\improper Deck One - Starboard Eng. Storage" + icon_state = "yellow-s" /area/talon/deckone/armory name = "\improper Deck One - Armory" + icon_state = "red" /area/talon/deckone/secure_storage name = "\improper Deck One - Secure Storage" + icon_state = "red" /area/talon/deckone/bridge name = "\improper Deck One - Bridge" + icon_state = "blue" /area/talon/deckone/port_solar name = "\improper Deck One - Port Solar Control" + icon_state = "yellow-p" /area/talon/deckone/starboard_solar name = "\improper Deck One - Starboard Solar Control" + icon_state = "yellow-s" /area/talon/decktwo/central_hallway name = "\improper Deck Two - Central Hallway" + icon_state = "gray-c" /area/talon/decktwo/pilot_room name = "\improper Deck Two - Pilot Cabin" + icon_state = "gray" /area/talon/decktwo/med_room name = "\improper Deck Two - Doctor Cabin" + icon_state = "green" /area/talon/decktwo/eng_room name = "\improper Deck Two - Engineer Cabin" + icon_state = "yellow" /area/talon/decktwo/sec_room name = "\improper Deck Two - Guard Cabin" + icon_state = "red" /area/talon/decktwo/cap_room name = "\improper Deck Two - Captain Cabin" + icon_state = "blue" /area/talon/decktwo/bar name = "\improper Deck Two - Bar" /area/talon/decktwo/tech name = "\improper Deck Two - Tech Room" + icon_state = "yellow" /area/talon/decktwo/lifeboat name = "\improper Deck Two - Lifeboat" + icon_state = "purple" /area/talon/decktwo/bridge_upper - name = "\improper Deck Two - Upper Bridge" \ No newline at end of file + name = "\improper Deck Two - Upper Bridge" + icon_state = "blue" \ No newline at end of file diff --git a/maps/southern_cross/southern_cross-6.dmm b/maps/southern_cross/southern_cross-6.dmm index abd4450a36..35d4c81656 100644 --- a/maps/southern_cross/southern_cross-6.dmm +++ b/maps/southern_cross/southern_cross-6.dmm @@ -2319,39 +2319,64 @@ "SE" = (/obj/effect/floor_decal/sign/small_g,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_chess) "SF" = (/obj/effect/floor_decal/sign/small_f,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_chess) "SG" = (/obj/effect/floor_decal/sign/small_h,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_chess) - +"SH" = (/turf/unsimulated/wall,/area/virtual_reality) +"SI" = (/obj/machinery/vending/deathmatch/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/virtual_reality) +"SJ" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/virtual_reality) +"SK" = (/turf/unsimulated/floor{icon_state = "dark"},/area/virtual_reality) +"SL" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'; name = "Spawn"},/turf/unsimulated/floor{icon_state = "dark"},/area/virtual_reality) +"SM" = (/obj/effect/landmark/virtual_reality{name = "Thunderdome (Red Team)"},/turf/unsimulated/floor{icon_state = "dark"},/area/virtual_reality) +"SN" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/virtual_reality) +"SO" = (/obj/structure/morgue/crematorium{desc = "qdel"; id = "vr_thunderdome"; name = "Object Deletorinator"},/turf/unsimulated/floor{icon_state = "dark"},/area/virtual_reality) +"SP" = (/obj/machinery/computer/pod{desc = "A control panel used to open and close Spawn Kill Prevention barriers."; dir = 1; id = "spawnred"; name = "Spawn Kill Prevention"; title = "Spawn Kill Prevention"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/virtual_reality) +"SQ" = (/obj/machinery/mech_recharger,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/virtual_reality) +"SR" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'; name = "Object Deletion"},/turf/unsimulated/floor{icon_state = "dark"},/area/virtual_reality) +"SS" = (/obj/structure/table/steel_reinforced,/obj/machinery/button/crematorium{desc = "Used to delete objects totally not by burning them."; id = "vr_thunderdome"; name = "DEL"; req_access = newlist()},/turf/unsimulated/floor{icon_state = "dark"},/area/virtual_reality) +"ST" = (/obj/machinery/door/airlock/multi_tile/metal,/obj/machinery/door/blast/regular{id = "spawnred"; name = "Red Team Spawn"},/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/virtual_reality) +"SU" = (/obj/machinery/door/blast/regular{id = "spawnred"; name = "Red Team Spawn"},/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/virtual_reality) +"SV" = (/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/virtual_reality) +"SW" = (/obj/structure/table/steel,/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/virtual_reality) +"SX" = (/obj/structure/table/steel,/obj/random/energy,/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/virtual_reality) +"SY" = (/obj/item/weapon/gun/magic/firestaff,/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/virtual_reality) +"SZ" = (/obj/random/energy,/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/virtual_reality) +"Ta" = (/obj/machinery/door/airlock/multi_tile/metal,/obj/machinery/door/blast/regular{id = "spawngreen"; name = "Green Team Spawn"},/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/virtual_reality) +"Tb" = (/obj/machinery/door/blast/regular{id = "spawngreen"; name = "Green Team Spawn"},/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/virtual_reality) +"Td" = (/obj/machinery/vending/deathmatch,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/virtual_reality) +"Te" = (/obj/machinery/computer/pod{desc = "A control panel used to open and close Spawn Kill Prevention barriers."; id = "spawngreen"; name = "Spawn Kill Prevention"; title = "Spawn Kill Prevention"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/virtual_reality) +"Tf" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'},/turf/unsimulated/floor{icon_state = "dark"},/area/virtual_reality) +"Tg" = (/obj/effect/landmark/virtual_reality{name = "Thunderdome (Green Team)"},/turf/unsimulated/floor{icon_state = "dark"},/area/virtual_reality) + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadRURURURURURURURURURUagaeaeaeafaeaeaeaeaeaeagahaiahaiahahaiahaiahagbkbkbkbkbkbkaOaLaAajagananclalalalalalalalagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavauambAbxbxbxbxbxbDawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadRWRVRYRXSaRZScSbSdRUagaeaeaeaeaeaeaeaeaxaeagaiazayazayazayazayahagbkbkbkbkbkbkaOaLaAakagananctaBaBaBaBaBaBaBagaoaDaoaoaoaoaoaoaDaoagapapapapapapapapapapagavauambBaFaFaFaFaFbCawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSfSeSgSeSgSeSgSeSgRUagaeaxaeaeaeaeaeaeaeaeagatayaHaCaIaCaIaKazahagbkaVbmaWbmaXaOaLaAakagananaJalaPalaBaQaZaYagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavavaRbBaFaFaFaFaFbCawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSiShSjShSjShSjShSjRUagaeaeaeaeaeafaeaeaeaeagaUbabbaSaTaTaUaNazaiagbcbrbqbvbqbsaOaLaAakagaManbdbebfbHbgclbhbiagaoaoaoaDaoaoaDaoaoaoagapapapapapapapapapapagavauambBaFaFaFaFaFbCawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSkSjShSjShSjShSjShRUagaeaeafaeaeaeafaeaeaeagaUaUaUaUbjbjaUaNayahagblbrbqbvbqbsaOaLaAakagananbnbobobobpclbtbNagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavauamcacbcbcbcbcbccawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSlShSjShSjShSjShSjRUagaeaeaeaeaeaeaeaeaeaeagaUaUaUaUbjbjaUbGazaiagblbrbqbvbqbsaOaLaAakagananbubybzbybwclbtbNagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavauamaqarararararasawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSmSjShSjShSjShSjShRUagaeaeaeaeaeaxaeaeaeafagaUbEbFaSaTaTaUaNayaiagbIbrbqbvbqbsaOaLaAakagaManbObQbzbQbRclbtbNagaoaoaoaDaoaoaDaoaoaoagapapapapapapapapapapagavauamaEaFaFaFaFaFaGawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSoSnSpSnSpSnSpSnSpRUagaeaeaxaeaeaeaeaeaeaeagbVaybJbKbLbKbLbMazahagbkbUbSbWbSbXaOaLaAakagananbYbzbzbzbNclbtbNagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavavbZaEaFaFaFaFaFaGawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSrSqStSsSvSuSxSwSyRUagaeaeaeaeaeaeaeaeaeaeagaiazayazayazayazazaiagbkbkbkbkbkbkaOaLaAakagananbObQbzbQbRclbtbNagaoaDaoaoaoaoaoaoaDaoagapapapapapapapapapapagavauamaEaFaFaFaFaFaGawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadRUSzSBSASDSCSFSESGRUagafaeaeaeaxaeaeaeaeaxagahaiahaiahahaiahaiahagbTbkbkbkbkbkaOaLaAakaganancncrbPcrcsclcBcuagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavauamcIcKcKcKcKcKcOawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeeeeeeeeeeeeeeeeeeeeabcdcdcdcdcdcdcdcdcdcdabcdcdcdcdcdcdcdcdcdcdabcdcdcdcdcdcdcdcdcdcdabcecececececececececeabcecececececececececeabcecececececececececeabcecececececececececeabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgcgcgcgcgcgcgagchcicicicicicicicichagcpcocCdxdydxcDdzdydzagcqcqcqcqcqcqcqcqcqcqagcwcvcRdfdgdgdgdgdgeaagcxcxcycycycycycycycyawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfczcfcfcfcfczcfagcgcAcgcgcgcgcAcgcgcgagdkdkdkdkdkdkdociciciagcpcocCdFcFdFcFdGcFdGagcqcqcHcqcqcqcqcqcqcqagcwcvcRdpcJcJcJcJcJduagcycycycycLcLcLcycycyawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgcgcgcgcgcMcgagcWdwdAdBdAdhcVciciciagcpcpdCdFcFdydydycFdGagcqcqcqcqcqcqcPcQcqcqagcwcwdHdpcJcJcJcJcJduagcycycycScTcTcTcycycyawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfczcfcfcfcfczcfcfcfagcgcgcUcgcMcgcgcgcgcgagcXdIdndvdndMcVcNdOciagcpcocCdFcFcFcFcFcFdGagcqcqcqcqcYcqcqcqcqcqagcwcvcRdpcJcJcJcJcJduagcycLcZdadbdbdcddcLcyawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgdecgcgcgcgdecgagcWdIdndvdndMcVcNdQciagcpcocCdXdNdNdNdNdNdZagcqcqcqcqcqcqcqdmcqcqagcwcvcRdTdUdUdUdUdUdVagcycLcZdqdrdsdtddcLcyawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgcgcgcgcgcgcgagcWdIdndvdndMcVcNdQciagcpcocCcjckckdYckckcmagcqcqcqcqcqcqcqcqcqcqagcwcvcRebecececececgYagcycLcZdqdDdEdtddcLcyawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfczcfcfcfcfczcfagcgcgcgcgcAcgcUcgcgcAagcXdIdndvdndMcVcNhjciagcpcocCcEcFcFcFcFcFcGagdPdPdPdPdPdPdPdPdPdPagcwcvcRihcJcJcJcJcJjyagcycLcZdcdJdJdKddcLcyawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagdLcgcgcgcgdLcgcgcgcgagcWjzjAkXjAkYcVciciciagcpcpkZcEcFdjdjdjcFcGagdWdWdWdWdWdWdWdWdWdWagcwcwlrihcJcJcJcJcJjyagcycycydRdRdRdScycycyawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfczcfcfcfcfczcfcfcfagcgdecgcUcgcgdecgcUcgagRrRrRrRrRrRrRtciciciagcpcocCcEcFcEcFcGcFcGagdWdWdWdWdWdWdWdWdWdWagcwcvcRihcJcJcJcJcJjyagcycycycLcLcLcycycycyawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgdLcgcgcgcgdLagchcicicicicicicicichagcpcocCdidjdilKdldjdlagdWdWdWdWdWdWdWdWdWdWagcwcvcRqbqyqyqyqyqyvzagcycycycycycycycyededawaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRhRhRhRhRhRhRhRhRhRhRhRhRhRhRhRhRhRhRaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa +aaaaaaaaaaSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabaaaa +aaaaaaaaaaSHSISJSJSJSJSJSJSJSJSJSJSJSJSLSKSKSMSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadRURURURURURURURURURUagaeaeaeafaeaeaeaeaeaeagahaiahaiahahaiahaiahagbkbkbkbkbkbkaOaLaAajagananclalalalalalalalagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavauambAbxbxbxbxbxbDawaaaa +aaaaaaaaaaSHSISJSJSJSJSJSNSNSJSJSJSJSISHSKSKSKSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadRWRVRYRXSaRZScSbSdRUagaeaeaeaeaeaeaeaeaxaeagaiazayazayazayazayahagbkbkbkbkbkbkaOaLaAakagananctaBaBaBaBaBaBaBagaoaDaoaoaoaoaoaoaDaoagapapapapapapapapapapagavauambBaFaFaFaFaFbCawaaaa +aaaaaaaaaaSHSISJSJSJSJSJSNSNSJSJSJSJSISHSHSHSHSHSHSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSfSeSgSeSgSeSgSeSgRUagaeaxaeaeaeaeaeaeaeaeagatayaHaCaIaCaIaKazahagbkaVbmaWbmaXaOaLaAakagananaJalaPalaBaQaZaYagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavavaRbBaFaFaFaFaFbCawaaaa +aaaaaaaaaaSHSISJSJSJSJSJSJSJSJSJSJSJSISHSOSKSOSKSSSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSiShSjShSjShSjShSjRUagaeaeaeaeaeafaeaeaeaeagaUbabbaSaTaTaUaNazaiagbcbrbqbvbqbsaOaLaAakagaManbdbebfbHbgclbhbiagaoaoaoaDaoaoaDaoaoaoagapapapapapapapapapapagavauambBaFaFaFaFaFbCawaaaa +aaaaaaaaaaSHSISJSJSJSJSJSPSJSQSJSJSJSJSRSKSKSKSKSKSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSkSjShSjShSjShSjShRUagaeaeafaeaeaeafaeaeaeagaUaUaUaUbjbjaUaNayahagblbrbqbvbqbsaOaLaAakagananbnbobobobpclbtbNagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavauamcacbcbcbcbcbccawaaaa +aaaaaaaaaaSHSHSHSTSUSTSUSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSlShSjShSjShSjShSjRUagaeaeaeaeaeaeaeaeaeaeagaUaUaUaUbjbjaUbGazaiagblbrbqbvbqbsaOaLaAakagananbubybzbybwclbtbNagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavauamaqarararararasawaaaa +aaaaaaaaaaSHSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSmSjShSjShSjShSjShRUagaeaeaeaeaeaxaeaeaeafagaUbEbFaSaTaTaUaNayaiagbIbrbqbvbqbsaOaLaAakagaManbObQbzbQbRclbtbNagaoaoaoaDaoaoaDaoaoaoagapapapapapapapapapapagavauamaEaFaFaFaFaFaGawaaaa +aaaaaaaaaaSHSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSoSnSpSnSpSnSpSnSpRUagaeaeaxaeaeaeaeaeaeaeagbVaybJbKbLbKbLbMazahagbkbUbSbWbSbXaOaLaAakagananbYbzbzbzbNclbtbNagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavavbZaEaFaFaFaFaFaGawaaaa +aaaaaaaaaaSHSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadSrSqStSsSvSuSxSwSyRUagaeaeaeaeaeaeaeaeaeaeagaiazayazayazayazazaiagbkbkbkbkbkbkaOaLaAakagananbObQbzbQbRclbtbNagaoaDaoaoaoaoaoaoaDaoagapapapapapapapapapapagavauamaEaFaFaFaFaFaGawaaaa +aaaaaaaaaaSHSVSWSWSWSWSWSWSVSVSVSVSVSVSWSWSXSWSWSVSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadRUSzSBSASDSCSFSESGRUagafaeaeaeaxaeaeaeaeaxagahaiahaiahahaiahaiahagbTbkbkbkbkbkaOaLaAakaganancncrbPcrcsclcBcuagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagavauamcIcKcKcKcKcKcOawaaaa +aaaaaaaaaaSHSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSWSWSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeeeeeeeeeeeeeeeeeeeeabcdcdcdcdcdcdcdcdcdcdabcdcdcdcdcdcdcdcdcdcdabcdcdcdcdcdcdcdcdcdcdabcecececececececececeabcecececececececececeabcecececececececececeabcecececececececececeabaaaa +aaaaaaaaaaSHSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgcgcgcgcgcgcgagchcicicicicicicicichagcpcocCdxdydxcDdzdydzagcqcqcqcqcqcqcqcqcqcqagcwcvcRdfdgdgdgdgdgeaagcxcxcycycycycycycycyawaaaa +aaaaaaaaaaSHSVSWSVSVSVSVSVSVSWSWSWSVSVSVSVSVSVSVSWSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfczcfcfcfcfczcfagcgcAcgcgcgcgcAcgcgcgagdkdkdkdkdkdkdociciciagcpcocCdFcFdFcFdGcFdGagcqcqcHcqcqcqcqcqcqcqagcwcvcRdpcJcJcJcJcJduagcycycycycLcLcLcycycyawaaaa +aaaaaaaaaaSHSVSWSVSVSVSVSVSVSWSYSWSVSVSVSVSVSVSVSWSZSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgcgcgcgcgcMcgagcWdwdAdBdAdhcVciciciagcpcpdCdFcFdydydycFdGagcqcqcqcqcqcqcPcQcqcqagcwcwdHdpcJcJcJcJcJduagcycycycScTcTcTcycycyawaaaa +aaaaaaaaaaSHSVSWSVSVSVSVSVSVSWSWSWSVSVSVSVSVSVSVSWSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfczcfcfcfcfczcfcfcfagcgcgcUcgcMcgcgcgcgcgagcXdIdndvdndMcVcNdOciagcpcocCdFcFcFcFcFcFdGagcqcqcqcqcYcqcqcqcqcqagcwcvcRdpcJcJcJcJcJduagcycLcZdadbdbdcddcLcyawaaaa +aaaaaaaaaaSHSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgdecgcgcgcgdecgagcWdIdndvdndMcVcNdQciagcpcocCdXdNdNdNdNdNdZagcqcqcqcqcqcqcqdmcqcqagcwcvcRdTdUdUdUdUdUdVagcycLcZdqdrdsdtddcLcyawaaaa +aaaaaaaaaaSHSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSWSWSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgcgcgcgcgcgcgagcWdIdndvdndMcVcNdQciagcpcocCcjckckdYckckcmagcqcqcqcqcqcqcqcqcqcqagcwcvcRebecececececgYagcycLcZdqdDdEdtddcLcyawaaaa +aaaaaaaaaaSHSVSWSWSWSWSWSWSVSVSVSVSVSVSWSWSXSWSWSVSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfczcfcfcfcfczcfagcgcgcgcgcAcgcUcgcgcAagcXdIdndvdndMcVcNhjciagcpcocCcEcFcFcFcFcFcGagdPdPdPdPdPdPdPdPdPdPagcwcvcRihcJcJcJcJcJjyagcycLcZdcdJdJdKddcLcyawaaaa +aaaaaaaaaaSHSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagdLcgcgcgcgdLcgcgcgcgagcWjzjAkXjAkYcVciciciagcpcpkZcEcFdjdjdjcFcGagdWdWdWdWdWdWdWdWdWdWagcwcwlrihcJcJcJcJcJjyagcycycydRdRdRdScycycyawaaaa +aaaaaaaaaaSHSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfczcfcfcfcfczcfcfcfagcgdecgcUcgcgdecgcUcgagRrRrRrRrRrRrRtciciciagcpcocCcEcFcEcFcGcFcGagdWdWdWdWdWdWdWdWdWdWagcwcvcRihcJcJcJcJcJjyagcycycycLcLcLcycycycyawaaaa +aaaaaaaaaaSHSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSVSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgdLcgcgcgcgdLagchcicicicicicicicichagcpcocCdidjdilKdldjdlagdWdWdWdWdWdWdWdWdWdWagcwcvcRqbqyqyqyqyqyvzagcycycycycycycycyededawaaaa +aaaaaaaaaaSHSHSHTaTbTaTbSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabaaaa +aaaaaaaaaaSHTdSJSJSJSJSJTeSJSQSJSJSJSJTfSKSKSKSKSKSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRhRhRhRhRhRhRhRhRhRhRhRhRhRhRhRhRhRhRaaaa +aaaaaaaaaaSHTdSJSJSJSJSJSJSJSJSJSJSJTdSHSOSKSOSKSSSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa +aaaaaaaaaaSHTdSJSJSJSJSJSNSNSJSJSJSJTdSHSHSHSHSHSHSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa +aaaaaaaaaaSHTdSJSJSJSJSJSNSNSJSJSJSJTdSHSKSKSKSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa +aaaaaaaaaaSHTdSJSJSJSJSJSJSJSJSJSJSJSJSRSKSKTgSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa +aaaaaaaaaaSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHSHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahRjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjtjthRaaaa diff --git a/maps/submaps/admin_use_vr/ert.dmm b/maps/submaps/admin_use_vr/ert.dmm index ce4c104a66..e7e7be1271 100644 --- a/maps/submaps/admin_use_vr/ert.dmm +++ b/maps/submaps/admin_use_vr/ert.dmm @@ -1980,13 +1980,16 @@ /area/ship/ert/barracks) "oX" = ( /obj/structure/table/rack/steel, -/obj/item/weapon/storage/backpack/ert/engineer, -/obj/item/weapon/storage/backpack/ert/engineer, -/obj/item/weapon/storage/backpack/ert/engineer, -/obj/item/clothing/suit/space/void/responseteam/engineer, -/obj/item/clothing/suit/space/void/responseteam/engineer, -/obj/item/clothing/suit/space/void/responseteam/engineer, /obj/effect/floor_decal/industrial/outline/grey, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/obj/item/clothing/gloves/yellow, +/obj/item/weapon/storage/backpack/ert/engineer, +/obj/item/weapon/storage/backpack/ert/engineer, +/obj/item/weapon/storage/backpack/ert/engineer, +/obj/item/clothing/suit/space/void/responseteam/engineer, +/obj/item/clothing/suit/space/void/responseteam/engineer, +/obj/item/clothing/suit/space/void/responseteam/engineer, /turf/simulated/floor/tiled/techfloor, /area/ship/ert/barracks) "pa" = ( diff --git a/maps/submaps/surface_submaps/mountains/Cliff1.dmm b/maps/submaps/surface_submaps/mountains/Cliff1.dmm index 2b6f57b9f1..1897f0ab17 100644 --- a/maps/submaps/surface_submaps/mountains/Cliff1.dmm +++ b/maps/submaps/surface_submaps/mountains/Cliff1.dmm @@ -1,23 +1,25 @@ "a" = (/turf/template_noop,/area/template_noop) "b" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"c" = (/obj/item/weapon/ore,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"d" = (/obj/random/outcrop,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"e" = (/obj/structure/cliff/automatic/corner,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"f" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"g" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"h" = (/obj/structure/cliff/automatic,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"i" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"j" = (/obj/random/humanoidremains{spawn_nothing_percentage = 70},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) +"c" = (/obj/item/weapon/ore,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff) +"d" = (/obj/random/outcrop,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff) +"e" = (/obj/structure/cliff/automatic/corner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff) +"f" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff) +"g" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff) +"h" = (/obj/structure/cliff/automatic,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff) +"i" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff) +"j" = (/obj/random/humanoidremains{spawn_nothing_percentage = 70},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff) +"k" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/ore_cliff) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa abbbbabbbbbbbaabbbbbbbbaaabbaa -aabcbbbdbcbbbbbbdbbcdbbbbcbbaa -aabefcbbbbbdbbcbbbbbbcghhhibaa -aabcehhfbbbbbbbbbcghhhibbbcbaa -aaajbbbehfbcbghhhhibbbcjbbbaaa -aaaaabbcbehhhibbbbbbcbbbbaaaaa -aaaaaaacbbbjbbcbbcbbbaaaaaaaaa +aakckkbdbcbbbbbbdbbcdbbkkckkaa +aakefckkkbbdbbcbbbkkkcghhhikaa +aakcehhfkkkkkkkkkcghhhikkkckaa +aaajkkkehfkckghhhhikkkcjbbbaaa +aaaaabkckehhhikkkkkkcbbbbaaaaa +aaaaaaackkkjkkcbbcbbbaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} + diff --git a/maps/submaps/surface_submaps/mountains/Geyser1.dmm b/maps/submaps/surface_submaps/mountains/Geyser1.dmm index 32a4bb18d0..c61b3d11a1 100644 --- a/maps/submaps/surface_submaps/mountains/Geyser1.dmm +++ b/maps/submaps/surface_submaps/mountains/Geyser1.dmm @@ -1,10 +1,10 @@ "a" = (/turf/template_noop,/area/template_noop) -"b" = (/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"c" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"d" = (/obj/random/outcrop,/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"e" = (/obj/random/outcrop,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"f" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/mist{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/turf/simulated/floor/water/deep{outdoors = 0},/area/template_noop) -"g" = (/obj/random/turf/lava,/obj/random/outcrop,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) +"b" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_1) +"c" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_1) +"d" = (/obj/random/outcrop,/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_1) +"e" = (/obj/random/outcrop,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_1) +"f" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/mist{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/turf/simulated/floor/water/deep{outdoors = 0},/area/submap/geyser_1) +"g" = (/obj/random/turf/lava,/obj/random/outcrop,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_1) (1,1,1) = {" accbdca diff --git a/maps/submaps/surface_submaps/mountains/Geyser2.dmm b/maps/submaps/surface_submaps/mountains/Geyser2.dmm index ddc99e4eb4..339736597f 100644 --- a/maps/submaps/surface_submaps/mountains/Geyser2.dmm +++ b/maps/submaps/surface_submaps/mountains/Geyser2.dmm @@ -1,16 +1,16 @@ "a" = (/turf/template_noop,/area/template_noop) -"b" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"c" = (/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"d" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"e" = (/obj/structure/fence{icon_state = "straight"; dir = 8},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"f" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 5},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"g" = (/obj/structure/fence/cut/large,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"h" = (/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"i" = (/obj/structure/fence,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"j" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"k" = (/obj/structure/fence/door/locked,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"l" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"m" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/mist{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/obj/random/humanoidremains,/obj/random/medical/lite,/turf/simulated/floor/water/deep{outdoors = 0},/area/template_noop) +"b" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"c" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"d" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"e" = (/obj/structure/fence{icon_state = "straight"; dir = 8},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"f" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 5},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"g" = (/obj/structure/fence/cut/large,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"h" = (/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"i" = (/obj/structure/fence,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"j" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"k" = (/obj/structure/fence/door/locked,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"l" = (/obj/structure/fence/corner{icon_state = "corner"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_2) +"m" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/mist{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/obj/random/humanoidremains,/obj/random/medical/lite,/turf/simulated/floor/water/deep{outdoors = 0},/area/submap/geyser_2) (1,1,1) = {" abbcbba diff --git a/maps/submaps/surface_submaps/mountains/Geyser3.dmm b/maps/submaps/surface_submaps/mountains/Geyser3.dmm index 00abb7bf98..70047b220a 100644 --- a/maps/submaps/surface_submaps/mountains/Geyser3.dmm +++ b/maps/submaps/surface_submaps/mountains/Geyser3.dmm @@ -1,21 +1,21 @@ "a" = (/turf/template_noop,/area/template_noop) -"b" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"c" = (/obj/structure/cliff/automatic,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"d" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"e" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"f" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"g" = (/turf/simulated/floor/lava,/area/template_noop) -"h" = (/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"i" = (/obj/structure/cliff/automatic/corner,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"j" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 8},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"k" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 4},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"l" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/fire{interval_upper_bound = 1200},/turf/simulated/floor/lava,/area/template_noop) -"m" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"n" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"o" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"p" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"q" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 2},/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) -"r" = (/obj/random/multiple/minevault,/turf/simulated/floor/outdoors/rocks/caves,/area/template_noop) +"b" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"c" = (/obj/structure/cliff/automatic,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"d" = (/obj/random/turf/lava,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"e" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"f" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"g" = (/turf/simulated/floor/lava,/area/submap/geyser_3) +"h" = (/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"i" = (/obj/structure/cliff/automatic/corner,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"j" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 8},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"k" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 4},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"l" = (/obj/effect/map_effect/interval/effect_emitter/steam,/obj/effect/map_effect/interval/effect_emitter/smoke/bad{interval_lower_bound = 100; interval_upper_bound = 3000},/obj/effect/map_effect/interval/screen_shaker{interval_upper_bound = 600},/obj/effect/map_effect/interval/effect_emitter/smoke/fire{interval_upper_bound = 1200},/turf/simulated/floor/lava,/area/submap/geyser_3) +"m" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"n" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 10},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"o" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"p" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 6},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"q" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 2},/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) +"r" = (/obj/random/multiple/minevault,/turf/simulated/floor/outdoors/rocks/caves,/area/submap/geyser_3) (1,1,1) = {" abcdcea diff --git a/maps/submaps/surface_submaps/mountains/mountains.dm b/maps/submaps/surface_submaps/mountains/mountains.dm index 34f151a17f..83447b714c 100644 --- a/maps/submaps/surface_submaps/mountains/mountains.dm +++ b/maps/submaps/surface_submaps/mountains/mountains.dm @@ -25,6 +25,7 @@ #include "vault3.dmm" #include "vault4.dmm" #include "vault5.dmm" +#include "vault6.dmm" #include "IceCave1A.dmm" #include "IceCave1B.dmm" #include "IceCave1C.dmm" diff --git a/maps/submaps/surface_submaps/mountains/mountains_areas.dm b/maps/submaps/surface_submaps/mountains/mountains_areas.dm index 04c8568513..d39e38823b 100644 --- a/maps/submaps/surface_submaps/mountains/mountains_areas.dm +++ b/maps/submaps/surface_submaps/mountains/mountains_areas.dm @@ -96,6 +96,10 @@ name = "POI - Mine Vault" ambience = AMBIENCE_FOREBODING +/area/submap/cave/vault6 + name = "POI - Mine Vault" + ambience = AMBIENCE_FOREBODING + /area/submap/cave/IceCave1A name = "POI - Ice Cave 1A" ambience = AMBIENCE_SPACE @@ -123,6 +127,22 @@ name = "POI - Crashed Containment Shuttle" ambience = AMBIENCE_HIGHSEC +/area/submap/geyser_1 + name = "POI - Ore-Rich Geyser" + ambience = AMBIENCE_RUINS + +/area/submap/geyser_2 + name = "POI - Fenced Geyser" + ambience = AMBIENCE_RUINS + +/area/submap/geyser_3 + name = "POI - Magmatic Geyser" + ambience = AMBIENCE_RUINS + +/area/submap/ore_cliff + name = "POI - Ore-Topped Cliff" + ambience = AMBIENCE_RUINS + /area/submap/deadspy name = "POI - Dead Spy" ambience = AMBIENCE_FOREBODING diff --git a/maps/submaps/surface_submaps/mountains/vault6.dmm b/maps/submaps/surface_submaps/mountains/vault6.dmm index b39128369e..c1ae439301 100644 --- a/maps/submaps/surface_submaps/mountains/vault6.dmm +++ b/maps/submaps/surface_submaps/mountains/vault6.dmm @@ -1,22 +1,22 @@ "a" = (/turf/template_noop,/area/template_noop) -"b" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"c" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 2},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"d" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"e" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"f" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"g" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"h" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"i" = (/mob/living/simple_mob/humanoid/merc/ranged/grenadier,/turf/simulated/floor/cult,/area/template_noop) -"j" = (/turf/simulated/floor/cult,/area/template_noop) -"k" = (/obj/random/tool/power,/obj/random/tech_supply,/turf/simulated/floor/cult,/area/template_noop) -"l" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"m" = (/obj/structure/bonfire/permanent/sifwood,/obj/structure/grille/rustic,/turf/simulated/floor/cult,/area/template_noop) -"n" = (/obj/random/multiple/minevault,/turf/simulated/floor/cult,/area/template_noop) -"o" = (/obj/structure/cliff/automatic/corner,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"p" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"q" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"r" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) -"s" = (/obj/structure/cliff/automatic,/turf/simulated/mineral/floor/ignore_mapgen,/area/template_noop) +"b" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"c" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 2},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"d" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"e" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 6},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"f" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"g" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 10},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"h" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"i" = (/mob/living/simple_mob/humanoid/merc/ranged/grenadier,/turf/simulated/floor/cult,/area/submap/cave/vault6) +"j" = (/turf/simulated/floor/cult,/area/submap/cave/vault6) +"k" = (/obj/random/tool/power,/obj/random/tech_supply,/turf/simulated/floor/cult,/area/submap/cave/vault6) +"l" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"m" = (/obj/structure/bonfire/permanent/sifwood,/obj/structure/grille/rustic,/turf/simulated/floor/cult,/area/submap/cave/vault6) +"n" = (/obj/random/multiple/minevault,/turf/simulated/floor/cult,/area/submap/cave/vault6) +"o" = (/obj/structure/cliff/automatic/corner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"p" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 5},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"q" = (/obj/structure/cliff/automatic{icon_state = "cliffbuilder"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"r" = (/obj/structure/cliff/automatic/corner{icon_state = "cliffbuilder-corner"; dir = 9},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) +"s" = (/obj/structure/cliff/automatic,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault6) (1,1,1) = {" aaaaaaaaa diff --git a/maps/tether/submaps/tether_plains.dmm b/maps/tether/submaps/tether_plains.dmm index 784fcc9e91..40614ab1eb 100644 --- a/maps/tether/submaps/tether_plains.dmm +++ b/maps/tether/submaps/tether_plains.dmm @@ -37,7 +37,6 @@ dir = 1; id = "wilderness"; name = "Anti-Fauna shutters"; - pixel_x = 0; pixel_y = -25 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, @@ -45,8 +44,7 @@ "aj" = ( /obj/effect/floor_decal/rust, /obj/machinery/light/small{ - dir = 8; - pixel_x = 0 + dir = 8 }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/tether/outpost/exploration_shed) @@ -99,7 +97,6 @@ /area/tether/outpost/exploration_shed) "aq" = ( /obj/machinery/button/remote/blast_door{ - dir = 2; id = "wilderness"; name = "Anti-Fauna shutters"; pixel_x = -1; @@ -123,6 +120,9 @@ "bF" = ( /turf/simulated/mineral/virgo3b, /area/mine/unexplored) +"Al" = ( +/turf/simulated/mineral/virgo3b, +/area/mine/explored) "BE" = ( /mob/living/simple_mob/animal/space/goose/virgo3b, /turf/simulated/floor/outdoors/grass/sif/virgo3b, @@ -131,6 +131,9 @@ /mob/living/simple_mob/animal/passive/gaslamp, /turf/simulated/floor/outdoors/grass/sif/virgo3b, /area/tether/outpost/exploration_plains) +"ID" = ( +/turf/simulated/mineral/virgo3b, +/area/tether/outpost/exploration_shed) (1,1,1) = {" as @@ -418,7 +421,7 @@ ac "} (3,1,1) = {" as -bF +Al bF bF bF @@ -560,7 +563,7 @@ ac "} (4,1,1) = {" as -bF +Al bF bF bF @@ -702,7 +705,7 @@ ac "} (5,1,1) = {" as -bF +Al bF bF bF @@ -844,7 +847,7 @@ ac "} (6,1,1) = {" as -bF +Al bF bF bF @@ -986,7 +989,7 @@ ac "} (7,1,1) = {" as -bF +Al ad ad bF @@ -1128,7 +1131,7 @@ ac "} (8,1,1) = {" as -ad +Al ad ad ad @@ -1270,7 +1273,7 @@ ac "} (9,1,1) = {" as -ad +Al ad ad ad @@ -1412,7 +1415,7 @@ ac "} (10,1,1) = {" as -ab +Al ad ad ab @@ -1554,8 +1557,8 @@ ac "} (11,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -1696,8 +1699,8 @@ ac "} (12,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -1838,8 +1841,8 @@ ac "} (13,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -1980,8 +1983,8 @@ ac "} (14,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -2122,8 +2125,8 @@ ac "} (15,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -2264,8 +2267,8 @@ ac "} (16,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -2406,8 +2409,8 @@ ac "} (17,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -2548,8 +2551,8 @@ ac "} (18,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -2690,8 +2693,8 @@ ac "} (19,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -2832,8 +2835,8 @@ ac "} (20,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -2974,8 +2977,8 @@ ac "} (21,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -3116,8 +3119,8 @@ ac "} (22,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -3258,8 +3261,8 @@ ac "} (23,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -3400,8 +3403,8 @@ ac "} (24,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -3542,8 +3545,8 @@ ac "} (25,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -3684,8 +3687,8 @@ ac "} (26,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -3826,8 +3829,8 @@ ac "} (27,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -3968,8 +3971,8 @@ ac "} (28,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -4110,8 +4113,8 @@ ac "} (29,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -4252,8 +4255,8 @@ ac "} (30,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -4394,8 +4397,8 @@ ac "} (31,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -4536,8 +4539,8 @@ ac "} (32,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -4678,8 +4681,8 @@ ac "} (33,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -4820,8 +4823,8 @@ ac "} (34,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -4962,8 +4965,8 @@ ac "} (35,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -5104,8 +5107,8 @@ ac "} (36,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -5246,8 +5249,8 @@ ac "} (37,1,1) = {" as -ab -ab +Al +ad ab ab Em @@ -5388,8 +5391,8 @@ ac "} (38,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -5530,8 +5533,8 @@ ac "} (39,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -5672,8 +5675,8 @@ ac "} (40,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -5814,8 +5817,8 @@ ac "} (41,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -5956,8 +5959,8 @@ ac "} (42,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -6098,8 +6101,8 @@ ac "} (43,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -6240,8 +6243,8 @@ ac "} (44,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -6382,8 +6385,8 @@ ac "} (45,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -6524,8 +6527,8 @@ ac "} (46,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -6666,8 +6669,8 @@ ac "} (47,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -6808,8 +6811,8 @@ ac "} (48,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -6950,8 +6953,8 @@ ac "} (49,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -7092,8 +7095,8 @@ ac "} (50,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -7234,8 +7237,8 @@ ac "} (51,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -7376,8 +7379,8 @@ ac "} (52,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -7518,8 +7521,8 @@ ac "} (53,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -7660,8 +7663,8 @@ ac "} (54,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -7802,8 +7805,8 @@ ac "} (55,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -7944,8 +7947,8 @@ ac "} (56,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -8086,8 +8089,8 @@ ac "} (57,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -8228,8 +8231,8 @@ ac "} (58,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -8370,8 +8373,8 @@ ac "} (59,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -8512,8 +8515,8 @@ ac "} (60,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -8654,8 +8657,8 @@ ac "} (61,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -8796,8 +8799,8 @@ ac "} (62,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -8938,7 +8941,7 @@ ac "} (63,1,1) = {" as -ab +Al ad ad ab @@ -9080,7 +9083,7 @@ ac "} (64,1,1) = {" at -an +ID an an an @@ -10784,7 +10787,7 @@ ac "} (76,1,1) = {" at -an +ID an an an @@ -10926,7 +10929,7 @@ ac "} (77,1,1) = {" as -ad +Al ad ad ab @@ -11068,8 +11071,8 @@ ac "} (78,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -11210,8 +11213,8 @@ ac "} (79,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -11352,8 +11355,8 @@ ac "} (80,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -11494,8 +11497,8 @@ ac "} (81,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -11636,8 +11639,8 @@ ac "} (82,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -11778,8 +11781,8 @@ ac "} (83,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -11920,8 +11923,8 @@ ac "} (84,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -12062,8 +12065,8 @@ ac "} (85,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -12204,8 +12207,8 @@ ac "} (86,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -12346,8 +12349,8 @@ ac "} (87,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -12488,8 +12491,8 @@ ac "} (88,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -12630,8 +12633,8 @@ ac "} (89,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -12772,8 +12775,8 @@ ac "} (90,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -12914,8 +12917,8 @@ ac "} (91,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -13056,8 +13059,8 @@ ac "} (92,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -13198,8 +13201,8 @@ ac "} (93,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -13340,8 +13343,8 @@ ac "} (94,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -13482,8 +13485,8 @@ ac "} (95,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -13624,8 +13627,8 @@ ac "} (96,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -13766,8 +13769,8 @@ ac "} (97,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -13908,8 +13911,8 @@ ac "} (98,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -14050,8 +14053,8 @@ ac "} (99,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -14192,8 +14195,8 @@ ac "} (100,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -14334,8 +14337,8 @@ ac "} (101,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -14476,8 +14479,8 @@ ac "} (102,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -14618,8 +14621,8 @@ ac "} (103,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -14760,8 +14763,8 @@ ac "} (104,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -14902,8 +14905,8 @@ ac "} (105,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -15044,8 +15047,8 @@ ac "} (106,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -15186,8 +15189,8 @@ ac "} (107,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -15328,8 +15331,8 @@ ac "} (108,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -15470,8 +15473,8 @@ ac "} (109,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -15612,8 +15615,8 @@ ac "} (110,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -15754,8 +15757,8 @@ ac "} (111,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -15896,8 +15899,8 @@ ac "} (112,1,1) = {" as -ab -ab +Al +ad BE ab ab @@ -16038,8 +16041,8 @@ ac "} (113,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -16180,8 +16183,8 @@ ac "} (114,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -16322,8 +16325,8 @@ ac "} (115,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -16464,8 +16467,8 @@ ac "} (116,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -16606,8 +16609,8 @@ ac "} (117,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -16748,8 +16751,8 @@ ac "} (118,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -16890,8 +16893,8 @@ ac "} (119,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -17032,8 +17035,8 @@ ac "} (120,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -17174,8 +17177,8 @@ ac "} (121,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -17316,8 +17319,8 @@ ac "} (122,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -17458,8 +17461,8 @@ ac "} (123,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -17600,8 +17603,8 @@ ac "} (124,1,1) = {" as -ab -ab +Al +ad ab Em ab @@ -17742,8 +17745,8 @@ ac "} (125,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -17884,8 +17887,8 @@ ac "} (126,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -18026,8 +18029,8 @@ ac "} (127,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -18168,8 +18171,8 @@ ac "} (128,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -18310,8 +18313,8 @@ ac "} (129,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -18452,8 +18455,8 @@ ac "} (130,1,1) = {" as -ab -ab +Al +ad ab ab ab @@ -18594,9 +18597,9 @@ ac "} (131,1,1) = {" as -ab -ab -ab +Al +ad +ad ab ab ab @@ -18736,9 +18739,9 @@ ac "} (132,1,1) = {" as -ab -ab -ab +Al +ad +ad ad ab ab @@ -18878,8 +18881,8 @@ ac "} (133,1,1) = {" as +Al ad -ab ad ad ad @@ -19020,7 +19023,7 @@ ac "} (134,1,1) = {" as -ad +Al ad ad ad @@ -19162,7 +19165,7 @@ ac "} (135,1,1) = {" as -bF +Al bF bF bF @@ -19304,7 +19307,7 @@ ac "} (136,1,1) = {" as -bF +Al bF bF bF @@ -19446,7 +19449,7 @@ ac "} (137,1,1) = {" as -bF +Al bF bF bF @@ -19588,7 +19591,7 @@ ac "} (138,1,1) = {" as -bF +Al bF bF bF diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index 08ba427fa9..04ae672b7e 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -11536,6 +11536,16 @@ }, /turf/simulated/floor/water/pool, /area/tether/surfacebase/surface_one_hall) +"atm" = ( +/obj/structure/bed/chair/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/visitor_dining) "atn" = ( /obj/machinery/status_display{ pixel_x = 32; @@ -17352,17 +17362,6 @@ }, /turf/simulated/floor/lino, /area/crew_quarters/visitor_dining) -"aIs" = ( -/obj/structure/bed/chair/wood, -/obj/structure/bed/chair/wood, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/visitor_dining) "aIt" = ( /obj/structure/bed/chair/wood, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -46116,7 +46115,7 @@ aEK aEK aEK aDu -aIs +atm aCQ aJV aDu diff --git a/maps/tether/tether_defines.dm b/maps/tether/tether_defines.dm index 44c3839987..fa8abc2f1f 100644 --- a/maps/tether/tether_defines.dm +++ b/maps/tether/tether_defines.dm @@ -87,7 +87,7 @@ shuttle_recall_message = "The scheduled crew transfer has been cancelled." shuttle_name = "Automated Tram" emergency_shuttle_docked_message = "The evacuation tram has arrived at the tram station. You have approximately %ETD% to board the tram." - emergency_shuttle_leaving_dock = "The emergency tram has left the station. Estimate %ETA% until the shuttle arrives at %dock_name%." + emergency_shuttle_leaving_dock = "The emergency tram has left the station. Estimate %ETA% until the tram arrives at %dock_name%." emergency_shuttle_called_message = "An emergency evacuation has begun, and an off-schedule tram has been called. It will arrive at the tram station in approximately %ETA%." emergency_shuttle_recall_message = "The evacuation tram has been recalled." @@ -288,8 +288,8 @@ // For making the 6-in-1 holomap, we calculate some offsets #define TETHER_MAP_SIZE 140 // Width and height of compiled in tether z levels. #define TETHER_HOLOMAP_CENTER_GUTTER 40 // 40px central gutter between columns -#define TETHER_HOLOMAP_MARGIN_X ((HOLOMAP_ICON_SIZE - (2*TETHER_MAP_SIZE) - TETHER_HOLOMAP_CENTER_GUTTER) / 2) // 100 -#define TETHER_HOLOMAP_MARGIN_Y ((HOLOMAP_ICON_SIZE - (3*TETHER_MAP_SIZE)) / 2) // 60 +#define TETHER_HOLOMAP_MARGIN_X ((HOLOMAP_ICON_SIZE - (2*TETHER_MAP_SIZE) - TETHER_HOLOMAP_CENTER_GUTTER) / 2) // 80 +#define TETHER_HOLOMAP_MARGIN_Y ((HOLOMAP_ICON_SIZE - (3*TETHER_MAP_SIZE)) / 2) // 30 // We have a bunch of stuff common to the station z levels /datum/map_z_level/tether/station diff --git a/rust_g b/rust_g deleted file mode 100644 index 57684fff77..0000000000 Binary files a/rust_g and /dev/null differ diff --git a/rust_g.dll b/rust_g.dll index 9438c14445..5e60ff2cd4 100644 Binary files a/rust_g.dll and b/rust_g.dll differ diff --git a/sound/ambience/alarm4.ogg b/sound/ambience/alarm4.ogg index 0df767c0d2..40ce18bfa3 100644 Binary files a/sound/ambience/alarm4.ogg and b/sound/ambience/alarm4.ogg differ diff --git a/sound/ambience/alarm417_20.ogg b/sound/ambience/alarm417_20.ogg new file mode 100644 index 0000000000..0df767c0d2 Binary files /dev/null and b/sound/ambience/alarm417_20.ogg differ diff --git a/sound/items/small_motor/motor_end.ogg b/sound/items/small_motor/motor_end.ogg new file mode 100644 index 0000000000..e175bfad46 Binary files /dev/null and b/sound/items/small_motor/motor_end.ogg differ diff --git a/sound/items/small_motor/motor_fast.ogg b/sound/items/small_motor/motor_fast.ogg new file mode 100644 index 0000000000..317ca4be4f Binary files /dev/null and b/sound/items/small_motor/motor_fast.ogg differ diff --git a/sound/items/small_motor/motor_faster.ogg b/sound/items/small_motor/motor_faster.ogg new file mode 100644 index 0000000000..bc8e89d495 Binary files /dev/null and b/sound/items/small_motor/motor_faster.ogg differ diff --git a/sound/items/small_motor/motor_idle.ogg b/sound/items/small_motor/motor_idle.ogg new file mode 100644 index 0000000000..01bc22de51 Binary files /dev/null and b/sound/items/small_motor/motor_idle.ogg differ diff --git a/sound/items/small_motor/motor_pull_attempt.ogg b/sound/items/small_motor/motor_pull_attempt.ogg new file mode 100644 index 0000000000..d7475dbae2 Binary files /dev/null and b/sound/items/small_motor/motor_pull_attempt.ogg differ diff --git a/sound/items/small_motor/motor_start_nopull.ogg b/sound/items/small_motor/motor_start_nopull.ogg new file mode 100644 index 0000000000..35bb4c6e6c Binary files /dev/null and b/sound/items/small_motor/motor_start_nopull.ogg differ diff --git a/sound/items/small_motor/motor_start_pull.ogg b/sound/items/small_motor/motor_start_pull.ogg new file mode 100644 index 0000000000..45e456077e Binary files /dev/null and b/sound/items/small_motor/motor_start_pull.ogg differ diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole.js b/tgui/packages/tgui/interfaces/CommunicationsConsole.js index d76abba47d..dc2934cbd6 100644 --- a/tgui/packages/tgui/interfaces/CommunicationsConsole.js +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole.js @@ -81,7 +81,7 @@ const CommunicationsConsoleMain = (props, context) => { key={slevel.name} icon={slevel.icon} content={slevel.name} - disabled={!authmax} + disabled={!authenticated} selected={slevel.id === security_level} onClick={() => act('newalertlevel', { level: slevel.id })} /> ); @@ -89,15 +89,8 @@ const CommunicationsConsoleMain = (props, context) => { return ( -
    +
    - - {alertLevelText} - - - {alertLevelButtons} -
    + + {alertLevelText} + + + {alertLevelButtons} +
    @@ -269,7 +269,7 @@ const RIGSuitModules = (props, context) => { {module.damage >= 2 ? ( -- MODULE DESTROYED -- ) : ( - + Engage: {module.engagecost} Active: {module.activecost} @@ -278,33 +278,33 @@ const RIGSuitModules = (props, context) => { {module.desc} - {module.charges ? ( - -
    - - - {capitalize(module.chargetype)} - - {module.charges.map((charge, i) => ( - act("interact_module", { - "module": module.index, - "module_mode": "select_charge_type", - "charge_type": i, - })} /> - )} /> - ))} - -
    -
    - ) : null}
    )} + {module.charges ? ( + +
    + + + {capitalize(module.chargetype)} + + {module.charges.map((charge, i) => ( + +
    +
    + ) : null}
    ))} diff --git a/tgui/packages/tgui/interfaces/SecurityRecords.js b/tgui/packages/tgui/interfaces/SecurityRecords.js index 7a95841cdf..4cdf09098a 100644 --- a/tgui/packages/tgui/interfaces/SecurityRecords.js +++ b/tgui/packages/tgui/interfaces/SecurityRecords.js @@ -180,7 +180,7 @@ const SecurityRecordsViewGeneral = (_properties, context) => { {general.fields.map((field, i) => ( - {field.value} + {field.value.split("\n").map(m => {m})} {!!field.edit && (