diff --git a/code/__defines/genetics.dm b/code/__defines/genetics.dm index 9744c4407e9a..e1af913787b9 100644 --- a/code/__defines/genetics.dm +++ b/code/__defines/genetics.dm @@ -5,7 +5,6 @@ #define GENE_COND_REMOTE_TALK /decl/genetic_condition/superpower/remotetalk #define GENE_COND_RUNNING /decl/genetic_condition/superpower/running #define GENE_COND_REMOTE_VIEW /decl/genetic_condition/superpower/remoteview -#define GENE_COND_SHAPESHIFTER /decl/genetic_condition/superpower/morph #define GENE_COND_NO_FINGERPRINTS /decl/genetic_condition/superpower/noprints #define GENE_COND_CLUMSY /decl/genetic_condition/disability/clumsy diff --git a/code/__defines/hydroponics.dm b/code/__defines/hydroponics.dm index 6aa4a63f761d..e40a83850d8b 100644 --- a/code/__defines/hydroponics.dm +++ b/code/__defines/hydroponics.dm @@ -4,6 +4,7 @@ // Defining these to point to the relevant decl types just to avoid a massive changeset. // TODO: rename to PLANT_TRAIT or bare decls to avoid mixing up with GetTrait etc. #define TRAIT_CHEMS /decl/plant_trait/chems +#define TRAIT_POLLEN /decl/plant_trait/pollen #define TRAIT_EXUDE_GASSES /decl/plant_trait/exude_gasses #define TRAIT_ALTER_TEMP /decl/plant_trait/alter_temp #define TRAIT_POTENCY /decl/plant_trait/potency diff --git a/code/__defines/math_physics.dm b/code/__defines/math_physics.dm index 5560282337ea..4edf99ad88af 100644 --- a/code/__defines/math_physics.dm +++ b/code/__defines/math_physics.dm @@ -34,5 +34,8 @@ #define TICKS_IN_DAY 24*60*60*10 #define TICKS_IN_SECOND 10 -#define SIMPLE_SIGN(X) ((X) < 0 ? -1 : 1) -#define SIGN(X) ((X) ? SIMPLE_SIGN(X) : 0) +#if DM_VERSION < 516 +#define SIGN(X) ( (X) ? ( (X) < 0 ? -1 : 1 ) : 0 ) +#else +#define SIGN(X) sign(X) +#endif diff --git a/code/__defines/tools.dm b/code/__defines/tools.dm index 3caa322b023f..05931f41a2f4 100644 --- a/code/__defines/tools.dm +++ b/code/__defines/tools.dm @@ -62,6 +62,7 @@ #define IS_KNIFE(A) IS_TOOL(A, TOOL_KNIFE) #define IS_HAMMER(A) IS_TOOL(A, TOOL_HAMMER) #define IS_HOE(A) IS_TOOL(A, TOOL_HOE) +#define IS_SHEARS(A) IS_TOOL(A, TOOL_SHEARS) #define IS_HEMOSTAT(A) IS_TOOL(A, TOOL_HEMOSTAT) #define IS_RETRACTOR(A) IS_TOOL(A, TOOL_RETRACTOR) diff --git a/code/_helpers/areas.dm b/code/_helpers/areas.dm index b252f96b537f..e985579e0abe 100644 --- a/code/_helpers/areas.dm +++ b/code/_helpers/areas.dm @@ -36,28 +36,30 @@ */ /proc/pick_area_turf_by_flag(var/area_flags, var/list/predicates) var/list/turfs - for(var/sub_area_type in subtypesof(/area)) - var/area/sub_area = sub_area_type - if(!(initial(sub_area.area_flags) & area_flags)) + var/list/valid_areas = list() + for(var/area/candidate_area as anything in global.areas) + if(!(candidate_area.area_flags & area_flags)) continue - sub_area = locate(sub_area_type) - if(!sub_area) + valid_areas[candidate_area] = TRUE + if(!length(valid_areas)) // no turfs at all have that flag + return FALSE + // Each area contents loop is an in-world loop, so we just do one here. + for(var/turf/turf_candidate in world) + var/area/candidate_area = get_area(turf_candidate) + if(!valid_areas[candidate_area]) continue - for(var/turf/T in sub_area.contents) - if(!predicates || all_predicates_true(list(T), predicates)) - LAZYADD(turfs, T) + if(!predicates || all_predicates_true(list(turf_candidate), predicates)) + LAZYADD(turfs, turf_candidate) if(LAZYLEN(turfs)) return pick(turfs) /proc/pick_area_turf(var/areatype, var/list/predicates) var/list/turfs = get_area_turfs(areatype, predicates) - if(turfs && turfs.len) - return pick(turfs) + return SAFEPICK(turfs) /proc/pick_area(var/list/predicates) var/list/areas = get_filtered_areas(predicates) - if(LAZYLEN(areas)) - . = pick(areas) + return SAFEPICK(areas) /proc/pick_area_and_turf(var/list/area_predicates, var/list/turf_predicates) var/list/areas = get_filtered_areas(area_predicates) diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 57710a15858f..c33ecb8a33a8 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -223,7 +223,7 @@ if(Y1==Y2) return 1 //Light cannot be blocked on same tile else - var/s = SIMPLE_SIGN(Y2-Y1) + var/s = SIGN(Y2-Y1) Y1+=s while(Y1!=Y2) T=locate(X1,Y1,Z) @@ -233,8 +233,8 @@ else var/m=(32*(Y2-Y1)+(PY2-PY1))/(32*(X2-X1)+(PX2-PX1)) var/b=(Y1+PY1/32-0.015625)-m*(X1+PX1/32-0.015625) //In tiles - var/signX = SIMPLE_SIGN(X2-X1) - var/signY = SIMPLE_SIGN(Y2-Y1) + var/signX = SIGN(X2-X1) + var/signY = SIGN(Y2-Y1) if(X1 transparent, gray -> translucent white, white -> solid white diff --git a/code/_helpers/medical_scans.dm b/code/_helpers/medical_scans.dm index 99468c41c8cd..8e26d3d74db2 100644 --- a/code/_helpers/medical_scans.dm +++ b/code/_helpers/medical_scans.dm @@ -8,7 +8,7 @@ if(!brain || stat == DEAD || (status_flags & FAKEDEATH)) brain_result = 0 else if(stat != DEAD) - brain_result = round(max(0,(1 - brain.damage/brain.max_damage)*100)) + brain_result = round(max(0,(1 - brain.get_organ_damage() / brain.max_damage)*100)) else brain_result = -1 .["brain_activity"] = brain_result @@ -60,29 +60,29 @@ .["reagents"] += list(reagent) .["external_organs"] = list() - for(var/obj/item/organ/external/E in get_external_organs()) + for(var/obj/item/organ/external/limb in get_external_organs()) var/list/O = list() - O["name"] = E.name - O["brute_ratio"] = E.brute_ratio - O["burn_ratio"] = E.burn_ratio - O["limb_flags"] = E.limb_flags - O["brute_dam"] = E.brute_dam - O["burn_dam"] = E.burn_dam - O["scan_results"] = E.get_scan_results(tag) - O["tumors"] = E.has_growths() - O["ailments"] = E.has_diagnosable_ailments(scanner = TRUE) + O["name"] = limb.name + O["brute_ratio"] = limb.brute_ratio + O["burn_ratio"] = limb.burn_ratio + O["limb_flags"] = limb.limb_flags + O["brute_dam"] = limb.brute_dam + O["burn_dam"] = limb.burn_dam + O["scan_results"] = limb.get_scan_results(tag) + O["tumors"] = limb.has_growths() + O["ailments"] = limb.has_diagnosable_ailments(scanner = TRUE) .["external_organs"] += list(O) .["internal_organs"] = list() var/list/internal_organs = get_internal_organs() - for(var/obj/item/organ/internal/I in internal_organs) + for(var/obj/item/organ/internal/organ in internal_organs) var/list/O = list() - O["name"] = I.name - O["is_broken"] = I.is_broken() - O["is_bruised"] = I.is_bruised() - O["is_damaged"] = I.damage > 0 - O["scan_results"] = I.get_scan_results(tag) - O["ailments"] = I.has_diagnosable_ailments(scanner = TRUE) + O["name"] = organ.name + O["is_broken"] = organ.is_broken() + O["is_bruised"] = organ.is_bruised() + O["is_damaged"] = organ.get_organ_damage() > 0 + O["scan_results"] = organ.get_scan_results(tag) + O["ailments"] = organ.has_diagnosable_ailments(scanner = TRUE) .["internal_organs"] += list(O) .["missing_organs"] = list() @@ -270,34 +270,34 @@ dat += "OrganDamageStatus" subdat = list() - for(var/list/E in scan["external_organs"]) - if(!E) + for(var/list/organ_data in scan["external_organs"]) + if(!organ_data) break var/row = list() - row += "[E["name"]]" + row += "[organ_data["name"]]" var/rowdata = list() - if(E["brute_dam"] + E["burn_dam"] == 0) + if(organ_data["brute_dam"] + organ_data["burn_dam"] == 0) rowdata += "None" else if(skill_level < SKILL_ADEPT) - if(E["brute_dam"]) + if(organ_data["brute_dam"]) rowdata += "Damaged" - if(E["burn_dam"]) + if(organ_data["burn_dam"]) rowdata += "Burned" else - if(E["brute_dam"]) - rowdata += "[capitalize(get_wound_severity(E["brute_ratio"], (E["limb_flags"] & ORGAN_FLAG_HEALS_OVERKILL)))] physical trauma" - if(E["burn_dam"]) - rowdata += "[capitalize(get_wound_severity(E["burn_ratio"], (E["limb_flags"] & ORGAN_FLAG_HEALS_OVERKILL)))] burns" + if(organ_data["brute_dam"]) + rowdata += "[capitalize(get_wound_severity(organ_data["brute_ratio"], (organ_data["limb_flags"] & ORGAN_FLAG_HEALS_OVERKILL)))] physical trauma" + if(organ_data["burn_dam"]) + rowdata += "[capitalize(get_wound_severity(organ_data["burn_ratio"], (organ_data["limb_flags"] & ORGAN_FLAG_HEALS_OVERKILL)))] burns" row += "[jointext(rowdata, "
")]" if(skill_level >= SKILL_ADEPT) var/list/status = list() - if(E["scan_results"]) - status += "[english_list(E["scan_results"], nothing_text = " ")]" - if(E["tumors"]) + if(organ_data["scan_results"]) + status += "[english_list(organ_data["scan_results"], nothing_text = " ")]" + if(organ_data["tumors"]) status += "Abnormal internal growth" - if(E["ailments"]) - status += "[jointext(E["ailments"], "
")]" + if(organ_data["ailments"]) + status += "[jointext(organ_data["ailments"], "
")]" row += "[status ? jointext(status, "
") : "Nominal."]" else row += " " @@ -311,24 +311,24 @@ //Internal Organs if(skill_level >= SKILL_BASIC) dat += "
Internal Organs
" - for(var/list/I in scan["internal_organs"]) + for(var/list/organ_data in scan["internal_organs"]) var/row = list() - row += "[I["name"]]" - if(I["is_broken"]) + row += "[organ_data["name"]]" + if(organ_data["is_broken"]) row += "Severe" - else if(I["is_bruised"]) + else if(organ_data["is_bruised"]) row += "Moderate" - else if(I["is_damaged"]) + else if(organ_data["is_damaged"]) row += "Minor" else row += "None" if(skill_level >= SKILL_ADEPT) var/list/status = list() - if(I["scan_results"]) - status += "[english_list(I["scan_results"], nothing_text = " ")]" - if(I["ailments"]) - status += "[jointext(I["ailments"], "
")]" + if(organ_data["scan_results"]) + status += "[english_list(organ_data["scan_results"], nothing_text = " ")]" + if(organ_data["ailments"]) + status += "[jointext(organ_data["ailments"], "
")]" row += "[status ? jointext(status, "
") : "Nominal."]" else row += " " diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 103e0b49b97f..adccbbc543df 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -27,6 +27,10 @@ * from text that will be sent to the browser. */ #define strip_improper(input_text) replacetext(replacetext(input_text, "\proper", ""), "\improper", "") +var/global/regex/starts_uppercase_regex = regex(@"^[A-Z]") +var/global/regex/starts_lowercase_regex = regex(@"^[a-z]") +#define is_proper(input_text) ((findtext(input_text, "\proper") == 1) || findtext(input_text, starts_uppercase_regex)) +#define is_improper(input_text) ((findtext(input_text, "\improper") == 1 || findtext(input_text, starts_lowercase_regex))) //Used for preprocessing entered text //Added in an additional check to alert players if input is too long diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 02c769ae10af..1c81acd2e27f 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -169,11 +169,6 @@ Turf and target are seperate in case you want to teleport some distance from a t return 1 return 0 -#if DM_VERSION < 516 -/proc/sign(x) - return x!=0?x/abs(x):0 -#endif - /proc/getline(atom/M,atom/N)//Ultra-Fast Bresenham Line-Drawing Algorithm var/px=M.x //starting x var/py=M.y @@ -182,8 +177,8 @@ Turf and target are seperate in case you want to teleport some distance from a t var/dy=N.y-py var/dxabs=abs(dx)//Absolute value of x distance var/dyabs=abs(dy) - var/sdx=sign(dx) //Sign of x distance (+ or -) - var/sdy=sign(dy) + var/sdx=SIGN(dx) //Sign of x distance (+ or -) + var/sdy=SIGN(dy) var/x=BITSHIFT_RIGHT(dxabs,1) //Counters for steps taken, setting to distance/2 var/y=BITSHIFT_RIGHT(dyabs,1) //Bit-shifting makes me l33t. It also makes getline() unnessecarrily fast. var/j //Generic integer for counting diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 372ede052d3c..d3692ea62f06 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -271,7 +271,7 @@ /atom/proc/ShiftClick(var/mob/user) if(user.client && user.client.eye == user) - user.examinate(src) + user.examine_verb(src) return /* diff --git a/code/_onclick/ghost.dm b/code/_onclick/ghost.dm index 7bee520bdb59..d36410ef6aea 100644 --- a/code/_onclick/ghost.dm +++ b/code/_onclick/ghost.dm @@ -35,7 +35,7 @@ AltClickOn(A) return if(modifiers["shift"]) - examinate(A) + examine_verb(A) return A.attack_ghost(src) @@ -44,7 +44,7 @@ if(!istype(user)) return if(user.client && user.client.inquisitive_ghost) - user.examinate(src) + user.examine_verb(src) return if(user.client?.holder || user.antagHUD) storage?.show_to(user) diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 54ff72145076..e6599e5ac2b7 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -18,7 +18,7 @@ var/procname = null var/atom/movable/target = null var/check_flags = 0 - var/active = 0 + var/active = FALSE var/obj/screen/action_button/button = null var/button_icon = 'icons/obj/action_buttons/actions.dmi' var/button_icon_state = "default" diff --git a/code/_onclick/hud/hud_types/robot.dm b/code/_onclick/hud/hud_types/robot.dm index 0f53b8f70777..9dd085ffe9c3 100644 --- a/code/_onclick/hud/hud_types/robot.dm +++ b/code/_onclick/hud/hud_types/robot.dm @@ -1,18 +1,6 @@ /mob/living/silicon/robot hud_used = /datum/hud/robot -/decl/ui_style/robot - name = "Stationbound" - restricted = TRUE - uid = "ui_style_robot" - override_icons = list( - (HUD_HEALTH) = 'icons/mob/screen/styles/robot/health.dmi', - (HUD_FIRE) = 'icons/mob/screen/styles/robot/status_fire.dmi', - (HUD_OXY) = 'icons/mob/screen/styles/robot/status_oxy.dmi', - (HUD_UP_HINT) = 'icons/mob/screen/styles/robot/uphint.dmi', - (HUD_ZONE_SELECT) = 'icons/mob/screen/styles/robot/zone_selector.dmi' - ) - /datum/hud/robot/get_ui_style_data() return GET_DECL(/decl/ui_style/robot) @@ -39,13 +27,10 @@ /datum/hud/proc/toggle_show_robot_modules() if(!isrobot(mymob)) return - var/mob/living/silicon/robot/r = mymob - r.shown_robot_modules = !r.shown_robot_modules update_robot_modules_display() - /datum/hud/proc/update_robot_modules_display() if(!isrobot(mymob) || !mymob.client) return diff --git a/code/_onclick/hud/screen/_screen.dm b/code/_onclick/hud/screen/_screen.dm index b3608bbf1cd9..da0c7b5478af 100644 --- a/code/_onclick/hud/screen/_screen.dm +++ b/code/_onclick/hud/screen/_screen.dm @@ -96,7 +96,7 @@ /obj/screen/Click(location, control, params) var/list/paramlist = params2list(params) if(paramlist["shift"]) - return examine(usr, 0) + return examined_by(usr, 0) if(ismob(usr) && usr.client && usr.canClick() && (!user_incapacitation_flags || !usr.incapacitated(user_incapacitation_flags))) return handle_click(usr, params) return FALSE diff --git a/code/_onclick/hud/screen/robot/screen_robot_modules.dm b/code/_onclick/hud/screen/robot/screen_robot_modules.dm index 8574676abda1..0e82b4fe44f6 100644 --- a/code/_onclick/hud/screen/robot/screen_robot_modules.dm +++ b/code/_onclick/hud/screen/robot/screen_robot_modules.dm @@ -5,7 +5,7 @@ /obj/screen/robot/module dir = SOUTHWEST - icon = 'icons/mob/screen/styles/robot/inventory.dmi' + icon = 'icons/mob/screen/styles/robot/modules_inventory.dmi' var/module_index /obj/screen/robot/module/handle_click(mob/user, params) diff --git a/code/_onclick/hud/screen/screen_intent.dm b/code/_onclick/hud/screen/screen_intent.dm index f05060384fb4..f3fba3b8563f 100644 --- a/code/_onclick/hud/screen/screen_intent.dm +++ b/code/_onclick/hud/screen/screen_intent.dm @@ -34,10 +34,11 @@ if(. && intent && parent) parent.set_intent(intent) -/obj/screen/intent_button/examine(mob/user, distance) +/obj/screen/intent_button/examined_by(mob/user, distance, infix, suffix) SHOULD_CALL_PARENT(FALSE) if(desc) to_chat(user, desc) + return TRUE /obj/screen/intent_button/on_update_icon() . = ..() diff --git a/code/_onclick/hud/screen/screen_maneuver.dm b/code/_onclick/hud/screen/screen_maneuver.dm index 1a66910e8d51..ddfdf15d7d6c 100644 --- a/code/_onclick/hud/screen/screen_maneuver.dm +++ b/code/_onclick/hud/screen/screen_maneuver.dm @@ -8,15 +8,14 @@ var/mob/living/user_living = user user_living.prepare_maneuver() -/obj/screen/maneuver/examine(mob/user, distance) +/obj/screen/maneuver/examined_by(mob/user, distance, infix, suffix) SHOULD_CALL_PARENT(FALSE) - if(!isliving(user)) - return var/mob/living/user_living = user - if(user_living.prepared_maneuver) - to_chat(src, SPAN_NOTICE("You are prepared to [user_living.prepared_maneuver.name].")) + if(istype(user_living) && user_living.prepared_maneuver) + to_chat(user, SPAN_NOTICE("You are prepared to [user_living.prepared_maneuver.name].")) else - to_chat(src, SPAN_NOTICE("You are not prepared to perform a maneuver.")) + to_chat(user, SPAN_NOTICE("You are not prepared to perform a maneuver.")) + return TRUE /obj/screen/maneuver/on_update_icon() var/mob/living/owner = owner_ref?.resolve() diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 3a3c22928073..04f398c519aa 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -82,7 +82,7 @@ SPAN_DANGER("You chew on your [O.name]!") ) admin_attacker_log(src, "chewed on their [O.name]!") - O.take_external_damage(3,0, DAM_SHARP|DAM_EDGE ,"teeth marks") + O.take_damage(3, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = "teeth marks") next_restraint_chew = world.time + (2.5 SECONDS) return TRUE diff --git a/code/controllers/subsystems/jobs.dm b/code/controllers/subsystems/jobs.dm index 28244f810e9d..311b9f487c0f 100644 --- a/code/controllers/subsystems/jobs.dm +++ b/code/controllers/subsystems/jobs.dm @@ -503,7 +503,7 @@ SUBSYSTEM_DEF(jobs) spawnpoint.after_join(H) // Moving wheelchair if they have one - if(H.buckled && istype(H.buckled, /obj/structure/bed/chair/wheelchair)) + if(H.buckled && istype(H.buckled, /obj/structure/chair/wheelchair)) H.buckled.forceMove(H.loc) H.buckled.set_dir(H.dir) diff --git a/code/controllers/subsystems/processing/nano.dm b/code/controllers/subsystems/processing/nano.dm index dd358012c92a..06ef7107fa5d 100644 --- a/code/controllers/subsystems/processing/nano.dm +++ b/code/controllers/subsystems/processing/nano.dm @@ -3,14 +3,11 @@ PROCESSING_SUBSYSTEM_DEF(nano) priority = SS_PRIORITY_NANO wait = 2 SECONDS - // a list of current open /nanoui UIs, grouped by src_object and ui_key - var/list/open_uis = list() - /** * Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data * * @param user /mob The mob who opened/owns the ui - * @param src_object /obj|/mob The obj or mob which the ui belongs to + * @param src_object /datum The datum which the ui belongs to * @param ui_key string A string key used for the ui * @param ui /datum/nanoui An existing instance of the ui (can be null) * @param data list The data to be passed to the ui, if it exists @@ -36,11 +33,11 @@ PROCESSING_SUBSYSTEM_DEF(nano) * * @return /nanoui Returns the found ui, or null if none exists */ -/datum/controller/subsystem/processing/nano/proc/get_open_ui(mob/user, src_object, ui_key) - if (!open_uis[src_object] || !open_uis[src_object][ui_key]) +/datum/controller/subsystem/processing/nano/proc/get_open_ui(mob/user, datum/src_object, ui_key) + if (!src_object.open_uis?[ui_key]) return - for (var/datum/nanoui/ui in open_uis[src_object][ui_key]) + for (var/datum/nanoui/ui in src_object.open_uis[ui_key]) if (ui.user == user) return ui @@ -51,13 +48,13 @@ PROCESSING_SUBSYSTEM_DEF(nano) * * @return int The number of uis updated */ -/datum/controller/subsystem/processing/nano/proc/update_uis(src_object) +/datum/controller/subsystem/processing/nano/proc/update_uis(datum/src_object) . = 0 - if (!open_uis[src_object]) + if (!src_object.open_uis) return - for (var/ui_key in open_uis[src_object]) - for (var/datum/nanoui/ui in open_uis[src_object][ui_key]) + for (var/ui_key in src_object.open_uis) + for (var/datum/nanoui/ui in src_object.open_uis[ui_key]) if(ui.src_object && ui.user && ui.src_object.nano_host()) ui.try_update(1) .++ @@ -71,16 +68,13 @@ PROCESSING_SUBSYSTEM_DEF(nano) * * @return int The number of uis close */ -/datum/controller/subsystem/processing/nano/proc/close_uis(src_object) +/datum/controller/subsystem/processing/nano/proc/close_uis(datum/src_object) . = 0 - if (!length(open_uis)) - return - - if (!open_uis[src_object]) + if (!length(src_object.open_uis)) return - for (var/ui_key in open_uis[src_object]) - for (var/datum/nanoui/ui in open_uis[src_object][ui_key]) + for (var/ui_key in src_object.open_uis) + for (var/datum/nanoui/ui in src_object.open_uis[ui_key]) ui.close() // If it's missing src_object or user, we want to close it even more. .++ @@ -93,12 +87,12 @@ PROCESSING_SUBSYSTEM_DEF(nano) * * @return int The number of uis updated */ -/datum/controller/subsystem/processing/nano/proc/update_user_uis(mob/user, src_object, ui_key = null, force_open = FALSE) +/datum/controller/subsystem/processing/nano/proc/update_user_uis(mob/user, datum/src_object, ui_key = null, force_open = FALSE) . = 0 - if (!length(user.open_uis)) + if (!length(user.opened_uis)) return // has no open uis - for (var/datum/nanoui/ui in user.open_uis) + for (var/datum/nanoui/ui in user.opened_uis) if ((isnull(src_object) || ui.src_object == src_object) && (isnull(ui_key) || ui.ui_key == ui_key)) ui.try_update(update = TRUE, force_open = force_open) .++ @@ -112,12 +106,12 @@ PROCESSING_SUBSYSTEM_DEF(nano) * * @return int The number of uis closed */ -/datum/controller/subsystem/processing/nano/proc/close_user_uis(mob/user, src_object, ui_key) +/datum/controller/subsystem/processing/nano/proc/close_user_uis(mob/user, datum/src_object, ui_key) . = 0 - if (!length(user.open_uis)) + if (!length(user.opened_uis)) return // has no open uis - for (var/datum/nanoui/ui in user.open_uis) + for (var/datum/nanoui/ui in user.opened_uis) if ((isnull(src_object) || ui.src_object == src_object) && (isnull(ui_key) || ui.ui_key == ui_key)) ui.close() .++ @@ -131,10 +125,10 @@ PROCESSING_SUBSYSTEM_DEF(nano) * @return nothing */ /datum/controller/subsystem/processing/nano/proc/ui_opened(datum/nanoui/ui) - var/src_object = ui.src_object - LAZYINITLIST(open_uis[src_object]) - LAZYDISTINCTADD(open_uis[src_object][ui.ui_key], ui) - LAZYDISTINCTADD(ui.user.open_uis, ui) + var/datum/src_object = ui.src_object + LAZYINITLIST(src_object.open_uis) + LAZYDISTINCTADD(src_object.open_uis[ui.ui_key], ui) + LAZYDISTINCTADD(ui.user.opened_uis, ui) START_PROCESSING(SSnano, ui) /** @@ -146,19 +140,15 @@ PROCESSING_SUBSYSTEM_DEF(nano) * @return int 0 if no ui was removed, 1 if removed successfully */ /datum/controller/subsystem/processing/nano/proc/ui_closed(var/datum/nanoui/ui) - var/src_object = ui.src_object - if (!open_uis[src_object] || !open_uis[src_object][ui.ui_key]) - return 0 // wasn't open + var/datum/src_object = ui.src_object + if (!src_object.open_uis?[ui.ui_key]) + return FALSE // wasn't open STOP_PROCESSING(SSnano, ui) if(ui.user) // Sanity check in case a user has been deleted (say a blown up borg watching the alarm interface) - LAZYREMOVE(ui.user.open_uis, ui) - open_uis[src_object][ui.ui_key] -= ui - if(!length(open_uis[src_object][ui.ui_key])) - open_uis[src_object] -= ui.ui_key - if(!length(open_uis[src_object])) - open_uis -= src_object - return 1 + LAZYREMOVE(ui.user.opened_uis, ui) + LAZYREMOVE(src_object.open_uis[ui.ui_key], ui) + return TRUE /** * This is called on user logout @@ -181,12 +171,11 @@ PROCESSING_SUBSYSTEM_DEF(nano) * @return nothing */ /datum/controller/subsystem/processing/nano/proc/user_transferred(mob/oldMob, mob/newMob) - if (!oldMob || !oldMob.open_uis) - return 0 // has no open uis + if (!oldMob?.opened_uis) + return FALSE // has no open uis - LAZYINITLIST(newMob.open_uis) - for (var/datum/nanoui/ui in oldMob.open_uis) + for (var/datum/nanoui/ui in oldMob.opened_uis) ui.user = newMob - newMob.open_uis += ui - oldMob.open_uis = null - return 1 // success + newMob.opened_uis += oldMob.opened_uis // if the new mob's list is null this just sets it to the old mob's list + oldMob.opened_uis = null + return TRUE // success diff --git a/code/datums/ai/human.dm b/code/datums/ai/human.dm index 59d25d1d34e4..a813e73bb1fa 100644 --- a/code/datums/ai/human.dm +++ b/code/datums/ai/human.dm @@ -45,9 +45,9 @@ else H.custom_emote("rubs [pronouns.his] [damaged_organ.name] carefully.") - for(var/obj/item/organ/I in H.get_internal_organs()) - if((I.status & ORGAN_DEAD) || BP_IS_PROSTHETIC(I)) + for(var/obj/item/organ/internal/organ in H.get_internal_organs()) + if((organ.status & ORGAN_DEAD) || BP_IS_PROSTHETIC(organ)) continue - if(I.damage > 2 && prob(1)) - var/obj/item/organ/external/parent = GET_EXTERNAL_ORGAN(H, I.parent_organ) + if(organ.get_organ_damage() > 2 && prob(1)) + var/obj/item/organ/external/parent = GET_EXTERNAL_ORGAN(H, organ.parent_organ) H.custom_emote("clutches [pronouns.his] [parent.name]!") diff --git a/code/datums/datum.dm b/code/datums/datum.dm index aa855c0b1e3b..d4d9d3f5a1b5 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -29,7 +29,7 @@ tag = null weakref = null // Clear this reference to ensure it's kept for as brief duration as possible. - if(istype(SSnano)) + if(length(open_uis)) // inline the open ui check to avoid unnecessary proc call overhead SSnano.close_uis(src) if(active_timers) diff --git a/code/datums/extensions/assembly/assembly_damage.dm b/code/datums/extensions/assembly/assembly_damage.dm index feb5d9aa8a76..f05a10282769 100644 --- a/code/datums/extensions/assembly/assembly_damage.dm +++ b/code/datums/extensions/assembly/assembly_damage.dm @@ -1,8 +1,8 @@ -/datum/extension/assembly/proc/examine(mob/user) +/datum/extension/assembly/proc/examine_assembly(mob/user) if(damage > broken_damage) - to_chat(user, SPAN_DANGER("It is heavily damaged!")) + return SPAN_DANGER("It is heavily damaged!") else if(damage) - to_chat(user, "It is damaged.") + return "It is damaged." /datum/extension/assembly/proc/break_apart() var/atom/movable/H = holder diff --git a/code/datums/extensions/extensions.dm b/code/datums/extensions/extensions.dm index 196d396e30a3..53985ff5862d 100644 --- a/code/datums/extensions/extensions.dm +++ b/code/datums/extensions/extensions.dm @@ -56,9 +56,13 @@ qdel(existing_extension) if(initial(extension_base_type.flags) & EXTENSION_FLAG_IMMEDIATE) - var/datum/extension/created = construct_extension_instance(extension_type, source, args.Copy(3)) + var/list/construct_args = args.Copy(3) + var/datum/extension/created = construct_extension_instance(extension_type, source, construct_args) source.extensions[extension_base_type] = created - created.post_construction() + if(length(construct_args)) + created.post_construction(arglist(construct_args)) + else + created.post_construction() return created var/list/extension_data = list(extension_type, source) @@ -89,21 +93,25 @@ return if(islist(.)) //a list, so it's expecting to be lazy-loaded var/list/extension_data = . - var/datum/extension/created = construct_extension_instance(extension_data[1], extension_data[2], extension_data.Copy(3)) + var/list/construct_args = extension_data.Copy(3) + var/datum/extension/created = construct_extension_instance(extension_data[1], extension_data[2], construct_args) source.extensions[base_type] = created - created.post_construction() + if(length(construct_args)) + created.post_construction(arglist(construct_args)) + else + created.post_construction() return created //Fast way to check if it has an extension, also doesn't trigger instantiation of lazy loaded extensions /proc/has_extension(var/datum/source, var/base_type) - return !!(source.extensions && source.extensions[base_type]) + return !!source.extensions?[base_type] /proc/construct_extension_instance(var/extension_type, var/datum/source, var/list/arguments) arguments = list(source) + arguments return new extension_type(arglist(arguments)) /proc/remove_extension(var/datum/source, var/base_type) - if(!source.extensions || !source.extensions[base_type]) + if(!source.extensions?[base_type]) return if(!islist(source.extensions[base_type])) qdel(source.extensions[base_type]) diff --git a/code/datums/extensions/eye/_eye.dm b/code/datums/extensions/eye/_eye.dm index 89a6cef83eba..92f340dfcf9d 100644 --- a/code/datums/extensions/eye/_eye.dm +++ b/code/datums/extensions/eye/_eye.dm @@ -98,6 +98,7 @@ /datum/action/eye/CheckRemoval(mob/living/user) if(!user.eyeobj || !istype(user.eyeobj, eye_type)) return TRUE + return ..() // Every eye created using a subtype of this extension will have this action added for manual unlooking. /datum/action/eye/unlook diff --git a/code/datums/extensions/padding/padding.dm b/code/datums/extensions/padding/padding.dm new file mode 100644 index 000000000000..f75445c9ae23 --- /dev/null +++ b/code/datums/extensions/padding/padding.dm @@ -0,0 +1,132 @@ +// TODO: Maybe generalize this to handle any sort of component-composition that can have a separate material and painting? +/// An extension that unifies padding state and interactions. +/datum/extension/padding + abstract_type = /datum/extension/padding + base_type = /datum/extension/padding + expected_type = /obj + flags = EXTENSION_FLAG_IMMEDIATE // logic must run on creation + /// The paint color for the padding represented by this extension. + /// '#FFFFFF' is treated as 'painted white', while 'null' is treated as 'unpainted'. + VAR_PROTECTED/padding_color + VAR_PROTECTED/decl/material/padding_material + // TODO: Add some better way of determining if a stack is usable, for more extensibility in modpacks. + /// What stack types can be used to add padding? + VAR_PRIVATE/static/padding_stack_types = list( + /obj/item/stack/material/skin, // leather, fur + /obj/item/stack/material/bolt, // cloth + ) + /// An internal variable used to hold a typecache for the above list. + VAR_PRIVATE/static/_padding_stack_typecache + +/datum/extension/padding/New(datum/holder, _padding_material, _padding_color) + . = ..() + if(!_padding_stack_typecache) + _padding_stack_typecache = typecacheof(padding_stack_types) + +// Must be here so our holder's get_extension calls work. +/datum/extension/padding/post_construction(_padding_material, _padding_color) + . = ..() + add_padding(_padding_material, _padding_color) + +/// Returns an object's padding material. +/datum/extension/padding/proc/get_padding_material() + RETURN_TYPE(/decl/material) + return padding_material + +/// Returns the color of the padding, either the painted/dyed color or (optionally) the underlying material color. +/datum/extension/padding/proc/get_padding_color(use_material_color = TRUE) + var/decl/material/padding_material = get_padding_material() + return padding_color || (use_material_color ? padding_material?.color : null) + +/// Used to change just the paint color on padding. +/datum/extension/padding/proc/set_padding_color(new_color) + padding_color = new_color + +/datum/extension/padding/proc/handle_use_item(obj/item/used_item, mob/user) + if(isstack(used_item)) + if(padding_material) + to_chat(user, SPAN_NOTICE("\The [holder] is already padded.")) + return TRUE + var/decl/material/new_padding_material = used_item.material + if(!is_type_in_typecache(used_item, _padding_stack_typecache) || !(new_padding_material.flags & MAT_FLAG_PADDING)) + to_chat(user, SPAN_NOTICE("You cannot pad \the [holder] with that.")) + return TRUE + var/obj/item/stack/used_stack = used_item + if(!used_stack.can_use(1)) + to_chat(user, SPAN_NOTICE("You need at least [used_stack.get_string_for_amount(1)] to pad \the [holder].")) + return TRUE + if(!used_item.user_can_attack_with(user, holder)) + return TRUE + to_chat(user, SPAN_NOTICE("You pad \the [holder] with [used_stack.get_string_for_amount(1)].")) + used_stack.use(1) + if(new_padding_material.sound_manipulate) + playsound(get_turf(holder), new_padding_material.sound_manipulate, 50, TRUE) + add_padding(new_padding_material.type, used_stack.paint_color) + return TRUE + else if(IS_SHEARS(used_item)) // can use shears or wirecutters + if(!padding_material) + to_chat(user, SPAN_NOTICE("\The [holder] has no padding to remove.")) + return TRUE + if(!used_item.user_can_attack_with(user, holder)) + return TRUE + to_chat(user, SPAN_NOTICE("You remove \the [padding_material.adjective_name] padding from \the [holder].")) + var/use_tool_sound = used_item.get_tool_sound(TOOL_SHEARS) + if(use_tool_sound) + playsound(get_turf(holder), use_tool_sound, 100, TRUE) + remove_padding() + return TRUE + return FALSE + +// TODO: Unify this somewhere on /obj, maybe? +/datum/extension/padding/proc/update_holder_name() + if(QDELETED(src) || QDELETED(holder)) + return + if(istype(holder, /obj/structure)) + var/obj/structure/structure_holder = holder + structure_holder.update_materials() // update name and description if needed + else if(isitem(holder)) + var/obj/item/item_holder = holder + item_holder.update_name() + +/datum/extension/padding/proc/add_padding(padding_type, new_padding_color, do_icon_update = TRUE) + ASSERT(padding_type) + var/old_padding_material = padding_material + padding_material = ispath(padding_type) ? GET_DECL(padding_type) : padding_type + padding_color = new_padding_color + update_matter(old_padding_material, padding_material) + if(do_icon_update) + var/obj/obj_holder = holder + addtimer(CALLBACK(src, PROC_REF(update_holder_name)), 0, TIMER_UNIQUE) // Update at the end of the tick. + obj_holder.queue_icon_update() + +/datum/extension/padding/proc/remove_padding(do_icon_update = TRUE) + if(padding_material) + var/list/res = padding_material.create_object(get_turf(holder)) + if(padding_color) + for(var/obj/item/thing in res) + thing.set_color(padding_color) + var/old_padding_material = padding_material + padding_material = null + padding_color = null + update_matter(old_padding_material, padding_material) + if(do_icon_update) + var/obj/obj_holder = holder + if(istype(obj_holder, /obj/structure)) + var/obj/structure/structure_holder = obj_holder + structure_holder.update_materials() // update name and description if needed + else if(isitem(obj_holder)) + var/obj/item/item_holder = obj_holder + item_holder.update_name() + obj_holder.queue_icon_update() + +/datum/extension/padding/proc/update_matter(decl/material/old_padding, decl/material/new_padding) + var/obj/obj_holder = holder + var/matter_mult = obj_holder.get_matter_amount_modifier() + if(LAZYLEN(obj_holder.matter) && old_padding) + obj_holder.matter[old_padding.type] -= MATTER_AMOUNT_TRACE * matter_mult + if(!obj_holder.matter[old_padding.type]) + obj_holder.matter -= old_padding.type + if(new_padding) + LAZYINITLIST(obj_holder.matter) + obj_holder.matter[new_padding.type] += MATTER_AMOUNT_TRACE * matter_mult + UNSETEMPTY(obj_holder.matter) \ No newline at end of file diff --git a/code/datums/extensions/radio_provider.dm b/code/datums/extensions/radio_provider.dm index b5d98defa816..8be75d0da1ed 100644 --- a/code/datums/extensions/radio_provider.dm +++ b/code/datums/extensions/radio_provider.dm @@ -18,7 +18,8 @@ LAZYDISTINCTADD(., registered_radio.GetRadios(message_mode)) /datum/extension/radio_provider/proc/GetRadio(message_mode) - return LAZYACCESS(GetRadios(message_mode), 1) + var/list/radios = GetRadios(message_mode) + return LAZYACCESS(radios, 1) /atom/movable/proc/GetRadios(message_mode) var/datum/extension/radio_provider/radio_provider = get_extension(src, /datum/extension/radio_provider) @@ -31,7 +32,4 @@ . = ..() var/datum/extension/radio_provider/radio = get_or_create_extension(src, /datum/extension/radio_provider) radio.register_radio(some_radio) - -/atom/movable/get_radio(message_mode) - return LAZYACCESS(GetRadios(message_mode), 1) */ \ No newline at end of file diff --git a/code/datums/genetics/genetic_conditions.dm b/code/datums/genetics/genetic_conditions.dm index 3d94ab5c0726..3b0a80e7532c 100644 --- a/code/datums/genetics/genetic_conditions.dm +++ b/code/datums/genetics/genetic_conditions.dm @@ -65,11 +65,6 @@ grant_verb = /mob/living/human/proc/remotesay activation_message = "You expand your mind outwards." -/decl/genetic_condition/superpower/morph - name = "Morph" - grant_verb = /mob/living/human/proc/morph - activation_message = "Your skin feels strange." - /decl/genetic_condition/superpower/cold_resist name = "Cold Resistance" underlay_state = "fire_s" diff --git a/code/datums/inventory_slots/inventory_gripper.dm b/code/datums/inventory_slots/inventory_gripper.dm index 334be51e15c7..08d90f5bd49e 100644 --- a/code/datums/inventory_slots/inventory_gripper.dm +++ b/code/datums/inventory_slots/inventory_gripper.dm @@ -32,3 +32,16 @@ /datum/inventory_slot/gripper/can_equip_to_slot(var/mob/user, var/obj/item/prop, var/disable_warning) return ..() && user.check_dexterity(DEXTERITY_EQUIP_ITEM, silent = disable_warning) + +// Stub definitions for future work and to pass CI. +/datum/inventory_slot/gripper/robot + abstract_type = /datum/inventory_slot/gripper/robot + +/datum/inventory_slot/gripper/robot/one + ui_label = "1" + +/datum/inventory_slot/gripper/robot/two + ui_label = "2" + +/datum/inventory_slot/gripper/robot/three + ui_label = "3" diff --git a/code/datums/supplypacks/hydroponics.dm b/code/datums/supplypacks/hydroponics.dm index 67de54be202e..bb368c5898ba 100644 --- a/code/datums/supplypacks/hydroponics.dm +++ b/code/datums/supplypacks/hydroponics.dm @@ -58,15 +58,6 @@ containername = "exotic Seeds crate" access = access_xenobiology -/decl/hierarchy/supply_pack/hydroponics/bee_keeper - name = "Equipment - Beekeeping" - contains = list(/obj/item/beehive_assembly, - /obj/item/bee_smoker, - /obj/item/honey_frame = 5, - /obj/item/bee_pack) - containername = "beekeeping crate" - access = access_hydroponics - /decl/hierarchy/supply_pack/hydroponics/hydrotray name = "Equipment - Hydroponics tray" contains = list(/obj/machinery/portable_atmospherics/hydroponics) diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm index bdf9b34ff936..855a5d525731 100644 --- a/code/datums/supplypacks/medical.dm +++ b/code/datums/supplypacks/medical.dm @@ -80,7 +80,7 @@ /decl/hierarchy/supply_pack/medical/wheelchair name = "Equipment - Wheelchair crate" - contains = list(/obj/structure/bed/chair/wheelchair) + contains = list(/obj/structure/chair/wheelchair) containertype = /obj/structure/closet/crate/large containername = "\improper Wheelchair crate" diff --git a/code/datums/supplypacks/nonessent.dm b/code/datums/supplypacks/nonessent.dm index cee09fc29b68..f9e82573d193 100644 --- a/code/datums/supplypacks/nonessent.dm +++ b/code/datums/supplypacks/nonessent.dm @@ -15,13 +15,13 @@ /obj/item/camera, /obj/item/camera_film = 2, /obj/item/photo_album, - /obj/item/chems/glass/paint/red, - /obj/item/chems/glass/paint/green, - /obj/item/chems/glass/paint/blue, - /obj/item/chems/glass/paint/yellow, - /obj/item/chems/glass/paint/purple, - /obj/item/chems/glass/paint/black, - /obj/item/chems/glass/paint/white, + /obj/item/chems/glass/bucket/paint/red, + /obj/item/chems/glass/bucket/paint/green, + /obj/item/chems/glass/bucket/paint/blue, + /obj/item/chems/glass/bucket/paint/yellow, + /obj/item/chems/glass/bucket/paint/purple, + /obj/item/chems/glass/bucket/paint/black, + /obj/item/chems/glass/bucket/paint/white, /obj/item/poster, /obj/item/stack/package_wrap/fifty = 2, /obj/item/stack/package_wrap/gift/fifty = 2 diff --git a/code/datums/trading/traders/ai.dm b/code/datums/trading/traders/ai.dm index 2f77f6b20635..51d038d968b4 100644 --- a/code/datums/trading/traders/ai.dm +++ b/code/datums/trading/traders/ai.dm @@ -104,11 +104,7 @@ They sell generic supplies and ask for generic supplies. /obj/structure/ore_box = TRADER_THIS_TYPE, /obj/structure/coatrack = TRADER_THIS_TYPE, /obj/structure/bookcase = TRADER_THIS_TYPE, - /obj/item/bee_pack = TRADER_THIS_TYPE, - /obj/item/bee_smoker = TRADER_THIS_TYPE, - /obj/item/beehive_assembly = TRADER_THIS_TYPE, /obj/item/glass_jar = TRADER_THIS_TYPE, - /obj/item/honey_frame = TRADER_THIS_TYPE, /obj/item/training_dummy = TRADER_THIS_TYPE, /obj/item/training_dummy/syndicate = TRADER_THIS_TYPE, /obj/item/training_dummy/alien = TRADER_THIS_TYPE, diff --git a/code/datums/uplink/services.dm b/code/datums/uplink/services.dm index 03d4b72eebe6..b81dfc3ec323 100644 --- a/code/datums/uplink/services.dm +++ b/code/datums/uplink/services.dm @@ -71,16 +71,16 @@ deactivate() . = ..() -/obj/item/uplink_service/examine(mob/user, distance) +/obj/item/uplink_service/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) switch(state) if(AWAITING_ACTIVATION) - to_chat(user, "It is labeled '[service_label]' and appears to be awaiting activation.") + LAZYADD(., "It is labeled '[service_label]' and appears to be awaiting activation.") if(CURRENTLY_ACTIVE) - to_chat(user, "It is labeled '[service_label]' and appears to be active.") + LAZYADD(., "It is labeled '[service_label]' and appears to be active.") if(HAS_BEEN_ACTIVATED) - to_chat(user, "It is labeled '[service_label]' and appears to be permanently disabled.") + LAZYADD(., "It is labeled '[service_label]' and appears to be permanently disabled.") /obj/item/uplink_service/attack_self(var/mob/user) if(state != AWAITING_ACTIVATION) diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm index 5ed21617c4cf..97db7fad4614 100644 --- a/code/datums/uplink/uplink_items.dm +++ b/code/datums/uplink/uplink_items.dm @@ -30,11 +30,13 @@ var/global/datum/uplink/uplink = new() var/name var/desc var/item_cost = 0 - var/list/antag_costs = list() // Allows specific antag roles to purchase at a different cost - var/datum/uplink_category/category // Item category - /// Antag roles this item is displayed to. If empty, display to all. If it includes 'Exclude", anybody except this role can view it - /// Examples: list(/decl/special_role/someone); list("Exclude", /decl/special_role/whoever); etc + /// Allows specific antag roles to purchase at a different cost + var/list/antag_costs = list() + var/datum/uplink_category/category + /// Antag roles this item is displayed to. If empty, display to all. var/list/decl/special_role/antag_roles + /// Antag roles this item will not be displayed to. If empty, display to all. + var/list/decl/special_role/exclude_antag_roles /datum/uplink_item/item var/path = null @@ -77,13 +79,18 @@ var/global/datum/uplink/uplink = new() if(!U.uplink_owner) return 0 - for(var/antag_role in antag_roles) - if(!ispath(antag_role, /decl/special_role)) - continue - var/decl/special_role/antag = GET_DECL(antag_role) - if(antag.is_antagonist(U.uplink_owner)) - return !("Exclude" in antag_roles) - return ("Exclude" in antag_roles) + if(LAZYLEN(exclude_antag_roles)) + for(var/antag_role in exclude_antag_roles) + var/decl/special_role/antag = GET_DECL(antag_role) + if(antag.is_antagonist(U.uplink_owner)) + return FALSE + if(LAZYLEN(antag_roles)) + for(var/antag_role in antag_roles) + var/decl/special_role/antag = GET_DECL(antag_role) + if(antag.is_antagonist(U.uplink_owner)) + return TRUE + return FALSE + return TRUE /datum/uplink_item/proc/cost(var/telecrystals, obj/item/uplink/U) . = item_cost diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index ea8bcbc016f7..5d2b817165d4 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -182,7 +182,7 @@ var/global/list/wireColourNames = list("darkred" = "dark red") to_chat(L, "You need a remote signaller!") else if(href_list["examine"]) var/colour = href_list["examine"] - to_chat(usr, examine(GetIndex(colour), usr)) + to_chat(usr, examine_wire(GetIndex(colour), usr)) // Update Window Interact(usr) @@ -203,7 +203,7 @@ var/global/list/wireColourNames = list("darkred" = "dark red") /datum/wires/proc/UpdatePulsed(var/index) return -/datum/wires/proc/examine(index, mob/user) +/datum/wires/proc/examine_wire(index, mob/user) . = "You aren't sure what this wire does." var/datum/wire_description/wd = get_description(index) diff --git a/code/game/area/area_power.dm b/code/game/area/area_power.dm index 1995fc374d17..c04f38bd0d99 100644 --- a/code/game/area/area_power.dm +++ b/code/game/area/area_power.dm @@ -4,11 +4,12 @@ #define ENVIRON 3 */ -/area/proc/powered(var/chan) // return true if the area has power to given channel +/// return true if the area has power to given channel +/area/proc/powered(var/chan) if(!requires_power) - return 1 + return TRUE if(always_unpowered) - return 0 + return FALSE switch(chan) if(EQUIP) return power_equip @@ -19,7 +20,7 @@ if(LOCAL) return FALSE // if you're running on local power, don't come begging for help here. - return 0 + return FALSE // called when power status changes /area/proc/power_change() diff --git a/code/game/area/area_space.dm b/code/game/area/area_space.dm index c4bc55dbe315..5c2f8c444715 100644 --- a/code/game/area/area_space.dm +++ b/code/game/area/area_space.dm @@ -3,8 +3,8 @@ var/global/area/space_area /area/space name = "\improper Space" icon_state = "space" - requires_power = 1 - always_unpowered = 1 + requires_power = TRUE + always_unpowered = TRUE dynamic_lighting = TRUE power_light = 0 power_equip = 0 diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 443f0046748c..b6e467b64dac 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -4,7 +4,7 @@ var/global/list/areas = list() /area - level = null + level = 0 name = "Unknown" icon = 'icons/turf/areas.dmi' icon_state = "unknown" @@ -20,8 +20,10 @@ var/global/list/areas = list() var/interior_ambient_light_modifier // If set, will apply ambient light of this colour to turfs under a ceiling. - var/proper_name /// Automatically set by SetName and Initialize; cached result of strip_improper(name). - var/holomap_color // Color of this area on the holomap. Must be a hex color (as string) or null. + /// Automatically set by SetName and Initialize; cached result of strip_improper(name). + var/tmp/proper_name + /// Color of this area on the holomap. Must be a hex color (as string) or null. + var/holomap_color var/fire var/party diff --git a/code/game/atoms.dm b/code/game/atoms.dm index a9fc6994d811..fb3c08684708 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -24,7 +24,7 @@ /// (DICTIONARY) A lazy map. The `key` is a MD5 player name and the `value` is the blood type. var/list/blood_DNA /// (BOOL) If this atom was bloodied before. - var/was_bloodied + var/was_bloodied = FALSE /// (COLOR) The color of the blood shown on blood overlays. var/blood_color /// (FALSE|DEFINES) How this atom is interacting with UV light. See misc.dm @@ -272,7 +272,7 @@ Overrides should either return the result of ..() or `TRUE` if not calling it. Calls to ..() should generally not supply any arguments and instead rely on BYOND's automatic argument passing. There is no need to check the return - value of ..(), this is only done by the calling `/examinate()` proc to validate + value of ..(), this is only done by the calling `/examine_verb()` proc to validate the call chain. - `user`: The mob examining this atom @@ -282,16 +282,39 @@ - Return: `TRUE` when the call chain is valid, otherwise `FALSE` - Events: `atom_examined` */ -/atom/proc/examine(mob/user, distance, infix = "", suffix = "") +/atom/proc/examined_by(mob/user, distance, infix, suffix) + var/list/examine_lines + for(var/add_lines in list(get_examine_header(user, distance, infix, suffix), get_examine_strings(user, distance, infix, suffix), get_examine_hints(user, distance, infix, suffix))) + if(islist(add_lines) && LAZYLEN(add_lines)) + LAZYADD(examine_lines, add_lines) + if(LAZYLEN(examine_lines)) + to_chat(user, jointext(examine_lines, "
")) + RAISE_EVENT(/decl/observ/atom_examined, src, user, distance) + return TRUE + +// Name, displayed at the top. +/atom/proc/get_examine_header(mob/user, distance, infix, suffix) + SHOULD_CALL_PARENT(TRUE) + var/article_name = name + if(is_improper(name)) // no 'that's bloody oily slimy Bob', that's just Bob + //This reformats names to get a/an properly working on item descriptions when they are bloody or coated in reagents. + var/examine_prefix = get_examine_prefix() + if(examine_prefix) + examine_prefix += " " // add a space to the end to be polite + article_name = ADD_ARTICLE_GENDER("[examine_prefix][name]", gender) + return list("[html_icon(src)] That's [article_name][infix][get_examine_punctuation()] [suffix]") + +// Main body of examine, displayed after the header and before hints. +/atom/proc/get_examine_strings(mob/user, distance, infix, suffix) SHOULD_CALL_PARENT(TRUE) - //This reformats names to get a/an properly working on item descriptions when they are bloody or coated in reagents. - var/examine_prefix = get_examine_prefix() - if(examine_prefix) - examine_prefix += " " // add a space to the end to be polite - var/composed_name = ADD_ARTICLE_GENDER("[examine_prefix][name]", gender) + . = list() + if(desc) + . += desc - to_chat(user, "[html_icon(src)] That's [composed_name][infix][get_examine_punctuation()] [suffix]") - to_chat(user, desc) +// Addendum to examine, displayed at the bottom +/atom/proc/get_examine_hints(mob/user, distance, infix, suffix) + + SHOULD_CALL_PARENT(TRUE) var/list/alt_interactions = get_alt_interactions(user) if(LAZYLEN(alt_interactions)) @@ -301,11 +324,14 @@ if(interaction.examine_desc && (interaction.always_show_on_examine || interaction.is_possible(src, user, user?.get_active_held_item()))) interaction_strings += emote_replace_target_tokens(interaction.examine_desc, src) if(length(interaction_strings)) - to_chat(user, SPAN_INFO("Alt-click on \the [src] to [english_list(interaction_strings, and_text = " or ")].")) + LAZYADD(., SPAN_INFO("Alt-click on \the [src] to [english_list(interaction_strings, and_text = " or ")].")) - RAISE_EVENT(/decl/observ/atom_examined, src, user, distance) - return TRUE + var/decl/interaction_handler/handler = get_quick_interaction_handler(user) + if(handler) + LAZYADD(., SPAN_NOTICE("Ctrl-click \the [src] while in your inventory to [lowertext(handler.name)].")) + if(user?.get_preference_value(/datum/client_preference/inquisitive_examine) == PREF_ON && user.can_use_codex() && SScodex.get_codex_entry(get_codex_value(user))) + LAZYADD(., SPAN_NOTICE("The codex has relevant information available.")) /** Relay movement to this atom. @@ -790,7 +816,7 @@ M.take_damage(damage) else to_chat(M, SPAN_DANGER("You land heavily on your [affecting.name]!")) - affecting.take_external_damage(damage, 0) + affecting.take_damage(damage) if(affecting.parent) affecting.parent.add_autopsy_data("Misadventure", damage) @@ -842,7 +868,7 @@ if(href_list["look_at_me"] && istype(user)) var/turf/T = get_turf(src) if(T.CanUseTopic(user, global.view_topic_state) != STATUS_CLOSE) - user.examinate(src) + user.examine_verb(src) return TOPIC_HANDLED . = ..() diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 918c145cce6b..73011d930265 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -543,7 +543,7 @@ var/burn_damage = rand(my_size, round(my_size * 1.5)) var/obj/item/organ/external/organ = check_organ && holder.get_organ(check_organ) if(istype(organ)) - organ.take_external_damage(0, burn_damage) + organ.take_damage(burn_damage, BURN) else holder.take_damage(burn_damage, BURN) if(held_slot in holder.get_held_item_slots()) diff --git a/code/game/atoms_movable_interactions.dm b/code/game/atoms_movable_interactions.dm index 8cf50ef5bc47..81905ffd4920 100644 --- a/code/game/atoms_movable_interactions.dm +++ b/code/game/atoms_movable_interactions.dm @@ -17,7 +17,7 @@ examine_desc = "examine $TARGET_THEM$" /decl/interaction_handler/look/invoked(atom/target, mob/user, obj/item/prop) - target.examine(user, get_dist(user, target)) + target.examined_by(user, get_dist(user, target)) /decl/interaction_handler/grab name = "Grab" diff --git a/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm b/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm index aed8aa4e95eb..77f579113835 100644 --- a/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm +++ b/code/game/gamemodes/endgame/ftl_jump/ftl_jump.dm @@ -114,9 +114,9 @@ /obj/effect/bluegoast/proc/mirror_dir(var/atom/movable/am, var/old_dir, var/new_dir) set_dir(global.reverse_dir[new_dir]) -/obj/effect/bluegoast/examine() +/obj/effect/bluegoast/examined_by(mob/user, distance, infix, suffix) SHOULD_CALL_PARENT(FALSE) - return daddy.examine(arglist(args)) + return daddy.examined_by(user, distance, infix, suffix) /obj/effect/bluegoast/proc/blueswitch() var/mob/living/human/H diff --git a/code/game/machinery/CableLayer.dm b/code/game/machinery/CableLayer.dm index 55054da3de1e..e9da96a9a367 100644 --- a/code/game/machinery/CableLayer.dm +++ b/code/game/machinery/CableLayer.dm @@ -15,7 +15,7 @@ cable.amount = 100 /obj/machinery/cablelayer/Move(new_turf,M_Dir) - ..() + . = ..() layCable(new_turf,M_Dir) /obj/machinery/cablelayer/physical_attack_hand(mob/user) @@ -51,9 +51,9 @@ return TRUE return ..() -/obj/machinery/cablelayer/examine(mob/user) +/obj/machinery/cablelayer/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "\The [src]'s cable reel has [cable.amount] length\s left.") + . += "\The [src]'s cable reel has [cable.amount] length\s left." /obj/machinery/cablelayer/proc/load_cable(var/obj/item/stack/cable_coil/CC) if(istype(CC) && CC.amount) @@ -87,7 +87,7 @@ if(istype(new_turf, /turf/floor)) var/turf/floor/T = new_turf if(!T.is_plating()) - T.set_flooring(null, place_product = !T.is_floor_damaged()) + T.clear_flooring(place_product = !T.is_floor_damaged()) return new_turf.is_plating() /obj/machinery/cablelayer/proc/layCable(var/turf/new_turf,var/M_Dir) diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index 0c9c319aacfe..37f33f20daca 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -24,9 +24,9 @@ computer.table = src break -/obj/machinery/optable/examine(mob/user) +/obj/machinery/optable/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, SPAN_NOTICE("The neural suppressors are switched [suppressing ? "on" : "off"].")) + . += SPAN_NOTICE("The neural suppressors are switched [suppressing ? "on" : "off"].") /obj/machinery/optable/grab_attack(obj/item/grab/grab, mob/user) if(isliving(grab.affecting) && check_table(grab.affecting)) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 0efbfce6cd4d..24e826c1739b 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -106,21 +106,21 @@ beaker = new /obj/item/chems/glass/beaker/large(src) update_icon() -/obj/machinery/sleeper/examine(mob/user, distance) +/obj/machinery/sleeper/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (distance <= 1) if(beaker) - to_chat(user, SPAN_NOTICE("It is loaded with a beaker.")) + . += SPAN_NOTICE("It is loaded with \a [beaker].") if(occupant) - occupant.examine(arglist(args)) + . += occupant.get_examine_strings(user, distance, infix, suffix) if(emagged && user.skill_check(SKILL_MEDICAL, SKILL_EXPERT)) - to_chat(user, SPAN_NOTICE("The chemical input system looks like it has been tampered with.")) + . += SPAN_NOTICE("The chemical input system looks like it has been tampered with.") if(length(loaded_canisters)) - to_chat(user, SPAN_NOTICE("There are [length(loaded_canisters)] chemical canister\s loaded:")) + . += SPAN_NOTICE("There are [length(loaded_canisters)] chemical canister\s loaded:") for(var/thing in loaded_canisters) - to_chat(user, SPAN_NOTICE("- \The [thing]")) + . += SPAN_NOTICE("- \The [thing]") else - to_chat(user, SPAN_NOTICE("There are no chemical canisters loaded.")) + . += SPAN_NOTICE("There are no chemical canisters loaded.") /obj/machinery/sleeper/proc/has_room_in_beaker() return beaker && beaker.reagents.total_volume < beaker.reagents.maximum_volume diff --git a/code/game/machinery/_machines_base/machine_construction/airlock.dm b/code/game/machinery/_machines_base/machine_construction/airlock.dm index 835402c5484b..27f29d03070d 100644 --- a/code/game/machinery/_machines_base/machine_construction/airlock.dm +++ b/code/game/machinery/_machines_base/machine_construction/airlock.dm @@ -21,7 +21,8 @@ var/obj/item/part_replacer/replacer = I if(replacer.remote_interaction) machine.part_replacement(user, replacer) - machine.display_parts(user) + for(var/line in machine.get_part_info_strings(user)) + to_chat(user, line) return TRUE return FALSE diff --git a/code/game/machinery/_machines_base/machine_construction/default.dm b/code/game/machinery/_machines_base/machine_construction/default.dm index c178a598eb4a..928954909b4e 100644 --- a/code/game/machinery/_machines_base/machine_construction/default.dm +++ b/code/game/machinery/_machines_base/machine_construction/default.dm @@ -35,7 +35,8 @@ var/obj/item/part_replacer/replacer = I if(replacer.remote_interaction) machine.part_replacement(user, replacer) - machine.display_parts(user) + for(var/line in machine.get_part_info_strings(user)) + to_chat(user, line) return TRUE return FALSE diff --git a/code/game/machinery/_machines_base/machine_construction/wall_frame.dm b/code/game/machinery/_machines_base/machine_construction/wall_frame.dm index e050c23ff8f3..9c01dcc5db7c 100644 --- a/code/game/machinery/_machines_base/machine_construction/wall_frame.dm +++ b/code/game/machinery/_machines_base/machine_construction/wall_frame.dm @@ -32,7 +32,8 @@ var/obj/item/part_replacer/replacer = I if(replacer.remote_interaction) machine.part_replacement(user, replacer) - machine.display_parts(user) + for(var/line in machine.get_part_info_strings(user)) + to_chat(user, line) return TRUE return down_interaction(I, user, machine) diff --git a/code/game/machinery/_machines_base/machinery.dm b/code/game/machinery/_machines_base/machinery.dm index cff48f06503d..c57624ee3c9e 100644 --- a/code/game/machinery/_machines_base/machinery.dm +++ b/code/game/machinery/_machines_base/machinery.dm @@ -91,37 +91,59 @@ Class Procs: var/stat = 0 var/waterproof = TRUE var/reason_broken = 0 - var/stat_immune = NOSCREEN | NOINPUT // The machine will never set stat to these flags. - var/emagged = 0 - var/datum/wires/wires //wire datum, if any. If you place a type path, it will be autoinitialized. + /// The machine will never set stat to these flags. + var/stat_immune = NOSCREEN | NOINPUT + var/emagged = FALSE + /// wire datum, if any. If you place a type path, it will be autoinitialized. + var/datum/wires/wires var/use_power = POWER_USE_IDLE //0 = dont run the auto //1 = run auto, use idle //2 = run auto, use active var/idle_power_usage = 0 var/active_power_usage = 0 - var/power_channel = EQUIP //EQUIP, ENVIRON or LIGHT - var/power_init_complete = FALSE // Helps with bookkeeping when initializing atoms. Don't modify. - var/list/component_parts //List of component instances. Expected type: /obj/item/stock_parts - var/list/uncreated_component_parts = list(/obj/item/stock_parts/power/apc) //List of component paths which have delayed init. Indeces = number of components. - var/list/maximum_component_parts = list(/obj/item/stock_parts = 10) //null - no max. list(type part = number max). + /// Valid values: EQUIP, ENVIRON, LIGHT. If it should use a direct terminal connection instead, use LOCAL. + var/power_channel = EQUIP + /// Helps with bookkeeping when initializing atoms. Don't modify. + var/power_init_complete = FALSE + /// List of component instances. Expected type: /obj/item/stock_parts + var/list/component_parts + /// List of component paths which have lazy init (created when needed). Keys are part typepaths, values are the number of components. + var/list/uncreated_component_parts = list(/obj/item/stock_parts/power/apc) + /// null - no max. list(type part = number max). + var/list/maximum_component_parts = list(/obj/item/stock_parts = 10) var/uid - var/panel_open = 0 + var/panel_open = FALSE var/static/gl_uid = 1 - var/interact_offline = 0 // Can the machine be interacted with while de-powered. - var/clicksound // sound played on succesful interface use by a carbon lifeform - var/clickvol = 40 // sound played on succesful interface use - var/core_skill = SKILL_DEVICES //The skill used for skill checks for this machine (mostly so subtypes can use different skills). - var/operator_skill // Machines often do all operations on Process(). This caches the user's skill while the operations are running. - var/base_type // For mapped buildable types, set this to be the base type actually buildable. - var/id_tag // This generic variable is to be used by mappers to give related machines a string key. In principle used by radio stock parts. - var/frame_type = /obj/machinery/constructable_frame/machine_frame/deconstruct // what is created when the machine is dismantled. + /// Can the machine be interacted with while de-powered. + var/interact_offline = FALSE + /// sound played on successful interface use + var/clicksound + /// volume of sound played on successful interface use + var/clickvol = 40 + ///The skill used for skill checks for this machine (mostly so subtypes can use different skills). + var/core_skill = SKILL_DEVICES + /// Machines often do all operations on Process(). This caches the user's skill while the operations are running. + var/operator_skill + /// For mapped buildable types, set this to be the base type actually buildable. + var/base_type + /// This generic variable is to be used by mappers to give related machines a string key. In principle used by radio stock parts. + var/id_tag + /// what is created when the machine is dismantled. + var/frame_type = /obj/machinery/constructable_frame/machine_frame/deconstruct var/required_interaction_dexterity = DEXTERITY_KEYBOARDS - var/list/processing_parts // Component parts queued for processing by the machine. Expected type: /obj/item/stock_parts - var/processing_flags // What is being processed + /// Component parts queued for processing by the machine. Expected type: /obj/item/stock_parts + var/list/processing_parts + /// Controls whether components, the machine itself, or both run their processing in Process(). + var/processing_flags - var/list/initial_access // Used to setup network locks on machinery at populate_parts. + /// Used to setup network locks on machinery at populate_parts. + /// list(a, b) means access requires either A or B. + /// list(list(a, b)) means access requires A and B. + /// These can be combined, e.g. list(a, list(b, c)) requires either a, or both b and c. + /// Null means no access requirement. + var/list/initial_access /obj/machinery/Initialize(mapload, d=0, populate_parts = TRUE) . = ..() @@ -403,45 +425,49 @@ Class Procs: /datum/proc/remove_visual(mob/M) return -/obj/machinery/proc/display_parts(mob/user) - to_chat(user, "Following parts detected in the machine:") +/obj/machinery/proc/get_part_info_strings(mob/user) + . = list() + . += SPAN_NOTICE("The following parts are detected in \the [src]:") for(var/obj/item/C in component_parts) - var/line = " [C.name]" + var/line = SPAN_NOTICE(" [C.name]") if(!C.current_health) - line = " [C.name] (destroyed)" + line = SPAN_WARNING(" [C.name] (destroyed)") else if(C.get_percent_health() < 75) - line = " [C.name] (damaged)" - to_chat(user, line) + line = SPAN_NOTICE(" [C.name] (damaged)") + . += line for(var/path in uncreated_component_parts) var/obj/item/thing = path - to_chat(user, " [initial(thing.name)] ([uncreated_component_parts[path] || 1])") + . += SPAN_NOTICE(" [initial(thing.name)] ([uncreated_component_parts[path] || 1])") -/obj/machinery/examine(mob/user) +/obj/machinery/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(component_parts && (hasHUD(user, HUD_SCIENCE) || (construct_state && construct_state.visible_components))) - display_parts(user) + . += get_part_info_strings(user) if(stat & NOSCREEN) - to_chat(user, "It is missing a screen, making it hard to interact with.") + . += SPAN_WARNING("It is missing a screen, making it hard to interact with.") else if(stat & NOINPUT) - to_chat(user, "It is missing any input device.") + . += SPAN_WARNING("It is missing any input device.") if((stat & NOPOWER)) if(interact_offline) - to_chat(user, "It is not receiving power.") + . += SPAN_WARNING("It is not receiving power.") else - to_chat(user, "It is not receiving power, making it hard to interact with.") + . += SPAN_WARNING("It is not receiving power, making it hard to interact with.") + + if(construct_state?.mechanics_info()) + . += SPAN_NOTICE("It can be manipulated using tools.") - if(construct_state && construct_state.mechanics_info()) - to_chat(user, "It can be manipulated using tools.") var/list/missing = missing_parts() if(missing) var/list/parts = list() for(var/type in missing) var/obj/item/fake_thing = type parts += "[num2text(missing[type])] [initial(fake_thing.name)]" - to_chat(user, "\The [src] is missing [english_list(parts)], rendering it inoperable.") + . += SPAN_WARNING("\The [src] is missing [english_list(parts)], rendering it inoperable.") for(var/obj/item/stock_parts/part in component_parts) - part.on_machine_examined(user) + var/part_strings = part.on_machine_examined(user) + if(LAZYLEN(part_strings)) + . += part_strings // This is really pretty crap and should be overridden for specific machines. /obj/machinery/fluid_act(var/datum/reagents/fluids) diff --git a/code/game/machinery/_machines_base/machinery_components.dm b/code/game/machinery/_machines_base/machinery_components.dm index d775b0e80706..032e31d058a3 100644 --- a/code/game/machinery/_machines_base/machinery_components.dm +++ b/code/game/machinery/_machines_base/machinery_components.dm @@ -246,7 +246,7 @@ var/global/list/machine_path_to_circuit_type to_chat(user, SPAN_WARNING("The insertion point for \the [component] is inaccessible!")) return 0 for(var/path in maximum_component_parts) - if(istype(component, path) && (number_of_components(path) == maximum_component_parts[path])) + if(istype(component, path) && (number_of_components(path) >= maximum_component_parts[path])) to_chat(user, SPAN_WARNING("There are too many parts of this type installed in \the [src] already!")) return 0 return 1 @@ -335,6 +335,7 @@ Standard helpers for users interacting with machinery parts. return TRUE remove_part_and_give_to_user(path, user) return TRUE + return FALSE /obj/machinery/proc/remove_part_and_give_to_user(var/path, mob/user) var/obj/item/stock_parts/part = uninstall_component(get_component_of_type(path, TRUE)) diff --git a/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm b/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm index 7ce4792bc9fa..c8fdd39f53bd 100644 --- a/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm +++ b/code/game/machinery/_machines_base/stock_parts/_stock_parts.dm @@ -91,17 +91,17 @@ /obj/item/stock_parts/proc/is_functional() return (!can_take_damage()) || (current_health > 0) -/obj/item/stock_parts/examine(mob/user) +/obj/item/stock_parts/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(can_take_damage()) if(!is_functional()) - to_chat(user, SPAN_WARNING("It is completely broken.")) + . += SPAN_WARNING("It is completely broken.") else if(get_percent_health() < 50) - to_chat(user, SPAN_WARNING("It is heavily damaged.")) + . += SPAN_WARNING("It is heavily damaged.") else if(get_percent_health() < 75) - to_chat(user, SPAN_NOTICE("It is showing signs of damage.")) + . += SPAN_NOTICE("It is showing signs of damage.") else if(is_damaged()) - to_chat(user, SPAN_NOTICE("It is showing some wear and tear.")) + . += SPAN_NOTICE("It is showing some wear and tear.") //Machines handle damaging for us, so don't do it twice /obj/item/stock_parts/explosion_act(severity) @@ -118,4 +118,5 @@ . = list() /// A stub for showing messages based on part status when a machine is examined. -/obj/item/stock_parts/proc/on_machine_examined(mob/user) \ No newline at end of file +/obj/item/stock_parts/proc/on_machine_examined(mob/user) + SHOULD_CALL_PARENT(TRUE) diff --git a/code/game/machinery/_machines_base/stock_parts/access_lock.dm b/code/game/machinery/_machines_base/stock_parts/access_lock.dm index f5ae7df7558d..2f4935ed6731 100644 --- a/code/game/machinery/_machines_base/stock_parts/access_lock.dm +++ b/code/game/machinery/_machines_base/stock_parts/access_lock.dm @@ -47,12 +47,12 @@ . = ..() locked = FALSE -/obj/item/stock_parts/access_lock/examine(mob/user) +/obj/item/stock_parts/access_lock/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(locked) - to_chat(user, "The lock is engaged.") + . += "The lock is engaged." if(emagged && user.skill_check_multiple(list(SKILL_FORENSICS = SKILL_EXPERT, SKILL_COMPUTER = SKILL_EXPERT))) - to_chat(user, SPAN_WARNING("On close inspection, there is something odd about the interface. You suspect it may have been tampered with.")) + . += SPAN_WARNING("On close inspection, there is something odd about the interface. You suspect it may have been tampered with.") /obj/item/stock_parts/access_lock/attackby(obj/item/W, mob/user) var/obj/machinery/machine = loc diff --git a/code/game/machinery/_machines_base/stock_parts/item_holder.dm b/code/game/machinery/_machines_base/stock_parts/item_holder.dm index d6404088a4c5..707acd2dbd00 100644 --- a/code/game/machinery/_machines_base/stock_parts/item_holder.dm +++ b/code/game/machinery/_machines_base/stock_parts/item_holder.dm @@ -43,8 +43,9 @@ return /obj/item/stock_parts/item_holder/on_machine_examined(mob/user) + . = ..() if(is_item_inserted()) - to_chat(user, SPAN_INFO("It has \a [get_inserted()] in \the [src].")) + LAZYADD(., SPAN_INFO("It has \a [get_inserted()] in \the [src].")) ///Handle putting the object in the component's contents. Doesn't trigger any callbacks, or messages. /obj/item/stock_parts/item_holder/proc/set_inserted(var/obj/O) diff --git a/code/game/machinery/_machines_base/stock_parts/network_lock.dm b/code/game/machinery/_machines_base/stock_parts/network_lock.dm index 540984384085..d5d6e187fdee 100644 --- a/code/game/machinery/_machines_base/stock_parts/network_lock.dm +++ b/code/game/machinery/_machines_base/stock_parts/network_lock.dm @@ -70,10 +70,10 @@ return list("NO_PERMISSIONS_DENY_ALL") return list() -/obj/item/stock_parts/network_receiver/network_lock/examine(mob/user) +/obj/item/stock_parts/network_receiver/network_lock/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(emagged && user.skill_check_multiple(list(SKILL_FORENSICS = SKILL_EXPERT, SKILL_COMPUTER = SKILL_EXPERT))) - to_chat(user, SPAN_WARNING("On close inspection, there is something odd about the interface. You suspect it may have been tampered with.")) + . += SPAN_WARNING("On closer inspection, there is something odd about the interface. You suspect it may have been tampered with.") /obj/item/stock_parts/network_receiver/network_lock/attackby(obj/item/W, mob/user) . = ..() diff --git a/code/game/machinery/_machines_base/stock_parts/power/power.dm b/code/game/machinery/_machines_base/stock_parts/power/power.dm index 7e8870ab3fc4..33082d485f73 100644 --- a/code/game/machinery/_machines_base/stock_parts/power/power.dm +++ b/code/game/machinery/_machines_base/stock_parts/power/power.dm @@ -28,7 +28,7 @@ // Doesn't actually do it. /obj/item/stock_parts/power/proc/can_use_power_oneoff(var/obj/machinery/machine, var/amount, var/channel) - return 0 + return FALSE // A request for the amount of power on the given channel. Returns the amount of power which could be provided. /obj/item/stock_parts/power/proc/use_power_oneoff(var/obj/machinery/machine, var/amount, var/channel) diff --git a/code/game/machinery/_machines_base/stock_parts/power/terminal.dm b/code/game/machinery/_machines_base/stock_parts/power/terminal.dm index 732d90839c9f..79cdd75518dd 100644 --- a/code/game/machinery/_machines_base/stock_parts/power/terminal.dm +++ b/code/game/machinery/_machines_base/stock_parts/power/terminal.dm @@ -154,7 +154,7 @@ return FALSE /obj/item/stock_parts/power/terminal/get_source_info() - . = "The machine can receive power by direct connection to the powernet. " + . = list("The machine can receive power by direct connection to the powernet.") if(terminal) if(!terminal.get_powernet()) . += "The power terminal must be connected to the powernet using additional cables." diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 11d4e5c9b63b..4096611b87e7 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -850,11 +850,11 @@ FIRE ALARM var/sound_id var/datum/sound_token/sound_token -/obj/machinery/firealarm/examine(mob/user) +/obj/machinery/firealarm/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(isContactLevel(loc.z)) var/decl/security_state/security_state = GET_DECL(global.using_map.security_state) - to_chat(user, "The current alert level is [security_state.current_security_level.name].") + . += "The current alert level is [security_state.current_security_level.name]." /obj/machinery/firealarm/on_update_icon() cut_overlays() diff --git a/code/game/machinery/atmoalter/meter.dm b/code/game/machinery/atmoalter/meter.dm index 3b0ef569f603..cabf2a5d56e2 100644 --- a/code/game/machinery/atmoalter/meter.dm +++ b/code/game/machinery/atmoalter/meter.dm @@ -78,23 +78,23 @@ else icon_state = "meter4" -/obj/machinery/meter/examine(mob/user, distance) +/obj/machinery/meter/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 3 && !(isAI(user) || isghost(user))) - to_chat(user, "You are too far away to read it.") + . += SPAN_WARNING("You are too far away to read it.") else if(stat & (NOPOWER|BROKEN)) - to_chat(user, "The display is off.") + . += SPAN_WARNING("The display is off.") else if(src.target) var/datum/gas_mixture/environment = target.return_air() if(environment) - to_chat(user, "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)]K ([round(environment.temperature-T0C,0.01)]°C).") + . += "The pressure gauge reads [round(environment.return_pressure(), 0.01)] kPa; [round(environment.temperature,0.01)]K ([round(environment.temperature-T0C,0.01)]°C)." else - to_chat(user, "The sensor error light is blinking.") + . += "The sensor error light is blinking." else - to_chat(user, "The connect error light is blinking.") + . += "The connect error light is blinking." // turf meter -- prioritizes turfs over pipes for target acquisition diff --git a/code/game/machinery/bodyscanner.dm b/code/game/machinery/bodyscanner.dm index 5658432aa1fa..9ae5ed360527 100644 --- a/code/game/machinery/bodyscanner.dm +++ b/code/game/machinery/bodyscanner.dm @@ -20,10 +20,10 @@ for(var/obj/O in get_contained_external_atoms()) O.dropInto(loc) -/obj/machinery/bodyscanner/examine(mob/user) +/obj/machinery/bodyscanner/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (occupant && user.Adjacent(src)) - occupant.examine(arglist(args)) + occupant.get_examine_strings(user, distance, infix, suffix) /obj/machinery/bodyscanner/relaymove(mob/user) ..() diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 3262bf5a4230..98bac3c1fd33 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -46,10 +46,10 @@ var/affected_by_emp_until = 0 -/obj/machinery/camera/examine(mob/user) +/obj/machinery/camera/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(stat & BROKEN) - to_chat(user, SPAN_WARNING("It is completely demolished.")) + . += SPAN_WARNING("It is completely demolished.") /obj/machinery/camera/apply_visual(mob/living/human/M) if(!M.client || !istype(M)) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index dac2d458472a..5a27cca96219 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -32,13 +32,13 @@ else overlays.Cut() -/obj/machinery/cell_charger/examine(var/mob/user, var/distance) +/obj/machinery/cell_charger/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 5) var/obj/item/cell/cell = get_cell() - to_chat(user, "There's [cell ? "a" : "no"] cell in the charger.") + . += "There's [cell ? "a" : "no"] cell in the charger." if(cell) - to_chat(user, "Current charge: [cell.charge].") + . += "Current charge: [cell.charge]." /obj/machinery/cell_charger/component_stat_change(obj/item/stock_parts/part, old_stat, flag) . = ..() diff --git a/code/game/machinery/computer/arcade_orion.dm b/code/game/machinery/computer/arcade_orion.dm index a076d6efc4df..1a0469832b59 100644 --- a/code/game/machinery/computer/arcade_orion.dm +++ b/code/game/machinery/computer/arcade_orion.dm @@ -487,14 +487,11 @@ ) var/active = 0 //if the ship is on -/obj/item/orion_ship/examine(mob/user) +/obj/item/orion_ship/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(!(in_range(user, src))) - return - if(!active) - to_chat(user, "There's a little switch on the bottom. It's flipped down.") - else - to_chat(user, "There's a little switch on the bottom. It's flipped up.") + if(in_range(user, src)) + . += SPAN_NOTICE("There's a little switch on the bottom. It's flipped [active ? "up" : "down"].") + /obj/item/orion_ship/attack_self(mob/user) if(active) return diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index d10ebf8b7763..82675b7f6f9e 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -83,11 +83,6 @@ I.appearance_flags |= RESET_COLOR return I -/obj/machinery/computer/proc/decode(text) - // Adds line breaks - text = replacetext(text, "\n", "
") - return text - /obj/machinery/computer/dismantle(mob/user) if(stat & BROKEN) to_chat(user, "The broken glass falls out.") diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index af53c701163e..6b52228b8ec4 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -15,12 +15,12 @@ /obj/item/card/id/guest/GetAccess() return temp_access -/obj/item/card/id/guest/examine(mob/user) +/obj/item/card/id/guest/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if (!expired) - to_chat(user, SPAN_NOTICE("This pass expires at [worldtime2stationtime(expiration_time)].")) + if (expired) + . += SPAN_WARNING("It expired at [worldtime2stationtime(expiration_time)].") else - to_chat(user, SPAN_WARNING("It expired at [worldtime2stationtime(expiration_time)].")) + . += SPAN_NOTICE("This pass expires at [worldtime2stationtime(expiration_time)].") /obj/item/card/id/guest/read() if (expired) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index bfb361cfc83e..1892189e038e 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -294,10 +294,10 @@ return TRUE -/obj/machinery/cryopod/examine(mob/user) +/obj/machinery/cryopod/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (occupant && user.Adjacent(src)) - occupant.examine(arglist(args)) + . += occupant.get_examine_strings(user, distance, infix, suffix) //Lifted from Unity stasis.dm and refactored. /obj/machinery/cryopod/Process() diff --git a/code/game/machinery/dehumidifier.dm b/code/game/machinery/dehumidifier.dm index eaef14277b26..f5cfe0fc3318 100644 --- a/code/game/machinery/dehumidifier.dm +++ b/code/game/machinery/dehumidifier.dm @@ -34,15 +34,15 @@ if(panel_open) overlays.Add("dhum-open") -/obj/machinery/dehumidifier/examine(mob/user) +/obj/machinery/dehumidifier/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(.) - to_chat(user, "The dehumidifier is [active ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"].") + . += "The dehumidifier is [active ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"]." var/obj/item/cell/cell = get_cell() if(panel_open) - to_chat(user, "The power cell is [cell ? "installed" : "missing"].") + . += "The power cell is [cell ? "installed" : "missing"]." else - to_chat(user, "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%") + . += "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%" /obj/machinery/dehumidifier/proc/set_active(new_active) if(active != new_active) diff --git a/code/game/machinery/doors/_door.dm b/code/game/machinery/doors/_door.dm index e76fe49edfef..39628fe7da0b 100644 --- a/code/game/machinery/doors/_door.dm +++ b/code/game/machinery/doors/_door.dm @@ -377,24 +377,24 @@ return 0 . = round((1 - current_health/current_max_health) * damage) -/obj/machinery/door/examine(mob/user) +/obj/machinery/door/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(current_health <= 0) - to_chat(user, "\The [src] is broken!") + . += SPAN_DANGER("\The [src] is broken!") else var/current_max_health = get_max_health() if(current_health < current_max_health / 4) - to_chat(user, "\The [src] looks like it's about to break!") + . += SPAN_DANGER("\The [src] looks like it's about to break!") else if(current_health < current_max_health / 2) - to_chat(user, "\The [src] looks seriously damaged!") + . += SPAN_DANGER("\The [src] looks seriously damaged!") else if(current_health < current_max_health * 3/4) - to_chat(user, "\The [src] shows signs of damage!") + . += SPAN_WARNING("\The [src] shows signs of damage!") else if(current_health < current_max_health && get_dist(src, user) <= 1) - to_chat(user, "\The [src] has some minor scuffing.") + . += SPAN_WARNING("\The [src] has some minor scuffing.") var/mob/living/human/H = user if (emagged && istype(H) && (H.skill_check(SKILL_COMPUTER, SKILL_ADEPT) || H.skill_check(SKILL_ELECTRICAL, SKILL_ADEPT))) - to_chat(user, SPAN_WARNING("\The [src]'s control panel looks fried.")) + . += SPAN_WARNING("\The [src]'s control panel looks fried.") /obj/machinery/door/set_broken(new_state, cause) . = ..() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index b845e67c52b3..004f0fc02a44 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1119,15 +1119,15 @@ About the new airlock wires panel: ..() update_icon() -/obj/machinery/door/airlock/examine(mob/user) +/obj/machinery/door/airlock/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (lock_cut_state == BOLTS_EXPOSED) - to_chat(user, "The bolt cover has been cut open.") + . += SPAN_WARNING("The bolt cover has been cut open.") if (lock_cut_state == BOLTS_CUT) - to_chat(user, "The door bolts have been cut.") + . += SPAN_DANGER("The door bolts have been cut!") if(brace) - to_chat(user, "\The [brace] is installed on \the [src], preventing it from opening.") - to_chat(user, brace.examine_health()) + . += "\The [brace] is installed on \the [src], preventing it from opening." + . += brace.examine_health() /obj/machinery/door/airlock/autoname/Initialize() var/area/A = get_area(src) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index afaf24809e82..579e29e33112 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -134,14 +134,14 @@ . = ..() update_icon() -/obj/machinery/airlock_sensor/examine(mob/user, distance, infix, suffix) +/obj/machinery/airlock_sensor/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance < 2) - to_chat(user, SPAN_INFO("The pressure indicator reads '[pressure? round(pressure, 0.1) : 0] kPa'.")) + . += SPAN_INFO("The pressure indicator reads '[pressure? round(pressure, 0.1) : 0] kPa'.") if(master_cycling) - to_chat(user, SPAN_WARNING("It's warning that the master airlock is cycling!")) + . += SPAN_WARNING("It's warning that the master airlock is cycling!") if(alert) - to_chat(user, SPAN_WARNING("The low-pressure warning light is blinking!")) + . += SPAN_WARNING("The low-pressure warning light is blinking!") /obj/machinery/airlock_sensor/on_update_icon() cut_overlays() @@ -307,12 +307,12 @@ /obj/item/stock_parts/power/apc, ) -/obj/machinery/button/access/examine(mob/user, distance, infix, suffix) +/obj/machinery/button/access/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(distance < 2) - to_chat(user, SPAN_INFO("The button reads '[command]'.")) + if(distance <= 1) + . += SPAN_INFO("The button reads '[command]'.") if(master_cycling) - to_chat(user, SPAN_WARNING("It's warning that the master airlock is cycling!")) + . += SPAN_WARNING("It's warning that the master airlock is cycling!") /obj/machinery/button/access/on_update_icon() cut_overlays() diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm index 8b1112a39edf..1fc6bb6afe3a 100644 --- a/code/game/machinery/doors/blast_door.dm +++ b/code/game/machinery/doors/blast_door.dm @@ -57,10 +57,10 @@ implicit_material = GET_DECL(/decl/material/solid/metal/plasteel) . = ..() -/obj/machinery/door/blast/examine(mob/user) +/obj/machinery/door/blast/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if((stat & BROKEN)) - to_chat(user, "It's broken.") + . += SPAN_DANGER("It's broken.") // Proc: Bumped() // Parameters: 1 (AM - Atom that tried to walk through this object) diff --git a/code/game/machinery/doors/braces.dm b/code/game/machinery/doors/braces.dm index b55afe45495f..137c4cddb4f1 100644 --- a/code/game/machinery/doors/braces.dm +++ b/code/game/machinery/doors/braces.dm @@ -27,9 +27,9 @@ var/obj/item/stock_parts/circuitboard/airlock_electronics/brace/electronics -/obj/item/airlock_brace/examine(mob/user) +/obj/item/airlock_brace/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, examine_health()) + . += examine_health() // This is also called from airlock's examine, so it's a different proc to prevent code copypaste. /obj/item/airlock_brace/proc/examine_health() diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index d6e1916fb871..673d87c5bdde 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -95,8 +95,8 @@ LAZYADD(areas_added, A) /obj/machinery/door/firedoor/proc/unregister_area(area/A) - LAZYREMOVE(A.all_doors, src) - LAZYREMOVE(areas_added, A) + LAZYREMOVE(A.all_doors, src) + LAZYREMOVE(areas_added, A) /obj/machinery/door/firedoor/proc/update_area_registrations() var/list/new_areas = list() @@ -117,42 +117,43 @@ RETURN_TYPE(/decl/material) return GET_DECL(/decl/material/solid/metal/steel) -/obj/machinery/door/firedoor/examine(mob/user, distance) +/obj/machinery/door/firedoor/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 1 || !density) return if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF) - to_chat(user, "WARNING: Current pressure differential is [pdiff]kPa! Opening door may result in injury!") - to_chat(user, "Sensor readings:") + . += SPAN_DANGER("WARNING: Current pressure differential is [pdiff]kPa! Opening door may result in injury!") + + . += "Sensor readings:" for(var/index = 1; index <= tile_info.len; index++) - var/o = "  " + var/list/direction_strings = list("  ") switch(index) if(1) - o += "NORTH: " + direction_strings += "NORTH: " if(2) - o += "SOUTH: " + direction_strings += "SOUTH: " if(3) - o += "EAST: " + direction_strings += "EAST: " if(4) - o += "WEST: " + direction_strings += "WEST: " if(tile_info[index] == null) - o += "DATA UNAVAILABLE" - to_chat(user, o) + direction_strings += "DATA UNAVAILABLE" + . += JOINTEXT(direction_strings) continue var/celsius = convert_k2c(tile_info[index][1]) var/pressure = tile_info[index][2] - o += "" - o += "[celsius]°C " - o += "" - o += "[pressure]kPa" - to_chat(user, o) + direction_strings += "" + direction_strings += "[celsius]°C " + direction_strings += "" + direction_strings += "[pressure]kPa" + . += JOINTEXT(direction_strings) if(islist(users_to_open) && users_to_open.len) var/users_to_open_string = users_to_open[1] if(users_to_open.len >= 2) for(var/i = 2 to users_to_open.len) users_to_open_string += ", [users_to_open[i]]" - to_chat(user, "These people have opened \the [src] during an alert: [users_to_open_string].") + . += "These people have opened \the [src] during an alert: [users_to_open_string]." /obj/machinery/door/firedoor/Bumped(atom/AM) if(panel_open || operating) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index b70c00dbe1a0..eeef5d6c7deb 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -66,28 +66,28 @@ src.last_flash = world.time use_power_oneoff(1500) - for (var/mob/living/O in viewers(src, null)) - if (get_dist(src, O) > src.range) + for (var/mob/living/viewer in viewers(src, null)) + if (get_dist(src, viewer) > src.range) continue var/flash_time = strength - if(isliving(O)) - if(O.eyecheck() > FLASH_PROTECTION_NONE) + if(isliving(viewer)) + if(viewer.eyecheck() > FLASH_PROTECTION_NONE) continue - if(ishuman(O)) - var/mob/living/human/H = O + if(ishuman(viewer)) + var/mob/living/human/H = viewer flash_time = round(H.get_flash_mod() * flash_time) if(flash_time <= 0) return var/vision_organ_tag = H.get_vision_organ_tag() if(vision_organ_tag) - var/obj/item/organ/internal/E = GET_INTERNAL_ORGAN(H, vision_organ_tag) - if(E && E.is_bruised() && prob(E.damage + 50)) + var/obj/item/organ/internal/organ = GET_INTERNAL_ORGAN(H, vision_organ_tag) + if(organ && organ.is_bruised() && prob(organ.get_organ_damage() + 50)) H.flash_eyes() - E.damage += rand(1, 5) + organ.adjust_organ_damage(rand(1, 5)) - if(!O.is_blind()) - do_flash(O, flash_time) + if(!viewer.is_blind()) + do_flash(viewer, flash_time) /obj/machinery/flasher/proc/do_flash(var/mob/living/victim, var/flash_time) victim.flash_eyes() diff --git a/code/game/machinery/floorlayer.dm b/code/game/machinery/floorlayer.dm index b8628b7e508a..ea04c68ba826 100644 --- a/code/game/machinery/floorlayer.dm +++ b/code/game/machinery/floorlayer.dm @@ -15,7 +15,7 @@ T = new /obj/item/stack/tile/floor(src) /obj/machinery/floorlayer/Move(new_turf,M_Dir) - ..() + . = ..() if(on) if(mode["dismantle"]) @@ -67,13 +67,12 @@ return TRUE return ..() -/obj/machinery/floorlayer/examine(mob/user) +/obj/machinery/floorlayer/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/dismantle = mode["dismantle"] - var/laying = mode["laying"] - var/collect = mode["collect"] - var/message = "\The [src] [!T?"don't ":""]has [!T?"":"[T.get_amount()] [T] "]tile\s, dismantle is [dismantle?"on":"off"], laying is [laying?"on":"off"], collect is [collect?"on":"off"]." - to_chat(user, message) + var/laying = mode["laying"] + var/collect = mode["collect"] + . += SPAN_NOTICE("\The [src] [!T?"don't ":""]has [!T?"":"[T.get_amount()] [T] "]tile\s, dismantle is [dismantle?"on":"off"], laying is [laying?"on":"off"], collect is [collect?"on":"off"].") /obj/machinery/floorlayer/proc/reset() on = 0 @@ -82,7 +81,7 @@ if(istype(new_turf, /turf/floor)) var/turf/floor/T = new_turf if(!T.is_plating()) - T.set_flooring(null, place_product = !T.is_floor_damaged()) + T.clear_flooring(place_product = !T.is_floor_damaged()) return new_turf.is_plating() /obj/machinery/floorlayer/proc/TakeNewStack() diff --git a/code/game/machinery/kitchen/cooking_machines/_cooker.dm b/code/game/machinery/kitchen/cooking_machines/_cooker.dm index e632cedf9b8f..699f0670a3b1 100644 --- a/code/game/machinery/kitchen/cooking_machines/_cooker.dm +++ b/code/game/machinery/kitchen/cooking_machines/_cooker.dm @@ -37,12 +37,12 @@ cooking_obj = null return ..() -/obj/machinery/cooker/examine(mob/user) +/obj/machinery/cooker/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(cooking_obj) - to_chat(user, "You can see \a [cooking_obj] inside.") + . += "You can see \a [cooking_obj] inside." if(panel_open) - to_chat(user, "The panel is open.") + . += "The service panel is open." /obj/machinery/cooker/components_are_accessible(path) return !cooking && ..() diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index ce3f44d19386..aa537a6a9965 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -54,9 +54,9 @@ src.startgibbing(user) return TRUE -/obj/machinery/gibber/examine(mob/user) +/obj/machinery/gibber/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "The safety guard is [emagged ? SPAN_DANGER("disabled") : "enabled"].") + . += "The safety guard is [emagged ? SPAN_DANGER("disabled") : "enabled"]." /obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user) emagged = !emagged diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 8fc6978ab6f4..7bcf166a9089 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -3,7 +3,7 @@ // can also operate on non-loc area through "otherarea" var /obj/machinery/light_switch name = "light switch" - desc = "It turns lights on and off. What are you, simple?" + desc = "It switches lights on and off, obviously." icon = 'icons/obj/power.dmi' icon_state = "light0" obj_flags = OBJ_FLAG_MOVES_UNSUPPORTED @@ -59,10 +59,10 @@ set_light(2, 0.25, on ? "#82ff4c" : "#f86060") z_flags |= ZMM_MANGLE_PLANES -/obj/machinery/light_switch/examine(mob/user, distance) +/obj/machinery/light_switch/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance) - to_chat(user, "A light switch. It is [on? "on" : "off"].") + . += "It is [on? "on" : "off"]." /obj/machinery/light_switch/proc/set_state(var/newstate) if(on != newstate) diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index 28272033fa96..ac2a4f67cec2 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -407,9 +407,10 @@ var/global/bomb_set /obj/item/modular_computer/laptop/preset/custom_loadout/cheap ) -/obj/item/secure_storage/briefcase/nukedisk/examine(mob/user) +/obj/item/secure_storage/briefcase/nukedisk/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user,"On closer inspection, you see \a [global.using_map.company_name] emblem is etched into the front of it.") + if(distance <= 1) + . += "On closer inspection, you see \a [global.using_map.company_name] emblem is etched into the front of it." /obj/item/folder/envelope/nuke_instructions name = "instructions envelope" diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm index 615a1243831f..3cfa2dd57bbe 100644 --- a/code/game/machinery/oxygen_pump.dm +++ b/code/game/machinery/oxygen_pump.dm @@ -159,12 +159,12 @@ return TRUE return FALSE // TODO: should this be a parent call? do we want this to be (de)constructable? -/obj/machinery/oxygen_pump/examine(mob/user) +/obj/machinery/oxygen_pump/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(tank) - to_chat(user, "The meter shows [round(tank.air_contents.return_pressure())].") + . += "The meter shows [round(tank.air_contents.return_pressure())]." else - to_chat(user, SPAN_WARNING("It is missing a tank!")) + . += SPAN_WARNING("It is missing a tank!") /obj/machinery/oxygen_pump/Process() if(istype(breather)) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 57fe940fe0b4..e117f2087257 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -117,11 +117,6 @@ Buildable meters . = ..() set_extension(src, /datum/extension/parts_stash) -/obj/item/machine_chassis/examine(mob/user, distance) - . = ..() - if(distance <= 2) - to_chat(user, "Use a wrench to secure \the [src] here.") - /obj/item/machine_chassis/attackby(var/obj/item/W, var/mob/user) if(!IS_WRENCH(W)) return ..() diff --git a/code/game/machinery/pipe/pipelayer.dm b/code/game/machinery/pipe/pipelayer.dm index fdc1b122ef33..d34c2d094474 100644 --- a/code/game/machinery/pipe/pipelayer.dm +++ b/code/game/machinery/pipe/pipelayer.dm @@ -22,7 +22,7 @@ W = new(src) /obj/machinery/pipelayer/Move(new_turf,M_Dir) - ..() + . = ..() if(on && a_dis) dismantle_floor(old_turf) @@ -79,9 +79,9 @@ return TRUE return ..() -/obj/machinery/pipelayer/examine(mob/user) +/obj/machinery/pipelayer/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "\The [src] has [metal] sheet\s, is set to produce [P_type_t], and auto-dismantling is [!a_dis?"de":""]activated.") + . += "\The [src] has [metal] sheet\s, is set to produce [P_type_t], and auto-dismantling is [!a_dis?"de":""]activated." /obj/machinery/pipelayer/proc/reset() on=0 @@ -111,7 +111,7 @@ if(istype(new_turf, /turf/floor)) var/turf/floor/T = new_turf if(!T.is_plating()) - T.set_flooring(null, place_product = !T.is_floor_damaged()) + T.clear_flooring(place_product = !T.is_floor_damaged()) return new_turf.is_plating() /obj/machinery/pipelayer/proc/layPipe(var/turf/w_turf,var/M_Dir,var/old_dir) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index b507e3092765..9a05621916b9 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -109,14 +109,11 @@ else icon_state = icon_state_idle -/obj/machinery/recharger/examine(mob/user) +/obj/machinery/recharger/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(isnull(charging)) - return - - var/obj/item/cell/C = charging.get_cell() - if(!isnull(C)) - to_chat(user, "Item's charge at [round(C.percent())]%.") + var/obj/item/cell/cell = charging?.get_cell() + if(cell) + . += "\The [charging] is charged to [round(cell.percent())]%." /obj/machinery/recharger/wallcharger name = "wall recharger" diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index bed171138642..1be2e054aaaa 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -95,13 +95,13 @@ var/charge_used = diff - use_power_oneoff(diff / CELLRATE, LOCAL) * CELLRATE target.give(charge_used) -/obj/machinery/recharge_station/examine(mob/user) +/obj/machinery/recharge_station/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/obj/item/cell/cell = get_cell() if(cell) - to_chat(user, "The charge meter reads: [cell.percent()]%.") + . += "The charge meter reads: [cell.percent()]%." else - to_chat(user, "The indicator shows that the cell is missing.") + . += "The indicator shows that the cell is missing." /obj/machinery/recharge_station/relaymove(mob/user) if(user.stat) diff --git a/code/game/machinery/self_destruct.dm b/code/game/machinery/self_destruct.dm index 3d1f841884df..badb1853918b 100644 --- a/code/game/machinery/self_destruct.dm +++ b/code/game/machinery/self_destruct.dm @@ -101,16 +101,16 @@ visible_message(SPAN_DANGER("\The [src] dents and chars.")) damaged = 1 -/obj/machinery/self_destruct/examine(mob/user) +/obj/machinery/self_destruct/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(damaged) - to_chat(user, "[src] is damaged, it needs repairs.") + . += SPAN_WARNING("\The [src] is damaged and needs to be repaired.") return if(armed) - to_chat(user, "[src] is armed and ready.") + . += SPAN_DANGER("\The [src] is armed and ready.") return if(cylinder) - to_chat(user, "[src] is loaded and ready to be armed.") + . += "\the [src] is loaded and ready to be armed." /obj/machinery/self_destruct/on_update_icon() if(armed) diff --git a/code/game/machinery/slide_projector.dm b/code/game/machinery/slide_projector.dm index de4cb556fb3b..85b2db3f4664 100644 --- a/code/game/machinery/slide_projector.dm +++ b/code/game/machinery/slide_projector.dm @@ -143,13 +143,13 @@ desc = "It's currently showing \the [I]." update_icon() -/obj/effect/projection/examine(mob/user, distance) +/obj/effect/projection/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/obj/item/slide = source.resolve() if(!istype(slide)) qdel(src) return - return slide.examine(user, 1) + . += slide.get_examine_strings(user, distance, infix, suffix) /obj/effect/projection/photo alpha = 170 diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 30d1ae2ef8c6..ab59748f0d8e 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -40,15 +40,14 @@ if(panel_open) add_overlay("sheater-open") -/obj/machinery/space_heater/examine(mob/user) +/obj/machinery/space_heater/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - - to_chat(user, "The heater is [on ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"].") + . += "\The [src] is [on ? "on" : "off"] and the hatch is [panel_open ? "open" : "closed"]." var/obj/item/cell/cell = get_cell() if(panel_open) - to_chat(user, "The power cell is [cell ? "installed" : "missing"].") + . += "The power cell is [cell ? "installed" : "missing"]." else - to_chat(user, "The charge meter reads [cell ? round(cell.percent(),1) : 0]%") + . += "The charge meter reads [cell ? round(cell.percent(),1) : 0]%" /obj/machinery/space_heater/state_transition(decl/machine_construction/new_state, mob/user) . = ..() diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 34e9ec988eff..f42cb1070087 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -141,13 +141,13 @@ return 1 return 0 -/obj/machinery/status_display/examine(mob/user) +/obj/machinery/status_display/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(mode != STATUS_DISPLAY_BLANK && mode != STATUS_DISPLAY_ALERT) - to_chat(user, "The display says:
\t[sanitize(message1)]
\t[sanitize(message2)]") + . += "The display says:
\t[sanitize(message1)]
\t[sanitize(message2)]" if(mode == STATUS_DISPLAY_ALERT) var/decl/security_state/security_state = GET_DECL(global.using_map.security_state) - to_chat(user, "The current alert level is [security_state.current_security_level.name].") + . += "The current alert level is [security_state.current_security_level.name]." /obj/machinery/status_display/proc/set_message(m1, m2) if(m1) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index f48d05b08d79..0b61d1782680 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -42,12 +42,11 @@ // Lose memory locked = null -/obj/machinery/computer/teleporter/examine(mob/user) +/obj/machinery/computer/teleporter/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(locked) var/turf/T = get_turf(locked) - to_chat(user, SPAN_NOTICE("The console is locked on to \[[T.loc.name]\].")) - + . += SPAN_NOTICE("The console is locked on to \[[T.loc.name]\].") /obj/machinery/computer/teleporter/attackby(var/obj/I, var/mob/user) diff --git a/code/game/machinery/turrets/_turrets.dm b/code/game/machinery/turrets/_turrets.dm index 957c34078890..dd6109cdf461 100644 --- a/code/game/machinery/turrets/_turrets.dm +++ b/code/game/machinery/turrets/_turrets.dm @@ -368,8 +368,7 @@ return TRUE if(!is_valid_target(target?.resolve()) && proj_gun.ammo_magazine.get_stored_ammo_count() != proj_gun.ammo_magazine.max_ammo) return TRUE - else - return FALSE + return FALSE /obj/machinery/turret/emag_act(remaining_charges, mob/user, emag_source) if(!emagged) @@ -386,7 +385,7 @@ state_machine.evaluate() /obj/machinery/turret/power_change() - ..() + . = ..() state_machine.evaluate() /obj/machinery/turret/on_component_failure() diff --git a/code/game/machinery/vitals_monitor.dm b/code/game/machinery/vitals_monitor.dm index f23583386a9a..d62d255d74db 100644 --- a/code/game/machinery/vitals_monitor.dm +++ b/code/game/machinery/vitals_monitor.dm @@ -19,14 +19,14 @@ victim = null . = ..() -/obj/machinery/vitals_monitor/examine(mob/user) +/obj/machinery/vitals_monitor/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(victim) if(stat & NOPOWER) - to_chat(user, SPAN_NOTICE("It's unpowered.")) + . += SPAN_NOTICE("It's unpowered.") return - to_chat(user, SPAN_NOTICE("Vitals of [victim]:")) - to_chat(user, SPAN_NOTICE("Pulse: [victim.get_pulse_as_string(GETPULSE_TOOL)]")) + . += SPAN_NOTICE("Vitals of [victim]:") + . += SPAN_NOTICE("Pulse: [victim.get_pulse_as_string(GETPULSE_TOOL)]") var/brain_activity = "none" var/obj/item/organ/internal/brain = GET_INTERNAL_ORGAN(victim, BP_BRAIN) @@ -41,7 +41,7 @@ brain_activity = "extremely weak" else brain_activity = "some" - to_chat(user, SPAN_NOTICE("Brain activity: [brain_activity]")) + . += SPAN_NOTICE("Brain activity: [brain_activity]") var/breathing = "none" var/obj/item/organ/internal/lungs/lungs = victim.get_organ(BP_LUNGS, /obj/item/organ/internal/lungs) @@ -51,7 +51,7 @@ else if(lungs.breath_fail_ratio < 1) breathing = "shallow" - to_chat(user, SPAN_NOTICE("Breathing: [breathing]")) + . += SPAN_NOTICE("Breathing: [breathing]") /obj/machinery/vitals_monitor/Process() if(QDELETED(victim)) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 6f573835da35..1beca6b072f1 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -62,9 +62,9 @@ create_reagents(100) . = ..() -/obj/machinery/washing_machine/examine(mob/user) +/obj/machinery/washing_machine/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, SPAN_NOTICE("The detergent port is [atom_flags & ATOM_FLAG_OPEN_CONTAINER ? "open" : "closed"].")) + . += SPAN_NOTICE("The detergent port is [atom_flags & ATOM_FLAG_OPEN_CONTAINER ? "open" : "closed"].") /obj/machinery/washing_machine/proc/wash() if(operable()) diff --git a/code/game/objects/__objs.dm b/code/game/objects/__objs.dm index d950aa3925cb..8ea7caabc68b 100644 --- a/code/game/objects/__objs.dm +++ b/code/game/objects/__objs.dm @@ -15,11 +15,13 @@ var/list/matter //Used to store information about the contents of the object. var/w_class // Size of the object. - var/in_use = 0 // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! + var/in_use = FALSE // If we have a user using us, this will be set on. We will check if the user has stopped using us, and thus stop updating and LAGGING EVERYTHING! var/armor_penetration = 0 var/anchor_fall = FALSE - var/holographic = 0 //if the obj is a holographic object spawned by the holodeck - var/list/directional_offset ///JSON list of directions to x,y offsets to be applied to the object depending on its direction EX: @'{"NORTH":{"x":12,"y":5}, "EAST":{"x":10,"y":50}}' + /// if the obj is a holographic object spawned by the holodeck + var/holographic = FALSE + ///JSON list of directions to x,y offsets to be applied to the object depending on its direction EX: @'{"NORTH":{"x":12,"y":5}, "EAST":{"x":10,"y":50}}' + var/directional_offset /obj/Initialize(mapload) //Health should be set to max_health only if it's null. @@ -136,6 +138,9 @@ wrench_floor_bolts(user, null, used_item) update_icon() return TRUE + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + if(padding_extension && padding_extension.handle_use_item(used_item, user)) + return TRUE return ..() /obj/proc/wrench_floor_bolts(mob/user, delay = 2 SECONDS, obj/item/tool) @@ -165,12 +170,12 @@ /obj/proc/can_embed() return FALSE -/obj/examine(mob/user, distance, infix, suffix) +/obj/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if((obj_flags & OBJ_FLAG_ROTATABLE)) - to_chat(user, SPAN_SUBTLE("\The [src] can be rotated with alt-click.")) + . += SPAN_SUBTLE("\The [src] can be rotated with alt-click.") if((obj_flags & OBJ_FLAG_ANCHORABLE)) - to_chat(user, SPAN_SUBTLE("\The [src] can be anchored or unanchored with a wrench.")) + . += SPAN_SUBTLE("\The [src] can be anchored or unanchored with a wrench.") /obj/proc/rotate(mob/user) if(!CanPhysicallyInteract(user)) diff --git a/code/game/objects/auras/regenerating_aura.dm b/code/game/objects/auras/regenerating_aura.dm index fb56c0fbe965..7c313fc2d1c3 100644 --- a/code/game/objects/auras/regenerating_aura.dm +++ b/code/game/objects/auras/regenerating_aura.dm @@ -69,9 +69,9 @@ if(BP_IS_PROSTHETIC(regen_organ) || regen_organ.organ_tag == ignore_tag) continue if(istype(regen_organ)) - if(regen_organ.damage > 0 && !(regen_organ.status & ORGAN_DEAD)) + if(regen_organ.get_organ_damage() > 0 && !(regen_organ.status & ORGAN_DEAD)) if (H.nutrition >= organ_mult) - regen_organ.damage = max(regen_organ.damage - organ_mult, 0) + regen_organ.adjust_organ_damage(-(organ_mult)) H.adjust_nutrition(-organ_mult) if(prob(5)) to_chat(H, replacetext(regen_message,"ORGAN", regen_organ.name)) diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index f2198e90718e..5fae22fc6003 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -113,8 +113,8 @@ if(!isliving(AM) || amount < 1) return var/mob/living/walker = AM - if(istype(walker.buckled, /obj/structure/bed/chair/wheelchair)) - var/obj/structure/bed/chair/wheelchair/wheelchair = walker.buckled + if(istype(walker.buckled, /obj/structure/chair/wheelchair)) + var/obj/structure/chair/wheelchair/wheelchair = walker.buckled wheelchair.bloodiness = 4 else walker.add_walking_contaminant(chemical, amount, (blood_data ? blood_data[pick(blood_data)] : null)) @@ -202,11 +202,11 @@ else icon_state = "writing1" -/obj/effect/decal/cleanable/blood/writing/examine(mob/user) +/obj/effect/decal/cleanable/blood/writing/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/processed_message = user.handle_reading_literacy(user, message) if(processed_message) - to_chat(user, "It reads: \"[message]\"") + . += "It reads: \"[message]\"" /obj/effect/decal/cleanable/blood/gibs name = "gibs" diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index d5bcac25da97..3b5ef1fd60b7 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -244,7 +244,7 @@ steam.start() -- spawns the effect time_to_live = 200 /obj/effect/effect/smoke/bad/Move() - ..() + . = ..() for(var/mob/living/M in get_turf(src)) affect_mob(M) @@ -268,7 +268,7 @@ steam.start() -- spawns the effect /obj/effect/effect/smoke/sleepy /obj/effect/effect/smoke/sleepy/Move() - ..() + . = ..() for(var/mob/living/M in get_turf(src)) affect_mob(M) @@ -290,7 +290,7 @@ steam.start() -- spawns the effect icon_state = "mustard" /obj/effect/effect/smoke/mustard/Move() - ..() + . = ..() for(var/mob/living/M in get_turf(src)) affect_mob(M) diff --git a/code/game/objects/effects/footprints.dm b/code/game/objects/effects/footprints.dm index 09ea5bddc7bb..3f38937b7aa0 100644 --- a/code/game/objects/effects/footprints.dm +++ b/code/game/objects/effects/footprints.dm @@ -48,7 +48,7 @@ return null if(buckled || current_posture?.prone) return 'icons/mob/footprints/footprints_trail.dmi' - if(istype(buckled, /obj/structure/bed/chair)) + if(istype(buckled, /obj/structure/chair)) return 'icons/mob/footprints/footprints_wheelchair.dmi' var/obj/item/clothing/shoes/shoes = get_equipped_item(slot_shoes_str) if(istype(shoes) && shoes.footprint_icon) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index e2e87ae2470e..827773adb4cc 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -37,8 +37,8 @@ /obj/abstract/landmark/costume/proc/make_costumes() var/list/options = typesof(/obj/abstract/landmark/costume) - var/PICK= options[rand(1,options.len)] - new PICK(loc) + var/costume = pick(options) + new costume(loc) //SUBCLASSES. Spawn a bunch of items and disappear likewise /obj/abstract/landmark/costume/chameleon/make_costumes() diff --git a/code/game/objects/items/__item.dm b/code/game/objects/items/__item.dm index 27bc8a998ed6..fb1c143c2752 100644 --- a/code/game/objects/items/__item.dm +++ b/code/game/objects/items/__item.dm @@ -20,7 +20,7 @@ /// This is used to determine on which slots an item can fit. var/slot_flags = SLOT_NONE /// If it's an item we don't want to log attack_logs with, set this to TRUE - var/no_attack_log = 0 + var/no_attack_log = FALSE var/obj/item/master = null var/origin_tech //Used by R&D to determine what research bonuses it grants. var/list/attack_verb = list("hit") //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" @@ -31,12 +31,22 @@ /// Flag for ZAS based contamination (chlorine etc) var/contaminated = FALSE - var/heat_protection = 0 //flags which determine which body parts are protected from heat. Use the SLOT_HEAD, SLOT_UPPER_BODY, SLOT_LOWER_BODY, etc. flags. See setup.dm - var/cold_protection = 0 //flags which determine which body parts are protected from cold. Use the SLOT_HEAD, SLOT_UPPER_BODY, SLOT_LOWER_BODY, etc. flags. See setup.dm - var/max_heat_protection_temperature //Set this variable to determine up to which temperature (IN KELVIN) the item protects against heat damage. Keep at null to disable protection. Only protects areas set by heat_protection flags - var/min_cold_protection_temperature //Set this variable to determine down to which temperature (IN KELVIN) the item protects against cold damage. 0 is NOT an acceptable number due to if(varname) tests!! Keep at null to disable protection. Only protects areas set by cold_protection flags - var/max_pressure_protection // Set this variable if the item protects its wearer against high pressures below an upper bound. Keep at null to disable protection. - var/min_pressure_protection // Set this variable if the item protects its wearer against low pressures above a lower bound. Keep at null to disable protection. 0 represents protection against hard vacuum. + /// flags which determine which body parts are protected from heat. Use the SLOT_HEAD, SLOT_UPPER_BODY, SLOT_LOWER_BODY, etc. flags. See setup.dm + var/heat_protection = 0 + /// flags which determine which body parts are protected from cold. Use the SLOT_HEAD, SLOT_UPPER_BODY, SLOT_LOWER_BODY, etc. flags. See setup.dm + var/cold_protection = 0 + /// Set this variable to determine up to which temperature (IN KELVIN) the item protects against heat damage. + /// Keep at null to disable protection. Only protects areas set by heat_protection flags. + var/max_heat_protection_temperature + ///Set this variable to determine down to which temperature (IN KELVIN) the item protects against cold damage. + /// Keep at null to disable protection. Only protects areas set by cold_protection flags + var/min_cold_protection_temperature + /// Set this variable if the item protects its wearer against high pressures below an upper bound. + /// Keep at null to disable protection. + var/max_pressure_protection + /// Set this variable if the item protects its wearer against low pressures above a lower bound. + /// Keep at null to disable protection. 0 represents protection against hard vacuum. + var/min_pressure_protection var/datum/action/item_action/action var/action_button_name //It is also the text which gets displayed on the action button. If not set it defaults to 'Use [name]'. If it's not set, there'll be no button. @@ -54,25 +64,31 @@ var/gas_transfer_coefficient = 1 // for leaking gas from turf to mask and vice-versa (for masks right now, but at some point, i'd like to include space helmets) var/permeability_coefficient = 1 // for chemicals/diseases var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit) - var/slowdown_general = 0 // How much clothing is slowing you down. Negative values speeds you up. This is a general slowdown, no matter equipment slot. - var/slowdown_per_slot // How much clothing is slowing you down. This is an associative list: item slot - slowdown - var/slowdown_accessory // How much an accessory will slow you down when attached to a worn article of clothing. - var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N - var/material_armor_multiplier // if set, item will use material's armor values multiplied by this. + var/slowdown_general = 0 // How this item slows its holder down. Negative values speeds them up. This is a general slowdown, no matter the equipment slot. + /// How much this item slows its holder down, based on the slot it's in. This is an associative list: slot_string = slowdown + var/slowdown_per_slot + /// An additional slowdown amount, contributed by accessories attached to this item. Not to be confused with /obj/item/clothing/var/accessory_slowdown. + var/tmp/slowdown_accessory + /// If TRUE, the item cannot be removed except via destruction or using the force flag in unequip procs. + var/canremove = TRUE + /// if set, item will use material's armor values multiplied by this. + var/material_armor_multiplier var/armor_type = /datum/extension/armor var/list/armor var/armor_degradation_speed //How fast armor will degrade, multiplier to blocked damage to get armor damage value. var/list/allowed = null //suit storage stuff. var/obj/item/uplink/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers. var/zoomdevicename = null //name used for message when binoculars/scope is used - var/zoom = 0 //1 if item is actively being used to zoom. For scoped guns and binoculars. + /// if the item is actively being used to zoom. For scoped guns and binoculars. + var/zoom = FALSE - var/base_parry_chance // Will allow weapon to parry melee attacks if non-zero + var/base_parry_chance = 0 // Will allow weapon to parry melee attacks if non-zero var/wielded_parry_bonus = 15 var/use_alt_layer = FALSE // Use the slot's alternative layer when rendering on a mob - var/list/sprite_sheets // Assoc list of bodytype to icon for producing onmob overlays when this item is held or worn. + /// Assoc list of bodytype category to icon for producing onmob overlays when this item is held or worn. + var/list/sprite_sheets // Material handling for material weapons (not used by default, unless material is supplied or set) var/decl/material/material // Reference to material decl. If set to a string corresponding to a material ID, will init the item with that material. @@ -324,7 +340,7 @@ return FALSE return wielder.can_twohand_item(src) -/obj/item/examine(mob/user, distance) +/obj/item/get_examine_strings(mob/user, distance, infix, suffix) var/list/desc_comp = list() desc_comp += "It is a [w_class_description()] item." @@ -403,8 +419,7 @@ desc_comp += "It is covered in [coating.get_coated_name()]." // It is covered in dilute oily slimy bloody mud. if(check_rights(R_DEBUG, 0, user)) - to_chat(user, "\The [src] has a temperature of [temperature]K.") - + desc_comp += "\The [src] has a temperature of [temperature]K." return ..(user, distance, "", jointext(desc_comp, "
")) @@ -779,7 +794,7 @@ //handle_shield should return a positive value to indicate that the attack is blocked and should be prevented. //If a negative value is returned, it should be treated as a special return value for bullet_act() and handled appropriately. //For non-projectile attacks this usually means the attack is blocked. -//Otherwise should return 0 to indicate that the attack is not affected in any way. +//Otherwise should return FALSE to indicate that the attack is not affected in any way. /obj/item/proc/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack") var/parry_chance = get_parry_chance(user) if(attacker) @@ -789,8 +804,8 @@ user.visible_message(SPAN_DANGER("\The [user] parries [attack_text] with \the [src]!")) playsound(user.loc, 'sound/weapons/punchmiss.ogg', 50, 1) on_parry(user, damage_source, attacker) - return 1 - return 0 + return TRUE + return FALSE /obj/item/proc/on_parry(mob/user, damage_source, mob/attacker) return @@ -803,18 +818,20 @@ if(is_held_twohanded()) . += wielded_parry_bonus +/// Occurs when a disarm attempt fails a skill check, resulting in the attacker being damaged. +/// Return TRUE to block further checks for other objects. /obj/item/proc/on_disarm_attempt(mob/target, mob/living/attacker) var/force = get_attack_force(attacker) if(force < 1) - return 0 + return FALSE if(!istype(attacker)) - return 0 + return FALSE var/decl/pronouns/pronouns = attacker.get_pronouns() attacker.apply_damage(force, atom_damage_type, attacker.get_active_held_item_slot(), used_weapon = src) attacker.visible_message(SPAN_DANGER("\The [attacker] hurts [pronouns.his] hand on \the [src]!")) playsound(target, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) playsound(target, hitsound, 50, 1, -1) - return 1 + return TRUE /obj/item/reveal_blood() if(was_bloodied && !fluorescent) @@ -894,7 +911,7 @@ modules/mob/living/human/life.dm if you die, you will be zoomed out. if(user.hud_used.is_hud_shown()) user.toggle_zoom_hud() // If the user has already limited their HUD this avoids them having a HUD when they zoom in user.client.view = viewsize - zoom = 1 + zoom = TRUE var/viewoffset = WORLD_ICON_SIZE * tileoffset switch(user.dir) @@ -926,7 +943,7 @@ modules/mob/living/human/life.dm if you die, you will be zoomed out. /obj/item/proc/unzoom(var/mob/user) if(!zoom) return - zoom = 0 + zoom = FALSE events_repository.unregister(/decl/observ/destroyed, user, src, TYPE_PROC_REF(/obj/item, unzoom)) events_repository.unregister(/decl/observ/moved, user, src, TYPE_PROC_REF(/obj/item, unzoom)) diff --git a/code/game/objects/items/_item_damage.dm b/code/game/objects/items/_item_damage.dm index c91030262051..15affb6205ba 100644 --- a/code/game/objects/items/_item_damage.dm +++ b/code/game/objects/items/_item_damage.dm @@ -116,8 +116,8 @@ self_message = SPAN_DANGER("You stab yourself in the eyes with \the [src]!")) var/obj/item/organ/internal/eyes = GET_INTERNAL_ORGAN(H, BP_EYES) - eyes.damage += rand(3,4) - if(eyes.damage >= eyes.min_bruised_damage) + eyes.adjust_organ_damage(rand(3,4)) + if(eyes.get_organ_damage() >= eyes.min_bruised_damage) if(M.stat != DEAD) if(!BP_IS_PROSTHETIC(eyes)) //robot eyes bleeding might be a bit silly to_chat(M, SPAN_DANGER("Your eyes start to bleed profusely!")) @@ -128,12 +128,11 @@ SET_STATUS_MAX(M, STAT_BLURRY, 10) SET_STATUS_MAX(M, STAT_PARA, 1) SET_STATUS_MAX(M, STAT_WEAK, 4) - if (eyes.damage >= eyes.min_broken_damage) - if(M.stat != DEAD) - to_chat(M, SPAN_WARNING("You go blind!")) + if (eyes.get_organ_damage() >= eyes.min_broken_damage && M.stat != DEAD) + to_chat(M, SPAN_WARNING("You go blind!")) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, eyes.parent_organ) - affecting.take_external_damage(7) + affecting.take_damage(7) else M.take_organ_damage(7) SET_STATUS_MAX(M, STAT_BLURRY, rand(3,4)) diff --git a/code/game/objects/items/_item_drying.dm b/code/game/objects/items/_item_drying.dm index f9575e2dc961..c3044b33be21 100644 --- a/code/game/objects/items/_item_drying.dm +++ b/code/game/objects/items/_item_drying.dm @@ -46,7 +46,7 @@ /obj/item/proc/get_max_drying_wetness() return initial(drying_wetness) || drying_wetness || 1 -// Returns a string used in drying rack examine(). +// Returns a string used in drying rack examined_by(). /obj/item/proc/get_dryness_text(var/obj/rack) var/moistness = drying_wetness / get_max_drying_wetness() if(moistness > 0.65) diff --git a/code/game/objects/items/circuitboards/machinery/household.dm b/code/game/objects/items/circuitboards/machinery/household.dm index 8878ee43271c..5ce6f6ead15f 100644 --- a/code/game/objects/items/circuitboards/machinery/household.dm +++ b/code/game/objects/items/circuitboards/machinery/household.dm @@ -46,19 +46,15 @@ /obj/item/stock_parts/circuitboard/cooker/get_buildable_types() return subtypesof(/obj/machinery/cooker) -/obj/item/stock_parts/circuitboard/honey - name = "circuitboard (honey extractor)" - build_path = /obj/machinery/honey_extractor +/obj/item/stock_parts/circuitboard/seed_extractor + name = "circuitboard (seed extractor)" + build_path = /obj/machinery/seed_extractor board_type = "machine" origin_tech = @'{"biotech":2,"engineering":1}' req_components = list( /obj/item/stock_parts/manipulator = 2, - /obj/item/stock_parts/matter_bin = 2) - -/obj/item/stock_parts/circuitboard/honey/seed - name = "circuitboard (seed extractor)" - build_path = /obj/machinery/seed_extractor - board_type = "machine" + /obj/item/stock_parts/matter_bin = 2 + ) /obj/item/stock_parts/circuitboard/seed_storage name = "circuitboard (seed storage)" diff --git a/code/game/objects/items/crutches.dm b/code/game/objects/items/crutches.dm index 5a9ac03b4779..9e5b661a4ffa 100644 --- a/code/game/objects/items/crutches.dm +++ b/code/game/objects/items/crutches.dm @@ -8,21 +8,20 @@ material_alteration = MAT_FLAG_ALTERATION_ALL w_class = ITEM_SIZE_LARGE max_health = null // autoset from material - /// The material used for the padding. If null, the crutch is unpadded. Initially a typepath, set to an instance in Initialize. - var/decl/material/padding_material - /// The color used for the padding, in the case of paint or dye. If null, falls back to padding material color. - var/padding_color = null + /// The padding extension type for this item. If null, no extension is created and this item cannot be padded. + var/padding_extension_type = /datum/extension/padding + /// The initial material used when instantiating this item's padding extension. + /// Should not be modified at runtime. + var/decl/material/initial_padding_material + /// The initial color used for the padding, representing paint or dye. + /// If null, falls back to material color if we have MAT_FLAG_ALTERATION_COLOR. + /// COLOR_WHITE is treated differently than null color is. + var/initial_padding_color /obj/item/crutch/Initialize(ml, material_key) - padding_material = GET_DECL(padding_material) - return ..() - -// potential todo: to avoid matter shenanigans make padding a separate item that can be removed via alt interaction and added via attackby? -// add padding by clicking with sewing tools in active hand and fabric in offhand? -/obj/item/crutch/create_matter() . = ..() - if(padding_material) - matter[padding_material.type] += MATTER_AMOUNT_TRACE + if(padding_extension_type && initial_padding_material) + get_or_create_extension(src, padding_extension_type, initial_padding_material, initial_padding_color) /obj/item/crutch/get_stance_support_value() return LIMB_UNUSABLE @@ -32,28 +31,35 @@ /obj/item/crutch/on_update_icon() . = ..() + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) - add_overlay(overlay_image(icon, "[icon_state]-padding", padding_color || padding_material.color, RESET_COLOR | RESET_ALPHA)) + add_overlay(overlay_image(icon, "[icon_state]-padding", padding_extension.get_padding_color(material_alteration & MAT_FLAG_ALTERATION_COLOR), RESET_COLOR | RESET_ALPHA)) /obj/item/crutch/apply_additional_mob_overlays(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) - overlay.add_overlay(overlay_image(icon, "[overlay.icon_state]-padding", padding_color || padding_material.color, RESET_COLOR | RESET_ALPHA)) + overlay.add_overlay(overlay_image(icon, "[overlay.icon_state]-padding", padding_extension.get_padding_color(material_alteration & MAT_FLAG_ALTERATION_COLOR), RESET_COLOR | RESET_ALPHA)) . = ..() -/obj/item/crutch/examine(mob/user, distance, infix, suffix) +/obj/item/crutch/get_examine_strings(mob/user, distance, infix, suffix) . = ..() + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) - to_chat(user, "It has been padded with [padding_color ? "[padding_material.paint_verb] " : null][padding_material.use_name].") + var/padding_paint_color = padding_extension.get_padding_color(FALSE) // do not include material color + . += "It has been padded with [padding_paint_color ? "[padding_material.paint_verb] " : null][padding_material.use_name]." /obj/item/crutch/aluminum material = /decl/material/solid/metal/aluminium /obj/item/crutch/aluminum/padded - padding_material = /decl/material/solid/organic/plastic/foam - padding_color = COLOR_GRAY20 + initial_padding_material = /decl/material/solid/organic/plastic/foam + initial_padding_color = COLOR_GRAY20 /obj/item/crutch/wooden material = /decl/material/solid/organic/wood/oak /obj/item/crutch/wooden/padded - padding_material = /decl/material/solid/organic/leather \ No newline at end of file + initial_padding_material = /decl/material/solid/organic/leather \ No newline at end of file diff --git a/code/game/objects/items/cryobag.dm b/code/game/objects/items/cryobag.dm index b5d5f68a3e08..f045c550ad9d 100644 --- a/code/game/objects/items/cryobag.dm +++ b/code/game/objects/items/cryobag.dm @@ -101,13 +101,17 @@ return airtank ..() -/obj/structure/closet/body_bag/cryobag/examine(mob/user) +/obj/structure/closet/body_bag/cryobag/get_examine_strings(mob/user, distance, infix, suffix) + . = ..() + . += "The stasis meter shows '[stasis_power]x'." + +/obj/structure/closet/body_bag/cryobag/examined_by(mob/user, distance, infix, suffix) . = ..() - to_chat(user,"The stasis meter shows '[stasis_power]x'.") if(Adjacent(user)) //The bag's rather thick and opaque from a distance. - to_chat(user, "You peer into \the [src].") - for(var/mob/living/L in contents) - L.examine(arglist(args)) + to_chat(user, SPAN_INFO("You peer into \the [src].")) + for(var/mob/living/patient in contents) + patient.examined_by(user, distance, infix, suffix) + return TRUE /obj/item/usedcryobag name = "used stasis bag" diff --git a/code/game/objects/items/devices/boombox.dm b/code/game/objects/items/devices/boombox.dm index 1b9c5ecbc428..fc3850c843bc 100644 --- a/code/game/objects/items/devices/boombox.dm +++ b/code/game/objects/items/devices/boombox.dm @@ -36,12 +36,12 @@ /obj/item/boombox/emp_act(severity) boombox_break() -/obj/item/boombox/examine(mob/user) +/obj/item/boombox/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(!panel) - to_chat(user, SPAN_NOTICE("The front panel is unhinged.")) + . += SPAN_NOTICE("The front panel is unhinged.") if(broken) - to_chat(user, SPAN_WARNING("It's broken.")) + . += SPAN_WARNING("It's broken.") /obj/item/boombox/Destroy() stop() diff --git a/code/game/objects/items/devices/cable_painter.dm b/code/game/objects/items/devices/cable_painter.dm index f645ac96109e..80cbe215f4a5 100644 --- a/code/game/objects/items/devices/cable_painter.dm +++ b/code/game/objects/items/devices/cable_painter.dm @@ -11,10 +11,10 @@ . = ..() color_selection = pick(get_global_cable_colors()) -/obj/item/cable_painter/examine(mob/user, distance) +/obj/item/cable_painter/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "The color is currently set to [lowertext(color_selection)].") + . += "The color is currently set to [lowertext(color_selection)]." /obj/item/cable_painter/attack_self(mob/user) var/new_color_selection = input("What color would you like to use?", "Choose a Color", color_selection) as null|anything in get_global_cable_colors() diff --git a/code/game/objects/items/devices/dociler.dm b/code/game/objects/items/devices/dociler.dm index ac9af7d349e3..6e66017549c6 100644 --- a/code/game/objects/items/devices/dociler.dm +++ b/code/game/objects/items/devices/dociler.dm @@ -11,9 +11,9 @@ var/loaded = 1 var/mode = "completely" -/obj/item/dociler/examine(mob/user) +/obj/item/dociler/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It is currently set to [mode] docile mode.") + . += SPAN_NOTICE("It is currently set to '[mode] docile' mode.") /obj/item/dociler/attack_self(var/mob/user) if(mode == "somewhat") diff --git a/code/game/objects/items/devices/geiger.dm b/code/game/objects/items/devices/geiger.dm index 4f641b1f350e..75ed00418bac 100644 --- a/code/game/objects/items/devices/geiger.dm +++ b/code/game/objects/items/devices/geiger.dm @@ -46,13 +46,13 @@ radiation_count = SSradiation.get_rads_at_turf(get_turf(src)) update_icon() -/obj/item/geiger/examine(mob/user) +/obj/item/geiger/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/msg = "[scanning ? "ambient" : "stored"] Radiation level: [radiation_count ? radiation_count : "0"] Roentgen." if(radiation_count > RAD_LEVEL_LOW) - to_chat(user, "[msg]") + . += SPAN_DANGER("[msg]") else - to_chat(user, "[msg]") + . += SPAN_NOTICE("[msg]") /obj/item/geiger/attack_self(var/mob/user) scanning = !scanning diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 7704fb75550a..d592062c4312 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -40,10 +40,10 @@ var/global/list/all_gps_units = list() update_holder() update_icon() -/obj/item/gps/examine(mob/user, distance) +/obj/item/gps/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, SPAN_NOTICE("\The [src]'s screen shows: [get_coordinates()].")) + . += SPAN_NOTICE("\The [src]'s screen shows: [get_coordinates()].") /obj/item/gps/proc/get_coordinates() var/turf/T = get_turf(src) diff --git a/code/game/objects/items/devices/holowarrant.dm b/code/game/objects/items/devices/holowarrant.dm index 63575144f887..ff3fe45f5725 100644 --- a/code/game/objects/items/devices/holowarrant.dm +++ b/code/game/objects/items/devices/holowarrant.dm @@ -24,14 +24,14 @@ set_extension(src, /datum/extension/network_device/lazy) //look at it -/obj/item/holowarrant/examine(mob/user, distance) +/obj/item/holowarrant/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(active) - to_chat(user, "It's a holographic warrant for '[active.fields["namewarrant"]]'.") + . += "It's a holographic warrant for '[active.fields["namewarrant"]]'." if(distance <= 1) - show_content(user) + show_content(user) // opens a browser else - to_chat(user, "You have to be closer if you want to read it.") + . += SPAN_WARNING("You have to be closer if you want to read it.") //hit yourself with it /obj/item/holowarrant/attack_self(mob/user) @@ -103,7 +103,7 @@ SPAN_NOTICE("\The [user] holds up a warrant projector and shows the contents to \the [target]."), SPAN_NOTICE("You show the warrant to \the [target].") ) - target.examinate(src) + target.examine_verb(src) return TRUE /obj/item/holowarrant/on_update_icon() diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 34115f49b63e..4d9877a67ead 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -57,10 +57,10 @@ var/emagged = 0 var/charge = 0 -/obj/item/lightreplacer/examine(mob/user, distance) +/obj/item/lightreplacer/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 2) - to_chat(user, "It has [uses] light\s remaining.") + . += "It has [uses] light\s remaining." /obj/item/lightreplacer/resolve_attackby(var/atom/A, mob/user) diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index 1bdc6b37d749..b5eb44262b35 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -62,6 +62,6 @@ if(!parts) qdel(src) -/obj/item/modkit/examine(mob/user) +/obj/item/modkit/get_examine_strings(mob/user, distance, infix, suffix) . = ..(user) - to_chat(user, "It looks as though it modifies hardsuits to fit [target_bodytype] users.") + . += "It looks as though it modifies hardsuits to fit [target_bodytype] users." diff --git a/code/game/objects/items/devices/paint_sprayer.dm b/code/game/objects/items/devices/paint_sprayer.dm index 3c6f08681458..90c99edcaacc 100644 --- a/code/game/objects/items/devices/paint_sprayer.dm +++ b/code/game/objects/items/devices/paint_sprayer.dm @@ -361,9 +361,9 @@ update_icon() -/obj/item/paint_sprayer/examine(mob/user) +/obj/item/paint_sprayer/get_examine_strings(mob/user, distance, infix, suffix) . = ..(user) - to_chat(user, "It is configured to produce the '[decal]' decal with a direction of '[paint_dir]' using [spray_color] paint.") + . += "It is configured to produce the '[decal]' decal with a direction of '[paint_dir]' using [spray_color] paint." /obj/item/paint_sprayer/CtrlClick() if (!isturf(loc)) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 2b4353629192..081365675f01 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -445,16 +445,16 @@ if(can_transmit_binary()) LAZYADD(., "- Robot talk: [prefix]+") -/obj/item/radio/examine(mob/user, distance) +/obj/item/radio/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (distance <= 1 || loc == user) var/list/channel_descriptions = get_accessible_channel_descriptions(user) if(length(channel_descriptions)) - to_chat(user, "\The [src] has the following channel [length(channel_descriptions) == 1 ? "shortcut" : "shortcuts"] configured:") + . += "\The [src] has the following channel [length(channel_descriptions) == 1 ? "shortcut" : "shortcuts"] configured:" for(var/line in channel_descriptions) - to_chat(user, line) + . += line if(panel_open) - to_chat(user, SPAN_WARNING("A panel on the back of \the [src] is hanging open.")) + . += SPAN_WARNING("A panel on the back of \the [src] is hanging open.") /obj/item/radio/attackby(obj/item/W, mob/user) user.set_machine(src) diff --git a/code/game/objects/items/devices/spy_bug.dm b/code/game/objects/items/devices/spy_bug.dm index ec7786717f7b..c3cf46fe3b81 100644 --- a/code/game/objects/items/devices/spy_bug.dm +++ b/code/game/objects/items/devices/spy_bug.dm @@ -29,11 +29,11 @@ QDEL_NULL(radio) return ..() -/obj/item/spy_bug/examine(mob/user, distance) +/obj/item/spy_bug/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 0) - to_chat(user, "It's a tiny camera, microphone, and transmission device in a happy union.") - to_chat(user, "Needs to be both configured and brought in contact with monitor device to be fully functional.") + . += "It's a tiny camera, microphone, and transmission device in a happy union." + . += "Needs to be both configured and brought in contact with monitor device to be fully functional." /obj/item/spy_bug/attack_self(mob/user) radio.attack_self(user) @@ -79,10 +79,10 @@ cameras.Cut() return ..() -/obj/item/spy_monitor/examine(mob/user, distance) +/obj/item/spy_monitor/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "The time '12:00' is blinking in the corner of the screen and \the [src] looks very cheaply made.") + . += "The time '12:00' is blinking in the corner of the screen and \the [src] looks very cheaply made." /obj/item/spy_monitor/attack_self(mob/user) radio.attack_self(user) diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm index 670c9f9856fe..27b044c6a1d0 100644 --- a/code/game/objects/items/devices/suit_cooling.dm +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -156,18 +156,15 @@ if(-INFINITY to 17) add_overlay("[icon_state]-battery-5") -/obj/item/suit_cooling_unit/examine(mob/user, distance) +/obj/item/suit_cooling_unit/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(distance >= 1) + if(distance > 1) return - if (on) - to_chat(user, "It's switched on and running.") + . += "It's switched on and running." else - to_chat(user, "It is switched off.") - + . += "It is switched off." if (cover_open) - to_chat(user, "The panel is open.") - + . += "The panel is open." if (cell) - to_chat(user, "The charge meter reads [round(cell.percent())]%.") + . += "The charge meter reads [round(cell.percent())]%." diff --git a/code/game/objects/items/devices/suit_sensor_jammer.dm b/code/game/objects/items/devices/suit_sensor_jammer.dm index 62a947a27ad3..af12560327a1 100644 --- a/code/game/objects/items/devices/suit_sensor_jammer.dm +++ b/code/game/objects/items/devices/suit_sensor_jammer.dm @@ -80,17 +80,16 @@ var/new_range = range + (rand(0,6) / severity) - (rand(0,3) / severity) set_range(new_range) -/obj/item/suit_sensor_jammer/examine(mob/user, distance) +/obj/item/suit_sensor_jammer/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 3) - var/list/message = list() - message += "This device appears to be [active ? "" : "in"]active and " + var/message = "This device appears to be [active ? "" : "in"]active and " var/obj/item/cell/cell = get_cell() if(cell) message += "displays a charge level of [cell.percent()]%." else message += "is lacking a cell." - to_chat(user, jointext(message,.)) + . += message /obj/item/suit_sensor_jammer/CanUseTopic(user, state) var/obj/item/cell/cell = get_cell() diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 22eba630568e..54ecd2dfd4ef 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -90,10 +90,10 @@ mytape = null update_icon() -/obj/item/taperecorder/examine(mob/user, distance) +/obj/item/taperecorder/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 && maintenance) - to_chat(user, "The wires are exposed.") + . += SPAN_NOTICE("The wires are exposed.") /obj/item/taperecorder/hear_talk(mob/living/M, msg, var/verb="says", decl/language/speaking=null) if(mytape && recording) @@ -532,9 +532,9 @@ /obj/item/magnetic_tape/loose/get_loose_tape() return -/obj/item/magnetic_tape/loose/examine(mob/user, distance) +/obj/item/magnetic_tape/loose/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "It looks long enough to hold [max_capacity] seconds worth of recording.") + . += SPAN_NOTICE("It looks long enough to hold [max_capacity] seconds worth of recording.") if(doctored && user.skill_check(SKILL_FORENSICS, SKILL_PROF)) - to_chat(user, "It has been tampered with...") + . += SPAN_WARNING("It has been tampered with...") diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm index 272de8433723..914286faa0f3 100644 --- a/code/game/objects/items/devices/tvcamera.dm +++ b/code/game/objects/items/devices/tvcamera.dm @@ -30,11 +30,11 @@ global.listening_objects += src . = ..() -/obj/item/camera/tvcamera/examine(mob/user) +/obj/item/camera/tvcamera/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "Video feed is currently: [video_enabled ? "Online" : "Offline"]") - to_chat(user, "Audio feed is currently: [radio.broadcasting ? "Online" : "Offline"]") - to_chat(user, "Photography setting is currently: [turned_on ? "On" : "Off"]") + . += "Video feed is currently: [video_enabled ? "Online" : "Offline"]" + . += "Audio feed is currently: [radio.broadcasting ? "Online" : "Offline"]" + . += "Photography setting is currently: [turned_on ? "On" : "Off"]" /obj/item/camera/tvcamera/attack_self(mob/user) add_fingerprint(user) diff --git a/code/game/objects/items/documents.dm b/code/game/objects/items/documents.dm index 28dfc7099b75..151aa5b302e3 100644 --- a/code/game/objects/items/documents.dm +++ b/code/game/objects/items/documents.dm @@ -10,7 +10,7 @@ _base_attack_force = 0 var/description_antag = "These conversations contain a massive amount of dirt on major figures: drugs, sex, money..." -/obj/item/documents/examine(mob/user) +/obj/item/documents/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(description_antag) - to_chat(user, description_antag) + . += description_antag diff --git a/code/game/objects/items/flame/flame_fuelled.dm b/code/game/objects/items/flame/flame_fuelled.dm index 07bcfe40859e..ce4c864b0a82 100644 --- a/code/game/objects/items/flame/flame_fuelled.dm +++ b/code/game/objects/items/flame/flame_fuelled.dm @@ -49,26 +49,26 @@ // End boilerplate. -/obj/item/flame/fuelled/examine(mob/user, distance) +/obj/item/flame/fuelled/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 && user) var/decl/material/fuel_reagent = GET_DECL(fuel_type) if(fuel_reagent) - to_chat(user, SPAN_NOTICE("\The [src] is designed to burn [fuel_reagent.liquid_name].")) + . += SPAN_NOTICE("\The [src] is designed to burn [fuel_reagent.liquid_name].") if(reagents?.maximum_volume) switch(reagents.total_volume / reagents.maximum_volume) if(0 to 0.1) - to_chat(user, SPAN_WARNING("\The [src] is nearly empty.")) + . += SPAN_WARNING("\The [src] is nearly empty.") if(0.1 to 0.25) - to_chat(user, SPAN_NOTICE("\The [src] is one-quarter full.")) + . += SPAN_NOTICE("\The [src] is one-quarter full.") if(0.25 to 0.5) - to_chat(user, SPAN_NOTICE("\The [src] is half full.")) + . += SPAN_NOTICE("\The [src] is half full.") if(0.5 to 0.75) - to_chat(user, SPAN_NOTICE("\The [src] is three-quarters full.")) + . += SPAN_NOTICE("\The [src] is three-quarters full.") else - to_chat(user, SPAN_NOTICE("\The [src] is full.")) + . += SPAN_NOTICE("\The [src] is full.") /obj/item/flame/fuelled/get_fuel() return REAGENT_VOLUME(reagents, fuel_type) diff --git a/code/game/objects/items/flashlights/_flashlight.dm b/code/game/objects/items/flashlights/_flashlight.dm index c9ee4c36f9b0..17f4b6655d97 100644 --- a/code/game/objects/items/flashlights/_flashlight.dm +++ b/code/game/objects/items/flashlights/_flashlight.dm @@ -73,10 +73,10 @@ else set_light(0) -/obj/item/flashlight/examine(mob/user, distance) +/obj/item/flashlight/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(light_wedge && isturf(loc)) - to_chat(user, FONT_SMALL(SPAN_NOTICE("\The [src] is facing [dir2text(dir)]."))) + . += FONT_SMALL(SPAN_NOTICE("\The [src] is facing [dir2text(dir)].")) /obj/item/flashlight/dropped(mob/user) . = ..() @@ -135,20 +135,20 @@ return ..() -/obj/item/flashlight/proc/inspect_vision(obj/item/organ/vision, mob/living/user) +/obj/item/flashlight/proc/inspect_vision(obj/item/organ/internal/vision, mob/living/user) var/mob/living/human/H = vision.owner if(H == user) //can't look into your own eyes buster return - if(!BP_IS_PROSTHETIC(vision)) + if(istype(vision) && !BP_IS_PROSTHETIC(vision)) if(vision.owner.stat == DEAD || H.is_blind()) //mob is dead or fully blind to_chat(user, SPAN_WARNING("\The [H]'s pupils do not react to the light!")) return if(H.has_genetic_condition(GENE_COND_XRAY)) to_chat(user, SPAN_NOTICE("\The [H]'s pupils give an eerie glow!")) - if(vision.damage) + if(vision.get_organ_damage()) to_chat(user, SPAN_WARNING("There's visible damage to [H]'s [vision.name]!")) else if(HAS_STATUS(H, STAT_BLURRY)) to_chat(user, SPAN_NOTICE("\The [H]'s pupils react slower than normally.")) diff --git a/code/game/objects/items/hourglass.dm b/code/game/objects/items/hourglass.dm index 98bb75f12811..75b4acd6de5b 100644 --- a/code/game/objects/items/hourglass.dm +++ b/code/game/objects/items/hourglass.dm @@ -43,7 +43,7 @@ /obj/item/hourglass/proc/sand_is_falling() return (world.time - last_flipped) < sand_duration -/obj/item/hourglass/examine(mob/user, distance, infix, suffix) +/obj/item/hourglass/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 2) var/sand_string = "not falling" @@ -60,7 +60,7 @@ sand_string = "almost halfway done falling" if(0.75 to 1) sand_string = "just starting to fall" - to_chat(user, SPAN_NOTICE("The [sand_material.solid_name] in \the [src] is [sand_string].")) + . += SPAN_NOTICE("The [sand_material.solid_name] in \the [src] is [sand_string].") /obj/item/hourglass/proc/get_sand_state(world_inventory_state) /// This is a fraction of the sand_duration. diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm index fc70e8902a54..9e99fdea07d2 100644 --- a/code/game/objects/items/paintkit.dm +++ b/code/game/objects/items/paintkit.dm @@ -13,9 +13,9 @@ /obj/item/kit/get_single_monetary_worth() . = max(round(..()), (custom ? 100 : 750) * uses) // Luxury good, value is entirely artificial. -/obj/item/kit/examine(mob/user) +/obj/item/kit/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It has [uses] use\s left.") + . += "It has [uses] use\s left." /obj/item/kit/inherit_custom_item_data(var/datum/custom_item/citem) custom = TRUE @@ -74,9 +74,9 @@ desc = "A kit containing all the needed tools and parts to repaint an exosuit." abstract_type = /obj/item/kit/paint -/obj/item/kit/paint/examine(mob/user) +/obj/item/kit/paint/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "This kit will add a '[new_name]' decal to an exosuit'.") + . += "This kit will add a '[new_name]' decal to an exosuit'." // exosuit kits. /obj/item/kit/paint/flames_red diff --git a/code/game/objects/items/rescuebag.dm b/code/game/objects/items/rescuebag.dm index 6e69603618ea..4ae13e1cd418 100644 --- a/code/game/objects/items/rescuebag.dm +++ b/code/game/objects/items/rescuebag.dm @@ -49,13 +49,13 @@ else return ..() -/obj/item/bodybag/rescue/examine(mob/user) +/obj/item/bodybag/rescue/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(airtank) - to_chat(user,"The pressure meter on \the [airtank] shows '[airtank.air_contents.return_pressure()] kPa'.") - to_chat(user,"The distribution valve on \the [airtank] is set to '[airtank.distribute_pressure] kPa'.") + . += "The pressure meter on \the [airtank] shows '[airtank.air_contents.return_pressure()] kPa'." + . += "The distribution valve on \the [airtank] is set to '[airtank.distribute_pressure] kPa'." else - to_chat(user, "The air tank is missing.") + . += SPAN_WARNING("The air tank is missing.") /obj/structure/closet/body_bag/rescue name = "rescue bag" @@ -126,15 +126,19 @@ /obj/structure/closet/body_bag/rescue/return_air() //Used to make stasis bags protect from vacuum. return atmo -/obj/structure/closet/body_bag/rescue/examine(mob/user) +/obj/structure/closet/body_bag/rescue/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(airtank) - to_chat(user,"The pressure meter on \the [airtank] shows '[airtank.air_contents.return_pressure()] kPa'.") - to_chat(user,"The distribution valve on \the [airtank] is set to '[airtank.distribute_pressure] kPa'.") + . += "The pressure meter on \the [airtank] shows '[airtank.air_contents.return_pressure()] kPa'." + . += "The distribution valve on \the [airtank] is set to '[airtank.distribute_pressure] kPa'." else - to_chat(user, "The air tank is missing.") - to_chat(user,"The pressure meter on [src] shows '[atmo.return_pressure()] kPa'.") + . += SPAN_WARNING("The air tank is missing.") + . += "The pressure meter on [src] shows '[atmo.return_pressure()] kPa'." + +/obj/structure/closet/body_bag/rescue/examined_by(mob/user, distance, infix, suffix) + . = ..() if(Adjacent(user)) //The bag's rather thick and opaque from a distance. - to_chat(user, "You peer into \the [src].") - for(var/mob/living/L in contents) - L.examine(arglist(args)) + to_chat(user, SPAN_INFO("You peer into \the [src].")) + for(var/mob/living/patient in contents) + patient.examined_by(user, distance, infix, suffix) + return TRUE \ No newline at end of file diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 1ddf859d3386..3e99d2da0c52 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -41,7 +41,7 @@ name = "left arm" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." icon_state = "l_arm" - model_info = 1 + model_info = TRUE bp_tag = BP_L_ARM material = /decl/material/solid/metal/steel @@ -49,7 +49,7 @@ name = "right arm" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." icon_state = "r_arm" - model_info = 1 + model_info = TRUE bp_tag = BP_R_ARM material = /decl/material/solid/metal/steel @@ -57,7 +57,7 @@ name = "left leg" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." icon_state = "l_leg" - model_info = 1 + model_info = TRUE bp_tag = BP_L_LEG material = /decl/material/solid/metal/steel @@ -65,7 +65,7 @@ name = "right leg" desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case." icon_state = "r_leg" - model_info = 1 + model_info = TRUE bp_tag = BP_R_LEG material = /decl/material/solid/metal/steel @@ -73,7 +73,7 @@ name = "head" desc = "A standard reinforced braincase, with spine-plugged neural socket and sensor gimbals." icon_state = "head" - model_info = 1 + model_info = TRUE bp_tag = BP_HEAD material = /decl/material/solid/metal/steel var/obj/item/flash/flash1 = null @@ -90,7 +90,7 @@ name = "torso" desc = "A heavily reinforced case containing cyborg logic boards, with space for a standard power cell." icon_state = "chest" - model_info = 1 + model_info = TRUE bp_tag = BP_CHEST material = /decl/material/solid/metal/steel var/wires = 0.0 diff --git a/code/game/objects/items/spirit_board.dm b/code/game/objects/items/spirit_board.dm index 6134ada23b94..8a539d6f69d0 100644 --- a/code/game/objects/items/spirit_board.dm +++ b/code/game/objects/items/spirit_board.dm @@ -9,9 +9,9 @@ var/planchette = "A" var/lastuser = null -/obj/item/spirit_board/examine(mob/user) - ..() - to_chat(user, "The planchette is sitting at \"[planchette]\".") +/obj/item/spirit_board/get_examine_strings(mob/user, distance, infix, suffix) + . = ..() + . += "The planchette is sitting at \"[planchette]\"." /obj/item/spirit_board/attack_hand(mob/user) if(user.check_intent(I_FLAG_GRAB) || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) diff --git a/code/game/objects/items/stacks/medical/medical_bandage.dm b/code/game/objects/items/stacks/medical/medical_bandage.dm index 4e13efa76e4e..23d81504abf9 100644 --- a/code/game/objects/items/stacks/medical/medical_bandage.dm +++ b/code/game/objects/items/stacks/medical/medical_bandage.dm @@ -30,11 +30,11 @@ . += "[poultice_reagent_requirements[reagent]] unit\s of [reagent_decl.liquid_name]" . = english_list(.) -/obj/item/stack/medical/bandage/examine(mob/user, distance) +/obj/item/stack/medical/bandage/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/poultice_requirement_string = get_poultice_requirement_string() if(poultice_requirement_string) - to_chat(user, SPAN_NOTICE("With a mixture of [poultice_requirement_string], you could use a bandage to make a herbal poultice.")) + . += SPAN_NOTICE("With a mixture of [poultice_requirement_string], you could use a bandage to make a herbal poultice.") /obj/item/stack/medical/bandage/attackby(obj/item/used_item, mob/living/user) diff --git a/code/game/objects/items/stacks/nanopaste.dm b/code/game/objects/items/stacks/nanopaste.dm index d88d703659ab..405c08b1f34c 100644 --- a/code/game/objects/items/stacks/nanopaste.dm +++ b/code/game/objects/items/stacks/nanopaste.dm @@ -50,7 +50,7 @@ to_chat(user, SPAN_WARNING("\The [target]'s [affecting.name] is flesh and blood, and cannot be repaired with \the [src].")) return TRUE - if(affecting.damage >= 30 && affecting.hatch_state != HATCH_OPENED) + if((affecting.brute_dam + affecting.burn_dam) >= 30 && affecting.hatch_state != HATCH_OPENED) to_chat(user, SPAN_WARNING("The damage to \the [affecting] is too severe to repair without an open maintenance hatch.")) return TRUE diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 2010f99039de..b95475cea8fe 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -76,13 +76,13 @@ return TRUE return FALSE -/obj/item/stack/examine(mob/user, distance) +/obj/item/stack/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - if(!uses_charge) - to_chat(user, "There [src.amount == 1 ? "is" : "are"] [src.amount] [src.singular_name]\s in the stack.") + if(uses_charge) + . += "There is enough charge for [get_amount()]." else - to_chat(user, "There is enough charge for [get_amount()].") + . += "There [src.amount == 1 ? "is" : "are"] [src.amount] [src.singular_name]\s in the stack." /obj/item/stack/on_update_icon() . = ..() @@ -473,6 +473,8 @@ /// Returns the string describing an amount of the stack, i.e. "an ingot" vs "a flag" /obj/item/stack/proc/get_string_for_amount(amount) if(amount == 1) + if(gender == PLURAL) + return "some [singular_name]" return indefinite_article ? "[indefinite_article] [singular_name]" : ADD_ARTICLE(singular_name) return "[amount] [plural_name]" diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index 028e5a4a01a1..2fa50e63988a 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -21,7 +21,7 @@ item_flags = 0 obj_flags = 0 _base_attack_force = 1 - var/replacement_turf_type = /turf/floor + var/replacement_turf_type = /turf/floor/plating /obj/item/stack/tile/proc/try_build_turf(var/mob/user, var/turf/target) diff --git a/code/game/objects/items/stools.dm b/code/game/objects/items/stools.dm index 07eeb6e20876..31c54d503a53 100644 --- a/code/game/objects/items/stools.dm +++ b/code/game/objects/items/stools.dm @@ -10,20 +10,22 @@ material_alteration = MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_COLOR obj_flags = OBJ_FLAG_SUPPORT_MOB | OBJ_FLAG_ROTATABLE _base_attack_force = 10 - var/padding_color - var/decl/material/padding_material + /// The padding extension type for this stool. If null, no extension is created and this stool cannot be padded. + var/padding_extension_type = /datum/extension/padding + var/decl/material/initial_padding_material + var/initial_padding_color /obj/item/stool/padded icon_state = "stool_padded_preview" //set for the map - padding_material = /decl/material/solid/organic/cloth - padding_color = "#9d2300" + initial_padding_material = /decl/material/solid/organic/cloth + initial_padding_color = "#9d2300" /obj/item/stool/Initialize() . = ..() if(!istype(material)) return INITIALIZE_HINT_QDEL - if(ispath(padding_material, /decl/material)) - padding_material = GET_DECL(padding_material) + if(padding_extension_type && initial_padding_material) + get_or_create_extension(src, padding_extension_type, initial_padding_material, initial_padding_color) update_icon() /obj/item/stool/bar @@ -32,16 +34,20 @@ /obj/item/stool/bar/padded icon_state = "bar_stool_padded_preview" - padding_material = /decl/material/solid/organic/cloth - padding_color = "#9d2300" + initial_padding_material = /decl/material/solid/organic/cloth + initial_padding_color = "#9d2300" /obj/item/stool/update_name() ..() if(material_alteration & MAT_FLAG_ALTERATION_NAME) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() SetName("[padding_material?.adjective_name || material.adjective_name] [base_name || initial(name)]") update_desc() /obj/item/stool/proc/update_desc() + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) desc = "A padded stool. Apply butt. It's made of [material.use_name] and covered with [padding_material.use_name]." else @@ -50,31 +56,19 @@ /obj/item/stool/on_update_icon() . = ..() icon_state = get_world_inventory_state() + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) - add_overlay(overlay_image(icon, "[icon_state]-padding", padding_color || padding_material.color, RESET_COLOR|RESET_ALPHA)) + add_overlay(overlay_image(icon, "[icon_state]-padding", padding_extension.get_padding_color(), RESET_COLOR|RESET_ALPHA)) // Strings. update_name() - update_desc() /obj/item/stool/apply_additional_mob_overlays(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing) . = ..() + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() if(padding_material) - overlay.add_overlay(overlay_image(icon, "[overlay.icon_state]-padding", padding_color || padding_material.color, RESET_COLOR|RESET_ALPHA)) - -/obj/item/stool/proc/add_padding(var/padding_type, var/new_padding_color) - padding_material = GET_DECL(padding_type) - padding_color = new_padding_color - update_icon() - -/obj/item/stool/proc/remove_padding() - if(padding_material) - var/list/res = padding_material.create_object(get_turf(src)) - if(padding_color) - for(var/obj/item/thing in res) - thing.set_color(padding_color) - padding_material = null - padding_color = null - update_icon() + overlay.add_overlay(overlay_image(icon, "[overlay.icon_state]-padding", padding_extension.get_padding_color(), RESET_COLOR|RESET_ALPHA)) /obj/item/stool/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone) if (prob(5)) @@ -98,62 +92,15 @@ /obj/item/stool/proc/dismantle() if(material) material.create_object(get_turf(src)) - if(padding_material) - padding_material.create_object(get_turf(src)) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + padding_extension?.remove_padding(do_icon_update = FALSE) qdel(src) -/// Return TRUE if the stool is capable of supporting padding. -/// This should not check existing padding state, just whether -/// the behavior is supported at all. -/obj/item/stool/proc/can_be_padded() - return TRUE - /obj/item/stool/attackby(obj/item/W, mob/user) if(IS_WRENCH(W)) playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) dismantle() return TRUE - else if(can_be_padded()) - if(istype(W,/obj/item/stack)) - if(padding_material) - to_chat(user, "\The [src] is already padded.") - return TRUE - var/obj/item/stack/C = W - if(C.get_amount() < 1) // How?? - qdel(C) - return TRUE - - var/padding_type - var/new_padding_color - if(istype(W, /obj/item/stack/tile) || istype(W, /obj/item/stack/material/bolt)) - padding_type = W.material?.type - new_padding_color = W.paint_color - - if(padding_type) - var/decl/material/padding_mat = GET_DECL(padding_type) - if(!istype(padding_mat) || !(padding_mat.flags & MAT_FLAG_PADDING)) - padding_type = null - - if(!padding_type) - to_chat(user, "You cannot pad \the [src] with that.") - return TRUE - - C.use(1) - if(!isturf(src.loc)) - user.drop_from_inventory(src) - src.dropInto(loc) - to_chat(user, "You add padding to \the [src].") - add_padding(padding_type, new_padding_color) - return TRUE - - else if(IS_WIRECUTTER(W)) - if(!padding_material) - to_chat(user, "\The [src] has no padding to remove.") - return TRUE - to_chat(user, "You remove the padding from \the [src].") - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) - remove_padding() - return TRUE return ..() /obj/item/stool/rustic @@ -162,9 +109,8 @@ icon = 'icons/obj/stool_rustic.dmi' material = /decl/material/solid/organic/wood/walnut color = /decl/material/solid/organic/wood/walnut::color - -/obj/item/stool/rustic/can_be_padded() - return FALSE + // Cannot be padded. + padding_extension_type = null /obj/item/stool/rustic/update_desc() desc = "A rustic stool carved from wood. It's a little rickety and wobbles under any weight, but it'll do." diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 6a100e476002..15e634163ec3 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -56,10 +56,10 @@ overlay.icon_state = "[overlay.icon_state]_empty" . = ..() -/obj/item/chems/water_balloon/examine(mob/user, distance, infix, suffix) +/obj/item/chems/water_balloon/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(distance == 1) - to_chat(user, "It's [reagents?.total_volume > 0? "filled with liquid sloshing around" : "empty"].") + if(distance <= 1) + . += "It's [reagents?.total_volume > 0? "filled with liquid sloshing around" : "empty"]." /obj/item/chems/water_balloon/on_reagent_change() if(!(. = ..())) @@ -672,10 +672,10 @@ _base_attack_force = 1 var/rule_info -/obj/item/toy/chess/examine(mob/user, distance, infix, suffix) +/obj/item/toy/chess/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(rule_info) - to_chat(user, SPAN_NOTICE(rule_info)) + . += SPAN_NOTICE(rule_info) /obj/item/toy/chess/pawn name = "oversized white pawn" diff --git a/code/game/objects/items/waterskin.dm b/code/game/objects/items/waterskin.dm index a9b1b3261a62..89baf179ab28 100644 --- a/code/game/objects/items/waterskin.dm +++ b/code/game/objects/items/waterskin.dm @@ -37,7 +37,8 @@ update_icon() return TRUE -/obj/item/chems/glass/waterskin/on_update_icon() // TODO: filled/empty sprites +// TODO: filled/empty sprites +/obj/item/chems/glass/waterskin/update_overlays() . = ..() // cuts overlays var/image/stopper_overlay = get_stopper_overlay() if(stopper_overlay) diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index f48b28762d0e..88fd20ce3f67 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -40,11 +40,11 @@ /obj/item/rcd/proc/can_use(var/mob/user,var/turf/T) return (user.Adjacent(T) && user.get_active_held_item() == src && !user.incapacitated()) -/obj/item/rcd/examine(mob/user) +/obj/item/rcd/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(src.type == /obj/item/rcd && loc == user) - to_chat(user, "The current mode is '[work_mode]'.") - to_chat(user, "It currently holds [stored_matter]/[max_stored_matter] matter-units.") + if(src.type == /obj/item/rcd && loc == user) // why tho + . += "The current mode is '[work_mode]'." + . += "It currently holds [stored_matter]/[max_stored_matter] matter-units." /obj/item/rcd/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/rcd_ammo)) @@ -133,10 +133,10 @@ /decl/material/solid/glass = sheets ) -/obj/item/rcd_ammo/examine(mob/user, distance) +/obj/item/rcd_ammo/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "It has [remaining] unit\s of matter left.") + . += SPAN_NOTICE("It has [remaining] unit\s of matter left.") /obj/item/rcd_ammo/large name = "high-capacity matter cartridge" @@ -302,7 +302,7 @@ cost = 9 delay = 2 SECONDS handles_type = /turf/wall - work_type = /turf/floor + work_type = /turf/floor/plating /decl/hierarchy/rcd_mode/deconstruction/wall/can_handle_work(var/obj/item/rcd/rcd, var/turf/wall/target) return ..() && (rcd.canRwall || !target.reinf_material) diff --git a/code/game/objects/items/weapons/RPD.dm b/code/game/objects/items/weapons/RPD.dm index cf1a465a2e33..6a4725991050 100644 --- a/code/game/objects/items/weapons/RPD.dm +++ b/code/game/objects/items/weapons/RPD.dm @@ -150,11 +150,11 @@ var/global/list/rpd_pipe_selection_skilled = list() if(prob(20)) spark_at(src, amount = 5, holder = src) -/obj/item/rpd/examine(var/mob/user, distance) +/obj/item/rpd/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) if(user.skill_check(SKILL_ATMOS,SKILL_BASIC)) - to_chat(user, "Current selection reads: [P]") + . += "[SPAN_NOTICE("Current selection reads:")] [P]" else to_chat(user, SPAN_WARNING("The readout is flashing some atmospheric jargon, you can't understand.")) diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index 0f0a7ecb4d02..19fd6dc47b10 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -22,10 +22,10 @@ RSF /decl/material/solid/metal/silver = MATTER_AMOUNT_TRACE ) -/obj/item/rsf/examine(mob/user, distance) +/obj/item/rsf/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(distance <= 0) - to_chat(user, "It currently holds [stored_matter]/30 fabrication-units.") + if(distance <= 1) + . += "It currently holds [stored_matter]/30 fabrication-units." /obj/item/rsf/attackby(obj/item/W, mob/user) if (istype(W, /obj/item/rcd_ammo)) diff --git a/code/game/objects/items/weapons/broom.dm b/code/game/objects/items/weapons/broom.dm index aaa799ed5a84..e6ac21587bba 100644 --- a/code/game/objects/items/weapons/broom.dm +++ b/code/game/objects/items/weapons/broom.dm @@ -5,11 +5,11 @@ matter = list(/decl/material/solid/organic/cloth = MATTER_AMOUNT_SECONDARY) var/bristle_material = /decl/material/solid/organic/plantmatter/grass/dry -/obj/item/staff/broom/examine(mob/user, distance, infix, suffix) +/obj/item/staff/broom/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(bristle_material) var/decl/material/bristle_mat = GET_DECL(bristle_material) - to_chat(user, "\The [src]'s bristles are made from [bristle_mat.name].") + . += "\The [src]'s bristles are made from [bristle_mat.name]." /obj/item/staff/broom/Initialize(ml, material_key, bristles_key) if(!isnull(bristles_key)) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index e8e041f23016..37ebe84e2db5 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -28,12 +28,12 @@ slot_flags = SLOT_ID var/signed_by -/obj/item/card/union/examine(mob/user) +/obj/item/card/union/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(signed_by) - to_chat(user, "It has been signed by [signed_by].") + . += "It has been signed by [signed_by]." else - to_chat(user, "It has a blank space for a signature.") + . += "It has a blank space for a signature." /obj/item/card/union/attackby(var/obj/item/thing, var/mob/user) if(IS_PEN(thing)) @@ -144,10 +144,10 @@ var/global/const/NO_EMAG_ACT = -50 disguise(card_choices[picked], usr) -/obj/item/card/emag/examine(mob/user) +/obj/item/card/emag/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(user.skill_check(SKILL_DEVICES,SKILL_ADEPT)) - to_chat(user, SPAN_WARNING("This ID card has some form of non-standard modifications.")) + . += SPAN_WARNING("This ID card has some form of non-standard modifications.") /obj/item/card/id name = "identification card" @@ -203,13 +203,16 @@ var/global/const/NO_EMAG_ACT = -50 if(href_list["look_at_id"] && istype(user)) var/turf/T = get_turf(src) if(T.CanUseTopic(user, global.view_topic_state) != STATUS_CLOSE) - user.examinate(src) + user.examine_verb(src) return TOPIC_HANDLED . = ..() -/obj/item/card/id/examine(mob/user, distance) +/obj/item/card/id/get_examine_strings(mob/user, distance, infix, suffix) + . = ..() + . += "It says '[get_display_name()]'." + +/obj/item/card/id/examined_by(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It says '[get_display_name()]'.") if(distance <= 1) show(user) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 5b9e2a62d934..8fb5342ed6e6 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -52,12 +52,12 @@ else add_overlay("[icon_state]-nocell") -/obj/item/defibrillator/examine(mob/user) +/obj/item/defibrillator/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(bcell) - to_chat(user, "The charge meter is showing [bcell.percent()]% charge left.") + . += "The charge meter is showing [bcell.percent()]% charge left." else - to_chat(user, "There is no cell inside.") + . += SPAN_WARNING("There is no cell inside.") /obj/item/defibrillator/ui_action_click() toggle_paddles() diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm index 11fa6ec87de2..55789ad967b9 100644 --- a/code/game/objects/items/weapons/ecigs.dm +++ b/code/game/objects/items/weapons/ecigs.dm @@ -36,12 +36,12 @@ desc = "A cheap Lucky 1337 electronic cigarette, styled like a traditional cigarette." icon = 'icons/clothing/mask/smokables/cigarette_electronic_cheap.dmi' -/obj/item/clothing/mask/smokable/ecig/simple/examine(mob/user) +/obj/item/clothing/mask/smokable/ecig/simple/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(ec_cartridge) - to_chat(user,SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.")) + . += SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.") else - to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) + . += SPAN_NOTICE("There's no cartridge connected.") /obj/item/clothing/mask/smokable/ecig/util name = "electronic cigarette" @@ -55,12 +55,12 @@ . = ..() set_color(pick(ecig_colors)) -/obj/item/clothing/mask/smokable/ecig/util/examine(mob/user) +/obj/item/clothing/mask/smokable/ecig/util/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(ec_cartridge) - to_chat(user,SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.")) + . += SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.") else - to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) + . += SPAN_NOTICE("There's no cartridge connected.") /obj/item/clothing/mask/smokable/ecig/deluxe name = "deluxe electronic cigarette" @@ -71,12 +71,12 @@ loaded_cell_type = loaded_cell_type || /obj/item/cell/device/high return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) //enough for four cartridges -/obj/item/clothing/mask/smokable/ecig/deluxe/examine(mob/user) +/obj/item/clothing/mask/smokable/ecig/deluxe/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(ec_cartridge) - to_chat(user,SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.")) + . += SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] units of liquid remaining.") else - to_chat(user,SPAN_NOTICE("There's no cartridge connected.")) + . += SPAN_NOTICE("There's no cartridge connected.") /obj/item/clothing/mask/smokable/ecig/proc/Deactivate() lit = FALSE @@ -187,9 +187,9 @@ volume = 20 atom_flags = ATOM_FLAG_OPEN_CONTAINER -/obj/item/chems/ecig_cartridge/examine(mob/user)//to see how much left +/obj/item/chems/ecig_cartridge/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "The cartridge has [reagents.total_volume] units of liquid remaining.") + . += "The cartridge has [reagents.total_volume] units of liquid remaining." //flavours /obj/item/chems/ecig_cartridge/blank diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index b48963aecd7a..5610bf4cf254 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -69,7 +69,7 @@ if(O.anchored || !(O.movable_flags & MOVABLE_FLAG_WHEELED)) return - var/obj/structure/bed/chair/C = istype(O, /obj/structure/bed/chair)? O : null + var/obj/structure/chair/C = istype(O, /obj/structure/chair)? O : null //#TODO: That could definitely be improved. Would suggest to use process_momentum but its only for thrownthing var/list/move_speed = list(1, 1, 1, 2, 2, 3) for(var/i in 1 to 6) diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index cc1018b16393..99b4cb049def 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -33,17 +33,17 @@ update_icon() -/obj/item/flamethrower/examine(mob/user, distance) +/obj/item/flamethrower/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) if(tank) - to_chat(user, SPAN_NOTICE("Release pressure is set to [throw_amount] kPa. The tank has about [round(tank.air_contents.return_pressure(), 10)] kPa left in it.")) + . += SPAN_NOTICE("Release pressure is set to [throw_amount] kPa. The tank has about [round(tank.air_contents.return_pressure(), 10)] kPa left in it.") else - to_chat(user, SPAN_WARNING("It has no tank installed.")) + . += SPAN_WARNING("It has no tank installed.") if(igniter) - to_chat(user, SPAN_NOTICE("It has \an [igniter] installed.")) + . += SPAN_NOTICE("It has \an [igniter] installed.") else - to_chat(user, SPAN_WARNING("It has no igniter installed.")) + . += SPAN_WARNING("It has no igniter installed.") /obj/item/flamethrower/Destroy() QDEL_NULL(welding_tool) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 020e4634208d..be47c0d7390d 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -189,10 +189,10 @@ qdel(src) -/obj/item/grenade/chem_grenade/examine(mob/user) +/obj/item/grenade/chem_grenade/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(detonator) - to_chat(user, "With attached [detonator.name]") + . += "It has \a [detonator] attached." /obj/item/grenade/chem_grenade/large name = "large chem grenade" diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 1f91dc035d8c..29b99d979ac2 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -47,15 +47,13 @@ return 0 return 1 -/obj/item/grenade/examine(mob/user, distance) +/obj/item/grenade/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(distance <= 0) + if(distance <= 0 && !isnull(det_time)) if(det_time > 1) - to_chat(user, "The timer is set to [det_time/10] seconds.") - return - if(det_time == null) - return - to_chat(user, "\The [src] is set for instant detonation.") + . += "The timer is set to [det_time/10] seconds." + else + . += "\The [src] is set for instant detonation." /obj/item/grenade/attack_self(mob/user) if(active) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index fa45d10b388f..6ef925bfad78 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -33,13 +33,13 @@ loc.visible_message(SPAN_WARNING("\The [src] attached to \the [loc] snap and fall away!"), range = 1) . = ..() -/obj/item/handcuffs/examine(mob/user) +/obj/item/handcuffs/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (current_health > 0 && get_max_health() > 0) var display = get_percent_health() if (display > 66) return - to_chat(user, SPAN_WARNING("They look [display < 33 ? "badly ": ""]damaged.")) + . += SPAN_WARNING("They look [display < 33 ? "badly ": ""]damaged.") /obj/item/handcuffs/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm index 41b4cae00d92..babc46c5ba58 100644 --- a/code/game/objects/items/weapons/material/ashtray.dm +++ b/code/game/objects/items/weapons/material/ashtray.dm @@ -5,17 +5,15 @@ icon_state = "ashtray" randpixel = 5 material = /decl/material/solid/metal/bronze - material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME + material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC var/max_butts = 10 -/obj/item/ashtray/examine(mob/user) +/obj/item/ashtray/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(material) - to_chat(user, "It's made of [material.solid_name].") if(contents.len >= max_butts) - to_chat(user, "It's full.") + . += SPAN_WARNING("It's full.") else if(contents.len) - to_chat(user, "It has [contents.len] cig butts in it.") + . += "It has [contents.len] cigarette butt\s in it." /obj/item/ashtray/on_update_icon() . = ..() diff --git a/code/game/objects/items/weapons/material/coins.dm b/code/game/objects/items/weapons/material/coins.dm index 1cdd0270a96d..7c63fbb4358f 100644 --- a/code/game/objects/items/weapons/material/coins.dm +++ b/code/game/objects/items/weapons/material/coins.dm @@ -85,11 +85,11 @@ ..() transform = null -/obj/item/coin/examine(mob/user, distance) +/obj/item/coin/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(denomination && (distance <= 1 || loc == user) && user.skill_check(SKILL_FINANCE, SKILL_ADEPT)) var/decl/currency/map_cur = GET_DECL(global.using_map.default_currency) - to_chat(user, "It looks like an antiquated minting of \a [denomination.name]. These days it would be worth around [map_cur.format_value(get_combined_monetary_worth())].") + . += "It looks like an antiquated minting of \a [denomination.name]. These days it would be worth around [map_cur.format_value(get_combined_monetary_worth())]." // Subtypes. /obj/item/coin/gold diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index 4150bd925322..cd4ddfb14100 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -1,7 +1,7 @@ // Glass shards /obj/item/shard - name = "shard" + name = SHARD_SHARD icon = 'icons/obj/items/shards.dmi' desc = "Made of nothing. How does this even exist?" // set based on material, if this desc is visible it's a bug (shards default to being made of glass) icon_state = "large" @@ -14,7 +14,7 @@ material = /decl/material/solid/glass material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME item_flags = ITEM_FLAG_CAN_HIDE_IN_SHOES - var/has_handle + var/has_handle = FALSE /obj/item/shard/Initialize(ml, material_key) . = ..() @@ -28,7 +28,7 @@ var/obj/item/organ/external/hand = GET_EXTERNAL_ORGAN(H, H.get_active_held_item_slot()) if(istype(hand) && !BP_IS_PROSTHETIC(hand)) to_chat(H, SPAN_DANGER("You slice your hand on \the [src]!")) - hand.take_external_damage(rand(5,10), used_weapon = src) + hand.take_damage(rand(5,10), inflicter = src) /obj/item/shard/set_material(var/new_material) ..(new_material) @@ -38,10 +38,10 @@ icon_state = "[material.shard_icon][pick("large", "medium", "small")]" update_icon() - if(material.shard_type) - SetName("[material.solid_name] [material.shard_type]") + if(material.shard_name) + SetName("[material.solid_name] [material.shard_name]") desc = "A small piece of [material.solid_name]. It looks sharp, you wouldn't want to step on it barefoot. Could probably be used as ... a throwing weapon?" - switch(material.shard_type) + switch(material.shard_name) if(SHARD_SPLINTER, SHARD_SHRAPNEL) gender = PLURAL else @@ -65,7 +65,7 @@ return TRUE if(istype(W, /obj/item/stack/cable_coil)) - if(!material || (material.shard_type in list(SHARD_SPLINTER, SHARD_SHRAPNEL))) + if(!material || (material.shard_name in list(SHARD_SPLINTER, SHARD_SHRAPNEL))) to_chat(user, SPAN_WARNING("\The [src] is not suitable for using as a shank.")) return TRUE if(has_handle) @@ -111,7 +111,7 @@ if(!affecting || BP_IS_PROSTHETIC(affecting)) continue to_chat(victim, SPAN_DANGER("You step on \the [src]!")) - affecting.take_external_damage(5, 0) + affecting.take_damage(5) if(affecting.can_feel_pain()) SET_STATUS_MAX(victim, STAT_WEAK, 3) return diff --git a/code/game/objects/items/weapons/material/swiss.dm b/code/game/objects/items/weapons/material/swiss.dm index 69d051a3aa9f..5d8c473145fb 100644 --- a/code/game/objects/items/weapons/material/swiss.dm +++ b/code/game/objects/items/weapons/material/swiss.dm @@ -86,9 +86,12 @@ add_fingerprint(user) return TRUE -/obj/item/knife/folding/swiss/examine(mob/user) +/obj/item/knife/folding/swiss/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, active_tool == SWISSKNF_CLOSED ? "It is closed." : "Its [lowertext(active_tool)] is folded out.") + if(active_tool == SWISSKNF_CLOSED) + . += "It is closed." + else + . += "Its [lowertext(active_tool)] is folded out." /obj/item/knife/folding/swiss/update_attack_force() ..() diff --git a/code/game/objects/items/weapons/material/urn.dm b/code/game/objects/items/weapons/material/urn.dm index fe640bd26a46..cf3257dbc06f 100644 --- a/code/game/objects/items/weapons/material/urn.dm +++ b/code/game/objects/items/weapons/material/urn.dm @@ -26,7 +26,7 @@ A.dropInto(loc) user.visible_message("\The [user] pours \the [A] out from \the [src].", "You pour \the [A] out from \the [src].") -/obj/item/urn/examine(mob/user) +/obj/item/urn/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(contents.len) - to_chat(user, "\The [src] is full.") \ No newline at end of file + . += "\The [src] is full." diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index e46bd9dddc49..87d93544aebe 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -109,9 +109,9 @@ if(reagents.total_volume < reagents.maximum_volume) add_to_reagents(refill_reagent, refill_rate) -/obj/item/mop/advanced/examine(mob/user) +/obj/item/mop/advanced/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, SPAN_NOTICE("The condenser switch is set to [refill_enabled ? "ON" : "OFF"].")) + . += SPAN_NOTICE("The condenser switch is set to [refill_enabled ? "ON" : "OFF"].") /obj/item/mop/advanced/Destroy() STOP_PROCESSING(SSobj, src) diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm index 37304ae49fcc..49426d67046f 100644 --- a/code/game/objects/items/weapons/paint.dm +++ b/code/game/objects/items/weapons/paint.dm @@ -1,69 +1,58 @@ -//NEVER USE THIS IT SUX -PETETHEGOAT -//THE GOAT WAS RIGHT - RKF - -/obj/item/chems/glass/paint - desc = "It's a paint bucket." +/obj/item/chems/glass/bucket/paint name = "paint bucket" + desc = "It's a paint bucket." icon = 'icons/obj/items/paint_bucket.dmi' - icon_state = "paintbucket" - item_state = "paintcan" material = /decl/material/solid/metal/aluminium w_class = ITEM_SIZE_NORMAL amount_per_transfer_from_this = 10 possible_transfer_amounts = @"[10,20,30,60]" volume = 60 - atom_flags = ATOM_FLAG_OPEN_CONTAINER var/pigment -/obj/item/chems/glass/paint/populate_reagents() +/obj/item/chems/glass/bucket/paint/populate_reagents() var/amt = reagents.maximum_volume if(pigment) amt = round(amt/2) add_to_reagents(pigment, amt) add_to_reagents(/decl/material/liquid/paint, amt) -/obj/item/chems/glass/paint/get_edible_material_amount(mob/eater) +/obj/item/chems/glass/bucket/paint/get_edible_material_amount(mob/eater) return 0 -/obj/item/chems/glass/paint/get_utensil_food_type() +/obj/item/chems/glass/bucket/paint/get_utensil_food_type() return null -/obj/item/chems/glass/paint/on_update_icon() - . = ..() - if(reagents?.total_volume) - add_overlay(overlay_image('icons/obj/reagentfillings.dmi', "paintbucket", reagents.get_color())) - -/obj/item/chems/glass/paint/red +/obj/item/chems/glass/bucket/paint/red name = "red paint bucket" pigment = /decl/material/liquid/pigment/red -/obj/item/chems/glass/paint/yellow +/obj/item/chems/glass/bucket/paint/yellow name = "yellow paint bucket" pigment = /decl/material/liquid/pigment/yellow -/obj/item/chems/glass/paint/green +/obj/item/chems/glass/bucket/paint/green name = "green paint bucket" pigment = /decl/material/liquid/pigment/green -/obj/item/chems/glass/paint/blue +/obj/item/chems/glass/bucket/paint/blue name = "blue paint bucket" pigment = /decl/material/liquid/pigment/blue -/obj/item/chems/glass/paint/purple +/obj/item/chems/glass/bucket/paint/purple name = "purple paint bucket" pigment = /decl/material/liquid/pigment/purple -/obj/item/chems/glass/paint/black +/obj/item/chems/glass/bucket/paint/black name = "black paint bucket" pigment = /decl/material/liquid/pigment/black -/obj/item/chems/glass/paint/white +/obj/item/chems/glass/bucket/paint/white name = "white paint bucket" pigment = /decl/material/liquid/pigment/white -/obj/item/chems/glass/paint/random +/obj/item/chems/glass/bucket/paint/random name = "odd paint bucket" -/obj/item/chems/glass/paint/random/Initialize() +/obj/item/chems/glass/bucket/paint/random/Initialize() pigment = pick(decls_repository.get_decl_paths_of_subtype(/decl/material/liquid/pigment)) . = ..() diff --git a/code/game/objects/items/weapons/secrets_disk.dm b/code/game/objects/items/weapons/secrets_disk.dm index ec806c4132fc..afcf3d485403 100644 --- a/code/game/objects/items/weapons/secrets_disk.dm +++ b/code/game/objects/items/weapons/secrets_disk.dm @@ -47,17 +47,15 @@ name = "'[pick(get_secret_project_codenames())]' project data disk" subject = "[pick(get_secret_project_types())] [pick(get_secret_project_nouns())] [pick(get_secret_project_descriptors())]" -/obj/item/disk/secret_project/examine(mob/user) +/obj/item/disk/secret_project/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(!locked) - to_chat(user, "With the disk's classified contents unlocked, \ - you peer into its preview screen and see [subject].") + if(locked) + . += "The disk is locked, you cannot see its contents." else - to_chat(user, "The disk is locked, you cannot see its contents.") + . += "With the disk's classified contents unlocked, you peer into its preview screen and see [subject]." /obj/item/disk/secret_project/emag_act(var/remaining_charges, var/mob/user) - to_chat(user, "The cryptographic lock on this disk is far too complex. \ - Your sequencer can't break the code.") + to_chat(user, "The cryptographic lock on this disk is far too complex. Your sequencer can't break the code.") return 0 /obj/item/disk/secret_project/attackby(obj/item/W, mob/user) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index e53ef9f89e04..d4b056a508c0 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -71,7 +71,7 @@ return TRUE return ..() -/obj/item/belt/holster/examine(mob/user) +/obj/item/belt/holster/examined_by(mob/user, distance, infix, suffix) . = ..() var/datum/extension/holster/holster = get_extension(src, /datum/extension/holster) holster.examine_holster(user) diff --git a/code/game/objects/items/weapons/storage/fancy/_fancy.dm b/code/game/objects/items/weapons/storage/fancy/_fancy.dm index 66774d7abaeb..7dbc2d00ee76 100644 --- a/code/game/objects/items/weapons/storage/fancy/_fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy/_fancy.dm @@ -44,9 +44,9 @@ if(add_contents_overlays()) compile_overlays() -/obj/item/box/fancy/examine(mob/user, distance) +/obj/item/box/fancy/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 1 || !key_type) return var/key_count = count_by_type(contents, key_type) - to_chat(user, "There [key_count == 1? "is" : "are"] [key_count] [initial(key_type.name)]\s in the box.") + . += "There [key_count == 1? "is" : "are"] [key_count] [initial(key_type.name)]\s in the box." diff --git a/code/game/objects/items/weapons/storage/med_pouch.dm b/code/game/objects/items/weapons/storage/med_pouch.dm index dbf2b2a6950a..5151fadcfdd9 100644 --- a/code/game/objects/items/weapons/storage/med_pouch.dm +++ b/code/game/objects/items/weapons/storage/med_pouch.dm @@ -38,9 +38,9 @@ Single Use Emergency Pouches add_overlay(cross_overlay) icon_state = "pack[!!(storage?.opened)]" -/obj/item/med_pouch/examine(mob/user) +/obj/item/med_pouch/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "Please read instructions before use.") + . += "Please read instructions before use." /obj/item/med_pouch/CanUseTopic() return STATUS_INTERACTIVE diff --git a/code/game/objects/items/weapons/storage/mre.dm b/code/game/objects/items/weapons/storage/mre.dm index 70bbf23d7775..247a52d5c5a2 100644 --- a/code/game/objects/items/weapons/storage/mre.dm +++ b/code/game/objects/items/weapons/storage/mre.dm @@ -30,9 +30,10 @@ MRE Stuff if(length(contents) && storage) storage.make_exact_fit() -/obj/item/mre/examine(mob/user) +/obj/item/mre/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, meal_desc) + if(meal_desc) + . += meal_desc /obj/item/mre/attack_self(mob/user) . = ..() diff --git a/code/game/objects/items/weapons/storage/parachute.dm b/code/game/objects/items/weapons/storage/parachute.dm index 3f6f6ac9f8c1..e129add2b64e 100644 --- a/code/game/objects/items/weapons/storage/parachute.dm +++ b/code/game/objects/items/weapons/storage/parachute.dm @@ -10,13 +10,13 @@ if(storage) storage.max_storage_space = max(1, round(storage.max_storage_space * 0.5)) -/obj/item/backpack/parachute/examine(mob/user) +/obj/item/backpack/parachute/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(Adjacent(user)) if(packed) - to_chat(user, SPAN_NOTICE("The parachute seems to be packed and ready to deploy.")) + . += SPAN_NOTICE("The parachute seems to be packed and ready to deploy.") else - to_chat(user, SPAN_DANGER("The parachute is unpacked.")) + . += SPAN_DANGER("The parachute is unpacked.") /obj/item/backpack/parachute/attack_self(mob/user) if(!user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 19eed2008471..860536919b89 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -67,11 +67,12 @@ var/datum/extension/lockable/lock = get_extension(src, /datum/extension/lockable) lock.ui_interact(user) -/obj/item/secure_storage/examine(mob/user, distance, infix, suffix) +/obj/item/secure_storage/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) var/datum/extension/lockable/lock = get_extension(src, /datum/extension/lockable) - to_chat(user, SPAN_INFO("The service panel is [lock.open ? "open" : "closed"].")) + if(lock) + . += SPAN_INFO("The service panel is [lock.open ? "open" : "closed"].") /obj/item/secure_storage/emag_act(remaining_charges, mob/user, feedback) var/datum/extension/lockable/lock = get_extension(src, /datum/extension/lockable) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index f1d555da4d0b..4a176ec5298b 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -151,10 +151,10 @@ hitcost = 20 // Addition made by Techhead0, thanks for fullfilling the todo! -/obj/item/baton/robot/examine(mob/user, distance, infix, suffix) +/obj/item/baton/robot/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance == 1) - to_chat(user, SPAN_NOTICE("The baton is running off an external power supply.")) + . += SPAN_NOTICE("The baton is running off an external power supply.") // Override proc for the stun baton module, found in PC Security synthetics // Refactored to fix #14470 - old proc defination increased the hitcost beyond diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index a69f68703139..a14c457a73d1 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -25,10 +25,10 @@ QDEL_NULL(ion_trail) . = ..() -/obj/item/tank/jetpack/examine(mob/living/user) +/obj/item/tank/jetpack/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(air_contents.total_moles < 5) - to_chat(user, "The meter on \the [src] indicates you are almost out of gas!") + . += SPAN_DANGER("The meter on \the [src] indicates you are almost out of gas!") /obj/item/tank/jetpack/verb/toggle_rockets() set name = "Toggle Jetpack Stabilization" diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index b2ecbe81e5ab..23aa1b6ab20e 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -85,7 +85,7 @@ var/global/list/global/tank_gauge_cache = list() . += gas_data.get_value() * air_contents.gas[gas] * GAS_WORTH_MULTIPLIER . = max(1, round(.)) -/obj/item/tank/examine(mob/user) +/obj/item/tank/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/descriptive if(!air_contents) @@ -107,13 +107,12 @@ var/global/list/global/tank_gauge_cache = list() descriptive = "cold" else descriptive = "bitterly cold" - to_chat(user, "\The [src] feels [descriptive].") + . += SPAN_NOTICE("\The [src] feels [descriptive].") if(proxyassembly.assembly || wired) - to_chat(user, "It seems to have [wired? "some wires ": ""][wired && proxyassembly.assembly? "and ":""][proxyassembly.assembly ? "some sort of assembly ":""]attached to it.") + . += SPAN_WARNING("It seems to have [wired? "some wires ": ""][wired && proxyassembly.assembly? "and ":""][proxyassembly.assembly ? "some sort of assembly ":""]attached to it.") if(valve_welded) - to_chat(user, "\The [src] emergency relief valve has been welded shut!") - + . += SPAN_WARNING("\The [src] emergency relief valve has been welded shut!") /obj/item/tank/attackby(var/obj/item/W, var/mob/user) if (istype(loc, /obj/item/assembly)) diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 8a9364e1e328..eaec2caa5867 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -187,8 +187,8 @@ /obj/item/duct_tape/attackby(obj/item/W, mob/user) return stuck? stuck.attackby(W, user) : ..() -/obj/item/duct_tape/examine() - return stuck ? stuck.examine(arglist(args)) : ..() +/obj/item/duct_tape/examined_by(mob/user, distance, infix, suffix) + return stuck ? stuck.examined_by(user, distance, infix, suffix) : ..() /obj/item/duct_tape/proc/attach(var/obj/item/W) stuck = W diff --git a/code/game/objects/items/weapons/tech_disks.dm b/code/game/objects/items/weapons/tech_disks.dm index 012acea79a65..c33fceca35b6 100644 --- a/code/game/objects/items/weapons/tech_disks.dm +++ b/code/game/objects/items/weapons/tech_disks.dm @@ -137,9 +137,9 @@ color = COLOR_DARK_BROWN var/data = 0 -/obj/item/disk/survey/examine(mob/user) +/obj/item/disk/survey/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "A tiny indicator on \the [src] shows it holds [data] good explorer point\s.") + . += "A tiny indicator on \the [src] shows it holds [data] good explorer point\s." /obj/item/disk/survey/get_base_value() . = holographic ? 0 : (sqrt(data) * 5) diff --git a/code/game/objects/items/weapons/towels.dm b/code/game/objects/items/weapons/towels.dm index 23bada102c8c..498f1abd25fc 100644 --- a/code/game/objects/items/weapons/towels.dm +++ b/code/game/objects/items/weapons/towels.dm @@ -37,7 +37,7 @@ // would this have any use aside from fluff strings? sandpaper grit maybe? desc = "A [is_soft ? "soft" : "rugged"] [material.adjective_name] [base_name][additional_description ? " [additional_description]" : null]." // 'a soft cotton towel' by default. also supports 'a rugged leather doormat used to blah blah' etc -/obj/item/towel/examine(mob/user, distance, infix, suffix) +/obj/item/towel/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(reagents?.total_volume && distance <= 1) var/liquid_adjective = "damp" @@ -52,7 +52,7 @@ liquid_adjective = "soaked through" if(1) liquid_adjective = "entirely saturated" - to_chat(user, "It is [liquid_adjective] with [reagents.get_coated_name()].") + . += "It is [liquid_adjective] with [reagents.get_coated_name()]." /obj/item/towel/set_material(new_material) . = ..() diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 3d6b8c86fc51..61276713a388 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -100,7 +100,7 @@ max_health = 25 var/countdown = 15 - var/temporary = 1 + var/temporary = TRUE var/mob/living/captured = null var/min_free_time = 50 var/max_free_time = 85 @@ -111,7 +111,7 @@ anchored = FALSE max_health = 5 - temporary = 0 + temporary = FALSE min_free_time = 5 max_free_time = 10 @@ -144,7 +144,7 @@ healthcheck() /obj/effect/energy_net/Move() - ..() + . = ..() if(buckled_mob) buckled_mob.forceMove(src.loc) diff --git a/code/game/objects/items/welding/electric_welder.dm b/code/game/objects/items/welding/electric_welder.dm index b3bd71761965..c46aa882f571 100644 --- a/code/game/objects/items/welding/electric_welder.dm +++ b/code/game/objects/items/welding/electric_welder.dm @@ -17,13 +17,15 @@ loaded_cell_type = loaded_cell_type || /obj/item/cell/high return ..(loaded_cell_type, /obj/item/cell, /datum/extension/loaded_cell, charge_value) -/obj/item/weldingtool/electric/examine(mob/user, distance) +/obj/item/weldingtool/electric/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/obj/item/cell/cell = get_cell() - if(!cell) - to_chat(user, "There is no [welding_resource] source attached.") + if(cell) + if(distance == 0) + . += "It has [get_fuel()] [welding_resource] remaining." + . += "\The [cell] is attached." else - to_chat(user, (distance == 0 ? "It has [get_fuel()] [welding_resource] remaining. " : "") + "[cell] is attached.") + . += "There is no [welding_resource] source attached." /obj/item/weldingtool/electric/afterattack(var/obj/O, var/mob/user, var/proximity) if(proximity && istype(O, /obj/structure/reagent_dispensers/fueltank) && !welding) diff --git a/code/game/objects/items/welding/weldbackpack.dm b/code/game/objects/items/welding/weldbackpack.dm index fe4bfd67ad24..5b8bdbb036a9 100644 --- a/code/game/objects/items/welding/weldbackpack.dm +++ b/code/game/objects/items/welding/weldbackpack.dm @@ -62,15 +62,35 @@ //Welder Pack //////////////////////////////////////////////////////////// /obj/item/chems/weldpack - name = "welding kit" - desc = "An unwieldy, heavy backpack with two massive fuel tanks. Comes with an attached welder gun." - icon = 'icons/obj/items/welderpack.dmi' - icon_state = ICON_STATE_WORLD - slot_flags = SLOT_BACK - w_class = ITEM_SIZE_HUGE - volume = 350 + name = "welding kit" + desc = "An unwieldy, heavy backpack with two massive fuel tanks. Comes with an attached welder gun." + icon = 'icons/obj/items/welderpack.dmi' + icon_state = ICON_STATE_WORLD + slot_flags = SLOT_BACK + w_class = ITEM_SIZE_HUGE + atom_flags = ATOM_FLAG_OPEN_CONTAINER + volume = 350 var/obj/item/weldingtool/weldpack/welder = /obj/item/weldingtool/weldpack +// Duplicated from welder tanks. +/obj/item/chems/weldpack/afterattack(obj/O, mob/user, proximity, click_parameters) + if (!ATOM_IS_OPEN_CONTAINER(src) || !proximity) + return + if(standard_dispenser_refill(user, O)) + return TRUE + if(standard_pour_into(user, O)) + return TRUE + if(handle_eaten_by_mob(user, O) != EATEN_INVALID) + return TRUE + if(user.check_intent(I_FLAG_HARM)) + if(standard_splash_mob(user, O)) + return TRUE + if(reagents && reagents.total_volume) + to_chat(user, SPAN_DANGER("You splash the contents of \the [src] onto \the [O].")) + reagents.splash(O, reagents.total_volume) + return TRUE + return ..() + /obj/item/chems/weldpack/populate_reagents() add_to_reagents(/decl/material/liquid/fuel, reagents.maximum_volume) @@ -85,31 +105,43 @@ QDEL_NULL(welder) . = ..() -/obj/item/chems/weldpack/attackby(obj/item/W, mob/user) - if(W.isflamesource() && get_fuel() && W.get_heat() >= 700 && prob(50)) +/obj/item/chems/weldpack/attackby(obj/item/used_item, mob/user) + + if(used_item.isflamesource() && get_fuel() && used_item.get_heat() >= 700 && prob(50)) playsound(src, 'sound/items/Welder2.ogg', 90, TRUE) try_detonate_reagents() log_and_message_admins("triggered a fueltank explosion.", user) return TRUE - if(IS_WELDER(W)) - var/obj/item/weldingtool/T = W - if(T.welding) - user.visible_message(SPAN_DANGER("\The [user] singes \his [src] with \his [W]!"), SPAN_DANGER("You singed your [src] with your [W]!")) + if(IS_WELDER(used_item)) + var/obj/item/weldingtool/tool = used_item + if(tool.welding) + var/decl/pronouns/pronouns = user.get_pronouns() + user.visible_message( + SPAN_DANGER("\The [user] singes [pronouns.his] [name] with [pronouns.his] [used_item.name]!"), + SPAN_DANGER("You singed your [name] with your [used_item.name]!") + ) - if(W == welder) + if(used_item == welder) return reattach_gun(user) - if(!T.tank) - to_chat(user, "\The [T] has no tank attached!") - reagents.trans_to_obj(T.tank, T.tank.reagents.maximum_volume) - to_chat(user, SPAN_NOTICE("You refuel \the [W].")) + if(!tool.tank) + to_chat(user, SPAN_WARNING("\The [tool] has no tank attached!")) + return TRUE + if(!reagents?.total_volume) + to_chat(user, SPAN_WARNING("\The [src] is empty!")) + return TRUE + reagents.trans_to_obj(tool.tank, tool.tank.reagents.maximum_volume) + to_chat(user, SPAN_NOTICE("You refuel \the [used_item].")) playsound(src, 'sound/effects/refill.ogg', 50, TRUE, -6) return TRUE - else if(istype(W, /obj/item/chems/welder_tank)) - var/obj/item/chems/welder_tank/tank = W + else if(istype(used_item, /obj/item/chems/welder_tank)) + if(!reagents?.total_volume) + to_chat(user, SPAN_WARNING("\The [src] is empty!")) + return TRUE + var/obj/item/chems/welder_tank/tank = used_item reagents.trans_to_obj(tank, tank.reagents.maximum_volume) - to_chat(user, SPAN_NOTICE("You refuel \the [W].")) + to_chat(user, SPAN_NOTICE("You refuel \the [used_item].")) playsound(src, 'sound/effects/refill.ogg', 50, TRUE, -6) return TRUE @@ -146,9 +178,9 @@ welder_image.pixel_x = 15 add_overlay(welder_image) -/obj/item/chems/weldpack/examine(mob/user) +/obj/item/chems/weldpack/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "[html_icon(src)] [reagents.total_volume] unit\s of fuel left!") + . += "[html_icon(src)] [reagents.total_volume] unit\s of fuel left!" /obj/item/chems/weldpack/dropped(mob/user) . = ..() diff --git a/code/game/objects/items/welding/weldingtool.dm b/code/game/objects/items/welding/weldingtool.dm index 6a2158acb84d..f46f50010915 100644 --- a/code/game/objects/items/welding/weldingtool.dm +++ b/code/game/objects/items/welding/weldingtool.dm @@ -62,10 +62,12 @@ /obj/item/weldingtool/isflamesource() . = isOn() -/obj/item/weldingtool/examine(mob/user, distance) +/obj/item/weldingtool/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if (tank) - to_chat(user, (distance <= 1 ? "It has [round(get_fuel(), 0.1)] [welding_resource] remaining. " : "") + "[tank] is attached.") + if(distance <= 1) + . += "It has [round(get_fuel(), 0.1)] [welding_resource] remaining." + if (tank) + . += "\The [tank] is attached." /obj/item/weldingtool/proc/insert_tank(var/obj/item/chems/welder_tank/T, var/mob/user, var/no_updates = FALSE, var/quiet = FALSE) if(tank && !ispath(tank)) diff --git a/code/game/objects/items/welding/weldingtool_tank.dm b/code/game/objects/items/welding/weldingtool_tank.dm index 7b5b455663a0..7cb3e5bd84a0 100644 --- a/code/game/objects/items/welding/weldingtool_tank.dm +++ b/code/game/objects/items/welding/weldingtool_tank.dm @@ -23,15 +23,15 @@ /obj/item/chems/welder_tank/populate_reagents() add_to_reagents(/decl/material/liquid/fuel, reagents.maximum_volume) -/obj/item/chems/welder_tank/examine(mob/user, distance) +/obj/item/chems/welder_tank/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 1) return if(reagents.total_volume <= 0) - to_chat(user, "It is empty.") + . += SPAN_WARNING("It is empty.") else - to_chat(user, "It contains [reagents.total_volume] units of liquid.") - to_chat(user, " It can hold up to [reagents.maximum_volume] units.") + . += "It contains [reagents.total_volume] units of liquid." + . += "It can hold up to [reagents.maximum_volume] units." /obj/item/chems/welder_tank/afterattack(obj/O, mob/user, proximity, click_parameters) if (!ATOM_IS_OPEN_CONTAINER(src) || !proximity) diff --git a/code/game/objects/structures/__structure.dm b/code/game/objects/structures/__structure.dm index 7d04f64b1694..dfe3a96be019 100644 --- a/code/game/objects/structures/__structure.dm +++ b/code/game/objects/structures/__structure.dm @@ -65,62 +65,60 @@ reinf_material = GET_DECL(reinf_material) . = ..() update_materials() + paint_verb ||= "painted" // fallback for the case of no material if(lock && !istype(loc)) lock = new /datum/lock(src, lock) if(!CanFluidPass()) fluid_update(TRUE) -/obj/structure/examine(mob/user, distance, infix, suffix) +/obj/structure/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(distance <= 3) - if(distance <= 1 && lock) - to_chat(user, SPAN_NOTICE("\The [src] appears to have a lock, opened by '[lock.lock_data]'.")) - + . += SPAN_NOTICE("\The [src] appears to have a lock, opened by '[lock.lock_data]'.") var/damage_desc = get_examined_damage_string() if(length(damage_desc)) - to_chat(user, damage_desc) - + . += damage_desc if(paint_color) var/decl/pronouns/structure_pronouns = get_pronouns() // so we can do 'have' for plural objects like sheets - to_chat(user, "\The [src] [structure_pronouns.has] been [paint_verb].") + . += "\The [src] [structure_pronouns.has] been [paint_verb]." +/obj/structure/get_examine_hints(mob/user, distance, infix, suffix) + . = ..() + if(distance <= 3) if(tool_interaction_flags & TOOL_INTERACTION_ANCHOR) if(anchored) - to_chat(user, SPAN_SUBTLE("Can be unanchored with a wrench or hammer, and moved around.")) + LAZYADD(., SPAN_SUBTLE("Can be unanchored with a wrench or hammer, and moved around.")) else - to_chat(user, SPAN_SUBTLE("Can be anchored in place with a wrench or hammer.")) - + LAZYADD(., SPAN_SUBTLE("Can be anchored in place with a wrench or hammer.")) if(tool_interaction_flags & TOOL_INTERACTION_DECONSTRUCT) var/removed_with = "a crowbar or hammer" if(material && material.removed_by_welder) removed_with = "a welding torch" if(tool_interaction_flags & TOOL_INTERACTION_ANCHOR) if(anchored) - to_chat(user, SPAN_SUBTLE("Can be deconstructed with [removed_with].")) + LAZYADD(., SPAN_SUBTLE("Can be deconstructed with [removed_with].")) else - to_chat(user, SPAN_SUBTLE("Can be deconstructed with [removed_with], if anchored down with a wrench or hammer first.")) + LAZYADD(., SPAN_SUBTLE("Can be deconstructed with [removed_with], if anchored down with a wrench or hammer first.")) else - to_chat(user, SPAN_SUBTLE("Can be deconstructed with [removed_with].")) - + LAZYADD(., SPAN_SUBTLE("Can be deconstructed with [removed_with].")) if(tool_interaction_flags & TOOL_INTERACTION_WIRING) if(tool_interaction_flags & TOOL_INTERACTION_ANCHOR) if(wired) if(anchored) - to_chat(user, SPAN_SUBTLE("Can have its wiring removed with wirecutters.")) + LAZYADD(., SPAN_SUBTLE("Can have its wiring removed with wirecutters.")) else - to_chat(user, SPAN_SUBTLE("Can have its wiring removed with wirecutters, if anchored down with a wrench first.")) + LAZYADD(., SPAN_SUBTLE("Can have its wiring removed with wirecutters, if anchored down with a wrench first.")) else if(anchored) - to_chat(user, SPAN_SUBTLE("Can have wiring installed with a cable coil.")) + LAZYADD(., SPAN_SUBTLE("Can have wiring installed with a cable coil.")) else - to_chat(user, SPAN_SUBTLE("Can have wiring installed with a cable coil, if anchored down with a wrench first.")) + LAZYADD(., SPAN_SUBTLE("Can have wiring installed with a cable coil, if anchored down with a wrench first.")) else if(wired) - to_chat(user, SPAN_SUBTLE("Can have its wiring removed with wirecutters.")) + LAZYADD(., SPAN_SUBTLE("Can have its wiring removed with wirecutters.")) else - to_chat(user, SPAN_SUBTLE("Can have wiring installed with a cable coil.")) + LAZYADD(., SPAN_SUBTLE("Can have wiring installed with a cable coil.")) /obj/structure/proc/mob_breakout(var/mob/living/escapee) set waitfor = FALSE @@ -254,6 +252,12 @@ ) victim.standard_weapon_hit_effects(S, user, S.expend_attack_force()*2, BP_HEAD) qdel(grab) + return TRUE + else if(can_buckle && !buckled_mob && istype(victim) && istype(user)) + user.visible_message(SPAN_NOTICE("\The [user] attempts to put \the [victim] onto \the [src]!")) + if(do_after(user, 2 SECONDS, src) && !QDELETED(victim) && !QDELETED(user) && !QDELETED(grab) && user_buckle_mob(victim, user)) + qdel(grab) + return TRUE else if(atom_flags & ATOM_FLAG_CLIMBABLE) var/obj/occupied = turf_is_crowded() if (occupied) diff --git a/code/game/objects/structures/_structure_icon.dm b/code/game/objects/structures/_structure_icon.dm index 3f3c7e7e4ec9..12bbc26f1602 100644 --- a/code/game/objects/structures/_structure_icon.dm +++ b/code/game/objects/structures/_structure_icon.dm @@ -56,6 +56,7 @@ var/global/list/default_noblend_objects = list(/obj/machinery/door/window, /obj/ var/list/dirs var/list/other_dirs + // TODO: Allow structures to limit dirs? for(var/direction in global.alldirs) var/turf/T = get_step(src, direction) if(T) diff --git a/code/game/objects/structures/barrels/cask_rack.dm b/code/game/objects/structures/barrels/cask_rack.dm index cbe68ef5f7ee..c8e5cebc6184 100644 --- a/code/game/objects/structures/barrels/cask_rack.dm +++ b/code/game/objects/structures/barrels/cask_rack.dm @@ -19,10 +19,10 @@ if(try_stack_barrel(stackable) && length(contents) >= max_stack) return -/obj/structure/cask_rack/examine(mob/user, distance, infix, suffix) +/obj/structure/cask_rack/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(length(contents)) - to_chat(user, SPAN_NOTICE("It contains [english_list(contents)].")) + . += SPAN_NOTICE("It contains [english_list(contents)].") /obj/structure/cask_rack/handle_mouse_drop(atom/over, mob/user, params) if(isturf(over) && user.Adjacent(over) && Adjacent(over) && try_unstack_barrel(target = over, user = user)) diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index b867efb2361b..d47f2eef2fd7 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -17,17 +17,17 @@ if(initial) . -= "Off" -/obj/structure/sign/double/barsign/examine(mob/user) +/obj/structure/sign/double/barsign/get_examine_strings(mob/user, distance, infix, suffix) . = ..() switch(icon_state) if("Off") - to_chat(user, "It appears to be switched off.") + . += "It appears to be switched off." if("narsiebistro") - to_chat(user, "It shows a picture of a large black and red being. Spooky!") + . += "It shows a picture of a large black and red being. Spooky!" if("on", "empty") - to_chat(user, "The lights are on, but there's no picture.") + . += "The lights are on, but there's no picture." else - to_chat(user, "It says '[icon_state]'.") + . += "It says '[icon_state]'." /obj/structure/sign/double/barsign/Initialize() . = ..() diff --git a/code/game/objects/structures/beds/bed.dm b/code/game/objects/structures/beds/bed.dm index fdcdff9a143e..058eff22fd9f 100644 --- a/code/game/objects/structures/beds/bed.dm +++ b/code/game/objects/structures/beds/bed.dm @@ -1,13 +1,9 @@ // Beds... get your mind out of the gutter, they're for sleeping! -// TODO by end of Q2 2025: Repath /obj/structure/bed/chair to just /obj/structure/chair. -// Remaining steps: -// - Move padding interactions and padding_color var onto an extension -// - Allow /obj/structure/grab_attack to handle buckling /obj/structure/bed name = "bed" desc = "A raised, padded platform for sleeping on. This one has straps for ensuring restful snoozing in microgravity." - icon = 'icons/obj/furniture.dmi' - icon_state = "bed" + icon = 'icons/obj/structures/furniture/bed.dmi' + icon_state = ICON_STATE_WORLD anchored = TRUE can_buckle = TRUE buckle_dir = SOUTH @@ -20,141 +16,73 @@ parts_type = /obj/item/stack/material/rods user_comfort = 1 obj_flags = OBJ_FLAG_SUPPORT_MOB - var/base_icon = "bed" - var/padding_color + monetary_worth_multiplier = 2.5 // Utility structures should be worth more than their matter (wheelchairs, rollers, etc). + /// The padding extension type for this bed. If null, no extension is created and this bed cannot be padded. + var/padding_extension_type = /datum/extension/padding + var/decl/material/initial_padding_material + var/initial_padding_color + +/obj/structure/bed/Initialize(ml, _mat, _reinf_mat) + . = ..() + if(padding_extension_type && initial_padding_material) + get_or_create_extension(src, padding_extension_type, initial_padding_material, initial_padding_color) /obj/structure/bed/user_can_mousedrop_onto(mob/user, atom/being_dropped, incapacitation_flags, params) if(user == being_dropped) return user.Adjacent(src) && !user.incapacitated(INCAPACITATION_STUNNED|INCAPACITATION_KNOCKOUT) return ..() -/obj/structure/bed/get_base_value() - . = round(..() * 2.5) // Utility structures should be worth more than their matter (wheelchairs, rollers, etc). - /obj/structure/bed/get_surgery_surface_quality(mob/living/victim, mob/living/user) return OPERATE_PASSABLE /obj/structure/bed/get_surgery_success_modifier(delicate) return delicate ? -5 : 0 -/obj/structure/bed/update_material_name() - if(reinf_material) - SetName("[reinf_material.adjective_name] [initial(name)]") +/obj/structure/bed/update_material_name(override_name) + var/base_name = override_name || initial(name) + var/new_name = base_name + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() + if(padding_material) + SetName("[padding_material.adjective_name] [base_name]") else if(material) - SetName("[material.adjective_name] [initial(name)]") + new_name = "[material.adjective_name] [base_name]" + if(name_prefix) + new_name = "[name_prefix] [new_name]" + SetName(new_name) + +/obj/structure/bed/update_material_desc(override_desc) + var/base_desc = override_desc || initial(desc) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() + if(padding_material) + desc = "[base_desc] It's made of [material.use_name] and covered with [padding_material.use_name]." else - SetName(initial(name)) + desc = "[base_desc] It's made of [material.use_name]." -/obj/structure/bed/update_material_desc() - if(reinf_material) - desc = "[initial(desc)] It's made of [material.use_name] and covered with [reinf_material.use_name]." - else - desc = "[initial(desc)] It's made of [material.use_name]." - -// Reuse the cache/code from stools, todo maybe unify. /obj/structure/bed/on_update_icon() ..() - icon_state = base_icon - if(istype(reinf_material)) - if(material_alteration & MAT_FLAG_ALTERATION_COLOR) - add_overlay(overlay_image(icon, "[icon_state]_padding", padding_color || reinf_material.color, RESET_COLOR)) - else - add_overlay(overlay_image(icon, "[icon_state]_padding")) + icon_state = ICON_STATE_WORLD + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() + if(padding_material) + add_overlay(overlay_image(icon, "[icon_state]_padding", material_alteration & MAT_FLAG_ALTERATION_COLOR ? padding_extension.get_padding_color() : null, RESET_COLOR|RESET_ALPHA)) +// Used to allow things to pass over dense beds, e.g. rollerbeds, ironing boards /obj/structure/bed/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(istype(mover) && mover.checkpass(PASS_FLAG_TABLE)) - return 1 - return ..() - -/obj/structure/bed/explosion_act(severity) - . = ..() - if(. && !QDELETED(src) && (severity == 1 || (severity == 2 && prob(50)) || (severity == 3 && prob(5)))) - physically_destroyed() - -/obj/structure/bed/proc/can_apply_padding() - return TRUE - -/obj/structure/bed/attackby(obj/item/used_item, mob/user) - - if((. = ..())) - return - - if(istype(used_item, /obj/item/stack) && can_apply_padding()) - - if(reinf_material) - to_chat(user, SPAN_WARNING("\The [src] is already padded.")) - return TRUE - - var/obj/item/stack/cloth = used_item - if(cloth.get_amount() < 1) - to_chat(user, SPAN_WARNING("You need at least one unit of material to pad \the [src].")) - return TRUE - - var/padding_type - var/new_padding_color - if(istype(used_item, /obj/item/stack/tile) || istype(used_item, /obj/item/stack/material/bolt)) - padding_type = used_item.material?.type - new_padding_color = used_item.paint_color - - if(padding_type) - var/decl/material/padding_mat = GET_DECL(padding_type) - if(!istype(padding_mat) || !(padding_mat.flags & MAT_FLAG_PADDING)) - padding_type = null - - if(!padding_type) - to_chat(user, SPAN_WARNING("You cannot pad \the [src] with that.")) - return TRUE - - cloth.use(1) - if(!isturf(src.loc)) - src.forceMove(get_turf(src)) - playsound(src.loc, 'sound/effects/rustle5.ogg', 50, 1) - to_chat(user, SPAN_NOTICE("You add padding to \the [src].")) - add_padding(padding_type, new_padding_color) - return TRUE - - if(IS_WIRECUTTER(used_item)) - if(!reinf_material) - to_chat(user, SPAN_WARNING("\The [src] has no padding to remove.")) - else - to_chat(user, SPAN_NOTICE("You remove the padding from \the [src].")) - playsound(src, 'sound/items/Wirecutter.ogg', 100, 1) - remove_padding() - return TRUE - -/obj/structure/bed/grab_attack(obj/item/grab/grab, mob/user) - var/mob/living/victim = grab.get_affecting_mob() - if(istype(victim) && istype(user)) - user.visible_message(SPAN_NOTICE("\The [user] attempts to put \the [victim] onto \the [src]!")) - if(do_after(user, 2 SECONDS, src) && !QDELETED(victim) && !QDELETED(user) && !QDELETED(grab) && user_buckle_mob(victim, user)) - qdel(grab) return TRUE return ..() -/obj/structure/bed/proc/add_padding(var/padding_type, var/new_padding_color) - reinf_material = GET_DECL(padding_type) - padding_color = new_padding_color - update_icon() - -/obj/structure/bed/proc/remove_padding() - if(reinf_material) - var/list/res = reinf_material.create_object(get_turf(src)) - if(padding_color) - for(var/obj/item/thing in res) - thing.set_color(padding_color) - reinf_material = null - padding_color = null - update_icon() - /obj/structure/bed/psych name = "psychiatrist's couch" desc = "For prime comfort during psychiatric evaluations." - icon_state = "psychbed" + icon = 'icons/obj/structures/furniture/bed_psych.dmi' material = /decl/material/solid/organic/wood/walnut /obj/structure/bed/psych/leather - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/padded material = /decl/material/solid/metal/aluminium - reinf_material = /decl/material/solid/organic/cloth + initial_padding_material = /decl/material/solid/organic/cloth diff --git a/code/game/objects/structures/beds/bedroll.dm b/code/game/objects/structures/beds/bedroll.dm index 27d710d9cdb4..27971d1b66f0 100644 --- a/code/game/objects/structures/beds/bedroll.dm +++ b/code/game/objects/structures/beds/bedroll.dm @@ -1,7 +1,7 @@ /obj/item/bedroll name = "bedroll" desc = "A thick, padded bag big enough for a human to huddle in, rolled into a tight tube for easy-ish transport." - icon = 'icons/obj/structures/bedroll.dmi' + icon = 'icons/obj/structures/bedroll_rolled.dmi' icon_state = ICON_STATE_WORLD w_class = ITEM_SIZE_LARGE material = /decl/material/solid/organic/leather @@ -44,8 +44,6 @@ desc = "A thick, padded bag big enough for a human to huddle in. It's better than sleeping on the ground." user_comfort = 0.65 icon = 'icons/obj/structures/bedroll.dmi' - icon_state = "bedroll" - base_icon = "bedroll" w_class = ITEM_SIZE_LARGE anchored = FALSE material = /decl/material/solid/organic/leather diff --git a/code/game/objects/structures/beds/rollerbed.dm b/code/game/objects/structures/beds/rollerbed.dm index 4c0285d3b788..a919d9f30bc9 100644 --- a/code/game/objects/structures/beds/rollerbed.dm +++ b/code/game/objects/structures/beds/rollerbed.dm @@ -9,11 +9,13 @@ buckle_pixel_shift = list("x" = 0, "y" = 0, "z" = 6) movable_flags = MOVABLE_FLAG_WHEELED tool_interaction_flags = 0 + padding_extension_type = null // Cannot be padded. var/item_form_type = /obj/item/roller //The folded-up object path. var/obj/item/chems/beaker var/iv_attached = 0 var/iv_stand = TRUE +// this completely circumvents normal bed icon updating, does this really even need to be a bed subtype? /obj/structure/bed/roller/on_update_icon() cut_overlays() if(density) @@ -32,9 +34,6 @@ iv.pixel_y = 6 add_overlay(iv) -/obj/structure/bed/roller/can_apply_padding() - return FALSE - /obj/structure/bed/roller/attackby(obj/item/I, mob/user) if(iv_stand && !beaker && istype(I, /obj/item/chems)) if(!user.try_unequip(I, src)) diff --git a/code/game/objects/structures/beds/simple_bed.dm b/code/game/objects/structures/beds/simple_bed.dm index 100527ea2937..3092fc63a717 100644 --- a/code/game/objects/structures/beds/simple_bed.dm +++ b/code/game/objects/structures/beds/simple_bed.dm @@ -1,10 +1,10 @@ /obj/structure/bed/simple desc = "A slatted wooden bed." - icon = 'icons/obj/structures/simple_bed.dmi' + icon = 'icons/obj/structures/furniture/bed_simple.dmi' icon_state = "bed_padded_preview" // For map editor preview purposes parts_type = /obj/item/stack/material/plank material = /decl/material/solid/organic/wood/oak - reinf_material = /decl/material/solid/organic/plantmatter/grass/dry + initial_padding_material = /decl/material/solid/organic/plantmatter/grass/dry color = /decl/material/solid/organic/plantmatter/grass/dry::color anchored = TRUE user_comfort = 0.8 @@ -43,11 +43,11 @@ material = /decl/material/solid/organic/wood/ebony /obj/structure/bed/simple/ebony/cloth - reinf_material = /decl/material/solid/organic/cloth + initial_padding_material = /decl/material/solid/organic/cloth color = /decl/material/solid/organic/cloth::color /obj/structure/bed/simple/crafted - reinf_material = null + initial_padding_material = null icon_state = "bed" color = /decl/material/solid/organic/wood/oak::color diff --git a/code/game/objects/structures/beds/travois.dm b/code/game/objects/structures/beds/travois.dm deleted file mode 100644 index b1ce37f85400..000000000000 --- a/code/game/objects/structures/beds/travois.dm +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Travois used to drag mobs in low-tech settings. - */ -// TODO: Should this really be a bed subtype? -// Only really needs the base_icon and grab_attack handling from beds, doesn't it? -/obj/structure/bed/travois - name = "travois" - anchored = FALSE - icon_state = ICON_STATE_WORLD - base_icon = ICON_STATE_WORLD - icon = 'icons/obj/structures/travois.dmi' - buckle_pixel_shift = list("x" = 0, "y" = 0, "z" = 6) - movable_flags = MOVABLE_FLAG_WHEELED - user_comfort = 0 - material = /decl/material/solid/organic/wood/oak - -/obj/structure/bed/travois/can_apply_padding() - return FALSE \ No newline at end of file diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 5f4dcebb62d3..ccfe1f59c914 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -116,16 +116,16 @@ LINEN BINS /obj/structure/bedsheetbin/proc/get_amount() return stored + LAZYLEN(sheets) -/obj/structure/bedsheetbin/examine(mob/user) +/obj/structure/bedsheetbin/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/curamount = get_amount() if(curamount < 1) - to_chat(user, "There are no bed sheets in the bin.") + . += "There are no bed sheets in the bin." return if(curamount == 1) - to_chat(user, "There is one bed sheet in the bin.") + . += "There is one bed sheet in the bin." return - to_chat(user, "There are [curamount] bed sheets in the bin.") + . += "There are [curamount] bed sheets in the bin." /obj/structure/bedsheetbin/on_update_icon() ..() diff --git a/code/game/objects/structures/benches/bench.dm b/code/game/objects/structures/benches/bench.dm index c2b6fb98c3bb..30cf502c7213 100644 --- a/code/game/objects/structures/benches/bench.dm +++ b/code/game/objects/structures/benches/bench.dm @@ -1,115 +1,104 @@ // These are benches with backs. For backless benches that can't be buckled to, check for /obj/structure/table/bench. -/obj/structure/bed/chair/bench +/obj/structure/chair/bench name = "bench" desc = "A simple slatted bench." - icon = 'icons/obj/structures/benches.dmi' - icon_state = "bench_standing" - base_icon = "bench" + icon = 'icons/obj/structures/furniture/bench.dmi' + icon_state = ICON_STATE_WORLD + "_standing" color = WOOD_COLOR_GENERIC - reinf_material = null + initial_padding_material = null material = /decl/material/solid/organic/wood/oak obj_flags = 0 anchored = TRUE - var/connect_neighbors = TRUE - -/obj/structure/bed/chair/bench/should_have_alpha_mask() - return simulated && isturf(loc) && connect_neighbors && !(locate(/obj/structure/bed/chair/bench) in get_step(loc, SOUTH)) - -/obj/structure/bed/chair/bench/single - name = "slatted seat" - base_icon = "bench_standing" - anchored = FALSE - connect_neighbors = FALSE - -/obj/structure/bed/chair/bench/Initialize(mapload) - . = ..() - if(connect_neighbors) - . = INITIALIZE_HINT_LATELOAD + /// A bitfield of connected neighbors. + var/neighbors = 0 + +/obj/structure/chair/bench/should_have_alpha_mask() + if(!simulated || !isturf(loc)) + return FALSE + var/obj/structure/chair/bench/south_neighbor = locate() in get_step(loc, SOUTH) + if(can_visually_connect_to(south_neighbor)) // if we're connected to a south neighbor don't add an alpha mask + return TRUE + return TRUE + +// TODO: make this use the generic structure smoothing system? +/obj/structure/chair/bench/can_visually_connect_to(var/obj/structure/chair/bench/other) + return istype(other) && other.dir == dir && other.icon == icon && other.material == material + +/obj/structure/chair/bench/Initialize(mapload) + ..() + return INITIALIZE_HINT_LATELOAD -/obj/structure/bed/chair/bench/LateInitialize(mapload) +/obj/structure/chair/bench/LateInitialize(mapload) ..() - if(connect_neighbors) - if(mapload) - update_base_icon() - else - update_neighbors() + if(mapload) + recalculate_connections() + else + update_neighbors() -/obj/structure/bed/chair/bench/Destroy() +/obj/structure/chair/bench/Destroy() var/oldloc = loc . = ..() - if(connect_neighbors) - update_neighbors(oldloc) + update_neighbors(oldloc) -/obj/structure/bed/chair/bench/set_dir() +/obj/structure/chair/bench/set_dir() var/olddir = dir . = ..() - if(. && connect_neighbors) + if(.) update_neighbors(update_dir = olddir, skip_icon_update = TRUE) update_neighbors(update_dir = dir) -/obj/structure/bed/chair/bench/Move() +/obj/structure/chair/bench/Move() var/oldloc = loc . = ..() - if(. && connect_neighbors) + if(.) update_neighbors(oldloc, skip_icon_update = TRUE) update_neighbors(loc) -/obj/structure/bed/chair/bench/proc/update_neighbors(update_loc = loc, update_dir = dir, skip_icon_update) - if(!connect_neighbors) - return +/obj/structure/chair/bench/proc/update_neighbors(update_loc = loc, update_dir = dir, skip_icon_update) if(!skip_icon_update) - update_base_icon() + recalculate_connections() if(!isturf(update_loc)) return for(var/stepdir in list(turn(update_dir, -90), turn(update_dir, 90))) - for(var/obj/structure/bed/chair/bench/other in get_step(update_loc, stepdir)) - other.update_base_icon() - -/obj/structure/bed/chair/bench/proc/update_base_icon() - - if(!connect_neighbors) - return - - base_icon = initial(base_icon) + for(var/obj/structure/chair/bench/other in get_step(update_loc, stepdir)) + other.recalculate_connections() +// TODO: Make this use base structure smoothing eventually? Somehow? +/obj/structure/chair/bench/proc/recalculate_connections() + neighbors = 0 if(!isturf(loc)) - base_icon = "[base_icon]_standing" + neighbors = 0 else - var/neighbors = 0 - var/left_dir = turn(dir, -90) - var/right_dir = turn(dir, 90) - for(var/checkdir in list(left_dir, right_dir)) + for(var/checkdir in list(turn(dir, -90), turn(dir, 90))) var/turf/check_turf = get_step(loc, checkdir) - for(var/obj/structure/bed/chair/bench/other in check_turf) - if(other.connect_neighbors && other.dir == dir && initial(other.base_icon) == base_icon && other.material == material) + for(var/obj/structure/chair/bench/other in check_turf) + // TODO: Make this use normal structure smoothing helpers. + if(other.dir == dir && other.icon == icon && other.material == material) neighbors |= checkdir break - - if(neighbors & left_dir) - if(neighbors & right_dir) - base_icon = "[base_icon]_middle" - else - base_icon = "[base_icon]_right" - else if(neighbors & right_dir) - base_icon = "[base_icon]_left" - else - base_icon = "[base_icon]_standing" - update_icon() -/obj/structure/bed/chair/bench/proc/get_material_icon() - return material?.bench_icon - -/obj/structure/bed/chair/bench/update_materials() +/obj/structure/chair/bench/get_base_icon() . = ..() - var/icon/material_icon = get_material_icon() - if(material_icon) - icon = material_icon + var/left_dir = turn(dir, -90) + var/right_dir = turn(dir, 90) + if(neighbors & left_dir) + if(neighbors & right_dir) + . += "_middle" + else + . += "_right" + else if(neighbors & right_dir) + . += "_left" + else + . += "_standing" + +/obj/structure/chair/bench/get_material_icon() + return material?.bench_icon || initial(icon) -/obj/structure/bed/chair/bench/mahogany +/obj/structure/chair/bench/mahogany color = WOOD_COLOR_RICH material = /decl/material/solid/organic/wood/mahogany -/obj/structure/bed/chair/bench/ebony +/obj/structure/chair/bench/ebony color = WOOD_COLOR_BLACK material = /decl/material/solid/organic/wood/ebony diff --git a/code/game/objects/structures/benches/lounge.dm b/code/game/objects/structures/benches/lounge.dm index 046ccc3c034e..a1bc8fc097a8 100644 --- a/code/game/objects/structures/benches/lounge.dm +++ b/code/game/objects/structures/benches/lounge.dm @@ -1,15 +1,14 @@ -/obj/structure/bed/chair/bench/lounge +/obj/structure/chair/bench/lounge name = "lounge" desc = "An elegant lounge, perfect for reclining on." - icon = 'icons/obj/structures/lounge.dmi' - icon_state = "lounge_standing" - base_icon = "lounge" + icon = 'icons/obj/structures/furniture/lounge.dmi' -/obj/structure/bed/chair/bench/lounge/get_material_icon() - return icon +// Just use the existing icon. +/obj/structure/chair/bench/lounge/get_material_icon() + return icon || initial(icon) -/obj/structure/bed/chair/bench/lounge/mapped +/obj/structure/chair/bench/lounge/mapped color = /decl/material/solid/organic/wood/mahogany::color material = /decl/material/solid/organic/wood/mahogany - reinf_material = /decl/material/solid/organic/cloth - padding_color = COLOR_RED_GRAY + initial_padding_material = /decl/material/solid/organic/cloth + initial_padding_color = COLOR_RED_GRAY diff --git a/code/game/objects/structures/benches/pew.dm b/code/game/objects/structures/benches/pew.dm index 272d62c51165..fe5425214c0b 100644 --- a/code/game/objects/structures/benches/pew.dm +++ b/code/game/objects/structures/benches/pew.dm @@ -1,23 +1,15 @@ -/obj/structure/bed/chair/bench/pew +/obj/structure/chair/bench/pew name = "pew" desc = "A long bench with a backboard, commonly found in places of worship, courtrooms and so on. Not known for being particularly comfortable." - icon = 'icons/obj/structures/pews.dmi' - icon_state = "pew_standing" - base_icon = "pew" + icon = 'icons/obj/structures/furniture/pew.dmi' -/obj/structure/bed/chair/bench/pew/get_material_icon() - return material?.pew_icon +/obj/structure/chair/bench/pew/get_material_icon() + return material?.pew_icon || initial(icon) -/obj/structure/bed/chair/bench/pew/single - name = "backed chair" - desc = "A tall chair with a sturdy back. Not very comfortable." - base_icon = "pew_standing" - connect_neighbors = FALSE - -/obj/structure/bed/chair/bench/pew/mahogany +/obj/structure/chair/bench/pew/mahogany color = /decl/material/solid/organic/wood/mahogany::color material = /decl/material/solid/organic/wood/mahogany -/obj/structure/bed/chair/bench/pew/ebony +/obj/structure/chair/bench/pew/ebony color = /decl/material/solid/organic/wood/ebony::color material = /decl/material/solid/organic/wood/ebony diff --git a/code/game/objects/structures/chairs/chairs.dm b/code/game/objects/structures/chairs/chairs.dm index f2e6ebadec47..5bc36823d97e 100644 --- a/code/game/objects/structures/chairs/chairs.dm +++ b/code/game/objects/structures/chairs/chairs.dm @@ -1,68 +1,104 @@ -//YES, chairs are a type of bed, which are a type of stool. This works, believe me. -Pete -/obj/structure/bed/chair +/obj/structure/chair name = "chair" desc = "You sit in this, either by will or force." - icon_state = "chair_preview" + icon = 'icons/obj/structures/furniture/chair.dmi' + icon_state = ICON_STATE_WORLD + "_preview" + anchored = TRUE + can_buckle = TRUE + buckle_lying = FALSE // force people to sit up in chairs when buckled + buckle_sound = 'sound/effects/buckle.ogg' + material = DEFAULT_FURNITURE_MATERIAL + material_alteration = MAT_FLAG_ALTERATION_ALL + tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT + parts_amount = 2 + parts_type = /obj/item/stack/material/rods color = "#666666" - buckle_dir = 0 - buckle_lying = 0 //force people to sit up in chairs when buckled obj_flags = OBJ_FLAG_ROTATABLE | OBJ_FLAG_SUPPORT_MOB - base_icon = "chair" user_comfort = 0.5 + monetary_worth_multiplier = 2.5 // Utility structures should be worth more than their matter (wheelchairs, rollers, etc). var/propelled = 0 // Check for fire-extinguisher-driven chairs var/has_special_overlay = FALSE + /// The padding extension type for this chair. If null, no extension is created and this chair cannot be padded. + var/padding_extension_type = /datum/extension/padding + var/decl/material/initial_padding_material + var/initial_padding_color -/obj/structure/bed/chair/do_simple_ranged_interaction(var/mob/user) +/obj/structure/chair/Initialize(ml, _mat, _reinf_mat) + . = ..() + if(padding_extension_type && initial_padding_material) + get_or_create_extension(src, padding_extension_type, initial_padding_material, initial_padding_color) + +/obj/structure/chair/do_simple_ranged_interaction(var/mob/user) if(!buckled_mob && user) rotate(user) return TRUE -/obj/structure/bed/chair/post_buckle_mob() +/obj/structure/chair/post_buckle_mob() update_icon() return ..() -/obj/structure/bed/chair/on_update_icon() - ..() - icon_state = base_icon +// Allow self-buckling even without dexterity. +// Copied from beds; do we actually want this? +/obj/structure/chair/user_can_mousedrop_onto(mob/user, atom/being_dropped, incapacitation_flags, params) + if(user == being_dropped) + return user.Adjacent(src) && !user.incapacitated(INCAPACITATION_STUNNED|INCAPACITATION_KNOCKOUT) + return ..() + +/// Returns an alternate icon based on our material. +/// Mostly used by benches. +/// TODO: Refactor to eliminate? +/obj/structure/chair/proc/get_material_icon() + return icon +/obj/structure/chair/update_materials() + . = ..() + var/icon/material_icon = get_material_icon() + if(material_icon) + icon = material_icon + +/obj/structure/chair/proc/get_base_icon() + return ICON_STATE_WORLD + +/obj/structure/chair/on_update_icon() + ..() + icon_state = get_base_icon() var/base_color = get_color() - var/reinf_color = padding_color || reinf_material?.color + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/use_padding_color = padding_extension?.get_padding_color(material_alteration & MAT_FLAG_ALTERATION_COLOR) + var/use_layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - var/image/I = image(icon, "[base_icon]_over") - I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - if(material && (material_alteration & MAT_FLAG_ALTERATION_COLOR)) - I.appearance_flags |= RESET_COLOR - I.color = base_color + var/image/I = overlay_image(icon, "[icon_state]_over", base_color, RESET_COLOR) + I.layer = use_layer add_overlay(I) - I = image(icon, "[base_icon]_armrest") - I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - if(material && (material_alteration & MAT_FLAG_ALTERATION_COLOR)) - I.appearance_flags |= RESET_COLOR - I.color = base_color + I = overlay_image(icon, "[icon_state]_armrest", base_color, RESET_COLOR) + I.layer = use_layer add_overlay(I) - if(reinf_material) - I = image(icon, "[base_icon]_padding_over") - I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - if(material_alteration & MAT_FLAG_ALTERATION_COLOR) - I.appearance_flags |= RESET_COLOR - I.color = reinf_color + if(padding_extension?.get_padding_material()) + add_overlay(overlay_image(icon, "[icon_state]_padding", padding_extension.get_padding_color(material_alteration & MAT_FLAG_ALTERATION_COLOR), RESET_COLOR|RESET_ALPHA)) + I = overlay_image(icon, "[icon_state]_padding_over", use_padding_color, RESET_COLOR) + I.layer = use_layer add_overlay(I) - I = image(icon, "[base_icon]_padding_armrest") - I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - if(material_alteration & MAT_FLAG_ALTERATION_COLOR) - I.appearance_flags |= RESET_COLOR - I.color = reinf_color + I = overlay_image(icon, "[icon_state]_padding_armrest", use_padding_color, RESET_COLOR) + I.layer = use_layer add_overlay(I) if(has_special_overlay) - I = image(icon, "[base_icon]_special") - I.layer = buckled_mob ? ABOVE_HUMAN_LAYER : FLOAT_LAYER - if(material && (material_alteration & MAT_FLAG_ALTERATION_COLOR)) - I.appearance_flags |= RESET_COLOR - I.color = base_color + I = overlay_image(icon, "[icon_state]_special", base_color, RESET_COLOR) + I.layer = use_layer add_overlay(I) -/obj/structure/bed/chair/rotate(mob/user) +// No name override, a cotton-padded metal chair shouldn't be a cotton chair, it should be a metal chair. + +/obj/structure/chair/update_material_desc(override_desc) + var/base_desc = override_desc || initial(desc) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/decl/material/padding_material = padding_extension?.get_padding_material() + if(padding_material) + desc = "[base_desc] It's made of [material.use_name] and padded with [padding_material.use_name]." + else + desc = "[base_desc] It's made of [material.use_name]." + +/obj/structure/chair/rotate(mob/user) if(!CanPhysicallyInteract(user)) to_chat(user, SPAN_NOTICE("You can't interact with \the [src] right now!")) return @@ -70,111 +106,107 @@ set_dir(turn(dir, 90)) update_icon() -/obj/structure/bed/chair/padded - reinf_material = /decl/material/solid/organic/cloth -/obj/structure/bed/chair/padded/red - padding_color = "#9d2300" -/obj/structure/bed/chair/padded/brown - reinf_material = /decl/material/solid/organic/leather -/obj/structure/bed/chair/padded/teal - padding_color = "#00e1ff" -/obj/structure/bed/chair/padded/black - padding_color = "#505050" -/obj/structure/bed/chair/padded/green - padding_color = "#b7f27d" -/obj/structure/bed/chair/padded/purple - padding_color = "#9933ff" -/obj/structure/bed/chair/padded/blue - padding_color = "#46698c" -/obj/structure/bed/chair/padded/beige - padding_color = "#ceb689" -/obj/structure/bed/chair/padded/lime - padding_color = "#62e36c" -/obj/structure/bed/chair/padded/yellow - padding_color = "#ffbf00" +/obj/structure/chair/padded + initial_padding_material = /decl/material/solid/organic/cloth +/obj/structure/chair/padded/red + initial_padding_color = "#9d2300" +/obj/structure/chair/padded/brown + initial_padding_material = /decl/material/solid/organic/leather +/obj/structure/chair/padded/teal + initial_padding_color = "#00e1ff" +/obj/structure/chair/padded/black + initial_padding_color = "#505050" +/obj/structure/chair/padded/green + initial_padding_color = "#b7f27d" +/obj/structure/chair/padded/purple + initial_padding_color = "#9933ff" +/obj/structure/chair/padded/blue + initial_padding_color = "#46698c" +/obj/structure/chair/padded/beige + initial_padding_color = "#ceb689" +/obj/structure/chair/padded/lime + initial_padding_color = "#62e36c" +/obj/structure/chair/padded/yellow + initial_padding_color = "#ffbf00" // Leaving this in for the sake of compilation. -/obj/structure/bed/chair/comfy +/obj/structure/chair/comfy name = "comfy chair" desc = "It's a chair. It looks comfy." - icon_state = "comfychair_preview" - base_icon = "comfychair" - reinf_material = /decl/material/solid/organic/cloth - -/obj/structure/bed/chair/comfy/unpadded - reinf_material = null -/obj/structure/bed/chair/comfy/brown - reinf_material = /decl/material/solid/organic/leather -/obj/structure/bed/chair/comfy/red - padding_color = "#9d2300" -/obj/structure/bed/chair/comfy/teal - padding_color = "#00e1ff" -/obj/structure/bed/chair/comfy/black - padding_color = "#505050" -/obj/structure/bed/chair/comfy/green - padding_color = "#b7f27d" -/obj/structure/bed/chair/comfy/purple - padding_color = "#9933ff" -/obj/structure/bed/chair/comfy/blue - padding_color = "#46698c" -/obj/structure/bed/chair/comfy/beige - padding_color = "#ceb689" -/obj/structure/bed/chair/comfy/lime - padding_color = "#62e36c" -/obj/structure/bed/chair/comfy/yellow - padding_color = "#ffbf00" - -/obj/structure/bed/chair/comfy/captain + icon = 'icons/obj/structures/furniture/chair_comfy.dmi' + initial_padding_material = /decl/material/solid/organic/cloth + +/obj/structure/chair/comfy/unpadded + initial_padding_material = null +/obj/structure/chair/comfy/brown + initial_padding_material = /decl/material/solid/organic/leather +/obj/structure/chair/comfy/red + initial_padding_color = "#9d2300" +/obj/structure/chair/comfy/teal + initial_padding_color = "#00e1ff" +/obj/structure/chair/comfy/black + initial_padding_color = "#505050" +/obj/structure/chair/comfy/green + initial_padding_color = "#b7f27d" +/obj/structure/chair/comfy/purple + initial_padding_color = "#9933ff" +/obj/structure/chair/comfy/blue + initial_padding_color = "#46698c" +/obj/structure/chair/comfy/beige + initial_padding_color = "#ceb689" +/obj/structure/chair/comfy/lime + initial_padding_color = "#62e36c" +/obj/structure/chair/comfy/yellow + initial_padding_color = "#ffbf00" + +/obj/structure/chair/comfy/captain name = "captain chair" desc = "It's a chair. Only for the highest ranked asses." - icon_state = "capchair_preview" - base_icon = "capchair" + icon = 'icons/obj/structures/furniture/chair_captain.dmi' buckle_movable = 1 material = /decl/material/solid/metal/steel - reinf_material = /decl/material/solid/organic/cloth - padding_color = "#46698c" + initial_padding_material = /decl/material/solid/organic/cloth + initial_padding_color = "#46698c" has_special_overlay = TRUE -/obj/structure/bed/chair/armchair +/obj/structure/chair/armchair name = "armchair" desc = "It's an armchair. It looks comfy." - icon_state = "armchair_preview" - base_icon = "armchair" - reinf_material = /decl/material/solid/organic/cloth - -/obj/structure/bed/chair/armchair/unpadded - reinf_material = null -/obj/structure/bed/chair/armchair/brown - reinf_material = /decl/material/solid/organic/leather -/obj/structure/bed/chair/armchair/red - padding_color = "#9d2300" -/obj/structure/bed/chair/armchair/teal - padding_color = "#00e1ff" -/obj/structure/bed/chair/armchair/black - padding_color = "#505050" -/obj/structure/bed/chair/armchair/green - padding_color = "#b7f27d" -/obj/structure/bed/chair/armchair/purple - padding_color = "#9933ff" -/obj/structure/bed/chair/armchair/blue - padding_color = "#46698c" -/obj/structure/bed/chair/armchair/beige - padding_color = "#ceb689" -/obj/structure/bed/chair/armchair/lime - padding_color = "#62e36c" -/obj/structure/bed/chair/armchair/yellow - padding_color = "#ffbf00" - -/obj/structure/bed/chair/office + icon = 'icons/obj/structures/furniture/armchair.dmi' + initial_padding_material = /decl/material/solid/organic/cloth + +/obj/structure/chair/armchair/unpadded + initial_padding_material = null +/obj/structure/chair/armchair/brown + initial_padding_material = /decl/material/solid/organic/leather +/obj/structure/chair/armchair/red + initial_padding_color = "#9d2300" +/obj/structure/chair/armchair/teal + initial_padding_color = "#00e1ff" +/obj/structure/chair/armchair/black + initial_padding_color = "#505050" +/obj/structure/chair/armchair/green + initial_padding_color = "#b7f27d" +/obj/structure/chair/armchair/purple + initial_padding_color = "#9933ff" +/obj/structure/chair/armchair/blue + initial_padding_color = "#46698c" +/obj/structure/chair/armchair/beige + initial_padding_color = "#ceb689" +/obj/structure/chair/armchair/lime + initial_padding_color = "#62e36c" +/obj/structure/chair/armchair/yellow + initial_padding_color = "#ffbf00" + +/obj/structure/chair/office name = "office chair" - icon_state = "officechair_preview" - base_icon = "officechair" + icon = 'icons/obj/structures/furniture/chair_office.dmi' anchored = FALSE buckle_movable = 1 movable_flags = MOVABLE_FLAG_WHEELED - reinf_material = /decl/material/solid/organic/cloth + initial_padding_material = /decl/material/solid/organic/cloth -/obj/structure/bed/chair/office/Move() +/obj/structure/chair/office/Move() . = ..() if(buckled_mob) var/mob/living/occupant = buckled_mob @@ -186,9 +218,10 @@ else unbuckle_mob() -/obj/structure/bed/chair/office/Bump(atom/A) +/obj/structure/chair/office/Bump(atom/A) ..() - if(!buckled_mob) return + if(!buckled_mob) + return if(propelled) var/mob/living/occupant = unbuckle_mob() @@ -211,129 +244,142 @@ victim.apply_damage(10, BRUTE, def_zone) occupant.visible_message("[occupant] crashed into \the [A]!") -/obj/structure/bed/chair/office/light - padding_color = "#f0f0f0" -/obj/structure/bed/chair/office/dark - padding_color = "#505050" +/obj/structure/chair/office/light + initial_padding_color = "#f0f0f0" +/obj/structure/chair/office/dark + initial_padding_color = "#505050" -/obj/structure/bed/chair/office/comfy +/obj/structure/chair/office/comfy name = "comfy office chair" desc = "It's an office chair. It looks comfy." - icon_state = "comfyofficechair_preview" - base_icon = "comfyofficechair" - -/obj/structure/bed/chair/office/comfy/unpadded - reinf_material = null -/obj/structure/bed/chair/office/comfy/brown - reinf_material = /decl/material/solid/organic/leather -/obj/structure/bed/chair/office/comfy/red - padding_color = "#9d2300" -/obj/structure/bed/chair/office/comfy/teal - padding_color = "#00e1ff" -/obj/structure/bed/chair/office/comfy/black - padding_color = "#505050" -/obj/structure/bed/chair/office/comfy/green - padding_color = "#b7f27d" -/obj/structure/bed/chair/office/comfy/purple - padding_color = "#9933ff" -/obj/structure/bed/chair/office/comfy/blue - padding_color = "#46698c" -/obj/structure/bed/chair/office/comfy/beige - padding_color = "#ceb689" -/obj/structure/bed/chair/office/comfy/lime - padding_color = "#62e36c" -/obj/structure/bed/chair/office/comfy/yellow - padding_color = "#ffbf00" - -/obj/structure/bed/chair/rounded + icon = 'icons/obj/structures/furniture/chair_comfy_office.dmi' + +/obj/structure/chair/office/comfy/unpadded + initial_padding_material = null +/obj/structure/chair/office/comfy/brown + initial_padding_material = /decl/material/solid/organic/leather +/obj/structure/chair/office/comfy/red + initial_padding_color = "#9d2300" +/obj/structure/chair/office/comfy/teal + initial_padding_color = "#00e1ff" +/obj/structure/chair/office/comfy/black + initial_padding_color = "#505050" +/obj/structure/chair/office/comfy/green + initial_padding_color = "#b7f27d" +/obj/structure/chair/office/comfy/purple + initial_padding_color = "#9933ff" +/obj/structure/chair/office/comfy/blue + initial_padding_color = "#46698c" +/obj/structure/chair/office/comfy/beige + initial_padding_color = "#ceb689" +/obj/structure/chair/office/comfy/lime + initial_padding_color = "#62e36c" +/obj/structure/chair/office/comfy/yellow + initial_padding_color = "#ffbf00" + +/obj/structure/chair/rounded name = "rounded chair" desc = "It's a rounded chair. It looks comfy." - icon_state = "roundedchair_preview" - base_icon = "roundedchair" - -/obj/structure/bed/chair/rounded/brown - reinf_material = /decl/material/solid/organic/leather -/obj/structure/bed/chair/rounded/red - padding_color = "#9d2300" -/obj/structure/bed/chair/rounded/teal - padding_color = "#00e1ff" -/obj/structure/bed/chair/rounded/black - padding_color = "#505050" -/obj/structure/bed/chair/rounded/green - padding_color = "#b7f27d" -/obj/structure/bed/chair/rounded/purple - padding_color = "#9933ff" -/obj/structure/bed/chair/rounded/blue - padding_color = "#46698c" -/obj/structure/bed/chair/rounded/beige - padding_color = "#ceb689" -/obj/structure/bed/chair/rounded/lime - padding_color = "#62e36c" -/obj/structure/bed/chair/rounded/yellow - padding_color = "#ffbf00" - -/obj/structure/bed/chair/shuttle + icon = 'icons/obj/structures/furniture/chair_rounded.dmi' + +/obj/structure/chair/rounded/brown + initial_padding_material = /decl/material/solid/organic/leather +/obj/structure/chair/rounded/red + initial_padding_color = "#9d2300" +/obj/structure/chair/rounded/teal + initial_padding_color = "#00e1ff" +/obj/structure/chair/rounded/black + initial_padding_color = "#505050" +/obj/structure/chair/rounded/green + initial_padding_color = "#b7f27d" +/obj/structure/chair/rounded/purple + initial_padding_color = "#9933ff" +/obj/structure/chair/rounded/blue + initial_padding_color = "#46698c" +/obj/structure/chair/rounded/beige + initial_padding_color = "#ceb689" +/obj/structure/chair/rounded/lime + initial_padding_color = "#62e36c" +/obj/structure/chair/rounded/yellow + initial_padding_color = "#ffbf00" + +/obj/structure/chair/shuttle name = "shuttle seat" desc = "A comfortable, secure seat. It has a sturdy-looking buckling system for smoother flights." - icon_state = "shuttle_chair_preview" - base_icon = "shuttle_chair" + icon = 'icons/obj/structures/furniture/chair_shuttle.dmi' buckle_sound = 'sound/effects/metal_close.ogg' material = /decl/material/solid/metal/steel - reinf_material = /decl/material/solid/organic/cloth + initial_padding_material = /decl/material/solid/organic/cloth has_special_overlay = TRUE -/obj/structure/bed/chair/shuttle/post_buckle_mob() - if(buckled_mob) - base_icon = "shuttle_chair-b" - else - base_icon = "shuttle_chair" - ..() - -/obj/structure/bed/chair/shuttle/blue - padding_color = "#46698c" -/obj/structure/bed/chair/shuttle/black - padding_color = "#505050" -/obj/structure/bed/chair/shuttle/white - padding_color = "#f0f0f0" - -/obj/structure/bed/chair/wood - name = "classic chair" +/obj/structure/chair/shuttle/get_base_icon() + . = ..() + if (buckled_mob) + . += "_buckled" + +/obj/structure/chair/shuttle/blue + initial_padding_color = "#46698c" +/obj/structure/chair/shuttle/black + initial_padding_color = "#505050" +/obj/structure/chair/shuttle/white + initial_padding_color = "#f0f0f0" + +/obj/structure/chair/wood + name_prefix = "classic" desc = "Old is never too old to not be in fashion." - icon_state = "wooden_chair_preview" - base_icon = "wooden_chair" + icon = 'icons/obj/structures/furniture/chair_wooden.dmi' color = WOOD_COLOR_GENERIC material = /decl/material/solid/organic/wood/oak + padding_extension_type = null // Cannot be padded. -/obj/structure/bed/chair/wood/can_apply_padding() - return FALSE - -/obj/structure/bed/chair/wood/mahogany +/obj/structure/chair/wood/mahogany color = WOOD_COLOR_RICH material = /decl/material/solid/organic/wood/mahogany -/obj/structure/bed/chair/wood/maple +/obj/structure/chair/wood/maple color = WOOD_COLOR_PALE material = /decl/material/solid/organic/wood/maple -/obj/structure/bed/chair/wood/ebony +/obj/structure/chair/wood/ebony color = WOOD_COLOR_BLACK material = /decl/material/solid/organic/wood/ebony -/obj/structure/bed/chair/wood/walnut +/obj/structure/chair/wood/walnut color = WOOD_COLOR_CHOCOLATE material = /decl/material/solid/organic/wood/walnut -/obj/structure/bed/chair/wood/wings +/obj/structure/chair/wood/wings name = "winged chair" - icon_state = "wooden_chair_wings_preview" - base_icon = "wooden_chair_wings" + icon = 'icons/obj/structures/furniture/chair_wooden_wings.dmi' -/obj/structure/bed/chair/wood/wings/mahogany +/obj/structure/chair/wood/wings/mahogany color = WOOD_COLOR_RICH material = /decl/material/solid/organic/wood/mahogany -/obj/structure/bed/chair/wood/wings/maple +/obj/structure/chair/wood/wings/maple color = WOOD_COLOR_PALE material = /decl/material/solid/organic/wood/maple -/obj/structure/bed/chair/wood/wings/ebony +/obj/structure/chair/wood/wings/ebony color = WOOD_COLOR_BLACK material = /decl/material/solid/organic/wood/ebony -/obj/structure/bed/chair/wood/wings/walnut +/obj/structure/chair/wood/wings/walnut color = WOOD_COLOR_CHOCOLATE material = /decl/material/solid/organic/wood/walnut + +/obj/structure/chair/backed + name_prefix = "backed" + desc = "A tall chair with a sturdy back. Not very comfortable." + icon = 'icons/obj/structures/furniture/chair_backed.dmi' + reinf_material = null + material = /decl/material/solid/organic/wood/oak + color = /decl/material/solid/organic/wood/oak::color + +/obj/structure/chair/backed/get_material_icon() + return material?.backed_chair_icon || initial(icon) + +/obj/structure/chair/slatted + name = "seat" + name_prefix = "slatted" // slatted wooden seat vs wooden slatted seat + icon = 'icons/obj/structures/furniture/chair_slatted.dmi' + reinf_material = null + material = /decl/material/solid/organic/wood/oak + color = /decl/material/solid/organic/wood/oak::color + +/obj/structure/chair/slatted/get_material_icon() + return material?.slatted_seat_icon || initial(icon) \ No newline at end of file diff --git a/code/game/objects/structures/chairs/rustic_chairs.dm b/code/game/objects/structures/chairs/rustic_chairs.dm index 100e94deedca..840678cb077e 100644 --- a/code/game/objects/structures/chairs/rustic_chairs.dm +++ b/code/game/objects/structures/chairs/rustic_chairs.dm @@ -1,27 +1,20 @@ -/obj/structure/bed/chair/rustic +/obj/structure/chair/rustic + name_prefix = "rustic" desc = "A simple, rustic-looking chair. Looks like it'd hurt to sit on for too long..." - icon = 'icons/obj/structures/rustic_chair.dmi' + icon = 'icons/obj/structures/furniture/chair_rustic.dmi' material = /decl/material/solid/organic/wood/walnut color = /decl/material/solid/organic/wood/walnut::color user_comfort = -0.5 -/obj/structure/bed/chair/rustic/update_material_name(override_name) - . = ..() - SetName("rustic [name]") // rustic oaken chair, not oaken rustic chair - -/obj/structure/bed/chair/rustic_fancy - name = "chair" +/obj/structure/chair/rustic_fancy + name_prefix = "fancy" desc = "An ornate, detailed chair made from wood. It has armrests!" - icon = 'icons/obj/structures/fancy_rustic_chair.dmi' + icon = 'icons/obj/structures/furniture/chair_rustic_fancy.dmi' material = /decl/material/solid/organic/wood/oak color = COLOR_WHITE // preview state is precolored - reinf_material = /decl/material/solid/organic/cloth - padding_color = COLOR_CHERRY_RED + initial_padding_material = /decl/material/solid/organic/cloth + initial_padding_color = COLOR_CHERRY_RED user_comfort = 1.25 -/obj/structure/bed/chair/rustic_fancy/ebony +/obj/structure/chair/rustic_fancy/ebony material = /decl/material/solid/organic/wood/ebony - -/obj/structure/bed/chair/rustic_fancy/update_material_name(override_name) - . = ..() - SetName("fancy [name]") // see above, 'fancy ebony chair' not 'ebony fancy chair' \ No newline at end of file diff --git a/code/game/objects/structures/chairs/wheelchair.dm b/code/game/objects/structures/chairs/wheelchair.dm index c6b882a2a67c..31fb6781e1a7 100644 --- a/code/game/objects/structures/chairs/wheelchair.dm +++ b/code/game/objects/structures/chairs/wheelchair.dm @@ -1,7 +1,7 @@ -/obj/structure/bed/chair/wheelchair +/obj/structure/chair/wheelchair name = "wheelchair" desc = "Now we're getting somewhere." - icon_state = "wheelchair" + icon = 'icons/obj/structures/furniture/wheelchair.dmi' anchored = FALSE buckle_movable = TRUE movement_handlers = list( @@ -9,31 +9,27 @@ /datum/movement_handler/delay = list(5), /datum/movement_handler/move_relay_self ) - tool_interaction_flags = 0 + tool_interaction_flags = TOOL_INTERACTION_NONE + material_alteration = MAT_FLAG_ALTERATION_NONE + padding_extension_type = null // Cannot be padded. var/item_form_type = /obj/item/wheelchair_kit // TODO: Replace with reagent holder? This doesn't even properly handle non-human bloodstains. var/bloodiness -/obj/structure/bed/chair/wheelchair/Initialize() +/obj/structure/chair/wheelchair/Initialize() . = ..() if(!item_form_type) verbs -= .verb/collapse -/obj/structure/bed/chair/wheelchair/on_update_icon() - set_overlays(image(icon = 'icons/obj/furniture.dmi', icon_state = "w_overlay", layer = ABOVE_HUMAN_LAYER)) - -/obj/structure/bed/chair/wheelchair/can_apply_padding() - return FALSE - -/obj/structure/bed/chair/wheelchair/attack_hand(mob/user) +/obj/structure/chair/wheelchair/attack_hand(mob/user) if(!user.check_dexterity(DEXTERITY_SIMPLE_MACHINES, TRUE)) return ..() user_unbuckle_mob(user) return TRUE -/obj/structure/bed/chair/wheelchair/Bump(atom/A) +/obj/structure/chair/wheelchair/Bump(atom/A) ..() if(!buckled_mob) return @@ -62,7 +58,7 @@ victim.apply_damage(10, BRUTE, def_zone) occupant.visible_message(SPAN_DANGER("\The [occupant] crashed into \the [A]!")) -/obj/structure/bed/chair/wheelchair/proc/create_track() +/obj/structure/chair/wheelchair/proc/create_track() var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) var/newdir = get_dir(get_step(loc, dir), loc) if(newdir == dir) @@ -77,11 +73,11 @@ bloodiness-- /proc/equip_wheelchair(mob/living/human/H) //Proc for spawning in a wheelchair if a new character has no legs. Used in new_player.dm - var/obj/structure/bed/chair/wheelchair/W = new(get_turf(H)) + var/obj/structure/chair/wheelchair/W = new(get_turf(H)) if(isturf(H.loc)) W.buckle_mob(H) -/obj/structure/bed/chair/wheelchair/verb/collapse() +/obj/structure/chair/wheelchair/verb/collapse() set name = "Collapse Wheelchair" set category = "Object" set src in oview(1) @@ -109,7 +105,7 @@ K.add_fingerprint(usr) qdel(src) -/obj/structure/bed/chair/wheelchair/handle_buckled_relaymove(var/datum/movement_handler/mh, var/mob/mob, var/direction, var/mover) +/obj/structure/chair/wheelchair/handle_buckled_relaymove(var/datum/movement_handler/mh, var/mob/mob, var/direction, var/mover) if(isspaceturf(loc)) return // No wheelchair driving in space . = MOVEMENT_HANDLED @@ -119,7 +115,7 @@ direction = mob.AdjustMovementDirection(direction, mover) DoMove(direction, mob) -/obj/structure/bed/chair/wheelchair/relaymove(mob/user, direction) +/obj/structure/chair/wheelchair/relaymove(mob/user, direction) if(user) user.glide_size = glide_size step(src, direction) @@ -129,11 +125,10 @@ name = "compressed wheelchair kit" desc = "Collapsed parts, prepared to immediately spring into the shape of a wheelchair." icon = 'icons/obj/items/wheelchairkit.dmi' - icon_state = "wheelchair-item" - item_state = "rbed" + icon_state = ICON_STATE_WORLD w_class = ITEM_SIZE_LARGE max_health = 50 - var/structure_form_type = /obj/structure/bed/chair/wheelchair + var/structure_form_type = /obj/structure/chair/wheelchair /obj/item/wheelchair_kit/attack_self(mob/user) if(!structure_form_type) @@ -141,8 +136,8 @@ user.visible_message("[user] starts to lay out \the [src].") if(do_after(user, 4 SECONDS, src)) - var/obj/structure/bed/chair/wheelchair/W = new structure_form_type(get_turf(user)) - user.visible_message(SPAN_NOTICE("[user] lays out \the [W].")) + var/obj/structure/chair/wheelchair/W = new structure_form_type(get_turf(user)) + user.visible_message("[user] lays out \the [W].") W.add_fingerprint(user) qdel(src) diff --git a/code/game/objects/structures/coathanger.dm b/code/game/objects/structures/coathanger.dm index 089425bcc9dc..3462edc0b082 100644 --- a/code/game/objects/structures/coathanger.dm +++ b/code/game/objects/structures/coathanger.dm @@ -53,12 +53,12 @@ update_icon() return TRUE -/obj/structure/coatrack/examine(mob/user, distance) +/obj/structure/coatrack/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(length(contents)) - to_chat(user, SPAN_NOTICE("It has the following [length(contents) == 1 ? "article" : "articles"] hanging on it:")) + . += SPAN_NOTICE("It has the following [length(contents) == 1 ? "article" : "articles"] hanging on it:") for(var/obj/item/thing in contents) - to_chat(user, "- \icon[thing] \The [thing].") + . += "- \icon[thing] \The [thing]." /obj/structure/coatrack/proc/can_hang(var/obj/item/thing) if(!istype(thing)) diff --git a/code/game/objects/structures/compost.dm b/code/game/objects/structures/compost.dm index 938eb620d3e1..407a6d38600d 100644 --- a/code/game/objects/structures/compost.dm +++ b/code/game/objects/structures/compost.dm @@ -47,7 +47,7 @@ var/global/const/COMPOST_WORM_HUNGER_FACTOR = MINIMUM_CHEMICAL_VOLUME else add_overlay(overlay_image(icon, "[icon_state]-hinges", null, RESET_COLOR)) -/obj/structure/reagent_dispensers/compost_bin/examine(mob/user, distance) +/obj/structure/reagent_dispensers/compost_bin/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) @@ -57,15 +57,15 @@ var/global/const/COMPOST_WORM_HUNGER_FACTOR = MINIMUM_CHEMICAL_VOLUME switch(worms) if(0) - to_chat(user, SPAN_WARNING("There are no worms in \the [src].")) + . += SPAN_WARNING("There are no worms in \the [src].") if(1) - to_chat(user, SPAN_NOTICE("A lonely worm wiggles around in \the [src].")) + . += SPAN_NOTICE("A lonely worm wiggles around in \the [src].") if(2 to 3) - to_chat(user, SPAN_NOTICE("A few worms wiggle around in \the [src].")) + . += SPAN_NOTICE("A few worms wiggle around in \the [src].") if(4 to 6) - to_chat(user, SPAN_NOTICE("A healthy number of worms wiggle around in \the [src].")) + . += SPAN_NOTICE("A healthy number of worms wiggle around in \the [src].") else - to_chat(user, SPAN_NOTICE("A thriving worm colony wiggles around in \the [src].")) + . += SPAN_NOTICE("A thriving worm colony wiggles around in \the [src].") var/list/composting = list() for(var/thing in get_stored_inventory()) @@ -73,9 +73,9 @@ var/global/const/COMPOST_WORM_HUNGER_FACTOR = MINIMUM_CHEMICAL_VOLUME composting += thing if(length(composting)) - to_chat(user, SPAN_NOTICE("[capitalize(english_list(composting, summarize = TRUE))] [length(composting) == 1 ? "is" : "are"] composting inside \the [src].")) + . += SPAN_NOTICE("[capitalize(english_list(composting, summarize = TRUE))] [length(composting) == 1 ? "is" : "are"] composting inside \the [src].") else - to_chat(user, SPAN_NOTICE("Nothing is composting within \the [src].")) + . += SPAN_NOTICE("Nothing is composting within \the [src].") /obj/structure/reagent_dispensers/compost_bin/Entered(var/atom/movable/AM, atom/old_loc) . = ..() diff --git a/code/game/objects/structures/crates_lockers/closets/__closet.dm b/code/game/objects/structures/crates_lockers/closets/__closet.dm index 6bfeca7cfe85..67dda1ac39ba 100644 --- a/code/game/objects/structures/crates_lockers/closets/__closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/__closet.dm @@ -61,7 +61,7 @@ var/global/list/closets = list() /obj/structure/closet/can_install_lock() return !(setup & CLOSET_HAS_LOCK) // CLOSET_HAS_LOCK refers to the access lock, not a physical lock. -/obj/structure/closet/examine(mob/user, distance) +/obj/structure/closet/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 && !opened) var/content_size = 0 @@ -69,19 +69,19 @@ var/global/list/closets = list() if(!AM.anchored) content_size += content_size(AM) if(!content_size) - to_chat(user, "It is empty.") + . += "It is empty." else if(storage_capacity > content_size*4) - to_chat(user, "It is barely filled.") + . += "It is barely filled." else if(storage_capacity > content_size*2) - to_chat(user, "It is less than half full.") + . += "It is less than half full." else if(storage_capacity > content_size) - to_chat(user, "There is still some free space.") + . += "There is still some free space." else - to_chat(user, "It is full.") + . += "It is full." var/mob/observer/ghost/G = user if(isghost(G) && (G.client?.holder || G.antagHUD)) - to_chat(user, "It contains: [counting_english_list(contents)]") + . += "It contains: [counting_english_list(contents)]" /obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(air_group || (height==0 || wall_mounted)) return 1 @@ -367,7 +367,7 @@ var/global/list/closets = list() /obj/structure/closet/attack_ghost(mob/ghost) if(ghost.client && ghost.client.inquisitive_ghost) - ghost.examinate(src) + ghost.examine_verb(src) if (!opened) to_chat(ghost, "It contains: [english_list(contents)].") diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index 8e98073aef57..7b06ff2b19d8 100644 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm @@ -7,10 +7,10 @@ var/screwdriver_time_needed = 7.5 SECONDS -/obj/structure/closet/coffin/examine(mob/user, distance) +/obj/structure/closet/coffin/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 && !opened) - to_chat(user, "The lid is [locked ? "tightly secured with screws." : "unsecured and can be opened."]") + . += "The lid is [locked ? "tightly secured with screws." : "unsecured and can be opened."]" /obj/structure/closet/coffin/can_open(mob/user) . = ..() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 9182d57f4e69..59d02b4c8c5a 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -22,7 +22,7 @@ for(var/obj/item/assembly/A in src) A.activate() -/obj/structure/closet/crate/examine(mob/user) +/obj/structure/closet/crate/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(rigged && opened) var/list/devices = list() @@ -30,7 +30,7 @@ devices += H for(var/obj/item/assembly/A in src) devices += A - to_chat(user,"There are some wires attached to the lid, connected to [english_list(devices)].") + . += "There are some wires attached to the lid, connected to [english_list(devices)]." /obj/structure/closet/crate/attackby(obj/item/W, mob/user) if(opened) diff --git a/code/game/objects/structures/defensive_barrier.dm b/code/game/objects/structures/defensive_barrier.dm index 7545fcc06413..97b999566c0b 100644 --- a/code/game/objects/structures/defensive_barrier.dm +++ b/code/game/objects/structures/defensive_barrier.dm @@ -7,7 +7,7 @@ throwpass = TRUE anchored = TRUE atom_flags = ATOM_FLAG_CLIMBABLE | ATOM_FLAG_CHECKS_BORDER - can_buckle = TRUE + can_buckle = TRUE // TODO: Is it actually... intended that you can buckle stuff to this? material = /decl/material/solid/metal/steel material_alteration = MAT_FLAG_ALTERATION_DESC | MAT_FLAG_ALTERATION_NAME max_health = 200 diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index b07bef0480ef..06455c87a1fc 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -28,13 +28,13 @@ return req_access = A.req_access.Copy() -/obj/structure/displaycase/examine(mob/user, distance) +/obj/structure/displaycase/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(contents.len) - to_chat(user, "Inside you see [english_list(contents)].") + . += "Inside you see [english_list(contents)]." if(distance <= 1) - to_chat(user, "It looks [locked ? "locked. You can open it with your ID card" : "unlocked"].") + . += "It looks [locked ? "locked. You can open it with your ID card" : "unlocked"]." /obj/structure/displaycase/explosion_act(severity) ..() diff --git a/code/game/objects/structures/dogbed.dm b/code/game/objects/structures/dogbed.dm index 803746b9f9f8..d26621b86681 100644 --- a/code/game/objects/structures/dogbed.dm +++ b/code/game/objects/structures/dogbed.dm @@ -3,6 +3,6 @@ desc = "A bed made especially for dogs, or other similarly sized pets." icon = 'icons/obj/furniture.dmi' icon_state = "dogbed" - can_buckle = 1 + can_buckle = TRUE buckle_dir = SOUTH - buckle_lying = 1 \ No newline at end of file + buckle_lying = TRUE \ No newline at end of file diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index adb261b01e9f..9aba1e77c074 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -46,27 +46,27 @@ bound_width = world.icon_size bound_height = width * world.icon_size -/obj/structure/door_assembly/examine(mob/user) - . = ..() +/obj/structure/door_assembly/get_examine_hints(mob/user, distance, infix, suffix) + . = ..() || list() switch(state) if(0) - to_chat(user, "Use a wrench to [anchored ? "un" : ""]anchor it.") + LAZYADD(., "Use a wrench to [anchored ? "un" : ""]anchor it.") if(!anchored) if(glass == 1) var/decl/material/glass_material_datum = GET_DECL(glass_material) if(glass_material_datum) var/mat_name = glass_material_datum.solid_name || glass_material_datum.name - to_chat(user, "Use a welder to remove the [mat_name] plating currently attached.") + LAZYADD(., "Use a welder to remove the [mat_name] plating currently attached.") else - to_chat(user, "Use a welder to disassemble completely.") + LAZYADD(., "Use a welder to disassemble completely.") else - to_chat(user, "Use a cable coil to wire in preparation for electronics.") + LAZYADD(., "Use a cable coil to wire in preparation for electronics.") if(1) - to_chat(user, "Use a wirecutter to remove the wiring and expose the frame.") - to_chat(user, "Insert electronics to proceed with construction.") + LAZYADD(., "Use a wirecutter to remove the wiring and expose the frame.") + LAZYADD(., "Insert electronics to proceed with construction.") if(2) - to_chat(user, "Use a crowbar to remove the electronics.") - to_chat(user, "Use a screwdriver to complete assembly.") + LAZYADD(., "Use a crowbar to remove the electronics.") + LAZYADD(., "Use a screwdriver to complete assembly.") /obj/structure/door_assembly/door_assembly_hatch icon = 'icons/obj/doors/hatch/door.dmi' diff --git a/code/game/objects/structures/drain.dm b/code/game/objects/structures/drain.dm index cca6fa3bebf6..3b8e57ce9f49 100644 --- a/code/game/objects/structures/drain.dm +++ b/code/game/objects/structures/drain.dm @@ -11,10 +11,10 @@ can_drain = 1 var/welded -/obj/structure/hygiene/drain/examine(mob/user) +/obj/structure/hygiene/drain/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(welded) - to_chat(user, "It is welded shut.") + . += "It is welded shut." /obj/structure/hygiene/drain/attackby(var/obj/item/thing, var/mob/user) if(IS_WELDER(thing)) @@ -85,9 +85,9 @@ else icon_state = "[initial(icon_state)][closed ? "-closed" : ""]" -/obj/structure/hygiene/drain/bath/examine(mob/user) +/obj/structure/hygiene/drain/bath/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It is [closed ? "closed" : "open"]") + . += "It is [closed ? "closed" : "open"]" /obj/structure/hygiene/drain/bath/Process() if(closed) diff --git a/code/game/objects/structures/drying_rack.dm b/code/game/objects/structures/drying_rack.dm index ae03e3470486..6bfacec89299 100644 --- a/code/game/objects/structures/drying_rack.dm +++ b/code/game/objects/structures/drying_rack.dm @@ -43,10 +43,10 @@ drying.update_icon() update_icon() -/obj/structure/drying_rack/examine(mob/user, distance, infix, suffix) +/obj/structure/drying_rack/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(drying) - to_chat(user, "\The [drying] is [drying.get_dryness_text()].") + . += "\The [drying] is [drying.get_dryness_text()]." /obj/structure/drying_rack/on_update_icon() ..() diff --git a/code/game/objects/structures/fences.dm b/code/game/objects/structures/fences.dm index ddeb006f1aaa..8a127ce484fe 100644 --- a/code/game/objects/structures/fences.dm +++ b/code/game/objects/structures/fences.dm @@ -31,17 +31,18 @@ update_cut_status() return ..() -/obj/structure/fence/examine(mob/user, dist) +/obj/structure/fence/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - switch(hole_size) if(MEDIUM_HOLE) - to_chat(user, "There is a large hole in \the [src].") + . += SPAN_DANGER("There is a large hole in \the [src].") if(LARGE_HOLE) - to_chat(user, "\The [src] has been completely cut through.") + . += SPAN_DANGER("\The [src] has been completely cut through.") +/obj/structure/fence/get_examine_hints(mob/user, distance, infix, suffix) + . = ..() if(cuttable && hole_size < MAX_HOLE_SIZE) - to_chat(user, "Use wirecutters to [hole_size > NO_HOLE ? "expand the":"cut a"] hole into the fence, allowing passage.") + LAZYADD(., SPAN_SUBTLE("Use wirecutters to [hole_size > NO_HOLE ? "expand the":"cut a"] hole into the fence, allowing passage.")) /obj/structure/fence/end icon_state = "end" diff --git a/code/game/objects/structures/fires.dm b/code/game/objects/structures/fires.dm index e112d5cc5374..2c7dbb75097f 100644 --- a/code/game/objects/structures/fires.dm +++ b/code/game/objects/structures/fires.dm @@ -186,24 +186,24 @@ /obj/structure/fire_source/proc/get_removable_atoms() return get_contained_external_atoms() -/obj/structure/fire_source/examine(mob/user, distance) +/obj/structure/fire_source/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) if(has_draught) - to_chat(user, "\The [src]'s draught is [draught_values[current_draught]].") + . += "\The [src]'s draught is [draught_values[current_draught]]." var/list/burn_strings = get_descriptive_temperature_strings(get_effective_burn_temperature()) if(length(burn_strings)) - to_chat(user, "\The [src] is burning hot enough to [english_list(burn_strings)].") + . += "\The [src] is burning hot enough to [english_list(burn_strings)]." var/list/removable = get_removable_atoms() if(length(removable)) - to_chat(user, "Looking within \the [src], you see:") + . += "Looking within \the [src], you see:" for(var/atom/thing in removable) - to_chat(user, "\icon[thing] \the [thing]") + . += "\icon[thing] \the [thing]" else - to_chat(user, "\The [src] is empty.") + . += "\The [src] is empty." if(check_rights(R_DEBUG, 0, user)) - to_chat(user, "\The [src] has a temperature of [temperature]K, an effective burn temperature of [get_effective_burn_temperature()]K and a fuel value of [fuel].") + . += "\The [src] has a temperature of [temperature]K, an effective burn temperature of [get_effective_burn_temperature()]K and a fuel value of [fuel]." /obj/structure/fire_source/attack_hand(var/mob/user) diff --git a/code/game/objects/structures/flaps.dm b/code/game/objects/structures/flaps.dm index 00e3257a5b64..3208d09cc814 100644 --- a/code/game/objects/structures/flaps.dm +++ b/code/game/objects/structures/flaps.dm @@ -23,8 +23,8 @@ if(istype(A) && A.checkpass(PASS_FLAG_GLASS)) return prob(60) - var/obj/structure/bed/B = A - if (istype(A, /obj/structure/bed) && B.buckled_mob)//if it's a bed/chair and someone is buckled, it will not pass + var/atom/movable/moving_movable = A + if (ismovable(A) && moving_movable.buckled_mob)//if someone is buckled, it will not pass return 0 if(istype(A, /obj/vehicle)) //no vehicles @@ -32,7 +32,7 @@ var/mob/living/M = A if(istype(M)) - if(M.current_posture.prone) + if(M.current_posture.prone && !M.buckled) return ..() for(var/mob_type in mobs_can_pass) if(istype(A, mob_type)) diff --git a/code/game/objects/structures/flora/plant.dm b/code/game/objects/structures/flora/plant.dm index ceb0b5e205e3..02ccd36a6567 100644 --- a/code/game/objects/structures/flora/plant.dm +++ b/code/game/objects/structures/flora/plant.dm @@ -26,12 +26,12 @@ // update icon/harvestability as appropriate */ -/obj/structure/flora/plant/examine(mob/user, distance) +/obj/structure/flora/plant/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(dead) - to_chat(user, SPAN_OCCULT("It is dead.")) + . += SPAN_OCCULT("It is dead.") else if(harvestable) - to_chat(user, SPAN_NOTICE("You can see [harvestable] harvestable fruit\s.")) + . += SPAN_NOTICE("You can see [harvestable] harvestable fruit\s.") /obj/structure/flora/plant/dismantle_structure(mob/user) if(plant) diff --git a/code/game/objects/structures/grandfather_clock.dm b/code/game/objects/structures/grandfather_clock.dm index 76cc0c8295d7..24882cb59e6c 100644 --- a/code/game/objects/structures/grandfather_clock.dm +++ b/code/game/objects/structures/grandfather_clock.dm @@ -19,12 +19,12 @@ START_PROCESSING(SSobj, src) update_icon() -/obj/structure/grandfather_clock/examine(mob/user, distance, infix, suffix) +/obj/structure/grandfather_clock/get_examine_strings(mob/user, distance, infix, suffix) . = ..() // TODO: check literacy? if(isnull(last_time)) last_time = stationtime2text() - to_chat(user, SPAN_NOTICE("The face of \the [src] reads [last_time].")) + . += SPAN_NOTICE("The face of \the [src] reads [last_time].") // TODO: don't magically make the time update when swinging is restarted // TODO: alt interaction to interfere with the clock? diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index 825e04a5ba66..6963ec745c48 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -66,10 +66,10 @@ STOP_PROCESSING(SSobj,src) return ..() -/obj/structure/inflatable/examine(mob/user, distance) +/obj/structure/inflatable/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(taped) - to_chat(user, SPAN_NOTICE("It's been duct taped in few places.")) + . += SPAN_NOTICE("It's been duct taped in few places.") /obj/structure/inflatable/Process() check_environment() diff --git a/code/game/objects/structures/ironing_board.dm b/code/game/objects/structures/ironing_board.dm index 77bcb0ec0644..3248822f656e 100644 --- a/code/game/objects/structures/ironing_board.dm +++ b/code/game/objects/structures/ironing_board.dm @@ -35,17 +35,18 @@ // make a screeching noise to drive people mad /obj/structure/bed/roller/ironingboard/Move() + . = ..() + if(!.) + return var/turf/T = get_turf(src) if(isspaceturf(T) || istype(T, /turf/floor/carpet)) - return + return FALSE playsound(T, pick(move_sounds), 75, 1) - . = ..() - -/obj/structure/bed/roller/ironingboard/examine(mob/user) +/obj/structure/bed/roller/ironingboard/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(cloth) - to_chat(user, "\The [html_icon(cloth)] [cloth] lies on it.") + . += SPAN_NOTICE("\The [html_icon(cloth)] [cloth] lies on it.") /obj/structure/bed/roller/ironingboard/on_update_icon() if(density) @@ -94,7 +95,7 @@ visible_message("[user] irons [src.buckled_mob]'s [parsed]!", "You iron [buckled_mob]'s [parsed]!") var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(H, zone) - affecting.take_external_damage(0, 15, used_weapon = "Hot metal") + affecting.take_damage(15, BURN, inflicter = "Hot metal") return TRUE diff --git a/code/game/objects/structures/iv_drip.dm b/code/game/objects/structures/iv_drip.dm index 8dfa1d6269d2..ffc24bfd1b37 100644 --- a/code/game/objects/structures/iv_drip.dm +++ b/code/game/objects/structures/iv_drip.dm @@ -186,24 +186,20 @@ mode = !mode to_chat(usr, "The IV drip is now [mode ? "injecting" : "taking blood"].") -/obj/structure/iv_drip/examine(mob/user, distance) +/obj/structure/iv_drip/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if (distance >= 2) return - - to_chat(user, "The IV drip is [mode ? "injecting" : "taking blood"].") - to_chat(user, "It is set to transfer [transfer_amount]u of chemicals per cycle.") - + . += "The IV drip is [mode ? "injecting" : "taking blood"]." + . += "It is set to transfer [transfer_amount]u of chemicals per cycle." if(beaker) if(beaker.reagents && beaker.reagents.total_volume) - to_chat(usr, SPAN_NOTICE("Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.")) + . += SPAN_NOTICE("Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.") else - to_chat(usr, SPAN_NOTICE("Attached is an empty [beaker].")) + . += SPAN_NOTICE("Attached is an empty [beaker].") else - to_chat(usr, SPAN_NOTICE("No chemicals are attached.")) - - to_chat(usr, SPAN_NOTICE("[attached ? attached : "No one"] is hooked up to it.")) + . += SPAN_NOTICE("No chemicals are attached.") + . += SPAN_NOTICE("[attached ? attached : "No one"] is hooked up to it.") /obj/structure/iv_drip/proc/rip_out() visible_message("The needle is ripped out of [src.attached], doesn't that hurt?") diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index fb9f17eeb078..4d58c9790cbf 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -18,10 +18,10 @@ . = ..() create_reagents(180) -/obj/structure/janitorialcart/examine(mob/user, distance) +/obj/structure/janitorialcart/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "[src] [html_icon(src)] contains [reagents.total_volume] unit\s of liquid!") + . += "\The [src] [html_icon(src)] contains [reagents.total_volume] unit\s of liquid!" /obj/structure/janitorialcart/attackby(obj/item/I, mob/user) @@ -172,32 +172,34 @@ /datum/movement_handler/move_relay_self/janicart/MayMove(mob/mover, is_external) . = ..() if(. == MOVEMENT_PROCEED && !is_external && !(locate(/obj/item/janicart_key) in mover.get_held_items())) - var/obj/structure/bed/chair/janicart/janicart = host + var/obj/structure/janicart/janicart = host to_chat(mover, SPAN_WARNING("You'll need the keys in one of your hands to drive this [istype(janicart) ? janicart.callme : host.name].")) return MOVEMENT_STOP //old style cart -/obj/structure/bed/chair/janicart +/obj/structure/janicart name = "janicart" icon = 'icons/obj/vehicles.dmi' icon_state = "pussywagon" - base_icon = "pussywagon" + can_buckle = TRUE + buckle_lying = FALSE // force people to sit up when buckled to it + buckle_sound = 'sound/effects/buckle.ogg' + buckle_layer_above = TRUE + buckle_movable = TRUE + color = null anchored = FALSE density = TRUE material_alteration = MAT_FLAG_ALTERATION_NONE atom_flags = ATOM_FLAG_OPEN_CONTAINER - buckle_layer_above = TRUE - buckle_movable = TRUE movement_handlers = list( /datum/movement_handler/deny_multiz, /datum/movement_handler/delay = list(1), /datum/movement_handler/move_relay_self/janicart ) - var/obj/item/bag/trash/mybag = null var/callme = "pimpin' ride" //how do people refer to it? -/obj/structure/bed/chair/janicart/Initialize() +/obj/structure/janicart/Initialize() // Handled in init due to dirs needing to be stringified buckle_pixel_shift = list( "[NORTH]" = list("x" = 0, "y" = 4, "z" = 0), @@ -208,14 +210,14 @@ . = ..() create_reagents(100) -/obj/structure/bed/chair/janicart/examine(mob/user, distance) +/obj/structure/janicart/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "[html_icon(src)] This [callme] contains [reagents.total_volume] unit\s of water!") + . += "[html_icon(src)] This [callme] contains [reagents.total_volume] unit\s of water!" if(mybag) - to_chat(user, "\A [mybag] is hanging on the [callme].") + . += "\A [mybag] is hanging on the [callme]." -/obj/structure/bed/chair/janicart/attackby(obj/item/I, mob/user) +/obj/structure/janicart/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/mop)) if(reagents.total_volume > 1) @@ -239,27 +241,27 @@ . = ..() -/obj/structure/bed/chair/janicart/attack_hand(mob/user) +/obj/structure/janicart/attack_hand(mob/user) if(!mybag || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) return ..() user.put_in_hands(mybag) mybag = null return TRUE -/obj/structure/bed/chair/janicart/handle_buckled_relaymove(var/datum/movement_handler/mh, var/mob/mob, var/direction, var/mover) +/obj/structure/janicart/handle_buckled_relaymove(var/datum/movement_handler/mh, var/mob/mob, var/direction, var/mover) if(isspaceturf(loc)) return . = MOVEMENT_HANDLED DoMove(mob.AdjustMovementDirection(direction, mover), mob) -/obj/structure/bed/chair/janicart/relaymove(mob/user, direction) +/obj/structure/janicart/relaymove(mob/user, direction) if(user.incapacitated(INCAPACITATION_DISRUPTED)) unbuckle_mob() user.glide_size = glide_size step(src, direction) set_dir(direction) -/obj/structure/bed/chair/janicart/bullet_act(var/obj/item/projectile/Proj) +/obj/structure/janicart/bullet_act(var/obj/item/projectile/Proj) if(buckled_mob) if(prob(85)) return buckled_mob.bullet_act(Proj) diff --git a/code/game/objects/structures/memorial.dm b/code/game/objects/structures/memorial.dm index a320fee22452..5a99c067a93d 100644 --- a/code/game/objects/structures/memorial.dm +++ b/code/game/objects/structures/memorial.dm @@ -21,7 +21,8 @@ return TRUE return ..() -/obj/structure/memorial/examine(mob/user, distance) +/obj/structure/memorial/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (distance <= 2 && fallen.len) - to_chat(user, "The fallen: [jointext(fallen, "
")]") + . += "The fallen:" + . += fallen diff --git a/code/game/objects/structures/mineral_bath.dm b/code/game/objects/structures/mineral_bath.dm index 9bfecd7b1006..3180e095a765 100644 --- a/code/game/objects/structures/mineral_bath.dm +++ b/code/game/objects/structures/mineral_bath.dm @@ -125,11 +125,11 @@ // Repair crystalline internal organs. if(prob(10)) - for(var/obj/item/organ/internal/I in occupant.get_internal_organs()) - if(BP_IS_CRYSTAL(I) && I.damage) - I.heal_damage(rand(3,5)) + for(var/obj/item/organ/internal/organ in occupant.get_internal_organs()) + if(BP_IS_CRYSTAL(organ) && organ.get_organ_damage()) + organ.heal_damage(rand(3,5)) if(prob(25)) - to_chat(occupant, SPAN_NOTICE("The mineral-rich bath mends your [I.name].")) + to_chat(occupant, SPAN_NOTICE("The mineral-rich bath mends your [organ.name].")) // Repair robotic external organs. if(!repaired_organ && prob(25)) diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index afc4805a96ed..4a4adca8fb22 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -12,10 +12,10 @@ . = ..() create_reagents(180) -/obj/structure/mopbucket/examine(mob/user, distance) +/obj/structure/mopbucket/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "[src] [html_icon(src)] contains [reagents.total_volume] unit\s of water!") + . += "\The [src] [html_icon(src)] contains [reagents.total_volume] unit\s of water!" /obj/structure/mopbucket/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/mop)) diff --git a/code/game/objects/structures/pit.dm b/code/game/objects/structures/pit.dm index d45cdbc6ebbe..3e906526c8db 100644 --- a/code/game/objects/structures/pit.dm +++ b/code/game/objects/structures/pit.dm @@ -157,14 +157,14 @@ var/destruction_finish_message = "hacking at" var/gravemarker_type = /obj/item/gravemarker -/obj/structure/gravemarker/examine(mob/user, distance) +/obj/structure/gravemarker/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance < 2) var/processed_message = user.handle_reading_literacy(user, message) if(processed_message) - to_chat(user, "It says: '[processed_message]'") + . += "It says: '[processed_message]'" else if(message) - to_chat(user, "You can't read the inscription from here.") + . += "You can't read the inscription from here." /obj/structure/gravemarker/attackby(obj/item/used_item, mob/user) // we can dig it up with a shovel if the destruction tool is not a shovel, or if we're not on harm intent @@ -234,14 +234,14 @@ material = /decl/material/solid/stone/granite gravemarker_type = /obj/structure/gravemarker/gravestone -/obj/item/gravemarker/examine(mob/user, distance) +/obj/item/gravemarker/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance < 2) var/processed_message = user.handle_reading_literacy(user, message) if(processed_message) - to_chat(user, "It says: '[processed_message]'") + . += "It says: '[processed_message]'" else if(message) - to_chat(user, "You can't read the inscription from here.") + . += "You can't read the inscription from here." /obj/item/gravemarker/attack_self(mob/user) if(!user.check_intent(I_FLAG_HARM)) diff --git a/code/game/objects/structures/quicksand.dm b/code/game/objects/structures/quicksand.dm index d891b03a6eaf..fbbd3393c87e 100644 --- a/code/game/objects/structures/quicksand.dm +++ b/code/game/objects/structures/quicksand.dm @@ -6,7 +6,7 @@ icon_state = "open" density = FALSE anchored = TRUE - can_buckle = 1 + can_buckle = TRUE buckle_dir = SOUTH var/exposed = 0 var/busy diff --git a/code/game/objects/structures/signs/diploma.dm b/code/game/objects/structures/signs/diploma.dm index d36a52bafd34..a6bbf52d992b 100644 --- a/code/game/objects/structures/signs/diploma.dm +++ b/code/game/objects/structures/signs/diploma.dm @@ -70,10 +70,10 @@ /obj/structure/sign/plaque/diploma/update_description() desc = details.get_description_string() -/obj/structure/sign/plaque/diploma/examine(mob/user, distance, infix, suffix) +/obj/structure/sign/plaque/diploma/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 2) - to_chat(user, details.get_examine_string()) + . += details.get_examine_string() //////////////////////////////////////////////////////// // Diploma Item @@ -120,10 +120,10 @@ /obj/item/sign/diploma/proc/update_description() desc = details.get_description_string() -/obj/item/sign/diploma/examine(mob/user, distance, infix, suffix) +/obj/item/sign/diploma/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 2) - to_chat(user, details.get_examine_string()) + . += details.get_examine_string() /obj/item/sign/diploma/attackby(obj/item/pen/W, mob/user) if(IS_PEN(W)) diff --git a/code/game/objects/structures/skele_stand.dm b/code/game/objects/structures/skele_stand.dm index e45d1c326ea9..95ce5fb549c2 100644 --- a/code/game/objects/structures/skele_stand.dm +++ b/code/game/objects/structures/skele_stand.dm @@ -47,14 +47,14 @@ /obj/structure/skele_stand/Bumped(atom/thing) rattle_bones(null, thing) -/obj/structure/skele_stand/examine(mob/user) +/obj/structure/skele_stand/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(swag.len) var/list/swagnames = list() for(var/slot in swag) var/obj/item/clothing/C = swag[slot] swagnames += C.get_examine_line() - to_chat(user,"[gender == MALE ? "He" : "She"] is wearing [english_list(swagnames)].") + . += "[gender == MALE ? "He" : "She"] is wearing [english_list(swagnames)]." /obj/structure/skele_stand/attackby(obj/item/W, mob/user) if(IS_PEN(W)) diff --git a/code/game/objects/structures/sofa.dm b/code/game/objects/structures/sofa.dm index 93cfc6b1c5cd..b12b1148f3a1 100644 --- a/code/game/objects/structures/sofa.dm +++ b/code/game/objects/structures/sofa.dm @@ -1,15 +1,14 @@ /obj/structure/bed/sofa name = "sofa" desc = "A wide and comfy sofa - no assistants were harmed to produce it!" - icon_state = "sofa_preview" - base_icon = "sofa" + icon = 'icons/obj/structures/furniture/sofa_middle.dmi' color = "#666666" buckle_dir = FALSE buckle_lying = FALSE //force people to sit up in chairs when buckled obj_flags = OBJ_FLAG_ROTATABLE | OBJ_FLAG_ANCHORABLE material = /decl/material/solid/organic/wood/oak - reinf_material = /decl/material/solid/organic/cloth - material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC + initial_padding_material = /decl/material/solid/organic/cloth + material_alteration = MAT_FLAG_ALTERATION_ALL var/has_special_overlay = FALSE @@ -23,19 +22,18 @@ return ..() /obj/structure/bed/sofa/on_update_icon() - ..() - var/use_base_color = get_color() - var/use_reinf_color = padding_color || ((material_alteration & MAT_FLAG_ALTERATION_COLOR) ? reinf_material?.color : null) + var/datum/extension/padding/padding_extension = get_extension(src, __IMPLIED_TYPE__) + var/use_padding_color = padding_extension?.get_padding_color(material_alteration & MAT_FLAG_ALTERATION_COLOR) var/list/overlays_to_add = list( "_over" = use_base_color, "_armrest" = use_base_color ) - if(reinf_material) - overlays_to_add["_padding_over"] = use_reinf_color - overlays_to_add["_padding_armrest"] = use_reinf_color + if(padding_extension?.get_padding_material()) + overlays_to_add["_padding_over"] = use_padding_color + overlays_to_add["_padding_armrest"] = use_padding_color if(has_special_overlay && buckled_mob) overlays_to_add["_special"] = use_base_color @@ -65,79 +63,76 @@ set_dir(turn(dir, 45)) update_icon() /obj/structure/bed/sofa/middle/unpadded - reinf_material = null + initial_padding_material = null /obj/structure/bed/sofa/middle/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/sofa/middle/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/sofa/middle/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/sofa/middle/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/sofa/middle/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/sofa/middle/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/sofa/middle/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/sofa/middle/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/sofa/middle/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/sofa/middle/yellow paint_color = "#ffbf00" /obj/structure/bed/sofa/right - name = "sofa" - icon_state = "sofa_r_preview" - base_icon = "sofa_r" + icon = 'icons/obj/structures/furniture/sofa_right.dmi' /obj/structure/bed/sofa/right/unpadded - reinf_material = null + initial_padding_material = null /obj/structure/bed/sofa/right/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/sofa/right/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/sofa/right/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/sofa/right/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/sofa/right/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/sofa/right/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/sofa/right/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/sofa/right/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/sofa/right/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/sofa/right/yellow - padding_color = "#ffbf00" + initial_padding_color = "#ffbf00" /obj/structure/bed/sofa/left name = "sofa" - icon_state = "sofa_l_preview" - base_icon = "sofa_l" + icon = 'icons/obj/structures/furniture/sofa_left.dmi' /obj/structure/bed/sofa/left/unpadded - reinf_material = null + initial_padding_material = null /obj/structure/bed/sofa/left/red - padding_color = "#9d2300" + initial_padding_color = "#9d2300" /obj/structure/bed/sofa/left/brown - reinf_material = /decl/material/solid/organic/leather + initial_padding_material = /decl/material/solid/organic/leather /obj/structure/bed/sofa/left/teal - padding_color = "#00e1ff" + initial_padding_color = "#00e1ff" /obj/structure/bed/sofa/left/black - padding_color = "#505050" + initial_padding_color = "#505050" /obj/structure/bed/sofa/left/green - padding_color = "#b7f27d" + initial_padding_color = "#b7f27d" /obj/structure/bed/sofa/left/purple - padding_color = "#9933ff" + initial_padding_color = "#9933ff" /obj/structure/bed/sofa/left/blue - padding_color = "#46698c" + initial_padding_color = "#46698c" /obj/structure/bed/sofa/left/beige - padding_color = "#ceb689" + initial_padding_color = "#ceb689" /obj/structure/bed/sofa/left/lime - padding_color = "#62e36c" + initial_padding_color = "#62e36c" /obj/structure/bed/sofa/left/yellow - padding_color = "#ffbf00" \ No newline at end of file + initial_padding_color = "#ffbf00" \ No newline at end of file diff --git a/code/game/objects/structures/stasis_cage.dm b/code/game/objects/structures/stasis_cage.dm index fd144cae9096..2ac55e2afe1d 100644 --- a/code/game/objects/structures/stasis_cage.dm +++ b/code/game/objects/structures/stasis_cage.dm @@ -47,10 +47,10 @@ else icon_state = initial(icon_state) -/obj/structure/stasis_cage/examine(mob/user) +/obj/structure/stasis_cage/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(contained) - to_chat(user, "\The [contained] is kept inside.") + . += "\The [contained] is kept inside." /obj/structure/stasis_cage/proc/contain(var/mob/living/simple_animal/animal) if(contained || !istype(animal)) diff --git a/code/game/objects/structures/tables.dm b/code/game/objects/structures/tables.dm index 68fba3649734..98a4918cb530 100644 --- a/code/game/objects/structures/tables.dm +++ b/code/game/objects/structures/tables.dm @@ -276,10 +276,10 @@ return TRUE -/obj/structure/table/examine(mob/user, distance) +/obj/structure/table/get_examine_hints(mob/user, distance, infix, suffix) . = ..() if(felted || reinf_material || additional_reinf_material) - to_chat(user, SPAN_SUBTLE("The cladding must be removed with a screwdriver prior to deconstructing \the [src].")) + LAZYADD(., SPAN_SUBTLE("The cladding must be removed with a screwdriver prior to deconstructing \the [src].")) /obj/structure/table/update_material_name(override_name) if(reinf_material) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index cba831c4d3d3..9f3fe1060a3c 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -31,9 +31,9 @@ update_icon() -/obj/structure/tank_rack/examine(mob/user, distance) +/obj/structure/tank_rack/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, SPAN_NOTICE("It is holding [LAZYLEN(oxygen_tanks)] air tank\s and [LAZYLEN(hydrogen_tanks)] hydrogen tank\s.")) + . += SPAN_NOTICE("It is holding [LAZYLEN(oxygen_tanks)] air tank\s and [LAZYLEN(hydrogen_tanks)] hydrogen tank\s.") /obj/structure/tank_rack/Destroy() QDEL_NULL_LIST(hydrogen_tanks) diff --git a/code/game/objects/structures/travois.dm b/code/game/objects/structures/travois.dm new file mode 100644 index 000000000000..bcf23f16081b --- /dev/null +++ b/code/game/objects/structures/travois.dm @@ -0,0 +1,22 @@ +/* + * Travois used to drag mobs in low-tech settings. + */ +/obj/structure/travois + name = "travois" + desc = "An assemblage of sticks, commonly used to make it easier to transport animal carcasses." + anchored = FALSE + icon_state = ICON_STATE_WORLD + icon = 'icons/obj/structures/travois.dmi' + can_buckle = TRUE + buckle_dir = SOUTH + buckle_lying = TRUE + buckle_sound = 'sound/effects/buckle.ogg' + buckle_pixel_shift = list("x" = 0, "y" = 0, "z" = 6) + obj_flags = OBJ_FLAG_SUPPORT_MOB + movable_flags = MOVABLE_FLAG_WHEELED + tool_interaction_flags = TOOL_INTERACTION_DECONSTRUCT + user_comfort = 0 + parts_amount = 1 + parts_type = /obj/item/stack/material/log + material_alteration = MAT_FLAG_ALTERATION_ALL + material = /decl/material/solid/organic/wood/oak diff --git a/code/game/objects/structures/wall_frame.dm b/code/game/objects/structures/wall_frame.dm index 3aaf589d466e..b4d8c7a46054 100644 --- a/code/game/objects/structures/wall_frame.dm +++ b/code/game/objects/structures/wall_frame.dm @@ -41,10 +41,10 @@ update_connections(1) update_icon() -/obj/structure/wall_frame/examine(mob/user) +/obj/structure/wall_frame/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(paint_color) - to_chat(user, SPAN_NOTICE("It has a smooth coat of paint applied.")) + . += SPAN_NOTICE("It has a smooth coat of paint applied.") /obj/structure/wall_frame/get_examined_damage_string() if(!can_take_damage()) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 6a9c9f095515..93cf5851a2da 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -68,10 +68,10 @@ var/global/list/hygiene_props = list() return TRUE . = ..() -/obj/structure/hygiene/examine(mob/user) +/obj/structure/hygiene/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(clogged > 0) - to_chat(user, SPAN_WARNING("It seems to be badly clogged.")) + . += SPAN_WARNING("It seems to be badly clogged.") /obj/structure/hygiene/Process() if(clogged <= 0) @@ -582,6 +582,6 @@ var/global/list/hygiene_props = list() if(open) water_flow() -/obj/structure/hygiene/faucet/examine(mob/user) +/obj/structure/hygiene/faucet/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It is turned [open ? "on" : "off"].") + . += "It is turned [open ? "on" : "off"]." diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 7b9c56f71107..dcc075f7e4f6 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -377,7 +377,7 @@ /obj/structure/window/Move() var/ini_dir = dir update_nearby_tiles(need_rebuild=1) - ..() + . = ..() set_dir(ini_dir) update_nearby_tiles(need_rebuild=1) @@ -387,24 +387,24 @@ return 1 return 0 -/obj/structure/window/examine(mob/user) +/obj/structure/window/get_examine_strings(mob/user, distance, infix, suffix) . = ..(user) if(reinf_material) - to_chat(user, SPAN_NOTICE("It is reinforced with the [reinf_material.solid_name] lattice.")) + . += SPAN_NOTICE("It is reinforced with the [reinf_material.solid_name] lattice.") if (reinf_material) switch (construction_state) if (CONSTRUCTION_STATE_NO_FRAME) - to_chat(user, SPAN_WARNING("The window is not in the frame.")) + . += SPAN_WARNING("The window is not in the frame.") if (CONSTRUCTION_STATE_IN_FRAME) - to_chat(user, SPAN_WARNING("The window is pried into the frame but not yet fastened.")) + . += SPAN_WARNING("The window is pried into the frame but not yet fastened.") if (CONSTRUCTION_STATE_FASTENED) - to_chat(user, SPAN_NOTICE("The window is fastened to the frame.")) + . += SPAN_NOTICE("The window is fastened to the frame.") if (anchored) - to_chat(user, SPAN_NOTICE("It is fastened to \the [get_turf(src)].")) + . += SPAN_NOTICE("It is fastened to \the [get_turf(src)].") else - to_chat(user, SPAN_WARNING("It is not fastened to anything.")) + . += SPAN_WARNING("It is not fastened to anything.") if (polarized) - to_chat(user, SPAN_NOTICE("It appears to be wired.")) + . += SPAN_NOTICE("It appears to be wired.") /obj/structure/window/set_anchored(new_anchored) if((. = ..())) diff --git a/code/game/sound.dm b/code/game/sound.dm index a729a23fb5bc..3f0d24378d25 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -14,8 +14,7 @@ if(!ignore_walls) //these sounds don't carry through walls listeners = listeners & hearers(maxdistance, turf_source) - for(var/P in listeners) - var/mob/M = P + for(var/mob/M as anything in listeners) if(!M || !M.client) continue diff --git a/code/game/turfs/flooring/_flooring.dm b/code/game/turfs/flooring/_flooring.dm index 7618f0600eaa..14e490f0aed6 100644 --- a/code/game/turfs/flooring/_flooring.dm +++ b/code/game/turfs/flooring/_flooring.dm @@ -35,12 +35,12 @@ var/global/list/flooring_cache = list() /// BYOND ticks. var/build_time = 0 - var/drop_material_on_remove + var/drop_material_on_remove = FALSE var/descriptor var/flooring_flags - var/remove_timer = 10 - var/can_paint + var/remove_timer = 1 SECOND + var/can_paint = FALSE var/can_engrave = TRUE var/can_collect = FALSE @@ -200,40 +200,39 @@ var/global/list/flooring_cache = list() var/decl/material/use_material = target.get_material() target.color = use_material?.color - var/edge_layer = (icon_edge_layer != FLOOR_EDGE_NONE) ? target.layer + icon_edge_layer : target.layer - var/list/edge_overlays = list() - var/has_border = 0 - for(var/step_dir in global.cardinal) - var/turf/T = get_step_resolving_mimic(target, step_dir) - if(!istype(T) || symmetric_test_link(target, T)) - continue - has_border |= step_dir - if(icon_edge_layer != FLOOR_EDGE_NONE) - if(has_internal_edges) - edge_overlays += get_flooring_overlay("[icon]_[icon_base]-edge-[step_dir]", edge_state, step_dir, edge_layer = edge_layer) - if(has_external_edges && target.can_draw_edge_over(T)) - edge_overlays += get_flooring_overlay("[icon]_[icon_base]-outer-edge-[step_dir]", outer_edge_state, step_dir, TRUE, edge_layer = edge_layer) - - if (has_internal_edges || has_external_edges) - var/has_smooth = ~(has_border & (NORTH | SOUTH | EAST | WEST)) - for(var/step_dir in global.cornerdirs) + if (icon_edge_layer != FLOOR_EDGE_NONE && (has_internal_edges || has_external_edges)) + var/edge_layer = target.layer + icon_edge_layer + var/list/edge_overlays = list() + var/has_border = 0 + for(var/step_dir in global.cardinal) var/turf/T = get_step_resolving_mimic(target, step_dir) if(!istype(T) || symmetric_test_link(target, T)) continue + has_border |= step_dir if(icon_edge_layer != FLOOR_EDGE_NONE) if(has_internal_edges) - if((has_smooth & step_dir) == step_dir) - edge_overlays += get_flooring_overlay("[icon]_[icon_base]-corner-[step_dir]", corner_state, step_dir, edge_layer = edge_layer) - else if((has_border & step_dir) == step_dir) - edge_overlays += get_flooring_overlay("[icon]_[icon_base]-edge-[step_dir]", edge_state, step_dir, edge_layer = edge_layer) + edge_overlays += get_flooring_overlay("[icon]_[icon_base]-edge-[step_dir]", edge_state, step_dir, edge_layer = edge_layer) if(has_external_edges && target.can_draw_edge_over(T)) - if((has_smooth & step_dir) == step_dir) - edge_overlays += get_flooring_overlay("[icon]_[icon_base]-outer-corner-[step_dir]", outer_corner_state, step_dir, TRUE, edge_layer = edge_layer) - else if((has_border & step_dir) == step_dir) - edge_overlays += get_flooring_overlay("[icon]_[icon_base]-outer-edge-[step_dir]", outer_edge_state, step_dir, TRUE, edge_layer = edge_layer) + edge_overlays += get_flooring_overlay("[icon]_[icon_base]-outer-edge-[step_dir]", outer_edge_state, step_dir, TRUE, edge_layer = edge_layer) + + var/has_smooth = ~(has_border & (NORTH | SOUTH | EAST | WEST)) + for(var/step_dir in global.cornerdirs) + var/turf/T = get_step_resolving_mimic(target, step_dir) + if(!istype(T) || symmetric_test_link(target, T)) + continue + if(has_internal_edges) + if((has_smooth & step_dir) == step_dir) + edge_overlays += get_flooring_overlay("[icon]_[icon_base]-corner-[step_dir]", corner_state, step_dir, edge_layer = edge_layer) + else if((has_border & step_dir) == step_dir) + edge_overlays += get_flooring_overlay("[icon]_[icon_base]-edge-[step_dir]", edge_state, step_dir, edge_layer = edge_layer) + if(has_external_edges && target.can_draw_edge_over(T)) + if((has_smooth & step_dir) == step_dir) + edge_overlays += get_flooring_overlay("[icon]_[icon_base]-outer-corner-[step_dir]", outer_corner_state, step_dir, TRUE, edge_layer = edge_layer) + else if((has_border & step_dir) == step_dir) + edge_overlays += get_flooring_overlay("[icon]_[icon_base]-outer-edge-[step_dir]", outer_edge_state, step_dir, TRUE, edge_layer = edge_layer) - if(length(edge_overlays)) - target.add_overlay(edge_overlays) + if(length(edge_overlays)) + target.add_overlay(edge_overlays) if(target.is_floor_broken()) target.add_overlay(get_damage_overlay(target._floor_broken)) @@ -300,7 +299,7 @@ var/global/list/flooring_cache = list() if(!user.do_skilled(remove_timer, SKILL_CONSTRUCTION, floor) || floor.get_topmost_flooring() != src) return TRUE to_chat(user, SPAN_NOTICE("You remove the [get_surface_descriptor()] with \the [item].")) - floor.set_flooring(null, place_product = TRUE) + floor.remove_flooring(floor.get_topmost_flooring(), place_product = TRUE) playsound(floor, 'sound/items/Deconstruct.ogg', 80, 1) return TRUE @@ -313,21 +312,21 @@ var/global/list/flooring_cache = list() if(floor.get_topmost_flooring() != src) return to_chat(user, SPAN_NOTICE("You remove the broken [get_surface_descriptor()].")) - floor.set_flooring(null) + floor.remove_flooring(floor.get_topmost_flooring()) else if(flooring_flags & TURF_IS_FRAGILE) if(!user.do_skilled(remove_timer, SKILL_CONSTRUCTION, floor, 0.15)) return TRUE if(floor.get_topmost_flooring() != src) return to_chat(user, SPAN_DANGER("You forcefully pry off the [get_surface_descriptor()], destroying them in the process.")) - floor.set_flooring(null) + floor.remove_flooring(floor.get_topmost_flooring()) else if(flooring_flags & TURF_REMOVE_CROWBAR) if(!user.do_skilled(remove_timer, SKILL_CONSTRUCTION, floor)) return TRUE if(floor.get_topmost_flooring() != src) return to_chat(user, SPAN_NOTICE("You lever off the [get_surface_descriptor()].")) - floor.set_flooring(null, place_product = TRUE) + floor.remove_flooring(floor.get_topmost_flooring(), place_product = TRUE) else return playsound(floor, 'sound/items/Crowbar.ogg', 80, 1) @@ -339,7 +338,7 @@ var/global/list/flooring_cache = list() if(!user.do_skilled(remove_timer, SKILL_CONSTRUCTION, floor) || floor.get_topmost_flooring() != src) return TRUE to_chat(user, SPAN_NOTICE("You unscrew and remove the [get_surface_descriptor()].")) - floor.set_flooring(null, place_product = TRUE) + floor.remove_flooring(floor.get_topmost_flooring(), place_product = TRUE) playsound(floor, 'sound/items/Screwdriver.ogg', 80, 1) return TRUE @@ -347,7 +346,7 @@ var/global/list/flooring_cache = list() if(!user.do_skilled(remove_timer, SKILL_CONSTRUCTION, floor) || floor.get_topmost_flooring() != src) return TRUE to_chat(user, SPAN_NOTICE("You unwrench and remove the [get_surface_descriptor()].")) - floor.set_flooring(null, place_product = TRUE) + floor.remove_flooring(floor.get_topmost_flooring(), place_product = TRUE) playsound(floor, 'sound/items/Ratchet.ogg', 80, 1) return TRUE diff --git a/code/game/turfs/flooring/flooring_grass.dm b/code/game/turfs/flooring/flooring_grass.dm index 8ac33265fdb8..e557193db38d 100644 --- a/code/game/turfs/flooring/flooring_grass.dm +++ b/code/game/turfs/flooring/flooring_grass.dm @@ -17,12 +17,12 @@ /decl/flooring/grass/fire_act(turf/floor/target, datum/gas_mixture/air, exposed_temperature, exposed_volume) if(target.get_topmost_flooring() == src && (exposed_temperature > T0C + 200 && prob(5)) || exposed_temperature > T0C + 1000) - target.set_flooring(null) + target.remove_flooring(target.get_topmost_flooring()) return TRUE return ..() /decl/flooring/grass/handle_turf_digging(turf/floor/target) - target.set_flooring(null) + target.remove_flooring(target.get_topmost_flooring()) return FALSE /decl/flooring/grass/wild @@ -42,7 +42,7 @@ if(IS_KNIFE(item) && harvestable && istype(floor_material) && floor_material.dug_drop_type) if(item.do_tool_interaction(TOOL_KNIFE, user, floor, 3 SECONDS, start_message = "harvesting", success_message = "harvesting") && !QDELETED(floor) && floor.get_topmost_flooring() == src) new floor_material.dug_drop_type(floor, rand(2,5)) - floor.set_flooring(/decl/flooring/grass) + floor.remove_flooring(src) return TRUE return ..() diff --git a/code/game/turfs/flooring/flooring_misc.dm b/code/game/turfs/flooring/flooring_misc.dm index cdedfb756198..d72c2f54d96d 100644 --- a/code/game/turfs/flooring/flooring_misc.dm +++ b/code/game/turfs/flooring/flooring_misc.dm @@ -3,7 +3,7 @@ desc = "A stretch of inlaid sections of flexible linoleum." icon = 'icons/turf/flooring/linoleum.dmi' icon_base = "lino" - can_paint = 1 + can_paint = TRUE build_type = /obj/item/stack/tile/linoleum flooring_flags = TURF_REMOVE_SCREWDRIVER footstep_type = /decl/footsteps/tiles diff --git a/code/game/turfs/flooring/flooring_reinforced.dm b/code/game/turfs/flooring/flooring_reinforced.dm index 0a46fa2d41ca..97ce3b7302e4 100644 --- a/code/game/turfs/flooring/flooring_reinforced.dm +++ b/code/game/turfs/flooring/flooring_reinforced.dm @@ -7,8 +7,8 @@ build_type = /obj/item/stack/material/sheet build_material = /decl/material/solid/metal/steel build_cost = 1 - build_time = 30 - can_paint = 1 + build_time = 3 SECONDS + can_paint = TRUE force_material = /decl/material/solid/metal/steel constructed = TRUE gender = NEUTER @@ -31,7 +31,7 @@ icon_base = "bcircuit" build_type = null flooring_flags = TURF_ACID_IMMUNE | TURF_REMOVE_WRENCH - can_paint = 1 + can_paint = TRUE can_engrave = FALSE turf_light_range = 2 turf_light_power = 3 @@ -44,7 +44,7 @@ /decl/flooring/reinforced/circuit/red icon_base = "rcircuit" flooring_flags = TURF_ACID_IMMUNE - can_paint = 0 + can_paint = FALSE turf_light_power = 2 turf_light_color = COLOR_RED @@ -54,7 +54,7 @@ icon = 'icons/turf/flooring/shuttle.dmi' build_type = null flooring_flags = TURF_ACID_IMMUNE | TURF_REMOVE_CROWBAR - can_paint = 1 + can_paint = TRUE can_engrave = FALSE gender = NEUTER diff --git a/code/game/turfs/flooring/flooring_snow.dm b/code/game/turfs/flooring/flooring_snow.dm index f1d1dded76ed..7ef511ab0e33 100644 --- a/code/game/turfs/flooring/flooring_snow.dm +++ b/code/game/turfs/flooring/flooring_snow.dm @@ -26,7 +26,7 @@ /decl/flooring/snow/fire_act(turf/floor/target, datum/gas_mixture/air, exposed_temperature, exposed_volume) if(!target.reagents?.total_volume) if(target.get_topmost_flooring() == src) - target.set_flooring(/decl/flooring/permafrost) + target.remove_flooring(src) else if(target.get_base_flooring() == src) target.set_base_flooring(/decl/flooring/permafrost) return diff --git a/code/game/turfs/flooring/flooring_tiled.dm b/code/game/turfs/flooring/flooring_tiled.dm index 96c1fb9c5e93..b8cf9e4c0154 100644 --- a/code/game/turfs/flooring/flooring_tiled.dm +++ b/code/game/turfs/flooring/flooring_tiled.dm @@ -8,7 +8,7 @@ damage_temperature = T0C+1400 flooring_flags = TURF_REMOVE_CROWBAR build_type = /obj/item/stack/tile/floor - can_paint = 1 + can_paint = TRUE footstep_type = /decl/footsteps/tiles force_material = /decl/material/solid/metal/steel wall_smooth = SMOOTH_ALL diff --git a/code/game/turfs/floors/_floor.dm b/code/game/turfs/floors/_floor.dm index d7e8441fda07..7dc51d0f1746 100644 --- a/code/game/turfs/floors/_floor.dm +++ b/code/game/turfs/floors/_floor.dm @@ -24,10 +24,6 @@ // Flooring data. var/floor_icon_state_override - // TODO: - VAR_PROTECTED/decl/flooring/_base_flooring = /decl/flooring/plating - VAR_PROTECTED/decl/flooring/_flooring - var/const/TRENCH_DEPTH_PER_ACTION = 100 /turf/floor/Initialize(var/ml, var/floortype) @@ -39,17 +35,19 @@ set_turf_materials(floor_material, skip_update = TRUE) - if(!floortype && ispath(_flooring)) + if(!floortype && (ispath(_flooring) || islist(_flooring))) floortype = _flooring + else + floortype = null if(floortype) - set_flooring(GET_DECL(floortype), skip_update = TRUE) + _flooring = null + set_flooring(floortype, skip_update = TRUE) fill_to_zero_height() // try to refill turfs that act as fluid sources if(floor_material || get_topmost_flooring()) - if(ml) - queue_icon_update() - else + update_from_flooring() + if(!ml) for(var/direction in global.alldirs) var/turf/target_turf = get_step_resolving_mimic(src, direction) if(istype(target_turf)) @@ -59,13 +57,14 @@ target_turf.update_icon() update_icon() + /turf/floor/ChangeTurf(turf/N, tell_universe, force_lighting_update, keep_air, update_open_turfs_above, keep_height) if(is_processing) STOP_PROCESSING(SSobj, src) . = ..() /turf/floor/Destroy() - set_flooring(null) + clear_flooring() if(is_processing) STOP_PROCESSING(SSobj, src) return ..() @@ -79,9 +78,6 @@ /turf/floor/can_climb_from_below(var/mob/climber) return TRUE -/turf/floor/proc/has_flooring() - return istype(_flooring) - /turf/floor/is_plating() if(density) return FALSE @@ -101,118 +97,6 @@ fill_to_zero_height() update_floor_strings() -/turf/floor/proc/set_base_flooring(new_base_flooring, skip_update) - if(ispath(new_base_flooring, /decl/flooring)) - new_base_flooring = GET_DECL(new_base_flooring) - else if(!istype(new_base_flooring, /decl/flooring)) - new_base_flooring = null - if(_base_flooring == new_base_flooring) - return - _base_flooring = new_base_flooring - if(!_base_flooring) // We can never have a null base flooring. - _base_flooring = GET_DECL(initial(_base_flooring)) || GET_DECL(/decl/flooring/plating) - update_from_flooring(skip_update) - -/turf/floor/proc/get_base_flooring() - RETURN_TYPE(/decl/flooring) - if(ispath(_base_flooring)) - return GET_DECL(_base_flooring) - return _base_flooring - -/turf/floor/proc/get_topmost_flooring() - RETURN_TYPE(/decl/flooring) - if(isnull(_flooring)) - return get_base_flooring() - if(ispath(_flooring)) - return GET_DECL(_flooring) - return _flooring - -/turf/floor/proc/set_flooring(var/decl/flooring/newflooring, skip_update, place_product) - - if(ispath(newflooring, /decl/flooring)) - newflooring = GET_DECL(newflooring) - else if(!istype(newflooring, /decl/flooring)) - newflooring = null - - if(_flooring == newflooring) - return FALSE - - if(istype(_flooring)) - - LAZYCLEARLIST(decals) - for(var/obj/effect/decal/writing/W in src) - qdel(W) - - _flooring.on_flooring_remove(src) - if(_flooring.build_type && place_product) - // If build type uses material stack, check for it - // Because material stack uses different arguments - // And we need to use build material to spawn stack - if(ispath(_flooring.build_type, /obj/item/stack/material)) - var/decl/material/M = GET_DECL(_flooring.build_material) - if(!M) - CRASH("[src] at ([x], [y], [z]) cannot create stack because it has a bad build_material path: '[_flooring.build_material]'") - M.create_object(src, _flooring.build_cost, _flooring.build_type) - else - var/obj/item/stack/tile/new_tile = new _flooring.build_type(src) - if(_flooring.can_paint && paint_color) - new_tile.paint_color = paint_color - - if(_flooring.has_environment_proc && is_processing) - STOP_PROCESSING(SSobj, src) - - _flooring = null - set_floor_broken(skip_update = TRUE) - set_floor_burned() - - else if(is_processing) - - STOP_PROCESSING(SSobj, src) - - _flooring = newflooring - floor_icon_state_override = null - update_from_flooring(skip_update) - - return TRUE - -/turf/floor/proc/update_from_flooring(skip_update) - - var/decl/flooring/copy_from = get_topmost_flooring() - if(!istype(copy_from)) - return // this should never be the case - - update_floor_strings() - - gender = copy_from.gender - layer = copy_from.floor_layer - turf_flags = copy_from.turf_flags - z_flags = copy_from.z_flags - - if(copy_from.turf_light_range || copy_from.turf_light_power || copy_from.turf_light_color) - set_light(copy_from.turf_light_range, copy_from.turf_light_power, copy_from.turf_light_color) - else - set_light(0) - - if(z_flags & ZM_MIMIC_BELOW) - enable_zmimic(z_flags) - else - disable_zmimic() - - if(copy_from.has_environment_proc && !is_processing) - START_PROCESSING(SSobj, src) - - levelupdate() - - for(var/obj/effect/footprints/print in src) - qdel(print) - - if(!skip_update) - update_icon() - for(var/dir in global.alldirs) - var/turf/neighbor = get_step_resolving_mimic(src, dir) - if(istype(neighbor)) - neighbor.update_icon() - /turf/floor/can_engrave() var/decl/flooring/flooring = get_topmost_flooring() return flooring ? flooring.can_engrave : can_engrave @@ -269,13 +153,6 @@ return my_material.color return color -/turf/floor/proc/get_all_flooring() - . = list() - if(istype(_flooring)) - . += _flooring - if(istype(_base_flooring)) - . += _base_flooring - /turf/floor/Process() for(var/decl/flooring/flooring in get_all_flooring()) if(flooring.has_environment_proc) diff --git a/code/game/turfs/floors/floor_acts.dm b/code/game/turfs/floors/floor_acts.dm index 38bf80eed757..1280fd30cfa9 100644 --- a/code/game/turfs/floors/floor_acts.dm +++ b/code/game/turfs/floors/floor_acts.dm @@ -42,7 +42,7 @@ if(!is_floor_burned() && prob(5)) burn_tile(exposed_temperature) else if(temp_destroy && exposed_temperature >= (temp_destroy + 100) && prob(1) && has_flooring()) - set_flooring(null) //destroy the tile, exposing plating + remove_flooring(get_topmost_flooring()) //destroy the tile, exposing plating burn_tile(exposed_temperature) return ..() diff --git a/code/game/turfs/floors/floor_damage.dm b/code/game/turfs/floors/floor_damage.dm index 05e7630e0a13..1fed09cc4c2e 100644 --- a/code/game/turfs/floors/floor_damage.dm +++ b/code/game/turfs/floors/floor_damage.dm @@ -1,6 +1,6 @@ /turf/floor/proc/break_tile_to_plating() if(has_flooring()) - set_flooring(null) + clear_flooring() break_tile() /turf/floor/proc/break_tile() diff --git a/code/game/turfs/floors/floor_icon.dm b/code/game/turfs/floors/floor_icon.dm index b7decba1b908..0946e0d363ed 100644 --- a/code/game/turfs/floors/floor_icon.dm +++ b/code/game/turfs/floors/floor_icon.dm @@ -172,20 +172,17 @@ return FALSE /decl/flooring/proc/test_link(var/turf/origin, var/turf/opponent) - if(!istype(origin) || !istype(opponent)) - return FALSE - // Just a normal floor if (istype(opponent, /turf/floor)) - var/turf/floor/floor_opponent = opponent - var/decl/flooring/opponent_flooring = floor_opponent.get_topmost_flooring() if (floor_smooth == SMOOTH_ALL) return TRUE + var/turf/floor/floor_opponent = opponent + var/decl/flooring/opponent_flooring = floor_opponent.get_topmost_flooring() //If the floor is the same as us,then we're linked, - else if (istype(opponent_flooring, neighbour_type)) + if (istype(opponent_flooring, neighbour_type)) return TRUE //If we get here it must be using a whitelist or blacklist - else if (floor_smooth == SMOOTH_WHITELIST) + if (floor_smooth == SMOOTH_WHITELIST) if (flooring_whitelist[opponent_flooring.type]) //Found a match on the typecache return TRUE @@ -194,9 +191,8 @@ //No match on the typecache return TRUE //Check for window frames. - if (wall_smooth == SMOOTH_ALL) - if(locate(/obj/structure/wall_frame) in opponent) - return TRUE + if (wall_smooth == SMOOTH_ALL && locate(/obj/structure/wall_frame) in opponent) + return TRUE // Wall turf else if(opponent.is_wall()) if(wall_smooth == SMOOTH_ALL) diff --git a/code/game/turfs/floors/floor_layers.dm b/code/game/turfs/floors/floor_layers.dm new file mode 100644 index 000000000000..e482d21fc5a4 --- /dev/null +++ b/code/game/turfs/floors/floor_layers.dm @@ -0,0 +1,257 @@ +/turf/floor + VAR_PROTECTED/decl/flooring/_base_flooring = /decl/flooring/plating + VAR_PROTECTED/list/decl/flooring/_flooring + VAR_PRIVATE/tmp/decl/flooring/_topmost_flooring + +/turf/floor/proc/get_all_flooring() + . = list() + if(istype(_flooring)) + . += _flooring + else if(ispath(_flooring)) + . += GET_DECL(_flooring) + else if(islist(_flooring)) + for(var/floor in _flooring) + if(ispath(floor)) + _flooring += GET_DECL(floor) + else if(istype(floor, /decl/flooring)) + _flooring += floor + if(_base_flooring) + . += get_base_flooring() + +/turf/floor/proc/has_flooring() + return !isnull(_flooring) + +/turf/floor/proc/set_base_flooring(new_base_flooring, skip_update) + if(ispath(new_base_flooring, /decl/flooring)) + new_base_flooring = GET_DECL(new_base_flooring) + else if(!istype(new_base_flooring, /decl/flooring)) + new_base_flooring = null + if(_base_flooring == new_base_flooring) + return + _base_flooring = new_base_flooring + if(!_base_flooring) // We can never have a null base flooring. + _base_flooring = GET_DECL(initial(_base_flooring)) || GET_DECL(/decl/flooring/plating) + update_from_flooring(skip_update) + +/turf/floor/proc/get_base_flooring() + RETURN_TYPE(/decl/flooring) + if(ispath(_base_flooring)) + _base_flooring = GET_DECL(_base_flooring) + return _base_flooring + +/turf/floor/proc/get_topmost_flooring() + RETURN_TYPE(/decl/flooring) + + if(isnull(_topmost_flooring)) + var/flooring_length = length(_flooring) + if(flooring_length) // no need to check islist, length is only nonzero for lists and strings, and strings are invalid here + _topmost_flooring = _flooring[flooring_length] + else if(istype(_flooring, /decl/flooring)) + _topmost_flooring = _flooring + else if(ispath(_flooring, /decl/flooring)) + _topmost_flooring = GET_DECL(_flooring) + else + _topmost_flooring = FALSE + return _topmost_flooring || get_base_flooring() + +/turf/floor/proc/clear_flooring(skip_update = FALSE, place_product) + if(isnull(_flooring)) + return FALSE + if(islist(_flooring)) + for(var/floor in _flooring) + remove_flooring(floor, TRUE, place_product) + else if(_flooring) + remove_flooring(_flooring, TRUE, place_product) + if(!skip_update) + update_from_flooring() + return TRUE + +/turf/floor/proc/remove_flooring(var/decl/flooring/flooring, skip_update, place_product) + + // Remove floor layers one by one. + _topmost_flooring = null + if(islist(flooring)) + for(var/floor in UNLINT(flooring)) + if(remove_flooring(floor, TRUE, place_product)) + . = TRUE + if(. && !skip_update) + set_floor_broken(skip_update = TRUE) + set_floor_burned(skip_update = TRUE) + update_from_flooring() + return + + // Validate our input. + if(ispath(flooring)) + flooring = GET_DECL(flooring) + if(!istype(flooring)) + return + + // Remove this turf from the layer stack. + var/was_topmost = (flooring == get_topmost_flooring()) + if(islist(_flooring)) + LAZYREMOVE(_flooring, flooring) + if(LAZYLEN(_flooring) == 1) + _flooring = _flooring[1] + else if(_flooring == flooring) + _flooring = null + + // If the turf was not the topmost turf, then we don't really need to care about it. + if(!was_topmost) + return + + LAZYCLEARLIST(decals) + for(var/obj/effect/decal/writing/W in src) + qdel(W) + + flooring.on_flooring_remove(src) + + if(flooring.build_type && place_product) + // If build_type uses material stack, check for it + // Because material stack uses different arguments + // And we need to use build material to spawn stack + if(ispath(flooring.build_type, /obj/item/stack/material)) + var/decl/material/M = GET_DECL(flooring.build_material) + if(!M) + CRASH("[src] at ([x], [y], [z]) cannot create stack because it has a bad build_material path: '[flooring.build_material]'") + M.create_object(src, flooring.build_cost, flooring.build_type) + else + var/obj/item/stack/tile/new_tile = new flooring.build_type(src) + if(flooring.can_paint && paint_color) + new_tile.paint_color = paint_color + + if(flooring.has_environment_proc && is_processing) + STOP_PROCESSING(SSobj, src) + + floor_icon_state_override = null + + if(!skip_update) + set_floor_broken(skip_update = TRUE) + set_floor_burned(skip_update = TRUE) + update_from_flooring() + +/turf/floor/proc/set_flooring(var/decl/flooring/newflooring, skip_update, place_product) + + _topmost_flooring = null + + // Clear this here to get it out of the way. + floor_icon_state_override = null + + // If _flooring is unset, we can shortcut a lot of these steps. + if(isnull(_flooring)) + + if(isnull(newflooring)) + return FALSE + + if(islist(newflooring)) + _flooring = list() + for(var/floor in UNLINT(newflooring)) + if(ispath(floor)) + floor = GET_DECL(floor) + if(istype(floor, /decl/flooring)) + _flooring += floor + else if(ispath(newflooring)) + _flooring = GET_DECL(newflooring) + else if(istype(newflooring)) + _flooring = newflooring + else + return FALSE + + if(!skip_update) + update_from_flooring() + return TRUE + + + // If we already have a flooring state, we need to do some cleanup and housekeeping. + clear_flooring(skip_update = TRUE, place_product = place_product) + if(!isnull(newflooring)) + add_flooring(newflooring, skip_update, place_product) + if(!skip_update) + update_from_flooring(skip_update) + +/turf/floor/proc/add_flooring(decl/flooring/newflooring, skip_update) + + _topmost_flooring = null + + // Add floor layers one by one. + if(islist(newflooring)) + for(var/floor in UNLINT(newflooring)) + if(add_flooring(floor, skip_update = FALSE)) + . = TRUE + if(!skip_update) + set_floor_broken(skip_update = TRUE) + set_floor_burned(skip_update = TRUE) + update_from_flooring() + return + + // We only want to work with references. + if(ispath(newflooring, /decl/flooring)) + newflooring = GET_DECL(newflooring) + else if(!istype(newflooring, /decl/flooring)) + return FALSE + + // Check if the layer is already present. + if(_flooring) + if(islist(_flooring)) + if(newflooring in _flooring) + return FALSE + else if(newflooring == _flooring) + return FALSE + + // Add our layer to the top of layers. + if(isnull(_flooring)) + _flooring = newflooring + else + if(!islist(_flooring)) + _flooring = list(_flooring) + _flooring |= newflooring + + // Update for the new top layer. + if(!skip_update) + set_floor_broken(skip_update = TRUE) + set_floor_burned(skip_update = TRUE) + update_from_flooring() + + return TRUE + +/turf/floor/proc/update_from_flooring(skip_update) + + _topmost_flooring = null + + var/decl/flooring/copy_from = get_topmost_flooring() + if(!istype(copy_from)) + return // this should never be the case + + update_floor_strings() + + gender = copy_from.gender + layer = copy_from.floor_layer + turf_flags = copy_from.turf_flags + z_flags = copy_from.z_flags + + if(copy_from.turf_light_range || copy_from.turf_light_power || copy_from.turf_light_color) + set_light(copy_from.turf_light_range, copy_from.turf_light_power, copy_from.turf_light_color) + else + set_light(0) + + if(z_flags & ZM_MIMIC_BELOW) + enable_zmimic(z_flags) + else + disable_zmimic() + + if(copy_from.has_environment_proc) + if(!is_processing) + START_PROCESSING(SSobj, src) + else if(is_processing) + STOP_PROCESSING(SSobj, src) + + levelupdate() + + for(var/obj/effect/footprints/print in src) + qdel(print) + + if(!skip_update) + update_icon() + for(var/dir in global.alldirs) + var/turf/neighbor = get_step_resolving_mimic(src, dir) + if(istype(neighbor)) + neighbor.update_icon() diff --git a/code/game/turfs/floors/subtypes/floor_carpet.dm b/code/game/turfs/floors/subtypes/floor_carpet.dm index 8292e7cbdc86..32ce9f728b92 100644 --- a/code/game/turfs/floors/subtypes/floor_carpet.dm +++ b/code/game/turfs/floors/subtypes/floor_carpet.dm @@ -1,9 +1,8 @@ - /turf/floor/carpet - name = "brown carpet" - icon = 'icons/turf/flooring/carpet.dmi' - icon_state = "brown" - _flooring = /decl/flooring/carpet + name = "brown carpet" + icon = 'icons/turf/flooring/carpet.dmi' + icon_state = "brown" + _flooring = /decl/flooring/carpet /turf/floor/carpet/broken _floor_broken = TRUE @@ -15,49 +14,49 @@ set_floor_broken(setting_broken) /turf/floor/carpet/blue - name = "blue carpet" - icon_state = "blue1" - _flooring = /decl/flooring/carpet/blue + name = "blue carpet" + icon_state = "blue1" + _flooring = /decl/flooring/carpet/blue /turf/floor/carpet/blue2 - name = "pale blue carpet" - icon_state = "blue2" - _flooring = /decl/flooring/carpet/blue2 + name = "pale blue carpet" + icon_state = "blue2" + _flooring = /decl/flooring/carpet/blue2 /turf/floor/carpet/blue3 - name = "sea blue carpet" - icon_state = "blue3" - _flooring = /decl/flooring/carpet/blue3 + name = "sea blue carpet" + icon_state = "blue3" + _flooring = /decl/flooring/carpet/blue3 /turf/floor/carpet/magenta - name = "magenta carpet" - icon_state = "magenta" - _flooring = /decl/flooring/carpet/magenta + name = "magenta carpet" + icon_state = "magenta" + _flooring = /decl/flooring/carpet/magenta /turf/floor/carpet/purple - name = "purple carpet" - icon_state = "purple" - _flooring = /decl/flooring/carpet/purple + name = "purple carpet" + icon_state = "purple" + _flooring = /decl/flooring/carpet/purple /turf/floor/carpet/orange - name = "orange carpet" - icon_state = "orange" - _flooring = /decl/flooring/carpet/orange + name = "orange carpet" + icon_state = "orange" + _flooring = /decl/flooring/carpet/orange /turf/floor/carpet/green - name = "green carpet" - icon_state = "green" - _flooring = /decl/flooring/carpet/green + name = "green carpet" + icon_state = "green" + _flooring = /decl/flooring/carpet/green /turf/floor/carpet/red - name = "red carpet" - icon_state = "red" - _flooring = /decl/flooring/carpet/red + name = "red carpet" + icon_state = "red" + _flooring = /decl/flooring/carpet/red /turf/floor/carpet/rustic - name = "rustic carpet" - icon = 'icons/turf/flooring/simple_carpet.dmi' - icon_state = "carpet" - _flooring = /decl/flooring/carpet/rustic + name = "rustic carpet" + icon = 'icons/turf/flooring/simple_carpet.dmi' + icon_state = "carpet" + _flooring = /decl/flooring/carpet/rustic paint_color = COLOR_CHESTNUT - color = COLOR_CHESTNUT \ No newline at end of file + color = COLOR_CHESTNUT \ No newline at end of file diff --git a/code/game/turfs/floors/subtypes/floor_circuit.dm b/code/game/turfs/floors/subtypes/floor_circuit.dm index f050f13a93e4..7684009c32a4 100644 --- a/code/game/turfs/floors/subtypes/floor_circuit.dm +++ b/code/game/turfs/floors/subtypes/floor_circuit.dm @@ -1,26 +1,26 @@ /turf/floor/bluegrid - name = "mainframe floor" - icon = 'icons/turf/flooring/circuit.dmi' - icon_state = "bcircuit" - _flooring = /decl/flooring/reinforced/circuit + name = "mainframe floor" + icon = 'icons/turf/flooring/circuit.dmi' + icon_state = "bcircuit" + _flooring = /decl/flooring/reinforced/circuit /turf/floor/bluegrid/airless - name = "airless floor" + name = "airless floor" initial_gas = null temperature = TCMB /turf/floor/bluegrid/mainframe - name = "mainframe base" // TODO: force name overriding flooring? + name = "mainframe base" // TODO: force name overriding flooring? temperature = 263 /turf/floor/greengrid - name = "mainframe floor" - icon = 'icons/turf/flooring/circuit.dmi' - icon_state = "gcircuit" - _flooring = /decl/flooring/reinforced/circuit/green + name = "mainframe floor" + icon = 'icons/turf/flooring/circuit.dmi' + icon_state = "gcircuit" + _flooring = /decl/flooring/reinforced/circuit/green /turf/floor/greengrid/airless - name = "airless floor" + name = "airless floor" initial_gas = null temperature = TCMB @@ -28,7 +28,7 @@ initial_gas = list(/decl/material/gas/nitrogen = MOLES_N2STANDARD) /turf/floor/blackgrid - name = "mainframe floor" - icon = 'icons/turf/flooring/circuit.dmi' - icon_state = "rcircuit" - _flooring = /decl/flooring/reinforced/circuit/red + name = "mainframe floor" + icon = 'icons/turf/flooring/circuit.dmi' + icon_state = "rcircuit" + _flooring = /decl/flooring/reinforced/circuit/red diff --git a/code/game/turfs/floors/subtypes/floor_concrete.dm b/code/game/turfs/floors/subtypes/floor_concrete.dm index 2c1380031ff0..7e8056a04c70 100644 --- a/code/game/turfs/floors/subtypes/floor_concrete.dm +++ b/code/game/turfs/floors/subtypes/floor_concrete.dm @@ -7,23 +7,23 @@ floor_material = /decl/material/solid/stone/concrete /turf/floor/concrete/smooth - icon_state = "concrete" + icon_state = "concrete" /turf/floor/concrete/flooded - flooded = /decl/material/liquid/water - color = COLOR_LIQUID_WATER + flooded = /decl/material/liquid/water + color = COLOR_LIQUID_WATER /turf/floor/concrete/reinforced - name = "reinforced concrete" - icon_state = "hexacrete" - _flooring = /decl/flooring/concrete/reinforced + name = "reinforced concrete" + icon_state = "hexacrete" + _flooring = /decl/flooring/concrete/reinforced /turf/floor/concrete/reinforced/damaged/LateInitialize() . = ..() set_floor_broken(TRUE) /turf/floor/concrete/reinforced/road - name = "asphalt" - color = COLOR_GRAY40 - icon_state = "concrete" - _flooring = /decl/flooring/concrete/asphalt + name = "asphalt" + color = COLOR_GRAY40 + icon_state = "concrete" + _flooring = /decl/flooring/concrete/asphalt diff --git a/code/game/turfs/floors/subtypes/floor_misc.dm b/code/game/turfs/floors/subtypes/floor_misc.dm index 91c472fc284a..ad32a2b3b417 100644 --- a/code/game/turfs/floors/subtypes/floor_misc.dm +++ b/code/game/turfs/floors/subtypes/floor_misc.dm @@ -1,54 +1,54 @@ /turf/floor/lino - name = "lino" - icon = 'icons/turf/flooring/linoleum.dmi' - icon_state = "lino" - _flooring = /decl/flooring/linoleum + name = "lino" + icon = 'icons/turf/flooring/linoleum.dmi' + icon_state = "lino" + _flooring = /decl/flooring/linoleum /turf/floor/crystal - name = "crystal floor" - icon = 'icons/turf/flooring/crystal.dmi' - icon_state = "crystal" - _flooring = /decl/flooring/crystal + name = "crystal floor" + icon = 'icons/turf/flooring/crystal.dmi' + icon_state = "crystal" + _flooring = /decl/flooring/crystal /turf/floor/glass - name = "glass floor" - icon = 'icons/turf/flooring/glass.dmi' - icon_state = "glass" - _flooring = /decl/flooring/glass + name = "glass floor" + icon = 'icons/turf/flooring/glass.dmi' + icon_state = "glass" + _flooring = /decl/flooring/glass /turf/floor/glass/boro - _flooring = /decl/flooring/glass/boro + _flooring = /decl/flooring/glass/boro /turf/floor/pool - name = "pool floor" - icon = 'icons/turf/flooring/pool.dmi' - icon_state = "pool" - height = -(FLUID_OVER_MOB_HEAD) - 50 - _flooring = /decl/flooring/pool + name = "pool floor" + icon = 'icons/turf/flooring/pool.dmi' + icon_state = "pool" + height = -(FLUID_OVER_MOB_HEAD) - 50 + _flooring = /decl/flooring/pool /turf/floor/pool/deep - height = -FLUID_DEEP - 50 + height = -FLUID_DEEP - 50 /turf/floor/fake_grass - name = "grass patch" - icon = 'icons/turf/flooring/fakegrass.dmi' - icon_state = "grass0" - _flooring = /decl/flooring/grass/fake + name = "grass patch" + icon = 'icons/turf/flooring/fakegrass.dmi' + icon_state = "grass0" + _flooring = /decl/flooring/grass/fake /turf/floor/woven - name = "floor" - icon = 'icons/turf/flooring/woven.dmi' - icon_state = "woven" - color = COLOR_BEIGE - _flooring = /decl/flooring/woven + name = "floor" + icon = 'icons/turf/flooring/woven.dmi' + icon_state = "woven" + color = COLOR_BEIGE + _flooring = /decl/flooring/woven /turf/floor/straw - name = "loose straw" - icon = 'icons/turf/flooring/straw.dmi' - icon_state = "straw" - color = COLOR_WHEAT - _flooring = /decl/flooring/straw + name = "loose straw" + icon = 'icons/turf/flooring/straw.dmi' + icon_state = "straw" + color = COLOR_WHEAT + _flooring = /decl/flooring/straw // Defining this here as a dummy mapping shorthand so mappers can search for 'plating'. /turf/floor/plating @@ -63,7 +63,7 @@ _flooring = /decl/flooring/dirt /turf/floor/plating/broken - _floor_broken = TRUE + _floor_broken = TRUE /turf/floor/plating/broken/Initialize(ml, floortype) . = ..() @@ -72,12 +72,12 @@ set_floor_broken(setting_broken) /turf/floor/plating/airless - name = "airless plating" - initial_gas = null - temperature = TCMB + name = "airless plating" + initial_gas = null + temperature = TCMB /turf/floor/plating/airless/broken - _floor_broken = TRUE + _floor_broken = TRUE /turf/floor/plating/airless/broken/Initialize(ml, floortype) . = ..() @@ -86,13 +86,13 @@ set_floor_broken(setting_broken) /turf/floor/plating/broken/one - _floor_broken = "broken1" + _floor_broken = "broken1" /turf/floor/plating/broken/two - _floor_broken = "broken2" + _floor_broken = "broken2" /turf/floor/plating/broken/three - _floor_broken = "broken3" + _floor_broken = "broken3" /turf/floor/plating/broken/four - _floor_broken = "broken4" + _floor_broken = "broken4" diff --git a/code/game/turfs/floors/subtypes/floor_natural.dm b/code/game/turfs/floors/subtypes/floor_natural.dm index 5851afd8ab9c..f265dea98b1f 100644 --- a/code/game/turfs/floors/subtypes/floor_natural.dm +++ b/code/game/turfs/floors/subtypes/floor_natural.dm @@ -1,104 +1,116 @@ /turf/floor/barren - name = "ground" - icon = 'icons/turf/flooring/barren.dmi' - icon_state = "barren" - _base_flooring = /decl/flooring/barren + name = "ground" + icon = 'icons/turf/flooring/barren.dmi' + icon_state = "barren" + _base_flooring = /decl/flooring/barren /turf/floor/dirt - name = "dirt" - icon = 'icons/turf/flooring/dirt.dmi' - icon_state = "dirt" - color = /decl/material/solid/soil::color // preview color - _base_flooring = /decl/flooring/dirt + name = "dirt" + icon = 'icons/turf/flooring/dirt.dmi' + icon_state = "dirt" + color = /decl/material/solid/soil::color // preview color + _base_flooring = /decl/flooring/dirt /turf/floor/chlorine_sand - name = "chlorinated sand" - icon = 'icons/turf/flooring/chlorine_sand.dmi' - icon_state = "chlorine0" - _base_flooring = /decl/flooring/sand/chlorine + name = "chlorinated sand" + icon = 'icons/turf/flooring/chlorine_sand.dmi' + icon_state = "chlorine0" + _base_flooring = /decl/flooring/sand/chlorine /turf/floor/chlorine_sand/marsh - name = "chlorine marsh" + name = "chlorine marsh" + _base_flooring = /decl/flooring/sand/chlorine/marsh + height = -(FLUID_SHALLOW) fill_reagent_type = /decl/material/gas/chlorine - _base_flooring = /decl/flooring/sand/chlorine/marsh - height = -(FLUID_SHALLOW) /turf/floor/lava - name = "lava" - icon = 'icons/turf/flooring/lava.dmi' - icon_state = "lava" - _base_flooring = /decl/flooring/lava + name = "lava" + icon = 'icons/turf/flooring/lava.dmi' + icon_state = "lava" + _base_flooring = /decl/flooring/lava /turf/floor/grass - name = "grass" - icon = 'icons/turf/flooring/grass.dmi' - icon_state = "grass0" - color = "#5e7a3b" - _flooring = /decl/flooring/grass - _base_flooring = /decl/flooring/dirt + name = "grass" + icon = 'icons/turf/flooring/grass.dmi' + icon_state = "grass0" + color = "#5e7a3b" + _flooring = /decl/flooring/grass + _base_flooring = /decl/flooring/dirt + +/turf/floor/grass/snow + name = "snow" + icon = 'icons/turf/flooring/snow.dmi' + icon_state = "snow0" + _flooring = list( + /decl/flooring/grass, + /decl/flooring/snow + ) /turf/floor/grass/wild - name = "wild grass" - icon = 'icons/turf/flooring/wildgrass.dmi' - icon_state = "wildgrass" - _flooring = /decl/flooring/grass/wild - _base_flooring = /decl/flooring/dirt + name = "wild grass" + icon = 'icons/turf/flooring/wildgrass.dmi' + icon_state = "wildgrass" + _flooring = list( + /decl/flooring/grass, + /decl/flooring/grass/wild + ) + _base_flooring = /decl/flooring/dirt /turf/floor/ice - name = "ice" - icon = 'icons/turf/flooring/ice.dmi' - icon_state = "ice" - color = COLOR_LIQUID_WATER - _flooring = /decl/flooring/ice - _base_flooring = /decl/flooring/dirt + name = "ice" + icon = 'icons/turf/flooring/ice.dmi' + icon_state = "ice" + color = COLOR_LIQUID_WATER + _flooring = /decl/flooring/ice + _base_flooring = /decl/flooring/dirt /turf/floor/snow - name = "snow" - icon = 'icons/turf/flooring/snow.dmi' - icon_state = "snow0" - _flooring = /decl/flooring/snow - _base_flooring = /decl/flooring/dirt + name = "snow" + icon = 'icons/turf/flooring/snow.dmi' + icon_state = "snow0" + _flooring = /decl/flooring/snow + _base_flooring = /decl/flooring/dirt /turf/floor/clay - name = "clay" - icon = 'icons/turf/flooring/clay.dmi' - icon_state = "clay" - _base_flooring = /decl/flooring/clay + name = "clay" + icon = 'icons/turf/flooring/clay.dmi' + icon_state = "clay" + _base_flooring = /decl/flooring/clay /turf/floor/clay/flooded - flooded = /decl/material/liquid/water + flooded = /decl/material/liquid/water /turf/floor/mud - name = "mud" - icon = 'icons/turf/flooring/mud.dmi' - icon_state = "mud" - color = /decl/material/solid/soil::color // preview color - _base_flooring = /decl/flooring/mud + name = "mud" + icon = 'icons/turf/flooring/mud.dmi' + icon_state = "mud" + color = /decl/material/solid/soil::color // preview color + _base_flooring = /decl/flooring/mud /turf/floor/mud/water - color = COLOR_SKY_BLUE + color = COLOR_SKY_BLUE + height = -(FLUID_SHALLOW) fill_reagent_type = /decl/material/liquid/water - height = -(FLUID_SHALLOW) /turf/floor/mud/water/deep - color = COLOR_BLUE - height = -(FLUID_DEEP) + color = COLOR_BLUE + height = -(FLUID_DEEP) /turf/floor/mud/flooded - flooded = /decl/material/liquid/water + flooded = /decl/material/liquid/water /turf/floor/dry - name = "dry mud" - icon = 'icons/turf/flooring/seafloor.dmi' - icon_state = "seafloor" - _base_flooring = /decl/flooring/dry_mud + name = "dry mud" + icon = 'icons/turf/flooring/seafloor.dmi' + icon_state = "seafloor" + _base_flooring = /decl/flooring/dry_mud /turf/floor/rock/sand - name = "sand" - icon = 'icons/turf/flooring/sand.dmi' - icon_state = "sand0" - color = "#ae9e66" - _flooring = /decl/flooring/sand + name = "sand" + icon = 'icons/turf/flooring/sand.dmi' + icon_state = "sand0" + color = "#ae9e66" + _flooring = /decl/flooring/sand /turf/floor/rock/basalt/sand name = "sand" @@ -108,30 +120,30 @@ _flooring = /decl/flooring/sand /turf/floor/rock/sand/water - color = COLOR_SKY_BLUE + color = COLOR_SKY_BLUE + height = -(FLUID_SHALLOW) fill_reagent_type = /decl/material/liquid/water - height = -(FLUID_SHALLOW) /turf/floor/rock/sand/water/deep - color = COLOR_BLUE - height = -(FLUID_DEEP) + color = COLOR_BLUE + height = -(FLUID_DEEP) /turf/floor/seafloor - name = "sea floor" - icon = 'icons/turf/flooring/seafloor.dmi' - icon_state = "seafloor" - _base_flooring = /decl/flooring/seafloor + name = "sea floor" + icon = 'icons/turf/flooring/seafloor.dmi' + icon_state = "seafloor" + _base_flooring = /decl/flooring/seafloor /turf/floor/seafloor/flooded - flooded = /decl/material/liquid/water - color = COLOR_LIQUID_WATER + flooded = /decl/material/liquid/water + color = COLOR_LIQUID_WATER /turf/floor/shrouded - name = "packed sand" - icon = 'icons/turf/flooring/shrouded.dmi' - icon_state = "shrouded0" - _base_flooring = /decl/flooring/shrouded + name = "packed sand" + icon = 'icons/turf/flooring/shrouded.dmi' + icon_state = "shrouded0" + _base_flooring = /decl/flooring/shrouded /turf/floor/shrouded/tar - height = -(FLUID_SHALLOW) + height = -(FLUID_SHALLOW) fill_reagent_type = /decl/material/liquid/tar diff --git a/code/game/turfs/floors/subtypes/floor_path.dm b/code/game/turfs/floors/subtypes/floor_path.dm index 8a984656793a..65e09e4733c7 100644 --- a/code/game/turfs/floors/subtypes/floor_path.dm +++ b/code/game/turfs/floors/subtypes/floor_path.dm @@ -1,14 +1,14 @@ /turf/floor/path - name = "path" - gender = NEUTER - desc = "A cobbled path made of loose stones." - color = COLOR_GRAY - icon = 'icons/turf/flooring/path.dmi' - icon_state = "cobble" - _flooring = /decl/flooring/path/cobblestone - floor_material = /decl/material/solid/stone/sandstone - _base_flooring = /decl/flooring/dirt + name = "path" + gender = NEUTER + desc = "A cobbled path made of loose stones." + color = COLOR_GRAY + icon = 'icons/turf/flooring/path.dmi' + icon_state = "cobble" + _flooring = /decl/flooring/path/cobblestone + floor_material = /decl/material/solid/stone/sandstone + _base_flooring = /decl/flooring/dirt /turf/floor/path/Initialize(mapload, no_update_icon) . = ..() @@ -28,12 +28,12 @@ LAZYADD(decals, moss) /turf/floor/path/running_bond - icon_state = "runningbond" - _flooring = /decl/flooring/path/running_bond + icon_state = "runningbond" + _flooring = /decl/flooring/path/running_bond /turf/floor/path/herringbone - icon_state = "herringbone" - _flooring = /decl/flooring/path/herringbone + icon_state = "herringbone" + _flooring = /decl/flooring/path/herringbone // Material subtypes. #define PATH_MATERIAL_SUBTYPES(material_name) \ diff --git a/code/game/turfs/floors/subtypes/floor_reinforced.dm b/code/game/turfs/floors/subtypes/floor_reinforced.dm index 60239d44d9cd..5ea377aa3961 100644 --- a/code/game/turfs/floors/subtypes/floor_reinforced.dm +++ b/code/game/turfs/floors/subtypes/floor_reinforced.dm @@ -1,14 +1,17 @@ /turf/floor/reinforced - name = "reinforced floor" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "reinforced" - _flooring = /decl/flooring/reinforced + name = "reinforced floor" + icon = 'icons/turf/flooring/tiles.dmi' + icon_state = "reinforced" + _flooring = /decl/flooring/reinforced /turf/floor/reinforced/airless initial_gas = null /turf/floor/reinforced/airmix - initial_gas = list(/decl/material/gas/oxygen = MOLES_O2ATMOS, /decl/material/gas/nitrogen = MOLES_N2ATMOS) + initial_gas = list( + /decl/material/gas/oxygen = MOLES_O2ATMOS, + /decl/material/gas/nitrogen = MOLES_N2ATMOS + ) /turf/floor/reinforced/nitrogen initial_gas = list(/decl/material/gas/nitrogen = ATMOSTANK_NITROGEN) @@ -20,7 +23,7 @@ initial_gas = list(/decl/material/gas/oxygen = ATMOSTANK_OXYGEN) /turf/floor/reinforced/nitrogen/engine - name = "engine floor" + name = "engine floor" initial_gas = list(/decl/material/gas/nitrogen = MOLES_N2STANDARD) /turf/floor/reinforced/hydrogen/fuel @@ -33,6 +36,6 @@ initial_gas = list(/decl/material/gas/nitrous_oxide = ATMOSTANK_NITROUSOXIDE) /turf/floor/reinforced/airless - name = "vacuum floor" + name = "vacuum floor" initial_gas = null temperature = TCMB diff --git a/code/game/turfs/floors/subtypes/floor_shuttle.dm b/code/game/turfs/floors/subtypes/floor_shuttle.dm index 10b72a1f1051..24c79df35f49 100644 --- a/code/game/turfs/floors/subtypes/floor_shuttle.dm +++ b/code/game/turfs/floors/subtypes/floor_shuttle.dm @@ -1,33 +1,33 @@ /turf/floor/shuttle - name = "shuttle floor" - icon = 'icons/turf/flooring/shuttle.dmi' - desc = "A synthetic floor plate commonly seen in shuttles and other vehicles." - _flooring = /decl/flooring/reinforced/shuttle + name = "shuttle floor" + icon = 'icons/turf/flooring/shuttle.dmi' + desc = "A synthetic floor plate commonly seen in shuttles and other vehicles." + _flooring = /decl/flooring/reinforced/shuttle /turf/floor/shuttle/blue icon_state = "floor" - _flooring = /decl/flooring/reinforced/shuttle/blue + _flooring = /decl/flooring/reinforced/shuttle/blue /turf/floor/shuttle/yellow icon_state = "floor2" - _flooring = /decl/flooring/reinforced/shuttle/yellow + _flooring = /decl/flooring/reinforced/shuttle/yellow /turf/floor/shuttle/white icon_state = "floor3" - _flooring = /decl/flooring/reinforced/shuttle/white + _flooring = /decl/flooring/reinforced/shuttle/white /turf/floor/shuttle/red icon_state = "floor4" - _flooring = /decl/flooring/reinforced/shuttle/red + _flooring = /decl/flooring/reinforced/shuttle/red /turf/floor/shuttle/purple icon_state = "floor5" - _flooring = /decl/flooring/reinforced/shuttle/purple + _flooring = /decl/flooring/reinforced/shuttle/purple /turf/floor/shuttle/darkred icon_state = "floor6" - _flooring = /decl/flooring/reinforced/shuttle/darkred + _flooring = /decl/flooring/reinforced/shuttle/darkred /turf/floor/shuttle/black icon_state = "floor7" - _flooring = /decl/flooring/reinforced/shuttle/black + _flooring = /decl/flooring/reinforced/shuttle/black diff --git a/code/game/turfs/floors/subtypes/floor_static.dm b/code/game/turfs/floors/subtypes/floor_static.dm index 47cf104cd6ad..e990493c61a4 100644 --- a/code/game/turfs/floors/subtypes/floor_static.dm +++ b/code/game/turfs/floors/subtypes/floor_static.dm @@ -2,12 +2,12 @@ // Use this to bypass the flooring system entirely ie. event areas, holodeck, etc. /turf/floor/fixed - name = "floor" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "steel" - _flooring = null + name = "floor" + icon = 'icons/turf/flooring/tiles.dmi' + icon_state = "steel" + _flooring = null footstep_type = /decl/footsteps/plating - is_outside = OUTSIDE_AREA + is_outside = OUTSIDE_AREA /turf/floor/fixed/attackby(var/obj/item/C, var/mob/user) if(istype(C, /obj/item/stack) && !IS_COIL(C)) @@ -24,10 +24,10 @@ return /turf/floor/fixed/alium - name = "alien plating" - desc = "This obviously wasn't made for your feet." - icon = 'icons/turf/flooring/alium.dmi' - icon_state = "jaggy" + name = "alien plating" + desc = "This obviously wasn't made for your feet." + icon = 'icons/turf/flooring/alium.dmi' + icon_state = "jaggy" /turf/floor/fixed/alium/attackby(var/obj/item/C, var/mob/user) if(IS_CROWBAR(C)) @@ -45,8 +45,8 @@ icon_state = "[style][(x*y) % 7]" /turf/floor/fixed/alium/airless - initial_gas = null - temperature = TCMB + initial_gas = null + temperature = TCMB /turf/floor/fixed/alium/explosion_act(severity) SHOULD_CALL_PARENT(FALSE) diff --git a/code/game/turfs/floors/subtypes/floor_tiled.dm b/code/game/turfs/floors/subtypes/floor_tiled.dm index b92260c905e4..33dc224c1966 100644 --- a/code/game/turfs/floors/subtypes/floor_tiled.dm +++ b/code/game/turfs/floors/subtypes/floor_tiled.dm @@ -1,117 +1,117 @@ //Tiled floor + sub-types /turf/floor/tiled - name = "floor" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "tiled" - _flooring = /decl/flooring/tiling + name = "floor" + icon = 'icons/turf/flooring/tiles.dmi' + icon_state = "tiled" + _flooring = /decl/flooring/tiling /turf/floor/tiled/dark - name = "dark floor" - icon_state = "dark" - _flooring = /decl/flooring/tiling/dark + name = "dark floor" + icon_state = "dark" + _flooring = /decl/flooring/tiling/dark /turf/floor/tiled/dark/monotile - name = "floor" - icon_state = "monotiledark" - _flooring = /decl/flooring/tiling/mono/dark + name = "floor" + icon_state = "monotiledark" + _flooring = /decl/flooring/tiling/mono/dark /turf/floor/tiled/dark/monotile/telecomms - name = "telecomms dark floor" // TODO: force name overriding flooring? - temperature = 263 + name = "telecomms dark floor" // TODO: force name overriding flooring? + temperature = 263 /turf/floor/tiled/dark/airless - initial_gas = null + initial_gas = null /turf/floor/tiled/white - name = "white floor" - icon_state = "white" - _flooring = /decl/flooring/tiling/white + name = "white floor" + icon_state = "white" + _flooring = /decl/flooring/tiling/white /turf/floor/tiled/white/monotile - name = "floor" - icon_state = "monotile" - _flooring = /decl/flooring/tiling/mono/white + name = "floor" + icon_state = "monotile" + _flooring = /decl/flooring/tiling/mono/white /turf/floor/tiled/monofloor - name = "floor" - icon_state = "steel_monofloor" - _flooring = /decl/flooring/tiling/mono + name = "floor" + icon_state = "steel_monofloor" + _flooring = /decl/flooring/tiling/mono /turf/floor/tiled/white/airless - name = "airless floor" - initial_gas = null - temperature = TCMB + name = "airless floor" + initial_gas = null + temperature = TCMB /turf/floor/tiled/freezer - name = "tiles" - icon_state = "freezer" - _flooring = /decl/flooring/tiling/freezer + name = "tiles" + icon_state = "freezer" + _flooring = /decl/flooring/tiling/freezer /turf/floor/tiled/freezer/kitchen - name = "kitchen freezer floor" // TODO: force override of flooring name - temperature = 263 + name = "kitchen freezer floor" // TODO: force override of flooring name + temperature = 263 /turf/floor/tiled/techmaint - name = "floor" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "techmaint" - _flooring = /decl/flooring/tiling/new_tile/techmaint + name = "floor" + icon = 'icons/turf/flooring/tiles.dmi' + icon_state = "techmaint" + _flooring = /decl/flooring/tiling/new_tile/techmaint /turf/floor/tiled/monofloor - name = "floor" - icon_state = "steel_monofloor" - _flooring = /decl/flooring/tiling/new_tile/monofloor + name = "floor" + icon_state = "steel_monofloor" + _flooring = /decl/flooring/tiling/new_tile/monofloor /turf/floor/tiled/techfloor - name = "floor" - icon = 'icons/turf/flooring/techfloor.dmi' - icon_state = "techfloor_gray" - _flooring = /decl/flooring/tiling/tech + name = "floor" + icon = 'icons/turf/flooring/techfloor.dmi' + icon_state = "techfloor_gray" + _flooring = /decl/flooring/tiling/tech /turf/floor/tiled/monotile - name = "floor" - icon_state = "steel_monotile" - _flooring = /decl/flooring/tiling/mono + name = "floor" + icon_state = "steel_monotile" + _flooring = /decl/flooring/tiling/mono /turf/floor/tiled/steel_grid - name = "floor" - icon_state = "steel_grid" - _flooring = /decl/flooring/tiling/new_tile/steel_grid + name = "floor" + icon_state = "steel_grid" + _flooring = /decl/flooring/tiling/new_tile/steel_grid /turf/floor/tiled/steel_ridged - name = "floor" - icon_state = "steel_ridged" - _flooring = /decl/flooring/tiling/new_tile/steel_ridged + name = "floor" + icon_state = "steel_ridged" + _flooring = /decl/flooring/tiling/new_tile/steel_ridged /turf/floor/tiled/old_tile - name = "floor" - icon_state = "tile_full" - _flooring = /decl/flooring/tiling/new_tile + name = "floor" + icon_state = "tile_full" + _flooring = /decl/flooring/tiling/new_tile /turf/floor/tiled/old_cargo - name = "floor" - icon_state = "cargo_one_full" - _flooring = /decl/flooring/tiling/new_tile/cargo_one + name = "floor" + icon_state = "cargo_one_full" + _flooring = /decl/flooring/tiling/new_tile/cargo_one /turf/floor/tiled/kafel_full - name = "floor" - icon_state = "kafel_full" - _flooring = /decl/flooring/tiling/new_tile/kafel + name = "floor" + icon_state = "kafel_full" + _flooring = /decl/flooring/tiling/new_tile/kafel /turf/floor/tiled/stone - name = "stone slab floor" - icon_state = "stone" - _flooring = /decl/flooring/tiling/stone + name = "stone slab floor" + icon_state = "stone" + _flooring = /decl/flooring/tiling/stone /turf/floor/tiled/techfloor/grid - name = "floor" - icon_state = "techfloor_grid" - _flooring = /decl/flooring/tiling/tech/grid + name = "floor" + icon_state = "techfloor_grid" + _flooring = /decl/flooring/tiling/tech/grid /turf/floor/tiled/airless - name = "airless floor" - initial_gas = null - temperature = TCMB + name = "airless floor" + initial_gas = null + temperature = TCMB /turf/floor/tiled/airless/broken _floor_broken = TRUE diff --git a/code/game/turfs/floors/subtypes/floor_wood.dm b/code/game/turfs/floors/subtypes/floor_wood.dm index eff98a2a1176..c2d1dcb87500 100644 --- a/code/game/turfs/floors/subtypes/floor_wood.dm +++ b/code/game/turfs/floors/subtypes/floor_wood.dm @@ -1,18 +1,18 @@ /turf/floor/wood - name = "wooden floor" - icon = 'icons/turf/flooring/wood.dmi' - icon_state = "wood0" - color = /decl/material/solid/organic/wood/oak::color - _flooring = /decl/flooring/wood + name = "wooden floor" + icon = 'icons/turf/flooring/wood.dmi' + icon_state = "wood0" + color = /decl/material/solid/organic/wood/oak::color + _flooring = /decl/flooring/wood #define WOOD_FLOOR_SUBTYPE(BASE, WOOD) \ /turf/floor/##BASE/##WOOD { \ - color = /decl/material/solid/organic/wood/##WOOD::color; \ - _flooring = /decl/flooring/##BASE/##WOOD; \ + color = /decl/material/solid/organic/wood/##WOOD::color; \ + _flooring = /decl/flooring/##BASE/##WOOD; \ } /turf/floor/wood/broken - icon_state = "wood_broken0" + icon_state = "wood_broken0" _floor_broken = TRUE /turf/floor/wood/broken/Initialize() @@ -22,19 +22,19 @@ set_floor_broken(setting_broken) /turf/floor/wood/broken/one - icon_state = "wood_broken1" + icon_state = "wood_broken1" _floor_broken = "broken1" /turf/floor/wood/broken/two - icon_state = "wood_broken2" + icon_state = "wood_broken2" _floor_broken = "broken2" /turf/floor/wood/broken/three - icon_state = "wood_broken3" + icon_state = "wood_broken3" _floor_broken = "broken3" /turf/floor/wood/broken/four - icon_state = "wood_broken4" + icon_state = "wood_broken4" _floor_broken = "broken4" WOOD_FLOOR_SUBTYPE(wood, mahogany) @@ -46,11 +46,11 @@ WOOD_FLOOR_SUBTYPE(wood, yew) // Rough wood floors; lower skill requirement, more wasteful to craft. /turf/floor/wood/rough - name = "rough-hewn wooden floor" - icon = 'icons/turf/flooring/wood_alt.dmi' - icon_state = "wood_peasant0" - color = /decl/material/solid/organic/wood/oak::color - _flooring = /decl/flooring/wood + name = "rough-hewn wooden floor" + icon = 'icons/turf/flooring/wood_alt.dmi' + icon_state = "wood_peasant0" + color = /decl/material/solid/organic/wood/oak::color + _flooring = /decl/flooring/wood WOOD_FLOOR_SUBTYPE(wood/rough, mahogany) WOOD_FLOOR_SUBTYPE(wood/rough, maple) @@ -61,14 +61,14 @@ WOOD_FLOOR_SUBTYPE(wood/rough, yew) // Laminate floor; basically identical to wood, but uses older smoother icons. /turf/floor/laminate - name = "wooden laminate floor" - icon = 'icons/turf/flooring/laminate.dmi' - icon_state = "wood" - color = /decl/material/solid/organic/wood/chipboard::color - _flooring = /decl/flooring/laminate + name = "wooden laminate floor" + icon = 'icons/turf/flooring/laminate.dmi' + icon_state = "wood" + color = /decl/material/solid/organic/wood/chipboard::color + _flooring = /decl/flooring/laminate /turf/floor/laminate/broken - icon_state = "wood_broken0" + icon_state = "wood_broken0" _floor_broken = TRUE /turf/floor/laminate/broken/Initialize() @@ -78,37 +78,37 @@ WOOD_FLOOR_SUBTYPE(wood/rough, yew) set_floor_broken(setting_broken) /turf/floor/laminate/broken/one - icon_state = "wood_broken1" + icon_state = "wood_broken1" _floor_broken = "broken1" /turf/floor/laminate/broken/two - icon_state = "wood_broken2" + icon_state = "wood_broken2" _floor_broken = "broken2" /turf/floor/laminate/broken/three - icon_state = "wood_broken3" + icon_state = "wood_broken3" _floor_broken = "broken3" /turf/floor/laminate/broken/four - icon_state = "wood_broken4" + icon_state = "wood_broken4" _floor_broken = "broken4" /turf/floor/laminate/mahogany - color = /decl/material/solid/organic/wood/chipboard/mahogany::color - _flooring = /decl/flooring/laminate/mahogany + color = /decl/material/solid/organic/wood/chipboard/mahogany::color + _flooring = /decl/flooring/laminate/mahogany /turf/floor/laminate/maple - color = /decl/material/solid/organic/wood/chipboard/maple::color - _flooring = /decl/flooring/laminate/maple + color = /decl/material/solid/organic/wood/chipboard/maple::color + _flooring = /decl/flooring/laminate/maple /turf/floor/laminate/ebony - color = /decl/material/solid/organic/wood/chipboard/ebony::color - _flooring = /decl/flooring/laminate/ebony + color = /decl/material/solid/organic/wood/chipboard/ebony::color + _flooring = /decl/flooring/laminate/ebony /turf/floor/laminate/walnut - color = /decl/material/solid/organic/wood/chipboard/walnut::color - _flooring = /decl/flooring/laminate/walnut + color = /decl/material/solid/organic/wood/chipboard/walnut::color + _flooring = /decl/flooring/laminate/walnut /turf/floor/laminate/yew - color = /decl/material/solid/organic/wood/chipboard/yew::color - _flooring = /decl/flooring/laminate/yew + color = /decl/material/solid/organic/wood/chipboard/yew::color + _flooring = /decl/flooring/laminate/yew diff --git a/code/game/turfs/open/_open.dm b/code/game/turfs/open/_open.dm index 9ba40c9bfe32..e763a49a8384 100644 --- a/code/game/turfs/open/_open.dm +++ b/code/game/turfs/open/_open.dm @@ -37,13 +37,13 @@ if(!QDELETED(AM)) AM.fall() -/turf/open/examine(mob/user, distance, infix, suffix) +/turf/open/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 2) var/depth = 1 for(var/turf/T = GetBelow(src); (istype(T) && T.is_open()); T = GetBelow(T)) depth += 1 - to_chat(user, "It is about [depth] level\s deep.") + . += "It is about [depth] level\s deep." /turf/open/is_open() return TRUE diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 4dae8e230574..874422eae0b8 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -141,3 +141,7 @@ /turf/space/black icon_state = "black" + +// not how space works +/turf/space/get_movable_alpha_mask_state(atom/movable/mover) + return null \ No newline at end of file diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 86e5fbd5b82c..36812e0f3f53 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -22,7 +22,8 @@ var/heat_capacity = 1 //Properties for both - var/blocks_air = 0 // Does this turf contain air/let air through? + /// Does this turf contain air/let air through? + var/blocks_air = FALSE // General properties. var/pathweight = 1 // How much does it cost to pathfind over this turf? @@ -30,10 +31,10 @@ var/list/decals // Used for slowdown. - var/movement_delay + var/movement_delay = 0 var/fluid_can_pass - var/fluid_blocked_dirs = 0 + var/fluid_blocked_dirs = null var/flooded // Whether or not this turf is absolutely flooded ie. a water source. var/footstep_type var/open_turf_type = /turf/open // Which open turf type to use by default above this turf in a multiz context. Overridden by area. @@ -140,10 +141,10 @@ return INITIALIZE_HINT_NORMAL -/turf/examine(mob/user, distance, infix, suffix) +/turf/examined_by(mob/user, distance, infix, suffix) . = ..() if(user && weather) - weather.examine(user) + weather.examined_by(user, distance, infix, suffix) /turf/Destroy() diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 19db7607c2ec..a43c8994c4d4 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -207,6 +207,8 @@ // Unlint this to copy the actual raw vars. UNLINT(_flooring = other._flooring) + if(islist(_flooring)) + _flooring = _flooring.Copy() UNLINT(_base_flooring = other._base_flooring) set_floor_broken(other._floor_broken, TRUE) set_floor_burned(other._floor_burned) diff --git a/code/game/turfs/walls/_wall.dm b/code/game/turfs/walls/_wall.dm index 973d7105635d..3ad1fc1f62d8 100644 --- a/code/game/turfs/walls/_wall.dm +++ b/code/game/turfs/walls/_wall.dm @@ -172,26 +172,24 @@ var/global/list/wall_fullblend_objects = list( . = ..() //Appearance -/turf/wall/examine(mob/user) +/turf/wall/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(!isnull(shutter_state)) - to_chat(user, SPAN_NOTICE("The shutter is [shutter_state ? "open" : "closed"].")) - + . += SPAN_NOTICE("The shutter is [shutter_state ? "open" : "closed"].") if(!damage) - to_chat(user, SPAN_NOTICE("It looks fully intact.")) + . += SPAN_NOTICE("It looks fully intact.") else var/dam = damage / material.integrity if(dam <= 0.3) - to_chat(user, SPAN_WARNING("It looks slightly damaged.")) + . += SPAN_WARNING("It looks slightly damaged.") else if(dam <= 0.6) - to_chat(user, SPAN_WARNING("It looks moderately damaged.")) + . += SPAN_WARNING("It looks moderately damaged.") else - to_chat(user, SPAN_DANGER("It looks heavily damaged.")) + . += SPAN_DANGER("It looks heavily damaged.") if(paint_color) - to_chat(user, get_paint_examine_message()) + . += get_paint_examine_message() if(locate(/obj/effect/overlay/wallrot) in src) - to_chat(user, SPAN_WARNING("There is fungus growing on [src].")) + . += SPAN_WARNING("There is fungus growing on [src].") /turf/wall/proc/get_paint_examine_message() return SPAN_NOTICE("It has had a coat of paint applied.") diff --git a/code/modules/ZAS/Contaminants.dm b/code/modules/ZAS/Contaminants.dm index 57a5ee2d801e..be9f69d74367 100644 --- a/code/modules/ZAS/Contaminants.dm +++ b/code/modules/ZAS/Contaminants.dm @@ -100,12 +100,12 @@ var/global/image/contamination_overlay = image('icons/effects/contamination.dmi' to_chat(src, "High levels of toxins cause you to spontaneously mutate!") /mob/living/human/proc/burn_eyes() - var/obj/item/organ/internal/eyes/E = get_organ(BP_EYES, /obj/item/organ/internal/eyes) - if(E && !E.bodytype.eye_contaminant_guard) + var/obj/item/organ/internal/eyes/eyes = get_organ(BP_EYES, /obj/item/organ/internal/eyes) + if(eyes && !eyes.bodytype.eye_contaminant_guard) if(prob(20)) to_chat(src, "Your eyes burn!") - E.damage += 2.5 + eyes.adjust_organ_damage(2.5) SET_STATUS_MAX(src, STAT_BLURRY, 50) - if (prob(max(0,E.damage - 15) + 1) && !GET_STATUS(src, STAT_BLIND)) + if (prob(max(0,eyes.get_organ_damage() - 15) + 1) && !GET_STATUS(src, STAT_BLIND)) to_chat(src, "You are blinded!") SET_STATUS_MAX(src, STAT_BLIND, 20) diff --git a/code/modules/admin/holoverbs.dm b/code/modules/admin/holoverbs.dm index 4f58af7018b6..97fc22616a48 100644 --- a/code/modules/admin/holoverbs.dm +++ b/code/modules/admin/holoverbs.dm @@ -13,33 +13,12 @@ var/mob/living/silicon/ai/AI = input("Which AI do you want to apply [appear] to as a hologram?") as null|anything in AIs if(!AI) return - var/image/I = image(appear.icon, appear.icon_state) - I.overlays = appear.overlays - I.underlays = appear.underlays - I.color = list( - 0.30, 0.30, 0.30, 0.0, // Greyscale and reduce the alpha of the icon - 0.59, 0.59, 0.59, 0.0, - 0.11, 0.11, 0.11, 0.0, - 0.00, 0.00, 0.00, 0.5, - 0.00, 0.00, 0.00, 0.0 - ) - var/image/scan = image('icons/effects/effects.dmi', "scanline") - scan.color = list( - 0.30,0.30,0.30,0.00, // Greyscale the scanline icon too - 0.59,0.59,0.59,0.00, - 0.11,0.11,0.11,0.00, - 0.00,0.00,0.00,1.00, - 0.00,0.00,0.00,0.00 - ) - scan.blend_mode = BLEND_MULTIPLY - - // Combine the mob image and the scanlines into a single KEEP_TOGETHER'd image - var/image/I2 = image(null) - I2.underlays += I - I2.overlays += scan - I2.appearance_flags = KEEP_TOGETHER - I2.color = rgb(125, 180, 225) // make it blue! - AI.holo_icon = I2 + var/icon/character_icon = getFlatIcon(appear) + if(character_icon) + qdel(AI.holo_icon)//Clear old icon so we're not storing it in memory. + qdel(AI.holo_icon_longrange) + AI.holo_icon = getHologramIcon(icon(character_icon), custom_tone = AI.custom_color_tone) + AI.holo_icon_longrange = getHologramIcon(icon(character_icon), hologram_color = HOLOPAD_LONG_RANGE) to_chat(AI, "Your hologram icon has been set to [appear].") log_and_message_admins("set [key_name(AI)]'s hologram icon to [key_name(appear)]") diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 47dcc913a450..785f34bb3799 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -104,13 +104,13 @@ return PROCESS_KILL -/obj/item/assembly/examine(mob/user, distance) +/obj/item/assembly/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 || loc == user) if(secured) - to_chat(user, "\The [src] is ready!") + . += "\The [src] is ready!" else - to_chat(user, "\The [src] can be attached!") + . += "\The [src] can be attached!" /obj/item/assembly/attack_self(mob/user) diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 9a794b2c9006..d809c53896d6 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -168,13 +168,13 @@ if(a_left) a_left.hear_talk(M,msg,verb,speaking) -/obj/item/assembly_holder/examine(mob/user, distance) +/obj/item/assembly_holder/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (distance <= 1 || src.loc == user) if (src.secured) - to_chat(user, "\The [src] is ready!") + . += "\The [src] is ready!" else - to_chat(user, "\The [src] can be attached!") + . += "\The [src] can be attached!" /obj/item/assembly_holder/on_update_icon() . = ..() diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index f759887ff62d..c3e057a13a5f 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -11,10 +11,10 @@ . = ..() set_extension(src, /datum/extension/tool, list(TOOL_HEMOSTAT = TOOL_QUALITY_WORST)) -/obj/item/assembly/mousetrap/examine(mob/user) +/obj/item/assembly/mousetrap/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(armed) - to_chat(user, "It looks like it's armed.") + . += "It looks like it's armed." /obj/item/assembly/mousetrap/on_update_icon() . = ..() @@ -41,7 +41,7 @@ affecting = GET_EXTERNAL_ORGAN(H, type) SET_STATUS_MAX(H, STAT_STUN, 3) if(affecting) - affecting.take_external_damage(1, 0) + affecting.take_damage(1) else if(ismouse(target)) var/mob/living/simple_animal/passive/mouse/M = target diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index a451bcffec1e..f3cfba45efa1 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -99,7 +99,7 @@ holder.update_icon() /obj/item/assembly/prox_sensor/Move() - ..() + . = ..() sense() /obj/item/assembly/prox_sensor/interact(mob/user)//TODO: Change this to the wires thingy diff --git a/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm b/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm index d6c54d48acc2..d38b7277bb12 100644 --- a/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm +++ b/code/modules/atmospherics/components/binary_devices/oxyregenerator.dm @@ -41,9 +41,9 @@ power_rating *= initial(power_rating) ..() -/obj/machinery/atmospherics/binary/oxyregenerator/examine(user) +/obj/machinery/atmospherics/binary/oxyregenerator/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user,"Its outlet port is to the [dir2text(dir)].") + . += "Its outlet port is to the [dir2text(dir)]." /obj/machinery/atmospherics/binary/oxyregenerator/Process(wait, tick) ..() diff --git a/code/modules/atmospherics/components/shutoff.dm b/code/modules/atmospherics/components/shutoff.dm index 4cefcb52bc45..6286484bb901 100644 --- a/code/modules/atmospherics/components/shutoff.dm +++ b/code/modules/atmospherics/components/shutoff.dm @@ -19,9 +19,9 @@ var/global/list/shutoff_valves = list() icon_state = "vclamp[open]" build_device_underlays(FALSE) -/obj/machinery/atmospherics/valve/shutoff/examine(mob/user) +/obj/machinery/atmospherics/valve/shutoff/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "The automatic shutoff circuit is [close_on_leaks ? "enabled" : "disabled"].") + . += "The automatic shutoff circuit is [close_on_leaks ? "enabled" : "disabled"]." /obj/machinery/atmospherics/valve/shutoff/Initialize() . = ..() diff --git a/code/modules/atmospherics/components/unary/cold_sink.dm b/code/modules/atmospherics/components/unary/cold_sink.dm index 5a15543df5ab..f65afc65962f 100644 --- a/code/modules/atmospherics/components/unary/cold_sink.dm +++ b/code/modules/atmospherics/components/unary/cold_sink.dm @@ -130,7 +130,7 @@ power_setting = new_power_setting power_rating = max_power_rating * (power_setting/100) -/obj/machinery/atmospherics/unary/freezer/examine(mob/user) +/obj/machinery/atmospherics/unary/freezer/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(panel_open) - to_chat(user, "The maintenance hatch is open.") + . += "The maintenance hatch is open." diff --git a/code/modules/atmospherics/components/unary/heat_source.dm b/code/modules/atmospherics/components/unary/heat_source.dm index 17e7623e7e71..cb7df0f6098a 100644 --- a/code/modules/atmospherics/components/unary/heat_source.dm +++ b/code/modules/atmospherics/components/unary/heat_source.dm @@ -117,7 +117,7 @@ power_setting = new_power_setting power_rating = max_power_rating * (power_setting/100) -/obj/machinery/atmospherics/unary/heater/examine(mob/user) +/obj/machinery/atmospherics/unary/heater/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(panel_open) - to_chat(user, "The maintenance hatch is open.") + . += "The maintenance hatch is open." diff --git a/code/modules/atmospherics/components/unary/vent_pump.dm b/code/modules/atmospherics/components/unary/vent_pump.dm index d304cd337cbd..33a2df620b92 100644 --- a/code/modules/atmospherics/components/unary/vent_pump.dm +++ b/code/modules/atmospherics/components/unary/vent_pump.dm @@ -320,14 +320,14 @@ return ..() -/obj/machinery/atmospherics/unary/vent_pump/examine(mob/user, distance) +/obj/machinery/atmospherics/unary/vent_pump/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W.") + . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W." else - to_chat(user, "You are too far away to read the gauge.") + . += "You are too far away to read the gauge." if(welded) - to_chat(user, "It seems welded shut.") + . += "It seems welded shut." /obj/machinery/atmospherics/unary/vent_pump/cannot_transition_to(state_path, mob/user) if(state_path == /decl/machine_construction/default/deconstructed) diff --git a/code/modules/atmospherics/components/unary/vent_scrubber.dm b/code/modules/atmospherics/components/unary/vent_scrubber.dm index 89acda89fbd5..b5b6b81e8fde 100644 --- a/code/modules/atmospherics/components/unary/vent_scrubber.dm +++ b/code/modules/atmospherics/components/unary/vent_scrubber.dm @@ -240,16 +240,16 @@ return ..() -/obj/machinery/atmospherics/unary/vent_scrubber/examine(mob/user, distance) +/obj/machinery/atmospherics/unary/vent_scrubber/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W.") + . += "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W." else - to_chat(user, "You are too far away to read the gauge.") + . += "You are too far away to read the gauge." if(welded) - to_chat(user, "It seems welded shut.") + . += "It seems welded shut." if(!(stat & NOPOWER) && use_power && user.skill_check(SKILL_ATMOS,SKILL_BASIC)) - to_chat(user, "It's running in [scrubbing] mode.") + . += "It's running in [scrubbing] mode." /obj/machinery/atmospherics/unary/vent_scrubber/refresh() ..() diff --git a/code/modules/atmospherics/components/valve.dm b/code/modules/atmospherics/components/valve.dm index 8e70f7cc077c..8b639036d738 100644 --- a/code/modules/atmospherics/components/valve.dm +++ b/code/modules/atmospherics/components/valve.dm @@ -119,9 +119,9 @@ return FALSE return TRUE -/obj/machinery/atmospherics/valve/examine(mob/user) +/obj/machinery/atmospherics/valve/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It is [open ? "open" : "closed"].") + . += "It is [open ? "open" : "closed"]." /decl/public_access/public_variable/valve_open expected_type = /obj/machinery/atmospherics/valve diff --git a/code/modules/atmospherics/datum_pipeline.dm b/code/modules/atmospherics/datum_pipeline.dm index 8cdb4d002dba..7ece1fe43700 100644 --- a/code/modules/atmospherics/datum_pipeline.dm +++ b/code/modules/atmospherics/datum_pipeline.dm @@ -199,61 +199,26 @@ var/total_heat_capacity = air.heat_capacity() var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume) + var/datum/gas_mixture/target_air = target.return_air() if(total_heat_capacity <= 0) // Avoid div by zero. return - if(SHOULD_PARTICIPATE_IN_ZONES(target) && !target.blocks_air) - - if(partial_heat_capacity <= 0) - return - - var/delta_temperature = 0 - var/sharer_heat_capacity = 0 - if(target.zone) - delta_temperature = (air.temperature - target.zone.air.temperature) - sharer_heat_capacity = target.zone.air.heat_capacity() - else - delta_temperature = (air.temperature - target.air.temperature) - sharer_heat_capacity = target.air.heat_capacity() - - if(sharer_heat_capacity <= 0) - return - - var/self_temperature_delta = 0 - var/sharer_temperature_delta = 0 - var/heat = thermal_conductivity * delta_temperature * ( partial_heat_capacity * sharer_heat_capacity / (partial_heat_capacity + sharer_heat_capacity) ) - self_temperature_delta = -heat/total_heat_capacity - sharer_temperature_delta = heat/sharer_heat_capacity - air.temperature += self_temperature_delta - - if(target.zone) - target.zone.air.temperature += sharer_temperature_delta/target.zone.air.group_multiplier - else - target.air.temperature += sharer_temperature_delta - - else if(target.external_atmosphere_participation && !target.blocks_air) - - if(partial_heat_capacity <= 0) - return - - var/datum/gas_mixture/target_air = target.return_air() - var/sharer_heat_capacity = target_air?.heat_capacity() - - if(sharer_heat_capacity <= 0) - return - - var/delta_temperature = air.temperature - target_air.temperature - var/heat = thermal_conductivity * delta_temperature * ( partial_heat_capacity * sharer_heat_capacity / (partial_heat_capacity+sharer_heat_capacity) ) - air.temperature += -heat/total_heat_capacity - - else if((target.heat_capacity > 0) && (partial_heat_capacity > 0)) - var/delta_temperature = air.temperature - target.temperature - var/heat = thermal_conductivity * delta_temperature * ( partial_heat_capacity * target.heat_capacity / (partial_heat_capacity + target.heat_capacity) ) - air.temperature -= heat/total_heat_capacity - // Only increase the temperature of the target if it's simulated. - if(target.simulated) - target.temperature += heat/target.heat_capacity + if(target.blocks_air) + return + + if(partial_heat_capacity <= 0) + return + + var/sharer_heat_capacity = target_air.heat_capacity() + + if(sharer_heat_capacity <= 0) + return + + var/delta_temperature = (air.temperature - target_air.temperature) + var/heat = thermal_conductivity * delta_temperature * ( partial_heat_capacity * sharer_heat_capacity / (partial_heat_capacity + sharer_heat_capacity) ) + air.add_thermal_energy(-heat) + target_air.add_thermal_energy(heat) if(network) network.update = TRUE diff --git a/code/modules/atmospherics/pipes.dm b/code/modules/atmospherics/pipes.dm index 28ef33e36441..f054a258a916 100644 --- a/code/modules/atmospherics/pipes.dm +++ b/code/modules/atmospherics/pipes.dm @@ -8,7 +8,7 @@ stat_immune = NOSCREEN | NOINPUT | NOPOWER interact_offline = TRUE //Needs to be set so that pipes don't say they lack power in their description - can_buckle = 1 + can_buckle = TRUE buckle_require_restraints = 1 buckle_lying = -1 build_icon_state = "simple" diff --git a/code/modules/augment/augment.dm b/code/modules/augment/augment.dm index ef122136d5c5..b65a6776d09c 100644 --- a/code/modules/augment/augment.dm +++ b/code/modules/augment/augment.dm @@ -65,14 +65,14 @@ parent_organ = BP_CHEST descriptor = "chest." -/obj/item/organ/internal/augment/examine(mob/user, distance) +/obj/item/organ/internal/augment/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "It is configured to be attached to the [descriptor].") + . += "It is configured to be attached to the [descriptor]." if(augment_flags & AUGMENTATION_MECHANIC && augment_flags & AUGMENTATION_ORGANIC) - to_chat(user, "It can interface with both prosthetic and fleshy organs.") + . += "It can interface with both prosthetic and fleshy organs." else if(augment_flags & AUGMENTATION_MECHANIC) - to_chat(user, "It can interface with prosthetic organs.") + . += "It can interface with prosthetic organs." else if(augment_flags & AUGMENTATION_ORGANIC) - to_chat(user, "It can interface with fleshy organs.") + . += "It can interface with fleshy organs." diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm deleted file mode 100644 index 76ee712b3b81..000000000000 --- a/code/modules/awaymissions/loot.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/effect/spawner/lootdrop - icon = 'icons/effects/markers.dmi' - icon_state = "x2" - var/lootcount = 1 //how many items will be spawned - var/lootdoubles = 0 //if the same item can be spawned twice - var/loot = "" //a list of possible items to spawn- a string of paths - -/obj/effect/spawner/lootdrop/Initialize() - ..() - var/list/things = params2list(loot) - - if(things && things.len) - for(var/i = lootcount, i > 0, i--) - if(!things.len) - break - - var/loot_spawn = pick(things) - var/loot_path = text2path(loot_spawn) - - if(!loot_path || !lootdoubles) - things.Remove(loot_spawn) - continue - - new loot_path(get_turf(src)) - return INITIALIZE_HINT_QDEL diff --git a/code/modules/banners/__banner.dm b/code/modules/banners/__banner.dm index 34727eaa11b7..21f331a8f1f7 100644 --- a/code/modules/banners/__banner.dm +++ b/code/modules/banners/__banner.dm @@ -66,11 +66,11 @@ var/global/list/banner_type_to_symbols = list() . = ..() -/obj/item/banner/examine(mob/user, distance, infix, suffix) +/obj/item/banner/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/decorations = get_decal_string() if(decorations) - to_chat(user, "\The [src] is decorated with [decorations].") + . += "\The [src] is decorated with [decorations]." /obj/item/banner/proc/get_decal_string() for(var/decl/banner_symbol/decal in decals) diff --git a/code/modules/brain_interface/_brain_interface.dm b/code/modules/brain_interface/_brain_interface.dm index 49726becf510..2bca80610c73 100644 --- a/code/modules/brain_interface/_brain_interface.dm +++ b/code/modules/brain_interface/_brain_interface.dm @@ -49,15 +49,15 @@ else icon_state = "[icon_state]-full" -/obj/item/organ/internal/brain_interface/examine(mob/user, distance) +/obj/item/organ/internal/brain_interface/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) var/mob/living/brain/brainmob = get_brainmob() if(istype(brainmob)) if(brainmob.emp_damage) - to_chat(user, SPAN_WARNING("The neural interface socket is damaged.")) + . += SPAN_WARNING("The neural interface socket is damaged.") else - to_chat(user, SPAN_NOTICE("It is undamaged.")) + . += SPAN_NOTICE("It is undamaged.") /obj/item/organ/internal/brain_interface/attackby(var/obj/item/O, var/mob/user) @@ -83,7 +83,7 @@ to_chat(user, SPAN_WARNING("You don't need to put a robotic brain into an interface.")) return TRUE - if(inserting_brain.damage >= inserting_brain.max_damage) + if(inserting_brain.get_organ_damage() >= inserting_brain.max_damage) to_chat(user, SPAN_WARNING("That brain is well and truly dead.")) return TRUE diff --git a/code/modules/butchery/butchery_products.dm b/code/modules/butchery/butchery_products.dm index f4e76d9af464..bc653e3776f9 100644 --- a/code/modules/butchery/butchery_products.dm +++ b/code/modules/butchery/butchery_products.dm @@ -137,15 +137,15 @@ var/_cleaned = FALSE var/work_skill = SKILL_CONSTRUCTION -/obj/item/food/butchery/offal/examine(mob/user, distance) +/obj/item/food/butchery/offal/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 && user.skill_check(work_skill, SKILL_BASIC) && !dry) if(_cleaned && drying_wetness) - to_chat(user, "\The [src] can be hung on a drying rack to dry it in preparation for being twisted into thread.") + . += "\The [src] can be hung on a drying rack to dry it in preparation for being twisted into thread." else if(!_cleaned) - to_chat(user, "\The [src] can be scraped clean with a sharp object like a knife.") + . += "\The [src] can be scraped clean with a sharp object like a knife." else if(!drying_wetness) - to_chat(user, "\The [src] can be soaked in water to prepare it for drying.") + . += "\The [src] can be soaked in water to prepare it for drying." /obj/item/food/butchery/offal/attackby(obj/item/W, mob/user) if(IS_KNIFE(W) && !_cleaned && !dry) diff --git a/code/modules/client/ui_styles/_ui_style_states.dm b/code/modules/client/ui_styles/_ui_style_states.dm index 480ae2158929..95f6558e61a6 100644 --- a/code/modules/client/ui_styles/_ui_style_states.dm +++ b/code/modules/client/ui_styles/_ui_style_states.dm @@ -64,7 +64,8 @@ var/global/list/_ui_expected_states "hand_selected", "act_equip", "hand1", - "hand2" + "hand2", + "hand_blank" ), (HUD_HEALTH) = list( "health0", @@ -187,6 +188,7 @@ var/global/list/_ui_expected_states // Collect hand slot sates. for(var/slot in global.all_hand_slots) global._ui_expected_states[HUD_HANDS] |= "hand_[slot]" + for(var/gripper_type in subtypesof(/datum/inventory_slot/gripper)) var/datum/inventory_slot/gripper/gripper = gripper_type if(TYPE_IS_ABSTRACT(gripper)) diff --git a/code/modules/client/ui_styles/ui_style_subtypes.dm b/code/modules/client/ui_styles/ui_style_subtypes.dm index f80a00d7b8b1..7de6cc1183cd 100644 --- a/code/modules/client/ui_styles/ui_style_subtypes.dm +++ b/code/modules/client/ui_styles/ui_style_subtypes.dm @@ -95,7 +95,6 @@ /decl/ui_style/underworld name = "Underworld" uid = "ui_style_underworld" - restricted = FALSE override_icons = list( (HUD_ATTACK) = 'icons/mob/screen/styles/underworld/attack_selector.dmi', (HUD_FIRE_INTENT) = 'icons/mob/screen/styles/underworld/fire_intent.dmi', @@ -111,3 +110,20 @@ ) use_overlay_color = TRUE use_ui_color = TRUE + +/decl/ui_style/robot + name = "Stationbound" + uid = "ui_style_robot" + override_icons = list( + (HUD_ATTACK) = 'icons/mob/screen/styles/robot/attack_selector.dmi', + (HUD_FIRE_INTENT) = 'icons/mob/screen/styles/robot/fire_intent.dmi', + (HUD_HANDS) = 'icons/mob/screen/styles/robot/hands.dmi', + (HUD_DROP) = 'icons/mob/screen/styles/robot/interaction_drop.dmi', + (HUD_THROW) = 'icons/mob/screen/styles/robot/interaction_throw.dmi', + (HUD_RESIST) = 'icons/mob/screen/styles/robot/interaction_resist.dmi', + (HUD_MANEUVER) = 'icons/mob/screen/styles/robot/interaction_maneuver.dmi', + (HUD_INVENTORY) = 'icons/mob/screen/styles/robot/inventory.dmi', + (HUD_MOVEMENT) = 'icons/mob/screen/styles/robot/movement.dmi', + (HUD_UP_HINT) = 'icons/mob/screen/styles/robot/uphint.dmi', + (HUD_ZONE_SELECT) = 'icons/mob/screen/styles/robot/zone_selector.dmi' + ) diff --git a/code/modules/clothing/_clothing.dm b/code/modules/clothing/_clothing.dm index 032f327ee0fa..64d08080a018 100644 --- a/code/modules/clothing/_clothing.dm +++ b/code/modules/clothing/_clothing.dm @@ -324,43 +324,45 @@ if(LAZYLEN(accessories) > LAZYLEN(ties)) .+= ". \[See accessories\]" -/obj/item/clothing/examine(mob/user) +/obj/item/clothing/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/datum/extension/armor/ablative/armor_datum = get_extension(src, /datum/extension/armor/ablative) if(istype(armor_datum) && LAZYLEN(armor_datum.get_visible_damage())) - to_chat(user, SPAN_WARNING("It has some damage.")) + . += SPAN_WARNING("It has some damage.") if(LAZYLEN(accessories)) - to_chat(user, "It has the following attached: [counting_english_list(accessories)]") + . += "It has the following attached: [counting_english_list(accessories)]" switch(ironed_state) if(WRINKLES_WRINKLY) - to_chat(user, "It's wrinkly.") + . += "It's wrinkly." if(WRINKLES_NONE) - to_chat(user, "It's completely wrinkle-free!") - - var/rags = RAG_COUNT(src) - if(rags) - to_chat(user, SPAN_SUBTLE("With a sharp object, you could cut \the [src] up into [rags] section\s.")) + . += "It's completely wrinkle-free!" var/obj/item/clothing/sensor/vitals/sensor = locate() in accessories if(sensor) switch(sensor.sensor_mode) if(VITALS_SENSOR_OFF) - to_chat(user, "Its sensors appear to be disabled.") + . += "Its sensors appear to be disabled." if(VITALS_SENSOR_BINARY) - to_chat(user, "Its binary life sensors appear to be enabled.") + . += "Its binary life sensors appear to be enabled." if(VITALS_SENSOR_VITAL) - to_chat(user, "Its vital tracker appears to be enabled.") + . += "Its vital tracker appears to be enabled." if(VITALS_SENSOR_TRACKING) - to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") + . += "Its vital tracker and tracking beacon appear to be enabled." + +/obj/item/clothing/get_examine_hints(mob/user, distance, infix, suffix) + . = ..() + var/rags = RAG_COUNT(src) + if(rags) + LAZYADD(., SPAN_SUBTLE("With a sharp object, you could cut \the [src] up into [rags] section\s.")) if(length(clothing_state_modifiers)) var/list/interactions = list() for(var/modifier_type in clothing_state_modifiers) var/decl/clothing_state_modifier/modifier = GET_DECL(modifier_type) interactions += modifier.name - to_chat(user, SPAN_SUBTLE("Use alt-click to [english_list(interactions, and_text = " or ")].")) + LAZYADD(., SPAN_SUBTLE("Use alt-click to [english_list(interactions, and_text = " or ")].")) #undef RAG_COUNT diff --git a/code/modules/clothing/badges/_badge.dm b/code/modules/clothing/badges/_badge.dm index c894afd0e080..b0861d93680e 100644 --- a/code/modules/clothing/badges/_badge.dm +++ b/code/modules/clothing/badges/_badge.dm @@ -38,10 +38,10 @@ . = ..() . += " \[View\]" -/obj/item/clothing/badge/examine(user) +/obj/item/clothing/badge/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(stored_name) - to_chat(user,"It reads: [stored_name], [badge_string].") + . += "It reads: [stored_name], [badge_string]." /obj/item/clothing/badge/attack_self(mob/user) diff --git a/code/modules/clothing/badges/holobadge.dm b/code/modules/clothing/badges/holobadge.dm index 31aed4af787d..90a5cd0e0411 100644 --- a/code/modules/clothing/badges/holobadge.dm +++ b/code/modules/clothing/badges/holobadge.dm @@ -20,10 +20,10 @@ badge_number = random_id(type,1000,9999) name = "[name] ([badge_number])" -/obj/item/clothing/badge/holo/examine(user) +/obj/item/clothing/badge/holo/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(badge_number) - to_chat(user,"The badge number is [badge_number].") + . += "The badge number is [badge_number]." /obj/item/clothing/badge/holo/attack_self(mob/user) if(!stored_name) diff --git a/code/modules/clothing/gloves/jewelry/rings/_ring.dm b/code/modules/clothing/gloves/jewelry/rings/_ring.dm index aadeedab5589..ea58b6662b83 100644 --- a/code/modules/clothing/gloves/jewelry/rings/_ring.dm +++ b/code/modules/clothing/gloves/jewelry/rings/_ring.dm @@ -71,7 +71,7 @@ if(istype(user)) var/mob/living/human/H = get_recursive_loc_of_type(/mob/living/human) if(H.Adjacent(user)) - user.examinate(src) + user.examine_verb(src) return TOPIC_HANDLED return ..() diff --git a/code/modules/clothing/masks/cig_crafting.dm b/code/modules/clothing/masks/cig_crafting.dm index c3405f77bdf1..1fbe74668f2b 100644 --- a/code/modules/clothing/masks/cig_crafting.dm +++ b/code/modules/clothing/masks/cig_crafting.dm @@ -10,10 +10,10 @@ /obj/item/clothing/mask/smokable/cigarette/rolled/populate_reagents() return -/obj/item/clothing/mask/smokable/cigarette/rolled/examine(mob/user) +/obj/item/clothing/mask/smokable/cigarette/rolled/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(filter) - to_chat(user, "Capped off one end with a filter.") + . += "\The [src] is capped off at one end with a filter." /////////// //Ported Straight from TG. I am not sorry. - BloodyMan //YOU SHOULD BE //ROLLING// @@ -22,7 +22,6 @@ name = "rolling paper" desc = "A thin piece of paper used to make smokeables." icon = 'icons/obj/items/paperwork/cigarette_paper.dmi' - icon_state = "cig_paper" w_class = ITEM_SIZE_TINY diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 053646a9f6a4..94a34507783c 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -27,10 +27,10 @@ var/gas_filter_strength = 1 //For gas mask filters -/obj/item/clothing/mask/gas/examine(mob/user) +/obj/item/clothing/mask/gas/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(clogged) - to_chat(user, "The intakes are clogged with [clogged]!") + . += SPAN_WARNING("The intakes are clogged with [clogged]!") /obj/item/clothing/mask/gas/filters_water() return (filter_water && !clogged) diff --git a/code/modules/clothing/neck/necklace/__necklace.dm b/code/modules/clothing/neck/necklace/__necklace.dm index d94e49bf2675..0c477fb4e725 100644 --- a/code/modules/clothing/neck/necklace/__necklace.dm +++ b/code/modules/clothing/neck/necklace/__necklace.dm @@ -22,10 +22,10 @@ update_icon() return TRUE -/obj/item/clothing/neck/necklace/examine(mob/user) +/obj/item/clothing/neck/necklace/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(istype(pendant)) - to_chat(user, "There is \a [pendant] attached.") + . += "There is \a [pendant] attached." /obj/item/clothing/neck/necklace/on_update_icon() . = ..() diff --git a/code/modules/clothing/sensors/vitals_sensor.dm b/code/modules/clothing/sensors/vitals_sensor.dm index 8ed94b74013e..706d9b99dd2d 100644 --- a/code/modules/clothing/sensors/vitals_sensor.dm +++ b/code/modules/clothing/sensors/vitals_sensor.dm @@ -28,17 +28,17 @@ sensors_locked = new_state update_removable() -/obj/item/clothing/sensor/vitals/examine(mob/user) +/obj/item/clothing/sensor/vitals/get_examine_strings(mob/user, distance, infix, suffix) . = ..() switch(sensor_mode) if(VITALS_SENSOR_OFF) - to_chat(user, "It appears to be disabled.") + . += "It appears to be disabled." if(VITALS_SENSOR_BINARY) - to_chat(user, "Its binary life tracker appear to be enabled.") + . += "Its binary life tracker appear to be enabled." if(VITALS_SENSOR_VITAL) - to_chat(user, "Its vital tracker appears to be enabled.") + . += "Its vital tracker appears to be enabled." if(VITALS_SENSOR_TRACKING) - to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.") + . += "Its vital tracker and tracking beacon appear to be enabled." /obj/item/clothing/sensor/vitals/on_attached(var/obj/item/clothing/holder, var/mob/user) . = ..() diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index bd4284407d85..ee2399b9cd40 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -39,15 +39,15 @@ if (attached_cuffs) QDEL_NULL(attached_cuffs) -/obj/item/clothing/shoes/examine(mob/user) +/obj/item/clothing/shoes/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (attached_cuffs) - to_chat(user, SPAN_WARNING("They are connected by \the [attached_cuffs].")) + . += SPAN_WARNING("They are connected by \the [attached_cuffs].") if (hidden_item) if (loc == user) - to_chat(user, SPAN_ITALIC("\An [hidden_item] is inside.")) + . += SPAN_ITALIC("\An [hidden_item] is inside.") else if (get_dist(src, user) == 1) - to_chat(user, SPAN_ITALIC("Something is hidden inside.")) + . += SPAN_ITALIC("Something is hidden inside.") /obj/item/clothing/shoes/attack_hand(var/mob/user) if(user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE) && remove_hidden(user)) @@ -78,7 +78,7 @@ return user.visible_message(SPAN_ITALIC("\The [user] attaches \the [cuffs] to \the [src]."), range = 2) verbs |= /obj/item/clothing/shoes/proc/try_remove_cuffs - LAZYINITLIST(slowdown_per_slot[slot_shoes_str]) + LAZYINITLIST(slowdown_per_slot) slowdown_per_slot[slot_shoes_str] += cuffs.elastic ? 10 : 15 attached_cuffs = cuffs @@ -104,7 +104,7 @@ return user.visible_message(SPAN_ITALIC("\The [user] removes \the [attached_cuffs] from \the [src]."), range = 2) attached_cuffs.add_fingerprint(user) - LAZYINITLIST(slowdown_per_slot[slot_shoes_str]) + LAZYINITLIST(slowdown_per_slot) slowdown_per_slot[slot_shoes_str] -= attached_cuffs.elastic ? 10 : 15 verbs -= /obj/item/clothing/shoes/proc/try_remove_cuffs attached_cuffs = null diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 2ca4054eebf9..7a2984ecccef 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -113,9 +113,9 @@ covering_shoes = null user.update_floating() -/obj/item/clothing/shoes/magboots/examine(mob/user) +/obj/item/clothing/shoes/magboots/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/state = "disabled" if(item_flags & ITEM_FLAG_MAGNETISED) state = "enabled" - to_chat(user, "Its mag-pulse traction system appears to be [state].") + . += "Its mag-pulse traction system appears to be [state]." diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm index 82a201e5fcf9..158b3754b767 100644 --- a/code/modules/clothing/spacesuits/breaches.dm +++ b/code/modules/clothing/spacesuits/breaches.dm @@ -258,11 +258,11 @@ return TRUE return ..() -/obj/item/clothing/suit/space/examine(mob/user) +/obj/item/clothing/suit/space/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(can_breach && breaches && breaches.len) for(var/datum/breach/B in breaches) - to_chat(user, SPAN_DANGER("It has \a [B.descriptor].")) + . += SPAN_DANGER("It has \a [B.descriptor].") /obj/item/clothing/suit/space/get_pressure_weakness(pressure) . = ..() diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm index a616b18c7574..1e7b7d610017 100644 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm @@ -59,15 +59,15 @@ var/list/stat_rig_module/stat_modules = new() -/obj/item/rig_module/examine(mob/user) +/obj/item/rig_module/get_examine_strings(mob/user, distance, infix, suffix) . = ..() switch(damage) if(0) - to_chat(user, "It is undamaged.") + . += "It is undamaged." if(1) - to_chat(user, "It is badly damaged.") + . += "It is badly damaged." if(2) - to_chat(user, "It is almost completely destroyed.") + . += "It is almost completely destroyed." /obj/item/rig_module/attackby(obj/item/W, mob/user) diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 719db3034b77..0eeb19c3a578 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -113,22 +113,20 @@ /obj/item/rig/get_cell() return cell -/obj/item/rig/examine(mob/user) +/obj/item/rig/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(wearer) for(var/obj/item/piece in list(helmet,gloves,chest,boots)) if(!piece || piece.loc != wearer) continue - to_chat(user, "[html_icon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed.") - + . += "[html_icon(piece)] \The [piece] [piece.gender == PLURAL ? "are" : "is"] deployed." if(src.loc == user) - to_chat(user, "The access panel is [locked? "locked" : "unlocked"].") - to_chat(user, "The maintenance panel is [open ? "open" : "closed"].") - to_chat(user, "The wire panel is [p_open ? "open" : "closed"].") - to_chat(user, "Hardsuit systems are [offline ? SPAN_BAD("offline") : SPAN_GOOD("online")].") - + . += "The access panel is [locked? "locked" : "unlocked"]." + . += "The maintenance panel is [open ? "open" : "closed"]." + . += "The wire panel is [p_open ? "open" : "closed"]." + . += "Hardsuit systems are [offline ? SPAN_BAD("offline") : SPAN_GOOD("online")]." if(open) - to_chat(user, "It's equipped with [english_list(installed_modules)].") + . += "It's equipped with [english_list(installed_modules)]." /obj/item/rig/Initialize() . = ..() diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 3c7ecb38b48b..95b0612b4f9e 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -70,10 +70,10 @@ else to_chat(user, "Camera deactivated.") -/obj/item/clothing/head/helmet/space/examine(mob/user, distance) +/obj/item/clothing/head/helmet/space/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 && camera) - to_chat(user, "This helmet has a built-in camera. It's [!ispath(camera) && camera.status ? "" : "in"]active.") + . += "This helmet has a built-in camera. It's [!ispath(camera) && camera.status ? "" : "in"]active." /obj/item/clothing/head/helmet/space/proc/update_tint() if(tinted) diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm index d0836d07b4cb..37c5d360b4d2 100644 --- a/code/modules/clothing/spacesuits/void/void.dm +++ b/code/modules/clothing/spacesuits/void/void.dm @@ -84,14 +84,14 @@ else if(##equipment_var) {\ QDEL_NULL(helmet) QDEL_NULL(tank) -/obj/item/clothing/suit/space/void/examine(user,distance) +/obj/item/clothing/suit/space/void/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - var/list/part_list = new + var/list/part_list = list() for(var/obj/item/I in list(helmet,boots,tank)) part_list += "\a [I]" - to_chat(user, "\The [src] has [english_list(part_list)] installed.") + . += "\The [src] has [english_list(part_list)] installed." if(tank && distance <= 1) - to_chat(user, "The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank].") + . += SPAN_NOTICE("The wrist-mounted pressure gauge reads [max(round(tank.air_contents.return_pressure()),0)] kPa remaining in \the [tank].") /obj/item/clothing/suit/space/void/refit_for_bodytype(target_bodytype, skip_rename = FALSE) ..() diff --git a/code/modules/clothing/webbing/holster.dm b/code/modules/clothing/webbing/holster.dm index 1d49eaabc2b7..c607d16c13e9 100644 --- a/code/modules/clothing/webbing/holster.dm +++ b/code/modules/clothing/webbing/holster.dm @@ -26,7 +26,7 @@ return TRUE return ..() -/obj/item/clothing/webbing/holster/examine(mob/user) +/obj/item/clothing/webbing/holster/examined_by(mob/user, distance, infix, suffix) . = ..(user) var/datum/extension/holster/holster = get_extension(src, /datum/extension/holster) holster.examine_holster(user) diff --git a/code/modules/codex/codex_atom.dm b/code/modules/codex/codex_atom.dm index 49d718ebbffe..fb59c1858464 100644 --- a/code/modules/codex/codex_atom.dm +++ b/code/modules/codex/codex_atom.dm @@ -33,11 +33,3 @@ /atom/proc/get_lore_info() return - -/atom/examine(mob/user, distance, infix = "", suffix = "") - . = ..() - var/decl/interaction_handler/handler = get_quick_interaction_handler(user) - if(handler) - to_chat(user, SPAN_NOTICE("Ctrl-click \the [src] while in your inventory to [lowertext(handler.name)].")) - if(user?.get_preference_value(/datum/client_preference/inquisitive_examine) == PREF_ON && user.can_use_codex() && SScodex.get_codex_entry(get_codex_value(user))) - to_chat(user, SPAN_NOTICE("The codex has relevant information available.")) diff --git a/code/modules/codex/codex_cataloguer.dm b/code/modules/codex/codex_cataloguer.dm index 8e1918f2e8d9..2d9dc6a4803c 100644 --- a/code/modules/codex/codex_cataloguer.dm +++ b/code/modules/codex/codex_cataloguer.dm @@ -111,10 +111,10 @@ return TRUE return ..() -/obj/item/cataloguer/examine(mob/user, distance, infix, suffix) +/obj/item/cataloguer/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(loaded_disk) - to_chat(user, "It has \a [loaded_disk] slotted into the storage port. The display indicates it currently holds [loaded_disk.data] good explorer point\s.") + . += "It has \a [loaded_disk] slotted into the storage port. The display indicates it currently holds [loaded_disk.data] good explorer point\s." /obj/item/cataloguer/proc/stop_scan(var/interrupted = TRUE, var/mob/user, var/fade_out = 0) diff --git a/code/modules/crafting/slapcrafting/_crafting_holder.dm b/code/modules/crafting/slapcrafting/_crafting_holder.dm index b89a73d69a18..4cb7990226cb 100644 --- a/code/modules/crafting/slapcrafting/_crafting_holder.dm +++ b/code/modules/crafting/slapcrafting/_crafting_holder.dm @@ -6,7 +6,7 @@ var/decl/crafting_stage/current_crafting_stage var/label_name -/obj/item/crafting_holder/examine(mob/user, distance) +/obj/item/crafting_holder/get_examine_hints(mob/user, distance, infix, suffix) . = ..() if(current_crafting_stage) var/list/next_steps = list() @@ -22,9 +22,9 @@ if(length(next_products)) for(var/thing in next_products) - to_chat(user, SPAN_NOTICE("With [thing], you could finish building [next_products[thing]].")) + LAZYADD(., SPAN_NOTICE("With [thing], you could finish building [next_products[thing]].")) if(length(next_steps)) - to_chat(user, SPAN_NOTICE("You could continue to work on this with [english_list(next_steps, and_text = " or ")].")) + LAZYADD(., SPAN_NOTICE("You could continue to work on this with [english_list(next_steps, and_text = " or ")].")) /obj/item/crafting_holder/Initialize(var/ml, var/decl/crafting_stage/initial_stage, var/obj/item/target, var/obj/item/tool, var/mob/user) diff --git a/code/modules/crafting/stack_recipes/recipes_bricks.dm b/code/modules/crafting/stack_recipes/recipes_bricks.dm index ec8bf11e3b3b..8be3160ba95c 100644 --- a/code/modules/crafting/stack_recipes/recipes_bricks.dm +++ b/code/modules/crafting/stack_recipes/recipes_bricks.dm @@ -129,6 +129,7 @@ /decl/stack_recipe/turfs/floor/brick name = "cobblestone path" result_type = /turf/floor/path + expected_product_type = /turf/floor/path craft_stack_types = /obj/item/stack/material/brick /decl/stack_recipe/turfs/floor/brick/herringbone diff --git a/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm b/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm index eafa6e89d738..bf877bfbab75 100644 --- a/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm +++ b/code/modules/crafting/stack_recipes/recipes_hardness_integrity.dm @@ -49,20 +49,14 @@ category = "seating" /decl/stack_recipe/hardness/integrity/furniture/bench - result_type = /obj/structure/bed/chair/bench + result_type = /obj/structure/chair/bench category = "seating" -/decl/stack_recipe/hardness/integrity/furniture/bench/single - result_type = /obj/structure/bed/chair/bench/single - /decl/stack_recipe/hardness/integrity/furniture/bench/pew - result_type = /obj/structure/bed/chair/bench/pew - -/decl/stack_recipe/hardness/integrity/furniture/bench/pew/single - result_type = /obj/structure/bed/chair/bench/pew/single + result_type = /obj/structure/chair/bench/pew /decl/stack_recipe/hardness/integrity/furniture/bench/lounge - result_type = /obj/structure/bed/chair/bench/lounge + result_type = /obj/structure/chair/bench/lounge difficulty = MAT_VALUE_VERY_HARD_DIY /decl/stack_recipe/hardness/integrity/furniture/closet @@ -76,21 +70,27 @@ result_type = /obj/structure/closet/coffin /decl/stack_recipe/hardness/integrity/furniture/chair - result_type = /obj/structure/bed/chair + result_type = /obj/structure/chair category = "seating" /decl/stack_recipe/hardness/integrity/furniture/chair/office - result_type = /obj/structure/bed/chair/office/comfy/unpadded + result_type = /obj/structure/chair/office/comfy/unpadded available_to_map_tech_level = MAP_TECH_LEVEL_SPACE /decl/stack_recipe/hardness/integrity/furniture/chair/comfy - result_type = /obj/structure/bed/chair/comfy/unpadded + result_type = /obj/structure/chair/comfy/unpadded /decl/stack_recipe/hardness/integrity/furniture/chair/arm - result_type = /obj/structure/bed/chair/armchair/unpadded + result_type = /obj/structure/chair/armchair/unpadded /decl/stack_recipe/hardness/integrity/furniture/chair/roundedchair - result_type = /obj/structure/bed/chair/rounded + result_type = /obj/structure/chair/rounded + +/decl/stack_recipe/hardness/integrity/furniture/chair/backed + result_type = /obj/structure/chair/backed + +/decl/stack_recipe/hardness/integrity/furniture/chair/slatted + result_type = /obj/structure/chair/slatted /decl/stack_recipe/hardness/integrity/furniture/drying_rack result_type = /obj/structure/drying_rack diff --git a/code/modules/crafting/stack_recipes/recipes_logs.dm b/code/modules/crafting/stack_recipes/recipes_logs.dm index 608ca5095015..150f36cd1021 100644 --- a/code/modules/crafting/stack_recipes/recipes_logs.dm +++ b/code/modules/crafting/stack_recipes/recipes_logs.dm @@ -4,7 +4,7 @@ forbidden_craft_stack_types = /obj/item/stack/material/ore /decl/stack_recipe/logs/travois - result_type = /obj/structure/bed/travois + result_type = /obj/structure/travois difficulty = MAT_VALUE_EASY_DIY /decl/stack_recipe/turfs/wall/logs diff --git a/code/modules/crafting/stack_recipes/recipes_planks.dm b/code/modules/crafting/stack_recipes/recipes_planks.dm index 00f4f0f41b6c..e1e762675cfb 100644 --- a/code/modules/crafting/stack_recipes/recipes_planks.dm +++ b/code/modules/crafting/stack_recipes/recipes_planks.dm @@ -10,13 +10,6 @@ difficulty = MAT_VALUE_VERY_HARD_DIY category = "weapons" -/decl/stack_recipe/planks/beehive_assembly - result_type = /obj/item/beehive_assembly - category = "furniture" - -/decl/stack_recipe/planks/beehive_frame - result_type = /obj/item/honey_frame - /decl/stack_recipe/planks/zipgunframe result_type = /obj/item/zipgunframe difficulty = MAT_VALUE_VERY_HARD_DIY @@ -187,11 +180,11 @@ result_type = /obj/structure/bookcase/cart /decl/stack_recipe/planks/furniture/chair - result_type = /obj/structure/bed/chair/wood + result_type = /obj/structure/chair/wood category = "seating" /decl/stack_recipe/planks/furniture/chair/fancy - result_type = /obj/structure/bed/chair/wood/wings + result_type = /obj/structure/chair/wood/wings /decl/stack_recipe/planks/furniture/chest result_type = /obj/structure/closet/crate/chest diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm index eb2d5eb8f534..327a42c20a22 100644 --- a/code/modules/detectivework/forensics.dm +++ b/code/modules/detectivework/forensics.dm @@ -61,12 +61,13 @@ forensics.add_from_atom(/datum/forensics/trace_dna, M) // On examination get hints of evidence -/obj/item/examine(mob/user, distance) +/obj/item/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(distance <= 1 && user.skill_check(SKILL_FORENSICS, SKILL_ADEPT)) - to_chat(user, SPAN_INFO("As a murder weapon, it's [english_list(get_autopsy_descriptors())].")) + . += SPAN_INFO("As a murder weapon, it's [english_list(get_autopsy_descriptors())].") +/obj/item/examined_by(mob/user, distance, infix, suffix) + . = ..() // Detective is on the case var/datum/extension/forensic_evidence/forensics = get_extension(src, /datum/extension/forensic_evidence) if(forensics?.check_spotting(user) && user.has_client_color(/datum/client_color/noir)) diff --git a/code/modules/detectivework/tools/evidencebag.dm b/code/modules/detectivework/tools/evidencebag.dm index f7e2f917669d..8bb5a9810e9a 100644 --- a/code/modules/detectivework/tools/evidencebag.dm +++ b/code/modules/detectivework/tools/evidencebag.dm @@ -38,11 +38,11 @@ //If it isn't on the floor. Do some checks to see if it's in our hands or a box. Otherwise give up. if(I.loc?.storage) //in a container. return ..() - + var/sdepth = I.storage_depth(user) if (sdepth == -1 || sdepth > 1) return ..() //too deeply nested to access - + user.drop_from_inventory(I) user.visible_message( \ @@ -92,6 +92,7 @@ w_class = initial(w_class) update_icon() -/obj/item/evidencebag/examine(mob/user) +/obj/item/evidencebag/examined_by(mob/user, distance, infix, suffix) . = ..() - if (stored_item) user.examinate(stored_item) + if (stored_item) + user.examined_by(user, distance, infix, suffix) diff --git a/code/modules/detectivework/tools/sample_kits/_sample.dm b/code/modules/detectivework/tools/sample_kits/_sample.dm index f8c89d94b7c1..d56d685faaa9 100644 --- a/code/modules/detectivework/tools/sample_kits/_sample.dm +++ b/code/modules/detectivework/tools/sample_kits/_sample.dm @@ -19,10 +19,10 @@ . = ..() QDEL_NULL_LIST(evidence) -/obj/item/forensics/sample/examine(mob/user, distance) +/obj/item/forensics/sample/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 && object) - to_chat(user, "The label says: '[object]'.") + . += "The label says: '[object]'." /obj/item/forensics/sample/proc/copy_evidence(var/atom/supplied) var/datum/extension/forensic_evidence/forensics = get_extension(supplied, /datum/extension/forensic_evidence) diff --git a/code/modules/economy/worth_cash.dm b/code/modules/economy/worth_cash.dm index 5091a764f833..6f6c38ca5811 100644 --- a/code/modules/economy/worth_cash.dm +++ b/code/modules/economy/worth_cash.dm @@ -233,16 +233,16 @@ loaded_worth = 0 update_icon() -/obj/item/charge_stick/examine(mob/user, distance) +/obj/item/charge_stick/get_examine_strings(mob/user, distance, infix, suffix) . = ..(user) if(distance <= 2 || user == loc) var/datum/extension/lockable/lock = get_extension(src, /datum/extension/lockable) if(lock.locked) - to_chat(user, SPAN_WARNING("\The [src] is locked.")) + . += SPAN_WARNING("\The [src] is locked.") else - to_chat(user, SPAN_NOTICE("Id: [id].")) var/decl/currency/cur = GET_DECL(currency) - to_chat(user, SPAN_NOTICE("[capitalize(cur.name)] remaining: [floor(loaded_worth / cur.absolute_value)].")) + . += SPAN_NOTICE("Id: [id].") + . += SPAN_NOTICE("[capitalize(cur.name)] remaining: [floor(loaded_worth / cur.absolute_value)].") /obj/item/charge_stick/get_base_value() . = holographic ? 0 : loaded_worth diff --git a/code/modules/economy/worth_items.dm b/code/modules/economy/worth_items.dm index 3c754456b70e..15998a7521f9 100644 --- a/code/modules/economy/worth_items.dm +++ b/code/modules/economy/worth_items.dm @@ -31,8 +31,14 @@ . += melee_accuracy_bonus * 2 var/total_coverage = get_percentage_body_cover(body_parts_covered) - var/cold_value = (5 * (-(min_cold_protection_temperature)/T20C) * get_percentage_body_cover(cold_protection)) - var/heat_value = (5 * (max_heat_protection_temperature/T20C) * get_percentage_body_cover(heat_protection)) + var/cold_value = 0 + if(!isnull(min_cold_protection_temperature) && cold_protection) + // Adds 5cr for every 20 degrees of protection below 20C at full coverage + cold_value = (5 * (T20C - min_cold_protection_temperature)/20 * get_percentage_body_cover(cold_protection)) + var/heat_value = 0 + if(!isnull(max_heat_protection_temperature) && heat_protection) + // Adds 5cr for every 20 degrees of protection over 20C at full coverage + heat_value = (5 * (max_heat_protection_temperature - T20C)/20 * get_percentage_body_cover(heat_protection)) var/additional_value = cold_value + heat_value if(total_coverage > 0) diff --git a/code/modules/fabrication/_fabricator.dm b/code/modules/fabrication/_fabricator.dm index 43ae48853311..b4c227c101a6 100644 --- a/code/modules/fabrication/_fabricator.dm +++ b/code/modules/fabrication/_fabricator.dm @@ -70,14 +70,14 @@ QDEL_NULL(sound_token) . = ..() -/obj/machinery/fabricator/examine(mob/user) +/obj/machinery/fabricator/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(length(storage_capacity)) var/list/material_names = list() for(var/thing in storage_capacity) var/decl/material/mat = GET_DECL(thing) material_names += "[storage_capacity[thing]] [mat.use_name]" - to_chat(user, SPAN_NOTICE("It can store [english_list(material_names)].")) + . += SPAN_NOTICE("It can store [english_list(material_names)].") /obj/machinery/fabricator/Initialize() diff --git a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm index 756507124ebc..845dfd8ed1c1 100644 --- a/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm +++ b/code/modules/fabrication/designs/imprinter/designs_misc_circuits.dm @@ -344,11 +344,8 @@ /datum/fabricator_recipe/imprinter/circuit/cooker path = /obj/item/stock_parts/circuitboard/cooker -/datum/fabricator_recipe/imprinter/circuit/honey_extractor - path = /obj/item/stock_parts/circuitboard/honey - /datum/fabricator_recipe/imprinter/circuit/seed_extractor - path = /obj/item/stock_parts/circuitboard/honey/seed + path = /obj/item/stock_parts/circuitboard/seed_extractor /datum/fabricator_recipe/imprinter/circuit/vending path = /obj/item/stock_parts/circuitboard/vending diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 6fcea93840a2..33961e74c429 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -144,13 +144,13 @@ line = null return ..() -/obj/item/fishing_rod/examine(mob/user, distance) +/obj/item/fishing_rod/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(user && distance <= 1) if(line) - to_chat(user, "\The [src] has been strung with some [get_line_damage()] [line.name].") + . += "\The [src] has been strung with some [get_line_damage()] [line.name]." if(bait) - to_chat(user, "\The [src] has been baited with \a [bait].") + . += "\The [src] has been baited with \a [bait]." /obj/item/fishing_rod/apply_additional_mob_overlays(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing = TRUE) if(overlay) diff --git a/code/modules/food/assembled.dm b/code/modules/food/assembled.dm index 5e0955f53d22..9df85094417f 100644 --- a/code/modules/food/assembled.dm +++ b/code/modules/food/assembled.dm @@ -103,7 +103,7 @@ return food.try_create_combination(src, user) return FALSE -/obj/item/food/examine(mob/user, distance) +/obj/item/food/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 1) return @@ -120,7 +120,7 @@ product_string = english_list(names, and_text = " or ") else product_string = "\a [atom_info_repository.get_name_for(product)]" - to_chat(user, SPAN_NOTICE("With this and \a [ispath(thing_type) ? atom_info_repository.get_name_for(thing_type): thing_type], you could make [product_string].")) + . += SPAN_NOTICE("With this and \a [ispath(thing_type) ? atom_info_repository.get_name_for(thing_type): thing_type], you could make [product_string].") /obj/item/food/bun/get_combined_food_products() var/static/list/combined_food_products = list( diff --git a/code/modules/food/cooking/cooking_vessels/_cooking_vessel.dm b/code/modules/food/cooking/cooking_vessels/_cooking_vessel.dm index fcd1cea0e1eb..0258f2e665a8 100644 --- a/code/modules/food/cooking/cooking_vessels/_cooking_vessel.dm +++ b/code/modules/food/cooking/cooking_vessels/_cooking_vessel.dm @@ -87,16 +87,16 @@ else . += "[reagents.liquid_volumes[liquid_type]]u of [reagent_name]" -/obj/item/chems/cooking_vessel/examine(mob/user, distance) +/obj/item/chems/cooking_vessel/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(user && distance <= 1) var/list/contents_strings = get_cooking_contents_strings() if(length(contents_strings)) - to_chat(user, SPAN_NOTICE("\The [src] contains:")) + . += SPAN_NOTICE("\The [src] contains:") for(var/content_string in contents_strings) - to_chat(user, SPAN_NOTICE("- [content_string]")) + . += SPAN_NOTICE("- [content_string]") else - to_chat(user, SPAN_NOTICE("\The [src] is empty.")) + . += SPAN_NOTICE("\The [src] is empty.") /obj/item/chems/cooking_vessel/Process() var/decl/recipe/recipe = select_recipe(cooking_category, src, temperature) diff --git a/code/modules/food/nuggets.dm b/code/modules/food/nuggets.dm index c2171198fa13..b148b41b3aa9 100644 --- a/code/modules/food/nuggets.dm +++ b/code/modules/food/nuggets.dm @@ -2,7 +2,7 @@ name = "chicken nugget" icon = 'icons/obj/food/nuggets/nugget.dmi' icon_state = ICON_STATE_WORLD - nutriment_desc = "mild battered chicken" + nutriment_desc = list("mild battered chicken") nutriment_amt = 6 nutriment_type = /decl/material/solid/organic/meat/chicken material = /decl/material/solid/organic/meat/chicken diff --git a/code/modules/food/plates/plate_tray.dm b/code/modules/food/plates/plate_tray.dm index 5bc0488090ce..d38ce43225d5 100644 --- a/code/modules/food/plates/plate_tray.dm +++ b/code/modules/food/plates/plate_tray.dm @@ -122,16 +122,16 @@ I.appearance_flags |= RESET_COLOR add_vis_contents(I) -/obj/item/plate/tray/examine(mob/user) // So when you look at the tray you can see whats on it. +/obj/item/plate/tray/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(.) if(contents.len) var/tray_examine = list() for(var/obj/item/I in contents) tray_examine += "\a [I.name]" - to_chat(user, "There is [english_list(tray_examine)] on the tray.") + . += "There is [english_list(tray_examine)] on the tray." else - to_chat(user, "\The [src] is empty.") + . += "\The [src] is empty." /* ----------------------------------------------------------------- diff --git a/code/modules/games/boardgame.dm b/code/modules/games/boardgame.dm index 4aa01e0697da..263020f25f41 100644 --- a/code/modules/games/boardgame.dm +++ b/code/modules/games/boardgame.dm @@ -20,7 +20,7 @@ /obj/item/board/attack_hand(mob/M) if(M.machine == src) return ..() - M.examinate(src) + M.examine_verb(src) return TRUE /obj/item/board/attackby(obj/item/I, mob/user) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index cd9bf8848097..069c27f6b493 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -139,11 +139,11 @@ var/global/list/card_decks = list() draw_card(user) return TRUE -/obj/item/deck/examine(mob/user) +/obj/item/deck/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(cards.len) - to_chat(user, "
There [cards.len == 1 ? "is" : "are"] still [cards.len] card\s.") - to_chat(user, SPAN_NOTICE("You can deal cards at a table by clicking on it with grab intent.")) + . += "
There [cards.len == 1 ? "is" : "are"] still [cards.len] card\s." + . += SPAN_NOTICE("You can deal cards at a table by clicking on it with grab intent.") /obj/item/deck/attackby(obj/O, mob/user) if(istype(O,/obj/item/hand)) @@ -333,12 +333,12 @@ var/global/list/card_decks = list() user.put_in_hands(new_hand) return TRUE -/obj/item/hand/examine(mob/user) +/obj/item/hand/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if((!concealed || src.loc == user) && cards.len) - to_chat(user, "It contains:") + . += "It contains:" for(var/datum/playingcard/P in cards) - to_chat(user, "\The [APPEND_FULLSTOP_IF_NEEDED(P.name)]") + . += "\The [APPEND_FULLSTOP_IF_NEEDED(P.name)]" /obj/item/hand/on_update_icon() . = ..() diff --git a/code/modules/genetics/plants/gene_biochemistry.dm b/code/modules/genetics/plants/gene_biochemistry.dm index 9239b95f2929..296eebe4fbfe 100644 --- a/code/modules/genetics/plants/gene_biochemistry.dm +++ b/code/modules/genetics/plants/gene_biochemistry.dm @@ -17,6 +17,8 @@ if(seed.get_trait(trait) > 0) seed.set_trait(trait, seed.get_trait(trait), null, 1, 0.85) + seed.produces_pollen = LAZYACCESS(gene.values, TRAIT_POLLEN) + LAZYINITLIST(seed.chems) var/list/gene_value = LAZYACCESS(gene.values, TRAIT_CHEMS) for(var/rid in gene_value) @@ -42,10 +44,12 @@ LAZYREMOVE(gene.values, TRAIT_EXUDE_GASSES) LAZYREMOVE(gene.values, TRAIT_CHEMS) + LAZYREMOVE(gene.values, TRAIT_POLLEN) return ..() /decl/plant_gene/biochemistry/copy_initial_seed_values(datum/plantgene/gene, datum/seed/seed) LAZYSET(gene.values, TRAIT_CHEMS, seed.chems?.Copy()) LAZYSET(gene.values, TRAIT_EXUDE_GASSES, seed.exude_gasses?.Copy()) + LAZYSET(gene.values, TRAIT_POLLEN, seed.produces_pollen) return ..() diff --git a/code/modules/genetics/plants/trait_pollen.dm b/code/modules/genetics/plants/trait_pollen.dm new file mode 100644 index 000000000000..7dbbcbbd0df4 --- /dev/null +++ b/code/modules/genetics/plants/trait_pollen.dm @@ -0,0 +1,3 @@ +/decl/plant_trait/pollen + name = "pollen" + requires_master_gene = FALSE diff --git a/code/modules/goals/definitions/department_clerical.dm b/code/modules/goals/definitions/department_clerical.dm index 9538699b3860..75ac548eb873 100644 --- a/code/modules/goals/definitions/department_clerical.dm +++ b/code/modules/goals/definitions/department_clerical.dm @@ -120,13 +120,13 @@ . = ..() icon_state = "[icon_state][length(has_signed) || ""]" -/obj/item/paperwork/examine(mob/user, distance) +/obj/item/paperwork/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) if(length(needs_signed)) - to_chat(user, SPAN_WARNING("It needs [length(needs_signed)] more signature\s before it can be filed: [english_list(needs_signed)].")) + . += SPAN_WARNING("It needs [length(needs_signed)] more signature\s before it can be filed: [english_list(needs_signed)].") if(length(has_signed)) - to_chat(user, SPAN_NOTICE("It has been signed by: [english_list(has_signed)].")) + . += SPAN_NOTICE("It has been signed by: [english_list(has_signed)].") /obj/item/paperwork/attackby(obj/item/W, mob/user) if(IS_PEN(W)) diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm index e151a9bbbc48..f6da2d3ceaac 100644 --- a/code/modules/holodeck/HolodeckObjects.dm +++ b/code/modules/holodeck/HolodeckObjects.dm @@ -14,103 +14,103 @@ // HOLOFLOOR DOES NOT GIVE A FUCK /turf/floor/holofloor/carpet - name = "brown carpet" - icon = 'icons/turf/flooring/carpet.dmi' - icon_state = "brown" - _flooring = /decl/flooring/carpet + name = "brown carpet" + icon = 'icons/turf/flooring/carpet.dmi' + icon_state = "brown" + _flooring = /decl/flooring/carpet /turf/floor/holofloor/concrete - name = "brown carpet" - icon = 'icons/turf/flooring/carpet.dmi' - icon_state = "brown" - _flooring = /decl/flooring/carpet + name = "brown carpet" + icon = 'icons/turf/flooring/carpet.dmi' + icon_state = "brown" + _flooring = /decl/flooring/carpet /turf/floor/holofloor/concrete - name = "floor" - icon = 'icons/turf/flooring/misc.dmi' - icon_state = "concrete" - _flooring = null + name = "floor" + icon = 'icons/turf/flooring/misc.dmi' + icon_state = "concrete" + _flooring = null /turf/floor/holofloor/tiled - name = "floor" - icon = 'icons/turf/flooring/tiles.dmi' - icon_state = "steel" - _flooring = /decl/flooring/tiling + name = "floor" + icon = 'icons/turf/flooring/tiles.dmi' + icon_state = "steel" + _flooring = /decl/flooring/tiling /turf/floor/holofloor/tiled/dark - name = "dark floor" - icon_state = "dark" - _flooring = /decl/flooring/tiling/dark + name = "dark floor" + icon_state = "dark" + _flooring = /decl/flooring/tiling/dark /turf/floor/holofloor/tiled/stone - name = "stone floor" - icon_state = "stone" - _flooring = /decl/flooring/tiling/stone + name = "stone floor" + icon_state = "stone" + _flooring = /decl/flooring/tiling/stone /turf/floor/holofloor/lino - name = "lino" - icon = 'icons/turf/flooring/linoleum.dmi' - icon_state = "lino" - _flooring = /decl/flooring/linoleum + name = "lino" + icon = 'icons/turf/flooring/linoleum.dmi' + icon_state = "lino" + _flooring = /decl/flooring/linoleum /turf/floor/holofloor/wood - name = "wooden floor" - icon = 'icons/turf/flooring/wood.dmi' - icon_state = "wood0" - color = WOOD_COLOR_CHOCOLATE - _flooring = /decl/flooring/wood + name = "wooden floor" + icon = 'icons/turf/flooring/wood.dmi' + icon_state = "wood0" + color = WOOD_COLOR_CHOCOLATE + _flooring = /decl/flooring/wood /turf/floor/holofloor/grass - name = "lush grass" - icon = 'icons/turf/flooring/fakegrass.dmi' - icon_state = "grass0" - _flooring = /decl/flooring/grass/fake + name = "lush grass" + icon = 'icons/turf/flooring/fakegrass.dmi' + icon_state = "grass0" + _flooring = /decl/flooring/grass/fake /turf/floor/holofloor/snow - name = "snow" - icon = 'icons/turf/flooring/snow.dmi' - icon_state = "snow0" - _flooring = /decl/flooring/snow/fake + name = "snow" + icon = 'icons/turf/flooring/snow.dmi' + icon_state = "snow0" + _flooring = /decl/flooring/snow/fake /turf/floor/holofloor/space - name = "\proper space" - icon = 'icons/turf/flooring/fake_space.dmi' - icon_state = "space0" - _flooring = /decl/flooring/fake_space + name = "\proper space" + icon = 'icons/turf/flooring/fake_space.dmi' + icon_state = "space0" + _flooring = /decl/flooring/fake_space /turf/floor/holofloor/reinforced - icon = 'icons/turf/flooring/tiles.dmi' - _flooring = /decl/flooring/reinforced - name = "reinforced holofloor" - icon_state = "reinforced" + name = "reinforced holofloor" + icon = 'icons/turf/flooring/tiles.dmi' + _flooring = /decl/flooring/reinforced + icon_state = "reinforced" /turf/floor/holofloor/beach - desc = "Uncomfortably gritty for a hologram." - icon = 'icons/misc/beach.dmi' - _flooring = /decl/flooring/sand/fake + desc = "Uncomfortably gritty for a hologram." + icon = 'icons/misc/beach.dmi' + _flooring = /decl/flooring/sand/fake abstract_type = /turf/floor/holofloor/beach /turf/floor/holofloor/beach/sand - name = "sand" - icon_state = "desert0" + name = "sand" + icon_state = "desert0" /turf/floor/holofloor/beach/coastline - name = "coastline" - icon = 'icons/misc/beach2.dmi' - icon_state = "sandwater" - _flooring = /decl/flooring/sand/fake + name = "coastline" + icon = 'icons/misc/beach2.dmi' + icon_state = "sandwater" + _flooring = /decl/flooring/sand/fake /turf/floor/holofloor/beach/water - name = "water" - icon_state = "seashallow" - _flooring = /decl/flooring/fake_water + name = "water" + icon_state = "seashallow" + _flooring = /decl/flooring/fake_water /turf/floor/holofloor/desert - name = "desert sand" - desc = "Uncomfortably gritty for a hologram." - icon_state = "barren" - icon = 'icons/turf/flooring/barren.dmi' - _flooring = /decl/flooring/sand/fake + name = "desert sand" + desc = "Uncomfortably gritty for a hologram." + icon = 'icons/turf/flooring/barren.dmi' + icon_state = "barren" + _flooring = /decl/flooring/sand/fake /turf/floor/holofloor/desert/Initialize(var/ml) . = ..() @@ -118,19 +118,19 @@ LAZYADD(decals, image('icons/turf/flooring/decals.dmi', "asteroid[rand(0,9)]")) /obj/structure/holostool - name = "stool" - desc = "Apply butt." - icon = 'icons/obj/furniture.dmi' - icon_state = "stool_padded_preview" - anchored = TRUE + name = "stool" + desc = "Apply butt." + icon = 'icons/obj/furniture.dmi' + icon_state = "stool_padded_preview" + anchored = TRUE /obj/item/clothing/gloves/boxing/hologlove - name = "boxing gloves" - desc = "Because you really needed another excuse to punch your crewmates." + name = "boxing gloves" + desc = "Because you really needed another excuse to punch your crewmates." /obj/structure/window/reinforced/holowindow/full - dir = NORTHEAST - icon_state = "rwindow_full" + dir = NORTHEAST + icon_state = "rwindow_full" /obj/structure/window/reinforced/holowindow/attackby(obj/item/weapon, mob/user) if(IS_SCREWDRIVER(weapon) || IS_CROWBAR(weapon) || IS_WRENCH(weapon)) @@ -186,7 +186,7 @@ holographic = TRUE material = /decl/material/solid/metal/aluminium/holographic -/obj/structure/bed/chair/holochair +/obj/structure/chair/holochair tool_interaction_flags = 0 holographic = TRUE material = /decl/material/solid/metal/aluminium/holographic diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 7083722c41ca..e453199fe213 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -15,13 +15,13 @@ var/seeds_extracted = FALSE var/datum/seed/seed -/obj/item/food/grown/examine(mob/user, distance) +/obj/item/food/grown/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(user && distance <= 1 && seed && user.skill_check(work_skill, SKILL_BASIC)) if(seed.grown_is_seed) - to_chat(user, SPAN_NOTICE("\The [src] can be planted directly, without having to extract any seeds.")) + . += SPAN_NOTICE("\The [src] can be planted directly, without having to extract any seeds.") else if(!seeds_extracted && seed.min_seed_extracted) - to_chat(user, SPAN_NOTICE("With a knife, you could extract at least [seed.min_seed_extracted] seed\s.")) + . += SPAN_NOTICE("With a knife, you could extract at least [seed.min_seed_extracted] seed\s.") /obj/item/food/grown/update_name() if(!seed) diff --git a/code/modules/hydroponics/plant_types/seeds_herbs.dm b/code/modules/hydroponics/plant_types/seeds_herbs.dm index f03eede190ab..ec4273ebc4fc 100644 --- a/code/modules/hydroponics/plant_types/seeds_herbs.dm +++ b/code/modules/hydroponics/plant_types/seeds_herbs.dm @@ -1,6 +1,7 @@ /datum/seed/herb abstract_type = /datum/seed/herb allergen_flags = ALLERGEN_NONE // Do not make people allergic to the only medicine available on Shadyhills + produces_pollen = 0.5 /datum/seed/herb/New() ..() diff --git a/code/modules/hydroponics/plant_types/seeds_misc.dm b/code/modules/hydroponics/plant_types/seeds_misc.dm index e98328e4b399..8ee10be8c9dd 100644 --- a/code/modules/hydroponics/plant_types/seeds_misc.dm +++ b/code/modules/hydroponics/plant_types/seeds_misc.dm @@ -685,6 +685,7 @@ chems = list(/decl/material/liquid/nutriment = list(1,20)) slice_product = /obj/item/food/processed_grown/crushed slice_amount = 3 + produces_pollen = 1 /datum/seed/flower/New() ..() diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 1065eb1d8a22..d61f42d51ba0 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -32,6 +32,7 @@ var/scannable_result var/grown_is_seed = FALSE var/product_w_class = ITEM_SIZE_SMALL + var/produces_pollen = 0 // Dissection values. var/min_seed_extracted = 1 diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index 21efe8deead6..2b291d791c3e 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -83,10 +83,10 @@ SetName("sample of [seed.product_name] [seed.seed_noun]") desc = "It's labelled as coming from \a [seed.display_name]." -/obj/item/seeds/examine(mob/user) +/obj/item/seeds/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(seed && !seed.roundstart) - to_chat(user, "It's tagged as variety #[seed.uid].") + . += "It's tagged as variety #[seed.uid]." /obj/item/seeds/extracted name = "handful of seeds" diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index cc12942e6f05..6745fdaf11c9 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -40,6 +40,9 @@ var/force_update // Set this to bypass the cycle time check. var/obj/temp_chem_holder // Something to hold reagents during process_reagents() + // Counter used by bees. + var/pollen = 0 + // Seed details/line data. var/datum/seed/seed = null // The currently planted seed @@ -574,24 +577,24 @@ return TRUE return FALSE -/obj/machinery/portable_atmospherics/hydroponics/examine(mob/user) - . = ..(user) +/obj/machinery/portable_atmospherics/hydroponics/get_examine_strings(mob/user, distance, infix, suffix) + . = ..() if(!seed) - to_chat(user, "\The [src] is empty.") + . += "\The [src] is empty." return - to_chat(user, SPAN_NOTICE("\A [seed.display_name] is growing here.")) + . += SPAN_NOTICE("\A [seed.display_name] is growing here.") if(user.skill_check(SKILL_BOTANY, SKILL_BASIC)) if(weedlevel >= 5) - to_chat(user, "\The [src] is infested with weeds!") + . += "\The [src] is infested with weeds!" if(pestlevel >= 5) - to_chat(user, "\The [src] is infested with tiny worms!") + . += "\The [src] is infested with tiny worms!" if(dead) - to_chat(user, "The [seed.display_name] is dead.") + . += "The [seed.display_name] is dead." else if(plant_health <= (seed.get_trait(TRAIT_ENDURANCE)/ 2)) - to_chat(user, "The [seed.display_name] looks unhealthy.") + . += "The [seed.display_name] looks unhealthy." if(!Adjacent(user)) return @@ -617,14 +620,14 @@ var/light_available = T.get_lumcount() * 5 light_string = "a light level of [light_available] lumens" - to_chat(user, "Water: [round(waterlevel,0.1)]/100") - to_chat(user, "Nutrient: [round(nutrilevel,0.1)]/10") - to_chat(user, "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K.") + . += "Water: [round(waterlevel,0.1)]/100" + . += "Nutrient: [round(nutrilevel,0.1)]/10" + . += "The tray's sensor suite is reporting [light_string] and a temperature of [environment.temperature]K." else if(waterlevel < 20) - to_chat(user, SPAN_WARNING("The [seed.display_name] is dry.")) + . += SPAN_WARNING("The [seed.display_name] is dry.") if(nutrilevel < 2) - to_chat(user, SPAN_WARNING("The [seed.display_name]'s growth is stunted due to a lack of nutrients.")) + . += SPAN_WARNING("The [seed.display_name]'s growth is stunted due to a lack of nutrients.") /obj/machinery/portable_atmospherics/hydroponics/verb/close_lid_verb() set name = "Toggle Tray Lid" diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm index dbcf6f194470..a62c81a8d1e2 100644 --- a/code/modules/hydroponics/trays/tray_process.dm +++ b/code/modules/hydroponics/trays/tray_process.dm @@ -65,6 +65,9 @@ mutate((rand(100) < 15) ? 2 : 1) mutation_level = 0 + if(pollen < 10) + pollen += seed?.produces_pollen + // Maintain tray nutrient and water levels. if(seed.get_trait(TRAIT_REQUIRES_NUTRIENTS) && seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) > 0 && nutrilevel > 0 && prob(25)) nutrilevel -= max(0,seed.get_trait(TRAIT_NUTRIENT_CONSUMPTION) * growth_rate) diff --git a/code/modules/implants/implant.dm b/code/modules/implants/implant.dm index 1654b567aa2e..2572ce810556 100644 --- a/code/modules/implants/implant.dm +++ b/code/modules/implants/implant.dm @@ -100,7 +100,7 @@ if(malfunction == MALFUNCTION_PERMANENT) return to_chat(imp_in, SPAN_DANGER("You feel something melting inside [part ? "your [part.name]" : "you"]!")) if (part) - part.take_external_damage(burn = 15, used_weapon = "Electronics meltdown") + part.take_damage(15, BURN, inflicter = "Electronics meltdown") else var/mob/living/M = imp_in M.apply_damage(15,BURN) diff --git a/code/modules/implants/implant_types/explosive.dm b/code/modules/implants/implant_types/explosive.dm index 44bd35c52368..e588e56009a8 100644 --- a/code/modules/implants/implant_types/explosive.dm +++ b/code/modules/implants/implant_types/explosive.dm @@ -132,7 +132,7 @@ if (part) if (istype(part,/obj/item/organ/external/chest) || \ istype(part,/obj/item/organ/external/groin)) - part.take_external_damage(60, used_weapon = "Explosion") + part.take_damage(60, inflicter = "Explosion") else part.dismember(0,DISMEMBER_METHOD_BLUNT) explosion(T, -1, -1, 2, 3) diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 7d4a7ce5774f..e8637643e086 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -47,7 +47,7 @@ COLOR_ASSEMBLY_PURPLE ) -/obj/item/electronic_assembly/examine(mob/user) +/obj/item/electronic_assembly/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(obj_flags & OBJ_FLAG_ANCHORABLE) to_chat(user, "The anchoring bolts [anchored ? "are" : "can be"] wrenched in place and the maintenance panel [opened ? "can be" : "is"] screwed in place.") @@ -62,6 +62,16 @@ if((isobserver(user) && ckeys_allowed_to_scan[user.ckey]) || check_rights(R_ADMIN, 0, user)) to_chat(user, "You can scan this circuit."); +/obj/item/electronic_assembly/examined_by(mob/user, distance, infix, suffix) + . = ..() + for(var/I in assembly_components) + var/obj/item/integrated_circuit/IC = I + IC.external_examine(user) + if(opened) + IC.internal_examine(user) + if(opened) + interact(user) + /obj/item/electronic_assembly/check_health(lastdamage, lastdamtype, lastdamflags, consumed) if(!can_take_damage()) return @@ -294,16 +304,6 @@ return add_overlay(overlay_image('icons/obj/assemblies/electronic_setups.dmi', "[icon_state]-color", detail_color)) -/obj/item/electronic_assembly/examine(mob/user) - . = ..() - for(var/I in assembly_components) - var/obj/item/integrated_circuit/IC = I - IC.external_examine(user) - if(opened) - IC.internal_examine(user) - if(opened) - interact(user) - //This only happens when this EA is loaded via the printer /obj/item/electronic_assembly/proc/post_load() for(var/I in assembly_components) diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index b37f0c5fe0a9..fe377c2824e9 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -31,7 +31,7 @@ a creative player the means to solve many problems. Circuits are held inside an electronic assembly, and are wired using special tools. */ -/obj/item/integrated_circuit/examine(mob/user) +/obj/item/integrated_circuit/examined_by(mob/user, distance, infix, suffix) . = ..() external_examine(user) diff --git a/code/modules/integrated_electronics/subtypes/memory.dm b/code/modules/integrated_electronics/subtypes/memory.dm index b105438a0377..bdd5916a2a97 100644 --- a/code/modules/integrated_electronics/subtypes/memory.dm +++ b/code/modules/integrated_electronics/subtypes/memory.dm @@ -18,7 +18,7 @@ complexity = number_of_pins . = ..() -/obj/item/integrated_circuit/memory/examine(mob/user) +/obj/item/integrated_circuit/memory/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/i for(i = 1, i <= outputs.len, i++) @@ -30,7 +30,7 @@ data = "[d]" else if(!isnull(O.data)) data = O.data - to_chat(user, "\The [src] has [data] saved to address [i].") + . += "\The [src] has [data] saved to address [i]." /obj/item/integrated_circuit/memory/do_work() for(var/i = 1 to inputs.len) diff --git a/code/modules/interactions/_interactions.dm b/code/modules/interactions/_interactions.dm index 3d515a3000d0..1898e27ee8c4 100644 --- a/code/modules/interactions/_interactions.dm +++ b/code/modules/interactions/_interactions.dm @@ -3,7 +3,7 @@ var/name /// A string displayed when examining an atom that provides this handler as an alt interaction. var/examine_desc - /// If set to TRUE, alt interactions will skip is_possible() before displaying in examine(). + /// If set to TRUE, alt interactions will skip is_possible() before displaying in examined_by(). var/always_show_on_examine = FALSE var/icon var/icon_state diff --git a/code/modules/item_effects/item_effect_item.dm b/code/modules/item_effects/item_effect_item.dm index ea1be1cfd241..197c22d8a01f 100644 --- a/code/modules/item_effects/item_effect_item.dm +++ b/code/modules/item_effects/item_effect_item.dm @@ -176,7 +176,7 @@ listening_effect.hear_speech(src, M, text, speaking) // VISIBLE effects -/obj/item/examine(mob/user, distance) +/obj/item/examined_by(mob/user, distance, infix, suffix) . = ..() if(!user) return diff --git a/code/modules/locks/key.dm b/code/modules/locks/key.dm index ff44c88321a1..ecfebc2fdc59 100644 --- a/code/modules/locks/key.dm +++ b/code/modules/locks/key.dm @@ -8,13 +8,13 @@ material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC var/key_data -/obj/item/key/examine(mob/user, distance) +/obj/item/key/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) if(key_data) - to_chat(user, SPAN_NOTICE("\The [src] unlocks '[key_data]'.")) + . += SPAN_NOTICE("\The [src] unlocks '[key_data]'.") else - to_chat(user, SPAN_NOTICE("\The [src] is blank.")) + . += SPAN_NOTICE("\The [src] is blank.") /obj/item/key/proc/get_data(var/mob/user) return key_data diff --git a/code/modules/locks/keyring.dm b/code/modules/locks/keyring.dm index 8b92a6154316..75225770e11b 100644 --- a/code/modules/locks/keyring.dm +++ b/code/modules/locks/keyring.dm @@ -9,9 +9,8 @@ material = /decl/material/solid/metal/brass material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC -/obj/item/keyring/examine(mob/user, distance) +/obj/item/keyring/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(length(contents) && distance <= 1) var/key_strings = list() for(var/obj/item/key/key in contents) @@ -19,11 +18,9 @@ key_strings += SPAN_NOTICE("\The [key] unlocks '[key.key_data]'.") else key_strings += SPAN_NOTICE("\The [key] is blank.") - if(length(key_strings)) - to_chat(user, "\The [src] holds [length(key_strings)] key\s:") - for(var/key_string in key_strings) - to_chat(user, key_string) + . += "\The [src] holds [length(key_strings)] key\s:" + . += key_strings /obj/item/keyring/on_update_icon() . = ..() diff --git a/code/modules/locks/lock_construct.dm b/code/modules/locks/lock_construct.dm index 0a27464efde2..e36d93797a60 100644 --- a/code/modules/locks/lock_construct.dm +++ b/code/modules/locks/lock_construct.dm @@ -11,13 +11,13 @@ . = ..() lock_data = generateRandomString(round(material.integrity/50)) -/obj/item/lock_construct/examine(mob/user, distance) +/obj/item/lock_construct/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(user && distance <= 1) if(lock_data) - to_chat(user, SPAN_NOTICE("\The [src] is unlocked with '[lock_data]'.")) + . += SPAN_NOTICE("\The [src] is unlocked with '[lock_data]'.") else - to_chat(user, SPAN_NOTICE("\The [src] is blank. Use a key on the lock to pair the two items.")) + . += SPAN_NOTICE("\The [src] is blank. Use a key on the lock to pair the two items.") /obj/item/lock_construct/attackby(var/obj/item/I, var/mob/user) if(istype(I, /obj/item/key)) diff --git a/code/modules/maps/template_types/random_exoplanet/flora_generator.dm b/code/modules/maps/template_types/random_exoplanet/flora_generator.dm index 86fd9fb00fc6..6bf9ff36f00d 100644 --- a/code/modules/maps/template_types/random_exoplanet/flora_generator.dm +++ b/code/modules/maps/template_types/random_exoplanet/flora_generator.dm @@ -162,6 +162,6 @@ S.set_trait(TRAIT_HARVEST_REPEAT, 1) S.set_trait(TRAIT_LARGE, 1) S.set_trait(TRAIT_LEAVES_COLOUR, color) - S.chems[/decl/material/solid/organic/wood] = 1 //#TODO: Maybe look at Why the seed creates injectable wood? + S.chems[/decl/material/solid/organic/wood] = list(1,0) //#TODO: Maybe look at Why the seed creates injectable wood? adapt_seed(S, atmos) LAZYADD(big_flora_types, S) diff --git a/code/modules/maps/template_types/random_exoplanet/random_map.dm b/code/modules/maps/template_types/random_exoplanet/random_map.dm index 95994ad4327e..5f9d27d367c0 100644 --- a/code/modules/maps/template_types/random_exoplanet/random_map.dm +++ b/code/modules/maps/template_types/random_exoplanet/random_map.dm @@ -10,7 +10,7 @@ var/water_level var/water_level_min = 0 var/water_level_max = 5 - var/land_type = /turf/floor + var/land_type = /turf/floor/barren var/water_type var/coast_type diff --git a/code/modules/materials/_material_stack.dm b/code/modules/materials/_material_stack.dm index e8e684c7f240..a956e5678de8 100644 --- a/code/modules/materials/_material_stack.dm +++ b/code/modules/materials/_material_stack.dm @@ -217,6 +217,8 @@ . = "[reinf_material ? "reinforced " : null][material.use_name]" if(amount == 1) . += " [singular_name]" + if(gender == PLURAL) + return "some [.]" return indefinite_article ? "[indefinite_article] [.]" : ADD_ARTICLE(.) return "[amount] [.] [plural_name]" diff --git a/code/modules/materials/_materials.dm b/code/modules/materials/_materials.dm index d5965e1caa12..8a54511cbb3f 100644 --- a/code/modules/materials/_materials.dm +++ b/code/modules/materials/_materials.dm @@ -1,5 +1,5 @@ var/global/list/_descriptive_temperature_strings -/proc/get_descriptive_temperature_strings(temperature) +/proc/get_descriptive_temperature_strings(temperature as num) if(!_descriptive_temperature_strings) _descriptive_temperature_strings = list() @@ -41,7 +41,7 @@ var/global/list/materials_by_gas_symbol = list() INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) -/obj/effect/gas_overlay/proc/update_alpha_animation(var/new_alpha) +/obj/effect/gas_overlay/proc/update_alpha_animation(var/new_alpha as num) animate(src, alpha = new_alpha) alpha = new_alpha animate(src, alpha = 0.8 * new_alpha, time = 10, easing = SINE_EASING | EASE_OUT, loop = -1) @@ -115,7 +115,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) var/can_backfill_floor_type // Shards/tables/structures - var/shard_type = SHARD_SHRAPNEL // Path of debris object. + var/shard_type = /obj/item/shard + var/shard_name = SHARD_SHRAPNEL as text // Path of debris object. var/shard_icon // Related to above. var/shard_can_repair = 1 // Can shards be turned into sheets with a welder? var/list/recipes // Holder for all recipes usable with a sheet of this material. @@ -135,8 +136,15 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) var/table_icon_base = "metal" var/table_icon_reinforced = "reinf_metal" - var/bench_icon = 'icons/obj/structures/benches.dmi' - var/pew_icon = 'icons/obj/structures/pews.dmi' + // TODO: Refactor these to just apply a generic material overlay (e.g. wood grain) instead of entirely-separate icon files? + // Alternatively, find some other way for icon variation based on material. + // You can't do it by having separate states in the base icons, + // because then modpacked materials can't add new states, + // and what if we really really want a special nullglass pew sprite or something? + var/bench_icon = 'icons/obj/structures/furniture/bench.dmi' + var/pew_icon = 'icons/obj/structures/furniture/pew.dmi' + var/slatted_seat_icon = 'icons/obj/structures/furniture/chair_slatted.dmi' + var/backed_chair_icon = 'icons/obj/structures/furniture/chair_backed.dmi' var/list/stack_origin_tech = @'{"materials":1}' // Research level for stacks. @@ -427,7 +435,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) if(holographic) temperature_burn_milestone_material = null can_boil_to_gas = FALSE - shard_type = SHARD_NONE + shard_name = SHARD_NONE + shard_type = null conductive = 0 hidden_from_codex = TRUE value = 0 @@ -462,7 +471,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) temperature_damage_threshold = new_temperature_damage_threshold if(!shard_icon) - shard_icon = shard_type + shard_icon = shard_name if(!burn_armor) burn_armor = brute_armor if(!gas_symbol) @@ -687,7 +696,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) // As above. /decl/material/proc/place_shards(var/turf/target, var/amount = 1) - if(shard_type) + if(shard_name) return create_object(target, amount, /obj/item/shard) /**Places downa as many shards as needed for the given amount of matter units. Returns a list of all the cuttings. */ @@ -749,12 +758,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) else if(dirtiness <= DIRTINESS_DECONTAMINATE) if(amount >= decontamination_dose && istype(O, /obj/item)) - var/obj/item/I = O - if(I.contaminated) - I.decontaminate() + var/obj/item/thing = O + if(thing.contaminated) + thing.decontaminate() if(dirtiness <= DIRTINESS_STERILE) O.germ_level -= min(amount*20, O.germ_level) - O.was_bloodied = null + O.was_bloodied = FALSE if(dirtiness <= DIRTINESS_CLEAN) O.clean() @@ -872,15 +881,15 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) var/organ_damage = dam * M.get_toxin_resistance() if(organ_damage > 0) var/mob/living/human/H = M - var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(H, toxicity_targets_organ) - if(I) - var/can_damage = I.max_damage - I.damage + var/obj/item/organ/internal/organ = GET_INTERNAL_ORGAN(H, toxicity_targets_organ) + if(organ) + var/can_damage = organ.max_damage - organ.get_organ_damage() if(can_damage > 0) if(organ_damage > can_damage) - I.take_internal_damage(can_damage, silent=TRUE) + organ.take_damage(can_damage, silent=TRUE) dam -= can_damage else - I.take_internal_damage(organ_damage, silent=TRUE) + organ.take_damage(organ_damage, silent=TRUE) dam = 0 if(dam > 0) M.take_damage(toxicity_targets_organ ? (dam * 0.75) : dam, TOX) @@ -972,7 +981,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) /decl/material/proc/affect_touch(var/mob/living/victim, var/removed, var/datum/reagents/holder) SHOULD_CALL_PARENT(TRUE) - + . = FALSE if(!istype(victim)) return FALSE @@ -983,9 +992,9 @@ INITIALIZE_IMMEDIATE(/obj/effect/gas_overlay) if(dirtiness <= DIRTINESS_STERILE) if(victim.germ_level < INFECTION_LEVEL_TWO) // rest and antibiotics is required to cure serious infections victim.germ_level -= min(removed*20, victim.germ_level) - for(var/obj/item/I in victim.contents) - I.was_bloodied = null - victim.was_bloodied = null + for(var/obj/item/organ in victim.contents) + organ.was_bloodied = FALSE + victim.was_bloodied = FALSE . = TRUE // TODO: clean should add the gross reagents washed off to a holder to dump on the loc. diff --git a/code/modules/materials/definitions/gasses/_mat_gas.dm b/code/modules/materials/definitions/gasses/_mat_gas.dm index 6c0703bda431..7cec0aa4a231 100644 --- a/code/modules/materials/definitions/gasses/_mat_gas.dm +++ b/code/modules/materials/definitions/gasses/_mat_gas.dm @@ -3,7 +3,7 @@ melting_point = 70 boiling_point = 180 // -90 C - cryogenic liquid threshold color = COLOR_GRAY80 - shard_type = SHARD_NONE + shard_name = SHARD_NONE conductive = 0 value = 0.15 burn_product = /decl/material/gas/carbon_dioxide diff --git a/code/modules/materials/definitions/solids/materials_solid_exotic.dm b/code/modules/materials/definitions/solids/materials_solid_exotic.dm index f0bc71d7a181..a7ac24e2f338 100644 --- a/code/modules/materials/definitions/solids/materials_solid_exotic.dm +++ b/code/modules/materials/definitions/solids/materials_solid_exotic.dm @@ -43,7 +43,7 @@ icon_base = 'icons/turf/walls/stone.dmi' wall_flags = 0 table_icon_base = "stone" - shard_type = SHARD_SHARD + shard_name = SHARD_SHARD hardness = MAT_VALUE_RIGID flags = MAT_FLAG_FUSION_FUEL construction_difficulty = MAT_VALUE_HARD_DIY diff --git a/code/modules/materials/definitions/solids/materials_solid_gemstones.dm b/code/modules/materials/definitions/solids/materials_solid_gemstones.dm index dcb3b5d38a62..d9a0253e53a4 100644 --- a/code/modules/materials/definitions/solids/materials_solid_gemstones.dm +++ b/code/modules/materials/definitions/solids/materials_solid_gemstones.dm @@ -3,7 +3,7 @@ cut_delay = 60 color = COLOR_DIAMOND opacity = 0.4 - shard_type = SHARD_SHARD + shard_name = SHARD_SHARD tableslam_noise = 'sound/effects/Glasshit.ogg' conductive = 0 ore_icon_overlay = "gems" diff --git a/code/modules/materials/definitions/solids/materials_solid_glass.dm b/code/modules/materials/definitions/solids/materials_solid_glass.dm index d22fbe2d7eae..c93baa2bc708 100644 --- a/code/modules/materials/definitions/solids/materials_solid_glass.dm +++ b/code/modules/materials/definitions/solids/materials_solid_glass.dm @@ -7,7 +7,7 @@ color = GLASS_COLOR opacity = 0.3 integrity = 50 - shard_type = SHARD_SHARD + shard_name = SHARD_SHARD tableslam_noise = 'sound/effects/Glasshit.ogg' hardness = MAT_VALUE_RIGID + 10 door_icon_base = "metal" diff --git a/code/modules/materials/definitions/solids/materials_solid_organic.dm b/code/modules/materials/definitions/solids/materials_solid_organic.dm index 26d720a8814d..e4e065676e6f 100644 --- a/code/modules/materials/definitions/solids/materials_solid_organic.dm +++ b/code/modules/materials/definitions/solids/materials_solid_organic.dm @@ -130,6 +130,7 @@ conductive = FALSE value = 0.25 default_solid_form = /obj/item/stack/material/bolt + shard_name = SHARD_NONE shard_type = /obj/item/shreddedp exoplanet_rarity_plant = MAT_RARITY_NOWHERE exoplanet_rarity_gas = MAT_RARITY_NOWHERE diff --git a/code/modules/materials/definitions/solids/materials_solid_stone.dm b/code/modules/materials/definitions/solids/materials_solid_stone.dm index acf1e65ed86f..99c4a2bd31c3 100644 --- a/code/modules/materials/definitions/solids/materials_solid_stone.dm +++ b/code/modules/materials/definitions/solids/materials_solid_stone.dm @@ -2,7 +2,7 @@ name = null abstract_type = /decl/material/solid/stone color = "#d9c179" - shard_type = SHARD_STONE_PIECE + shard_name = SHARD_STONE_PIECE weight = MAT_VALUE_HEAVY hardness = MAT_VALUE_HARD - 5 reflectiveness = MAT_VALUE_MATTE diff --git a/code/modules/materials/definitions/solids/materials_solid_wood.dm b/code/modules/materials/definitions/solids/materials_solid_wood.dm index e4cb6575b1c3..6402e6aa627f 100644 --- a/code/modules/materials/definitions/solids/materials_solid_wood.dm +++ b/code/modules/materials/definitions/solids/materials_solid_wood.dm @@ -21,10 +21,12 @@ ) use_reinf_state = null table_icon_base = "wood" - bench_icon = 'icons/obj/structures/wood_benches.dmi' - pew_icon = 'icons/obj/structures/wood_pews.dmi' + bench_icon = 'icons/obj/structures/furniture/bench_wood.dmi' + pew_icon = 'icons/obj/structures/furniture/pew_wood.dmi' + slatted_seat_icon = 'icons/obj/structures/furniture/chair_slatted_wood.dmi' + backed_chair_icon = 'icons/obj/structures/furniture/chair_backed_wood.dmi' explosion_resistance = 2 - shard_type = SHARD_SPLINTER + shard_name = SHARD_SPLINTER shard_can_repair = 0 // you can't weld splinters back into planks hardness = MAT_VALUE_FLEXIBLE + 10 brute_armor = 1 @@ -153,8 +155,10 @@ adjective_name = "oak laminate" uid = "solid_wood_chipboard_oak" lore_text = "Also known as particle board, this material is made from various kinds of oak wood chips and resin, with a plastic laminate." - bench_icon = 'icons/obj/structures/benches.dmi' - pew_icon = 'icons/obj/structures/pews.dmi' + bench_icon = 'icons/obj/structures/furniture/bench.dmi' + pew_icon = 'icons/obj/structures/furniture/pew.dmi' + slatted_seat_icon = 'icons/obj/structures/furniture/chair_slatted.dmi' + backed_chair_icon = 'icons/obj/structures/furniture/chair_backed.dmi' door_icon_base = "metal" table_icon_base = "metal" color = WOOD_COLOR_GENERIC diff --git a/code/modules/materials/material_stack_animal.dm b/code/modules/materials/material_stack_animal.dm index 1ca093a9c26f..f4d1d30f8090 100644 --- a/code/modules/materials/material_stack_animal.dm +++ b/code/modules/materials/material_stack_animal.dm @@ -10,15 +10,15 @@ var/_cleaned = FALSE var/work_skill = SKILL_CONSTRUCTION -/obj/item/stack/material/skin/examine(mob/user, distance) +/obj/item/stack/material/skin/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(user && distance <= 1 && user.skill_check(work_skill, SKILL_BASIC) && material?.tans_to) if(_cleaned && drying_wetness) - to_chat(user, SPAN_NOTICE("\The [src] is ready for tanning on a drying rack or in a drying oven.")) + . += SPAN_NOTICE("\The [src] is ready for tanning on a drying rack or in a drying oven.") else if(!_cleaned) - to_chat(user, SPAN_NOTICE("\The [src] must be scraped clean with a knife or other sharp object before it can be tanned.")) + . += SPAN_NOTICE("\The [src] must be scraped clean with a knife or other sharp object before it can be tanned.") else if(!drying_wetness) - to_chat(user, SPAN_NOTICE("\The [src] must be soaked in water before it can be tanned.")) + . += SPAN_NOTICE("\The [src] must be soaked in water before it can be tanned.") /obj/item/stack/material/skin/proc/set_cleaned() if(_cleaned) diff --git a/code/modules/mechs/components/_components.dm b/code/modules/mechs/components/_components.dm index 64ecc2a71d2c..6f93e83e1a93 100644 --- a/code/modules/mechs/components/_components.dm +++ b/code/modules/mechs/components/_components.dm @@ -29,12 +29,14 @@ for(var/obj/item/thing in contents) thing.emp_act(severity) -/obj/item/mech_component/examine(mob/user) +/obj/item/mech_component/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(ready_to_install()) - to_chat(user, SPAN_NOTICE("It is ready for installation.")) + . += SPAN_NOTICE("It is ready for installation.") else - show_missing_parts(user) + var/list/missing_parts = show_missing_parts(user) + if(length(missing_parts)) + . += missing_parts //These icons have multiple directions but before they're attached we only want south. /obj/item/mech_component/set_dir() diff --git a/code/modules/mechs/components/arms.dm b/code/modules/mechs/components/arms.dm index 009f02efd0cd..9d5fe7a3a7d5 100644 --- a/code/modules/mechs/components/arms.dm +++ b/code/modules/mechs/components/arms.dm @@ -16,7 +16,7 @@ /obj/item/mech_component/manipulators/show_missing_parts(var/mob/user) if(!motivator) - to_chat(user, SPAN_WARNING("It is missing an actuator.")) + return list(SPAN_WARNING("It is missing an actuator.")) /obj/item/mech_component/manipulators/ready_to_install() return motivator diff --git a/code/modules/mechs/components/body.dm b/code/modules/mechs/components/body.dm index e60ba0724037..ca4a65fadc05 100644 --- a/code/modules/mechs/components/body.dm +++ b/code/modules/mechs/components/body.dm @@ -82,12 +82,13 @@ storage_compartment = locate() in src /obj/item/mech_component/chassis/show_missing_parts(var/mob/user) + . = list() if(!cell) - to_chat(user, SPAN_WARNING("It is missing a power cell.")) + . += SPAN_WARNING("It is missing a power cell.") if(!diagnostics) - to_chat(user, SPAN_WARNING("It is missing a diagnostics unit.")) + . += SPAN_WARNING("It is missing a diagnostics unit.") if(!m_armour) - to_chat(user, SPAN_WARNING("It is missing exosuit armour plating.")) + . += SPAN_WARNING("It is missing exosuit armour plating.") /obj/item/mech_component/chassis/proc/update_air(var/take_from_supply) diff --git a/code/modules/mechs/components/frame.dm b/code/modules/mechs/components/frame.dm index fd03301f1e8c..16a24e639de0 100644 --- a/code/modules/mechs/components/frame.dm +++ b/code/modules/mechs/components/frame.dm @@ -33,26 +33,26 @@ QDEL_NULL(body) . = ..() -/obj/structure/heavy_vehicle_frame/examine(mob/user) +/obj/structure/heavy_vehicle_frame/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(!arms) - to_chat(user, SPAN_WARNING("It is missing manipulators.")) + . += SPAN_WARNING("It is missing manipulators.") if(!legs) - to_chat(user, SPAN_WARNING("It is missing propulsion.")) + . += SPAN_WARNING("It is missing propulsion.") if(!head) - to_chat(user, SPAN_WARNING("It is missing sensors.")) + . += SPAN_WARNING("It is missing sensors.") if(!body) - to_chat(user, SPAN_WARNING("It is missing a chassis.")) + . += SPAN_WARNING("It is missing a chassis.") if(is_wired == FRAME_WIRED) - to_chat(user, SPAN_WARNING("It has not had its wiring adjusted.")) + . += SPAN_WARNING("It has not had its wiring adjusted.") else if(!is_wired) - to_chat(user, SPAN_WARNING("It has not yet been wired.")) + . += SPAN_WARNING("It has not yet been wired.") if(is_reinforced == FRAME_REINFORCED) - to_chat(user, SPAN_WARNING("It has not had its internal reinforcement secured.")) + . += SPAN_WARNING("It has not had its internal reinforcement secured.") else if(is_reinforced == FRAME_REINFORCED_SECURE) - to_chat(user, SPAN_WARNING("It has not had its internal reinforcement welded in.")) + . += SPAN_WARNING("It has not had its internal reinforcement welded in.") else if(!is_reinforced) - to_chat(user, SPAN_WARNING("It does not have any internal reinforcement.")) + . += SPAN_WARNING("It does not have any internal reinforcement.") /obj/structure/heavy_vehicle_frame/on_update_icon() ..() diff --git a/code/modules/mechs/components/head.dm b/code/modules/mechs/components/head.dm index 984433994662..84791a488886 100644 --- a/code/modules/mechs/components/head.dm +++ b/code/modules/mechs/components/head.dm @@ -19,12 +19,13 @@ . = ..() /obj/item/mech_component/sensors/show_missing_parts(var/mob/user) + . = list() if(!radio) - to_chat(user, SPAN_WARNING("It is missing a radio.")) + . += SPAN_WARNING("It is missing a radio.") if(!camera) - to_chat(user, SPAN_WARNING("It is missing a camera.")) + . += SPAN_WARNING("It is missing a camera.") if(!software) - to_chat(user, SPAN_WARNING("It is missing a software control module.")) + . += SPAN_WARNING("It is missing a software control module.") /obj/item/mech_component/sensors/prebuild() radio = new(src) @@ -111,9 +112,9 @@ var/list/installed_software = list() var/max_installed_software = 2 -/obj/item/mech_component/control_module/examine(mob/user) +/obj/item/mech_component/control_module/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, SPAN_NOTICE("It has [max_installed_software - LAZYLEN(installed_software)] empty slot\s remaining out of [max_installed_software].")) + . += SPAN_NOTICE("It has [max_installed_software - LAZYLEN(installed_software)] empty slot\s remaining out of [max_installed_software].") /obj/item/mech_component/control_module/attackby(var/obj/item/thing, var/mob/user) if(istype(thing, /obj/item/stock_parts/circuitboard/exosystem)) diff --git a/code/modules/mechs/components/legs.dm b/code/modules/mechs/components/legs.dm index 39c096f7153e..40bf191e02f6 100644 --- a/code/modules/mechs/components/legs.dm +++ b/code/modules/mechs/components/legs.dm @@ -14,7 +14,7 @@ /obj/item/mech_component/propulsion/show_missing_parts(var/mob/user) if(!motivator) - to_chat(user, SPAN_WARNING("It is missing an actuator.")) + return list(SPAN_WARNING("It is missing an actuator.")) /obj/item/mech_component/propulsion/ready_to_install() return motivator diff --git a/code/modules/mechs/equipment/_equipment.dm b/code/modules/mechs/equipment/_equipment.dm index 9df6c6915979..ca8273afd3b2 100644 --- a/code/modules/mechs/equipment/_equipment.dm +++ b/code/modules/mechs/equipment/_equipment.dm @@ -48,13 +48,13 @@ else return 0 -/obj/item/mech_equipment/examine(mob/user, distance) +/obj/item/mech_equipment/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(user.skill_check(SKILL_DEVICES, SKILL_BASIC)) if(length(restricted_software)) - to_chat(user, SPAN_SUBTLE("It seems it would require [english_list(restricted_software)] to be used.")) + . += SPAN_SUBTLE("It seems it would require [english_list(restricted_software)] to be used.") if(length(restricted_hardpoints)) - to_chat(user, SPAN_SUBTLE("You figure it could be mounted in the [english_list(restricted_hardpoints)].")) + . += SPAN_SUBTLE("You figure it could be mounted in the [english_list(restricted_hardpoints)].") /obj/item/mech_equipment/proc/deactivate() active = FALSE diff --git a/code/modules/mechs/equipment/utility.dm b/code/modules/mechs/equipment/utility.dm index 02bd1abf172a..bfd2be06d01f 100644 --- a/code/modules/mechs/equipment/utility.dm +++ b/code/modules/mechs/equipment/utility.dm @@ -355,9 +355,9 @@ if (10 to 50) . = "is very worn" else . = "looks close to breaking" -/obj/item/drill_head/examine(mob/user, distance) +/obj/item/drill_head/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It [get_visible_durability()].") + . += "It [get_visible_durability()]." /obj/item/drill_head/steel material = /decl/material/solid/metal/steel @@ -404,14 +404,14 @@ return "Integrity: [drill_head.get_percent_durability()]%" return -/obj/item/mech_equipment/drill/examine(mob/user, distance) +/obj/item/mech_equipment/drill/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (drill_head) - to_chat(user, "It has a[distance > 3 ? "" : " [drill_head.material.name]"] drill head installed.") + . += "It has a[distance > 3 ? "" : " [drill_head.material.name]"] drill head installed." if (distance < 4) - to_chat(user, "The drill head [drill_head.get_visible_durability()].") + . += "The drill head [drill_head.get_visible_durability()]." else - to_chat(user, "It does not have a drill head installed.") + . += "It does not have a drill head installed." /obj/item/mech_equipment/drill/proc/attach_head(obj/item/drill_head/DH, mob/user) if (user && !user.try_unequip(DH)) @@ -742,10 +742,10 @@ var/datum/extension/network_device/camera/mech/D = get_extension(src, /datum/extension/network_device) D.display_name = "unregistered exocamera" -/obj/item/mech_equipment/camera/examine(mob/user) +/obj/item/mech_equipment/camera/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/datum/extension/network_device/camera/mech/D = get_extension(src, /datum/extension/network_device) - to_chat(user, "Channel: [english_list(D.channels)]; Feed is currently: [active ? "Online" : "Offline"].") + . += "Channel: [english_list(D.channels)]; Feed is currently: [active ? "Online" : "Offline"]." /obj/item/mech_equipment/camera/proc/activate() passive_power_use = 0.2 KILOWATTS diff --git a/code/modules/mechs/mech.dm b/code/modules/mechs/mech.dm index 899c1d05203f..c3dc8ec0e892 100644 --- a/code/modules/mechs/mech.dm +++ b/code/modules/mechs/mech.dm @@ -179,26 +179,24 @@ . = ..() -/mob/living/exosuit/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/living/exosuit/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) . = ..() if(LAZYLEN(pilots) && (!hatch_closed || body.pilot_coverage < 100 || body.transparent_cabin)) - to_chat(user, "It is being piloted by [english_list(pilots, nothing_text = "nobody")].") + . += "It is being piloted by [english_list(pilots, nothing_text = "nobody")]." if(body && LAZYLEN(body.pilot_positions)) - to_chat(user, "It can seat [body.pilot_positions.len] pilot\s total.") + . += "It can seat [body.pilot_positions.len] pilot\s total." if(hardpoints.len) - to_chat(user, "It has the following hardpoints:") + . += "It has the following hardpoints:" for(var/hardpoint in hardpoints) var/obj/item/I = hardpoints[hardpoint] - to_chat(user, "- [hardpoint]: [istype(I) ? "[I]" : "nothing"].") + . += "- [hardpoint]: [istype(I) ? "[I]" : "nothing"]." else - to_chat(user, "It has no visible hardpoints.") - + . += "It has no visible hardpoints." for(var/obj/item/mech_component/thing in list(arms, legs, head, body)) if(!thing) continue - var/damage_string = thing.get_damage_string() - to_chat(user, "Its [thing.name] [thing.gender == PLURAL ? "are" : "is"] [damage_string].") - to_chat(user, "It menaces with reinforcements of [material].") + . += "Its [thing.name] [thing.gender == PLURAL ? "are" : "is"] [thing.get_damage_string()]." + . += "It menaces with reinforcements of [material]." /mob/living/exosuit/return_air() return (body && body.pilot_coverage >= 100 && hatch_closed && body.cockpit) ? body.cockpit : loc?.return_air() diff --git a/code/modules/mechs/mech_interaction.dm b/code/modules/mechs/mech_interaction.dm index f67589fa7a40..50188cb87fc2 100644 --- a/code/modules/mechs/mech_interaction.dm +++ b/code/modules/mechs/mech_interaction.dm @@ -99,7 +99,7 @@ var/modifiers = params2list(params) if(modifiers["shift"]) - user.examinate(A) + user.examine_verb(A) return if(modifiers["ctrl"] && selected_system == A) diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index acf7751d981a..cd4354ee4d0d 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -80,6 +80,8 @@ playsound(src, "button", 60) to_chat(user, SPAN_NOTICE("You turn \the [src] [use_power ? "on" : "off"].")) state_machine.evaluate() + return TRUE + return FALSE /obj/machinery/mining_drill/on_update_icon() icon_state = "mining_drill_[use_power == POWER_USE_ACTIVE ? "on" : "off"]" diff --git a/code/modules/mining/machinery/material_extractor.dm b/code/modules/mining/machinery/material_extractor.dm index 2481dfbd8b4e..863f9fc59b21 100644 --- a/code/modules/mining/machinery/material_extractor.dm +++ b/code/modules/mining/machinery/material_extractor.dm @@ -56,17 +56,15 @@ connection.connect(port) -/obj/machinery/material_processing/extractor/examine(mob/user) +/obj/machinery/material_processing/extractor/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - var/datum/extension/atmospherics_connection/connection = get_extension(src, /datum/extension/atmospherics_connection) if(connection.connected_port) - to_chat(user, SPAN_NOTICE("It is connected to \the [connection.connected_port].")) + . += SPAN_NOTICE("It is connected to \the [connection.connected_port].") else - to_chat(user, SPAN_NOTICE("It may be connected to an atmospherics connector port with a wrench.")) - + . += SPAN_NOTICE("It may be connected to an atmospherics connector port with a wrench.") if(output_container) - to_chat(user, SPAN_NOTICE("It has \a [output_container] inserted.")) + . += SPAN_NOTICE("It has \a [output_container] inserted.") /obj/machinery/material_processing/extractor/Process() if(!use_power || (stat & (BROKEN|NOPOWER))) diff --git a/code/modules/mining/ore_box.dm b/code/modules/mining/ore_box.dm index f4090637855f..84acc94e834e 100644 --- a/code/modules/mining/ore_box.dm +++ b/code/modules/mining/ore_box.dm @@ -116,18 +116,18 @@ total_ores = 0 return TRUE -/obj/structure/ore_box/examine(mob/user, distance) +/obj/structure/ore_box/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 1) //Can only check the contents of ore boxes if you can physically reach them. return add_fingerprint(user) if(total_ores <= 0) - to_chat(user, "It is empty.") + . += "It is empty." return - to_chat(user, "It holds:") + . += "It holds:" for(var/ore in stored_ore) - to_chat(user, "- [stored_ore[ore]] [ore]") + . += "- [stored_ore[ore]] [ore]" /obj/structure/ore_box/explosion_act(severity) . = ..() diff --git a/code/modules/mob/examine.dm b/code/modules/mob/examine.dm index 033c9499a247..c9e19f366257 100644 --- a/code/modules/mob/examine.dm +++ b/code/modules/mob/examine.dm @@ -10,14 +10,14 @@ . |= thing.flags_inv return . & EQUIPMENT_VISIBILITY_FLAGS -/mob/proc/show_examined_short_description(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) - to_chat(user, "[html_icon(src)] That's \a [src][infix]. [suffix]") - to_chat(user, desc) - -/mob/proc/show_examined_worn_held_items(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) - +/mob/proc/get_examined_short_description(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) . = list() + . += "[html_icon(src)] That's \a [src][infix]. [suffix]" + if(desc) + . += desc +/mob/proc/get_examined_worn_held_items(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) + . = list() var/slot_datums = get_inventory_slots() if(length(slot_datums)) for(var/slot in slot_datums) @@ -27,23 +27,19 @@ var/slot_desc = inv_slot.get_examined_string(src, user, distance, hideflags, pronouns) if(slot_desc) . += slot_desc - if(buckled) if(user == src) . += SPAN_WARNING("You are [html_icon(buckled)] buckled to [buckled]!") else . += SPAN_WARNING("[pronouns.He] [pronouns.is] [html_icon(buckled)] buckled to [buckled]!") - if(length(.)) - to_chat(user, jointext(., "\n")) - -/mob/proc/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/proc/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) return -/mob/examine(mob/user, distance, infix, suffix) +/mob/get_examine_strings(mob/user, distance, infix, suffix) SHOULD_CALL_PARENT(FALSE) - . = TRUE + . = list() // Collect equipment visibility flags. var/hideflags = get_equipment_visibility() @@ -54,7 +50,7 @@ // Show our equipment, held items, desc, etc. var/decl/pronouns/pronouns = get_visible_pronouns(hideflags) // to_chat(user, "
") // these don't work in BYOND's native output panel. If we switch to browser output instead, you can readd this - show_examined_short_description(user, distance, infix, suffix, hideflags, pronouns) - show_examined_worn_held_items(user, distance, infix, suffix, hideflags, pronouns) - show_other_examine_strings(user, distance, infix, suffix, hideflags, pronouns) + . += get_examined_short_description(user, distance, infix, suffix, hideflags, pronouns) + . += get_examined_worn_held_items(user, distance, infix, suffix, hideflags, pronouns) + . += get_other_examine_strings(user, distance, infix, suffix, hideflags, pronouns) // to_chat(user, "
") // see above diff --git a/code/modules/mob/grab/grab_object.dm b/code/modules/mob/grab/grab_object.dm index d5a9c3c8705c..5c5e427cea5a 100644 --- a/code/modules/mob/grab/grab_object.dm +++ b/code/modules/mob/grab/grab_object.dm @@ -82,14 +82,14 @@ return TRUE return FALSE -/obj/item/grab/examine(mob/user) +/obj/item/grab/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/mob/M = get_affecting_mob() var/obj/item/O = get_targeted_organ() if(M && O) - to_chat(user, "A grip on \the [M]'s [O.name].") + . += "A grip on \the [M]'s [O.name]." else - to_chat(user, "A grip on \the [affecting].") + . += "A grip on \the [affecting]." /obj/item/grab/Process() current_grab.process(src) @@ -129,6 +129,7 @@ /obj/item/grab/can_be_dropped_by_client(mob/M) if(M == assailant) return TRUE + return FALSE /obj/item/grab/Destroy() var/atom/old_affecting = affecting diff --git a/code/modules/mob/language/generic.dm b/code/modules/mob/language/generic.dm index cb730ceb87ac..78301a7ca87a 100644 --- a/code/modules/mob/language/generic.dm +++ b/code/modules/mob/language/generic.dm @@ -4,7 +4,7 @@ desc = "Noises" key = "" flags = LANG_FLAG_RESTRICTED|LANG_FLAG_NONGLOBAL|LANG_FLAG_INNATE|LANG_FLAG_NO_TALK_MSG|LANG_FLAG_NO_STUTTER - hidden_from_codex = 1 + hidden_from_codex = TRUE /decl/language/noise/format_message(message, verb) return "[message]" diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index 8a89e28896c1..02b5199b390c 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -27,15 +27,24 @@ var/colour = "body" // CSS style to use for strings in this language. var/key = "" // Character used to speak in language var/flags = 0 // Various language flags. - var/list/syllables // Used when scrambling text for a non-speaker. - var/space_chance = 55 // Likelihood of getting a space in the random scramble string - var/machine_understands = 1 // Whether machines can parse and understand this language - var/shorthand = "???" // Shorthand that shows up in chat for this language. - var/list/partial_understanding // List of languages that can /somehwat/ understand it, format is: name = chance of understanding a word - var/hidden_from_codex // If it should not show up in Codex - var/list/scramble_cache = list() // Cached syllable strings for masking when heard by a non-speaker - var/list/speech_sounds // List of sounds to randomly play. - var/allow_repeated_syllables = TRUE // Control for handling some of the random lang/name gen. + /// Syllable list when scrambling text for display to a non-speaker. + var/list/syllables + /// Likelihood of getting a space in the random scramble string + var/space_chance = 55 + /// Whether machines can parse and understand this language + var/machine_understands = TRUE + /// Shorthand that shows up in chat for this language. + var/shorthand = "???" + /// List of languages that can /somehwat/ understand it, format is: typepath = chance of understanding a word + var/list/partial_understanding + /// If it should not show up in Codex + var/hidden_from_codex = FALSE + /// Cached syllable strings for masking when heard by a non-speaker + var/list/scramble_cache = list() + /// List of sounds to randomly play. + var/list/speech_sounds + /// Control for handling some of the random lang/name gen. + var/allow_repeated_syllables = TRUE /decl/language/proc/can_be_understood_by(var/mob/living/speaker, var/mob/living/listener) if(flags & LANG_FLAG_INNATE) diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index 9f3089994e6e..b553c2c59af0 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -15,6 +15,7 @@ var/light_strength = 3 var/busy = 0 + // Dummy object used to hold bot access strings. TODO: just put it on the mob. var/obj/access_scanner = null var/list/req_access = list() @@ -374,3 +375,17 @@ . = ..() if(istype(botcard) && !is_type_in_list(botcard, exceptions)) LAZYDISTINCTADD(., botcard) + +// We don't want to drop these on gib(). +/mob/living/bot/physically_destroyed(skip_qdel) + QDEL_NULL(botcard) + QDEL_NULL(access_scanner) + return ..() + +/mob/living/bot/Destroy() + QDEL_NULL(botcard) + QDEL_NULL(access_scanner) + return ..() + +/mob/living/bot/isSynthetic() + return TRUE diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 7f0e4f675410..5f924e281515 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -165,7 +165,7 @@ anchored = TRUE if(do_after(src, 50, F)) if(F.is_floor_damaged()) - F.set_flooring(null) + F.remove_flooring(F.get_topmost_flooring()) anchored = FALSE target = null busy = 0 diff --git a/code/modules/mob/living/bot/medibot.dm b/code/modules/mob/living/bot/medibot.dm index 8ba09af58d39..037c13b9ffa2 100644 --- a/code/modules/mob/living/bot/medibot.dm +++ b/code/modules/mob/living/bot/medibot.dm @@ -40,22 +40,22 @@ //The last time we were tipped/righted and said a voice line, to avoid spam var/last_tipping_action_voice = 0 -/mob/living/bot/medbot/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/living/bot/medbot/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) . = ..() if(tipped_status == MEDBOT_PANIC_NONE) return switch(tipped_status) if(MEDBOT_PANIC_NONE to MEDBOT_PANIC_LOW) - to_chat(user, "It appears to be tipped over, and is quietly waiting for someone to set it right.") + . += "It appears to be tipped over, and is quietly waiting for someone to set it right." if(MEDBOT_PANIC_LOW to MEDBOT_PANIC_MED) - to_chat(user, "It is tipped over and requesting help.") + . += "It is tipped over and requesting help." if(MEDBOT_PANIC_MED to MEDBOT_PANIC_HIGH) - to_chat(user, SPAN_WARNING("They are tipped over and appear visibly distressed.")) // now we humanize the medbot as a they, not an it + . += SPAN_WARNING("They are tipped over and appear visibly distressed.") // now we humanize the medbot as a they, not an it if(MEDBOT_PANIC_HIGH to MEDBOT_PANIC_FUCK) - to_chat(user, SPAN_WARNING("They are tipped over and visibly panicking!")) + . += SPAN_WARNING("They are tipped over and visibly panicking!") if(MEDBOT_PANIC_FUCK to INFINITY) - to_chat(user, SPAN_DANGER("They are freaking out from being tipped over!")) + . += SPAN_DANGER("They are freaking out from being tipped over!") /mob/living/bot/medbot/handleIdle() if(vocal && prob(1)) diff --git a/code/modules/mob/living/bot/remotebot.dm b/code/modules/mob/living/bot/remotebot.dm index 1d50e2f72c6d..fa28520aa3e5 100644 --- a/code/modules/mob/living/bot/remotebot.dm +++ b/code/modules/mob/living/bot/remotebot.dm @@ -17,10 +17,10 @@ tally += (2 * holding.w_class) return tally -/mob/living/bot/remotebot/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/living/bot/remotebot/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) . = ..() if(holding) - to_chat(user, "It is holding \the [html_icon(holding)] [holding].") + . += SPAN_NOTICE("It is holding \the [html_icon(holding)] [holding].") /mob/living/bot/remotebot/gib(do_gibs = TRUE) var/turf/my_turf = get_turf(src) diff --git a/code/modules/mob/living/human/examine.dm b/code/modules/mob/living/human/examine.dm index d1763426eb69..1c3dabe29148 100644 --- a/code/modules/mob/living/human/examine.dm +++ b/code/modules/mob/living/human/examine.dm @@ -1,5 +1,5 @@ -/mob/living/human/show_examined_short_description(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) - var/msg = list("*---------*\n[user == src ? "You are" : "This is"] [name]") +/mob/living/human/get_examined_short_description(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) + var/msg = list("*---------*
[user == src ? "You are" : "This is"] [name]") if(!(hideflags & HIDEJUMPSUIT) || !(hideflags & HIDEFACE)) var/species_name = "\improper " if(isSynthetic() && species.cyborg_noun) @@ -18,9 +18,11 @@ msg += "
*---------*" msg += "
[print_flavour]" msg += "
*---------*" - to_chat(user, jointext(msg, null)) + return list(jointext(msg, null)) -/mob/living/human/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/living/human/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) + + . = ..() var/self_examine = (user == src) var/use_He = self_examine ? "You" : pronouns.He @@ -33,80 +35,71 @@ var/use_him = self_examine ? "you" : pronouns.him var/use_looks = self_examine ? "look" : "looks" - var/list/msg = list() //Jitters var/jitteriness = GET_STATUS(src, STAT_JITTER) if(jitteriness >= 300) - msg += "[use_He] [use_is] convulsing violently!\n" + . += "[use_He] [use_is] convulsing violently!" else if(jitteriness >= 200) - msg += "[use_He] [use_is] extremely jittery.\n" + . += "[use_He] [use_is] extremely jittery." else if(jitteriness >= 100) - msg += "[use_He] [use_is] twitching ever so slightly.\n" + . += "[use_He] [use_is] twitching ever so slightly." //Disfigured face if(!(hideflags & HIDEFACE)) //Disfigurement only matters for the head currently. - var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(src, BP_HEAD) - if(E && (E.status & ORGAN_DISFIGURED)) //Check to see if we even have a head and if the head's disfigured. - if(E.species) //Check to make sure we have a species - msg += E.species.disfigure_msg(src) + var/obj/item/organ/external/limb = GET_EXTERNAL_ORGAN(src, BP_HEAD) + if(limb && (limb.status & ORGAN_DISFIGURED)) //Check to see if we even have a head and if the head's disfigured. + if(limb.species) //Check to make sure we have a species + . += limb.species.disfigure_msg(src) else //Just in case they lack a species for whatever reason. - msg += "[use_His] face is horribly mangled!\n" + . += "[use_His] face is horribly mangled!" //splints for(var/organ in list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM)) - var/obj/item/organ/external/o = GET_EXTERNAL_ORGAN(src, organ) - if(o && o.splinted && o.splinted.loc == o) - msg += "[use_He] [use_has] \a [o.splinted] on [use_his] [o.name]!\n" + var/obj/item/organ/external/limb = GET_EXTERNAL_ORGAN(src, organ) + if(limb && limb.splinted && limb.splinted.loc == limb) + . += "[use_He] [use_has] \a [limb.splinted] on [use_his] [limb.name]!" if (src.stat) - msg += "[use_He] [use_is]n't responding to anything around [use_him] and seems to be unconscious.\n" + . += "[use_He] [use_is]n't responding to anything around [use_him] and seems to be unconscious." if((stat == DEAD || is_asystole() || src.ticks_since_last_successful_breath) && distance <= 3) - msg += "[use_He] [use_does] not appear to be breathing.\n" - if(ishuman(user) && !user.incapacitated() && Adjacent(user)) - spawn(0) - user.visible_message("\The [user] checks \the [src]'s pulse.", "You check \the [src]'s pulse.") - if(do_after(user, 15, src)) - if(get_pulse() == PULSE_NONE) - to_chat(user, "[use_He] [use_has] no pulse.") - else - to_chat(user, "[use_He] [use_has] a pulse!") + . += "[use_He] [use_does] not appear to be breathing." var/datum/reagents/touching_reagents = get_contact_reagents() if(touching_reagents?.total_volume >= 1) var/saturation = touching_reagents.total_volume / touching_reagents.maximum_volume if(saturation > 0.9) - msg += "[use_He] [use_is] completely saturated.\n" + . += "[use_He] [use_is] completely saturated." else if(saturation > 0.6) - msg += "[use_He] [use_is] looking half-drowned.\n" + . += "[use_He] [use_is] looking half-drowned." else if(saturation > 0.3) - msg += "[use_He] [use_is] looking notably soggy.\n" + . += "[use_He] [use_is] looking notably soggy." else - msg += "[use_He] [use_is] looking a bit soggy.\n" + . += "[use_He] [use_is] looking a bit soggy." var/fire_level = get_fire_intensity() if(fire_level > 0) - msg += "[use_He] [use_is] looking highly flammable!\n" + . += "[use_He] [use_is] looking highly flammable!" else if(fire_level < 0) - msg += "[use_He] [use_is] looking rather incombustible.\n" + . += "[use_He] [use_is] looking rather incombustible." if(is_on_fire()) - msg += "[use_He] [use_is] on fire!\n" + . += "[use_He] [use_is] on fire!" var/ssd_msg = species.get_ssd(src) if(ssd_msg && (!should_have_organ(BP_BRAIN) || has_brain()) && stat != DEAD) if(!key) - msg += "[use_He] [use_is] [ssd_msg]. It doesn't look like [use_he] [use_is] waking up anytime soon.\n" + . += "[use_He] [use_is] [ssd_msg]. It doesn't look like [use_he] [use_is] waking up anytime soon." else if(!client) - msg += "[use_He] [use_is] [ssd_msg].\n" + . += "[use_He] [use_is] [ssd_msg]." var/obj/item/organ/external/head/H = get_organ(BP_HEAD, /obj/item/organ/external/head) if(istype(H) && H.forehead_graffiti && H.graffiti_style) - msg += "[use_He] [use_has] \"[H.forehead_graffiti]\" written on [use_his] [H.name] in [H.graffiti_style]!\n" + . += "[use_He] [use_has] \"[H.forehead_graffiti]\" written on [use_his] [H.name] in [H.graffiti_style]!" if(became_younger) - msg += "[use_He] [use_looks] a lot younger than you remember.\n" + . += "[use_He] [use_looks] a lot younger than you remember." if(became_older) - msg += "[use_He] [use_looks] a lot older than you remember.\n" + . += "[use_He] [use_looks] a lot older than you remember." var/list/wound_flavor_text = list() var/applying_pressure = "" @@ -118,49 +111,49 @@ var/list/organ_data = root_bodytype.has_limbs[organ_tag] var/organ_descriptor = organ_data["descriptor"] - var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(src, organ_tag) + var/obj/item/organ/external/limb = GET_EXTERNAL_ORGAN(src, organ_tag) - if(!E) - wound_flavor_text[organ_descriptor] = "[use_He] [use_is] missing [use_his] [organ_descriptor].\n" + if(!limb) + wound_flavor_text[organ_descriptor] = "[use_He] [use_is] missing [use_his] [organ_descriptor]." continue - wound_flavor_text[E.name] = "" + wound_flavor_text[limb.name] = "" - if(E.applied_pressure == src) - applying_pressure = "[use_He] [use_is] applying pressure to [use_his] [E.name].
" + if(limb.applied_pressure == src) + applying_pressure = "[use_He] [use_is] applying pressure to [use_his] [limb.name]." var/obj/item/clothing/hidden for(var/slot in global.standard_clothing_slots) var/obj/item/clothing/C = get_equipped_item(slot) - if(istype(C) && (C.body_parts_covered & E.body_part)) + if(istype(C) && (C.body_parts_covered & limb.body_part)) hidden = C break if(hidden && user != src) - if(E.status & ORGAN_BLEEDING && !(hidden.item_flags & ITEM_FLAG_THICKMATERIAL)) //not through a spacesuit + if(limb.status & ORGAN_BLEEDING && !(hidden.item_flags & ITEM_FLAG_THICKMATERIAL)) //not through a spacesuit if(!hidden_bleeders[hidden]) hidden_bleeders[hidden] = list() - hidden_bleeders[hidden] += E.name + hidden_bleeders[hidden] += limb.name else - if(!isSynthetic() && BP_IS_PROSTHETIC(E) && (E.parent && !BP_IS_PROSTHETIC(E.parent))) - wound_flavor_text[E.name] = "[use_He] [use_has] a [E.name].\n" - var/wounddesc = E.get_wounds_desc() + if(!isSynthetic() && BP_IS_PROSTHETIC(limb) && (limb.parent && !BP_IS_PROSTHETIC(limb.parent))) + wound_flavor_text[limb.name] = "[use_He] [use_has] a [limb.name].\n" + var/wounddesc = limb.get_wounds_desc() if(wounddesc != "nothing") - wound_flavor_text[E.name] += "[use_He] [use_has] [wounddesc] on [use_his] [E.name].
" + wound_flavor_text[limb.name] += "[use_He] [use_has] [wounddesc] on [use_his] [limb.name]." if(!hidden || distance <=1) - if(E.is_dislocated()) - wound_flavor_text[E.name] += "[use_His] [E.joint] is dislocated!
" - if(((E.status & ORGAN_BROKEN) && E.brute_dam > E.min_broken_damage) || (E.status & ORGAN_MUTATED)) - wound_flavor_text[E.name] += "[use_His] [E.name] is dented and swollen!
" - if(E.status & ORGAN_DEAD) - if(BP_IS_PROSTHETIC(E) || BP_IS_CRYSTAL(E)) - wound_flavor_text[E.name] += "[use_His] [E.name] is irrecoverably damaged!
" + if(limb.is_dislocated()) + wound_flavor_text[limb.name] += "[use_His] [limb.joint] is dislocated!
" + if(((limb.status & ORGAN_BROKEN) && limb.brute_dam > limb.min_broken_damage) || (limb.status & ORGAN_MUTATED)) + wound_flavor_text[limb.name] += "[use_His] [limb.name] is dented and swollen!
" + if(limb.status & ORGAN_DEAD) + if(BP_IS_PROSTHETIC(limb) || BP_IS_CRYSTAL(limb)) + wound_flavor_text[limb.name] += "[use_His] [limb.name] is irrecoverably damaged!" else - wound_flavor_text[E.name] += "[use_His] [E.name] is grey and necrotic!
" - else if(E.damage >= E.max_damage && E.germ_level >= INFECTION_LEVEL_TWO) - wound_flavor_text[E.name] += "[use_His] [E.name] is likely beyond saving, and has begun to decay!
" + wound_flavor_text[limb.name] += "[use_His] [limb.name] is grey and necrotic!
" + else if((limb.brute_dam + limb.burn_dam) >= limb.max_damage && limb.germ_level >= INFECTION_LEVEL_TWO) + wound_flavor_text[limb.name] += "[use_His] [limb.name] is likely beyond saving, and has begun to decay!" - for(var/datum/wound/wound in E.wounds) + for(var/datum/wound/wound in limb.wounds) var/list/embedlist = wound.embedded_objects if(LAZYLEN(embedlist)) shown_objects += embedlist @@ -171,21 +164,21 @@ else if(!parsedembed.Find("multiple [embedded.name]")) parsedembed.Remove(embedded.name) parsedembed.Add("multiple "+embedded.name) - wound_flavor_text["[E.name]"] += "The [wound.desc] on [use_his] [E.name] has \a [english_list(parsedembed, and_text = " and a ", comma_text = ", a ")] sticking out of it!
" + wound_flavor_text["[limb.name]"] += "The [wound.desc] on [use_his] [limb.name] has \a [english_list(parsedembed, and_text = " and a ", comma_text = ", a ")] sticking out of it!" for(var/hidden in hidden_bleeders) - wound_flavor_text[hidden] = "[use_He] [use_has] blood soaking through [hidden] around [use_his] [english_list(hidden_bleeders[hidden])]!
" + wound_flavor_text[hidden] = "[use_He] [use_has] blood soaking through [hidden] around [use_his] [english_list(hidden_bleeders[hidden])]!" - msg += "" + . += "" for(var/limb in wound_flavor_text) - msg += wound_flavor_text[limb] - msg += "" + . += wound_flavor_text[limb] + . += "" for(var/obj/implant in get_visible_implants(0)) if(implant in shown_objects) continue - msg += "[src] [use_has] \a [implant.name] sticking out of [use_his] flesh!\n" + . += "[src] [use_has] \a [implant.name] sticking out of [use_his] flesh!" if(digitalcamo) - msg += "[use_He] [use_is] repulsively uncanny!\n" + . += "[use_He] [use_is] repulsively uncanny!" if(hasHUD(user, HUD_SECURITY)) var/perpname = "wot" @@ -204,8 +197,8 @@ if(R) criminal = R.get_criminalStatus() - msg += "Criminal status: \[[criminal]\]\n" - msg += "Security records: \[View\]\n" + . += "Criminal status: \[[criminal]\]" + . += "Security records: \[View\]" if(hasHUD(user, HUD_MEDICAL)) var/perpname = "wot" @@ -223,45 +216,55 @@ if(R) medical = R.get_status() - msg += "Physical status: \[[medical]\]\n" - msg += "Medical records: \[View\]\n" + . += "Physical status: \[[medical]\]" + . += "Medical records: \[View\]" // Show IC/OOC info if available. if(comments_record_id) var/datum/character_information/comments = SScharacter_info.get_record(comments_record_id) if(comments?.show_info_on_examine && (comments.ic_info || comments.ooc_info)) - msg += "*---------*
" + . += "*---------*" if(comments.ic_info) if(length(comments.ic_info) <= 40) - msg += "IC Info:
    [comments.ic_info]
" + . += "IC Info:" + . += "    [comments.ic_info]" else - msg += "IC Info:
    [copytext_preserve_html(comments.ic_info,1,37)]... More...
" + . += "IC Info:" + . += "    [copytext_preserve_html(comments.ic_info,1,37)]... More..." if(comments.ooc_info) if(length(comments.ooc_info) <= 40) - msg += "OOC Info:
    [comments.ooc_info]
" + . += "OOC Info:" + . += "    [comments.ooc_info]" else - msg += "OOC Info:
    [copytext_preserve_html(comments.ooc_info,1,37)]... More...
" + . += "OOC Info:" + . += "    [copytext_preserve_html(comments.ooc_info,1,37)]... More..." - msg += "*---------*

" - msg += applying_pressure + . += "*---------*
" + . += applying_pressure if (pose) if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 ) pose = addtext(pose,".") //Makes sure all emotes end with a period. - msg += "[use_He] [pose]\n" + . += "[use_He] [pose]" var/list/human_examines = decls_repository.get_decls_of_subtype(/decl/human_examination) for(var/exam in human_examines) var/decl/human_examination/HE = human_examines[exam] var/adding_text = HE.do_examine(user, distance, src) if(adding_text) - msg += adding_text - - to_chat(user, jointext(msg, null)) - - ..() + . += adding_text + + // Foul, todo fix this + if(stat && ishuman(user) && !user.incapacitated() && Adjacent(user)) + spawn(0) + user.visible_message("\The [user] checks \the [src]'s pulse.", "You check \the [src]'s pulse.") + if(do_after(user, 15, src)) + if(get_pulse() == PULSE_NONE) + to_chat(user, "[use_He] [use_has] no pulse.") + else + to_chat(user, "[use_He] [use_has] a pulse!") -//Helper procedure. Called by /mob/living/human/examine() and /mob/living/human/Topic() to determine HUD access to security and medical records. +//Helper procedure. Called by /mob/living/human/examined_by() and /mob/living/human/Topic() to determine HUD access to security and medical records. /proc/hasHUD(mob/M, hudtype) return !!M.getHUDsource(hudtype) diff --git a/code/modules/mob/living/human/human.dm b/code/modules/mob/living/human/human.dm index 7d6a018fa64b..6ffaebad41b9 100644 --- a/code/modules/mob/living/human/human.dm +++ b/code/modules/mob/living/human/human.dm @@ -129,13 +129,13 @@ if (href_list["lookitem"]) var/obj/item/I = locate(href_list["lookitem"]) if(I) - src.examinate(I) + src.examine_verb(I) return TOPIC_HANDLED if (href_list["lookmob"]) var/mob/M = locate(href_list["lookmob"]) if(M) - src.examinate(M) + src.examine_verb(M) return TOPIC_HANDLED return ..() @@ -453,7 +453,7 @@ SPAN_DANGER("Your movement jostles [O] in your [organ.name] painfully."), \ SPAN_DANGER("Your movement jostles [O] in your [organ.name] painfully.")) custom_pain(msg,40,affecting = organ) - organ.take_external_damage(rand(1,3) + O.w_class, DAM_EDGE, 0) + organ.take_damage(rand(1,3) + O.w_class, damage_flags = DAM_EDGE) /mob/proc/set_bodytype(var/decl/bodytype/new_bodytype) return @@ -914,7 +914,7 @@ ..() if(should_have_organ(BP_STOMACH)) var/obj/item/organ/internal/stomach = GET_INTERNAL_ORGAN(src, BP_STOMACH) - if(!stomach || stomach.is_broken() || (stomach.is_bruised() && prob(stomach.damage))) + if(!stomach || stomach.is_broken() || (stomach.is_bruised() && prob(stomach.get_organ_damage()))) if(should_have_organ(BP_HEART)) vessel.trans_to_obj(vomit, 5) else @@ -1164,3 +1164,14 @@ return . = ..() + +/mob/living/human/isSynthetic() + if(isnull(full_prosthetic)) + robolimb_count = 0 + var/list/limbs = get_external_organs() + for(var/obj/item/organ/external/E in limbs) + if(BP_IS_PROSTHETIC(E)) + robolimb_count++ + full_prosthetic = robolimb_count > 0 && (robolimb_count == LAZYLEN(limbs)) //If no organs, no way to tell + return full_prosthetic + diff --git a/code/modules/mob/living/human/human_attackhand.dm b/code/modules/mob/living/human/human_attackhand.dm index 490e3d5f3dae..00c8a932b860 100644 --- a/code/modules/mob/living/human/human_attackhand.dm +++ b/code/modules/mob/living/human/human_attackhand.dm @@ -59,7 +59,7 @@ . += "irrecoverably damaged" else . += "grey and necrotic" - else if(damage >= max_damage && germ_level >= INFECTION_LEVEL_TWO) + else if((brute_dam + burn_dam) >= max_damage && germ_level >= INFECTION_LEVEL_TWO) . += "likely beyond saving and decay has set in" if(!is_usable() || is_dislocated()) // This one is special and has a different message for visible/pain modes. diff --git a/code/modules/mob/living/human/human_blood.dm b/code/modules/mob/living/human/human_blood.dm index 5199e366c2e5..fd5f388ee845 100644 --- a/code/modules/mob/living/human/human_blood.dm +++ b/code/modules/mob/living/human/human_blood.dm @@ -212,7 +212,7 @@ blood_volume *= 1.25 var/min_efficiency = recent_pump ? 0.5 : 0.3 - blood_volume *= max(min_efficiency, (1-(heart.damage / heart.max_damage))) + blood_volume *= max(min_efficiency, (1-(heart.get_organ_damage() / heart.max_damage))) if(!heart.open && has_chemical_effect(CE_BLOCKAGE, 1)) blood_volume *= max(0, 1-GET_CHEMICAL_EFFECT(src, CE_BLOCKAGE)) diff --git a/code/modules/mob/living/human/human_damage.dm b/code/modules/mob/living/human/human_damage.dm index d0a3849a851e..72e1546c7db1 100644 --- a/code/modules/mob/living/human/human_damage.dm +++ b/code/modules/mob/living/human/human_damage.dm @@ -22,7 +22,7 @@ if(!(status_flags & GODMODE) && should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(src, BP_BRAIN) if(sponge) - sponge.take_internal_damage(amount) + sponge.take_damage(amount) ..() /mob/living/human/setBrainLoss(var/amount) @@ -30,7 +30,7 @@ if(should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(src, BP_BRAIN) if(sponge) - sponge.damage = min(max(amount, 0),sponge.species.total_health) + sponge.set_organ_damage(amount) update_health() /mob/living/human/getBrainLoss() @@ -40,10 +40,8 @@ if(sponge) if(sponge.status & ORGAN_DEAD) return sponge.species.total_health - else - return sponge.damage - else - return species.total_health + return sponge.get_organ_damage() + return species.total_health return 0 //Straight pain values, not affected by painkillers etc @@ -210,24 +208,24 @@ pick_organs -= brain pick_organs += brain - for(var/internal in pick_organs) - var/obj/item/organ/internal/I = internal + for(var/obj/item/organ/internal/organ as anything in pick_organs) if(amount <= 0) break + var/organ_damage = organ.get_organ_damage() if(heal) - if(I.damage < amount) - amount -= I.damage - I.damage = 0 + if(organ_damage < amount) + amount -= organ_damage + organ.set_organ_damage(0) else - I.damage -= amount + organ.adjust_organ_damage(-(amount)) amount = 0 else - var/cap_dam = I.max_damage - I.damage + var/cap_dam = organ.max_damage - organ_damage if(amount >= cap_dam) - I.take_internal_damage(cap_dam, silent=TRUE) + organ.take_damage(cap_dam, silent=TRUE) amount -= cap_dam else - I.take_internal_damage(amount, silent=TRUE) + organ.take_damage(amount, silent=TRUE) amount = 0 if(do_update_health) @@ -283,9 +281,14 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t if(!length(parts)) return var/obj/item/organ/external/picked = pick(parts) - if(picked.take_external_damage(brute, burn, override_droplimb = override_droplimb)) + . = FALSE + if(brute && picked.take_damage(brute, override_droplimb = override_droplimb, do_update_health = FALSE)) + . = TRUE + if(burn && picked.take_damage(burn, BURN, override_droplimb = override_droplimb, do_update_health = FALSE)) + . = TRUE + if(.) + update_health() BITSET(hud_updateflag, HEALTH_HUD) - update_health() //Heal MANY external organs, in random order /mob/living/human/heal_overall_damage(var/brute, var/burn) @@ -392,15 +395,12 @@ This function restores all organs. var/datum/wound/created_wound damageoverlaytemp = 20 switch(damagetype) - if(BRUTE) - created_wound = organ.take_external_damage(damage, 0, damage_flags, used_weapon) - if(BURN) - created_wound = organ.take_external_damage(0, damage, damage_flags, used_weapon) + if(BRUTE, BURN) + created_wound = organ.take_damage(damage, damagetype, damage_flags = damage_flags, inflicter = used_weapon, do_update_health = FALSE) if(PAIN) organ.add_pain(damage) if(CLONE) organ.add_genetic_damage(damage) - // Will set our damageoverlay icon to the next level, which will then be set back to the normal level the next mob.Life(). update_health() BITSET(hud_updateflag, HEALTH_HUD) diff --git a/code/modules/mob/living/human/human_helpers.dm b/code/modules/mob/living/human/human_helpers.dm index 3148393b04e0..90035988c32d 100644 --- a/code/modules/mob/living/human/human_helpers.dm +++ b/code/modules/mob/living/human/human_helpers.dm @@ -147,35 +147,35 @@ var/vision_organ_tag = get_vision_organ_tag() if(!vision_organ_tag) return - var/obj/item/organ/internal/eyes/E = get_organ(vision_organ_tag, /obj/item/organ/internal/eyes) - if(!E) + var/obj/item/organ/internal/eyes/eyes = get_organ(vision_organ_tag, /obj/item/organ/internal/eyes) + if(!istype(eyes)) return var/safety = eyecheck() switch(safety) if(FLASH_PROTECTION_MODERATE) to_chat(src, "Your eyes sting a little.") - E.damage += rand(1, 2) - if(E.damage > 12) + eyes.adjust_organ_damage(rand(1, 2)) + if(eyes.get_organ_damage() > 12) ADJ_STATUS(src, STAT_BLURRY, rand(3,6)) if(FLASH_PROTECTION_MINOR) to_chat(src, "Your eyes stings!") - E.damage += rand(1, 4) - if(E.damage > 10) + eyes.adjust_organ_damage(rand(1, 4)) + if(eyes.get_organ_damage() > 10) ADJ_STATUS(src, STAT_BLURRY, rand(3,6)) - E.damage += rand(1, 4) + eyes.adjust_organ_damage(rand(1, 4)) if(FLASH_PROTECTION_NONE) to_chat(src, "Your eyes burn!") - E.damage += rand(2, 4) - if(E.damage > 10) - E.damage += rand(4,10) + eyes.adjust_organ_damage(rand(2, 4)) + if(eyes.get_organ_damage() > 10) + eyes.adjust_organ_damage(rand(4,10)) if(FLASH_PROTECTION_REDUCED) to_chat(src, "Your equipment intensifies the welder's glow. Your eyes itch and burn severely.") ADJ_STATUS(src, STAT_BLURRY, rand(12,20)) - E.damage += rand(12, 16) + eyes.adjust_organ_damage(rand(12, 16)) if(safety 10) + if(eyes.get_organ_damage() > 10) to_chat(src, "Your eyes are really starting to hurt. This can't be good for you!") - if (E.damage >= E.min_bruised_damage) + if (eyes.get_organ_damage() >= eyes.min_bruised_damage) to_chat(src, "You go blind!") SET_STATUS_MAX(src, STAT_BLIND, 5) SET_STATUS_MAX(src, STAT_BLURRY, 5) diff --git a/code/modules/mob/living/human/human_movement.dm b/code/modules/mob/living/human/human_movement.dm index a3af65028c19..012f9071302a 100644 --- a/code/modules/mob/living/human/human_movement.dm +++ b/code/modules/mob/living/human/human_movement.dm @@ -25,7 +25,7 @@ if(can_feel_pain() && get_shock() >= 10) tally += (get_shock() / 10) //pain shouldn't slow you down if you can't even feel it - if(istype(buckled, /obj/structure/bed/chair/wheelchair)) + if(istype(buckled, /obj/structure/chair/wheelchair)) for(var/organ_name in list(BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM)) var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(src, organ_name) tally += E ? E.get_movement_delay(4) : 4 diff --git a/code/modules/mob/living/human/human_verbs.dm b/code/modules/mob/living/human/human_verbs.dm index 6eb933776124..35812110f18b 100644 --- a/code/modules/mob/living/human/human_verbs.dm +++ b/code/modules/mob/living/human/human_verbs.dm @@ -1,76 +1,3 @@ -/mob/living/human/proc/morph() - set name = "Morph" - set category = "Superpower" - - if(stat!=CONSCIOUS) - reset_view(0) - remoteview_target = null - return - - if(!has_genetic_condition(GENE_COND_SHAPESHIFTER)) - src.verbs -= /mob/living/human/proc/morph - return - - var/new_facial = input("Please select facial hair color.", "Character Generation", GET_FACIAL_HAIR_COLOR(src)) as color - if(new_facial) - SET_FACIAL_HAIR_COLOR(src, new_facial, TRUE) - - var/new_hair = input("Please select hair color.", "Character Generation", GET_HAIR_COLOR(src)) as color - if(new_hair) - SET_HAIR_COLOR(src, new_hair, TRUE) - - var/new_eyes = input("Please select eye color.", "Character Generation", get_eye_colour()) as color - if(new_eyes) - set_eye_colour(new_eyes) - - var/new_tone = input("Please select skin tone level: 1-220 (1=albino, 35=caucasian, 150=black, 220='very' black)", "Character Generation", "[35-skin_tone]") as text - - if (!new_tone) - new_tone = 35 - skin_tone = max(min(round(text2num(new_tone)), 220), 1) - skin_tone = -skin_tone + 35 - - // hair - var/list/all_hairs = decls_repository.get_decls_of_subtype(/decl/sprite_accessory/hair) - var/list/hairs = list() - - // loop through potential hairs - for(var/x in all_hairs) - hairs += all_hairs[x] - - var/decl/new_style = input("Please select hair style", "Character Generation", GET_HAIR_STYLE(src)) as null|anything in hairs - - // if new style selected (not cancel) - if(new_style) - SET_HAIR_STYLE(src, new_style.type, TRUE) - - // facial hair - var/list/all_fhairs = decls_repository.get_decls_of_subtype(/decl/sprite_accessory/facial_hair) - var/list/fhairs = list() - - for(var/x in all_fhairs) - fhairs += all_fhairs[x] - - new_style = input("Please select facial style", "Character Generation", GET_FACIAL_HAIR_STYLE(src)) as null|anything in fhairs - - if(new_style) - SET_FACIAL_HAIR_STYLE(src, new_style.type, TRUE) - - var/new_gender = alert(usr, "Please select gender.", "Character Generation", "Male", "Female", "Neutral") - if (new_gender) - if(new_gender == "Male") - gender = MALE - else if(new_gender == "Female") - gender = FEMALE - else - gender = NEUTER - - update_hair() - try_refresh_visible_overlays() - - var/decl/pronouns/pronouns = get_pronouns() - visible_message("\The [src] morphs and changes [pronouns.his] appearance!", "You change your appearance!", "Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!") - /mob/living/human/proc/remotesay() set name = "Project mind" set category = "Superpower" @@ -86,7 +13,7 @@ var/list/creatures = list() for(var/mob/living/h in global.player_list) creatures += h - var/mob/target = input("Who do you want to project your mind to ?") as null|anything in creatures + var/mob/target = input(usr, "Who do you want to project your mind to?") as null|anything in creatures if (isnull(target)) return @@ -128,7 +55,7 @@ continue creatures += h - var/mob/target = input ("Who do you want to project your mind to ?") as mob in creatures + var/mob/target = input(usr, "Who do you want to project your mind to?") as mob in creatures if (target) remoteview_target = target @@ -311,7 +238,7 @@ "[self ? "You pop" : "[U] pops"] your [current_limb.joint] in the WRONG place!" \ ) current_limb.add_pain(30) - current_limb.take_external_damage(5) + current_limb.take_damage(5) shock_stage += 20 else visible_message( \ diff --git a/code/modules/mob/living/human/life.dm b/code/modules/mob/living/human/life.dm index b8de66f65755..83b79d2bf9cd 100644 --- a/code/modules/mob/living/human/life.dm +++ b/code/modules/mob/living/human/life.dm @@ -246,11 +246,11 @@ SET_HUD_ALERT(src, HUD_PRESSURE, -1) else var/list/obj/item/organ/external/parts = get_damageable_organs() - for(var/obj/item/organ/external/O in parts) - if(QDELETED(O) || !(O.owner == src)) + for(var/obj/item/organ/external/limb in parts) + if(QDELETED(limb) || !(limb.owner == src)) continue - if(O.damage + (LOW_PRESSURE_DAMAGE) < O.min_broken_damage) //vacuum does not break bones - O.take_external_damage(brute = LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") + if(limb.brute_dam + limb.burn_dam + (LOW_PRESSURE_DAMAGE) < limb.min_broken_damage) //vacuum does not break bones + limb.take_damage(LOW_PRESSURE_DAMAGE, inflicter = "Low Pressure") if(getOxyLossPercent() < 55) // 11 OxyLoss per 4 ticks when wearing internals; unconsciousness in 16 ticks, roughly half a minute take_damage(4) // 16 OxyLoss per 4 ticks when no internals present; unconsciousness in 13 ticks, OXY, roughly twenty seconds SET_HUD_ALERT(src, HUD_PRESSURE, -2) @@ -288,11 +288,11 @@ for(var/slot in global.standard_clothing_slots) var/obj/item/clothing/C = get_equipped_item(slot) if(istype(C)) - if(C.min_cold_protection_temperature && C.min_cold_protection_temperature <= temperature) + if(!isnull(C.min_cold_protection_temperature) && C.min_cold_protection_temperature <= temperature) . |= C.cold_protection if(LAZYLEN(C.accessories)) for(var/obj/item/clothing/accessory in C.accessories) - if(accessory.min_cold_protection_temperature && accessory.min_cold_protection_temperature <= temperature) + if(!isnull(accessory.min_cold_protection_temperature) && accessory.min_cold_protection_temperature <= temperature) . |= accessory.cold_protection @@ -351,8 +351,8 @@ if(vsc.contaminant_control.CONTAMINATION_LOSS) var/total_contamination= 0 - for(var/obj/item/I in src) - if(I.contaminated) + for(var/obj/item/thing in src) + if(thing.contaminated) total_contamination += vsc.contaminant_control.CONTAMINATION_LOSS take_damage(total_contamination, TOX) @@ -470,9 +470,9 @@ // Puke if toxloss is too high var/vomit_score = 0 for(var/tag in list(BP_LIVER,BP_KIDNEYS)) - var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(src, tag) - if(I) - vomit_score += I.damage + var/obj/item/organ/internal/organ = GET_INTERNAL_ORGAN(src, tag) + if(organ) + vomit_score += organ.get_organ_damage() else if (should_have_organ(tag)) vomit_score += 45 if(has_chemical_effect(CE_TOXIN, 1) || radiation) @@ -618,9 +618,9 @@ var/obj/item/id = get_equipped_item(slot_wear_id_str) if(id) - var/obj/item/card/id/I = id.GetIdCard() - if(I) - var/datum/job/J = SSjobs.get_by_title(I.GetJobName()) + var/obj/item/card/id/id_card = id.GetIdCard() + if(id_card) + var/datum/job/J = SSjobs.get_by_title(id_card.GetJobName()) if(J) holder.icon = J.hud_icon holder.icon_state = J.hud_icon_state @@ -633,9 +633,9 @@ var/perpname = name var/obj/item/id = get_equipped_item(slot_wear_id_str) if(id) - var/obj/item/card/id/I = id.GetIdCard() - if(I) - perpname = I.registered_name + var/obj/item/card/id/id_card = id.GetIdCard() + if(id_card) + perpname = id_card.registered_name var/datum/computer_file/report/crew_record/E = get_crewmember_record(perpname) if(E) @@ -661,13 +661,13 @@ holder1.icon_state = "hud_imp_blank" holder2.icon_state = "hud_imp_blank" holder3.icon_state = "hud_imp_blank" - for(var/obj/item/implant/I in src) - if(I.implanted) - if(istype(I,/obj/item/implant/tracking)) + for(var/obj/item/implant/implant in src) + if(implant.implanted) + if(istype(implant,/obj/item/implant/tracking)) holder1.icon_state = "hud_imp_tracking" - else if(istype(I,/obj/item/implant/loyalty)) + else if(istype(implant,/obj/item/implant/loyalty)) holder2.icon_state = "hud_imp_loyal" - else if(istype(I,/obj/item/implant/chem)) + else if(istype(implant,/obj/item/implant/chem)) holder3.icon_state = "hud_imp_chem" hud_list[IMPTRACK_HUD] = holder1 diff --git a/code/modules/mob/living/human/unarmed_attack.dm b/code/modules/mob/living/human/unarmed_attack.dm index 3ae4dece2a1a..ce18cfa97bfb 100644 --- a/code/modules/mob/living/human/unarmed_attack.dm +++ b/code/modules/mob/living/human/unarmed_attack.dm @@ -148,7 +148,7 @@ var/obj/item/organ/internal/eyes = GET_INTERNAL_ORGAN(target, BP_EYES) var/decl/pronouns/pronouns = user.get_pronouns() if(eyes) - eyes.take_internal_damage(rand(3,4), 1) + eyes.take_damage(rand(3,4), 1) user.visible_message(SPAN_DANGER("\The [user] jams [pronouns.his] [eye_attack_text] into \the [target]'s [eyes.name]!")) if(eyes.can_feel_pain()) to_chat(target, SPAN_DANGER("You experience immense pain as [eye_attack_text_victim] are jammed into your [eyes.name]!")) @@ -210,7 +210,8 @@ attack_damage = clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case. if(target == user) - user.visible_message("[user] [pick(attack_verb)] \himself in \the [affecting]!") + var/decl/pronouns/pronouns = user.get_pronouns() + user.visible_message(SPAN_DANGER("\The [user] [pick(attack_verb)] [pronouns.self] in \the [affecting]!")) return 0 target.update_personal_goal(/datum/goal/achievement/fistfight, TRUE) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 44e8324fcc03..a2bb5d26fa26 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -21,11 +21,12 @@ return my_species.ai return ..() -/mob/living/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/living/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) + . = ..() if(admin_paralyzed) - to_chat(user, SPAN_OCCULT("OOC: [pronouns.He] [pronouns.has] been paralyzed by staff. Please avoid interacting with [pronouns.him] unless cleared to do so by staff.")) + . += SPAN_OCCULT("OOC: [pronouns.He] [pronouns.has] been paralyzed by staff. Please avoid interacting with [pronouns.him] unless cleared to do so by staff.") if(!length(get_external_organs()) && length(embedded)) // fallback for simple embedding used by limbless mobs - to_chat(user, SPAN_WARNING("[pronouns.He] [pronouns.has] [inline_counting_english_list(embedded, determiners = DET_INDEFINITE)] embedded in [pronouns.him].")) + . += SPAN_WARNING("[pronouns.He] [pronouns.has] [inline_counting_english_list(embedded, determiners = DET_INDEFINITE)] embedded in [pronouns.him].") //mob verbs are faster than object verbs. See above. /mob/living/pointed(atom/A as mob|obj|turf in view()) @@ -374,8 +375,8 @@ default behaviour is: repair_brain = FALSE var/obj/item/organ/internal/brain = GET_INTERNAL_ORGAN(src, BP_BRAIN) if(brain) - if(brain.damage > (brain.max_damage/2)) - brain.damage = (brain.max_damage/2) + if(brain.get_organ_damage() > (brain.max_damage/2)) + brain.set_organ_damage(brain.max_damage/2) if(brain.status & ORGAN_DEAD) brain.status &= ~ORGAN_DEAD START_PROCESSING(SSobj, brain) @@ -1665,7 +1666,7 @@ default behaviour is: for(var/datum/wound/wound in affected.wounds) LAZYREMOVE(wound.embedded_objects, implant) if(!surgical_removal) - affected.take_external_damage((implant.w_class * 3), 0, DAM_EDGE, "Embedded object extraction") + affected.take_damage((implant.w_class * 3), damage_flags = DAM_EDGE, inflicter = "Embedded object extraction") if(!BP_IS_PROSTHETIC(affected) && prob(implant.w_class * 5) && affected.sever_artery()) //I'M SO ANEMIC I COULD JUST -DIE-. custom_pain("Something tears wetly in your [affected.name] as [implant] is pulled free!", 50, affecting = affected) @@ -1762,7 +1763,7 @@ default behaviour is: playsound(user.loc, 'sound/effects/attackblob.ogg', 50, 1) var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(src, BP_CHEST) if(istype(organ)) - organ.take_external_damage(d, 0) + organ.take_damage(d) else take_organ_damage(d) if(prob(get_damage(BRUTE) - 50)) @@ -1964,23 +1965,20 @@ default behaviour is: set_moving_slowly() start_automove(target, metadata = upset ? _flee_automove_metadata : _annoyed_automove_metadata) -/mob/living/examine(mob/user, distance, infix, suffix) - +/mob/living/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(has_extension(src, /datum/extension/shearable)) var/datum/extension/shearable/shearable = get_extension(src, /datum/extension/shearable) if(world.time >= shearable.next_fleece || shearable.has_fleece) - to_chat(user, SPAN_NOTICE("\The [src] can be sheared with shears, or a similar tool.")) + . += SPAN_NOTICE("\The [src] can be sheared with shears, or a similar tool.") else - to_chat(user, SPAN_WARNING("\The [src] will be ready to be sheared in [ceil((shearable.next_fleece-world.time) / 10)] second\s.")) - + . += SPAN_WARNING("\The [src] will be ready to be sheared in [ceil((shearable.next_fleece-world.time) / 10)] second\s.") if(has_extension(src, /datum/extension/milkable)) var/datum/extension/milkable/milkable = get_extension(src, /datum/extension/milkable) if(milkable.udder.total_volume > 0) - to_chat(user, SPAN_NOTICE("\The [src] can be milked into a bucket or other container.")) + . += SPAN_NOTICE("\The [src] can be milked into a bucket or other container.") else - to_chat(user, SPAN_WARNING("\The [src] cannot currently be milked.")) + . += SPAN_WARNING("\The [src] cannot currently be milked.") /mob/living/proc/get_age() . = LAZYACCESS(appearance_descriptors, "age") || 30 diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 4d894ca4fa90..b7ae767787e1 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -29,12 +29,13 @@ var/mob/living/cameraFollow = null var/list/datum/action/actions = list() - VAR_PRIVATE/_on_fire = 0 //The "Are we on fire?" var + /// The "Are we on fire?" var. Use of is_on_fire() is preferred instead. + VAR_PRIVATE/_on_fire = FALSE VAR_PRIVATE/_fire_intensity var/ticks_since_last_successful_breath = 0 //if we failed to breathe last tick - var/failed_last_breath = 0 //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks. - var/possession_candidate // Can be possessed by ghosts if unplayed. + var/failed_last_breath = FALSE //This is used to determine if the mob failed a breath. If they did fail a brath, they will attempt to breathe each tick, otherwise just once per 4 ticks. + var/possession_candidate = FALSE // Can be possessed by ghosts if unplayed. var/job = null//Living var/list/obj/aura/auras = null //Basically a catch-all aura/force-field thing. @@ -91,7 +92,7 @@ var/weather_sensitive = FALSE /// Var used to track current step for footsteps sounds. - var/tmp/step_count + var/tmp/step_count = 0 /// Has this mob -ever- had a gripper? Used to skip hand checks in some cases. var/has_had_gripper = FALSE diff --git a/code/modules/mob/living/living_fires.dm b/code/modules/mob/living/living_fires.dm index 5711910fe86c..c66beaedc8a9 100644 --- a/code/modules/mob/living/living_fires.dm +++ b/code/modules/mob/living/living_fires.dm @@ -80,7 +80,7 @@ if(has_external_organs()) for(var/obj/item/organ/external/E in get_external_organs()) if(!(E.body_part & protected_limbs) && prob(20)) - E.take_external_damage(burn = round(species_heat_mod * log(10, (burn_temperature + 10)), 0.1), used_weapon = "fire") + E.take_damage(round(species_heat_mod * log(10, (burn_temperature + 10)), 0.1), BURN, inflicter = "fire") else // fallback for simplemobs take_damage(round(species_heat_mod * log(10, (burn_temperature + 10))), 0.1, BURN, DAM_DISPERSED) diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index 42b3821b4ab8..8807ed377466 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -1,36 +1,33 @@ -/mob/living/silicon/ai/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/living/silicon/ai/examined_by(mob/user, distance, infix, suffix) . = ..() + user?.showLaws(src) - var/msg = "" - if (src.stat == DEAD) - msg += "It appears to be powered-down.\n" +/mob/living/silicon/ai/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) + . = ..() + if(stat == DEAD) + . += "It appears to be powered-down." else - msg += "" - if (src.get_damage(BRUTE)) - if (src.get_damage(BRUTE) < 30) - msg += "It looks slightly dented.\n" - else - msg += "It looks severely dented!\n" - if (src.get_damage(BURN)) - if (src.get_damage(BURN) < 30) - msg += "It looks slightly charred.\n" - else - msg += "Its casing is melted and heat-warped!\n" + var/brute_damage = get_damage(BRUTE) + if (brute_damage >= 30) + . += SPAN_WARNING("It looks severely dented!") + else if(brute_damage) + . += SPAN_WARNING("It looks slightly dented.") + var/burn_damage = get_damage(BURN) + if(burn_damage >= 30) + . += SPAN_WARNING("Its casing is melted and heat-warped!") + else if(burn_damage) + . += SPAN_WARNING("It looks slightly charred.") if (!has_power()) - if (src.get_damage(OXY) > 175) - msg += "It seems to be running on backup power. Its display is blinking a \"BACKUP POWER CRITICAL\" warning.\n" - else if(src.get_damage(OXY) > 100) - msg += "It seems to be running on backup power. Its display is blinking a \"BACKUP POWER LOW\" warning.\n" + var/oxy_damage = get_damage(OXY) + if (oxy_damage > 175) + . += SPAN_WARNING("It seems to be running on backup power. Its display is blinking a \"BACKUP POWER CRITICAL\" warning.") + else if(oxy_damage > 100) + . += SPAN_WARNING("It seems to be running on backup power. Its display is blinking a \"BACKUP POWER LOW\" warning.") else - msg += "It seems to be running on backup power.\n" - - if (src.stat == UNCONSCIOUS) - msg += "It is non-responsive and displaying the text: \"RUNTIME: Sensory Overload, stack 26/3\".\n" - msg += "" - msg += "*---------*" - to_chat(user, msg) - user.showLaws(src) - return + . += SPAN_WARNING("It seems to be running on backup power.") + if (stat == UNCONSCIOUS) + . += SPAN_WARNING("It is non-responsive and displaying the text: \"RUNTIME: Sensory Overload, stack 26/3\".") + . += "*---------*" /mob/proc/showLaws(var/mob/living/silicon/S) return diff --git a/code/modules/mob/living/silicon/pai/examine.dm b/code/modules/mob/living/silicon/pai/examine.dm index d781e3d136d1..270afeef3012 100644 --- a/code/modules/mob/living/silicon/pai/examine.dm +++ b/code/modules/mob/living/silicon/pai/examine.dm @@ -1,19 +1,18 @@ -/mob/living/silicon/pai/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) - . = ..(user, distance, infix = ", personal AI") - - var/msg = "" - switch(src.stat) +/mob/living/silicon/pai/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) + infix = ", personal AI" + . = ..() + switch(stat) if(CONSCIOUS) - if(!src.client) msg += "\nIt appears to be in stand-by mode." //afk - if(UNCONSCIOUS) msg += "\nIt doesn't seem to be responding." - if(DEAD) msg += "\nIt looks completely unsalvageable." - msg += "\n*---------*" - - if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" - + if(!src.client) + . += "It appears to be in stand-by mode." //afk + if(UNCONSCIOUS) + . += "It doesn't seem to be responding." + if(DEAD) + . += "It looks completely unsalvageable." + . += "*---------*" + if(print_flavor_text()) + . += "[print_flavor_text()]" if (pose) if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 ) pose = addtext(pose,".") //Makes sure all emotes end with a period. - msg += "\nIt is [pose]" - - to_chat(user, msg) + . += "It is [pose]" diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index b7e695a72cbe..49224c032f54 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -190,7 +190,7 @@ var/global/list/possible_say_verbs = list( var/mob/living/human/H = holder for(var/obj/item/organ/external/affecting in H.get_external_organs()) if(card in affecting.implants) - affecting.take_external_damage(rand(30,50)) + affecting.take_damage(rand(30,50)) LAZYREMOVE(affecting.implants, card) H.visible_message("\The [src] explodes out of \the [H]'s [affecting.name] in a shower of gore!") break diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm index 689e7211132a..1434763bfa9b 100644 --- a/code/modules/mob/living/silicon/robot/analyzer.dm +++ b/code/modules/mob/living/silicon/robot/analyzer.dm @@ -89,11 +89,11 @@ to_chat(user, "
") to_chat(user, SPAN_NOTICE("Internal prosthetics:")) organ_found = null - for(var/obj/item/organ/O in H.get_internal_organs()) - if(!BP_IS_PROSTHETIC(O)) + for(var/obj/item/organ/internal/organ in H.get_internal_organs()) + if(!BP_IS_PROSTHETIC(organ)) continue organ_found = 1 - to_chat(user, "[O.name]: [SPAN_RED(O.damage)]") + to_chat(user, "[organ.name]: [SPAN_RED(organ.get_organ_damage())]") if(!organ_found) to_chat(user, "No prosthetics located.") diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index e01e0ad52802..c1b984b8a6d5 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -15,7 +15,7 @@ integrated_light_power = 0.4 integrated_light_range = 3 local_transmit = 1 - possession_candidate = 1 + possession_candidate = TRUE speed = -1 can_pull_size = ITEM_SIZE_NORMAL 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 c57b494d1002..ff180bd1016f 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -142,10 +142,10 @@ /obj/item/stack/material ) -/obj/item/gripper/examine(mob/user) +/obj/item/gripper/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(wrapped) - to_chat(user, "It is holding \a [wrapped].") + . += "It is holding \a [wrapped]." /obj/item/gripper/attack_self(mob/user) if(wrapped) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm index fcf266c47ee3..2bfdc4c3ec64 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm @@ -69,10 +69,10 @@ if(drone_progress >= 100) visible_message("\The [src] voices a strident beep, indicating a drone chassis is prepared.") -/obj/machinery/drone_fabricator/examine(mob/user) +/obj/machinery/drone_fabricator/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(produce_drones && drone_progress >= 100 && isghost(user) && get_config_value(/decl/config/toggle/on/allow_drone_spawn) && count_drones() < get_config_value(/decl/config/num/max_maint_drones)) - to_chat(user, "
A drone is prepared. Select 'Join As Drone' from the Ghost tab to spawn as a maintenance drone.") + . += "A drone is prepared. Select 'Join As Drone' from the Ghost tab to spawn as a maintenance drone." /obj/machinery/drone_fabricator/proc/create_drone(var/client/player) diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index a822685d3461..6fb6983f9f25 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -1,43 +1,38 @@ -/mob/living/silicon/robot/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) - var/custom_infix = custom_name ? ", [modtype] [braintype]" : "" - . = ..(user, distance, infix = custom_infix) - - var/msg = "" - msg += "" - if (src.get_damage(BRUTE)) - if (src.get_damage(BRUTE) < 75) - msg += "It looks slightly dented.\n" - else - msg += "It looks severely dented!\n" - if (src.get_damage(BURN)) - if (src.get_damage(BURN) < 75) - msg += "It looks slightly charred.\n" - else - msg += "It looks severely burnt and heat-warped!\n" - msg += "" +/mob/living/silicon/robot/examined_by(mob/user, distance, infix, suffix) + . = ..() + user?.showLaws(src) +/mob/living/silicon/robot/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) + infix = custom_name ? ", [modtype] [braintype]" : "" + . = ..() + var/brute_damage = get_damage(BRUTE) + if (brute_damage >= 75) + . += SPAN_WARNING("It looks severely dented!") + else if(brute_damage) + . += SPAN_WARNING("It looks slightly dented.") + var/burn_damage = get_damage(BURN) + if (burn_damage >= 75) + . += SPAN_WARNING("It looks severely burnt and heat-warped!") + else if(burn_damage) + . += SPAN_WARNING("It looks slightly charred.") if(opened) - msg += "Its cover is open and the power cell is [cell ? "installed" : "missing"].\n" + . += SPAN_WARNING("Its cover is open and the power cell is [cell ? "installed" : "missing"].") else - msg += "Its cover is closed.\n" - + . += "Its cover is closed." if(!has_power) - msg += "It appears to be running on backup power.\n" - - switch(src.stat) + . += SPAN_WARNING("It appears to be running on backup power.") + switch(stat) if(CONSCIOUS) - if(!src.client) msg += "It appears to be in stand-by mode.\n" //afk - if(UNCONSCIOUS) msg += "It doesn't seem to be responding.\n" - if(DEAD) msg += "It looks completely unsalvageable.\n" - msg += "*---------*" - - if(print_flavor_text()) msg += "\n[print_flavor_text()]\n" - + if(!client) + . += "It appears to be in stand-by mode." //afk + if(UNCONSCIOUS) + . += SPAN_WARNING("It doesn't seem to be responding.") + if(DEAD) + . += "It looks completely unsalvageable." + . += "*---------*" + if(print_flavor_text()) + . += "[print_flavor_text()]" if (pose) if( findtext(pose,".",length(pose)) == 0 && findtext(pose,"!",length(pose)) == 0 && findtext(pose,"?",length(pose)) == 0 ) pose = addtext(pose,".") //Makes sure all emotes end with a period. - msg += "\nIt [pose]" - - to_chat(user, msg) - user.showLaws(src) - return + . += "It [pose]" diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index 71c952c9dbde..c2fde015d1df 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -68,14 +68,14 @@ flick("portable_analyzer_load", src) icon_state = "portable_analyzer_full" -/obj/item/portable_destructive_analyzer/examine(mob/user, distance) +/obj/item/portable_destructive_analyzer/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) if(loaded_item) - to_chat(user, "It is holding \the [loaded_item].") - to_chat(user, "It has the following data saved:") + . += "It is holding \the [loaded_item]." + . += "It has the following data saved:" for(var/tech in saved_tech_levels) - to_chat(user, "[tech]: [saved_tech_levels[tech]]") + . += "[tech]: [saved_tech_levels[tech]]" //This is used to unlock other borg covers. /obj/item/card/robot //This is not a child of id cards, as to avoid dumb typechecks on computers. @@ -233,10 +233,10 @@ max_doors = 5 max_health = ITEM_HEALTH_NO_DAMAGE -/obj/item/inflatable_dispenser/examine(mob/user) +/obj/item/inflatable_dispenser/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It has [stored_walls] wall segment\s and [stored_doors] door segment\s stored.") - to_chat(user, "It is set to deploy [mode ? "doors" : "walls"]") + . += "It has [stored_walls] wall segment\s and [stored_doors] door segment\s stored." + . += "It is set to deploy [mode ? "doors" : "walls"]" /obj/item/inflatable_dispenser/attack_self(mob/user) mode = !mode @@ -326,9 +326,9 @@ var/capacity = 1 //How many objects can be held. var/list/obj/item/held = list() //What is being held. -/obj/item/robot_rack/examine(mob/user) +/obj/item/robot_rack/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It can hold up to [capacity] item\s.") + . += "It can hold up to [capacity] item\s." /obj/item/robot_rack/Initialize(mapload, starting_objects = 0) . = ..() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 5fe858b67a56..a402c51add3b 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -458,3 +458,5 @@ stance_damage = 0 return +/mob/living/silicon/isSynthetic() + return TRUE diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index a9b8e6891b80..50c1c1aae4f0 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -54,7 +54,7 @@ maxbodytemp = 323 //Above 50 Degrees Celsius holder_type = /obj/item/holder mob_size = MOB_SIZE_SMALL - possession_candidate = 1 + possession_candidate = TRUE pass_flags = PASS_FLAG_TABLE butchery_data = /decl/butchery_data/animal/cat base_animal_type = /mob/living/simple_animal/passive/cat diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 64ea0d6d25f3..ab52e19b77ca 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -8,7 +8,7 @@ response_disarm = "bops" see_in_dark = 5 mob_size = MOB_SIZE_SMALL - possession_candidate = 1 + possession_candidate = TRUE holder_type = /obj/item/holder/corgi pass_flags = PASS_FLAG_TABLE base_animal_type = /mob/living/simple_animal/corgi diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index bcd84ddc3dfa..a35f3dfa013a 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -6,7 +6,7 @@ mob_size = MOB_SIZE_SMALL speak_emote = list("clicks") response_harm = "stamps on" - possession_candidate = 1 + possession_candidate = TRUE pass_flags = PASS_FLAG_TABLE natural_armor = list( ARMOR_MELEE = ARMOR_MELEE_KNIVES diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 6571031649c7..7a00faca3d58 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -149,21 +149,21 @@ var/decl/skill/examine_skill = SKILL_BOTANY // for maps that change the default skills, or for alien eggs that need science/medical/anatomy instead var/examine_difficulty = SKILL_ADEPT -/mob/living/simple_animal/chick/examine(mob/user, distance, infix, suffix) +/mob/living/simple_animal/chick/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(!user.skill_check(examine_skill, examine_difficulty)) var/decl/skill/examine_skill_decl = GET_DECL(examine_skill) - to_chat(user, SPAN_SUBTLE("If you knew more about [lowertext(examine_skill_decl.name)], you could learn additional information about this.")) + . += SPAN_SUBTLE("If you knew more about [lowertext(examine_skill_decl.name)], you could learn additional information about this.") return switch(amount_grown) if(0 to 20) - to_chat(user, SPAN_NOTICE("It's still young.")) + . += SPAN_NOTICE("It's still young.") if(20 to 40) - to_chat(user, SPAN_NOTICE("It's starting to grow in its adult feathers.")) + . += SPAN_NOTICE("It's starting to grow in its adult feathers.") if(40 to 80) - to_chat(user, SPAN_NOTICE("It's grown in almost all its adult feathers.")) + . += SPAN_NOTICE("It's grown in almost all its adult feathers.") if(80 to 100) - to_chat(user, SPAN_NOTICE("It's almost fully grown.")) + . += SPAN_NOTICE("It's almost fully grown.") /datum/mob_controller/chick emote_speech = list("Cherp.","Cherp?","Chirrup.","Cheep!") @@ -304,19 +304,19 @@ var/global/chicken_count = 0 var/decl/skill/examine_skill = SKILL_BOTANY // for maps that change the default skills, or for alien eggs that need science/medical/anatomy instead var/examine_difficulty = SKILL_ADEPT -/obj/item/food/egg/examine(mob/user, distance, infix, suffix) +/obj/item/food/egg/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(isnull(examine_difficulty) || !ispath(examine_skill)) return if(!user.skill_check(examine_skill, examine_difficulty)) var/decl/skill/examine_skill_decl = GET_DECL(examine_skill) - to_chat(user, SPAN_SUBTLE("If you knew more about [lowertext(examine_skill_decl.name)], you could learn additional information about this.")) + . += SPAN_SUBTLE("If you knew more about [lowertext(examine_skill_decl.name)], you could learn additional information about this.") return if(distance > 1) - to_chat(user, SPAN_SUBTLE("You're too far away to learn anything about this.")) + . += SPAN_SUBTLE("You're too far away to learn anything about this.") return if(!user.get_held_slot_for_item(src)) - to_chat(user, SPAN_NOTICE("You need to be holding \the [src] to examine it closer.")) + . += SPAN_NOTICE("You need to be holding \the [src] to examine it closer.") return // need a lit candle or lantern to check var/too_hot = FALSE @@ -329,18 +329,18 @@ var/global/chicken_count = 0 if(!too_hot) break if(too_hot) - to_chat(user, SPAN_WARNING("You can't use \the [candle] to examine \the [src], that would fry it!")) + . += SPAN_WARNING("You can't use \the [candle] to examine \the [src], that would fry it!") return else if(!candle) - to_chat(user, SPAN_NOTICE("You need to be holding a light source to examine this closer.")) + . += SPAN_NOTICE("You need to be holding a light source to examine this closer.") return switch(amount_grown) if(0) - to_chat(user, SPAN_NOTICE("\The [src] is unfertilized.")) + . += SPAN_NOTICE("\The [src] is unfertilized.") if(10 to 80) - to_chat(user, SPAN_NOTICE("There's something growing inside \the [src].")) + . += SPAN_NOTICE("There's something growing inside \the [src].") if(80 to 100) - to_chat(user, SPAN_NOTICE("\The [src] is about to hatch!")) + . += SPAN_NOTICE("\The [src] is about to hatch!") /obj/item/food/egg/Destroy() if(amount_grown) diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index f585498c0620..e6bcea2be418 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -7,7 +7,7 @@ natural_weapon = /obj/item/natural_weapon/bite/weak response_harm = "stamps on" mob_size = MOB_SIZE_MINISCULE - possession_candidate = 1 + possession_candidate = TRUE pass_flags = PASS_FLAG_TABLE butchery_data = /decl/butchery_data/animal/reptile/small ai = /datum/mob_controller/lizard diff --git a/code/modules/mob/living/simple_animal/friendly/possum.dm b/code/modules/mob/living/simple_animal/friendly/possum.dm index 69f4f9973215..d57bba3eff9b 100644 --- a/code/modules/mob/living/simple_animal/friendly/possum.dm +++ b/code/modules/mob/living/simple_animal/friendly/possum.dm @@ -14,7 +14,7 @@ universal_speak = FALSE universal_understand = TRUE mob_size = MOB_SIZE_SMALL - possession_candidate = 1 + possession_candidate = TRUE can_pull_size = ITEM_SIZE_SMALL can_pull_mobs = MOB_PULL_SMALLER holder_type = /obj/item/holder diff --git a/code/modules/mob/living/simple_animal/hostile/bad_drone.dm b/code/modules/mob/living/simple_animal/hostile/bad_drone.dm index e87d75f9e444..c18ea28f6984 100644 --- a/code/modules/mob/living/simple_animal/hostile/bad_drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/bad_drone.dm @@ -12,6 +12,7 @@ mob_size = MOB_SIZE_TINY gene_damage = -1 attack_delay = DEFAULT_QUICK_COOLDOWN + butchery_data = /decl/butchery_data/synthetic ai = /datum/mob_controller/aggressive/rogue_drone var/corpse = /obj/effect/decal/cleanable/blood/gibs/robot @@ -43,4 +44,7 @@ if(. && !gibbed) if(corpse) new corpse (loc) - qdel(src) \ No newline at end of file + qdel(src) + +/mob/living/simple_animal/hostile/rogue_drone/isSynthetic() + return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index 662a6058c3d5..3e450fd82b2c 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -217,6 +217,7 @@ //spawn 1-4 boards of a random type var/spawnees = 0 var/num_boards = rand(1,4) + //TODO: Make these use actual subtypes instead var/list/options = list(1,2,4,8,16,32,64,128,256,512) for(var/i=0, i 0 && (robolimb_count == LAZYLEN(limbs)) //If no organs, no way to tell - return full_prosthetic - -/mob/living/silicon/isSynthetic() - return 1 - /mob/proc/isMonkey() return 0 diff --git a/code/modules/mob/mob_intent.dm b/code/modules/mob/mob_intent.dm index 37bf6fa6d50b..f9271fb64fec 100644 --- a/code/modules/mob/mob_intent.dm +++ b/code/modules/mob/mob_intent.dm @@ -36,7 +36,7 @@ /// State used to update intent selector. var/icon_state /// Whether or not this intent is available if you have an item in your hand. - var/requires_empty_hand + var/requires_empty_hand = FALSE /// Intents to be removed from the available list if this intent is present. var/list/blocks_other_intents diff --git a/code/modules/mob/mob_organs.dm b/code/modules/mob/mob_organs.dm index eb5b763c95fd..6aea72caa0ce 100644 --- a/code/modules/mob/mob_organs.dm +++ b/code/modules/mob/mob_organs.dm @@ -15,7 +15,9 @@ return /mob/proc/get_organs() - for(var/organ in get_external_organs()) - LAZYADD(., organ) - for(var/organ in get_internal_organs()) - LAZYADD(., organ) + var/list/external_organs = get_external_organs() + if(external_organs) + LAZYADD(., external_organs) + var/list/internal_organs = get_internal_organs() + if(internal_organs) + LAZYADD(., internal_organs) diff --git a/code/modules/mob/observer/eye/eye.dm b/code/modules/mob/observer/eye/eye.dm index fa4a89fdb28a..ad313eeff1f4 100644 --- a/code/modules/mob/observer/eye/eye.dm +++ b/code/modules/mob/observer/eye/eye.dm @@ -41,7 +41,7 @@ set_dir(ndir) return 1 -/mob/observer/eye/examinate() +/mob/observer/eye/examine_verb() set popup_menu = 0 set src = usr.contents return 0 @@ -51,7 +51,7 @@ set src = usr.contents return 0 -/mob/observer/eye/examine(mob/user) +/mob/observer/eye/examined_by(mob/user) SHOULD_CALL_PARENT(FALSE) return TRUE diff --git a/code/modules/mob/skills/antag_skill_setter.dm b/code/modules/mob/skills/antag_skill_setter.dm index 598b1d1c3ce8..8900b318fd79 100644 --- a/code/modules/mob/skills/antag_skill_setter.dm +++ b/code/modules/mob/skills/antag_skill_setter.dm @@ -1,9 +1,12 @@ //A datum that performs antag-related skill selection functions. /datum/antag_skill_setter - var/nm_type //A nano_module with custom ui, if any. - var/list/base_skill_list = list() //Format: list(path = value). - var/default_value = SKILL_DEFAULT //If not in base_skill_list or added in another way, skill value will be this. + /// The path of the nano_module to use with any custom UI handling, if any. If null, uses the base skillset's type. + var/nm_type + /// An associative list of base skill values to provide for free. Keys are skill paths, values are the skill level. + var/list/base_skill_list = list() + /// If not in base_skill_list or added in another way, skill value will be this. + var/default_value = SKILL_DEFAULT /datum/antag_skill_setter/proc/initialize_skills(datum/skillset/skillset) skillset.skill_list = base_skill_list.Copy() diff --git a/code/modules/mob/skills/skill_buffs.dm b/code/modules/mob/skills/skill_buffs.dm index bf99aa37ed7d..efe7434f2e6c 100644 --- a/code/modules/mob/skills/skill_buffs.dm +++ b/code/modules/mob/skills/skill_buffs.dm @@ -1,8 +1,10 @@ //The base type is suitable for generic buffs not needing special treatment. /datum/skill_buff var/list/buffs //Format: list(skill_path = amount) - var/limit //How many buffs of this type a skillset can have. null = no limit - var/datum/skillset/skillset //The skillset to which this buff belongs. + /// How many buffs of this type a skillset can have. null = no limit + var/limit + /// The skillset to which this buff belongs. + var/datum/skillset/skillset /datum/skill_buff/New(buff) buffs = buff @@ -17,7 +19,7 @@ //Clamps the buff amounts so that the target stays between SKILL_MIN and SKILL_MAX in all skills. /datum/skill_buff/proc/tailor_buff(mob/target) if(!buffs) - return + return 0 var/list/temp_buffs = buffs.Copy() for(var/skill_type in temp_buffs) var/has_now = target.get_skill_value(skill_type) @@ -28,10 +30,10 @@ /datum/skill_buff/proc/can_buff(mob/target) if(!length(buffs) || !istype(target)) - return //what are we even buffing? + return FALSE //what are we even buffing? if(target.too_many_buffs(type)) - return - return 1 + return FALSE + return TRUE /datum/skill_buff/proc/remove() var/datum/skillset/my_skillset = skillset @@ -78,4 +80,5 @@ /mob/proc/too_many_buffs(datum/skill_buff/buff_type) var/limit = initial(buff_type.limit) if(limit && (length(fetch_buffs_of_type(buff_type, 0)) >= limit)) - return 1 \ No newline at end of file + return TRUE + return FALSE \ No newline at end of file diff --git a/code/modules/mob/skills/skill_verbs.dm b/code/modules/mob/skills/skill_verbs.dm index fc051b139594..fb9e0d13929a 100644 --- a/code/modules/mob/skills/skill_verbs.dm +++ b/code/modules/mob/skills/skill_verbs.dm @@ -12,8 +12,10 @@ /datum/skill_verb var/datum/skillset/skillset //Owner, if any. var/the_verb //The verb to keep track of. Should be a mob verb. - var/cooldown //How long the verb cools down for after use. null = has no cooldown. - var/cooling_down = 0 //Whether it's currently cooling down. + /// The minimum time between uses of the verb. null = no wait between uses. + var/cooldown + /// If TRUE, the verb is currently unavailable. + var/cooling_down = FALSE /datum/skill_verb/Destroy() skillset = null @@ -37,17 +39,17 @@ /datum/skill_verb/proc/should_see_verb() if(cooling_down) - return - return 1 + return FALSE + return TRUE /datum/skill_verb/proc/remove_cooldown() - cooling_down = 0 + cooling_down = FALSE update_verb() /datum/skill_verb/proc/set_cooldown() if(!cooldown) return - cooling_down = 1 + cooling_down = TRUE update_verb() addtimer(CALLBACK(src, PROC_REF(remove_cooldown)), cooldown) /* @@ -59,18 +61,19 @@ Robots and antags can instruct. cooldown = 15 MINUTES /datum/skill_verb/instruct/should_have_verb(datum/skillset/given_skillset) - if(!..()) + . = FALSE + if(!(. = ..())) return if(!isliving(given_skillset.owner)) - return - return 1 + return FALSE + return TRUE /datum/skill_verb/instruct/should_see_verb() - if(!..()) + if(!(. = ..())) return for(var/decl/skill/S in global.using_map.get_available_skills()) if(skillset.owner.skill_check(S.type, SKILL_EXPERT)) - return 1 + return TRUE /mob/proc/can_instruct(mob/living/human/target, var/get_options = FALSE) @@ -127,10 +130,10 @@ Robots and antags can instruct. /datum/skill_buff/motivate/can_buff(mob/target) if(!..()) - return + return FALSE if(!ishuman(target)) - return - return 1 + return FALSE + return TRUE /* The Appraise verb. Used on objects to estimate their value. */ @@ -138,18 +141,18 @@ The Appraise verb. Used on objects to estimate their value. the_verb = /mob/proc/appraise /datum/skill_verb/appraise/should_have_verb(datum/skillset/given_skillset) - if(!..()) + if(!(. = ..())) return if(!isliving(given_skillset.owner)) - return - return 1 + return FALSE + return TRUE /datum/skill_verb/appraise/should_see_verb() - if(!..()) + if(!(. = ..())) return if(!skillset.owner.skill_check(SKILL_FINANCE, SKILL_BASIC)) - return - return 1 + return FALSE + return TRUE /mob/proc/appraise(obj/item as obj in get_equipped_items(1)) set category = "IC" @@ -200,11 +203,11 @@ The Appraise verb. Used on objects to estimate their value. return 1 /datum/skill_verb/noirvision/should_see_verb() - if(!..()) + if(!(. = ..())) return if(!skillset.owner.skill_check(SKILL_FORENSICS, SKILL_PROF)) - return - return 1 + return FALSE + return TRUE /mob/proc/noirvision() set category = "IC" diff --git a/code/modules/modular_computers/computers/modular_computer/interaction.dm b/code/modules/modular_computers/computers/modular_computer/interaction.dm index 4adb8e75dd2e..d4fa1b3bd2e7 100644 --- a/code/modules/modular_computers/computers/modular_computer/interaction.dm +++ b/code/modules/modular_computers/computers/modular_computer/interaction.dm @@ -103,16 +103,17 @@ return ..() -/obj/item/modular_computer/examine(mob/user) +/obj/item/modular_computer/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/datum/extension/assembly/assembly = get_extension(src, /datum/extension/assembly) if(assembly.enabled) - to_chat(user, "The time [stationtime2text()] is displayed in the corner of the screen.") - + . += "The time [stationtime2text()] is displayed in the corner of the screen." var/obj/item/stock_parts/computer/card_slot/card_slot = assembly.get_component(PART_CARD) if(card_slot && card_slot.stored_card) - to_chat(user, "\The [card_slot.stored_card] is inserted into it.") - assembly.examine(user) + . += "\The [card_slot.stored_card] is inserted into it." + var/assembly_string = assembly.examine_assembly(user) + if(assembly_string) + . += assembly_string /obj/item/modular_computer/afterattack(atom/target, mob/user, proximity) . = ..() diff --git a/code/modules/multiz/zmimic/mimic_movable.dm b/code/modules/multiz/zmimic/mimic_movable.dm index 2cbf1c065f4e..7fa5849e54f8 100644 --- a/code/modules/multiz/zmimic/mimic_movable.dm +++ b/code/modules/multiz/zmimic/mimic_movable.dm @@ -155,9 +155,9 @@ to_chat(user, SPAN_NOTICE("You cannot reach \the [src] from here.")) return TRUE -/atom/movable/openspace/mimic/examine(...) +/atom/movable/openspace/mimic/examined_by(mob/user, distance, infix, suffix) SHOULD_CALL_PARENT(FALSE) - . = associated_atom.examine(arglist(args)) // just pass all the args to the copied atom + return associated_atom.examined_by(user, distance, infix, suffix) /atom/movable/openspace/mimic/forceMove(turf/dest) var/atom/old_loc = loc @@ -205,9 +205,9 @@ /atom/movable/openspace/turf_proxy/attack_generic(mob/user as mob) loc.attack_generic(user) -/atom/movable/openspace/turf_proxy/examine(mob/examiner) +/atom/movable/openspace/turf_proxy/examined_by(mob/user, distance, infix, suffix) SHOULD_CALL_PARENT(FALSE) - . = loc.examine(examiner) + return loc.examined_by(user, distance, infix, suffix) // -- TURF MIMIC -- @@ -234,6 +234,6 @@ /atom/movable/openspace/turf_mimic/attack_generic(mob/user as mob) to_chat(user, SPAN_NOTICE("You cannot reach \the [src] from here.")) -/atom/movable/openspace/turf_mimic/examine(mob/examiner) +/atom/movable/openspace/turf_mimic/examined_by(mob/user, distance, infix, suffix) SHOULD_CALL_PARENT(FALSE) - . = delegate.examine(examiner) + return delegate.examined_by(user, distance, infix, suffix) diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm index 0d0256206453..ea9cc195f21f 100644 --- a/code/modules/nano/nanoexternal.dm +++ b/code/modules/nano/nanoexternal.dm @@ -11,7 +11,7 @@ set name = "Reset NanoUI" set category = "OOC" - var/ui_amt = length(mob.open_uis) + var/ui_amt = length(mob.opened_uis) SSnano.close_user_uis(mob) to_chat(src, "[ui_amt] UI windows reset.") @@ -67,5 +67,7 @@ return list() // Not implemented. -// Used by SSnano (/datum/controller/subsystem/processing/nano) to track UIs opened by this mob -/mob/var/list/open_uis +/// Lazy associative list of /nanoui UIs opened on this object, according to ui_key. Not to be confused with opened_uis on mob. +/datum/var/tmp/list/open_uis +/// Used by SSnano (/datum/controller/subsystem/processing/nano) to track UIs opened by this mob. +/mob/var/list/opened_uis diff --git a/code/modules/organs/external/_external.dm b/code/modules/organs/external/_external.dm index a249ef857038..d017fc61971f 100644 --- a/code/modules/organs/external/_external.dm +++ b/code/modules/organs/external/_external.dm @@ -202,7 +202,7 @@ if(owner && burn_damage) owner.custom_pain("Something inside your [src] burns a [severity < 2 ? "bit" : "lot"]!", power * 15) //robotic organs won't feel it anyway - take_external_damage(0, burn_damage, 0, used_weapon = "Hot metal") + take_damage(burn_damage, BURN, inflicter = "Hot metal") check_pain_disarm() if(owner && (limb_flags & ORGAN_FLAG_CAN_STAND)) @@ -226,23 +226,23 @@ return //no eating the limb until everything's been removed return ..() -/obj/item/organ/external/examine(mob/user, distance) +/obj/item/organ/external/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 || isghost(user)) for(var/obj/item/embedded in contents) if(istype(embedded, /obj/item/organ)) continue - to_chat(user, SPAN_DANGER("There is \a [embedded] sticking out of it.")) + . += SPAN_DANGER("There is \a [embedded] sticking out of it.") var/ouchies = get_wounds_desc() if(ouchies != "nothing") - to_chat(user, SPAN_NOTICE("There is [ouchies] visible on it.")) + . += SPAN_NOTICE("There is [ouchies] visible on it.") - return - -/obj/item/organ/external/show_decay_status(mob/user) - ..(user) +/obj/item/organ/external/get_decay_status(mob/user) + . = ..() for(var/obj/item/organ/external/child in children) - child.show_decay_status(user) + var/decay_status = child.get_decay_status(user) + if(decay_status) + . += decay_status /obj/item/organ/external/attackby(obj/item/used_item, mob/user) @@ -770,6 +770,10 @@ This function completely restores a damaged organ to perfect condition. pain = 0 ..() + //check if we've hit max_damage + if((brute_dam + burn_dam) >= max_damage) + die() + //Updating germ levels. Handles organ germ levels and necrosis. /* The INFECTION_LEVEL values defined in setup.dm control the time it takes to reach the different @@ -955,7 +959,6 @@ Note that amputating the affected organ does in fact remove the infection from t clamped |= wound.clamped number_wounds += wound.amount - damage = brute_dam + burn_dam update_damage_ratios() /obj/item/organ/external/proc/update_damage_ratios() @@ -1509,7 +1512,7 @@ Note that amputating the affected organ does in fact remove the infection from t if(LAZYLEN(internal_organs) && prob(brute_dam + force)) owner.custom_pain("A piece of bone in your [encased ? encased : name] moves painfully!", 50, affecting = src) var/obj/item/organ/internal/internal_organ = pick(internal_organs) - internal_organ.take_internal_damage(rand(3,5)) + internal_organ.take_damage(rand(3,5)) /obj/item/organ/external/proc/jointlock(mob/attacker) if(!can_feel_pain()) @@ -1551,7 +1554,7 @@ Note that amputating the affected organ does in fact remove the infection from t else if(status & ORGAN_BROKEN) . += max_delay * 3/8 else if(BP_IS_PROSTHETIC(src)) - . += max_delay * CLAMP01(damage/max_damage) + . += max_delay * CLAMP01((brute_dam + burn_dam) / max_damage) /obj/item/organ/external/proc/is_robotic() return bodytype.is_robotic @@ -1566,7 +1569,7 @@ Note that amputating the affected organ does in fact remove the infection from t /obj/item/organ/external/die() //External organs dying on a dime causes some real issues in combat if(!BP_IS_PROSTHETIC(src) && !BP_IS_CRYSTAL(src)) - var/decay_rate = damage/(max_damage*2) + var/decay_rate = (brute_dam + burn_dam) / (max_damage*2) germ_level += round(rand(decay_rate,decay_rate*1.5)) //So instead, we're going to say the damage is so severe its functions are slowly failing due to the extensive damage else //TODO: more advanced system for synths if(istype(src,/obj/item/organ/external/chest) || istype(src,/obj/item/organ/external/groin)) @@ -1642,3 +1645,5 @@ Note that amputating the affected organ does in fact remove the infection from t _sprite_accessories = null update_icon() +/obj/item/organ/external/is_broken() + return (brute_dam + burn_dam) >= min_broken_damage || ..() diff --git a/code/modules/organs/external/_external_damage.dm b/code/modules/organs/external/_external_damage.dm index 0d185bbe9ae9..ee09b245d2fe 100644 --- a/code/modules/organs/external/_external_damage.dm +++ b/code/modules/organs/external/_external_damage.dm @@ -6,16 +6,13 @@ //Continued damage to vital organs can kill you, and robot organs don't count towards total damage so no need to cap them. return (BP_IS_PROSTHETIC(src) || brute_dam + burn_dam + additional_damage < max_damage * 4) -/obj/item/organ/external/take_general_damage(var/amount, var/silent = FALSE) - take_external_damage(amount) - -/obj/item/organ/external/proc/take_external_damage(brute, burn, damage_flags, used_weapon, override_droplimb) +/obj/item/organ/external/take_damage(damage, damage_type = BRUTE, damage_flags, inflicter, armor_pen = 0, silent, do_update_health, override_droplimb) if(!owner) - return + return ..() - brute = round(brute * get_brute_mod(damage_flags), 0.1) - burn = round(burn * get_burn_mod(damage_flags), 0.1) + var/brute = damage_type == BRUTE ? round(damage * get_brute_mod(damage_flags), 0.1) : 0 + var/burn = damage_type == BURN ? round(damage * get_burn_mod(damage_flags), 0.1) : 0 if((brute <= 0) && (burn <= 0)) return 0 @@ -33,8 +30,8 @@ if(prob(25)) owner.visible_message(SPAN_WARNING("\The [owner]'s crystalline [name] shines with absorbed energy!")) - if(used_weapon) - add_autopsy_data(used_weapon, brute + burn) + if(inflicter) + add_autopsy_data(inflicter, brute + burn) var/spillover = 0 var/pure_brute = brute @@ -54,7 +51,7 @@ var/total_damage = brute_dam + burn_dam + brute + burn + spillover var/threshold = max_damage * get_config_value(/decl/config/num/health_organ_health_multiplier) if(total_damage > threshold) - if(attempt_dismemberment(pure_brute, burn, sharp, edge, used_weapon, spillover, total_damage > threshold*6, override_droplimb = override_droplimb)) + if(attempt_dismemberment(pure_brute, burn, sharp, edge, inflicter, spillover, total_damage > threshold*6, override_droplimb = override_droplimb)) return //blunt damage is gud at fracturing @@ -114,15 +111,16 @@ // sync the organ's damage with its wounds update_damages() - owner.update_health() + if(do_update_health) + owner.update_health() if(status & ORGAN_BLEEDING) owner.update_bandages() if(owner && update_damstate()) owner.update_damage_overlays() - if(created_wound && isobj(used_weapon)) - var/obj/O = used_weapon + if(created_wound && isobj(inflicter)) + var/obj/O = inflicter O.after_wounding(src, created_wound) return created_wound @@ -153,10 +151,10 @@ var/list/victims = list() var/organ_hit_chance = 0 - for(var/obj/item/organ/internal/I in internal_organs) - if(I.damage < I.max_damage) - victims[I] = I.relative_size - organ_hit_chance += I.relative_size + for(var/obj/item/organ/internal/organ in internal_organs) + if(organ.get_organ_damage() < organ.max_damage) + victims[organ] = organ.relative_size + organ_hit_chance += organ.relative_size //No damageable organs if(!length(victims)) @@ -171,7 +169,7 @@ if(prob(organ_hit_chance)) var/obj/item/organ/internal/victim = pickweight(victims) damage_amt -= max(damage_amt*victim.damage_reduction, 0) - victim.take_internal_damage(damage_amt) + victim.take_damage(damage_amt) return TRUE /obj/item/organ/external/heal_damage(brute, burn, internal = 0, robo_repair = 0) @@ -253,8 +251,8 @@ else if(is_dislocated()) lasting_pain += 5 var/tox_dam = 0 - for(var/obj/item/organ/internal/I in internal_organs) - tox_dam += I.getToxLoss() + for(var/obj/item/organ/internal/organ in internal_organs) + tox_dam += organ.getToxLoss() return pain + lasting_pain + 0.7 * brute_dam + 0.8 * burn_dam + 0.3 * tox_dam + 0.5 * get_genetic_damage() /obj/item/organ/external/proc/remove_pain(var/amount) diff --git a/code/modules/organs/external/head.dm b/code/modules/organs/external/head.dm index b16d8919e296..e2d32062fb37 100644 --- a/code/modules/organs/external/head.dm +++ b/code/modules/organs/external/head.dm @@ -54,11 +54,10 @@ /obj/item/organ/external/head/get_manual_dexterity() . = DEXTERITY_SIMPLE_MACHINES | DEXTERITY_HOLD_ITEM | DEXTERITY_EQUIP_ITEM | DEXTERITY_KEYBOARDS | DEXTERITY_TOUCHSCREENS -/obj/item/organ/external/head/examine(mob/user) +/obj/item/organ/external/head/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(forehead_graffiti && graffiti_style) - to_chat(user, "It has \"[forehead_graffiti]\" written on it in [graffiti_style]!") + . += SPAN_NOTICE("It has \"[forehead_graffiti]\" written on it in [graffiti_style]!") /obj/item/organ/external/head/proc/write_on(var/mob/penman, var/style) var/head_name = name @@ -99,7 +98,7 @@ . = ..() can_intake_reagents = !(bodytype.body_flags & BODY_FLAG_NO_EAT) -/obj/item/organ/external/head/take_external_damage(brute, burn, damage_flags, used_weapon, override_droplimb) +/obj/item/organ/external/head/take_damage(damage, damage_type, damage_flags, inflicter, armor_pen, silent, do_update_health, override_droplimb) . = ..() if (!(status & ORGAN_DISFIGURED)) if (brute_dam > 40) diff --git a/code/modules/organs/internal/_internal.dm b/code/modules/organs/internal/_internal.dm index a3ac98d48e29..8c7939f7ed43 100644 --- a/code/modules/organs/internal/_internal.dm +++ b/code/modules/organs/internal/_internal.dm @@ -27,6 +27,9 @@ /// Whether or not we should try to transfer a brainmob when removed or replaced in a mob. var/transfer_brainmob_with_organ = FALSE + // Current damage to the organ + VAR_PRIVATE/_organ_damage = 0 + /obj/item/organ/internal/Initialize(mapload, material_key, datum/mob_snapshot/supplied_appearance, decl/bodytype/new_bodytype) if(!alive_icon) alive_icon = initial(icon_state) @@ -101,14 +104,14 @@ /obj/item/organ/internal/proc/getToxLoss() if(BP_IS_PROSTHETIC(src)) - return damage * 0.5 - return damage + return _organ_damage * 0.5 + return _organ_damage /obj/item/organ/internal/proc/bruise() - damage = max(damage, min_bruised_damage) + _organ_damage = max(_organ_damage, min_bruised_damage) /obj/item/organ/internal/proc/is_bruised() - return damage >= min_bruised_damage + return _organ_damage >= min_bruised_damage /obj/item/organ/internal/set_max_damage(var/ndamage) . = ..() @@ -117,34 +120,34 @@ if(damage_threshold_count > 0) damage_threshold_value = round(max_damage / damage_threshold_count) -/obj/item/organ/internal/take_general_damage(var/amount, var/silent = FALSE) - take_internal_damage(amount, silent) +/obj/item/organ/internal/take_damage(damage, damage_type = BRUTE, damage_flags, inflicter, armor_pen = 0, silent, do_update_health) + + if(!owner) + return ..() -/obj/item/organ/internal/proc/take_internal_damage(amount, var/silent=0) if(BP_IS_PROSTHETIC(src)) - damage = clamp(src.damage + (amount * 0.8), 0, max_damage) + _organ_damage = clamp(_organ_damage + (damage * 0.8), 0, max_damage) else - damage = clamp(src.damage + amount, 0, max_damage) - - //only show this if the organ is not robotic - if(owner && can_feel_pain() && parent_organ && (amount > 5 || prob(10))) - var/obj/item/organ/external/parent = GET_EXTERNAL_ORGAN(owner, parent_organ) - if(parent && !silent) - var/degree = "" - if(is_bruised()) - degree = " a lot" - if(damage < 5) - degree = " a bit" - owner.custom_pain("Something inside your [parent.name] hurts[degree].", amount, affecting = parent) + _organ_damage = clamp(_organ_damage + damage, 0, max_damage) + + if(can_feel_pain() && parent_organ && (damage > 5 || prob(10))) + var/obj/item/organ/external/parent = GET_EXTERNAL_ORGAN(owner, parent_organ) + if(parent && !silent) + var/degree = "" + if(is_bruised()) + degree = " a lot" + if(damage < 5) + degree = " a bit" + owner.custom_pain("Something inside your [parent.name] hurts[degree].", damage, affecting = parent) /obj/item/organ/internal/proc/get_visible_state() - if(damage > max_damage) + if(_organ_damage > max_damage) . = "bits and pieces of a destroyed " else if(is_broken()) . = "broken " else if(is_bruised()) . = "badly damaged " - else if(damage > 5) + else if(_organ_damage > 5) . = "damaged " if(status & ORGAN_DEAD) if(can_recover()) @@ -160,7 +163,10 @@ /obj/item/organ/internal/Process() SHOULD_CALL_PARENT(TRUE) ..() - if(owner && damage && !(status & ORGAN_DEAD)) + //check if we've hit max_damage + if(_organ_damage >= max_damage) + die() + if(owner && _organ_damage && !(status & ORGAN_DEAD)) handle_damage_effects() /obj/item/organ/internal/proc/has_limited_healing() @@ -177,18 +183,18 @@ // We clamp/round here so that we don't accidentally heal past the threshold and // cheat our way into a full second threshold of healing. - damage = clamp(damage - max(0, get_organ_heal_amount()), min_heal_val, absolute_max_damage) + _organ_damage = clamp(_organ_damage - max(0, get_organ_heal_amount()), min_heal_val, absolute_max_damage) // If we're within 1 damage of the nearest threshold (such as 0), round us down. // This should be removed when float-aware modulo comes in in 515, but for now is needed // as modulo only deals with integers, but organ regeneration is <= 0.3 by default. - if(!(damage % damage_threshold_value)) - damage = round(damage) + if(!(_organ_damage % damage_threshold_value)) + _organ_damage = round(_organ_damage) /obj/item/organ/internal/proc/get_organ_heal_amount() - if(damage >= min_broken_damage) + if(_organ_damage >= min_broken_damage) return 0.1 - if(damage >= min_bruised_damage) + if(_organ_damage >= min_bruised_damage) return 0.2 return 0.3 @@ -206,19 +212,19 @@ // - do not have a max cutoff threshold (point at which no further regeneration will occur) // - are not past our max cutoff threshold // - are dosed with stabilizer (ignores max cutoff threshold) - if((damage % damage_threshold_value) && (!max_regeneration_cutoff_threshold || !past_damage_threshold(max_regeneration_cutoff_threshold) || GET_CHEMICAL_EFFECT(owner, CE_STABLE))) + if((_organ_damage % damage_threshold_value) && (!max_regeneration_cutoff_threshold || !past_damage_threshold(max_regeneration_cutoff_threshold) || GET_CHEMICAL_EFFECT(owner, CE_STABLE))) return TRUE return FALSE /obj/item/organ/internal/proc/surgical_fix(mob/user) - if(damage > min_broken_damage) - var/scarring = damage/max_damage + if(_organ_damage > min_broken_damage) + var/scarring = _organ_damage/max_damage scarring = 1 - 0.3 * scarring ** 2 // Between ~15 and 30 percent loss var/new_max_dam = floor(scarring * max_damage) if(new_max_dam < max_damage) to_chat(user, SPAN_WARNING("Not every part of [src] could be saved; some dead tissue had to be removed, making it more susceptible to damage in the future.")) set_max_damage(new_max_dam) - heal_damage(damage) + heal_damage(_organ_damage) /obj/item/organ/internal/proc/get_scarring_level() . = (absolute_max_damage - max_damage)/absolute_max_damage @@ -234,11 +240,11 @@ return switch (severity) if (1) - take_internal_damage(16) + take_damage(16) if (2) - take_internal_damage(9) + take_damage(9) if (3) - take_internal_damage(6.5) + take_damage(6.5) /obj/item/organ/internal/on_update_icon() . = ..() @@ -252,7 +258,7 @@ // Damage recovery procs! Very exciting. /obj/item/organ/internal/proc/get_current_damage_threshold() - return damage_threshold_value > 0 ? round(damage / damage_threshold_value) : INFINITY + return damage_threshold_value > 0 ? round(_organ_damage / damage_threshold_value) : INFINITY /obj/item/organ/internal/proc/past_damage_threshold(var/threshold) return (get_current_damage_threshold() > threshold) @@ -295,3 +301,30 @@ /obj/item/organ/internal/preserve_in_cryopod(var/obj/machinery/cryopod/pod) var/mob/living/brainmob = get_brainmob() return brainmob?.key + +/obj/item/organ/internal/proc/set_organ_damage(amt) + _organ_damage = amt + +/obj/item/organ/internal/proc/adjust_organ_damage(amt) + _organ_damage = clamp(_organ_damage + amt, 0, max_damage) + +/obj/item/organ/internal/proc/get_organ_damage() + return _organ_damage // TODO: get_max_health() - current_health, unify organ/item damage handling. + +/obj/item/organ/internal/is_broken() + return _organ_damage >= min_broken_damage || ..() + +/obj/item/organ/internal/die() + _organ_damage = max_damage + return ..() + +/obj/item/organ/internal/rejuvenate(var/ignore_organ_traits) + _organ_damage = 0 + return ..() + +/obj/item/organ/internal/heal_damage(amount) + if(can_recover()) + _organ_damage = clamp(_organ_damage - round(amount, 0.1), 0, max_damage) + if(owner) + owner.update_health() + diff --git a/code/modules/organs/internal/appendix.dm b/code/modules/organs/internal/appendix.dm index f0d1c8f6af6b..8f4c372ea7cf 100644 --- a/code/modules/organs/internal/appendix.dm +++ b/code/modules/organs/internal/appendix.dm @@ -22,7 +22,7 @@ owner.visible_message("\The [owner] winces slightly.") if(inflamed > 200) if(prob(3)) - take_internal_damage(0.1) + take_damage(0.1) if(owner.can_feel_pain()) owner.visible_message("\The [owner] winces painfully.") owner.take_damage(1, TOX) diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm index c4980c3a3034..0a83423de539 100644 --- a/code/modules/organs/internal/brain.dm +++ b/code/modules/organs/internal/brain.dm @@ -58,16 +58,19 @@ QDEL_NULL(_brainmob) . = ..() -/obj/item/organ/internal/brain/examine(mob/user, var/distance) +/obj/item/organ/internal/brain/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - show_brain_status(user) + var/brain_status = get_brain_status(user) + if(brain_status) + . += brain_status -/obj/item/organ/internal/brain/proc/show_brain_status(mob/user) +/obj/item/organ/internal/brain/proc/get_brain_status(mob/user) + . = list() if(istype(_brainmob) && _brainmob?.client) //if thar be a brain inside... the brain. - to_chat(user, "You can feel the small spark of life still left in this one.") + . += "You can feel the small spark of life still left in this one." else - to_chat(user, "This one seems particularly lifeless. Perhaps it will regain some of its luster later.") + . += "This one seems particularly lifeless. Perhaps it will regain some of its luster later." /obj/item/organ/internal/brain/do_install(mob/living/target, affected, in_place, update_icon, detached) if(!(. = ..())) @@ -99,7 +102,7 @@ alert(owner, "You have taken massive brain damage! You will not be able to remember the events leading up to your injury.", "Brain Damaged") /obj/item/organ/internal/brain/organ_can_heal() - return (damage && owner && GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN) > 0) || ..() + return (_organ_damage && owner && GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN) > 0) || ..() /obj/item/organ/internal/brain/has_limited_healing() return (!owner || GET_CHEMICAL_EFFECT(owner, CE_BRAIN_REGEN) <= 0) && ..() @@ -112,7 +115,7 @@ /obj/item/organ/internal/brain/Process() if(owner) - if(damage < (max_damage / 4)) + if(_organ_damage < (max_damage / 4)) should_announce_brain_damage = TRUE handle_disabilities() @@ -140,12 +143,12 @@ to_chat(owner, "You feel [pick("dizzy","woozy","faint")]...") damprob = stability_effect ? 30 : 60 if(!past_damage_threshold(2) && prob(damprob)) - take_internal_damage(1) + take_damage(1) if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) SET_STATUS_MAX(owner, STAT_BLURRY, 6) damprob = stability_effect ? 40 : 80 if(!past_damage_threshold(4) && prob(damprob)) - take_internal_damage(1) + take_damage(1) if(!HAS_STATUS(owner, STAT_PARA) && prob(10)) SET_STATUS_MAX(owner, STAT_PARA, rand(1,3)) to_chat(owner, "You feel extremely [pick("dizzy","woozy","faint")]...") @@ -153,7 +156,7 @@ SET_STATUS_MAX(owner, STAT_BLURRY, 6) damprob = stability_effect ? 60 : 100 if(!past_damage_threshold(6) && prob(damprob)) - take_internal_damage(1) + take_damage(1) if(!HAS_STATUS(owner, STAT_PARA) && prob(15)) SET_STATUS_MAX(owner, STAT_PARA, rand(3,5)) to_chat(owner, "You feel extremely [pick("dizzy","woozy","faint")]...") @@ -161,14 +164,14 @@ SET_STATUS_MAX(owner, STAT_BLURRY, 6) damprob = stability_effect ? 80 : 100 if(prob(damprob)) - take_internal_damage(1) + take_damage(1) if(prob(damprob)) - take_internal_damage(1) + take_damage(1) ..() -/obj/item/organ/internal/brain/take_internal_damage(var/damage, var/silent) - ..() - if(damage >= 10) //This probably won't be triggered by oxyloss or mercury. Probably. +/obj/item/organ/internal/brain/take_damage(damage, damage_type = BRUTE, damage_flags, inflicter, armor_pen = 0, silent, do_update_health) + . = ..() + if(owner && damage >= 10) //This probably won't be triggered by oxyloss or mercury. Probably. var/damage_secondary = damage * 0.20 owner.flash_eyes() SET_STATUS_MAX(owner, STAT_BLURRY, damage_secondary) @@ -203,7 +206,7 @@ /obj/item/organ/internal/brain/handle_damage_effects() ..() - if(damage >= round(max_damage / 2) && should_announce_brain_damage) + if(_organ_damage >= round(max_damage / 2) && should_announce_brain_damage) handle_severe_damage() if(!BP_IS_PROSTHETIC(src) && prob(1)) @@ -212,10 +215,10 @@ to_chat(owner, "It becomes hard to see for some reason.") owner.set_status(STAT_BLURRY, 10) var/held = owner.get_active_held_item() - if(damage >= 0.5*max_damage && prob(1) && held) + if(_organ_damage >= 0.5*max_damage && prob(1) && held) to_chat(owner, "Your hand won't respond properly, and you drop what you are holding!") owner.try_unequip(held) - if(damage >= 0.6*max_damage) + if(_organ_damage >= 0.6*max_damage) SET_STATUS_MAX(owner, STAT_SLUR, 2) if(is_broken()) if(!owner.current_posture.prone) @@ -226,8 +229,8 @@ var/blood_volume = owner.get_blood_oxygenation() if(blood_volume < BLOOD_VOLUME_SURVIVE) to_chat(user, SPAN_DANGER("Parts of \the [src] didn't survive the procedure due to lack of air supply!")) - set_max_damage(floor(max_damage - 0.25*damage)) - heal_damage(damage) + set_max_damage(floor(max_damage - 0.25*_organ_damage)) + heal_damage(_organ_damage) /obj/item/organ/internal/brain/die() if(istype(_brainmob) && _brainmob.stat != DEAD) diff --git a/code/modules/organs/internal/brain_computer.dm b/code/modules/organs/internal/brain_computer.dm index 919b10e056d7..3a3d946954fd 100644 --- a/code/modules/organs/internal/brain_computer.dm +++ b/code/modules/organs/internal/brain_computer.dm @@ -74,19 +74,20 @@ if(response == "Yes" && brainmob && !brainmob?.key && G.assess_candidate(user)) G.transfer_personality(user, brainmob) -/obj/item/organ/internal/brain/robotic/show_brain_status(mob/user) +/obj/item/organ/internal/brain/robotic/get_brain_status(mob/user) + . = list() var/mob/living/brainmob = get_brainmob() if(brainmob?.key) switch(brainmob.stat) if(CONSCIOUS) if(!brainmob.client) - to_chat(user, SPAN_WARNING("It appears to be in stand-by mode.")) + . += SPAN_WARNING("It appears to be in stand-by mode.") if(UNCONSCIOUS) - to_chat(user, SPAN_WARNING("It doesn't seem to be responsive.")) + . += SPAN_WARNING("It doesn't seem to be responsive.") if(DEAD) - to_chat(user, SPAN_WARNING("It appears to be completely inactive.")) + . += SPAN_WARNING("It appears to be completely inactive.") else - to_chat(user, SPAN_WARNING("It appears to be completely inactive.")) + . += SPAN_WARNING("It appears to be completely inactive.") /obj/item/organ/internal/brain/robotic/get_synthetic_owner_name() return "Robot" diff --git a/code/modules/organs/internal/cell.dm b/code/modules/organs/internal/cell.dm index fbae8b33d6be..4087194c2a6b 100644 --- a/code/modules/organs/internal/cell.dm +++ b/code/modules/organs/internal/cell.dm @@ -25,7 +25,7 @@ return 0 if(status & ORGAN_DEAD) return 0 - return round(cell.charge*(1 - damage/max_damage)) + return round(cell.charge*(1 - _organ_damage/max_damage)) /obj/item/organ/internal/cell/proc/checked_use(var/amount) if(!is_usable()) @@ -38,7 +38,7 @@ return cell && cell.use(amount) /obj/item/organ/internal/cell/proc/get_power_drain() - var/damage_factor = 1 + 10 * damage/max_damage + var/damage_factor = 1 + 10 * _organ_damage/max_damage return servo_cost * damage_factor /obj/item/organ/internal/cell/Process() diff --git a/code/modules/organs/internal/eyes.dm b/code/modules/organs/internal/eyes.dm index 7dbc75053e6a..94e7e27418e3 100644 --- a/code/modules/organs/internal/eyes.dm +++ b/code/modules/organs/internal/eyes.dm @@ -75,7 +75,7 @@ if(istype(head)) head._icon_cache_key = null -/obj/item/organ/internal/eyes/take_internal_damage(amount, var/silent=0) +/obj/item/organ/internal/eyes/take_damage(damage, damage_type = BRUTE, damage_flags, inflicter, armor_pen = 0, silent, do_update_health) var/oldbroken = is_broken() . = ..() if(is_broken() && !oldbroken && owner && !owner.stat) diff --git a/code/modules/organs/internal/heart.dm b/code/modules/organs/internal/heart.dm index 2cc637a076cf..8930a70e6b96 100644 --- a/code/modules/organs/internal/heart.dm +++ b/code/modules/organs/internal/heart.dm @@ -28,9 +28,9 @@ if(pulse) handle_heartbeat() if(pulse == PULSE_2FAST && prob(1)) - take_internal_damage(0.5) + take_damage(0.5) if(pulse == PULSE_THREADY && prob(5)) - take_internal_damage(0.5) + take_damage(0.5) handle_blood() ..() @@ -47,7 +47,7 @@ if(pulse_mod > 2 && !is_stable) var/damage_chance = (pulse_mod - 2) ** 2 if(prob(damage_chance)) - take_internal_damage(0.5) + take_damage(0.5) // Now pulse mod is impacted by shock stage and other things too if(owner.shock_stage > 30) diff --git a/code/modules/organs/internal/liver.dm b/code/modules/organs/internal/liver.dm index bc7820956760..c672c1c121ae 100644 --- a/code/modules/organs/internal/liver.dm +++ b/code/modules/organs/internal/liver.dm @@ -29,7 +29,7 @@ owner.vomit() //Detox can heal small amounts of damage - if (damage < max_damage && !GET_CHEMICAL_EFFECT(owner, CE_TOXIN)) + if (_organ_damage < max_damage && !GET_CHEMICAL_EFFECT(owner, CE_TOXIN)) heal_damage(0.2 * GET_CHEMICAL_EFFECT(owner, CE_ANTITOX)) var/alco = GET_CHEMICAL_EFFECT(owner, CE_ALCOHOL) @@ -51,7 +51,7 @@ owner.take_damage(0.5 * max(2 - filter_effect, TOX, 0) * (alcotox + 0.5 * alco)) if(alcotox) - take_internal_damage(alcotox, prob(90)) // Chance to warn them + take_damage(alcotox, prob(90)) // Chance to warn them //Blood regeneration if there is some space owner.regenerate_blood(0.1 + GET_CHEMICAL_EFFECT(owner, CE_BLOODRESTORE)) diff --git a/code/modules/organs/internal/lungs.dm b/code/modules/organs/internal/lungs.dm index 2cfdb5d8fa1e..dc919a92490c 100644 --- a/code/modules/organs/internal/lungs.dm +++ b/code/modules/organs/internal/lungs.dm @@ -170,7 +170,7 @@ var/safe_pressure_min = min_breath_pressure // Minimum safe partial pressure of breathable gas in kPa // Lung damage increases the minimum safe pressure. - safe_pressure_min *= 1 + rand(1,4) * damage/max_damage + safe_pressure_min *= 1 + rand(1,4) * _organ_damage/max_damage var/breatheffect = GET_CHEMICAL_EFFECT(owner, CE_BREATHLOSS) if(!forced && breatheffect && !GET_CHEMICAL_EFFECT(owner, CE_STABLE)) //opiates are bad mmkay @@ -263,7 +263,7 @@ else owner.emote(pick(/decl/emote/visible/shiver,/decl/emote/visible/twitch)) - if(damage || GET_CHEMICAL_EFFECT(owner, CE_BREATHLOSS) || world.time > last_successful_breath + 2 MINUTES) + if(_organ_damage || GET_CHEMICAL_EFFECT(owner, CE_BREATHLOSS) || world.time > last_successful_breath + 2 MINUTES) owner.take_damage(HUMAN_MAX_OXYLOSS*breath_fail_ratio, OXY) SET_HUD_ALERT_MAX(owner, HUD_OXY, 2) @@ -274,37 +274,37 @@ var/cold_1 = bodytype.get_body_temperature_threshold(COLD_LEVEL_1) var/heat_1 = bodytype.get_body_temperature_threshold(HEAT_LEVEL_1) if((breath.temperature < cold_1 || breath.temperature > heat_1) && !owner.has_genetic_condition(GENE_COND_COLD_RESISTANCE)) - var/damage = 0 + var/breath_damage = 0 if(breath.temperature <= cold_1) if(prob(20)) to_chat(owner, "You feel your face freezing and icicles forming in your lungs!") if(breath.temperature < bodytype.get_body_temperature_threshold(COLD_LEVEL_3)) - damage = COLD_GAS_DAMAGE_LEVEL_3 + breath_damage = COLD_GAS_DAMAGE_LEVEL_3 else if(breath.temperature < bodytype.get_body_temperature_threshold(COLD_LEVEL_2)) - damage = COLD_GAS_DAMAGE_LEVEL_2 + breath_damage = COLD_GAS_DAMAGE_LEVEL_2 else - damage = COLD_GAS_DAMAGE_LEVEL_1 + breath_damage = COLD_GAS_DAMAGE_LEVEL_1 if(prob(20)) - owner.apply_damage(damage, BURN, BP_HEAD, used_weapon = "Excessive Cold") + owner.apply_damage(breath_damage, BURN, BP_HEAD, used_weapon = "Excessive Cold") else - src.damage += damage + _organ_damage += breath_damage SET_HUD_ALERT(owner, HUD_FIRE, 1) else if(breath.temperature >= heat_1) if(prob(20)) to_chat(owner, "You feel your face burning and a searing heat in your lungs!") if(breath.temperature < bodytype.get_body_temperature_threshold(HEAT_LEVEL_2)) - damage = HEAT_GAS_DAMAGE_LEVEL_1 + breath_damage = HEAT_GAS_DAMAGE_LEVEL_1 else if(breath.temperature < bodytype.get_body_temperature_threshold(HEAT_LEVEL_3)) - damage = HEAT_GAS_DAMAGE_LEVEL_2 + breath_damage = HEAT_GAS_DAMAGE_LEVEL_2 else - damage = HEAT_GAS_DAMAGE_LEVEL_3 + breath_damage = HEAT_GAS_DAMAGE_LEVEL_3 if(prob(20)) - owner.apply_damage(damage, BURN, BP_HEAD, used_weapon = "Excessive Heat") + owner.apply_damage(breath_damage, BURN, BP_HEAD, used_weapon = "Excessive Heat") else - src.damage += damage + _organ_damage += breath_damage SET_HUD_ALERT(owner, HUD_FIRE, 2) //breathing in hot/cold air also heats/cools you a bit diff --git a/code/modules/organs/internal/stomach.dm b/code/modules/organs/internal/stomach.dm index cf870f3b64b0..d8abe4894167 100644 --- a/code/modules/organs/internal/stomach.dm +++ b/code/modules/organs/internal/stomach.dm @@ -94,7 +94,7 @@ if(owner) var/functioning = is_usable() - if(damage >= min_bruised_damage && prob((damage / max_damage) * 100)) + if(_organ_damage >= min_bruised_damage && prob((_organ_damage / max_damage) * 100)) functioning = FALSE if(functioning) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 9fb1bec56819..d60a8aa9cae3 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -27,7 +27,6 @@ var/meat_name // Taken from first owner. // Damage vars. - var/damage = 0 // Current damage to the organ var/min_broken_damage = 30 // Damage before becoming broken var/max_damage = 30 // Damage cap, including scarring var/absolute_max_damage = 0 // Lifetime damage cap, ignoring scarring. @@ -64,7 +63,7 @@ return (owner && loc == owner && owner == user) /obj/item/organ/proc/is_broken() - return (damage >= min_broken_damage || (status & ORGAN_CUT_AWAY) || (status & ORGAN_BROKEN) || (status & ORGAN_DEAD)) + return (status & ORGAN_CUT_AWAY) || (status & ORGAN_BROKEN) || (status & ORGAN_DEAD) //Third argument may be a dna datum; if null will be set to holder's dna. /obj/item/organ/Initialize(mapload, material_key, datum/mob_snapshot/supplied_appearance) @@ -197,7 +196,6 @@ reset_status() /obj/item/organ/proc/die() - damage = max_damage status |= ORGAN_DEAD STOP_PROCESSING(SSobj, src) QDEL_NULL_LIST(ailments) @@ -227,7 +225,7 @@ blood_splatter(get_turf(src), src, 1) remove_any_reagents(0.1) if(get_config_value(/decl/config/toggle/health_organs_decay)) - take_general_damage(rand(1,3)) + take_damage(rand(1,3)) germ_level += rand(2,6) if(germ_level >= INFECTION_LEVEL_TWO) germ_level += rand(2,6) @@ -244,10 +242,6 @@ for(var/datum/ailment/ailment in ailments) handle_ailment(ailment) - //check if we've hit max_damage - if(damage >= max_damage) - die() - /obj/item/organ/proc/handle_ailment(var/datum/ailment/ailment) if(ailment.treated_by_reagent_type) for(var/datum/reagents/source as anything in owner.get_metabolizing_reagent_holders()) @@ -272,13 +266,17 @@ return TRUE return FALSE -/obj/item/organ/examine(mob/user) - . = ..(user) - show_decay_status(user) +/obj/item/organ/get_examine_strings(mob/user, distance, infix, suffix) + . = ..() + var/decay_status = get_decay_status(user) + if(decay_status) + . += decay_status -/obj/item/organ/proc/show_decay_status(mob/user) +/obj/item/organ/proc/get_decay_status(mob/user) + SHOULD_CALL_PARENT(TRUE) + . = list() if(status & ORGAN_DEAD) - to_chat(user, "The decay has set into \the [src].") + . += SPAN_WARNING("Decay has set into \the [src].") // TODO: bodytemp rework that handles this with better respect to // individual organs vs. expected body temperature for other organs. @@ -309,7 +307,7 @@ parent.germ_level++ if (prob(3)) //about once every 30 seconds - take_general_damage(1,silent=prob(30)) + take_damage(1, silent =prob(30)) /obj/item/organ/proc/handle_rejection() // Process unsuitable transplants. TODO: consider some kind of @@ -347,7 +345,6 @@ SHOULD_CALL_PARENT(TRUE) if(!owner) PRINT_STACK_TRACE("rejuvenate() called on organ of type [type] with no owner.") - damage = 0 reset_status() QDEL_NULL_LIST(ailments) if(!ignore_organ_traits) @@ -381,14 +378,13 @@ germ_level -= round(2 * antibiotics) germ_level = max(0, germ_level) -/obj/item/organ/proc/take_general_damage(var/amount, var/silent = FALSE) - CRASH("Not Implemented") +// Bypass the atom damage system when inside an owner, as organs implement their own health handling etc. +/obj/item/organ/take_damage(damage, damage_type = BRUTE, damage_flags, inflicter, armor_pen = 0, silent, do_update_health) + if(!owner) + return ..() /obj/item/organ/proc/heal_damage(amount) - if(can_recover()) - damage = clamp(damage - round(amount, 0.1), 0, max_damage) - if(owner) - owner.update_health() + return /obj/item/organ/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) if(BP_IS_PROSTHETIC(src) || !istype(target) || !istype(user) || (user != target && user.check_intent(I_FLAG_HELP))) diff --git a/code/modules/organs/organ_prosthetics.dm b/code/modules/organs/organ_prosthetics.dm index a107c79e8104..dc864aa098da 100644 --- a/code/modules/organs/organ_prosthetics.dm +++ b/code/modules/organs/organ_prosthetics.dm @@ -28,6 +28,7 @@ // Note that this proc is checking if the organ can be attached -to-, not attached itself. /obj/item/organ/external/proc/can_attach_modular_limb_here(var/mob/living/human/user) var/list/limb_data = user?.get_bodytype()?.has_limbs[organ_tag] + . = FALSE if(islist(limb_data) && limb_data["has_children"] > 0) . = (LAZYLEN(children) < limb_data["has_children"]) @@ -48,7 +49,7 @@ // Checks if an organ (or the parent of one) is in a fit state for modular limb stuff to happen. /obj/item/organ/external/proc/check_modular_limb_damage(var/mob/living/human/user) - . = damage >= min_broken_damage || (status & ORGAN_BROKEN) // can't use is_broken() as the limb has ORGAN_CUT_AWAY + . = (brute_dam + burn_dam) >= min_broken_damage || (status & ORGAN_BROKEN) // can't use is_broken() as the limb has ORGAN_CUT_AWAY // Human mob procs: // Checks the organ list for limbs meeting a predicate. Way overengineered for such a limited use diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index 141643e41cc5..4c84995b0860 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -93,16 +93,16 @@ msg = "OH GOD! Your [damaged_organ.name] is [burning ? "on fire" : "hurting terribly"]!" custom_pain(msg, maxdam, prob(10), damaged_organ, TRUE) // Damage to internal organs hurts a lot. - for(var/obj/item/organ/internal/I in get_internal_organs()) - if(prob(1) && !((I.status & ORGAN_DEAD) || BP_IS_PROSTHETIC(I)) && I.damage > 5) - var/obj/item/organ/external/parent = GET_EXTERNAL_ORGAN(src, I.parent_organ) + for(var/obj/item/organ/internal/organ in get_internal_organs()) + if(prob(1) && !((organ.status & ORGAN_DEAD) || BP_IS_PROSTHETIC(organ)) && organ.get_organ_damage() > 5) + var/obj/item/organ/external/parent = GET_EXTERNAL_ORGAN(src, organ.parent_organ) if(parent) var/pain = 10 var/message = "You feel a dull pain in your [parent.name]" - if(I.is_bruised()) + if(organ.is_bruised()) pain = 25 message = "You feel a pain in your [parent.name]" - if(I.is_broken()) + if(organ.is_broken()) pain = 50 message = "You feel a sharp pain in your [parent.name]" src.custom_pain(message, pain, affecting = parent) diff --git a/code/modules/overmap/contacts/tracker.dm b/code/modules/overmap/contacts/tracker.dm index feb89fe461ff..f8fbff10d09f 100644 --- a/code/modules/overmap/contacts/tracker.dm +++ b/code/modules/overmap/contacts/tracker.dm @@ -23,6 +23,6 @@ . = ..() icon_state = enabled ? "enabled" : "disabled" -/obj/item/ship_tracker/examine(var/mob/user) +/obj/item/ship_tracker/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It appears to be [enabled ? "enabled" : "disabled"]") \ No newline at end of file + . += "It appears to be [enabled ? "enabled" : "disabled"]" diff --git a/code/modules/overmap/disperser/disperser.dm b/code/modules/overmap/disperser/disperser.dm index 77110bc3f4e5..4b8660f0c0ee 100644 --- a/code/modules/overmap/disperser/disperser.dm +++ b/code/modules/overmap/disperser/disperser.dm @@ -7,10 +7,10 @@ anchored = TRUE construct_state = /decl/machine_construction/default/panel_closed -/obj/machinery/disperser/examine(mob/user) +/obj/machinery/disperser/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(panel_open) - to_chat(user, "The maintenance panel is open.") + . += "The maintenance panel is open." /obj/machinery/disperser/attackby(obj/item/I, mob/user) if(IS_WRENCH(I)) diff --git a/code/modules/overmap/ftl_shunt/core.dm b/code/modules/overmap/ftl_shunt/core.dm index c497e066fdab..a6e6e567046e 100644 --- a/code/modules/overmap/ftl_shunt/core.dm +++ b/code/modules/overmap/ftl_shunt/core.dm @@ -98,19 +98,19 @@ animate(S, alpha = 255, time = 5.9 SECONDS) add_overlay(S) -/obj/machinery/ftl_shunt/core/examine(mob/user) +/obj/machinery/ftl_shunt/core/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(sabotaged) if(user.skill_check(SKILL_ENGINES, SKILL_ADEPT)) switch(sabotaged) if(SHUNT_SABOTAGE_MINOR) - to_chat(user, SPAN_WARNING("It looks like it's been tampered with in some way, and the accelerator vanes seem out of place.")) + . += SPAN_WARNING("It looks like it's been tampered with in some way, and the accelerator vanes seem out of place.") if(SHUNT_SABOTAGE_MAJOR) - to_chat(user, SPAN_WARNING("Light behaves oddly around the core of [src], and it looks to have been tampered with! The vanes are definitely out of place.")) + . += SPAN_WARNING("Light behaves oddly around the core of [src], and it looks to have been tampered with! The vanes are definitely out of place.") if(SHUNT_SABOTAGE_CRITICAL) - to_chat(user, SPAN_DANGER("Light bends around the core of [src] in a manner that eerily reminds you of a singularity... the vanes look completely misaligned!")) + . += SPAN_DANGER("Light bends around the core of [src] in a manner that eerily reminds you of a singularity... the vanes look completely misaligned!") else - to_chat(user, SPAN_WARNING("It looks like it's been tampered with, but you're not sure to what extent.")) + . += SPAN_WARNING("It looks like it's been tampered with, but you're not sure to what extent.") /obj/machinery/ftl_shunt/core/attackby(var/obj/item/O, var/mob/user) if(istype(O, /obj/item/stack/telecrystal)) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index cd40acd76d99..4b0f3ee39662 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -26,14 +26,14 @@ stored_pen = null return ..() -/obj/item/clipboard/examine(mob/user, distance, infix, suffix) +/obj/item/clipboard/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(stored_pen) - to_chat(user, "It's holding \a [stored_pen].") + . += "It's holding \a [stored_pen]." if(!LAZYLEN(papers)) - to_chat(user, "It contains [length(papers)] / [max_papers] paper\s.") + . += "It contains [length(papers)] / [max_papers] paper\s." else - to_chat(user, "It has room for [max_papers] paper\s.") + . += "It has room for [max_papers] paper\s." /obj/item/clipboard/proc/top_paper() return LAZYACCESS(papers, 1) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index a6a51a71675b..ccc5e1d77c8c 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -100,9 +100,9 @@ else icon_state = "envelope[contents.len > 0]" -/obj/item/folder/envelope/examine(mob/user) +/obj/item/folder/envelope/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "The seal is [sealed ? "intact" : "broken"].") + . += "The seal is [sealed ? "intact" : "broken"]." /obj/item/folder/envelope/proc/sealcheck(user) var/ripperoni = alert("Are you sure you want to break the seal on \the [src]?", "Confirmation","Yes", "No") diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm index 24666d60883e..225646088bf6 100644 --- a/code/modules/paperwork/handlabeler.dm +++ b/code/modules/paperwork/handlabeler.dm @@ -28,10 +28,10 @@ var/safety = TRUE //Whether the safety is on or off. Set to FALSE to allow labeler to interact with things var/mode = HAND_LABELER_MODE_ADD //What operation the labeler is set to do -/obj/item/hand_labeler/examine(mob/user, distance, infix, suffix) +/obj/item/hand_labeler/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance < 1) - to_chat(user, safety? "Safety is on." : SPAN_WARNING("Safety is off!")) + . += safety? "Safety is on." : SPAN_WARNING("Safety is off!") var/modename switch(mode) if(HAND_LABELER_MODE_ADD) @@ -40,12 +40,12 @@ modename = HAND_LABELER_MODE_REM_NAME if(HAND_LABELER_MODE_REMALL) modename = HAND_LABELER_MODE_REMALL_NAME - to_chat(user, "It's set to '[SPAN_ITALIC(modename)]' mode.") - to_chat(user, "It has [get_labels_left()]/[max_labels] label(s).") + . += "It's set to '[SPAN_ITALIC(modename)]' mode." + . += "It has [get_labels_left()]/[max_labels] label(s)." if(length(label)) - to_chat(user, "Its label text reads '[SPAN_ITALIC(label)]'.") + . += "Its label text reads '[SPAN_ITALIC(label)]'." else - to_chat(user, SPAN_NOTICE("You're too far away to tell much more.")) + . += SPAN_NOTICE("You're too far away to tell much more.") /obj/item/hand_labeler/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) return FALSE diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 02428e20f704..c0dd0d858629 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -110,11 +110,13 @@ if(new_text) free_space -= length(strip_html_properly(new_text)) -/obj/item/paper/examine(mob/user, distance) +/obj/item/paper/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(name != initial(name)) - to_chat(user, "It's titled '[name]'.") + . += "It's titled '[name]'." +/obj/item/paper/examined_by(mob/user, distance, infix, suffix) + . = ..() if(distance <= 1) interact(user, readonly = TRUE) else @@ -161,7 +163,7 @@ SPAN_NOTICE("You show the paper to [target]."), SPAN_NOTICE("[user] holds up a paper and shows it to [target].") ) - target.examinate(src) + target.examine_verb(src) return TRUE target_zone = check_zone(target_zone) diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm index 16a2f1f7ab97..27d047e94b87 100644 --- a/code/modules/paperwork/paper_bundle.dm +++ b/code/modules/paperwork/paper_bundle.dm @@ -187,7 +187,7 @@ "You hold \the [P] up to \the [src], burning it slowly.") addtimer(CALLBACK(src, PROC_REF(burn_callback), P, user, span_class), 2 SECONDS) -/obj/item/paper_bundle/examine(mob/user, distance) +/obj/item/paper_bundle/examined_by(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) interact(user) diff --git a/code/modules/paperwork/paper_sticky.dm b/code/modules/paperwork/paper_sticky.dm index 7c7e69565c3a..aaa0ad746036 100644 --- a/code/modules/paperwork/paper_sticky.dm +++ b/code/modules/paperwork/paper_sticky.dm @@ -50,10 +50,13 @@ return . return ..() -/obj/item/sticky_pad/examine(mob/user) +/obj/item/sticky_pad/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, SPAN_NOTICE("It has [papers] sticky note\s left.")) - to_chat(user, SPAN_NOTICE("You can click it on grab intent to pick it up.")) + . += SPAN_NOTICE("It has [papers] sticky note\s left.") + +/obj/item/sticky_pad/get_examine_hints(mob/user, distance, infix, suffix) + . = ..() + LAZYADD(., SPAN_NOTICE("You can click it on grab intent to pick it up.")) /obj/item/sticky_pad/dragged_onto(mob/user) user.put_in_hands(top) diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 3622d047f5c7..0dfa1d4f831b 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -103,15 +103,15 @@ return TRUE return ..() -/obj/item/paper_bin/examine(mob/user, distance) +/obj/item/paper_bin/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 1) return if(amount) - to_chat(user, SPAN_NOTICE("There [(amount > 1 ? "are [amount] papers" : "is one paper")] in the bin.")) + . += SPAN_NOTICE("There [(amount > 1 ? "are [amount] papers" : "is one paper")] in the bin.") else - to_chat(user, SPAN_NOTICE("There are no papers in the bin.")) - to_chat(user, SPAN_NOTICE("It can contain at most [max_amount] papers.")) + . += SPAN_NOTICE("There are no papers in the bin.") + . += SPAN_NOTICE("It can contain at most [max_amount] papers.") /obj/item/paper_bin/on_update_icon() . = ..() diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm index a5b56cf128fb..7f79ad78b273 100644 --- a/code/modules/paperwork/papershredder.dm +++ b/code/modules/paperwork/papershredder.dm @@ -129,6 +129,9 @@ /obj/machinery/papershredder/proc/create_shredded() for(var/key in shredder_bin) var/decl/material/M = GET_DECL(key) + var/shard_type = M.shard_type + if(!shard_type) + continue var/amt_per_shard = atom_info_repository.get_matter_for(M.shard_type, key, 1) if(shredder_bin[key] > amt_per_shard) LAZYADD(., M.place_cuttings(src, shredder_bin[key])) diff --git a/code/modules/paperwork/pen/quill_and_ink.dm b/code/modules/paperwork/pen/quill_and_ink.dm index f643b9d12472..ff4ebba1db7a 100644 --- a/code/modules/paperwork/pen/quill_and_ink.dm +++ b/code/modules/paperwork/pen/quill_and_ink.dm @@ -75,7 +75,7 @@ . = ..() add_to_reagents(/decl/material/liquid/pigment/black/ink, rand(starting_volume_low, starting_volume_high)) -/obj/item/chems/glass/inkwell/on_update_icon() +/obj/item/chems/glass/inkwell/update_overlays() . = ..() icon_state = get_world_inventory_state() if(locate(/obj/item/pen/fancy/quill) in src) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 6bd2a2524065..b6b39467524d 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -42,12 +42,12 @@ update_icon() return TRUE -/obj/item/camera_film/examine(mob/user, distance, infix, suffix) +/obj/item/camera_film/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(uses_left < 1) - to_chat(user, SPAN_WARNING("This cartridge is completely spent!")) + . += SPAN_WARNING("This cartridge is completely spent!") else - to_chat(user, "[uses_left] uses left.") + . += "[uses_left] uses left." /obj/item/camera_film/proc/get_remaining() return uses_left @@ -88,7 +88,7 @@ return clone /obj/item/photo/attack_self(mob/user) - user.examinate(src) + user.examine_verb(src) /obj/item/photo/get_matter_amount_modifier() return 0.2 @@ -117,7 +117,7 @@ return TRUE return ..() -/obj/item/photo/examine(mob/user, distance) +/obj/item/photo/examined_by(mob/user, distance, infix, suffix) . = ..() if(distance > 1) to_chat(user, SPAN_NOTICE("It is too far away.")) @@ -293,20 +293,21 @@ return TRUE return ..() -/obj/item/camera/proc/get_mobs(turf/the_turf) +/obj/item/camera/proc/get_mob_details(turf/the_turf) var/mob_detail - for(var/mob/living/A in the_turf) - if(A.invisibility) + for(var/mob/living/seen in the_turf) + if(seen.invisibility) continue var/holding - for(var/obj/item/thing in A.get_held_items()) + for(var/obj/item/thing in seen.get_held_items()) LAZYADD(holding, "\a [thing]") if(length(holding)) - holding = "They are holding [english_list(holding)]" + var/decl/pronouns/mob_pronouns = seen.get_pronouns() + holding = "[mob_pronouns.He] [mob_pronouns.is] holding [english_list(holding)]." if(!mob_detail) - mob_detail = "You can see [A] on the photo[A.get_health_ratio() < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]. " + mob_detail = "You can see [seen] on the photo[seen.get_health_ratio() < 0.75 ? " - [seen] looks hurt":""].[holding ? " [holding]":"."]. " else - mob_detail += "You can also see [A] on the photo[A.get_health_ratio() < 0.75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]." + mob_detail += "You can also see [seen] on the photo[seen.get_health_ratio() < 0.75 ? " - [seen] looks hurt":""].[holding ? " [holding]":"."]." return mob_detail /obj/item/camera/afterattack(atom/target, mob/user, flag) @@ -336,31 +337,31 @@ to_chat(user, SPAN_NOTICE("[film.get_remaining()] photo\s left.")) return TRUE -/obj/item/camera/examine(mob/user) +/obj/item/camera/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(film) - to_chat(user, "It has [film?.get_remaining()] photo\s left.") + . += "It has [film?.get_remaining()] photo\s left." else - to_chat(user, "It doesn't have a film cartridge.") + . += "It doesn't have a film cartridge." /obj/item/camera/proc/captureimage(atom/target, mob/living/user, flag) var/x_c = target.x - (field_of_view-1)/2 var/y_c = target.y + (field_of_view-1)/2 var/z_c = target.z - var/mobs = "" + var/mob_details = "" for(var/i = 1 to field_of_view) for(var/j = 1 to field_of_view) var/turf/T = locate(x_c, y_c, z_c) if(user.can_capture_turf(T)) - mobs += get_mobs(T) + mob_details += get_mob_details(T) x_c++ y_c-- x_c = x_c - field_of_view - var/obj/item/photo/p = createpicture(target, user, mobs, flag) + var/obj/item/photo/p = createpicture(target, user, mob_details, flag) printpicture(user, p) -/obj/item/camera/proc/createpicture(atom/target, mob/user, mobs, flag) +/obj/item/camera/proc/createpicture(atom/target, mob/user, new_description, flag) var/x_c = target.x - (field_of_view-1)/2 var/y_c = target.y - (field_of_view-1)/2 var/z_c = target.z @@ -368,7 +369,7 @@ var/obj/item/photo/p = new() p.img = photoimage - p.desc = mobs + p.desc = new_description p.photo_size = field_of_view p.update_icon() diff --git a/code/modules/persistence/graffiti.dm b/code/modules/persistence/graffiti.dm index 0bd85389b6f4..ea6e391a7909 100644 --- a/code/modules/persistence/graffiti.dm +++ b/code/modules/persistence/graffiti.dm @@ -31,11 +31,11 @@ SSpersistence.forget_value(src, /decl/persistence_handler/graffiti) . = ..() -/obj/effect/decal/writing/examine(mob/user) +/obj/effect/decal/writing/get_examine_strings(mob/user, distance, infix, suffix) . = ..(user) var/processed_message = user.handle_reading_literacy(user, message) if(processed_message) - to_chat(user, "It reads \"[processed_message]\".") + . += "It reads \"[processed_message]\"." /obj/effect/decal/writing/attackby(var/obj/item/thing, var/mob/user) if(IS_WELDER(thing) && thing.do_tool_interaction(TOOL_WELDER, user, src, 3 SECONDS)) diff --git a/code/modules/persistence/noticeboards.dm b/code/modules/persistence/noticeboards.dm index d0b5af670daa..28a2f6479136 100644 --- a/code/modules/persistence/noticeboards.dm +++ b/code/modules/persistence/noticeboards.dm @@ -87,7 +87,7 @@ interact(user) return TRUE -/obj/structure/noticeboard/examine(mob/user, distance, infix, suffix) +/obj/structure/noticeboard/examined_by(mob/user, distance, infix, suffix) . = ..() interact(user) diff --git a/code/modules/posters/_poster.dm b/code/modules/posters/_poster.dm index 2f3ca709b56c..d874171cc744 100644 --- a/code/modules/posters/_poster.dm +++ b/code/modules/posters/_poster.dm @@ -93,10 +93,10 @@ set_icon_state(poster_design.icon_state) update_icon() -/obj/structure/sign/poster/examine(mob/user, distance, infix, suffix) +/obj/structure/sign/poster/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "The bottom right of \the [src] reads: '[poster_design.serial_number]'.") + . += "The bottom right of \the [src] reads: '[poster_design.serial_number]'." /obj/structure/sign/poster/proc/set_design(var/decl/poster_design/_design_path) if(ispath(_design_path, /decl)) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 11e314053cea..52776be8e59f 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -246,18 +246,18 @@ var/global/list/all_apcs = list() if(term && (!functional_only || term.is_functional())) return term.terminal -/obj/machinery/power/apc/examine(mob/user, distance) +/obj/machinery/power/apc/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) if(stat & BROKEN) - to_chat(user, "Looks broken.") + . += "Looks broken." return var/terminal = terminal() - to_chat(user, "\The [src] is [terminal ? "" : "not "]connected to external power.") + . += "\The [src] is [terminal ? "" : "not "]connected to external power." if(!panel_open) - to_chat(user, "The cover is closed.") + . += "The cover is closed." else - to_chat(user, "The cover is [cover_removed ? "removed" : "open"] and the power cell is [ get_cell(FALSE) ? "installed" : "missing"].") + . += "The cover is [cover_removed ? "removed" : "open"] and the power cell is [ get_cell(FALSE) ? "installed" : "missing"]." // Broken/missing board should be shown by parent. // update the APC icon to show the three base states diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm index 5cb140c727e3..38477765ac00 100644 --- a/code/modules/power/breaker_box.dm +++ b/code/modules/power/breaker_box.dm @@ -37,12 +37,12 @@ set_state(1) . = ..() -/obj/machinery/power/breakerbox/examine(mob/user) +/obj/machinery/power/breakerbox/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(on) - to_chat(user, "It seems to be online.") + . += "It seems to be online." else - to_chat(user, "It seems to be offline.") + . += "It seems to be offline." /obj/machinery/power/breakerbox/attack_ai(mob/living/silicon/ai/user) if(update_locked) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 0aa55c1c1e15..f00722b2d3c9 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -111,7 +111,7 @@ By design, d1 is the smallest direction and d2 is the highest // Ghost examining the cable -> tells him the power /obj/structure/cable/attack_ghost(mob/user) if(user.client && user.client.inquisitive_ghost) - user.examinate(src) + user.examine_verb(src) // following code taken from attackby (multitool) if(powernet && (powernet.avail > 0)) to_chat(user, SPAN_WARNING("[get_wattage()] in power network.")) @@ -614,18 +614,16 @@ By design, d1 is the smallest direction and d2 is the highest else w_class = ITEM_SIZE_SMALL -/obj/item/stack/cable_coil/examine(mob/user, distance) +/obj/item/stack/cable_coil/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 1) return - if(get_amount() == 1) - to_chat(user, "\A [singular_name] of cable.") + . += "\A [singular_name] of cable." else if(get_amount() == 2) - to_chat(user, "Two [plural_name] of cable.") + . += "Two [plural_name] of cable." else - to_chat(user, "A coil of power cable. There are [get_amount()] [plural_name] of cable in the coil.") - + . += "A coil of power cable. There are [get_amount()] [plural_name] of cable in the coil." /obj/item/stack/cable_coil/verb/make_restraint() set name = "Make Cable Restraints" diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index f6dada5b25d4..8af653291679 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -79,10 +79,10 @@ update_icon() return amount_used -/obj/item/cell/examine(mob/user) +/obj/item/cell/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "The label states it's capacity is [maxcharge] Wh.") - to_chat(user, "The charge meter reads [round(src.percent(), 0.1)]%.") + . += "The label states it's capacity is [maxcharge] Wh." + . += "The charge meter reads [round(src.percent(), 0.1)]%." /obj/item/cell/emp_act(severity) // remove this if EMPs are ever rebalanced so that they don't instantly drain borg cells diff --git a/code/modules/power/debug_items.dm b/code/modules/power/debug_items.dm index 01eb4198060e..3c725c6dd430 100644 --- a/code/modules/power/debug_items.dm +++ b/code/modules/power/debug_items.dm @@ -5,7 +5,7 @@ density = TRUE var/show_extended_information = 1 // Set to 0 to disable extra information on examining (for example, when used on admin events) -/obj/machinery/power/debug_items/examine(mob/user) +/obj/machinery/power/debug_items/examined_by(mob/user) . = ..() if(show_extended_information) show_info(user) diff --git a/code/modules/power/fusion/gyrotron/gyrotron.dm b/code/modules/power/fusion/gyrotron/gyrotron.dm index afb22c62b68d..d8a6425977eb 100644 --- a/code/modules/power/fusion/gyrotron/gyrotron.dm +++ b/code/modules/power/fusion/gyrotron/gyrotron.dm @@ -46,9 +46,10 @@ return rate*10 /obj/machinery/emitter/gyrotron/get_emitter_beam() - var/obj/item/projectile/beam/emitter/E = ..() - E.damage = mega_energy * 50 - return E + var/obj/item/projectile/beam/emitter/beam = ..() + if(istype(beam)) + beam.damage = mega_energy * 50 + return beam /obj/machinery/emitter/gyrotron/on_update_icon() if (active && (can_use_power_oneoff(active_power_usage) <= 0)) diff --git a/code/modules/power/geothermal/_geothermal.dm b/code/modules/power/geothermal/_geothermal.dm index 3425a37cd2cd..138a38cd1cf4 100644 --- a/code/modules/power/geothermal/_geothermal.dm +++ b/code/modules/power/geothermal/_geothermal.dm @@ -160,11 +160,11 @@ var/global/const/MAX_GEOTHERMAL_PRESSURE = 12000 if(G?.anchored) G.refresh_neighbors() -/obj/machinery/geothermal/examine(mob/user, distance) +/obj/machinery/geothermal/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance < 2) - to_chat(user, SPAN_INFO("Pressure: [current_pressure]kPa")) - to_chat(user, SPAN_INFO("Output: [last_generated]W")) + . += SPAN_INFO("Pressure: [current_pressure]kPa") + . += SPAN_INFO("Output: [last_generated]W") ///Attempts to connect to any existing geothermal vents in our turf. /obj/machinery/geothermal/proc/setup_vent() diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 76c85e46b822..c2866b277c96 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -215,18 +215,18 @@ update_icon() // examine verb -/obj/machinery/light/examine(mob/user) +/obj/machinery/light/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/fitting = get_fitting_name() switch(get_status()) if(LIGHT_OK) - to_chat(user, "It is turned [on? "on" : "off"].") + . += "It is turned [on? "on" : "off"]." if(LIGHT_EMPTY) - to_chat(user, "The [fitting] has been removed.") + . += "The [fitting] has been removed." if(LIGHT_BURNED) - to_chat(user, "The [fitting] is burnt out.") + . += "The [fitting] is burnt out." if(LIGHT_BROKEN) - to_chat(user, "The [fitting] has been smashed.") + . += "The [fitting] has been smashed." /obj/machinery/light/proc/get_fitting_name() var/obj/item/light/L = light_type diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index d869748a7b40..e10a4f9c6d13 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -71,14 +71,14 @@ return STATUS_CLOSE return ..() -/obj/machinery/port_gen/examine(mob/user, distance) +/obj/machinery/port_gen/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(distance > 1) - return - if(active) - to_chat(user, "The generator is on.") - else - to_chat(user, "The generator is off.") + if(distance <= 1) + if(active) + . += SPAN_NOTICE("The generator is on.") + else + . += SPAN_NOTICE("The generator is off.") + /obj/machinery/port_gen/emp_act(severity) if(!active) return @@ -139,21 +139,21 @@ var/overheating = 0 //if this gets high enough the generator explodes var/max_overheat = 150 -/obj/machinery/port_gen/pacman/examine(mob/user) +/obj/machinery/port_gen/pacman/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(active) - to_chat(user, "\The [src] appears to be producing [power_gen*power_output] W.") + . += "\The [src] appears to be producing [power_gen*power_output] W." else - to_chat(user, "\The [src] is turned off.") + . += "\The [src] is turned off." if(IsBroken()) - to_chat(user, SPAN_WARNING("\The [src] seems to have broken down.")) + . += SPAN_WARNING("\The [src] seems to have broken down.") if(overheating) - to_chat(user, SPAN_DANGER("\The [src] is overheating!")) + . += SPAN_DANGER("\The [src] is overheating!") if(sheet_path && sheet_material) var/decl/material/mat = GET_DECL(sheet_material) var/obj/item/stack/material/sheet = sheet_path - to_chat(user, "There [sheets == 1 ? "is" : "are"] [sheets] [sheets == 1 ? initial(sheet.singular_name) : initial(sheet.plural_name)] left in the hopper.") - to_chat(user, SPAN_SUBTLE("\The [src] uses [mat.solid_name] [initial(sheet.plural_name)] as fuel to produce power.")) + . += "There [sheets == 1 ? "is" : "are"] [sheets] [sheets == 1 ? initial(sheet.singular_name) : initial(sheet.plural_name)] left in the hopper." + . += SPAN_SUBTLE("\The [src] uses [mat.solid_name] [initial(sheet.plural_name)] as fuel to produce power.") /obj/machinery/port_gen/pacman/Initialize() . = ..() @@ -463,9 +463,9 @@ create_reagents(120) . = ..() -/obj/machinery/port_gen/pacman/super/potato/examine(mob/user) +/obj/machinery/port_gen/pacman/super/potato/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "Auxilary tank shows [reagents.total_volume]u of liquid in it.") + . += "Auxilary tank shows [reagents.total_volume]u of liquid in it." /obj/machinery/port_gen/pacman/super/potato/UseFuel() if(reagents.has_reagent(/decl/material/liquid/alcohol/vodka)) diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm index 7a915e305aa2..d915bac98433 100644 --- a/code/modules/power/singularity/collector.dm +++ b/code/modules/power/singularity/collector.dm @@ -133,11 +133,10 @@ var/global/list/rad_collectors = list() return TRUE return ..() -/obj/machinery/rad_collector/examine(mob/user, distance) +/obj/machinery/rad_collector/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (distance <= 3 && !(stat & BROKEN)) - to_chat(user, "The meter indicates that \the [src] is collecting [last_power] W.") - return 1 + . += "The meter indicates that \the [src] is collecting [last_power] W." /obj/machinery/rad_collector/explosion_act(severity) if(severity != 1) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 077fd4e5a037..7e5c523ea0f5 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -86,21 +86,20 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin icon_state = "end_cap" reference = "end_cap" -/obj/structure/particle_accelerator/examine(mob/user) +/obj/structure/particle_accelerator/get_examine_strings(mob/user, distance, infix, suffix) . = ..() switch(construction_state) if(0) - to_chat(user, "Looks like it's not attached to the flooring.") + . += "Looks like it's not attached to the flooring." if(1) - to_chat(user, "It is missing some cables.") + . += "It is missing some cables." if(2) - to_chat(user, "The panel is open.") + . += "The panel is open." if(3) if(powered) - to_chat(user, desc_holder) + . += desc_holder else - to_chat(user, "\The [src] is assembled.") - + . += "\The [src] is assembled." /obj/structure/particle_accelerator/attackby(obj/item/W, mob/user) if(has_extension(W, /datum/extension/tool)) @@ -109,7 +108,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin return ..() /obj/structure/particle_accelerator/Move() - ..() + . = ..() if(master && master.active) master.toggle_power() investigate_log("was moved whilst active; it powered down.","singulo") @@ -227,21 +226,20 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin /obj/machinery/particle_accelerator/on_update_icon() return -/obj/machinery/particle_accelerator/examine(mob/user) +/obj/machinery/particle_accelerator/get_examine_strings(mob/user, distance, infix, suffix) . = ..() switch(construction_state) if(0) - to_chat(user, "Looks like it's not attached to the flooring.") + . += "Looks like it's not attached to the flooring." if(1) - to_chat(user, "It is missing some cables.") + . += "It is missing some cables." if(2) - to_chat(user, "The panel is open.") + . += "The panel is open." if(3) if(powered) - to_chat(user, desc_holder) + . += desc_holder else - to_chat(user, "\The [src] is assembled.") - + . += "\The [src] is assembled." /obj/machinery/particle_accelerator/attackby(obj/item/W, mob/user) if(has_extension(W, /datum/extension/tool)) diff --git a/code/modules/power/singularity/singularity_stages.dm b/code/modules/power/singularity/singularity_stages.dm index 2624c10e8183..f644a21e1ec2 100644 --- a/code/modules/power/singularity/singularity_stages.dm +++ b/code/modules/power/singularity/singularity_stages.dm @@ -3,25 +3,25 @@ var/name = "gravitational singularity" var/desc = "A gravitational singularity." /// What is the effective physical size of this singularity? - var/footprint + var/footprint = 1 /// What is the numerical size of this singularity? - var/stage_size + var/stage_size = 0 /// What is the minimum singularity energy to reach this sage? - var/min_energy + var/min_energy = -(INFINITY) /// What is the maximum singularity energy to stay at this sage? - var/max_energy + var/max_energy = 0 /// What icon should the singularity use at this stage? var/icon /// What icon_state should the singularity use at this stage? var/icon_state /// What x offset should the singularity use at this stage? - var/pixel_x + var/pixel_x = 0 /// What y offset should the singularity use at this stage? - var/pixel_y + var/pixel_y = 0 /// What is the pull range of a singularity at this stage? - var/grav_pull + var/grav_pull = 0 /// What is the feeding range of a singularity at this stage? - var/consume_range + var/consume_range = 0 /// If true, the singularity will lose energy in Process(). var/dissipates_over_time = TRUE /// How many Process() ticks do we have between dissipations? @@ -31,13 +31,13 @@ /// How much energy do we lose when we dissipate? var/dissipation_energy_loss = 1 /// What is the percent chance of an event each tick? - var/event_chance + var/event_chance = 0 /// Do we force a specific event when we proc events? var/decl/singularity_event/forced_event = null /// Will we wander around? - var/wander + var/wander = FALSE /// Can explosions destroy the singularity? - var/explosion_vulnerable + var/explosion_vulnerable = FALSE /// What is the heavy range for the EM pulse event in this stage? var/em_heavy_range = 8 /// What is the light range for the EM pulse event in this stage? @@ -55,8 +55,10 @@ . += "negative consume_range" if(grav_pull < 0) . += "negative grav_pull" - if(grav_pull >= 0 && consume_range >= 0 && grav_pull < consume_range) + else if(consume_range >= 0 && grav_pull < consume_range) . += "grav_pull is smaller than consume_range; consume_range will be truncated" + if(min_energy > max_energy) + . += "min_energy is larger than max_energy, stage will never be able to exist" /decl/singularity_stage/proc/handle_dissipation(obj/effect/singularity/source) if(dissipates_over_time) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 2201e1fc430b..99f418ed6272 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -336,6 +336,6 @@ update_icon() ..() -/obj/machinery/power/smes/examine(mob/user) +/obj/machinery/power/smes/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "The service hatch is [panel_open ? "open" : "closed"].") + . += "The service hatch is [panel_open ? "open" : "closed"]." diff --git a/code/modules/power/stirling.dm b/code/modules/power/stirling.dm index 2b0c633059ff..fb1adc9ef8c7 100644 --- a/code/modules/power/stirling.dm +++ b/code/modules/power/stirling.dm @@ -56,8 +56,8 @@ // Some passive equilibrium between the lines. var/passive_heat_transfer = min(HEAT_TRANSFER*abs(delta_t), line_equilibrium_heat) - air1.add_thermal_energy(-sign(delta_t)*passive_heat_transfer) - air2.add_thermal_energy(sign(delta_t)*passive_heat_transfer) + air1.add_thermal_energy(-(SIGN(delta_t))*passive_heat_transfer) + air2.add_thermal_energy( (SIGN(delta_t))*passive_heat_transfer) if(!istype(inserted_cylinder)) return @@ -102,7 +102,7 @@ var/work_coefficient = working_volume.get_total_moles()*R_IDEAL_GAS_EQUATION*log(1.5) // Direction of heat flow, 1 for air1 -> air 2, -1 for air2 -> air 1 - var/heat_dir = sign(delta_t) + var/heat_dir = SIGN(delta_t) // We multiply by the cycle frequency to get reasonable values for power generation. // Energy is still conserved, but the efficiency of the engine is slightly overestimated. @@ -133,14 +133,13 @@ last_genlev = genlev update_networks() -/obj/machinery/atmospherics/binary/stirling/examine(mob/user, distance) +/obj/machinery/atmospherics/binary/stirling/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(distance > 1) - return - if(active) - to_chat(user, "\The [src] is generating [round(last_gen/1000, 0.1)] kW") - if(!inserted_cylinder) - to_chat(user, "There is no piston cylinder inserted into \the [src].") + if(distance <= 1) + if(active) + . += "\The [src] is generating [round(last_gen/1000, 0.1)] kW" + if(!inserted_cylinder) + . += "There is no piston cylinder inserted into \the [src]." /obj/machinery/atmospherics/binary/stirling/attackby(var/obj/item/W, var/mob/user) if((istype(W, /obj/item/tank/stirling))) diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 70c6cb0f425a..ac6c076a7029 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -56,11 +56,11 @@ return TRUE . = ..() -/obj/machinery/power/terminal/examine(mob/user) +/obj/machinery/power/terminal/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/obj/machinery/machine = master_machine() if(machine) - to_chat(user, "It is attached to \the [machine].") + . += "It is attached to \the [machine]." /obj/machinery/power/terminal/proc/master_machine() var/obj/machinery/machine = master && master.loc diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 613ae77ae768..8fceb8e096d6 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -127,12 +127,12 @@ if(!BB) SetName("spent [name]") -/obj/item/ammo_casing/examine(mob/user) +/obj/item/ammo_casing/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(caliber) - to_chat(user, "Its caliber is [caliber].") + . += "Its caliber is [caliber]." if (!BB) - to_chat(user, "This one is spent.") + . += "This one is spent." //An item that holds casings and can be used to put them inside guns /obj/item/ammo_magazine @@ -258,10 +258,10 @@ break icon_state = (new_state)? new_state : initial(icon_state) -/obj/item/ammo_magazine/examine(mob/user) +/obj/item/ammo_magazine/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/self_ammo_count = get_stored_ammo_count() - to_chat(user, "There [(self_ammo_count == 1)? "is" : "are"] [self_ammo_count] round\s left!") + . += "There [(self_ammo_count == 1)? "is" : "are"] [self_ammo_count] round\s left!" //magazine icon state caching var/global/list/magazine_icondata_keys = list() diff --git a/code/modules/projectiles/ammunition/magnetic.dm b/code/modules/projectiles/ammunition/magnetic.dm index 893bde26c0ca..51ea0ffed07a 100644 --- a/code/modules/projectiles/ammunition/magnetic.dm +++ b/code/modules/projectiles/ammunition/magnetic.dm @@ -11,6 +11,6 @@ origin_tech = @'{"combat":1}' var/remaining = 9 -/obj/item/magnetic_ammo/examine(mob/user) +/obj/item/magnetic_ammo/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "There [(remaining == 1)? "is" : "are"] [remaining] [projectile_name]\s left!") + . += "There [(remaining == 1)? "is" : "are"] [remaining] [projectile_name]\s left!" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index bb477976f9d3..91c1085e4327 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -630,14 +630,14 @@ accuracy = initial(accuracy) screen_shake = initial(screen_shake) -/obj/item/gun/examine(mob/user) +/obj/item/gun/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) if(firemodes.len > 1) var/datum/firemode/current_mode = firemodes[sel_mode] - to_chat(user, "The fire selector is set to [current_mode.name].") + . += "The fire selector is set to [current_mode.name]." if(has_safety) - to_chat(user, "The safety is [safety() ? "on" : "off"].") + . += "The safety is [safety() ? "on" : "off"]." last_safety_check = world.time /obj/item/gun/proc/try_switch_firemodes(mob/user) @@ -706,14 +706,13 @@ last_handled = world.time /obj/item/gun/on_disarm_attempt(mob/target, mob/attacker) - var/list/turfs = list() - for(var/turf/T in view()) - turfs += T - if(turfs.len) + var/list/turfs = view() + if(length(turfs)) var/turf/shoot_to = pick(turfs) - target.visible_message("\The [src] goes off during the struggle!") + target.visible_message(SPAN_DANGER("\The [src] goes off during the struggle!")) afterattack(shoot_to,target) - return 1 + return TRUE + return FALSE /obj/item/gun/proc/can_autofire() return (autofire_enabled && world.time >= next_fire_time) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index f03639047cbb..f7d2efa622be 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -85,16 +85,16 @@ var/global/list/registered_cyborg_weapons = list() return 0 return round(power_supply.charge / charge_cost) -/obj/item/gun/energy/examine(mob/user) - . = ..(user) +/obj/item/gun/energy/get_examine_strings(mob/user, distance, infix, suffix) + . = ..() var/obj/item/cell/power_supply = get_cell() if(!power_supply) - to_chat(user, "Seems like it's dead.") + . += "Seems like it's dead." return if (charge_cost == 0) - to_chat(user, "This gun seems to have an unlimited number of shots.") + . += "This gun seems to have an unlimited number of shots." else - to_chat(user, "Has [get_shots_remaining()] shot\s remaining.") + . += "Has [get_shots_remaining()] shot\s remaining." /obj/item/gun/energy/proc/get_charge_ratio() . = 0 diff --git a/code/modules/projectiles/guns/energy/capacitor.dm b/code/modules/projectiles/guns/energy/capacitor.dm index f0ac3df942ae..c9e7239f2100 100644 --- a/code/modules/projectiles/guns/energy/capacitor.dm +++ b/code/modules/projectiles/guns/energy/capacitor.dm @@ -77,10 +77,10 @@ var/global/list/laser_wavelengths power_supply_extension_type = power_supply_extension_type || /datum/extension/loaded_cell/secured return ..(loaded_cell_type, accepted_cell_type, power_supply_extension_type, charge_value) -/obj/item/gun/energy/capacitor/examine(mob/user, distance) +/obj/item/gun/energy/capacitor/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(loc == user || distance <= 1) - to_chat(user, "The wavelength selector is dialled to [selected_wavelength.name].") + . += "The wavelength selector is dialled to [selected_wavelength.name]." /obj/item/gun/energy/capacitor/Destroy() if(capacitors) diff --git a/code/modules/projectiles/guns/launcher/bows/_bow.dm b/code/modules/projectiles/guns/launcher/bows/_bow.dm index c9379e21674c..d4182d48fddb 100644 --- a/code/modules/projectiles/guns/launcher/bows/_bow.dm +++ b/code/modules/projectiles/guns/launcher/bows/_bow.dm @@ -184,7 +184,7 @@ overlay.overlays += overlay_image(overlay.icon, loaded_state, _loaded.color, RESET_COLOR) return ..() -/obj/item/gun/launcher/bow/examine(mob/user) +/obj/item/gun/launcher/bow/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/list/strings = list() if(material_alteration & MAT_FLAG_ALTERATION_DESC) @@ -195,4 +195,4 @@ strings += "has \a [_loaded] ready" if(!length(strings)) return - to_chat(user, "It [english_list(strings)].") + . += "It [english_list(strings)]." diff --git a/code/modules/projectiles/guns/launcher/bows/crossbow_powered.dm b/code/modules/projectiles/guns/launcher/bows/crossbow_powered.dm index d3b40093e7a9..c048a4141f93 100644 --- a/code/modules/projectiles/guns/launcher/bows/crossbow_powered.dm +++ b/code/modules/projectiles/guns/launcher/bows/crossbow_powered.dm @@ -151,6 +151,6 @@ ratio = max(round(ratio, 0.25) * 100, 25) add_overlay("[get_world_inventory_state()][ratio]") -/obj/item/gun/launcher/bow/crossbow/powered/rapidcrossbowdevice/examine(mob/user) +/obj/item/gun/launcher/bow/crossbow/powered/rapidcrossbowdevice/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It currently holds [stored_matter]/[max_stored_matter] matter-units.") + . += "It currently holds [stored_matter]/[max_stored_matter] matter-units." diff --git a/code/modules/projectiles/guns/launcher/foam_gun.dm b/code/modules/projectiles/guns/launcher/foam_gun.dm index 8bdb703a1a1d..d0933d5b31de 100644 --- a/code/modules/projectiles/guns/launcher/foam_gun.dm +++ b/code/modules/projectiles/guns/launcher/foam_gun.dm @@ -75,10 +75,10 @@ release_force = 3 throw_distance = 12 -/obj/item/gun/launcher/foam/revolver/tampered/examine(mob/user, distance) +/obj/item/gun/launcher/foam/revolver/tampered/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "The hammer is a lot more resistant than you'd expect.") + . += "The hammer is a lot more resistant than you'd expect." /obj/item/gun/launcher/foam/machine_gun name = "foam machine gun" @@ -120,10 +120,10 @@ /obj/item/foam_dart/tampered _base_attack_force = 1 -/obj/item/foam_dart/tampered/examine(mob/user, distance) +/obj/item/foam_dart/tampered/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, SPAN_WARNING("Closer inspection reveals some weights in the rubber dome.")) + . += SPAN_WARNING("Closer inspection reveals some weights in the rubber dome.") //boxes of the projectile /obj/item/box/foam_darts diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm index caf74b0989ca..f2d830571f6d 100644 --- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm +++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm @@ -46,13 +46,13 @@ to_chat(M, "You pump [src], but the magazine is empty.") update_icon() -/obj/item/gun/launcher/grenade/examine(mob/user, distance) +/obj/item/gun/launcher/grenade/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 2) var/grenade_count = grenades.len + (chambered? 1 : 0) - to_chat(user, "Has [grenade_count] grenade\s remaining.") + . += "Has [grenade_count] grenade\s remaining." if(chambered) - to_chat(user, "\A [chambered] is chambered.") + . += "\A [chambered] is chambered." /obj/item/gun/launcher/grenade/proc/load(obj/item/grenade/G, mob/user) if(!can_load_grenade_type(G, user)) diff --git a/code/modules/projectiles/guns/launcher/money_cannon.dm b/code/modules/projectiles/guns/launcher/money_cannon.dm index 6b19d382aec6..64755e6f24ca 100644 --- a/code/modules/projectiles/guns/launcher/money_cannon.dm +++ b/code/modules/projectiles/guns/launcher/money_cannon.dm @@ -130,19 +130,16 @@ else return ..() -/obj/item/gun/launcher/money/examine(mob/user) +/obj/item/gun/launcher/money/get_examine_strings(mob/user, distance, infix, suffix) . = ..(user) var/decl/currency/cur = GET_DECL(global.using_map.default_currency) - to_chat(user, "It is configured to dispense [dispensing] [cur.name_singular] at a time.") - + . += "It is configured to dispense [dispensing] [cur.name_singular] at a time." if(receptacle_value >= 1) - to_chat(user, "The receptacle is loaded with [receptacle_value] [cur.name_singular].") - + . += "The receptacle is loaded with [receptacle_value] [cur.name_singular]." else - to_chat(user, "The receptacle is empty.") - + . += "The receptacle is empty." if(emagged) - to_chat(user, "Its motors are severely overloaded.") + . += SPAN_NOTICE("Its motors are severely overloaded.") /obj/item/gun/launcher/money/handle_suicide(mob/living/user) if(!ishuman(user)) diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm index 0d1824a83a2d..3c0b6e2885c9 100644 --- a/code/modules/projectiles/guns/launcher/pneumatic.dm +++ b/code/modules/projectiles/guns/launcher/pneumatic.dm @@ -99,15 +99,15 @@ storage.remove_from_storage((ismob(firer) ? firer : null), launched, src) return launched -/obj/item/gun/launcher/pneumatic/examine(mob/user, distance) +/obj/item/gun/launcher/pneumatic/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 2) return - to_chat(user, "The valve is dialed to [pressure_setting]%.") + . += "The valve is dialed to [pressure_setting]%." if(tank) - to_chat(user, "The tank dial reads [tank.air_contents.return_pressure()] kPa.") + . += "The tank dial reads [tank.air_contents.return_pressure()] kPa." else - to_chat(user, "Nothing is attached to the tank valve!") + . += "Nothing is attached to the tank valve!" /obj/item/gun/launcher/pneumatic/update_release_force(obj/item/projectile) if(tank) diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm index d8d3d2e48bd8..57b101eface7 100644 --- a/code/modules/projectiles/guns/launcher/rocket.dm +++ b/code/modules/projectiles/guns/launcher/rocket.dm @@ -17,10 +17,10 @@ var/max_rockets = 1 var/list/rockets = new/list() -/obj/item/gun/launcher/rocket/examine(mob/user, distance) +/obj/item/gun/launcher/rocket/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 2) - to_chat(user, "[rockets.len] / [max_rockets] rockets.") + . += SPAN_NOTICE("[rockets.len]/[max_rockets] rocket\s.") /obj/item/gun/launcher/rocket/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/ammo_casing/rocket)) diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm index 2750cecee523..02693dc1c5ff 100644 --- a/code/modules/projectiles/guns/launcher/syringe_gun.dm +++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm @@ -164,7 +164,7 @@ . = ..() add_overlay("[icon_state]-loaded") -/obj/item/gun/launcher/syringe/disguised/examine(mob/user, distance) +/obj/item/gun/launcher/syringe/disguised/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1) - to_chat(user, "The button is a little stiff.") + . += "The button is a little stiff." diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm index 0a4116856851..7ebf59d143bd 100644 --- a/code/modules/projectiles/guns/magnetic/magnetic.dm +++ b/code/modules/projectiles/guns/magnetic/magnetic.dm @@ -87,16 +87,16 @@ if(loaded) to_chat(user, "It has \a [loaded] loaded.") -/obj/item/gun/magnetic/examine(mob/user) +/obj/item/gun/magnetic/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(!get_cell() || !capacitor) - to_chat(user, "The capacitor charge indicator is blinking [SPAN_RED("red")]. Maybe you should check the cell or capacitor.") + . += SPAN_NOTICE("The capacitor charge indicator is blinking [SPAN_RED("red")]. Maybe you should check the cell or capacitor.") else - to_chat(user, "The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%.") + . += SPAN_NOTICE("The installed [capacitor.name] has a charge level of [round((capacitor.charge/capacitor.max_charge)*100)]%.") if(capacitor.charge < power_cost) - to_chat(user, "The capacitor charge indicator is [SPAN_ORANGE("amber")].") + . += SPAN_NOTICE("The capacitor charge indicator is [SPAN_ORANGE("amber")].") else - to_chat(user, "The capacitor charge indicator is [SPAN_GREEN("green")].") + . += SPAN_NOTICE("The capacitor charge indicator is [SPAN_GREEN("green")].") /obj/item/gun/magnetic/attackby(var/obj/item/thing, var/mob/user) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index e34fd58e0619..358e3a8a4ca6 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -314,14 +314,14 @@ ammo_magazine = null update_icon() //make sure to do this after unsetting ammo_magazine -/obj/item/gun/projectile/examine(mob/user) +/obj/item/gun/projectile/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(is_jammed && user.skill_check(SKILL_WEAPONS, SKILL_BASIC)) - to_chat(user, "It looks jammed.") + . += SPAN_WARNING("It looks jammed.") if(ammo_magazine) - to_chat(user, "It has \a [ammo_magazine] loaded.") + . += "It has \a [ammo_magazine] loaded." if(user.skill_check(SKILL_WEAPONS, SKILL_ADEPT)) - to_chat(user, "Has [getAmmo()] round\s remaining.") + . += "Has [getAmmo()] round\s remaining." /obj/item/gun/projectile/proc/getAmmo() var/bullets = 0 diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 802b1f93863c..86e54de2533c 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -116,12 +116,12 @@ else ..() -/obj/item/gun/projectile/automatic/assault_rifle/grenade/examine(mob/user) +/obj/item/gun/projectile/automatic/assault_rifle/grenade/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(launcher.chambered) - to_chat(user, "\The [launcher] has \a [launcher.chambered] loaded.") + . += "\The [launcher] has \a [launcher.chambered] loaded." else - to_chat(user, "\The [launcher] is empty.") + . += "\The [launcher] is empty." /obj/item/gun/projectile/automatic/assault_rifle/grenade/toggle_safety(mob/user) . = ..() diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm index ee2edcdcfaed..56ba8fb6d614 100644 --- a/code/modules/projectiles/guns/projectile/dartgun.dm +++ b/code/modules/projectiles/guns/projectile/dartgun.dm @@ -52,20 +52,18 @@ fill_dart(dart) return dart -/obj/item/gun/projectile/dartgun/examine(mob/user) +/obj/item/gun/projectile/dartgun/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (beakers.len) - to_chat(user, "\The [src] contains:") + . += SPAN_NOTICE("\The [src] contains:") for(var/obj/item/chems/glass/beaker/B in beakers) if(B.reagents && LAZYLEN(B.reagents?.reagent_volumes)) for(var/ltype in B.reagents.liquid_volumes) var/decl/material/R = GET_DECL(ltype) - to_chat(user, "[LIQUID_VOLUME(B.reagents, ltype)] units of [R.get_reagent_name(B.reagents, MAT_PHASE_LIQUID)]") - + . += SPAN_NOTICE("[LIQUID_VOLUME(B.reagents, ltype)] units of [R.get_reagent_name(B.reagents, MAT_PHASE_LIQUID)]") for(var/stype in B.reagents.solid_volumes) var/decl/material/R = GET_DECL(stype) - to_chat(user, "[SOLID_VOLUME(B.reagents, stype)] units of [R.get_reagent_name(B.reagents, MAT_PHASE_SOLID)]") - + . += SPAN_NOTICE("[SOLID_VOLUME(B.reagents, stype)] units of [R.get_reagent_name(B.reagents, MAT_PHASE_SOLID)]") /obj/item/gun/projectile/dartgun/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/chems/glass)) diff --git a/code/modules/projectiles/guns/projectile/flaregun.dm b/code/modules/projectiles/guns/projectile/flaregun.dm index 283e7ceb8d07..6ff9c0074e04 100644 --- a/code/modules/projectiles/guns/projectile/flaregun.dm +++ b/code/modules/projectiles/guns/projectile/flaregun.dm @@ -20,10 +20,10 @@ /obj/item/gun/projectile/flare/loaded ammo_type = /obj/item/ammo_casing/shotgun/flash -/obj/item/gun/projectile/flare/examine(mob/user, distance) +/obj/item/gun/projectile/flare/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 2 && loaded.len) - to_chat(user, "\A [loaded[1]] is chambered.") + . += "\A [loaded[1]] is chambered." /obj/item/gun/projectile/flare/special_check() if(loaded.len && !istype(loaded[1], /obj/item/ammo_casing/shotgun/flash)) diff --git a/code/modules/projectiles/secure.dm b/code/modules/projectiles/secure.dm index 6902b3bddb1e..a9196955008e 100644 --- a/code/modules/projectiles/secure.dm +++ b/code/modules/projectiles/secure.dm @@ -21,10 +21,10 @@ global.registered_weapons -= src . = ..() -/obj/item/gun/examine(mob/user, distance) +/obj/item/gun/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 0 && is_secure_gun()) - to_chat(user, "The registration screen shows, \"" + (registered_owner ? "[registered_owner]" : "unregistered") + "\".") + . += "The registration screen shows, \"" + (registered_owner ? "[registered_owner]" : "unregistered") + "\"." /obj/item/gun/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/card/id) && is_secure_gun()) diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm index 926ed6b2d0bd..7c81af16f087 100644 --- a/code/modules/random_map/drop/droppod.dm +++ b/code/modules/random_map/drop/droppod.dm @@ -124,7 +124,7 @@ get_spawned_drop(T) /datum/random_map/droppod/proc/get_spawned_drop(var/turf/T) - var/obj/structure/bed/chair/C = new(T) + var/obj/structure/chair/C = new(T) C.set_light(3, 1, l_color = "#cc0000") var/mob/living/drop // This proc expects a list of mobs to be passed to the spawner. diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm index a9331ed90971..37b952fd2839 100644 --- a/code/modules/random_map/random_map.dm +++ b/code/modules/random_map/random_map.dm @@ -22,7 +22,7 @@ var/global/list/map_count = list() // Turf paths. var/wall_type = /turf/wall - var/floor_type = /turf/floor + var/floor_type = /turf/floor/plating // Turf type to act on when applying this map. Set to TRUE to use world.turf, or a path to use a specific turf subtype. var/target_turf_type diff --git a/code/modules/reagents/chems/chems_alcohol.dm b/code/modules/reagents/chems/chems_alcohol.dm index 505354b4d30f..b218183a818c 100644 --- a/code/modules/reagents/chems/chems_alcohol.dm +++ b/code/modules/reagents/chems/chems_alcohol.dm @@ -479,9 +479,9 @@ var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(H, BP_HEART) if(heart) if(dose < 120) - heart.take_internal_damage(10 * removed, 0) + heart.take_damage(10 * removed, 0) else - heart.take_internal_damage(100, 0) + heart.take_damage(100, 0) /decl/material/liquid/alcohol/aged_whiskey // I have no idea what this is and where it comes from. //It comes from Dinnlan now name = "aged whiskey" diff --git a/code/modules/reagents/chems/chems_compounds.dm b/code/modules/reagents/chems/chems_compounds.dm index 45a828e3a60c..154c6eb59ca4 100644 --- a/code/modules/reagents/chems/chems_compounds.dm +++ b/code/modules/reagents/chems/chems_compounds.dm @@ -181,17 +181,17 @@ var/effective_strength = 5 for(var/slot in global.standard_headgear_slots) - var/obj/item/I = M.get_equipped_item(slot) - if(istype(I)) - if(I.body_parts_covered & SLOT_EYES) + var/obj/item/thing = M.get_equipped_item(slot) + if(istype(thing)) + if(thing.body_parts_covered & SLOT_EYES) eyes_covered = 1 - eye_protection = I.name - if((I.body_parts_covered & SLOT_FACE) && !(I.item_flags & ITEM_FLAG_FLEXIBLEMATERIAL)) + eye_protection = thing.name + if((thing.body_parts_covered & SLOT_FACE) && !(thing.item_flags & ITEM_FLAG_FLEXIBLEMATERIAL)) mouth_covered = 1 - face_protection = I.name - else if(I.body_parts_covered & SLOT_FACE) + face_protection = thing.name + else if(thing.body_parts_covered & SLOT_FACE) partial_mouth_covered = 1 - partial_face_protection = I.name + partial_face_protection = thing.name if(eyes_covered) if(!mouth_covered) @@ -401,9 +401,9 @@ M.heal_organ_damage(30 * removed, 30 * removed, affect_robo = 1) if(ishuman(M)) var/mob/living/human/H = M - for(var/obj/item/organ/internal/I in H.get_internal_organs()) - if(BP_IS_PROSTHETIC(I)) - I.heal_damage(20*removed) + for(var/obj/item/organ/internal/organ in H.get_internal_organs()) + if(BP_IS_PROSTHETIC(organ)) + organ.heal_damage(20*removed) /decl/material/liquid/antiseptic name = "antiseptic" @@ -455,19 +455,19 @@ new /obj/item/shard(get_turf(E), result_mat) E.dismember(0, DISMEMBER_METHOD_BLUNT) else - E.take_external_damage(rand(20,30), 0) + E.take_damage(rand(20,30)) BP_SET_CRYSTAL(E) E.status |= ORGAN_BRITTLE break var/list/internal_organs = H.get_internal_organs() var/list/shuffled_organs = LAZYLEN(internal_organs) ? shuffle(internal_organs.Copy()) : null - for(var/obj/item/organ/internal/I in shuffled_organs) - if(BP_IS_PROSTHETIC(I) || !BP_IS_CRYSTAL(I) || I.damage <= 0 || I.organ_tag == BP_BRAIN) + for(var/obj/item/organ/internal/organ in shuffled_organs) + if(BP_IS_PROSTHETIC(organ) || !BP_IS_CRYSTAL(organ) || organ.get_organ_damage() <= 0 || organ.organ_tag == BP_BRAIN) continue if(prob(35)) - to_chat(M, SPAN_NOTICE("You feel a deep, sharp tugging sensation as your [I.name] is mended.")) - I.heal_damage(rand(1,3)) + to_chat(M, SPAN_NOTICE("You feel a deep, sharp tugging sensation as your [organ.name] is mended.")) + organ.heal_damage(rand(1,3)) break else to_chat(M, SPAN_DANGER("Your flesh is being lacerated from within!")) diff --git a/code/modules/reagents/chems/chems_drinks.dm b/code/modules/reagents/chems/chems_drinks.dm index 51539ecf078e..b9ea85a8a9c7 100644 --- a/code/modules/reagents/chems/chems_drinks.dm +++ b/code/modules/reagents/chems/chems_drinks.dm @@ -582,8 +582,8 @@ /decl/material/liquid/drink/cola/build_presentation_name_from_reagents(var/obj/item/prop, var/supplied) if(prop.reagents.has_reagent(/decl/material/liquid/drink/milk)) - . = "pilk" - . = ..(prop, .) + supplied = "pilk" + . = ..() /decl/material/liquid/drink/citrussoda name = "citrus soda" diff --git a/code/modules/reagents/chems/chems_medicines.dm b/code/modules/reagents/chems/chems_medicines.dm index 7b8357a17675..12e16eef954d 100644 --- a/code/modules/reagents/chems/chems_medicines.dm +++ b/code/modules/reagents/chems/chems_medicines.dm @@ -12,13 +12,11 @@ /decl/material/liquid/eyedrops/affect_blood(var/mob/living/M, var/removed, var/datum/reagents/holder) . = ..() - if(ishuman(M)) - var/mob/living/human/H = M - var/obj/item/organ/internal/E = GET_INTERNAL_ORGAN(H, BP_EYES) - if(E && istype(E) && !E.is_broken()) - ADJ_STATUS(M, STAT_BLURRY, -5) - ADJ_STATUS(M, STAT_BLIND, -5) - E.damage = max(E.damage - 5 * removed, 0) + var/obj/item/organ/internal/eyes = GET_INTERNAL_ORGAN(M, BP_EYES) + if(istype(eyes) && !eyes.is_broken()) + ADJ_STATUS(M, STAT_BLURRY, -5) + ADJ_STATUS(M, STAT_BLIND, -5) + eyes.adjust_organ_damage(-(5 * removed)) /decl/material/liquid/antirads name = "antirads" @@ -298,7 +296,7 @@ var/mob/living/human/H = M if(H.resuscitate()) var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(H, BP_HEART) - heart.take_internal_damage(heart.max_damage * 0.15) + heart.take_damage(heart.max_damage * 0.15) /decl/material/liquid/stabilizer name = "stabilizer" @@ -381,15 +379,15 @@ /decl/material/liquid/clotting_agent/affect_blood(mob/living/M, removed, datum/reagents/holder) SET_STATUS_MAX(M, STAT_BLURRY, 30) M.add_chemical_effect(CE_BLOCKAGE, (15 + REAGENT_VOLUME(holder, type))/100) - for(var/obj/item/organ/external/E in M.get_external_organs()) - if(!(E.status & (ORGAN_ARTERY_CUT|ORGAN_BLEEDING)) || !prob(2 + REAGENT_VOLUME(holder, type))) + for(var/obj/item/organ/external/limb in M.get_external_organs()) + if(!(limb.status & (ORGAN_ARTERY_CUT|ORGAN_BLEEDING)) || !prob(2 + REAGENT_VOLUME(holder, type))) continue - if(E.status & ORGAN_ARTERY_CUT) - E.status &= ~ORGAN_ARTERY_CUT + if(limb.status & ORGAN_ARTERY_CUT) + limb.status &= ~ORGAN_ARTERY_CUT break - if(E.status & ORGAN_BLEEDING) + if(limb.status & ORGAN_BLEEDING) var/closed_wound = FALSE - for(var/datum/wound/W in E.wounds) + for(var/datum/wound/W in limb.wounds) if(W.bleeding() && !W.clamped) W.clamped = TRUE closed_wound = TRUE @@ -401,7 +399,7 @@ /decl/material/liquid/clotting_agent/affect_overdose(mob/living/victim, total_dose) var/obj/item/organ/internal/heart = GET_INTERNAL_ORGAN(victim, BP_HEART) if(heart && prob(25)) - heart.take_general_damage(rand(1,3)) + heart.take_damage(rand(1,3)) return ..() #define DETOXIFIER_EFFECTIVENESS 6 // 6u of opiates removed per 1u of detoxifier; 5u is enough to remove 30u, i.e. an overdose diff --git a/code/modules/reagents/dispenser/cartridge.dm b/code/modules/reagents/dispenser/cartridge.dm index 62f5d50a7e32..60c0df079836 100644 --- a/code/modules/reagents/dispenser/cartridge.dm +++ b/code/modules/reagents/dispenser/cartridge.dm @@ -15,15 +15,15 @@ if(populate && reagents.primary_reagent) setLabel(reagents.get_primary_reagent_name()) -/obj/item/chems/chem_disp_cartridge/examine(mob/user) +/obj/item/chems/chem_disp_cartridge/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It has a capacity of [volume] units.") + . += "It has a capacity of [volume] units." if(reagents.total_volume <= 0) - to_chat(user, "It is empty.") + . += "It is empty." else - to_chat(user, "It contains [reagents.total_volume] units of reagents.") + . += "It contains [reagents.total_volume] units of reagents." if(!ATOM_IS_OPEN_CONTAINER(src)) - to_chat(user, "The cap is sealed.") + . += "The cap is sealed." /obj/item/chems/chem_disp_cartridge/verb/verb_set_label(L as text) set name = "Set Cartridge Label" diff --git a/code/modules/reagents/dispenser/dispenser2.dm b/code/modules/reagents/dispenser/dispenser2.dm index 668594fcd717..696dab904873 100644 --- a/code/modules/reagents/dispenser/dispenser2.dm +++ b/code/modules/reagents/dispenser/dispenser2.dm @@ -42,9 +42,9 @@ for(var/type in spawn_cartridges) add_cartridge(new type(src)) -/obj/machinery/chemical_dispenser/examine(mob/user) +/obj/machinery/chemical_dispenser/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more.") + . += "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more." /obj/machinery/chemical_dispenser/proc/add_cartridge(obj/item/chems/chem_disp_cartridge/C, mob/user) . = FALSE diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index de18007e761a..7b669a97daea 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -137,15 +137,15 @@ if(user.get_target_zone() != BP_MOUTH) //in case it is ever used as a surgery tool return ..() -/obj/item/chems/examine(mob/user) +/obj/item/chems/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(!reagents) return if(hasHUD(user, HUD_SCIENCE)) var/prec = user.skill_fail_chance(SKILL_CHEMISTRY, 10) - to_chat(user, SPAN_NOTICE("\The [src] contains: [reagents.get_reagents(precision = prec)].")) + . += SPAN_NOTICE("\The [src] contains: [reagents.get_reagents(precision = prec)].") else if((loc == user) && user.skill_check(SKILL_CHEMISTRY, SKILL_EXPERT)) - to_chat(user, SPAN_NOTICE("Using your chemistry knowledge, you identify the following reagents in \the [src]: [reagents.get_reagents(!user.skill_check(SKILL_CHEMISTRY, SKILL_PROF), 5)].")) + . += SPAN_NOTICE("Using your chemistry knowledge, you identify the following reagents in \the [src]: [reagents.get_reagents(!user.skill_check(SKILL_CHEMISTRY, SKILL_PROF), 5)].") /obj/item/chems/shatter(consumed) //Skip splashing if we are in nullspace, since splash isn't null guarded diff --git a/code/modules/reagents/reagent_containers/_glass.dm b/code/modules/reagents/reagent_containers/_glass.dm index f381c8a44bba..7881f84ead3a 100644 --- a/code/modules/reagents/reagent_containers/_glass.dm +++ b/code/modules/reagents/reagent_containers/_glass.dm @@ -43,17 +43,16 @@ ) return _can_be_placed_into -/obj/item/chems/glass/examine(mob/user, distance) +/obj/item/chems/glass/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 2) return - if(reagents?.total_volume) - to_chat(user, SPAN_NOTICE("It contains [reagents.total_volume] units of reagents.")) + . += SPAN_NOTICE("It contains [reagents.total_volume] units of reagents.") else - to_chat(user, SPAN_NOTICE("It is empty.")) + . += SPAN_NOTICE("It is empty.") if(!ATOM_IS_OPEN_CONTAINER(src)) - to_chat(user,SPAN_NOTICE("The airtight lid seals it completely.")) + . += SPAN_NOTICE("The airtight lid seals it completely.") /obj/item/chems/glass/proc/can_lid() return TRUE @@ -64,6 +63,32 @@ var/decl/material/drinking = reagents.get_primary_reagent_decl() return drinking ? !drinking.is_unsafe_to_drink(drinker) : FALSE +#ifdef UNIT_TEST +// Will get generated during atom creation/deletion tests so no need for a distinct unit test. +var/global/list/lid_check_glass_types = list() +/obj/item/chems/glass/Initialize() + . = ..() + if(can_lid() && !global.lid_check_glass_types[type]) + if(!check_state_in_icon("[icon_state]_lid", icon)) + log_error("Liddable vessel [type] missing lid state from [icon]!") + global.lid_check_glass_types[type] = TRUE +#endif + +/obj/item/chems/glass/on_update_icon() + . = ..() + update_overlays() + compile_overlays() + +/obj/item/chems/glass/proc/get_lid_color() + return COLOR_WHITE + +/obj/item/chems/glass/proc/get_lid_flags() + return RESET_COLOR | RESET_ALPHA + +/obj/item/chems/glass/proc/update_overlays() + if (can_lid() && !ATOM_IS_OPEN_CONTAINER(src)) + add_overlay(overlay_image(icon, "[icon_state]_lid", get_lid_color(), get_lid_flags())) + /obj/item/chems/glass/attack_self(mob/user) if(can_lid() && user.check_intent(I_FLAG_HELP)) diff --git a/code/modules/reagents/reagent_containers/beaker.dm b/code/modules/reagents/reagent_containers/beaker.dm index 3a769fdec137..0a00f0f60664 100644 --- a/code/modules/reagents/reagent_containers/beaker.dm +++ b/code/modules/reagents/reagent_containers/beaker.dm @@ -1,4 +1,3 @@ - /obj/item/chems/glass/beaker name = "beaker" desc = "A beaker." @@ -11,9 +10,12 @@ presentation_flags = PRESENTATION_FLAG_NAME var/lid_color = COLOR_BEASTY_BROWN -/obj/item/chems/glass/beaker/examine(mob/user, distance) +/obj/item/chems/glass/beaker/get_lid_color() + return lid_color + +/obj/item/chems/glass/beaker/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, " It can hold up to [volume] units.") + . += "It can hold up to [volume] units." /obj/item/chems/glass/beaker/on_picked_up(mob/user) . = ..() @@ -27,9 +29,7 @@ . = ..() update_icon() -/obj/item/chems/glass/beaker/on_update_icon() - . = ..() - cut_overlays() +/obj/item/chems/glass/beaker/update_overlays() if(reagents?.total_volume) var/image/filling = mutable_appearance(icon, "[icon_state]1", reagents.get_color()) @@ -53,8 +53,7 @@ shine.alpha = material.reflectiveness * 3 add_overlay(shine) - if (!ATOM_IS_OPEN_CONTAINER(src)) - add_overlay(mutable_appearance(icon, "[icon_state]_lid", lid_color)) + . = ..() compile_overlays() @@ -105,6 +104,9 @@ obj_flags = OBJ_FLAG_HOLLOW | OBJ_FLAG_INSULATED_HANDLE material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME | MAT_FLAG_ALTERATION_DESC +/obj/item/chems/glass/beaker/kettle/can_lid() + return FALSE + /obj/item/chems/glass/beaker/noreact name = "cryostasis beaker" desc = "A cryostasis beaker that allows for chemical storage without reactions." diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 862b3d655059..bf1306f42ce1 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -107,13 +107,12 @@ to_chat(user, "Synthesizer is now producing '[initial(R.name)]'.") return TOPIC_REFRESH -/obj/item/chems/borghypo/examine(mob/user, distance) +/obj/item/chems/borghypo/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 2) return - var/decl/material/R = reagent_ids[mode] - to_chat(user, "It is currently producing [initial(R.name)] and has [reagent_volumes[reagent_ids[mode]]] out of [volume] units left.") + . += SPAN_NOTICE("It is currently producing [initial(R.name)] and has [reagent_volumes[reagent_ids[mode]]] out of [volume] units left.") /obj/item/chems/borghypo/service name = "cyborg drink synthesizer" diff --git a/code/modules/reagents/reagent_containers/bucket.dm b/code/modules/reagents/reagent_containers/bucket.dm index e2e5c9f2e56d..8ff3971d56fc 100644 --- a/code/modules/reagents/reagent_containers/bucket.dm +++ b/code/modules/reagents/reagent_containers/bucket.dm @@ -15,6 +15,13 @@ drop_sound = 'sound/foley/donk1.ogg' pickup_sound = 'sound/foley/pickup2.ogg' +/obj/item/chems/glass/bucket/proc/get_handle_overlay() + return overlay_image(icon, "[icon_state]-handle", COLOR_WHITE, RESET_COLOR) + +/obj/item/chems/glass/bucket/update_overlays() + add_overlay(get_handle_overlay()) + . = ..() + /obj/item/chems/glass/bucket/get_edible_material_amount(mob/eater) return 0 @@ -34,11 +41,6 @@ return TRUE return ..() -/obj/item/chems/glass/bucket/on_update_icon() - . = ..() - if (!ATOM_IS_OPEN_CONTAINER(src)) - add_overlay("lid_[initial(icon_state)]") - /obj/item/chems/glass/bucket/get_reagents_overlay(state_prefix) if(!ATOM_IS_OPEN_CONTAINER(src)) return null // no overlay while closed! @@ -70,9 +72,12 @@ overlay.add_overlay(overlay_image(icon, "[overlay.icon_state]_overlay", rivet_material.get_reagent_color(), RESET_COLOR | RESET_ALPHA)) return ..() -/obj/item/chems/glass/bucket/wood/on_update_icon() +/obj/item/chems/glass/bucket/wood/update_overlays() . = ..() add_overlay(overlay_image(icon, "[icon_state]_overlay", rivet_material.get_reagent_color(), RESET_COLOR | RESET_ALPHA)) +/obj/item/chems/glass/bucket/wood/get_handle_overlay() + return overlay_image(icon, "[icon_state]-handle", rivet_material.get_reagent_color(), RESET_COLOR | RESET_ALPHA) + /obj/item/chems/glass/bucket/wood/can_lid() - return FALSE // todo: add lid sprite? \ No newline at end of file + return FALSE // todo: add lid sprite? diff --git a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm index 386ad49b09a5..6bc197a3de5f 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm @@ -32,6 +32,12 @@ var/global/const/DRINK_ICON_NOISY = "noise" var/custom_name var/custom_desc +/obj/item/chems/drinks/glass2/update_name() + if(custom_name) + SetName(custom_name) + return + return ..() + // Reverse the matter effect of the hollow flag, keep the force effect. // Glasses are so tiny that their effective matter is ten times lower than forks/knives due to OBJ_FLAG_HOLLOW. /obj/item/chems/drinks/glass2/get_matter_amount_modifier() @@ -94,7 +100,7 @@ var/global/const/DRINK_ICON_NOISY = "noise" return FALSE return TRUE -/obj/item/chems/drinks/glass2/examine(mob/user, distance) +/obj/item/chems/drinks/glass2/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(!istype(user)) return @@ -106,14 +112,13 @@ var/global/const/DRINK_ICON_NOISY = "noise" else if(istype(extra, /obj/item/food/processed_grown/slice)) LAZYADD(extra_text, "There is \a [extra] on the rim.") else - to_chat(user, "There is \a [extra] somewhere on the glass. Somehow.") + . += "There is \a [extra] somewhere on the glass. Somehow." if(length(extra_text)) - to_chat(user, SPAN_NOTICE(jointext(extra_text," "))) + . += SPAN_NOTICE(jointext(extra_text," ")) if(has_ice()) - to_chat(user, "There is some ice floating in the drink.") + . += "There is some ice floating in the drink." if(has_fizz()) - to_chat(user, "It is fizzing slightly.") - + . += "It is fizzing slightly." /obj/item/chems/drinks/glass2/proc/get_filling_overlay(amount, overlay) var/image/I = new() diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm b/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm index ccff0201716f..d7e62d41dae3 100644 --- a/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm +++ b/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm @@ -50,7 +50,6 @@ icon = 'icons/obj/drink_glasses/shot.dmi' filling_states = @"[33,66,100]" volume = 5 - material = /decl/material/solid/glass possible_transfer_amounts = @"[1,2,5]" rim_pos = @'{"y":17,"x_left":13,"x_right":21}' @@ -61,7 +60,6 @@ icon = 'icons/obj/drink_glasses/pint.dmi' filling_states = @"[16,33,50,66,83,100]" volume = 60 - material = /decl/material/solid/glass possible_transfer_amounts = @"[5,10,15,30,60]" rim_pos = @'{"y":25,"x_left":12,"x_right":21}' @@ -106,7 +104,6 @@ icon = 'icons/obj/drink_glasses/carafe.dmi' filling_states = @"[10,20,30,40,50,60,70,80,90,100]" volume = 120 - material = /decl/material/solid/glass possible_transfer_amounts = @"[5,10,15,30,60,120]" rim_pos = @'{"y":26,"x_left":12,"x_right":21}' center_of_mass = @'{"x":16,"y":7}' diff --git a/code/modules/reagents/reagent_containers/drinks.dm b/code/modules/reagents/reagent_containers/drinks.dm index d80b593cf60f..73f240c3b34f 100644 --- a/code/modules/reagents/reagent_containers/drinks.dm +++ b/code/modules/reagents/reagent_containers/drinks.dm @@ -63,20 +63,20 @@ /obj/item/chems/drinks/standard_pour_into(var/mob/user, var/atom/target) return do_open_check(user) && ..() -/obj/item/chems/drinks/examine(mob/user, distance) +/obj/item/chems/drinks/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 1) return if(!reagents || reagents.total_volume == 0) - to_chat(user, SPAN_NOTICE("\The [src] is empty!")) + . += SPAN_NOTICE("\The [src] is empty!") else if (reagents.total_volume <= volume * 0.25) - to_chat(user, SPAN_NOTICE("\The [src] is almost empty!")) + . += SPAN_NOTICE("\The [src] is almost empty!") else if (reagents.total_volume <= volume * 0.66) - to_chat(user, SPAN_NOTICE("\The [src] is half full!")) + . += SPAN_NOTICE("\The [src] is half full!") else if (reagents.total_volume <= volume * 0.90) - to_chat(user, SPAN_NOTICE("\The [src] is almost full!")) + . += SPAN_NOTICE("\The [src] is almost full!") else - to_chat(user, SPAN_NOTICE("\The [src] is full!")) + . += SPAN_NOTICE("\The [src] is full!") /obj/item/chems/drinks/proc/get_filling_state() var/percent = round((reagents.total_volume / volume) * 100) diff --git a/code/modules/reagents/reagent_containers/drinks/juicebox.dm b/code/modules/reagents/reagent_containers/drinks/juicebox.dm index 92cbf0ea8855..fc558edf2991 100644 --- a/code/modules/reagents/reagent_containers/drinks/juicebox.dm +++ b/code/modules/reagents/reagent_containers/drinks/juicebox.dm @@ -52,12 +52,12 @@ appearance = new_appearance -/obj/item/chems/drinks/juicebox/examine(mob/user, distance) +/obj/item/chems/drinks/juicebox/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(atom_flags & ATOM_FLAG_OPEN_CONTAINER) - to_chat(user, SPAN_NOTICE("It has a straw stuck through the foil seal on top.")) + . += SPAN_NOTICE("It has a straw stuck through the foil seal on top.") else - to_chat(user, SPAN_NOTICE("It has a straw stuck to the side and the foil seal is intact.")) + . += SPAN_NOTICE("It has a straw stuck to the side and the foil seal is intact.") /obj/item/chems/drinks/juicebox/open(mob/user) playsound(loc,'sound/effects/bonebreak1.ogg', rand(10,50), 1) diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm index bb8ea65e64bb..e762458818d5 100644 --- a/code/modules/reagents/reagent_containers/dropper.dm +++ b/code/modules/reagents/reagent_containers/dropper.dm @@ -56,8 +56,8 @@ admin_attack_log(user, M, "Squirted their victim with \a [src] (Reagents: [contained])", "Were squirted with \a [src] (Reagents: [contained])", "used \a [src] (Reagents: [contained]) to squirt at") var/spill_amt = M.incapacitated()? 0 : 30 - trans += reagents.splash(target, reagents.total_volume/2, max_spill = spill_amt) - trans += reagents.trans_to_mob(target, reagents.total_volume/2, CHEM_INJECT) //I guess it gets into the bloodstream through the eyes or something + trans += reagents.splash(M, reagents.total_volume/2, max_spill = spill_amt) + trans += reagents.trans_to_mob(M, reagents.total_volume/2, CHEM_INJECT) //I guess it gets into the bloodstream through the eyes or something user.visible_message(SPAN_DANGER("[user] squirts something into \the [target]'s eyes!"), SPAN_DANGER("You squirt [trans] unit\s into \the [target]'s eyes!")) return else diff --git a/code/modules/reagents/reagent_containers/food.dm b/code/modules/reagents/reagent_containers/food.dm index 55309ff3d2cc..0d8435d02954 100644 --- a/code/modules/reagents/reagent_containers/food.dm +++ b/code/modules/reagents/reagent_containers/food.dm @@ -105,26 +105,22 @@ /obj/item/food/dragged_onto(var/mob/user) return attack_self(user) -/obj/item/food/examine(mob/user, distance) +/obj/item/food/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(distance > 1) return - if(backyard_grilling_rawness > 0 && backyard_grilling_rawness != initial(backyard_grilling_rawness)) - to_chat(user, "\The [src] is [get_backyard_grilling_text()].") - + . += "\The [src] is [get_backyard_grilling_text()]." if(plate) - to_chat(user, SPAN_NOTICE("\The [src] has been arranged on \a [plate].")) - + . += SPAN_NOTICE("\The [src] has been arranged on \a [plate].") if (bitecount==0) return else if (bitecount==1) - to_chat(user, SPAN_NOTICE("\The [src] was bitten by someone!")) + . += SPAN_NOTICE("\The [src] was bitten by someone!") else if (bitecount<=3) - to_chat(user, SPAN_NOTICE("\The [src] was bitten [bitecount] time\s!")) + . += SPAN_NOTICE("\The [src] was bitten [bitecount] time\s!") else - to_chat(user, SPAN_NOTICE("\The [src] was bitten multiple times!")) + . += SPAN_NOTICE("\The [src] was bitten multiple times!") /obj/item/food/proc/is_sliceable() return (slice_num && slice_path && slice_num > 0) diff --git a/code/modules/reagents/reagent_containers/food/canned/_canned.dm b/code/modules/reagents/reagent_containers/food/canned/_canned.dm index 63fa762a18d6..0959b584dbcd 100644 --- a/code/modules/reagents/reagent_containers/food/canned/_canned.dm +++ b/code/modules/reagents/reagent_containers/food/canned/_canned.dm @@ -19,10 +19,10 @@ if(!sealed) unseal() -/obj/item/food/can/examine(mob/user) +/obj/item/food/can/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It is [!ATOM_IS_OPEN_CONTAINER(src) ? "" : "un"]sealed.") - to_chat(user, "It looks [open_complexity ? "hard" : "easy "] to open.") + . += "It is [!ATOM_IS_OPEN_CONTAINER(src) ? "" : "un"]sealed." + . += "It looks [open_complexity ? "hard" : "easy "] to open." /obj/item/food/can/proc/unseal(mob/user) playsound(src, 'sound/effects/canopen.ogg', rand(10, 50), 1) diff --git a/code/modules/reagents/reagent_containers/food/meat/cubes.dm b/code/modules/reagents/reagent_containers/food/meat/cubes.dm index ccad0f203228..13f680708778 100644 --- a/code/modules/reagents/reagent_containers/food/meat/cubes.dm +++ b/code/modules/reagents/reagent_containers/food/meat/cubes.dm @@ -75,7 +75,7 @@ target.visible_message(SPAN_DANGER("A screeching creature bursts out of \the [target]!")) var/obj/item/organ/external/organ = GET_EXTERNAL_ORGAN(target, BP_CHEST) if(organ) - organ.take_external_damage(50, 0, 0, "Animal escaping the ribcage") + organ.take_damage(50, inflicter = "Animal escaping the ribcage") spawn_creature(get_turf(target)) /obj/item/food/animal_cube/on_reagent_change() diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm index ca69321a7499..a3451736dbde 100644 --- a/code/modules/reagents/reagent_containers/food/sandwich.dm +++ b/code/modules/reagents/reagent_containers/food/sandwich.dm @@ -83,10 +83,10 @@ qdel(O) return ..() -/obj/item/food/csandwich/examine(mob/user) +/obj/item/food/csandwich/get_examine_strings(mob/user, distance, infix, suffix) . = ..(user) var/obj/item/O = pick(contents) - to_chat(user, "You think you can see [O.name] in there.") + . += SPAN_WARNING("You think you can see [O.name] in there.") /obj/item/food/csandwich/use_on_mob(mob/living/target, mob/living/user, animate = TRUE) var/obj/item/shard = locate() in get_contained_external_atoms() // grab early in case of qdele diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm index 12f89307eb5f..094887c87ac4 100644 --- a/code/modules/reagents/reagent_containers/glass/bottle.dm +++ b/code/modules/reagents/reagent_containers/glass/bottle.dm @@ -22,6 +22,9 @@ var/lid_color = COLOR_GRAY80 var/autolabel = TRUE // if set, will add label with the name of the first initial reagent +/obj/item/chems/glass/bottle/get_lid_color() + return lid_color + /obj/item/chems/glass/bottle/on_picked_up(mob/user) . = ..() update_icon() @@ -34,30 +37,20 @@ . = ..() update_icon() -/obj/item/chems/glass/bottle/on_update_icon() - . = ..() - cut_overlays() - +/obj/item/chems/glass/bottle/update_overlays() if(reagents?.total_volume) var/percent = round(reagents.total_volume / volume * 100, 25) add_overlay(mutable_appearance(icon, "[icon_state]_filling_[percent]", reagents.get_color())) - var/image/overglass = mutable_appearance(icon, "[icon_state]_over", color) overglass.alpha = alpha * ((alpha/255) ** 3) add_overlay(overglass) - if(material.reflectiveness >= MAT_VALUE_SHINY) var/mutable_appearance/shine = mutable_appearance(icon, "[icon_state]_shine", adjust_brightness(color, 20 + material.reflectiveness)) shine.alpha = material.reflectiveness * 3 add_overlay(shine) - if(label_text) add_overlay(mutable_appearance(icon, "[icon_state]_label", label_color)) - - if (!ATOM_IS_OPEN_CONTAINER(src)) - add_overlay(mutable_appearance(icon, "[icon_state]_lid", lid_color)) - - compile_overlays() + . = ..() /obj/item/chems/glass/bottle/Initialize() . = ..() diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 70dc6661c2a2..98b6ee139ba9 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -203,12 +203,12 @@ if(reagents?.total_volume <= 0) icon_state = "[icon_state]_used" -/obj/item/chems/hypospray/autoinjector/examine(mob/user) +/obj/item/chems/hypospray/autoinjector/get_examine_strings(mob/user, distance, infix, suffix) . = ..(user) if(reagents?.total_volume) - to_chat(user, SPAN_NOTICE("It is currently loaded.")) + . += SPAN_NOTICE("It is currently loaded.") else - to_chat(user, SPAN_NOTICE("It is spent.")) + . += SPAN_NOTICE("It is spent.") //////////////////////////////////////////////////////////////////////////////// // Autoinjector - Stabilizer diff --git a/code/modules/reagents/reagent_containers/inhaler.dm b/code/modules/reagents/reagent_containers/inhaler.dm index 19eaaa9cd1d0..69bd0710eaec 100644 --- a/code/modules/reagents/reagent_containers/inhaler.dm +++ b/code/modules/reagents/reagent_containers/inhaler.dm @@ -109,10 +109,10 @@ return TRUE . = ..() -/obj/item/chems/inhaler/examine(mob/user, distance) +/obj/item/chems/inhaler/get_examine_strings(mob/user, distance, infix, suffix) . = ..(user) if(distance <= 1) if(reagents.total_volume > 0) - to_chat(user, SPAN_NOTICE("It is currently loaded.")) + . += SPAN_NOTICE("It is currently loaded.") else - to_chat(user, SPAN_WARNING("It is spent.")) + . += SPAN_WARNING("It is spent.") diff --git a/code/modules/reagents/reagent_containers/mortar.dm b/code/modules/reagents/reagent_containers/mortar.dm index b19a7340e236..edff209c0810 100644 --- a/code/modules/reagents/reagent_containers/mortar.dm +++ b/code/modules/reagents/reagent_containers/mortar.dm @@ -15,6 +15,9 @@ return return try_grind(using_item, user) +/obj/item/chems/glass/mortar/can_lid() + return FALSE + /obj/item/chems/glass/mortar/proc/try_grind(obj/item/using_item, mob/living/user) if(!istype(using_item)) return FALSE diff --git a/code/modules/reagents/reagent_containers/retort.dm b/code/modules/reagents/reagent_containers/retort.dm index 0b78d727e24e..a8d69a6ce6a5 100644 --- a/code/modules/reagents/reagent_containers/retort.dm +++ b/code/modules/reagents/reagent_containers/retort.dm @@ -8,14 +8,16 @@ material = /decl/material/solid/glass material_alteration = MAT_FLAG_ALTERATION_ALL +/obj/item/chems/glass/retort/can_lid() + return FALSE + /obj/item/chems/glass/retort/copper material = /decl/material/solid/metal/copper /obj/item/chems/glass/retort/earthenware material = /decl/material/solid/stone/pottery -/obj/item/chems/glass/retort/on_update_icon() - . = ..() +/obj/item/chems/glass/retort/update_overlays() if(reagents?.total_volume && (!material || material.opacity < 1)) for(var/reagent in reagents.reagent_volumes) var/decl/material/mat = GET_DECL(reagent) @@ -23,6 +25,7 @@ add_overlay(overlay_image(icon, "[icon_state]-fill-boil", reagents.get_color(), (RESET_ALPHA|RESET_COLOR))) return add_overlay(overlay_image(icon, "[icon_state]-fill", reagents.get_color(), (RESET_ALPHA|RESET_COLOR))) + . = ..() /obj/item/chems/glass/retort/on_reagent_change() . = ..() diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index c3b4cbd9ff8e..400f96445fd3 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -99,12 +99,12 @@ safety = !safety to_chat(user, SPAN_NOTICE("You switch the safety [safety ? "on" : "off"].")) -/obj/item/chems/spray/examine(mob/user, distance) +/obj/item/chems/spray/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(loc == user) - to_chat(user, "[round(reagents.total_volume)] unit\s left.") + . += "[round(reagents.total_volume)] unit\s left." if(has_safety() && distance <= 1) - to_chat(user, "The safety is [safety ? "on" : "off"].") + . += "The safety is [safety ? "on" : "off"]." /obj/item/chems/spray/get_alt_interactions(mob/user) . = ..() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 778ed37be452..3e6f4ac50d7f 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -59,32 +59,28 @@ if(. && unwrenched) leak() -/obj/structure/reagent_dispensers/examine(mob/user, distance) +/obj/structure/reagent_dispensers/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(unwrenched) - to_chat(user, SPAN_WARNING("Someone has wrenched open its tap - it's spilling everywhere!")) - + . += SPAN_WARNING("Someone has wrenched open its tap - it's spilling everywhere!") if(distance <= 2) - if(wrenchable) if(ATOM_IS_OPEN_CONTAINER(src)) - to_chat(user, "Its refilling cap is open.") + . += "Its refilling cap is open." else - to_chat(user, "Its refilling cap is closed.") - - to_chat(user, SPAN_NOTICE("It contains:")) + . += "Its refilling cap is closed." + . += SPAN_NOTICE("It contains:") if(LAZYLEN(reagents?.reagent_volumes)) for(var/rtype in reagents.liquid_volumes) var/decl/material/R = GET_DECL(rtype) - to_chat(user, SPAN_NOTICE("[LIQUID_VOLUME(reagents, rtype)] unit\s of [R.get_reagent_name(reagents, MAT_PHASE_LIQUID)].")) + . += SPAN_NOTICE("[LIQUID_VOLUME(reagents, rtype)] unit\s of [R.get_reagent_name(reagents, MAT_PHASE_LIQUID)].") for(var/rtype in reagents.solid_volumes) var/decl/material/R = GET_DECL(rtype) - to_chat(user, SPAN_NOTICE("[SOLID_VOLUME(reagents, rtype)] unit\s of [R.get_reagent_name(reagents, MAT_PHASE_SOLID)].")) + . += SPAN_NOTICE("[SOLID_VOLUME(reagents, rtype)] unit\s of [R.get_reagent_name(reagents, MAT_PHASE_SOLID)].") else - to_chat(user, SPAN_NOTICE("Nothing.")) - + . += SPAN_NOTICE("Nothing.") if(reagents?.maximum_volume) - to_chat(user, "It may contain up to [reagents.maximum_volume] unit\s of fluid.") + . += "It may contain up to [reagents.maximum_volume] unit\s of fluid." /obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user) @@ -170,10 +166,10 @@ /obj/structure/reagent_dispensers/fueltank/populate_reagents() add_to_reagents(/decl/material/liquid/fuel, reagents.maximum_volume) -/obj/structure/reagent_dispensers/fueltank/examine(mob/user, distance) +/obj/structure/reagent_dispensers/fueltank/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(rig && distance < 2) - to_chat(user, SPAN_WARNING("There is some kind of device rigged to the tank.")) + . += SPAN_WARNING("There is some kind of device rigged to the tank.") /obj/structure/reagent_dispensers/fueltank/attack_hand(var/mob/user) if (!rig || !user.check_dexterity(DEXTERITY_HOLD_ITEM, TRUE)) @@ -187,26 +183,28 @@ update_icon() return TRUE -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/W, mob/user) - add_fingerprint(user) - if(istype(W,/obj/item/assembly_holder)) +/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/used_item, mob/user) + + if(istype(used_item, /obj/item/assembly_holder)) if (rig) to_chat(user, SPAN_WARNING("There is another device already in the way.")) return ..() - visible_message(SPAN_NOTICE("\The [user] begins rigging \the [W] to \the [src].")) - if(do_after(user, 20, src) && user.try_unequip(W, src)) - visible_message(SPAN_NOTICE("\The [user] rigs \the [W] to \the [src].")) - var/obj/item/assembly_holder/H = W + visible_message(SPAN_NOTICE("\The [user] begins rigging \the [used_item] to \the [src].")) + if(do_after(user, 20, src) && user.try_unequip(used_item, src)) + visible_message(SPAN_NOTICE("\The [user] rigs \the [used_item] to \the [src].")) + var/obj/item/assembly_holder/H = used_item if (istype(H.a_left,/obj/item/assembly/igniter) || istype(H.a_right,/obj/item/assembly/igniter)) log_and_message_admins("rigged a fuel tank for explosion at [loc.loc.name].") - rig = W + rig = used_item update_icon() return TRUE - if(W.isflamesource()) - log_and_message_admins("triggered a fuel tank explosion with \the [W].") - visible_message(SPAN_DANGER("\The [user] puts \the [W] to \the [src]!")) + + if(used_item.isflamesource()) + log_and_message_admins("triggered a fuel tank explosion with \the [used_item].") + visible_message(SPAN_DANGER("\The [user] puts \the [used_item] to \the [src]!")) try_detonate_reagents() return TRUE + . = ..() /obj/structure/reagent_dispensers/fueltank/on_update_icon() diff --git a/code/modules/reagents/storage/pill_foil.dm b/code/modules/reagents/storage/pill_foil.dm index 40f7efcbab38..0d7f1d36fa7f 100644 --- a/code/modules/reagents/storage/pill_foil.dm +++ b/code/modules/reagents/storage/pill_foil.dm @@ -49,8 +49,8 @@ add_overlay(I) offset -= 3 -/obj/item/pill_bottle/foil_pack/examine(mob/user) +/obj/item/pill_bottle/foil_pack/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, SPAN_NOTICE("It has the following pills in it:")) + . += SPAN_NOTICE("It has the following pills in it:") for(var/obj/item/chems/pill/C in pill_positions) - to_chat(user, SPAN_NOTICE("[html_icon(C)] [C.name]")) + . += SPAN_NOTICE("[html_icon(C)] [C.name]") diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 274c5aec2599..afae8f24b694 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -65,7 +65,7 @@ var/obj/item/organ/external/E = pick(crush) - E.take_external_damage(45, used_weapon = "Blunt Trauma") + E.take_damage(45, inflicter = "Blunt Trauma") to_chat(L, "\The [src]'s mechanisms crush your [E.name]!") H.init(src) // copy the contents of disposer to holder diff --git a/code/modules/recycling/wrapped_package.dm b/code/modules/recycling/wrapped_package.dm index da2a33bfd701..a18575b5f536 100644 --- a/code/modules/recycling/wrapped_package.dm +++ b/code/modules/recycling/wrapped_package.dm @@ -72,14 +72,14 @@ var/image/I = image('icons/obj/items/storage/deliverypackage.dmi', "delivery_label", pixel_x = off_x, pixel_y = off_y) add_overlay(I) -/obj/item/parcel/examine(mob/user, distance) +/obj/item/parcel/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance < 3) var/datum/extension/sorting_tag/S = get_extension(src, /datum/extension/sorting_tag) if(S) - to_chat(user, S.tag_description()) + . += S.tag_description() if(length(attached_note)) - to_chat(user, "It has a note attached, which reads:'[attached_note]'.") + . += "It has a note attached, which reads:'[attached_note]'." /obj/item/parcel/get_mechanics_info() . = ..() diff --git a/code/modules/scanners/mining.dm b/code/modules/scanners/mining.dm index 1058c4817160..2b9095692b27 100644 --- a/code/modules/scanners/mining.dm +++ b/code/modules/scanners/mining.dm @@ -19,9 +19,9 @@ scan_sound = 'sound/effects/ping.ogg' -/obj/item/scanner/mining/examine(mob/user) +/obj/item/scanner/mining/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user,"A tiny indicator on \the [src] shows it holds [survey_data] good explorer point\s.") + . += "A tiny indicator on \the [src] shows it holds [survey_data] good explorer point\s." /obj/item/scanner/mining/is_valid_scan_target(turf/T) return istype(T) diff --git a/code/modules/sealant_gun/sealant_gun.dm b/code/modules/sealant_gun/sealant_gun.dm index 6f0d91966447..37d42c36a6e8 100644 --- a/code/modules/sealant_gun/sealant_gun.dm +++ b/code/modules/sealant_gun/sealant_gun.dm @@ -54,13 +54,13 @@ unload_tank(user) return TRUE -/obj/item/gun/launcher/sealant/examine(mob/user, distance) +/obj/item/gun/launcher/sealant/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(loc == user) if(loaded_tank) - to_chat(user, SPAN_NOTICE("The loaded tank has about [loaded_tank.foam_charges] liter\s of sealant left.")) + . += SPAN_NOTICE("The loaded tank has about [loaded_tank.foam_charges] liter\s of sealant left.") else - to_chat(user, SPAN_WARNING("\The [src] has no sealant loaded.")) + . += SPAN_WARNING("\The [src] has no sealant loaded.") /obj/item/gun/launcher/sealant/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/sealant_tank) && user.try_unequip(W, src)) diff --git a/code/modules/sealant_gun/sealant_tank.dm b/code/modules/sealant_gun/sealant_tank.dm index d9c3a1f6fef7..890b4746992b 100644 --- a/code/modules/sealant_gun/sealant_tank.dm +++ b/code/modules/sealant_gun/sealant_tank.dm @@ -11,10 +11,10 @@ . = ..() add_overlay("fill_[floor((foam_charges/max_foam_charges) * 5)]") -/obj/item/sealant_tank/examine(mob/user, distance) +/obj/item/sealant_tank/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(loc == user) - to_chat(user, SPAN_NOTICE("\The [src] has about [foam_charges] liter\s of sealant left.")) + . += SPAN_NOTICE("\The [src] has about [foam_charges] liter\s of sealant left.") /obj/item/sealant_tank/Initialize(ml, material_key) . = ..() diff --git a/code/modules/shield_generators/floor_diffuser.dm b/code/modules/shield_generators/floor_diffuser.dm index b9d29391db32..5cef0619144f 100644 --- a/code/modules/shield_generators/floor_diffuser.dm +++ b/code/modules/shield_generators/floor_diffuser.dm @@ -59,8 +59,8 @@ alarm = round(max(alarm, duration)) update_icon() -/obj/machinery/shield_diffuser/examine(mob/user) +/obj/machinery/shield_diffuser/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It is [enabled ? "enabled" : "disabled"].") + . += "It is [enabled ? "enabled" : "disabled"]." if(alarm) - to_chat(user, "A red LED labeled \"Proximity Alarm\" is blinking on the control panel.") + . += "A red LED labeled \"Proximity Alarm\" is blinking on the control panel." diff --git a/code/modules/shield_generators/handheld_diffuser.dm b/code/modules/shield_generators/handheld_diffuser.dm index 4a546c0241f5..629ddc4f99c6 100644 --- a/code/modules/shield_generators/handheld_diffuser.dm +++ b/code/modules/shield_generators/handheld_diffuser.dm @@ -50,6 +50,6 @@ STOP_PROCESSING(SSobj, src) to_chat(user, "You turn \the [src] [enabled ? "on" : "off"].") -/obj/item/shield_diffuser/examine(mob/user) +/obj/item/shield_diffuser/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It is [enabled ? "enabled" : "disabled"].") + . += "It is [enabled ? "enabled" : "disabled"]." diff --git a/code/modules/status_conditions/status_jittery.dm b/code/modules/status_conditions/status_jittery.dm index f196c38b430e..04d8bb8946e1 100644 --- a/code/modules/status_conditions/status_jittery.dm +++ b/code/modules/status_conditions/status_jittery.dm @@ -29,10 +29,10 @@ return if(prob(5)) if(prob(1)) - heart.take_internal_damage(heart.max_damage / 2, 0) + heart.take_damage(heart.max_damage / 2, 0) to_chat(victim, SPAN_DANGER("Something bursts in your heart.")) admin_victim_log(victim, "has taken lethal heart damage at jitteriness level [jitteriness].") else - heart.take_internal_damage(heart, 0) + heart.take_damage(heart, 0) to_chat(victim, SPAN_DANGER("The jitters are killing you! You feel your heart beating out of your chest.")) admin_victim_log(victim, "has taken minor heart damage at jitteriness level [jitteriness].") diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm index 82f52e1d33da..cc0a53a81473 100644 --- a/code/modules/surgery/bones.dm +++ b/code/modules/surgery/bones.dm @@ -107,7 +107,7 @@ user.visible_message("\The [user]'s hand slips, damaging the [affected.encased ? affected.encased : "bones"] in \the [target]'s [affected.name] with \the [tool]!" , \ "Your hand slips, damaging the [affected.encased ? affected.encased : "bones"] in \the [target]'s [affected.name] with \the [tool]!") affected.fracture() - affected.take_external_damage(5, used_weapon = tool) + affected.take_damage(5, inflicter = tool) ..() ////////////////////////////////////////////////////////////////// diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 36a969d13fd8..57a17c7d785d 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -45,6 +45,6 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, cracking [target]'s [affected.encased] with \the [tool]!" , \ "Your hand slips, cracking [target]'s [affected.encased] with \the [tool]!" ) - affected.take_external_damage(15, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(15, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) affected.fracture() ..() diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm index a2baf2e1200d..7b8ca9c66870 100644 --- a/code/modules/surgery/face.dm +++ b/code/modules/surgery/face.dm @@ -36,5 +36,5 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, tearing skin on [target]'s face with \the [tool]!", \ "Your hand slips, tearing skin on [target]'s face with \the [tool]!") - affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(10, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index f9d54f3b125c..5b5843eb77af 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -61,7 +61,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, [fail_string] \the [target]'s [affected.name] in the wrong place with \the [tool]!", \ "Your hand slips, [fail_string] \the [target]'s [affected.name] in the wrong place with \the [tool]!") - affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(10, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() /decl/surgery_step/generic/cut_open/success_chance(mob/living/user, mob/living/target, obj/item/tool) @@ -111,7 +111,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, tearing blood vessals and causing massive bleeding in [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, tearing blood vessels and causing massive bleeding in [target]'s [affected.name] with \the [tool]!",) - affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(10, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -157,7 +157,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, tearing the edges of the incision on [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(12, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(12, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -213,7 +213,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(0, 3, used_weapon = tool) + affected.take_damage(3, BURN, inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -285,11 +285,11 @@ user.visible_message( SPAN_DANGER("\The [user] manages to get \the [tool] stuck in \the [target]'s [affected.name]!"), \ SPAN_DANGER("You manage to get \the [tool] stuck in \the [target]'s [affected.name]!")) - affected.embed_in_organ(tool, affected.take_external_damage(30, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool)) + affected.embed_in_organ(tool, affected.take_damage(30, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool)) else user.visible_message( SPAN_WARNING("\The [user] slips, mangling \the [target]'s [affected.name] with \the [tool]."), \ SPAN_WARNING("You slip, mangling \the [target]'s [affected.name] with \the [tool].")) - affected.take_external_damage(30, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(30, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) affected.fracture() ..() diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index be2f0f6b69dc..a453faec0031 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -18,7 +18,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(20, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(20, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() /decl/surgery_step/cavity/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool, target_zone) diff --git a/code/modules/surgery/necrotic.dm b/code/modules/surgery/necrotic.dm index 6f41080ae0d7..32b74e3f5082 100644 --- a/code/modules/surgery/necrotic.dm +++ b/code/modules/surgery/necrotic.dm @@ -86,7 +86,7 @@ user.visible_message( SPAN_DANGER("\The [user]'s hand slips, slicing into a healthy portion of \the [target]'s [affected.name] with \the [tool]!"), SPAN_DANGER("Your hand slips, slicing into a healthy portion of [target]'s [affected.name] with \the [tool]!")) - affected.take_external_damage(10, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(10, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() ////////////////////////////////////////////////////////////////// diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 76b37e9eb8dd..1ed731ee4546 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -29,12 +29,12 @@ /decl/surgery_step/internal/fix_organ/assess_bodypart(mob/living/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = ..() if(affected) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I.damage > 0) - if(I.status & ORGAN_DEAD) - to_chat(user, SPAN_WARNING("\The [I] is [I.can_recover() ? "decaying" : "necrotic"] and cannot be treated with \the [tool] alone.")) + for(var/obj/item/organ/internal/organ in affected.internal_organs) + if(organ.get_organ_damage() > 0) + if(organ.status & ORGAN_DEAD) + to_chat(user, SPAN_WARNING("\The [organ] is [organ.can_recover() ? "decaying" : "necrotic"] and cannot be treated with \the [tool] alone.")) continue - if(I.surface_accessible || (affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) + if(organ.surface_accessible || (affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) return affected /decl/surgery_step/internal/fix_organ/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool) @@ -46,10 +46,10 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user] starts treating damage within \the [target]'s [affected.name] with [tool_name].", \ "You start treating damage within \the [target]'s [affected.name] with [tool_name]." ) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0 && !BP_IS_PROSTHETIC(I) && !(I.status & ORGAN_DEAD) && (I.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) - user.visible_message("[user] starts treating damage to [target]'s [I] with [tool_name].", \ - "You start treating damage to [target]'s [I] with [tool_name]." ) + for(var/obj/item/organ/internal/organ in affected.internal_organs) + if(organ && organ.get_organ_damage() > 0 && !BP_IS_PROSTHETIC(organ) && !(organ.status & ORGAN_DEAD) && (organ.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) + user.visible_message("[user] starts treating damage to [target]'s [organ] with [tool_name].", \ + "You start treating damage to [target]'s [organ] with [tool_name]." ) target.custom_pain("The pain in your [affected.name] is living hell!",100,affecting = affected) ..() @@ -60,14 +60,14 @@ if (istype(tool, /obj/item/stack/medical/bandage)) tool_name = "the bandaid" var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0 && !BP_IS_PROSTHETIC(I) && (I.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) - if(I.status & ORGAN_DEAD) - to_chat(user, SPAN_NOTICE("You were unable to treat \the [I] due to its necrotic state.")) + for(var/obj/item/organ/internal/organ in affected.internal_organs) + if(organ && organ.get_organ_damage() > 0 && !BP_IS_PROSTHETIC(organ) && (organ.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) + if(organ.status & ORGAN_DEAD) + to_chat(user, SPAN_NOTICE("You were unable to treat \the [organ] due to its necrotic state.")) else - user.visible_message("[user] treats damage to [target]'s [I] with [tool_name].", \ - "You treat damage to [target]'s [I] with [tool_name]." ) - I.surgical_fix(user) + user.visible_message("[user] treats damage to [target]'s [organ] with [tool_name].", \ + "You treat damage to [target]'s [organ] with [tool_name]." ) + organ.surgical_fix(user) user.visible_message("\The [user] finishes treating damage within \the [target]'s [affected.name] with [tool_name].", \ "You finish treating damage within \the [target]'s [affected.name] with [tool_name]." ) ..() @@ -82,10 +82,10 @@ else dam_amt = 5 target.take_damage(10, TOX) - affected.take_external_damage(dam_amt, 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(I && I.damage > 0 && !BP_IS_PROSTHETIC(I) && (I.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) - I.take_internal_damage(dam_amt) + affected.take_damage(dam_amt, damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) + for(var/obj/item/organ/internal/organ in affected.internal_organs) + if(organ && organ.get_organ_damage() > 0 && !BP_IS_PROSTHETIC(organ) && (organ.surface_accessible || affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED))) + organ.take_damage(dam_amt) ..() ////////////////////////////////////////////////////////////////// @@ -101,11 +101,11 @@ /decl/surgery_step/internal/detach_organ/pre_surgery_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) var/list/attached_organs - for(var/obj/item/organ/I in target.get_internal_organs()) - if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone) - var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state) - radial_button.name = "Detach \the [I]" - LAZYSET(attached_organs, I.organ_tag, radial_button) + for(var/obj/item/organ/organ in target.get_internal_organs()) + if(organ && !(organ.status & ORGAN_CUT_AWAY) && organ.parent_organ == target_zone) + var/image/radial_button = image(icon = organ.icon, icon_state = organ.icon_state) + radial_button.name = "Detach \the [organ]" + LAZYSET(attached_organs, organ.organ_tag, radial_button) if(!LAZYLEN(attached_organs)) to_chat(user, SPAN_WARNING("You can't find any organs to separate.")) else @@ -123,11 +123,11 @@ /decl/surgery_step/internal/detach_organ/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) user.visible_message("[user] has separated [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool]." , \ "You have separated [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].") - var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(target, LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)) + var/obj/item/organ/internal/organ = GET_INTERNAL_ORGAN(target, LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - if(I && istype(I) && istype(affected)) + if(organ && istype(organ) && istype(affected)) //First only detach the organ, without fully removing it - target.remove_organ(I, FALSE, TRUE) + target.remove_organ(organ, FALSE, TRUE) ..() /decl/surgery_step/internal/detach_organ/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) @@ -135,7 +135,7 @@ if(affected) user.visible_message("[user]'s hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, slicing an artery inside [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(rand(30,50), 0, (DAM_SHARP|DAM_EDGE), used_weapon = tool) + affected.take_damage(rand(30,50), damage_flags = (DAM_SHARP|DAM_EDGE), inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -155,11 +155,11 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) if(affected) var/list/removable_organs - for(var/obj/item/organ/internal/I in affected.implants) - if(I.status & ORGAN_CUT_AWAY) - var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state) - radial_button.name = "Remove \the [I]" - LAZYSET(removable_organs, I, radial_button) + for(var/obj/item/organ/internal/organ in affected.implants) + if(organ.status & ORGAN_CUT_AWAY) + var/image/radial_button = image(icon = organ.icon, icon_state = organ.icon_state) + radial_button.name = "Remove \the [organ]" + LAZYSET(removable_organs, organ, radial_button) if(!LAZYLEN(removable_organs)) to_chat(user, SPAN_WARNING("You can't find any removable organs.")) else @@ -170,9 +170,9 @@ /decl/surgery_step/internal/remove_organ/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool) var/target_zone = user.get_target_zone() - var/obj/item/organ/internal/O = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) + var/obj/item/organ/internal/organ = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - if(BP_IS_PROSTHETIC(O)) + if(BP_IS_PROSTHETIC(organ)) if(BP_IS_PROSTHETIC(affected)) return SURGERY_SKILLS_ROBOTIC else @@ -191,18 +191,18 @@ user.visible_message("\The [user] has removed \the [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].", \ "You have removed \the [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].") // Extract the organ! - var/obj/item/organ/O = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) + var/obj/item/organ/organ = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - if(istype(O) && istype(affected)) + if(istype(organ) && istype(affected)) //Now call remove again with detach = FALSE so we fully remove it - target.remove_organ(O, TRUE, FALSE) + target.remove_organ(organ, TRUE, FALSE) ..() /decl/surgery_step/internal/remove_organ/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, damaging [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(20, used_weapon = tool) + affected.take_damage(20, inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -219,9 +219,9 @@ var/robotic_surgery = FALSE /decl/surgery_step/internal/replace_organ/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool) - var/obj/item/organ/internal/O = tool + var/obj/item/organ/internal/organ = tool var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, user.get_target_zone()) - if(BP_IS_PROSTHETIC(O)) + if(BP_IS_PROSTHETIC(organ)) if(BP_IS_PROSTHETIC(affected)) return SURGERY_SKILLS_ROBOTIC else @@ -231,43 +231,43 @@ /decl/surgery_step/internal/replace_organ/pre_surgery_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) - var/obj/item/organ/internal/O = tool + var/obj/item/organ/internal/organ = tool var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - if(!istype(O) || !istype(affected)) + if(!istype(organ) || !istype(affected)) return FALSE - if(BP_IS_CRYSTAL(O) && !BP_IS_CRYSTAL(affected)) + if(BP_IS_CRYSTAL(organ) && !BP_IS_CRYSTAL(affected)) to_chat(user, SPAN_WARNING("You cannot install a crystalline organ into a non-crystalline bodypart.")) return FALSE - if(!BP_IS_CRYSTAL(O) && BP_IS_CRYSTAL(affected)) + if(!BP_IS_CRYSTAL(organ) && BP_IS_CRYSTAL(affected)) to_chat(user, SPAN_WARNING("You cannot install a non-crystalline organ into a crystalline bodypart.")) return FALSE - if(BP_IS_PROSTHETIC(affected) && !BP_IS_PROSTHETIC(O)) + if(BP_IS_PROSTHETIC(affected) && !BP_IS_PROSTHETIC(organ)) to_chat(user, SPAN_WARNING("You cannot install a naked organ into a robotic body.")) return FALSE - if(O.parent_organ != affected.organ_tag) - to_chat(user, SPAN_WARNING("\The [O] cannot be installed in \the [affected].")) + if(organ.parent_organ != affected.organ_tag) + to_chat(user, SPAN_WARNING("\The [organ] cannot be installed in \the [affected].")) return FALSE if(!target.get_bodytype()) PRINT_STACK_TRACE("Target ([target]) of surgery [type] has no bodytype!") return FALSE - var/decl/pronouns/pronouns = O.get_pronouns() - if(O.damage > (O.max_damage * 0.75)) - to_chat(user, SPAN_WARNING("\The [O.name] [pronouns.is] in no state to be transplanted.")) + var/decl/pronouns/pronouns = organ.get_pronouns() + if(organ.get_organ_damage() > (organ.max_damage * 0.75)) + to_chat(user, SPAN_WARNING("\The [organ] [pronouns.is] in no state to be transplanted.")) return FALSE - if(O.w_class > affected.cavity_max_w_class) - to_chat(user, SPAN_WARNING("\The [O.name] [pronouns.is] too big for \the [affected.cavity_name]!")) + if(organ.w_class > affected.cavity_max_w_class) + to_chat(user, SPAN_WARNING("\The [organ] [pronouns.is] too big for \the [affected.cavity_name]!")) return FALSE - var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(target, O.organ_tag) - if(I && (I.parent_organ == affected.organ_tag)) - to_chat(user, SPAN_WARNING("\The [target] already has \a [O.name].")) + var/obj/item/organ/internal/existing_organ = GET_INTERNAL_ORGAN(target, organ.organ_tag) + if(existing_organ && (existing_organ.parent_organ == affected.organ_tag)) + to_chat(user, SPAN_WARNING("\The [target] already has \a [existing_organ.name].")) return FALSE return TRUE @@ -283,23 +283,23 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("\The [user] has [robotic_surgery ? "installed" : "transplanted"] \the [tool] into [target]'s [affected.name].", \ "You have [robotic_surgery ? "installed" : "transplanted"] \the [tool] into [target]'s [affected.name].") - var/obj/item/organ/O = tool - if(istype(O) && user.try_unequip(O, target)) + var/obj/item/organ/organ = tool + if(istype(organ) && user.try_unequip(organ, target)) //Place the organ but don't attach it yet - target.add_organ(O, affected, detached = TRUE) + target.add_organ(organ, affected, detached = TRUE) if(BP_IS_PROSTHETIC(affected)) playsound(target.loc, 'sound/items/Ratchet.ogg', 50, 1) else ..() - if(BP_IS_PROSTHETIC(O) && prob(user.skill_fail_chance(SKILL_DEVICES, 50, SKILL_ADEPT))) - O.add_random_ailment() + if(BP_IS_PROSTHETIC(organ) && prob(user.skill_fail_chance(SKILL_DEVICES, 50, SKILL_ADEPT))) + organ.add_random_ailment() /decl/surgery_step/internal/replace_organ/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) user.visible_message("[user]'s hand slips, damaging \the [tool]!", \ "Your hand slips, damaging \the [tool]!") - var/obj/item/organ/internal/I = tool - if(istype(I)) - I.take_internal_damage(rand(3,5)) + var/obj/item/organ/internal/organ = tool + if(istype(organ)) + organ.take_damage(rand(3,5)) ..() ////////////////////////////////////////////////////////////////// @@ -318,9 +318,9 @@ /decl/surgery_step/internal/attach_organ/get_skill_reqs(mob/living/user, mob/living/target, obj/item/tool) var/target_zone = user.get_target_zone() - var/obj/item/organ/internal/O = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) + var/obj/item/organ/internal/organ = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - if(BP_IS_PROSTHETIC(O)) + if(BP_IS_PROSTHETIC(organ)) if(BP_IS_PROSTHETIC(affected)) return SURGERY_SKILLS_ROBOTIC else @@ -333,11 +333,11 @@ var/list/attachable_organs var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - for(var/obj/item/organ/I in (affected.implants|affected.internal_organs)) - if(I.status & ORGAN_CUT_AWAY) - var/image/radial_button = image(icon = I.icon, icon_state = I.icon_state) - radial_button.name = "Attach \the [I]" - LAZYSET(attachable_organs, I, radial_button) + for(var/obj/item/organ/organ in (affected.implants|affected.internal_organs)) + if(organ.status & ORGAN_CUT_AWAY) + var/image/radial_button = image(icon = organ.icon, icon_state = organ.icon_state) + radial_button.name = "Attach \the [organ]" + LAZYSET(attachable_organs, organ, radial_button) if(!LAZYLEN(attachable_organs)) return FALSE @@ -364,8 +364,8 @@ user.visible_message("[target]'s biology has rejected the attempts to attach \the [organ_to_replace].") return FALSE - var/obj/item/organ/internal/I = GET_INTERNAL_ORGAN(target, organ_to_replace.organ_tag) - if(I && (I.parent_organ == affected.organ_tag)) + var/obj/item/organ/internal/organ = GET_INTERNAL_ORGAN(target, organ_to_replace.organ_tag) + if(organ && (organ.parent_organ == affected.organ_tag)) to_chat(user, SPAN_WARNING("\The [target] already has \a [organ_to_replace].")) return FALSE return organ_to_replace @@ -377,19 +377,19 @@ ..() /decl/surgery_step/internal/attach_organ/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) - var/obj/item/organ/I = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) + var/obj/item/organ/organ = LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone) user.visible_message("[user] has attached [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool]." , \ "You have attached [target]'s [LAZYACCESS(global.surgeries_in_progress["\ref[target]"], target_zone)] with \the [tool].") var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - if(istype(I) && I.parent_organ == target_zone && affected && (I in affected.implants)) - target.add_organ(I, affected, detached = FALSE) + if(istype(organ) && organ.parent_organ == target_zone && affected && (organ in affected.implants)) + target.add_organ(organ, affected, detached = FALSE) ..() /decl/surgery_step/internal/attach_organ/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \ "Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!") - affected.take_external_damage(20, used_weapon = tool) + affected.take_damage(20, inflicter = tool) ..() diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm index ca8806692a16..5b9c16d99cf3 100644 --- a/code/modules/surgery/other.dm +++ b/code/modules/surgery/other.dm @@ -45,7 +45,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") - affected.take_external_damage(5, used_weapon = tool) + affected.take_damage(5, inflicter = tool) ..() ////////////////////////////////////////////////////////////////// @@ -91,7 +91,7 @@ var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) user.visible_message("[user]'s hand slips, smearing [tool] in the incision in [target]'s [affected.name]!" , \ "Your hand slips, smearing [tool] in the incision in [target]'s [affected.name]!") - affected.take_external_damage(5, used_weapon = tool) + affected.take_damage(5, inflicter = tool) ..() diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 8695ab984993..07dd1eb2d65d 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -360,30 +360,30 @@ /decl/surgery_step/robotics/fix_organ_robotic/assess_bodypart(mob/living/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = ..() if(affected) - for(var/obj/item/organ/internal/I in affected.internal_organs) - if(BP_IS_PROSTHETIC(I) && !BP_IS_CRYSTAL(I) && I.damage > 0) - if(I.surface_accessible) + for(var/obj/item/organ/internal/organ in affected.internal_organs) + if(BP_IS_PROSTHETIC(organ) && !BP_IS_CRYSTAL(organ) && organ.get_organ_damage() > 0) + if(organ.surface_accessible) return affected if(affected.how_open() >= (affected.encased ? SURGERY_ENCASED : SURGERY_RETRACTED) || affected.hatch_state == HATCH_OPENED) return affected /decl/surgery_step/robotics/fix_organ_robotic/begin_step(mob/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - for(var/obj/item/organ/I in affected.internal_organs) - if(I && I.damage > 0) - if(BP_IS_PROSTHETIC(I)) - user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \ - "You start mending the damage to [target]'s [I.name]'s mechanisms." ) + for(var/obj/item/organ/internal/organ in affected.internal_organs) + if(organ.get_organ_damage() > 0) + if(BP_IS_PROSTHETIC(organ)) + user.visible_message("[user] starts mending the damage to [target]'s [organ.name]'s mechanisms.", \ + "You start mending the damage to [target]'s [organ.name]'s mechanisms." ) ..() /decl/surgery_step/robotics/fix_organ_robotic/end_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) var/obj/item/organ/external/affected = GET_EXTERNAL_ORGAN(target, target_zone) - for(var/obj/item/organ/I in affected.internal_organs) - if(I && I.damage > 0) - if(BP_IS_PROSTHETIC(I)) - user.visible_message("[user] repairs [target]'s [I.name] with [tool].", \ - "You repair [target]'s [I.name] with [tool]." ) - I.damage = 0 + for(var/obj/item/organ/internal/organ in affected.internal_organs) + if(organ.get_organ_damage() > 0) + if(BP_IS_PROSTHETIC(organ)) + user.visible_message("[user] repairs [target]'s [organ.name] with [tool].", \ + "You repair [target]'s [organ.name] with [tool]." ) + organ.set_organ_damage(0) ..() /decl/surgery_step/robotics/fix_organ_robotic/fail_step(mob/living/user, mob/living/target, target_zone, obj/item/tool) @@ -395,7 +395,7 @@ for(var/internal in affected.internal_organs) var/obj/item/organ/internal/I = internal if(I) - I.take_internal_damage(rand(3,5)) + I.take_damage(rand(3,5)) ..() ////////////////////////////////////////////////////////////////// diff --git a/code/modules/tools/archetypes/tool_item.dm b/code/modules/tools/archetypes/tool_item.dm index b98add0989b9..31496c04010a 100644 --- a/code/modules/tools/archetypes/tool_item.dm +++ b/code/modules/tools/archetypes/tool_item.dm @@ -66,7 +66,7 @@ to_chat(user, SPAN_WARNING(failure_message)) return FALSE -/obj/item/examine(mob/user, distance, infix, suffix) +/obj/item/get_examine_strings(mob/user, distance, infix, suffix) . = ..() @@ -89,4 +89,4 @@ LAZYADD(tool_strings, tool_string) if(length(tool_strings)) - to_chat(user, "[gender == PLURAL ? "They look" : "It looks"] like [english_list(tool_strings)].") + . += "[gender == PLURAL ? "They look" : "It looks"] like [english_list(tool_strings)]." diff --git a/code/modules/tools/subtypes/xenoarchaeology_picks.dm b/code/modules/tools/subtypes/xenoarchaeology_picks.dm index 2a335b9fa4ca..0dc4160e3a39 100644 --- a/code/modules/tools/subtypes/xenoarchaeology_picks.dm +++ b/code/modules/tools/subtypes/xenoarchaeology_picks.dm @@ -30,10 +30,10 @@ var/static/list/tool_qualities = list(TOOL_PICK = TOOL_QUALITY_DEFAULT) return tool_qualities -/obj/item/tool/xeno/examine(mob/user) +/obj/item/tool/xeno/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(IS_PICK(src)) - to_chat(user, "This tool has a [get_tool_property(TOOL_PICK, TOOL_PROP_EXCAVATION_DEPTH) || 0] centimetre excavation depth.") + . += "This tool has a [get_tool_property(TOOL_PICK, TOOL_PROP_EXCAVATION_DEPTH) || 0] centimetre excavation depth." /obj/item/tool/xeno/brush name = "wire brush" diff --git a/code/modules/tools/tool.dm b/code/modules/tools/tool.dm index 953a751ebbb2..af7ac841f205 100644 --- a/code/modules/tools/tool.dm +++ b/code/modules/tools/tool.dm @@ -17,7 +17,7 @@ /// Material used for binding. var/decl/material/binding_material = /decl/material/solid/organic/meat/gut -/obj/item/tool/examine(mob/user) +/obj/item/tool/get_examine_strings(mob/user, distance, infix, suffix) . = ..() var/list/descriptor_strings = list() if(material == handle_material) @@ -27,7 +27,7 @@ descriptor_strings += "the handle is made of [handle_material.use_name]" if(binding_material) descriptor_strings += "the binding is made of [binding_material.use_name]" - to_chat(user, "[capitalize(english_list(descriptor_strings))].") + . += "[capitalize(english_list(descriptor_strings))]." /obj/item/tool/Initialize(ml, material_key, _handle_material, _binding_material, override_tool_qualities, override_tool_properties) diff --git a/code/modules/vehicles/bike.dm b/code/modules/vehicles/bike.dm index a5aa85daf86f..038fc40bbf4f 100644 --- a/code/modules/vehicles/bike.dm +++ b/code/modules/vehicles/bike.dm @@ -148,19 +148,19 @@ return Move(get_step(src, direction)) /obj/vehicle/bike/Move(var/turf/destination) - if(kickstand || (world.time <= l_move_time + move_delay)) return + if(kickstand || (world.time <= l_move_time + move_delay)) return FALSE //these things like space, not turf. Dragging shouldn't weigh you down. if(isspaceturf(destination)) if(!space_speed) - return 0 + return FALSE move_delay = space_speed else if(!land_speed) - return 0 + return FALSE move_delay = land_speed if(!engine || !engine.use_power()) turn_off() - return 0 + return FALSE return ..() /obj/vehicle/bike/turn_on() diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm index 4a61ea40daac..740bef47107c 100644 --- a/code/modules/vehicles/cargo_train.dm +++ b/code/modules/vehicles/cargo_train.dm @@ -187,17 +187,11 @@ else return ..() -/obj/vehicle/train/cargo/engine/examine(mob/user, distance) +/obj/vehicle/train/cargo/engine/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - - if(distance > 1) - return - - if(!ishuman(user)) - return - - to_chat(user, "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition.") - to_chat(user, "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%") + if(distance <= 1) + . += "The power light is [on ? "on" : "off"].\nThere are[key ? "" : " no"] keys in the ignition." + . += "The charge meter reads [cell? round(cell.percent(), 0.01) : 0]%" /obj/vehicle/train/cargo/engine/verb/start_engine() set name = "Start engine" diff --git a/code/modules/vehicles/train.dm b/code/modules/vehicles/train.dm index 3d82b2252058..7c62d658b2e8 100644 --- a/code/modules/vehicles/train.dm +++ b/code/modules/vehicles/train.dm @@ -29,12 +29,12 @@ if(T.lead || T.is_train_head()) latch(T) -/obj/vehicle/train/examine(mob/user) +/obj/vehicle/train/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (lead) - to_chat(user, SPAN_NOTICE("It is hitched to \the [lead].")) + . += SPAN_NOTICE("It is hitched to \the [lead].") if (tow) - to_chat(user, SPAN_NOTICE("It is towing \the [tow].")) + . += SPAN_NOTICE("It is towing \the [tow].") /obj/vehicle/train/Move() var/old_loc = get_turf(src) diff --git a/code/modules/weather/_weather.dm b/code/modules/weather/_weather.dm index 9c1a6493a533..00e996e256d8 100644 --- a/code/modules/weather/_weather.dm +++ b/code/modules/weather/_weather.dm @@ -80,8 +80,8 @@ QDEL_NULL(lightning_overlay) . = ..() -// Called by /turf/examine() to show current weather status. -/obj/abstract/weather_system/examine(mob/user, distance) +// Called by /turf/examined_by() to show current weather status. +/obj/abstract/weather_system/examined_by(mob/user, distance) SHOULD_CALL_PARENT(FALSE) var/decl/state/weather/weather_state = weather_system.current_state if(istype(weather_state)) diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm index af9441fae633..a39efb764ce0 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact.dm @@ -111,7 +111,7 @@ physically_destroyed() /obj/structure/artifact/Move() - ..() + . = ..() if(my_effect) my_effect.UpdateMove() if(secondary_effect) diff --git a/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm b/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm index 957c9204a4d0..a37325a99327 100644 --- a/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm +++ b/code/modules/xenoarcheaology/finds/find_types/chem_containers.dm @@ -27,6 +27,9 @@ material = /decl/material/solid/stone/ceramic var/spawning_id +/obj/item/chems/glass/replenishing/can_lid() + return FALSE + /obj/item/chems/glass/replenishing/Initialize() . = ..() spawning_id = pick(list( @@ -42,4 +45,4 @@ START_PROCESSING(SSobj, src) /obj/item/chems/glass/replenishing/Process() - add_to_reagents(spawning_id, 0.3) \ No newline at end of file + add_to_reagents(spawning_id, 0.3) diff --git a/code/modules/xenoarcheaology/finds/find_types/fossils.dm b/code/modules/xenoarcheaology/finds/find_types/fossils.dm index 00c2680ab6af..f06c6c37784b 100644 --- a/code/modules/xenoarcheaology/finds/find_types/fossils.dm +++ b/code/modules/xenoarcheaology/finds/find_types/fossils.dm @@ -75,12 +75,12 @@ . = ..() required_bones = rand(6)+3 -/obj/structure/skeleton/examine(mob/user, distance) +/obj/structure/skeleton/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(bone_count < required_bones) - to_chat(user, "It's incomplete, looks like it could use [required_bones - bone_count] more bones.") - if(.) - to_chat(user, "The plaque reads \'[plaque_contents]\'.") + . += "It's incomplete, looks like it could use [required_bones - bone_count] more bones." + if(distance <= 1) + . += "The plaque reads \'[plaque_contents]\'." /obj/structure/skeleton/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/fossil/animal)) diff --git a/code/modules/xenoarcheaology/machinery/suspension_generator.dm b/code/modules/xenoarcheaology/machinery/suspension_generator.dm index 9bacddc8f9c1..3a2cc181ec82 100644 --- a/code/modules/xenoarcheaology/machinery/suspension_generator.dm +++ b/code/modules/xenoarcheaology/machinery/suspension_generator.dm @@ -105,11 +105,11 @@ density = TRUE var/victim_number //number of mobs it affected, needed for generator powerdraw calc -/obj/effect/suspension_field/examine(mob/user) +/obj/effect/suspension_field/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(.) - to_chat(user, SPAN_NOTICE("You can see something floating inside it:")) - to_chat(user, SPAN_NOTICE(english_list(contents))) + if(distance <= 1) + . += SPAN_NOTICE("You can see something floating inside it:") + . += SPAN_NOTICE(english_list(contents)) /obj/effect/suspension_field/Initialize() . = ..() diff --git a/code/modules/xenoarcheaology/tools/core_sampler.dm b/code/modules/xenoarcheaology/tools/core_sampler.dm index 21d5bd0cb6dd..8aba4e264c0c 100644 --- a/code/modules/xenoarcheaology/tools/core_sampler.dm +++ b/code/modules/xenoarcheaology/tools/core_sampler.dm @@ -9,10 +9,10 @@ matter = list(/decl/material/solid/organic/plastic = MATTER_AMOUNT_REINFORCEMENT) var/obj/item/sample -/obj/item/core_sampler/examine(mob/user, distance) +/obj/item/core_sampler/get_examine_strings(mob/user, distance, infix, suffix) . = ..(user) if(distance <= 2) - to_chat(user, SPAN_NOTICE("This one is [sample ? "full" : "empty"]")) + . += SPAN_NOTICE("This one is [sample ? "full" : "empty"]") /obj/item/core_sampler/proc/sample_item(var/item_to_sample, var/mob/user) var/datum/extension/geological_data/GD = get_extension(item_to_sample, /datum/extension/geological_data) diff --git a/code/modules/xgm/xgm_gas_mixture.dm b/code/modules/xgm/xgm_gas_mixture.dm index e16bba237e7c..e567de48405c 100644 --- a/code/modules/xgm/xgm_gas_mixture.dm +++ b/code/modules/xgm/xgm_gas_mixture.dm @@ -13,7 +13,7 @@ var/group_multiplier = 1 //List of active tile overlays for this gas_mixture. Updated by check_tile_graphic() - var/list/graphic = list() + var/list/graphic //Cache of gas overlay objects var/list/tile_overlay_cache ///The last cached color of the gas mixture @@ -32,8 +32,6 @@ update_values() /datum/gas_mixture/proc/get_gas(gasid) - if(!gas.len) - return 0 //if the list is empty BYOND treats it as a non-associative list, which runtimes return gas[gasid] * group_multiplier /datum/gas_mixture/proc/get_total_moles() @@ -193,7 +191,7 @@ which is bit more realistic (natural log), and returns a fairly accurate entropy around room temperatures and pressures. */ /datum/gas_mixture/proc/specific_entropy_gas(var/gasid) - if (!(gasid in gas) || gas[gasid] == 0) + if (!gas[gasid]) return SPECIFIC_ENTROPY_VACUUM //that gas isn't here //group_multiplier gets divided out in volume/gas[gasid] - also, V/(m*T) = R/(partial pressure) @@ -367,9 +365,10 @@ //Two lists can be passed by reference if you need know specifically which graphics were added and removed. // Returns TRUE if the graphics list was mutated. /datum/gas_mixture/proc/check_tile_graphic(list/graphic_add = null, list/graphic_remove = null) - for(var/obj/effect/gas_overlay/O in graphic) - if(gas[O.material.type] <= O.material.gas_overlay_limit) - LAZYADD(graphic_remove, O) + if(LAZYLEN(graphic)) + for(var/obj/effect/gas_overlay/O in graphic) + if(gas[O.material.type] <= O.material.gas_overlay_limit) + LAZYADD(graphic_remove, O) for(var/g in gas) //Overlay isn't applied for this gas, check if it's valid and needs to be added. var/decl/material/mat = GET_DECL(g) @@ -381,13 +380,13 @@ LAZYADD(graphic_add, tile_overlay) . = FALSE //Apply changes - if(graphic_add && graphic_add.len) - graphic |= graphic_add + if(LAZYLEN(graphic_add)) + LAZYADD(graphic, graphic_add) . = TRUE - if(graphic_remove && graphic_remove.len) - graphic -= graphic_remove + if(LAZYLEN(graphic_remove)) + LAZYREMOVE(graphic, graphic_remove) . = TRUE - if(graphic.len) + if(LAZYLEN(graphic)) var/pressure_mod = clamp(return_pressure() / ONE_ATMOSPHERE, 0, 2) for(var/obj/effect/gas_overlay/O in graphic) var/concentration_mod = clamp(gas[O.material.type] / total_moles, 0.1, 1) diff --git a/code/unit_tests/materials.dm b/code/unit_tests/materials.dm index 703f45346ba9..f55ade48d342 100644 --- a/code/unit_tests/materials.dm +++ b/code/unit_tests/materials.dm @@ -54,7 +54,8 @@ var/test_type = recipe.test_result_type || recipe.result_type if(!test_type || ispath(test_type, /turf)) // Cannot exist without a loc and doesn't have matter, cannot assess here. continue - var/atom/product = LAZYACCESS(recipe.spawn_result(null, null, 1, material, reinforced, null), 1) + var/list/results = recipe.spawn_result(null, null, 1, material, reinforced, null) + var/atom/product = LAZYACCESS(results, 1) var/list/failed = list() if(!product) failed += "no product returned" diff --git a/code/unit_tests/turf_icons.dm b/code/unit_tests/turf_icons.dm index 3319864ee2a7..8ee6c20e0d5c 100644 --- a/code/unit_tests/turf_icons.dm +++ b/code/unit_tests/turf_icons.dm @@ -188,9 +188,10 @@ // Procs used for validation below. /turf/floor/validate_turf() . = ..() + if(!istype(_base_flooring)) . += "null or invalid _base_flooring ([_base_flooring || "NULL"])" - if(_flooring && !istype(_flooring)) + if(_flooring && !islist(_flooring) && !istype(_flooring, /decl/flooring)) . += "invalid post-init type for _flooring ([_flooring || "NULL"])" var/decl/flooring/check_flooring = get_topmost_flooring() diff --git a/html/changelog.html b/html/changelog.html index 2c838c27eee2..e8361317d54b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -52,6 +52,18 @@ -->
+

07 February 2025

+

Penelope Haze updated:

+
    +
  • Shears are now used to add or remove padding from objects. Wirecutters still work as a backup, though.
  • +
+ +

02 February 2025

+

Penelope Haze updated:

+
    +
  • Modified liquid and coating presentation to be more fancy.
  • +
+

29 January 2025

MistakeNot4892 updated:

    @@ -116,18 +128,6 @@

    Penelope Haze updated:

    • Makes weather effects slightly more transparent.
    - -

    07 December 2024

    -

    MistakeNot4892 updated:

    -
      -
    • Most wooden floors and tables on space maps are now chipboard laminate instead.
    • -
    - -

    05 December 2024

    -

    ophelia updated:

    -
      -
    • You can now put any disk into the research design database or research design console, but only the correct disk type (tech disk or design disk) will function.
    • -
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 280424e35bb8..07cfc97b702b 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -14975,3 +14975,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. MistakeNot4892: - tweak: Various map changes to Bearcat, crashed pod, and several others. Please report issues! +2025-02-02: + Penelope Haze: + - tweak: Modified liquid and coating presentation to be more fancy. +2025-02-07: + Penelope Haze: + - tweak: Shears are now used to add or remove padding from objects. Wirecutters + still work as a backup, though. diff --git a/html/changelogs/AutoChangeLog-pr-4796.yml b/html/changelogs/AutoChangeLog-pr-4796.yml deleted file mode 100644 index debd7429ad88..000000000000 --- a/html/changelogs/AutoChangeLog-pr-4796.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Penelope Haze -changes: - - {tweak: Modified liquid and coating presentation to be more fancy.} -delete-after: true diff --git a/icons/mob/onmob/items/lefthand.dmi b/icons/mob/onmob/items/lefthand.dmi index 2714bd1248b7..d6caad0f37ce 100644 Binary files a/icons/mob/onmob/items/lefthand.dmi and b/icons/mob/onmob/items/lefthand.dmi differ diff --git a/icons/mob/onmob/items/righthand.dmi b/icons/mob/onmob/items/righthand.dmi index acbb83adbeb6..0f5f17e6c19b 100644 Binary files a/icons/mob/onmob/items/righthand.dmi and b/icons/mob/onmob/items/righthand.dmi differ diff --git a/icons/mob/screen/styles/midnight/hands.dmi b/icons/mob/screen/styles/midnight/hands.dmi index a55f123b2f97..b80c4c83427a 100644 Binary files a/icons/mob/screen/styles/midnight/hands.dmi and b/icons/mob/screen/styles/midnight/hands.dmi differ diff --git a/icons/mob/screen/styles/minimalist/hands.dmi b/icons/mob/screen/styles/minimalist/hands.dmi index 05840e72af8e..ff094e024af3 100644 Binary files a/icons/mob/screen/styles/minimalist/hands.dmi and b/icons/mob/screen/styles/minimalist/hands.dmi differ diff --git a/icons/mob/screen/styles/old/hands.dmi b/icons/mob/screen/styles/old/hands.dmi index b4472e2587c1..9f0eb66204a3 100644 Binary files a/icons/mob/screen/styles/old/hands.dmi and b/icons/mob/screen/styles/old/hands.dmi differ diff --git a/icons/mob/screen/styles/orange/hands.dmi b/icons/mob/screen/styles/orange/hands.dmi index e9223ae6cfbe..f1ceb7b190aa 100644 Binary files a/icons/mob/screen/styles/orange/hands.dmi and b/icons/mob/screen/styles/orange/hands.dmi differ diff --git a/icons/mob/screen/styles/robot/attack_selector.dmi b/icons/mob/screen/styles/robot/attack_selector.dmi new file mode 100644 index 000000000000..d28dd18a6fac Binary files /dev/null and b/icons/mob/screen/styles/robot/attack_selector.dmi differ diff --git a/icons/mob/screen/styles/robot/fire_intent.dmi b/icons/mob/screen/styles/robot/fire_intent.dmi new file mode 100644 index 000000000000..199ea1261455 Binary files /dev/null and b/icons/mob/screen/styles/robot/fire_intent.dmi differ diff --git a/icons/mob/screen/styles/robot/hands.dmi b/icons/mob/screen/styles/robot/hands.dmi new file mode 100644 index 000000000000..7f919d72c34e Binary files /dev/null and b/icons/mob/screen/styles/robot/hands.dmi differ diff --git a/icons/mob/screen/styles/robot/interaction_drop.dmi b/icons/mob/screen/styles/robot/interaction_drop.dmi new file mode 100644 index 000000000000..f9b50c0a0676 Binary files /dev/null and b/icons/mob/screen/styles/robot/interaction_drop.dmi differ diff --git a/icons/mob/screen/styles/robot/interaction_maneuver.dmi b/icons/mob/screen/styles/robot/interaction_maneuver.dmi new file mode 100644 index 000000000000..a59af200e49a Binary files /dev/null and b/icons/mob/screen/styles/robot/interaction_maneuver.dmi differ diff --git a/icons/mob/screen/styles/robot/interaction_resist.dmi b/icons/mob/screen/styles/robot/interaction_resist.dmi new file mode 100644 index 000000000000..c9c5ef64622f Binary files /dev/null and b/icons/mob/screen/styles/robot/interaction_resist.dmi differ diff --git a/icons/mob/screen/styles/robot/interaction_throw.dmi b/icons/mob/screen/styles/robot/interaction_throw.dmi new file mode 100644 index 000000000000..b98a7ae01e26 Binary files /dev/null and b/icons/mob/screen/styles/robot/interaction_throw.dmi differ diff --git a/icons/mob/screen/styles/robot/inventory.dmi b/icons/mob/screen/styles/robot/inventory.dmi index 23229b344248..1a9f6f039796 100644 Binary files a/icons/mob/screen/styles/robot/inventory.dmi and b/icons/mob/screen/styles/robot/inventory.dmi differ diff --git a/icons/mob/screen/styles/robot/modules_inventory.dmi b/icons/mob/screen/styles/robot/modules_inventory.dmi new file mode 100644 index 000000000000..fd94f0f29b45 Binary files /dev/null and b/icons/mob/screen/styles/robot/modules_inventory.dmi differ diff --git a/icons/mob/screen/styles/robot/movement.dmi b/icons/mob/screen/styles/robot/movement.dmi new file mode 100644 index 000000000000..f71eecbe8a66 Binary files /dev/null and b/icons/mob/screen/styles/robot/movement.dmi differ diff --git a/icons/mob/screen/styles/underworld/hands.dmi b/icons/mob/screen/styles/underworld/hands.dmi index fd37369cc082..dd6f8f42d91e 100644 Binary files a/icons/mob/screen/styles/underworld/hands.dmi and b/icons/mob/screen/styles/underworld/hands.dmi differ diff --git a/icons/mob/screen/styles/white/hands.dmi b/icons/mob/screen/styles/white/hands.dmi index 0f65b9904670..68180ce45dba 100644 Binary files a/icons/mob/screen/styles/white/hands.dmi and b/icons/mob/screen/styles/white/hands.dmi differ diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi index 00943fee5621..46c6c0e16dd3 100644 Binary files a/icons/obj/furniture.dmi and b/icons/obj/furniture.dmi differ diff --git a/icons/obj/items/bucket.dmi b/icons/obj/items/bucket.dmi index f84a2069ccc9..480546f19b0b 100644 Binary files a/icons/obj/items/bucket.dmi and b/icons/obj/items/bucket.dmi differ diff --git a/icons/obj/items/paint_bucket.dmi b/icons/obj/items/paint_bucket.dmi index b40bc590c849..fb01a26e693b 100644 Binary files a/icons/obj/items/paint_bucket.dmi and b/icons/obj/items/paint_bucket.dmi differ diff --git a/icons/obj/items/wheelchairkit.dmi b/icons/obj/items/wheelchairkit.dmi index d887fffc810f..d6615844f79a 100644 Binary files a/icons/obj/items/wheelchairkit.dmi and b/icons/obj/items/wheelchairkit.dmi differ diff --git a/icons/obj/items/wooden_bucket.dmi b/icons/obj/items/wooden_bucket.dmi index ae01b0833849..7a4768308be3 100644 Binary files a/icons/obj/items/wooden_bucket.dmi and b/icons/obj/items/wooden_bucket.dmi differ diff --git a/icons/obj/reagentfillings.dmi b/icons/obj/reagentfillings.dmi deleted file mode 100644 index 5542584eb417..000000000000 Binary files a/icons/obj/reagentfillings.dmi and /dev/null differ diff --git a/icons/obj/structures/bedroll.dmi b/icons/obj/structures/bedroll.dmi index 8d18e2808293..9363491681ae 100644 Binary files a/icons/obj/structures/bedroll.dmi and b/icons/obj/structures/bedroll.dmi differ diff --git a/icons/obj/structures/bedroll_rolled.dmi b/icons/obj/structures/bedroll_rolled.dmi new file mode 100644 index 000000000000..7670a2248456 Binary files /dev/null and b/icons/obj/structures/bedroll_rolled.dmi differ diff --git a/icons/obj/structures/benches.dmi b/icons/obj/structures/benches.dmi index 5a56743224bc..80fda7a9a165 100644 Binary files a/icons/obj/structures/benches.dmi and b/icons/obj/structures/benches.dmi differ diff --git a/icons/obj/structures/fancy_rustic_chair.dmi b/icons/obj/structures/fancy_rustic_chair.dmi deleted file mode 100644 index 9062f59e4aa6..000000000000 Binary files a/icons/obj/structures/fancy_rustic_chair.dmi and /dev/null differ diff --git a/icons/obj/structures/furniture/armchair.dmi b/icons/obj/structures/furniture/armchair.dmi new file mode 100644 index 000000000000..aada0c0681d4 Binary files /dev/null and b/icons/obj/structures/furniture/armchair.dmi differ diff --git a/icons/obj/structures/furniture/bed.dmi b/icons/obj/structures/furniture/bed.dmi new file mode 100644 index 000000000000..f9d1d7dda970 Binary files /dev/null and b/icons/obj/structures/furniture/bed.dmi differ diff --git a/icons/obj/structures/furniture/bed_psych.dmi b/icons/obj/structures/furniture/bed_psych.dmi new file mode 100644 index 000000000000..57e6943f54df Binary files /dev/null and b/icons/obj/structures/furniture/bed_psych.dmi differ diff --git a/icons/obj/structures/furniture/bed_simple.dmi b/icons/obj/structures/furniture/bed_simple.dmi new file mode 100644 index 000000000000..4e5bf1701a9f Binary files /dev/null and b/icons/obj/structures/furniture/bed_simple.dmi differ diff --git a/icons/obj/structures/furniture/bench.dmi b/icons/obj/structures/furniture/bench.dmi new file mode 100644 index 000000000000..80fda7a9a165 Binary files /dev/null and b/icons/obj/structures/furniture/bench.dmi differ diff --git a/icons/obj/structures/wood_benches.dmi b/icons/obj/structures/furniture/bench_wood.dmi similarity index 98% rename from icons/obj/structures/wood_benches.dmi rename to icons/obj/structures/furniture/bench_wood.dmi index 24014a51b543..f6c0043b9571 100644 Binary files a/icons/obj/structures/wood_benches.dmi and b/icons/obj/structures/furniture/bench_wood.dmi differ diff --git a/icons/obj/structures/furniture/chair.dmi b/icons/obj/structures/furniture/chair.dmi new file mode 100644 index 000000000000..dbd8dd3a62ee Binary files /dev/null and b/icons/obj/structures/furniture/chair.dmi differ diff --git a/icons/obj/structures/furniture/chair_backed.dmi b/icons/obj/structures/furniture/chair_backed.dmi new file mode 100644 index 000000000000..66eb3ecea7e2 Binary files /dev/null and b/icons/obj/structures/furniture/chair_backed.dmi differ diff --git a/icons/obj/structures/furniture/chair_backed_wood.dmi b/icons/obj/structures/furniture/chair_backed_wood.dmi new file mode 100644 index 000000000000..5eae485abf77 Binary files /dev/null and b/icons/obj/structures/furniture/chair_backed_wood.dmi differ diff --git a/icons/obj/structures/furniture/chair_captain.dmi b/icons/obj/structures/furniture/chair_captain.dmi new file mode 100644 index 000000000000..56287d4ec894 Binary files /dev/null and b/icons/obj/structures/furniture/chair_captain.dmi differ diff --git a/icons/obj/structures/furniture/chair_comfy.dmi b/icons/obj/structures/furniture/chair_comfy.dmi new file mode 100644 index 000000000000..4a3a63ca12e3 Binary files /dev/null and b/icons/obj/structures/furniture/chair_comfy.dmi differ diff --git a/icons/obj/structures/furniture/chair_comfy_office.dmi b/icons/obj/structures/furniture/chair_comfy_office.dmi new file mode 100644 index 000000000000..780dea823e60 Binary files /dev/null and b/icons/obj/structures/furniture/chair_comfy_office.dmi differ diff --git a/icons/obj/structures/furniture/chair_office.dmi b/icons/obj/structures/furniture/chair_office.dmi new file mode 100644 index 000000000000..6c1bbcf54a44 Binary files /dev/null and b/icons/obj/structures/furniture/chair_office.dmi differ diff --git a/icons/obj/structures/furniture/chair_rounded.dmi b/icons/obj/structures/furniture/chair_rounded.dmi new file mode 100644 index 000000000000..6ab3ce4b0dad Binary files /dev/null and b/icons/obj/structures/furniture/chair_rounded.dmi differ diff --git a/icons/obj/structures/furniture/chair_rustic.dmi b/icons/obj/structures/furniture/chair_rustic.dmi new file mode 100644 index 000000000000..e94faecc2090 Binary files /dev/null and b/icons/obj/structures/furniture/chair_rustic.dmi differ diff --git a/icons/obj/structures/furniture/chair_rustic_fancy.dmi b/icons/obj/structures/furniture/chair_rustic_fancy.dmi new file mode 100644 index 000000000000..5191fc5d4b4e Binary files /dev/null and b/icons/obj/structures/furniture/chair_rustic_fancy.dmi differ diff --git a/icons/obj/structures/furniture/chair_shuttle.dmi b/icons/obj/structures/furniture/chair_shuttle.dmi new file mode 100644 index 000000000000..6031f7edd6da Binary files /dev/null and b/icons/obj/structures/furniture/chair_shuttle.dmi differ diff --git a/icons/obj/structures/furniture/chair_slatted.dmi b/icons/obj/structures/furniture/chair_slatted.dmi new file mode 100644 index 000000000000..d05d846ed2e1 Binary files /dev/null and b/icons/obj/structures/furniture/chair_slatted.dmi differ diff --git a/icons/obj/structures/furniture/chair_slatted_wood.dmi b/icons/obj/structures/furniture/chair_slatted_wood.dmi new file mode 100644 index 000000000000..640d8da1db96 Binary files /dev/null and b/icons/obj/structures/furniture/chair_slatted_wood.dmi differ diff --git a/icons/obj/structures/furniture/chair_wooden.dmi b/icons/obj/structures/furniture/chair_wooden.dmi new file mode 100644 index 000000000000..3d77d82ebb83 Binary files /dev/null and b/icons/obj/structures/furniture/chair_wooden.dmi differ diff --git a/icons/obj/structures/furniture/chair_wooden_wings.dmi b/icons/obj/structures/furniture/chair_wooden_wings.dmi new file mode 100644 index 000000000000..928512cfc8fe Binary files /dev/null and b/icons/obj/structures/furniture/chair_wooden_wings.dmi differ diff --git a/icons/obj/structures/lounge.dmi b/icons/obj/structures/furniture/lounge.dmi similarity index 89% rename from icons/obj/structures/lounge.dmi rename to icons/obj/structures/furniture/lounge.dmi index 49843d472ca6..1323daaccd69 100644 Binary files a/icons/obj/structures/lounge.dmi and b/icons/obj/structures/furniture/lounge.dmi differ diff --git a/icons/obj/structures/furniture/pew.dmi b/icons/obj/structures/furniture/pew.dmi new file mode 100644 index 000000000000..5f19d36b2466 Binary files /dev/null and b/icons/obj/structures/furniture/pew.dmi differ diff --git a/icons/obj/structures/wood_pews.dmi b/icons/obj/structures/furniture/pew_wood.dmi similarity index 97% rename from icons/obj/structures/wood_pews.dmi rename to icons/obj/structures/furniture/pew_wood.dmi index bd9e0fe651e2..cfc0b9d578e9 100644 Binary files a/icons/obj/structures/wood_pews.dmi and b/icons/obj/structures/furniture/pew_wood.dmi differ diff --git a/icons/obj/structures/furniture/sofa_left.dmi b/icons/obj/structures/furniture/sofa_left.dmi new file mode 100644 index 000000000000..d64661b633ad Binary files /dev/null and b/icons/obj/structures/furniture/sofa_left.dmi differ diff --git a/icons/obj/structures/furniture/sofa_middle.dmi b/icons/obj/structures/furniture/sofa_middle.dmi new file mode 100644 index 000000000000..92a69a0146e3 Binary files /dev/null and b/icons/obj/structures/furniture/sofa_middle.dmi differ diff --git a/icons/obj/structures/furniture/sofa_right.dmi b/icons/obj/structures/furniture/sofa_right.dmi new file mode 100644 index 000000000000..82f801624ba8 Binary files /dev/null and b/icons/obj/structures/furniture/sofa_right.dmi differ diff --git a/icons/obj/structures/furniture/wheelchair.dmi b/icons/obj/structures/furniture/wheelchair.dmi new file mode 100644 index 000000000000..e4e13d08e606 Binary files /dev/null and b/icons/obj/structures/furniture/wheelchair.dmi differ diff --git a/icons/obj/structures/pews.dmi b/icons/obj/structures/pews.dmi deleted file mode 100644 index f384a3f127bc..000000000000 Binary files a/icons/obj/structures/pews.dmi and /dev/null differ diff --git a/icons/obj/structures/rustic_chair.dmi b/icons/obj/structures/rustic_chair.dmi deleted file mode 100644 index 1e48dd9c579a..000000000000 Binary files a/icons/obj/structures/rustic_chair.dmi and /dev/null differ diff --git a/icons/obj/structures/simple_bed.dmi b/icons/obj/structures/simple_bed.dmi deleted file mode 100644 index fe9a8ba32ea0..000000000000 Binary files a/icons/obj/structures/simple_bed.dmi and /dev/null differ diff --git a/maps/antag_spawn/ert/ert_base.dmm b/maps/antag_spawn/ert/ert_base.dmm index 703d909d0c3a..445cad5e6ae8 100644 --- a/maps/antag_spawn/ert/ert_base.dmm +++ b/maps/antag_spawn/ert/ert_base.dmm @@ -91,7 +91,7 @@ /turf/unsimulated/floor/dark, /area/map_template/rescue_base/base) "ay" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/unsimulated/floor/dark, /area/map_template/rescue_base/base) "az" = ( @@ -405,7 +405,7 @@ /turf/unsimulated/floor/vault, /area/map_template/rescue_base/base) "bq" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /turf/unsimulated/floor/dark, @@ -1036,7 +1036,7 @@ /turf/unsimulated/floor/vault, /area/map_template/rescue_base/base) "cP" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/unsimulated/floor/dark, @@ -1386,7 +1386,7 @@ /turf/unsimulated/floor/rescue_base, /area/map_template/rescue_base/base) "dO" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /turf/unsimulated/floor/vault, /area/map_template/rescue_base/base) "dQ" = ( @@ -1469,7 +1469,7 @@ /turf/unsimulated/floor/vault, /area/map_template/rescue_base/base) "eg" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /turf/unsimulated/floor/vault, @@ -1741,7 +1741,7 @@ /turf/unsimulated/floor/cult, /area/map_template/rescue_base/base) "eI" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /turf/unsimulated/floor/cult, @@ -1913,13 +1913,13 @@ /turf/floor/tiled/dark, /area/map_template/rescue_base/start) "fg" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /turf/floor/tiled/dark, /area/map_template/rescue_base/start) "fh" = ( -/obj/structure/bed/chair/shuttle, +/obj/structure/chair/shuttle, /turf/floor/tiled/dark, /area/map_template/rescue_base/start) "fi" = ( @@ -2192,7 +2192,7 @@ /turf/floor/tiled/dark, /area/map_template/rescue_base/start) "fT" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/light{ @@ -2206,7 +2206,7 @@ /turf/floor/tiled/dark, /area/map_template/rescue_base/start) "fV" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/light{ @@ -2251,7 +2251,7 @@ /turf/floor/tiled/dark, /area/map_template/rescue_base/start) "gb" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled/dark, @@ -2468,7 +2468,7 @@ pixel_x = 27; dir = 8 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/light{ @@ -2527,7 +2527,7 @@ /turf/floor/plating, /area/map_template/rescue_base/start) "gV" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/dark, @@ -2581,7 +2581,7 @@ /turf/unsimulated/floor/asteroid, /area/map_template/rescue_base/base) "hd" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/light{ diff --git a/maps/antag_spawn/mercenary/mercenary_base.dmm b/maps/antag_spawn/mercenary/mercenary_base.dmm index f75023f8eb7d..152355b9aab0 100644 --- a/maps/antag_spawn/mercenary/mercenary_base.dmm +++ b/maps/antag_spawn/mercenary/mercenary_base.dmm @@ -149,7 +149,7 @@ /turf/floor/shuttle/darkred, /area/map_template/merc_shuttle) "aq" = ( -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 1 }, /obj/structure/cable{ @@ -269,7 +269,7 @@ /turf/floor/reinforced, /area/map_template/merc_shuttle) "aC" = ( -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 1 }, /turf/floor/shuttle/darkred, @@ -383,7 +383,7 @@ pixel_x = -21; req_access = list("ACCESS_MERCENARY") }, -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 4 }, /turf/floor/shuttle/darkred, @@ -421,7 +421,7 @@ /turf/floor/shuttle/darkred, /area/map_template/merc_shuttle) "aP" = ( -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 8 }, /obj/effect/floor_decal/industrial/warning/corner{ @@ -487,7 +487,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 4 }, /turf/floor/shuttle/darkred, @@ -1639,11 +1639,11 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/bed/chair/office, +/obj/structure/chair/office, /turf/floor/tiled, /area/map_template/merc_spawn) "ec" = ( -/obj/structure/bed/chair/office{ +/obj/structure/chair/office{ dir = 8 }, /turf/floor/tiled, @@ -1849,7 +1849,7 @@ /turf/floor/plating, /area/map_template/merc_spawn) "jE" = ( -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 8 }, /obj/machinery/recharger/wallcharger{ @@ -1907,7 +1907,7 @@ dir = 8; icon_state = "warningcorner" }, -/obj/structure/bed/chair/office{ +/obj/structure/chair/office{ dir = 1 }, /turf/floor/tiled, @@ -2632,7 +2632,7 @@ /obj/effect/floor_decal/industrial/warning{ icon_state = "warning" }, -/obj/structure/bed/chair/office{ +/obj/structure/chair/office{ dir = 1 }, /turf/floor/tiled, @@ -2695,7 +2695,7 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 }, -/obj/structure/bed/chair/office, +/obj/structure/chair/office, /turf/floor/tiled, /area/map_template/merc_spawn) "Vw" = ( diff --git a/maps/away/bearcat/bearcat-1.dmm b/maps/away/bearcat/bearcat-1.dmm index a70555082767..a4c908ce3778 100644 --- a/maps/away/bearcat/bearcat-1.dmm +++ b/maps/away/bearcat/bearcat-1.dmm @@ -356,7 +356,7 @@ /obj/structure/closet/crate/plastic, /obj/random/accessory, /obj/random/accessory, -/obj/item/chems/glass/paint/random, +/obj/item/chems/glass/bucket/paint/random, /turf/floor/tiled/usedup, /area/ship/scrap/cargo/lower) "aS" = ( diff --git a/maps/away/bearcat/bearcat-2.dmm b/maps/away/bearcat/bearcat-2.dmm index 2d9318f06d47..375413801273 100644 --- a/maps/away/bearcat/bearcat-2.dmm +++ b/maps/away/bearcat/bearcat-2.dmm @@ -63,7 +63,7 @@ /area/ship/scrap/command/bridge) "aj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /obj/abstract/landmark/corpse/deadcap, @@ -126,7 +126,7 @@ /turf/wall/r_wall, /area/ship/scrap/command/bridge) "au" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/power/apc/derelict{ @@ -152,7 +152,7 @@ dir = 4; }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled/dark/usedup, @@ -407,7 +407,7 @@ /turf/floor/laminate, /area/ship/scrap/command/captain) "aV" = ( -/obj/structure/bed/chair/comfy/brown, +/obj/structure/chair/comfy/brown, /turf/floor/laminate, /area/ship/scrap/command/captain) "aW" = ( @@ -1090,7 +1090,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled/usedup, /area/ship/scrap/crew/saloon) "cn" = ( @@ -1106,7 +1106,7 @@ /area/ship/scrap/crew/saloon) "co" = ( /obj/structure/emergency_dispenser/north, -/obj/structure/bed/chair/wood, +/obj/structure/chair/wood, /obj/item/deck/tarot, /turf/floor/tiled/usedup, /area/ship/scrap/crew/saloon) @@ -1585,7 +1585,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /turf/floor/tiled/usedup, @@ -2216,7 +2216,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /obj/structure/cable{ icon_state = "4-8" }, @@ -3775,7 +3775,7 @@ /turf/floor/tiled/usedup, /area/ship/scrap/maintenance/engineering) "hr" = ( -/obj/structure/bed/chair/comfy/brown, +/obj/structure/chair/comfy/brown, /obj/effect/floor_decal/corner/yellow{ dir = 5 }, diff --git a/maps/away/bearcat/bearcat.dm b/maps/away/bearcat/bearcat.dm index 37d26d36b557..570e2e140e6a 100644 --- a/maps/away/bearcat/bearcat.dm +++ b/maps/away/bearcat/bearcat.dm @@ -79,7 +79,7 @@ name = "Lower Deck" landmark_tag = "nav_bearcat_lift_bottom" base_area = /area/ship/scrap/cargo/lower - base_turf = /turf/floor + base_turf = /turf/floor/plating /obj/machinery/door/airlock/autoname/command door_color = COLOR_COMMAND_BLUE @@ -113,7 +113,7 @@ if(!istype(corpse)) return corpse.SetName("Captain") - var/obj/structure/bed/chair/C = locate() in loc + var/obj/structure/chair/C = locate() in loc if(C) C.buckle_mob(corpse) qdel(src) diff --git a/maps/away/casino/casino.dmm b/maps/away/casino/casino.dmm index 77f3aee176a2..9351a57a678b 100644 --- a/maps/away/casino/casino.dmm +++ b/maps/away/casino/casino.dmm @@ -139,7 +139,7 @@ /turf/floor/plating, /area/casino/casino_bridge) "au" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/effect/decal/cleanable/blood/splatter, @@ -188,13 +188,13 @@ /turf/floor/plating, /area/casino/casino_maintenance) "aE" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled, /area/casino/casino_bridge) "aF" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/decal/cleanable/blood/splatter, @@ -688,7 +688,7 @@ /turf/floor/plating, /area/casino/casino_security) "bQ" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/plating, /area/casino/casino_security) "bR" = ( @@ -999,7 +999,7 @@ /turf/floor/tiled, /area/casino/casino_security) "cS" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/decal/cleanable/blood, @@ -1229,7 +1229,7 @@ /turf/floor/tiled, /area/casino/casino_cutter) "dG" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/door/window, @@ -1273,7 +1273,7 @@ /turf/floor/plating/airless, /area/space) "dM" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 8 }, /turf/floor/plating, @@ -1313,7 +1313,7 @@ /turf/floor/plating, /area/casino/casino_storage) "dR" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/plating, /area/casino/casino_storage) "dS" = ( @@ -1323,7 +1323,7 @@ /turf/floor/plating, /area/casino/casino_storage) "dT" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /turf/floor/plating, /area/casino/casino_storage) "dU" = ( @@ -1344,20 +1344,20 @@ /obj/random/cash, /obj/random/cash, /obj/random/cash, -/obj/structure/bed/chair/comfy/captain{ +/obj/structure/chair/comfy/captain{ dir = 1 }, /turf/floor/shuttle/yellow, /area/casino/casino_cutter) "dY" = ( -/obj/structure/bed/chair/comfy/captain{ +/obj/structure/chair/comfy/captain{ dir = 1 }, /obj/item/bag/cash, /turf/floor/shuttle/yellow, /area/casino/casino_cutter) "dZ" = ( -/obj/structure/bed/chair/comfy/captain{ +/obj/structure/chair/comfy/captain{ dir = 1 }, /turf/floor/shuttle/yellow, @@ -1366,7 +1366,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/bed/chair/comfy/captain{ +/obj/structure/chair/comfy/captain{ dir = 1 }, /turf/floor/shuttle/yellow, @@ -1531,7 +1531,7 @@ /turf/floor/plating, /area/casino/casino_storage) "ey" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/effect/decal/cleanable/blood/splatter, /turf/floor/plating, /area/casino/casino_storage) @@ -1999,7 +1999,7 @@ /turf/floor/carpet, /area/casino/casino_mainfloor) "fL" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 1 }, /turf/floor/carpet, @@ -2165,27 +2165,27 @@ /turf/floor/tiled, /area/casino/casino_crew_cantina) "gk" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/effect/decal/cleanable/blood/splatter, /turf/floor/tiled, /area/casino/casino_crew_cantina) "gl" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled, /area/casino/casino_crew_cantina) "gm" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/item/chems/drinks/flask/shiny, /turf/floor/tiled, /area/casino/casino_crew_cantina) "gn" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/random/snack, @@ -2357,7 +2357,7 @@ /turf/floor/tiled, /area/casino/casino_mainfloor) "gI" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled, @@ -2393,7 +2393,7 @@ /turf/wall, /area/casino/casino_solar_control) "gX" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled, /area/casino/casino_mainfloor) "gY" = ( @@ -2720,7 +2720,7 @@ /turf/floor/carpet, /area/casino/casino_mainfloor) "hZ" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 4 }, /turf/floor/carpet, @@ -2736,7 +2736,7 @@ /turf/floor/carpet, /area/casino/casino_mainfloor) "ic" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 8 }, /turf/floor/carpet, @@ -2848,7 +2848,7 @@ /turf/floor/tiled, /area/casino/casino_kitchen) "ip" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 4 }, /obj/item/knife/combat, @@ -3123,7 +3123,7 @@ /turf/floor/carpet, /area/casino/casino_mainfloor) "jc" = ( -/obj/structure/bed/chair/comfy/beige{ +/obj/structure/chair/comfy/beige{ dir = 8 }, /turf/floor/carpet, @@ -3576,7 +3576,7 @@ /turf/floor/carpet, /area/casino/casino_mainfloor) "kl" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 1 }, /turf/floor/carpet, @@ -4196,7 +4196,7 @@ /turf/floor/carpet, /area/casino/casino_mainfloor) "lV" = ( -/obj/structure/bed/chair/comfy/black, +/obj/structure/chair/comfy/black, /turf/floor/carpet, /area/casino/casino_mainfloor) "lX" = ( @@ -4212,7 +4212,7 @@ /turf/floor/plating, /area/casino/casino_bow) "lY" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -4232,7 +4232,7 @@ /turf/floor/laminate, /area/casino/casino_private_vip) "mb" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 8 }, /turf/floor/laminate, @@ -4245,7 +4245,7 @@ /turf/floor/laminate, /area/casino/casino_private_vip) "md" = ( -/obj/structure/bed/chair/comfy/red, +/obj/structure/chair/comfy/red, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/floor/laminate, /area/casino/casino_private1) @@ -4257,7 +4257,7 @@ /turf/floor/laminate, /area/casino/casino_private1) "mf" = ( -/obj/structure/bed/chair/comfy/red, +/obj/structure/chair/comfy/red, /obj/item/flame/fuelled/lighter/zippo/random, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/floor/laminate, @@ -4295,7 +4295,7 @@ /turf/floor/plating, /area/casino/casino_bow) "ml" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/effect/decal/cleanable/blood/splatter, @@ -4319,7 +4319,7 @@ /turf/floor/plating, /area/casino/casino_bow) "mp" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -4337,7 +4337,7 @@ /turf/floor/laminate, /area/casino/casino_private_vip) "ms" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 8 }, /obj/item/bag/cash, @@ -4358,7 +4358,7 @@ /turf/floor/laminate, /area/casino/casino_private1) "mv" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 8 }, /turf/floor/laminate, @@ -4376,7 +4376,7 @@ /turf/floor/laminate, /area/casino/casino_private2) "my" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 8 }, /turf/floor/laminate, @@ -4603,7 +4603,7 @@ /turf/floor/plating/airless, /area/casino/casino_bow) "nj" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/item/radio/intercom{ dir = 4; pixel_x = -22 @@ -4624,7 +4624,7 @@ /turf/wall/r_wall, /area/casino/casino_bow) "nm" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/status_display{ pixel_x = -32; dir = 8 @@ -4639,7 +4639,7 @@ /turf/floor/plating, /area/casino/casino_bow) "nn" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/status_display{ pixel_x = -32; dir = 8 @@ -4654,7 +4654,7 @@ /turf/floor/plating, /area/casino/casino_bow) "no" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/status_display{ pixel_x = -32; dir = 8 @@ -5000,7 +5000,7 @@ /turf/floor/carpet, /area/casino/casino_mainfloor) "Fb" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/decal/cleanable/blood, diff --git a/maps/away/derelict/derelict-station.dmm b/maps/away/derelict/derelict-station.dmm index e1b3af10b024..dbb6946ec806 100644 --- a/maps/away/derelict/derelict-station.dmm +++ b/maps/away/derelict/derelict-station.dmm @@ -177,7 +177,7 @@ /turf/floor/plating, /area/derelict/ship) "aA" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled, @@ -408,7 +408,7 @@ /turf/floor/tiled, /area/derelict/ship) "bk" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled, @@ -578,7 +578,7 @@ /turf/floor/tiled/dark/airless, /area/constructionsite/bridge) "bT" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled, /area/derelict/ship) "bU" = ( @@ -1244,7 +1244,7 @@ /turf/floor/plating/airless/broken, /area/constructionsite/storage) "et" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 1 }, /turf/floor/tiled/dark/airless, diff --git a/maps/away/errant_pisces/errant_pisces.dmm b/maps/away/errant_pisces/errant_pisces.dmm index df04d63c3a72..79a6b2c6d3a1 100644 --- a/maps/away/errant_pisces/errant_pisces.dmm +++ b/maps/away/errant_pisces/errant_pisces.dmm @@ -578,7 +578,7 @@ /turf/floor/plating, /area/errant_pisces/enginering) "bM" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /turf/floor/plating, @@ -947,7 +947,7 @@ /turf/floor/plating, /area/errant_pisces/enginering) "cT" = ( -/obj/structure/bed/chair/janicart, +/obj/structure/janicart, /obj/machinery/light/small{ dir = 8 }, @@ -2542,7 +2542,7 @@ /turf/floor/laminate, /area/errant_pisces/rooms) "gt" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /turf/floor/laminate, @@ -2556,7 +2556,7 @@ /turf/floor/laminate, /area/errant_pisces/rooms) "gv" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /turf/floor/laminate, @@ -2659,7 +2659,7 @@ /turf/floor/plating/airless, /area/space) "gL" = ( -/obj/structure/bed/chair/comfy/green, +/obj/structure/chair/comfy/green, /obj/machinery/light{ dir = 8; icon_state = "tube1" @@ -2677,7 +2677,7 @@ /turf/floor/laminate, /area/errant_pisces/rooms) "gO" = ( -/obj/structure/bed/chair/comfy/teal, +/obj/structure/chair/comfy/teal, /obj/machinery/light{ dir = 8; icon_state = "tube1" @@ -2694,7 +2694,7 @@ /turf/floor/laminate, /area/errant_pisces/rooms) "gR" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -2892,7 +2892,7 @@ /turf/floor/laminate, /area/errant_pisces/rooms) "ht" = ( -/obj/structure/bed/chair/comfy/brown, +/obj/structure/chair/comfy/brown, /obj/structure/cable/green{ icon_state = "1-2" }, @@ -2931,7 +2931,7 @@ pixel_y = -25; req_access = newlist() }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /turf/floor/laminate, @@ -3071,7 +3071,7 @@ /turf/floor/tiled, /area/errant_pisces/infirmary) "hY" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled, /area/errant_pisces/infirmary) "hZ" = ( @@ -3792,7 +3792,7 @@ /turf/floor/tiled, /area/errant_pisces/science_wing) "kg" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /turf/floor/tiled, @@ -3984,7 +3984,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /turf/floor/tiled, @@ -5658,7 +5658,7 @@ /turf/floor/tiled, /area/errant_pisces/bridge) "oT" = ( -/obj/structure/bed/chair/comfy/captain, +/obj/structure/chair/comfy/captain, /turf/floor/tiled, /area/errant_pisces/bridge) "oU" = ( @@ -5778,7 +5778,7 @@ /turf/floor/laminate, /area/errant_pisces/bridge) "pm" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 4 }, /turf/floor/laminate, @@ -5919,7 +5919,7 @@ /turf/floor/tiled, /area/errant_pisces/bridge) "pL" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /turf/floor/tiled, /area/errant_pisces/bridge) "pM" = ( @@ -6051,7 +6051,7 @@ /turf/floor/tiled, /area/errant_pisces/bridge) "qb" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /turf/floor/tiled, @@ -6279,7 +6279,7 @@ /turf/wall/r_wall, /area/space) "qN" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/plating, /area/errant_pisces/fishing_wing) "qO" = ( @@ -6356,7 +6356,7 @@ /turf/space, /area/space) "qU" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/plating, @@ -6373,7 +6373,7 @@ /turf/floor/plating, /area/errant_pisces/fishing_wing) "qX" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/item/flame/match, diff --git a/maps/away/liberia/liberia.dmm b/maps/away/liberia/liberia.dmm index 5d5473d9c567..0824627ff7e7 100644 --- a/maps/away/liberia/liberia.dmm +++ b/maps/away/liberia/liberia.dmm @@ -23,7 +23,7 @@ /turf/floor/tiled/techfloor/grid, /area/liberia/dockinghall) "ad" = ( -/obj/structure/bed/chair/comfy/captain{ +/obj/structure/chair/comfy/captain{ dir = 4 }, /obj/effect/floor_decal/corner/blue/mono, @@ -326,7 +326,7 @@ /turf/floor/tiled/techfloor/grid, /area/liberia/engineeringengines) "aO" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /turf/floor/tiled/steel_grid, @@ -624,7 +624,7 @@ /turf/floor/plating, /area/liberia/bridge) "bn" = ( -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /obj/effect/floor_decal/borderfloor{ dir = 4 }, @@ -838,7 +838,7 @@ /turf/floor/carpet/blue2, /area/liberia/mule) "bE" = ( -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 8 }, /turf/floor/carpet/blue2, @@ -1114,7 +1114,7 @@ req_access = list("ACCESS_MERCHANT"); dir = 1 }, -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 8 }, /turf/floor/carpet/blue2, @@ -1460,7 +1460,7 @@ /turf/floor/tiled/techfloor/grid, /area/liberia/engineeringengines) "cG" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/effect/floor_decal/spline/fancy/wood{ dir = 9 }, @@ -1546,7 +1546,7 @@ /turf/floor/tiled/dark, /area/liberia/mule) "cQ" = ( -/obj/structure/bed/chair/office/comfy/brown{ +/obj/structure/chair/office/comfy/brown{ dir = 4 }, /obj/structure/cable/blue{ @@ -3301,7 +3301,7 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 9 }, -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 4 }, /turf/floor/carpet, @@ -3321,13 +3321,13 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 5 }, -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 8 }, /turf/floor/carpet, /area/liberia/bar) "fR" = ( -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 4 }, /obj/machinery/alarm/liberia{ @@ -3345,7 +3345,7 @@ /turf/floor/laminate/ebony, /area/liberia/bar) "fT" = ( -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 8 }, /obj/machinery/power/apc/liberia{ @@ -3473,7 +3473,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /turf/floor/tiled, @@ -3492,7 +3492,7 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 4 }, /turf/floor/carpet, @@ -3507,7 +3507,7 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 8 }, /turf/floor/carpet, @@ -3516,7 +3516,7 @@ /turf/floor/laminate/ebony, /area/liberia/bar) "gj" = ( -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/abstract/submap_landmark/spawnpoint/liberia, /turf/floor/laminate/ebony, @@ -3576,7 +3576,7 @@ /turf/floor/tiled/monotile, /area/liberia/officeroom) "gp" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -4176,7 +4176,7 @@ /turf/floor/carpet/red, /area/liberia/captain) "hq" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /turf/floor/carpet/red, @@ -4776,7 +4776,7 @@ /turf/floor/tiled/dark/monotile, /area/liberia/bridge) "iN" = ( -/obj/structure/bed/chair/comfy/blue{ +/obj/structure/chair/comfy/blue{ dir = 4 }, /obj/effect/floor_decal/corner/blue/mono, @@ -5160,7 +5160,7 @@ /obj/machinery/alarm/liberia{ pixel_y = 24 }, -/obj/structure/bed/chair/office/comfy/beige, +/obj/structure/chair/office/comfy/beige, /turf/floor/carpet, /area/liberia/library) "jM" = ( @@ -5188,7 +5188,7 @@ /turf/floor/tiled/monotile, /area/liberia/officeroom) "jR" = ( -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, @@ -5214,7 +5214,7 @@ /turf/floor/tiled/dark, /area/liberia/bridge) "jU" = ( -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, @@ -5239,7 +5239,7 @@ /turf/floor/tiled/techfloor/grid, /area/liberia/merchantstorage) "jW" = ( -/obj/structure/bed/chair/office/comfy/beige{ +/obj/structure/chair/office/comfy/beige{ dir = 4 }, /turf/floor/carpet, @@ -5307,7 +5307,7 @@ /area/liberia/guestroom2) "kb" = ( /obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/bed/chair/office/comfy/beige{ +/obj/structure/chair/office/comfy/beige{ dir = 4 }, /turf/floor/carpet, @@ -5475,7 +5475,7 @@ /turf/floor/carpet, /area/liberia/library) "kq" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/effect/floor_decal/spline/fancy/wood{ @@ -6288,7 +6288,7 @@ /turf/floor/tiled/steel_grid, /area/liberia/atmos) "nH" = ( -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /obj/abstract/submap_landmark/spawnpoint/liberia, /turf/floor/tiled, /area/liberia/hallway) @@ -7734,7 +7734,7 @@ /turf/wall/prepainted, /area/liberia/bar) "Ja" = ( -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /obj/effect/floor_decal/borderfloor{ dir = 8 }, diff --git a/maps/away/lost_supply_base/lost_supply_base.dmm b/maps/away/lost_supply_base/lost_supply_base.dmm index 55d862015336..4981010ff903 100644 --- a/maps/away/lost_supply_base/lost_supply_base.dmm +++ b/maps/away/lost_supply_base/lost_supply_base.dmm @@ -353,7 +353,7 @@ /turf/floor/tiled/airless, /area/lost_supply_base/office) "aT" = ( -/obj/structure/bed/chair/comfy/captain, +/obj/structure/chair/comfy/captain, /turf/floor/tiled/airless, /area/lost_supply_base/office) "aU" = ( @@ -1170,7 +1170,7 @@ /turf/floor/tiled/airless, /area/lost_supply_base/common) "dy" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/airless, @@ -1190,7 +1190,7 @@ /area/lost_supply_base/common) "dB" = ( /obj/item/utensil/fork, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled/airless, @@ -1249,16 +1249,16 @@ /turf/floor/shuttle/blue, /area/space) "dT" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/random/handgun, /turf/floor/shuttle/blue, /area/space) "dU" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/shuttle/blue, /area/space) "dV" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/random/smokes, /turf/floor/shuttle/blue, /area/space) @@ -1306,7 +1306,7 @@ /turf/floor/tiled/airless, /area/lost_supply_base/common) "ef" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled/airless, @@ -1405,7 +1405,7 @@ /turf/floor/shuttle/blue, /area/space) "ex" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/item/key, @@ -1473,13 +1473,13 @@ /turf/floor/shuttle/blue, /area/space) "eM" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/shuttle/blue, /area/space) "eN" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/random/voidhelmet, diff --git a/maps/away/magshield/magshield.dmm b/maps/away/magshield/magshield.dmm index de625ae93469..6608162f7c71 100644 --- a/maps/away/magshield/magshield.dmm +++ b/maps/away/magshield/magshield.dmm @@ -641,7 +641,7 @@ /turf/floor/plating/airless, /area/magshield/smes_storage) "bY" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/light/small{ @@ -711,7 +711,7 @@ /turf/floor/plating, /area/magshield/smes_storage) "ci" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/structure/cable/yellow{ @@ -1318,7 +1318,7 @@ /turf/floor/plating/airless, /area/magshield/north) "dP" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/plating/airless, @@ -2079,7 +2079,7 @@ /turf/floor/tiled, /area/magshield/west) "fZ" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /turf/floor/tiled, @@ -2492,7 +2492,7 @@ /turf/floor/tiled/white, /area/magshield/west) "hp" = ( -/obj/structure/bed/chair/comfy/captain, +/obj/structure/chair/comfy/captain, /turf/floor/tiled/white, /area/magshield/west) "hq" = ( @@ -2655,7 +2655,7 @@ /turf/floor/carpet/blue, /area/magshield/west) "hS" = ( -/obj/structure/bed/chair/comfy/red, +/obj/structure/chair/comfy/red, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -3057,7 +3057,7 @@ /turf/floor/tiled, /area/magshield/south) "je" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled, /area/magshield/south) "jf" = ( @@ -3148,7 +3148,7 @@ /turf/floor/tiled, /area/magshield/south) "js" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled, @@ -3160,7 +3160,7 @@ /turf/floor/tiled, /area/magshield/south) "ju" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/light{ @@ -3177,7 +3177,7 @@ /turf/floor/tiled, /area/magshield/south) "jw" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled, @@ -3424,7 +3424,7 @@ /turf/floor/tiled, /area/magshield/south) "kh" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled, diff --git a/maps/away/mining/mining-signal.dmm b/maps/away/mining/mining-signal.dmm index 867c49b56143..1f697ed949c4 100644 --- a/maps/away/mining/mining-signal.dmm +++ b/maps/away/mining/mining-signal.dmm @@ -150,7 +150,7 @@ /turf/floor/tiled, /area/outpost/abandoned) "aK" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8; icon_state = "officechair_dark" }, @@ -158,7 +158,7 @@ /turf/floor/tiled/white, /area/outpost/abandoned) "aL" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4; icon_state = "officechair_dark" }, @@ -332,7 +332,7 @@ /turf/floor/tiled/white, /area/outpost/abandoned) "bs" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/effect/floor_decal/corner/purple{ dir = 5 }, @@ -778,7 +778,7 @@ /turf/floor/carpet/blue, /area/outpost/abandoned) "cP" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/light/small{ dir = 1 }, @@ -1061,12 +1061,12 @@ /area/outpost/abandoned) "dK" = ( /obj/abstract/landmark/mapped_fluid/fuel, -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled/airless, /area/outpost/abandoned) "dL" = ( /obj/abstract/landmark/mapped_fluid/fuel, -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/light/small/emergency{ dir = 1; icon_state = "bulb1" @@ -1074,7 +1074,7 @@ /turf/floor/tiled/airless, /area/outpost/abandoned) "dM" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled/airless, /area/outpost/abandoned) "dN" = ( @@ -1746,7 +1746,7 @@ /turf/floor/tiled/dark, /area/outpost/abandoned) "fV" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /turf/floor/tiled/dark, @@ -1780,7 +1780,7 @@ /turf/wall/titanium, /area/outpost/abandoned) "ga" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/effect/decal/cleanable/dirt/visible, @@ -2126,7 +2126,7 @@ /turf/floor/tiled/airless, /area/outpost/abandoned) "hb" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/effect/floor_decal/industrial/warning{ dir = 1; icon_state = "warning" @@ -2176,7 +2176,7 @@ /turf/floor/tiled/airless, /area/outpost/abandoned) "hk" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/effect/floor_decal/industrial/warning{ @@ -2190,7 +2190,7 @@ /turf/floor/tiled/airless, /area/outpost/abandoned) "hm" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled/airless, diff --git a/maps/away/mining/mining.dm b/maps/away/mining/mining.dm index 4f6cec271604..dcd99e53aeeb 100644 --- a/maps/away/mining/mining.dm +++ b/maps/away/mining/mining.dm @@ -215,10 +215,9 @@ . = ..() number = rand(10,99) -/obj/structure/totem/examine(mob/user) +/obj/structure/totem/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It's been engraved with the symbols 'RWH QaG [number]'.") //i am not a linguist - + . += "It's been engraved with the symbols 'RWH QaG [number]'." /obj/item/stool/stone/Initialize(mapload) . = ..(mapload, /decl/material/solid/stone/sandstone) diff --git a/maps/away/smugglers/smugglers.dmm b/maps/away/smugglers/smugglers.dmm index a0dbd7960366..ab98bd7f708f 100644 --- a/maps/away/smugglers/smugglers.dmm +++ b/maps/away/smugglers/smugglers.dmm @@ -682,7 +682,7 @@ /turf/floor/tiled, /area/smugglers/office) "bL" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 8 }, /obj/machinery/light{ @@ -865,7 +865,7 @@ /turf/floor/plating/airless, /area/smugglers/dorms) "cr" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/light, @@ -889,7 +889,7 @@ /turf/floor/tiled, /area/smugglers/dorms) "cu" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/light, diff --git a/maps/away/unishi/unishi-2.dmm b/maps/away/unishi/unishi-2.dmm index f31f2097fe4d..32aca273e7c6 100644 --- a/maps/away/unishi/unishi-2.dmm +++ b/maps/away/unishi/unishi-2.dmm @@ -19,13 +19,13 @@ /turf/floor/carpet/red, /area/unishi/library) "af" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /turf/floor/carpet/red, /area/unishi/library) "ah" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -289,7 +289,7 @@ /turf/floor/tiled/white, /area/unishi/chem) "aU" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/white, @@ -334,7 +334,7 @@ /turf/floor, /area/unishi/common) "bb" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/machinery/light{ @@ -430,7 +430,7 @@ /turf/floor, /area/unishi/common) "bt" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled/dark, /area/unishi/classroom) "bu" = ( @@ -446,7 +446,7 @@ /turf/floor/tiled/dark, /area/unishi/classroom) "bv" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -844,7 +844,7 @@ /turf/floor/tiled, /area/unishi/meeting) "cA" = ( -/obj/structure/bed/chair/office/comfy/black, +/obj/structure/chair/office/comfy/black, /turf/floor/tiled, /area/unishi/meeting) "cB" = ( @@ -954,7 +954,7 @@ /turf/floor/reinforced, /area/space) "cM" = ( -/obj/structure/bed/chair/office/comfy/black{ +/obj/structure/chair/office/comfy/black{ dir = 4 }, /turf/floor/tiled, @@ -1014,7 +1014,7 @@ /turf/floor/reinforced, /area/unishi/toxins) "cW" = ( -/obj/structure/bed/chair/office/comfy/black{ +/obj/structure/chair/office/comfy/black{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -1084,13 +1084,13 @@ /turf/floor/reinforced, /area/unishi/toxins) "df" = ( -/obj/structure/bed/chair/office/comfy/black{ +/obj/structure/chair/office/comfy/black{ dir = 1 }, /turf/floor/tiled, /area/unishi/meeting) "dg" = ( -/obj/structure/bed/chair/office/comfy/black{ +/obj/structure/chair/office/comfy/black{ dir = 1 }, /obj/machinery/alarm{ @@ -1286,13 +1286,13 @@ /turf/wall/titanium, /area/unishi/hydro) "dK" = ( -/obj/structure/bed/chair/office{ +/obj/structure/chair/office{ dir = 1 }, /turf/floor/tiled, /area/unishi/rnd) "dL" = ( -/obj/structure/bed/chair/office{ +/obj/structure/chair/office{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -1310,7 +1310,7 @@ /turf/floor/tiled, /area/unishi/rnd) "dN" = ( -/obj/structure/bed/chair/office{ +/obj/structure/chair/office{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2001,7 +2001,7 @@ /turf/floor/tiled/dark, /area/unishi/common) "fB" = ( -/obj/structure/bed/chair/office/comfy/black{ +/obj/structure/chair/office/comfy/black{ dir = 4 }, /obj/machinery/light, @@ -2020,7 +2020,7 @@ /turf/floor/tiled/dark, /area/unishi/common) "fE" = ( -/obj/structure/bed/chair/office/comfy/black{ +/obj/structure/chair/office/comfy/black{ dir = 1 }, /turf/floor/tiled/dark, @@ -2042,7 +2042,7 @@ /turf/floor/tiled/white/monotile, /area/unishi/common) "fH" = ( -/obj/structure/bed/chair/office/comfy/black{ +/obj/structure/chair/office/comfy/black{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_pump/on{ diff --git a/maps/away/unishi/unishi-3.dmm b/maps/away/unishi/unishi-3.dmm index f1b508bf2884..24e50a4e253e 100644 --- a/maps/away/unishi/unishi-3.dmm +++ b/maps/away/unishi/unishi-3.dmm @@ -58,7 +58,7 @@ /turf/floor/tiled, /area/unishi/bridge) "an" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled, @@ -70,7 +70,7 @@ /turf/floor/tiled/white/monotile, /area/unishi/bridge) "ap" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/light, @@ -449,7 +449,7 @@ /turf/floor/tiled, /area/unishi/living) "bD" = ( -/obj/structure/bed/chair/office{ +/obj/structure/chair/office{ dir = 1 }, /turf/floor/tiled, @@ -526,7 +526,7 @@ /turf/floor, /area/unishi/living) "bL" = ( -/obj/structure/bed/chair/janicart, +/obj/structure/janicart, /obj/item/key, /obj/structure/hygiene/sink/kitchen{ dir = 8; @@ -626,7 +626,7 @@ /turf/floor/tiled/white, /area/unishi/med) "cb" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /turf/floor/tiled/white, /area/unishi/med) "cc" = ( @@ -637,7 +637,7 @@ /turf/floor/tiled/white, /area/unishi/med) "cd" = ( -/obj/structure/bed/chair/armchair/black, +/obj/structure/chair/armchair/black, /turf/floor/laminate, /area/unishi/lounge) "ce" = ( @@ -862,7 +862,7 @@ /turf/floor, /area/unishi/living) "cC" = ( -/obj/structure/bed/chair/padded/brown, +/obj/structure/chair/padded/brown, /obj/machinery/light{ dir = 1; icon_state = "tube1" @@ -873,23 +873,23 @@ /turf/floor/tiled, /area/unishi/living) "cD" = ( -/obj/structure/bed/chair/padded/black, +/obj/structure/chair/padded/black, /obj/machinery/computer/modular/telescreen/preset/generic, /turf/floor/tiled, /area/unishi/living) "cE" = ( -/obj/structure/bed/chair/padded/black, +/obj/structure/chair/padded/black, /turf/floor/tiled, /area/unishi/living) "cF" = ( /obj/structure/noticeboard{ default_pixel_y = 25 }, -/obj/structure/bed/chair/padded/black, +/obj/structure/chair/padded/black, /turf/floor/tiled, /area/unishi/living) "cG" = ( -/obj/structure/bed/chair/armchair/beige{ +/obj/structure/chair/armchair/beige{ dir = 4 }, /turf/floor/laminate, @@ -966,13 +966,13 @@ /turf/floor/tiled, /area/unishi/living) "cP" = ( -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 1 }, /turf/floor/laminate, /area/unishi/lounge) "cQ" = ( -/obj/structure/bed/chair/padded/brown{ +/obj/structure/chair/padded/brown{ dir = 1 }, /obj/effect/floor_decal/corner/brown{ @@ -981,7 +981,7 @@ /turf/floor/tiled, /area/unishi/living) "cR" = ( -/obj/structure/bed/chair/padded/black{ +/obj/structure/chair/padded/black{ dir = 1 }, /turf/floor/tiled, @@ -1014,7 +1014,7 @@ /turf/floor/tiled, /area/unishi/kitchen) "cX" = ( -/obj/structure/bed/chair/padded/brown{ +/obj/structure/chair/padded/brown{ dir = 4 }, /obj/effect/floor_decal/corner/brown{ @@ -1029,7 +1029,7 @@ /turf/floor/tiled, /area/unishi/living) "cZ" = ( -/obj/structure/bed/chair/padded/black{ +/obj/structure/chair/padded/black{ dir = 8 }, /obj/machinery/light, @@ -1728,7 +1728,7 @@ /turf/floor/laminate, /area/unishi/living) "eK" = ( -/obj/structure/bed/chair/office, +/obj/structure/chair/office, /obj/machinery/light/small{ dir = 4; icon_state = "bulb1" @@ -1776,7 +1776,7 @@ /turf/floor/tiled, /area/unishi/living) "eR" = ( -/obj/structure/bed/chair/office/comfy/black{ +/obj/structure/chair/office/comfy/black{ dir = 4 }, /turf/floor/laminate, @@ -1866,7 +1866,7 @@ /turf/floor, /area/unishi/living) "fc" = ( -/obj/structure/bed/chair/armchair/black, +/obj/structure/chair/armchair/black, /turf/floor/laminate, /area/unishi/living) "fd" = ( diff --git a/maps/away/unishi/unishi.dm b/maps/away/unishi/unishi.dm index 6808619093cc..bb5d0d2d9572 100644 --- a/maps/away/unishi/unishi.dm +++ b/maps/away/unishi/unishi.dm @@ -2,6 +2,7 @@ #include "unishi_jobs.dm" #include "../../../mods/content/xenobiology/_xenobiology.dme" #include "../../../mods/content/supermatter/_supermatter.dme" +#include "../../../mods/content/beekeeping/_beekeeping.dme" /obj/abstract/submap_landmark/joinable_submap/unishi name = "SRV Verne" diff --git a/maps/away/yacht/yacht.dmm b/maps/away/yacht/yacht.dmm index 4cec95db85f5..9cc85f9666d9 100644 --- a/maps/away/yacht/yacht.dmm +++ b/maps/away/yacht/yacht.dmm @@ -42,7 +42,7 @@ /area/yacht/bridge) "ak" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/bed/chair/comfy/captain, +/obj/structure/chair/comfy/captain, /obj/effect/decal/cleanable/dirt/visible, /obj/effect/decal/cleanable/dirt/visible, /turf/floor/laminate/walnut, @@ -192,7 +192,7 @@ /turf/floor/laminate/yew, /area/yacht/living) "aF" = ( -/obj/structure/bed/chair/wood/wings{ +/obj/structure/chair/wood/wings{ dir = 4 }, /obj/effect/decal/cleanable/dirt/visible, @@ -465,7 +465,7 @@ /turf/floor/carpet/purple, /area/yacht/living) "bw" = ( -/obj/structure/bed/chair/comfy/red{ +/obj/structure/chair/comfy/red{ dir = 4 }, /turf/floor/carpet/purple, diff --git a/maps/example/example_areas.dm b/maps/example/example_areas.dm index 177887afe34a..097163dd93f0 100644 --- a/maps/example/example_areas.dm +++ b/maps/example/example_areas.dm @@ -39,7 +39,7 @@ /area/turbolift/example/first name = "Testing Site First Floor Lift" - base_turf = /turf/floor + base_turf = /turf/floor/plating /area/turbolift/example/second name = "Testing Site Second Floor Lift" diff --git a/maps/exodus/exodus-1.dmm b/maps/exodus/exodus-1.dmm index bd953735089c..a25c16112a44 100644 --- a/maps/exodus/exodus-1.dmm +++ b/maps/exodus/exodus-1.dmm @@ -405,7 +405,7 @@ /turf/floor/carpet, /area/exodus/maintenance/sub/port) "bi" = ( -/obj/structure/bed/chair/wood/wings, +/obj/structure/chair/wood/wings, /turf/floor/plating, /area/exodus/maintenance/sub/port) "bj" = ( @@ -414,7 +414,7 @@ /turf/floor/plating, /area/exodus/maintenance/sub/port) "bk" = ( -/obj/structure/bed/chair/wood/wings{ +/obj/structure/chair/wood/wings{ dir = 4 }, /turf/floor/plating, @@ -461,13 +461,13 @@ /turf/floor/plating, /area/exodus/maintenance/sub/port) "bs" = ( -/obj/structure/bed/chair/wood/wings{ +/obj/structure/chair/wood/wings{ dir = 1 }, /turf/floor/laminate, /area/exodus/maintenance/sub/port) "bt" = ( -/obj/structure/bed/chair/wood/wings{ +/obj/structure/chair/wood/wings{ dir = 1 }, /turf/floor/plating, @@ -1044,13 +1044,13 @@ /turf/floor/plating, /area/exodus/maintenance/sub/starboard) "dw" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /turf/floor/plating, /area/exodus/maintenance/sub/starboard) "dx" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /turf/floor/plating, @@ -1105,7 +1105,7 @@ /turf/floor/plating, /area/exodus/maintenance/sub/starboard) "dE" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /turf/floor/plating, /area/exodus/maintenance/sub/starboard) "dF" = ( @@ -1278,7 +1278,7 @@ /turf/floor/plating, /area/exodus/maintenance/sub/port) "dZ" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /turf/floor/plating, @@ -1683,7 +1683,7 @@ /turf/floor/bluegrid, /area/exodus/maintenance/sub/command) "fc" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -3674,7 +3674,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/plating, @@ -3716,7 +3716,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/engineering/atmos) "jM" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/abstract/landmark/start{ @@ -5714,7 +5714,7 @@ /turf/floor/tiled/dark/monotile, /area/exodus/maintenance/telecomms) "Bc" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /turf/floor/lino, diff --git a/maps/exodus/exodus-2.dmm b/maps/exodus/exodus-2.dmm index d97c31997955..f323c39ad5fd 100644 --- a/maps/exodus/exodus-2.dmm +++ b/maps/exodus/exodus-2.dmm @@ -1034,7 +1034,7 @@ /turf/floor/plating, /area/exodus/maintenance/foresolar) "acn" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/item/radio/intercom{ @@ -1386,7 +1386,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/meeting) "acZ" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -1523,7 +1523,7 @@ /obj/structure/sign/warning/vacuum{ pixel_x = 32 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/plating, @@ -1775,7 +1775,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/main) "adV" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/abstract/landmark/start{ name = "Security Officer" }, @@ -1962,7 +1962,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/main) "aep" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/abstract/landmark/start{ @@ -2049,7 +2049,7 @@ /turf/floor/plating, /area/exodus/crew_quarters/heads/hos) "aex" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/structure/cable/green{ @@ -2119,7 +2119,7 @@ /turf/wall/prepainted, /area/exodus/security/warden) "aeG" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/structure/cable/green{ @@ -2306,7 +2306,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/meeting) "afb" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/structure/cable/green{ @@ -2342,7 +2342,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/meeting) "afe" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/structure/cable/green{ @@ -2506,7 +2506,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/meeting) "afx" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/structure/cable/green{ @@ -2556,7 +2556,7 @@ /turf/floor/plating, /area/exodus/maintenance/security_starboard) "afB" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/light/small/emergency{ @@ -2689,7 +2689,7 @@ /area/shuttle/escape_pod_3) "afQ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/steel_grid, @@ -2822,7 +2822,7 @@ /turf/floor/plating, /area/exodus/security/meeting) "agh" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/status_display{ @@ -3560,7 +3560,7 @@ /turf/floor/carpet, /area/exodus/crew_quarters/heads/hos) "ahM" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/light/small/emergency{ @@ -3583,7 +3583,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/carpet, /area/exodus/crew_quarters/heads/hos) "ahO" = ( @@ -3743,7 +3743,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/security/brig/processing) "aik" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /turf/floor/tiled/dark, @@ -3829,7 +3829,7 @@ /turf/floor/plating, /area/exodus/maintenance/dormitory) "aiv" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled/steel_grid, /area/exodus/security/brig/processing) "aiw" = ( @@ -3875,7 +3875,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/security/brig) "aiC" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /turf/floor/plating, @@ -3885,7 +3885,7 @@ /turf/floor/plating, /area/exodus/maintenance/security_port) "aiE" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/structure/cable/green{ @@ -3911,7 +3911,7 @@ /turf/floor/plating, /area/exodus/security/brig/interrogation) "aiG" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/power/apc{ @@ -3946,7 +3946,7 @@ /turf/floor/plating, /area/exodus/maintenance/substation/security) "aiK" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/abstract/landmark/start{ @@ -4039,7 +4039,7 @@ /turf/floor/tiled/dark, /area/exodus/security/warden) "aiV" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/structure/cable/green{ @@ -4056,7 +4056,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/brig/processing) "aiX" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -4133,7 +4133,7 @@ /turf/floor/tiled/dark, /area/exodus/security/brig/processing) "ajf" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 1 }, /obj/abstract/landmark/start{ @@ -4207,7 +4207,7 @@ /turf/floor/tiled/dark, /area/exodus/security/warden) "ajk" = ( -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 8 }, /obj/machinery/status_display{ @@ -5480,7 +5480,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/security/brig/processing) "alC" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/abstract/landmark/start{ @@ -5765,7 +5765,7 @@ /turf/wall/prepainted, /area/exodus/lawoffice) "amj" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/machinery/button/alternate/door{ @@ -5800,7 +5800,7 @@ /turf/wall/prepainted, /area/exodus/security/main) "amm" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/machinery/button/alternate/door{ @@ -6074,7 +6074,7 @@ /turf/floor/plating, /area/exodus/security/prison) "amP" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/abstract/landmark/start{ name = "Internal Affairs Agent" }, @@ -6723,7 +6723,7 @@ /turf/floor/lino, /area/exodus/security/detectives_office) "aoe" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/abstract/landmark/start{ @@ -6753,7 +6753,7 @@ /area/exodus/security/detectives_office) "aoh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled/dark, @@ -7340,7 +7340,7 @@ /turf/floor/plating, /area/exodus/maintenance/dormitory) "apw" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -7394,7 +7394,7 @@ /turf/floor/plating, /area/exodus/maintenance/dormitory) "apC" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/status_display{ @@ -7416,7 +7416,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/floor_decal/corner/red{ @@ -7428,7 +7428,7 @@ /turf/floor/laminate, /area/exodus/maintenance/dormitory) "apG" = ( -/obj/structure/bed/chair/wood/wings, +/obj/structure/chair/wood/wings, /turf/floor/laminate, /area/exodus/maintenance/dormitory) "apH" = ( @@ -7539,7 +7539,7 @@ /turf/floor/tiled/dark, /area/exodus/lawoffice) "apS" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /turf/floor/tiled/white, @@ -7630,7 +7630,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/prison) "aqb" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/structure/cable/green{ icon_state = "4-8" }, @@ -7646,7 +7646,7 @@ id_tag = "air_in"; use_power = 1 }, -/obj/structure/bed/chair, +/obj/structure/chair, /obj/structure/cable/green{ icon_state = "4-8" }, @@ -7668,7 +7668,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/prison) "aqe" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/structure/cable/green{ icon_state = "4-8" }, @@ -7729,7 +7729,7 @@ /turf/floor/plating, /area/exodus/maintenance/dormitory) "aqj" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/structure/cable/green{ @@ -7856,7 +7856,7 @@ /turf/floor/laminate, /area/exodus/maintenance/dormitory) "aqv" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -7879,7 +7879,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/brig/solitaryB) "aqy" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/abstract/landmark/start{ @@ -8107,7 +8107,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/prison) "aqY" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/structure/cable/green{ @@ -8668,13 +8668,13 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/security/brig/solitaryB) "asa" = ( -/obj/structure/bed/chair/wood/wings{ +/obj/structure/chair/wood/wings{ dir = 1 }, /turf/floor/laminate, /area/exodus/maintenance/dormitory) "asb" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/plating, @@ -8752,7 +8752,7 @@ /turf/floor/plating/airless, /area/exodus/solar/auxstarboard) "asi" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled/steel_grid, @@ -8766,7 +8766,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/maintenance/dormitory) "ask" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -8883,7 +8883,7 @@ /turf/wall/r_wall/prepainted, /area/exodus/security/brig/solitaryA) "asx" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/status_display{ @@ -9151,7 +9151,7 @@ /turf/wall/prepainted, /area/exodus/security/prison/dorm) "asX" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /mob/living/simple_animal/passive/mouse, @@ -9893,7 +9893,7 @@ /turf/wall/prepainted, /area/exodus/maintenance/arrivals) "auR" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/structure/cable/green{ @@ -10145,7 +10145,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/security/prison) "avt" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/alarm{ @@ -10557,7 +10557,7 @@ /turf/floor/laminate/walnut, /area/exodus/crew_quarters/sleep/bedrooms) "awk" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/alarm{ @@ -11512,7 +11512,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/secondary/entry/pods) "ays" = ( -/obj/structure/bed/chair/comfy/beige{ +/obj/structure/chair/comfy/beige{ dir = 1 }, /obj/effect/floor_decal/industrial/warning, @@ -13171,7 +13171,7 @@ /turf/floor/tiled/dark, /area/exodus/ai_monitored/storage/eva) "aBR" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/structure/cable{ @@ -13398,7 +13398,7 @@ /turf/floor/plating, /area/exodus/storage/emergency2) "aCr" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -13541,7 +13541,7 @@ /turf/floor/plating, /area/exodus/bridge) "aCI" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/floor_decal/industrial/hatch/yellow, @@ -14549,7 +14549,7 @@ /turf/floor/tiled/dark, /area/exodus/security/checkpoint2) "aEO" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -16405,7 +16405,7 @@ /obj/effect/floor_decal/corner/white{ dir = 10 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /obj/abstract/landmark/latejoin, @@ -16526,7 +16526,7 @@ /obj/effect/floor_decal/corner/white{ dir = 5 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /obj/abstract/landmark/latejoin, @@ -16567,7 +16567,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /turf/floor/tiled/dark/monotile, @@ -16814,7 +16814,7 @@ /turf/floor/lino, /area/exodus/chapel/office) "aJk" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -16828,7 +16828,7 @@ /obj/abstract/landmark/start{ name = "Chaplain" }, -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/floor/lino, /area/exodus/chapel/office) @@ -17152,7 +17152,7 @@ /turf/floor/tiled/monotile, /area/exodus/storage/primary) "aJW" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -17205,7 +17205,7 @@ /turf/floor/plating, /area/exodus/maintenance/substation/civilian_west) "aKb" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -17732,7 +17732,7 @@ /turf/wall/prepainted, /area/exodus/hydroponics) "aLi" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/machinery/firealarm{ pixel_y = 24 }, @@ -17761,7 +17761,7 @@ /turf/floor/laminate/walnut, /area/exodus/library) "aLm" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/dark, @@ -17829,7 +17829,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /obj/structure/cable/green{ @@ -18144,7 +18144,7 @@ /turf/floor/plating, /area/exodus/maintenance/library) "aMg" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /turf/floor/laminate/walnut, @@ -18187,7 +18187,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /obj/item/radio/intercom{ @@ -18218,7 +18218,7 @@ /turf/floor/lino, /area/exodus/crew_quarters/bar) "aMq" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /turf/floor/laminate/walnut, @@ -18431,7 +18431,7 @@ /turf/wall/r_wall/prepainted, /area/exodus/research/docking) "aMN" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -18525,14 +18525,14 @@ /turf/floor/plating, /area/exodus/maintenance/arrivals) "aMX" = ( -/obj/structure/bed/chair/comfy/beige, +/obj/structure/chair/comfy/beige, /turf/floor/lino, /area/exodus/hallway/secondary/entry/starboard) "aMY" = ( /turf/floor/lino, /area/exodus/hallway/secondary/entry/starboard) "aMZ" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /obj/structure/cable/green{ @@ -18566,7 +18566,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/hydroponics) "aNd" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -18630,7 +18630,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/primary/port) "aNj" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /turf/floor/laminate/walnut, @@ -19123,7 +19123,7 @@ /turf/floor/lino, /area/exodus/crew_quarters/bar) "aOf" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/structure/disposalpipe/segment, @@ -19425,7 +19425,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/alarm{ pixel_y = 22 }, @@ -20546,7 +20546,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/library) "aRn" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /obj/machinery/button/windowtint{ @@ -20762,7 +20762,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/secondary/entry/port) "aRJ" = ( -/obj/structure/bed/chair/comfy/beige{ +/obj/structure/chair/comfy/beige{ dir = 1 }, /turf/floor/lino, @@ -20997,7 +20997,7 @@ /area/exodus/medical/medbay) "aSl" = ( /obj/machinery/light/small, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/alarm{ @@ -21287,7 +21287,7 @@ /turf/floor/plating, /area/exodus/maintenance/locker) "aSP" = ( -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 4 }, /turf/floor/laminate/walnut, @@ -21458,7 +21458,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/hallway/secondary/entry/aft) "aTk" = ( -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 8 }, /turf/floor/laminate/walnut, @@ -21784,7 +21784,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/primary/central_one) "aTW" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /obj/effect/floor_decal/corner/yellow/full, @@ -22522,7 +22522,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/storage/tools) "aVN" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled/steel_grid, @@ -22555,7 +22555,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/bridge) "aVS" = ( -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /turf/floor/laminate/walnut, /area/exodus/crew_quarters/bar) "aVT" = ( @@ -22581,11 +22581,11 @@ /obj/structure/cable/green{ icon_state = "1-4" }, -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /turf/floor/laminate/walnut, /area/exodus/crew_quarters/bar) "aVX" = ( -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/floor/laminate/walnut, /area/exodus/crew_quarters/bar) @@ -22619,7 +22619,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /obj/structure/disposalpipe/segment, /turf/floor/laminate/walnut, /area/exodus/crew_quarters/bar) @@ -22734,7 +22734,7 @@ /turf/floor/tiled/white, /area/exodus/crew_quarters/kitchen) "aWl" = ( -/obj/structure/bed/chair/comfy/black, +/obj/structure/chair/comfy/black, /turf/floor/laminate/walnut, /area/exodus/library) "aWm" = ( @@ -22835,7 +22835,7 @@ /obj/abstract/landmark/start{ name = "Librarian" }, -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /turf/floor/laminate/walnut, /area/exodus/library) "aWA" = ( @@ -23622,7 +23622,7 @@ /turf/floor/lino, /area/exodus/security/vacantoffice) "aYt" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 8 }, /turf/floor/laminate/walnut, @@ -23834,7 +23834,7 @@ /turf/floor/plating, /area/exodus/maintenance/locker) "aYS" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -24057,7 +24057,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/bridge) "aZg" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -24164,7 +24164,7 @@ /turf/floor/plating, /area/exodus/research/xenobiology/xenoflora) "aZr" = ( -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 1 }, /turf/floor/laminate/walnut, @@ -24239,7 +24239,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 1 }, /turf/floor/laminate/walnut, @@ -24272,7 +24272,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 1 }, /turf/floor/laminate/walnut, @@ -24312,13 +24312,13 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 1 }, /turf/floor/laminate/walnut, /area/exodus/crew_quarters/bar) "aZL" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/structure/window/reinforced{ @@ -24388,13 +24388,13 @@ /turf/wall/prepainted, /area/exodus/engineering/engine_eva) "aZV" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /turf/floor/lino, /area/exodus/security/vacantoffice) "aZW" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /turf/floor/lino, @@ -25085,7 +25085,7 @@ /turf/floor/tiled/white, /area/exodus/crew_quarters/kitchen) "bbs" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -25184,7 +25184,7 @@ /turf/floor/tiled/dark, /area/exodus/security/vacantoffice) "bbE" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 4 }, /turf/floor/laminate/walnut, @@ -25502,7 +25502,7 @@ /turf/floor/plating/airless, /area/exodus/turret_protected/ai) "bcm" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -25979,7 +25979,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/secondary/entry/aft) "bdk" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /turf/floor/lino, @@ -26282,7 +26282,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/primary/starboard) "bdR" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/effect/floor_decal/corner/lime{ @@ -26389,7 +26389,7 @@ dir = 8; icon_state = "pipe-c" }, -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 4 }, /turf/floor/laminate/walnut, @@ -26505,7 +26505,7 @@ /turf/floor/tiled/dark, /area/exodus/security/vacantoffice) "bex" = ( -/obj/structure/bed/chair/comfy/black, +/obj/structure/chair/comfy/black, /turf/floor/carpet, /area/exodus/bridge/meeting_room) "bey" = ( @@ -26543,7 +26543,7 @@ /turf/floor/plating, /area/exodus/maintenance/locker) "beC" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /obj/structure/cable/green{ @@ -26564,7 +26564,7 @@ /turf/floor/laminate/walnut, /area/exodus/library) "beE" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /obj/structure/cable/green{ @@ -26869,7 +26869,7 @@ /turf/floor/plating, /area/exodus/quartermaster/office) "bfj" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 4 }, /obj/structure/cable/green{ @@ -26882,7 +26882,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/primary/starboard) "bfl" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -27015,7 +27015,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/secondary/exit) "bfB" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 8 }, /obj/structure/cable/green{ @@ -27570,7 +27570,7 @@ /turf/floor/carpet, /area/exodus/bridge/meeting_room) "bgQ" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /turf/floor/carpet, @@ -27653,7 +27653,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/secondary/entry/aft) "bgZ" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /turf/floor/carpet, @@ -27682,7 +27682,7 @@ /turf/floor/laminate/walnut, /area/exodus/crew_quarters/captain) "bhd" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 4 }, /turf/floor/carpet, @@ -27698,7 +27698,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/primary/starboard) "bhf" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 8 }, /turf/floor/carpet, @@ -29966,7 +29966,7 @@ /turf/floor/bluegrid, /area/exodus/turret_protected/ai) "blE" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/abstract/landmark/start{ @@ -30464,7 +30464,7 @@ name = "north bump"; pixel_y = 24 }, -/obj/structure/bed/chair/wheelchair, +/obj/structure/chair/wheelchair, /obj/structure/cable/green{ icon_state = "0-2" }, @@ -30861,7 +30861,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/carpet, /area/exodus/crew_quarters/captain) "bns" = ( @@ -31088,7 +31088,7 @@ /turf/floor/tiled/dark, /area/exodus/turret_protected/ai) "bnK" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /turf/floor/tiled/white, @@ -31121,7 +31121,7 @@ /turf/floor/tiled/freezer, /area/exodus/medical/patient_wing/washroom) "bnQ" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/abstract/landmark/start{ @@ -31337,7 +31337,7 @@ /turf/floor/tiled/dark, /area/exodus/turret_protected/ai_upload) "bou" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/abstract/landmark/start{ @@ -31482,7 +31482,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/engineering/workshop) "boK" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 1 }, /obj/abstract/landmark/start{ @@ -31560,7 +31560,7 @@ /obj/effect/floor_decal/corner/purple{ dir = 5 }, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 1 }, /obj/effect/floor_decal/industrial/warning{ @@ -31569,7 +31569,7 @@ /turf/floor/tiled/white, /area/exodus/research/lab) "boT" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 4 }, /turf/floor/tiled/white, @@ -33845,7 +33845,7 @@ pixel_x = -16; pixel_y = 28 }, -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/abstract/landmark/start{ @@ -33979,7 +33979,7 @@ pixel_x = 6; pixel_y = 28 }, -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/abstract/landmark/start{ @@ -34038,7 +34038,7 @@ /turf/floor/carpet, /area/exodus/crew_quarters/captain) "btT" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -34583,7 +34583,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/quartermaster/office) "buT" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/firealarm{ @@ -35239,7 +35239,7 @@ /obj/abstract/landmark/start{ name = "Cargo Technician" }, -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /turf/floor/tiled/steel_grid, @@ -35303,7 +35303,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/quartermaster/office) "bws" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -35416,7 +35416,7 @@ /turf/floor/plating, /area/exodus/storage/emergency) "bwG" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/structure/disposalpipe/segment{ @@ -35457,7 +35457,7 @@ /obj/structure/cable/green{ icon_state = "2-8" }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/white, @@ -35518,7 +35518,7 @@ /turf/floor/tiled/dark, /area/exodus/turret_protected/ai_upload) "bwR" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -35995,7 +35995,7 @@ /turf/floor/tiled/dark, /area/exodus/research) "bxQ" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/structure/cable/green{ @@ -37848,7 +37848,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/quartermaster/office) "bBw" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled/steel_grid, @@ -38128,7 +38128,7 @@ /turf/floor/tiled/white, /area/exodus/medical/medbay3) "bCb" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/light, @@ -38496,7 +38496,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/primary/central_three) "bCR" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/abstract/landmark/start{ @@ -38532,7 +38532,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/crew_quarters/heads/hop) "bCT" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled/steel_grid, @@ -41003,7 +41003,7 @@ /turf/floor/reinforced, /area/exodus/research/misc_lab) "bHH" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/abstract/landmark/start{ name = "Quartermaster" }, @@ -41170,7 +41170,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/primary/central_three) "bHV" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /turf/floor/tiled/dark, /area/exodus/research/server) "bHW" = ( @@ -41540,7 +41540,7 @@ /turf/floor/plating, /area/exodus/medical/genetics/cloning) "bIH" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/abstract/landmark/start{ name = "Geneticist" }, @@ -42632,7 +42632,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/quartermaster/qm) "bKO" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled/steel_grid, @@ -43149,7 +43149,7 @@ /turf/floor/plating/airless, /area/exodus/research/test_area) "bLU" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/steel_grid, @@ -43267,7 +43267,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/abstract/landmark/start{ @@ -43837,7 +43837,7 @@ /turf/floor, /area/exodus/quartermaster/miningdock) "bNh" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 4 }, /obj/effect/floor_decal/corner/purple/diagonal{ @@ -44233,7 +44233,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/crew_quarters/heads/cmo) "bOe" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -44243,7 +44243,7 @@ /turf/floor/tiled/white, /area/exodus/crew_quarters/heads/cmo) "bOf" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled/white, /area/exodus/crew_quarters/heads/cmo) "bOg" = ( @@ -45722,7 +45722,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/medical/medbay) "bRc" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/abstract/landmark/start{ @@ -46444,7 +46444,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/abstract/landmark/start{ @@ -46503,7 +46503,7 @@ /obj/machinery/camera/network/medbay{ c_tag = "Medbay Examination Room" }, -/obj/structure/bed/chair/wheelchair, +/obj/structure/chair/wheelchair, /turf/floor/tiled/white, /area/exodus/medical/exam_room) "bSz" = ( @@ -46511,7 +46511,7 @@ dir = 4; pixel_x = -22 }, -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/effect/floor_decal/corner/pink{ dir = 9 }, @@ -46522,7 +46522,7 @@ dir = 4; pixel_x = -22 }, -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/effect/floor_decal/corner/pink{ dir = 9 }, @@ -46607,7 +46607,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/research/storage) "bSJ" = ( -/obj/structure/bed/chair/comfy/teal{ +/obj/structure/chair/comfy/teal{ dir = 8 }, /obj/effect/floor_decal/corner/paleblue{ @@ -46763,7 +46763,7 @@ /turf/floor/plating, /area/exodus/storage/tech) "bTc" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -47563,7 +47563,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/bed/chair/comfy/teal{ +/obj/structure/chair/comfy/teal{ dir = 4 }, /obj/effect/floor_decal/corner/paleblue{ @@ -47659,7 +47659,7 @@ /turf/floor/laminate/walnut, /area/exodus/engineering/break_room) "bUY" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/status_display{ @@ -48034,7 +48034,7 @@ /turf/floor/tiled/airless, /area/exodus/research/test_area) "bVM" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/item/radio/intercom{ @@ -48366,7 +48366,7 @@ /turf/floor/tiled/white, /area/exodus/medical/patient_wing) "bWx" = ( -/obj/structure/bed/chair/comfy/teal, +/obj/structure/chair/comfy/teal, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -48451,7 +48451,7 @@ /turf/floor/tiled/white, /area/exodus/research/misc_lab) "bWH" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 1 }, /obj/abstract/landmark/start{ @@ -48815,7 +48815,7 @@ /obj/abstract/landmark/start{ name = "Station Engineer" }, -/obj/structure/bed/chair/comfy/brown, +/obj/structure/chair/comfy/brown, /turf/floor/carpet, /area/exodus/engineering/break_room) "bXv" = ( @@ -49517,7 +49517,7 @@ /turf/floor/plating, /area/exodus/engineering/storage) "bYH" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -49600,7 +49600,7 @@ /obj/abstract/landmark/start{ name = "Station Engineer" }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /turf/floor/carpet, @@ -49951,7 +49951,7 @@ /turf/floor/tiled/freezer, /area/exodus/medical/patient_wing/washroom) "bZH" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/plating, @@ -50168,7 +50168,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/crew_quarters/heads/chief) "cae" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 4 }, /obj/abstract/landmark/start{ @@ -50207,7 +50207,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/crew_quarters/heads/chief) "cag" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/structure/cable/green{ @@ -50377,7 +50377,7 @@ dir = 4; pixel_x = -22 }, -/obj/structure/bed/chair/comfy/teal{ +/obj/structure/chair/comfy/teal{ dir = 4 }, /obj/effect/floor_decal/corner/pink/three_quarters{ @@ -50439,7 +50439,7 @@ dir = 4; pixel_x = -22 }, -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/effect/floor_decal/corner/pink{ @@ -50714,7 +50714,7 @@ /obj/abstract/landmark/start{ name = "Atmospheric Technician" }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /turf/floor/carpet, @@ -52167,7 +52167,7 @@ /obj/abstract/landmark/start{ name = "Station Engineer" }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /turf/floor/carpet, @@ -52176,7 +52176,7 @@ /obj/abstract/landmark/start{ name = "Atmospheric Technician" }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /turf/floor/carpet, @@ -52282,7 +52282,7 @@ /turf/floor/laminate/walnut, /area/exodus/engineering/break_room) "cel" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /obj/machinery/firealarm{ @@ -52447,7 +52447,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/engineering/foyer) "ceB" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/effect/floor_decal/corner/white/diagonal, /turf/floor/tiled/steel_grid, /area/exodus/engineering/break_room) @@ -52554,7 +52554,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/medical/surgeryobs) "ceP" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled/steel_grid, /area/exodus/medical/surgeryobs) "ceQ" = ( @@ -53075,7 +53075,7 @@ dir = 4; pixel_x = -22 }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /turf/floor/carpet/blue, @@ -53225,7 +53225,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/engineering/foyer) "cgp" = ( -/obj/structure/bed/chair/comfy/brown, +/obj/structure/chair/comfy/brown, /obj/abstract/landmark/start{ name = "Psychiatrist" }, @@ -53312,7 +53312,7 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /obj/abstract/landmark/start{ @@ -54138,7 +54138,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/abstract/landmark/start{ @@ -54801,7 +54801,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /obj/abstract/landmark/start{ @@ -54844,7 +54844,7 @@ /area/exodus/research/xenobiology/xenoflora) "cjG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/abstract/landmark/start{ @@ -55493,7 +55493,7 @@ /turf/floor/plating, /area/exodus/maintenance/engi_engine) "cle" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, @@ -56425,7 +56425,7 @@ /turf/floor/tiled/white, /area/exodus/medical/surgery) "cmY" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 4 }, /obj/effect/floor_decal/corner/blue{ @@ -56657,7 +56657,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /turf/floor/tiled/steel_grid, /area/exodus/engineering/engineering_monitoring) "cnA" = ( @@ -57703,7 +57703,7 @@ /turf/floor/plating/airless, /area/space) "cqa" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/abstract/landmark/start{ @@ -58055,7 +58055,7 @@ /turf/floor/plating, /area/exodus/maintenance/engi_shuttle) "cre" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 4 }, /obj/abstract/landmark/start{ @@ -59039,7 +59039,7 @@ dir = 4; pixel_x = -22 }, -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/camera/network/medbay{ c_tag = "Virology Monkey Pen" @@ -59471,7 +59471,7 @@ /turf/floor/tiled/white, /area/exodus/medical/virology) "cuN" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /obj/structure/disposalpipe/segment, @@ -59494,7 +59494,7 @@ /turf/floor/tiled/white, /area/exodus/medical/virology) "cuR" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /turf/floor/tiled/white, @@ -60054,7 +60054,7 @@ /obj/effect/floor_decal/corner/white{ dir = 5 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /obj/abstract/landmark/latejoin, @@ -60360,7 +60360,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/engineering/workshop) "cyz" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/abstract/landmark/start{ name = "Station Engineer" }, @@ -60405,7 +60405,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/secondary/entry/port) "cyI" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -60658,13 +60658,13 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/plating, /area/exodus/maintenance/engi_shuttle) "czE" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/structure/cable/green{ @@ -60697,7 +60697,7 @@ /turf/floor/plating, /area/exodus/maintenance/engi_shuttle) "czO" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/power/apc{ @@ -61202,7 +61202,7 @@ /turf/wall/r_wall/prepainted, /area/exodus/engineering/engine_airlock) "cDt" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/effect/floor_decal/industrial/warning{ dir = 1 }, @@ -61241,7 +61241,7 @@ /turf/floor/tiled/techfloor/grid, /area/exodus/engineering/engine_airlock) "cDy" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/plating, @@ -61544,7 +61544,7 @@ /turf/floor/tiled/white, /area/exodus/medical/virology) "cEV" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/plating, @@ -61755,7 +61755,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/engineering/engine_monitoring) "cGn" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/abstract/landmark/start{ name = "Station Engineer" }, @@ -61949,7 +61949,7 @@ /turf/floor/plating, /area/exodus/engineering/drone_fabrication) "cHg" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/effect/floor_decal/industrial/warning, @@ -62923,7 +62923,7 @@ pixel_y = 25; tag_door = "engineering_shuttle_hatch" }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/light{ @@ -62980,7 +62980,7 @@ /turf/floor/tiled/dark, /area/ship/exodus_pod_engineering) "cLk" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/dark, @@ -63031,7 +63031,7 @@ /turf/floor/plating, /area/ship/exodus_pod_engineering) "cLu" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/light, @@ -63708,7 +63708,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/primary/central_two) "gOE" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /obj/abstract/landmark/latejoin, @@ -63824,7 +63824,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/hallway/primary/starboard) "hWZ" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/light{ dir = 4 }, @@ -63844,7 +63844,7 @@ /obj/structure/cable/green{ icon_state = "2-4" }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled/steel_grid, @@ -63878,7 +63878,7 @@ /obj/effect/floor_decal/corner/white{ dir = 10 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /obj/abstract/landmark/latejoin, @@ -63924,13 +63924,13 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /turf/floor/tiled/dark/monotile, /area/shuttle/arrival/station) "iTt" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/structure/cable/green{ @@ -64031,7 +64031,7 @@ /obj/structure/cable/green{ icon_state = "1-4" }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/white, @@ -64096,7 +64096,7 @@ dir = 4; pixel_x = -22 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/floor_decal/industrial/hatch/yellow, @@ -64198,7 +64198,7 @@ /turf/floor/plating, /area/ship/exodus_pod_research) "mYp" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/structure/window/reinforced{ @@ -64305,7 +64305,7 @@ /obj/structure/cable/green{ icon_state = "1-8" }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled/steel_grid, @@ -64354,7 +64354,7 @@ /turf/floor/tiled/dark, /area/exodus/chapel/main) "pqS" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/structure/cable/green{ @@ -64516,7 +64516,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/light{ dir = 8 }, @@ -64740,7 +64740,7 @@ /turf/floor/plating, /area/ship/exodus_pod_mining) "tQY" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/light, @@ -65065,7 +65065,7 @@ /turf/floor/tiled/steel_grid, /area/exodus/quartermaster/office) "xVx" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /obj/abstract/landmark/latejoin, diff --git a/maps/exodus/exodus-admin.dmm b/maps/exodus/exodus-admin.dmm index 97ee913e4191..cde6caa5150c 100644 --- a/maps/exodus/exodus-admin.dmm +++ b/maps/exodus/exodus-admin.dmm @@ -207,7 +207,7 @@ /turf/unsimulated/floor/steel, /area/centcom) "auW" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/unsimulated/floor/steel, @@ -254,7 +254,7 @@ /turf/space, /area/space) "ayg" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/unsimulated/floor/steel, @@ -330,7 +330,7 @@ /turf/space, /area/shuttle/supply_shuttle) "aBA" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/effect/floor_decal/industrial/warning/corner{ dir = 4 }, @@ -343,7 +343,7 @@ /turf/unsimulated/floor/steel, /area/centcom) "aBC" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/effect/floor_decal/industrial/warning/corner{ dir = 1 }, @@ -408,7 +408,7 @@ /turf/unsimulated/floor/steel, /area/centcom) "aCv" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/unsimulated/floor/steel, /area/centcom) "aCx" = ( @@ -520,7 +520,7 @@ /obj/machinery/light/small{ dir = 1 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 4 }, /obj/effect/floor_decal/corner/red/half{ @@ -558,7 +558,7 @@ /turf/floor/tiled/dark, /area/shuttle/escape_shuttle) "aGE" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 1 }, /obj/effect/floor_decal/corner/blue/diagonal, @@ -756,7 +756,7 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /turf/floor/tiled/monotile, @@ -785,7 +785,7 @@ /turf/floor/plating, /area/shuttle/escape_shuttle) "aIS" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /turf/floor/tiled/monotile, @@ -937,7 +937,7 @@ dir = 8; pixel_x = 22 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /obj/effect/floor_decal/corner/red/half{ @@ -982,7 +982,7 @@ /turf/unsimulated/floor/white, /area/space) "aLc" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 4 }, /obj/effect/floor_decal/corner/red/half{ @@ -997,7 +997,7 @@ /turf/floor/tiled/dark/monotile, /area/shuttle/escape_shuttle) "aLe" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /obj/effect/floor_decal/corner/red/half{ @@ -1006,7 +1006,7 @@ /turf/floor/tiled/dark/monotile, /area/shuttle/escape_shuttle) "aLf" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/effect/floor_decal/corner/green{ @@ -1024,7 +1024,7 @@ /turf/floor/tiled/white, /area/shuttle/escape_shuttle) "aLm" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/machinery/button/blast_door{ desc = "A remote control switch for port-side blast doors."; id_tag = "CentComPort"; @@ -1297,7 +1297,7 @@ /turf/unsimulated/floor/grass, /area/centcom/holding) "aMp" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/floor_decal/corner/green{ @@ -1339,19 +1339,19 @@ dir = 4; pixel_x = -22 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 4 }, /turf/floor/tiled/monotile, /area/shuttle/escape_shuttle) "aMz" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/unsimulated/floor/steel, /area/centcom/holding) "aMA" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/unsimulated/floor/steel, @@ -1400,7 +1400,7 @@ /turf/unsimulated/floor/steel, /area/centcom/holding) "aMR" = ( -/obj/structure/bed/chair/wood/wings{ +/obj/structure/chair/wood/wings{ dir = 4 }, /turf/unsimulated/floor/laminate, @@ -1422,7 +1422,7 @@ c_tag = "Shuttle East"; dir = 4 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 4 }, /turf/floor/tiled/monotile, @@ -1457,7 +1457,7 @@ /turf/unsimulated/floor/laminate, /area/centcom/holding) "aNa" = ( -/obj/structure/bed/chair/wood/wings{ +/obj/structure/chair/wood/wings{ dir = 8 }, /turf/unsimulated/floor/laminate, @@ -1508,7 +1508,7 @@ /turf/unsimulated/floor/lino, /area/centcom/holding) "aNo" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/floor_decal/corner/green{ @@ -1530,7 +1530,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 4 }, /turf/floor/tiled/monotile, @@ -1683,7 +1683,7 @@ /turf/unsimulated/floor/lino, /area/centcom/holding) "aPK" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/effect/floor_decal/corner/green, @@ -1737,7 +1737,7 @@ /turf/unsimulated/floor/laminate, /area/centcom/holding) "aZb" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /obj/structure/table/laminate{ @@ -1751,7 +1751,7 @@ /turf/unsimulated/floor/lino, /area/centcom/holding) "bgb" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /obj/structure/table/laminate{ @@ -1766,7 +1766,7 @@ /turf/unsimulated/floor/lino, /area/centcom/holding) "bjb" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/floor_decal/corner/green{ @@ -1883,7 +1883,7 @@ /turf/floor/tiled, /area/shuttle/escape_shuttle) "cEu" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/camera/network/crescent{ @@ -1905,7 +1905,7 @@ /turf/floor/tiled/dark/monotile, /area/shuttle/escape_shuttle) "cIe" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/unsimulated/floor/lino, /area/tdome/tdomeadmin) "cIv" = ( @@ -1921,7 +1921,7 @@ /turf/floor/tiled/dark, /area/shuttle/escape_shuttle) "cQH" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/abstract/landmark{ @@ -1944,7 +1944,7 @@ name = "Emergency NanoMed"; pixel_x = 28 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /obj/effect/floor_decal/corner/blue/border{ @@ -1979,7 +1979,7 @@ /obj/effect/floor_decal/corner/green{ dir = 9 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/unsimulated/floor/steel, @@ -2085,7 +2085,7 @@ /turf/unsimulated/floor/vault, /area/tdome) "fRC" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/unsimulated/floor/vault, @@ -2116,7 +2116,7 @@ /turf/floor/tiled, /area/shuttle/escape_shuttle) "ghj" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/unsimulated/floor/vault, @@ -2163,7 +2163,7 @@ /turf/floor/tiled/dark, /area/shuttle/escape_shuttle) "hlP" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 4 }, /turf/floor/tiled/dark/monotile, @@ -2202,7 +2202,7 @@ /turf/floor/tiled/dark, /area/shuttle/escape_shuttle) "hMN" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/structure/disposalpipe/segment, @@ -2252,7 +2252,7 @@ /turf/floor/tiled/monotile, /area/shuttle/escape_shuttle) "jlk" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /turf/floor/tiled/dark/monotile, @@ -2289,7 +2289,7 @@ /turf/unsimulated/floor/lino, /area/tdome/tdomeadmin) "jSH" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 1 }, /obj/effect/floor_decal/corner/blue{ @@ -2302,7 +2302,7 @@ /turf/unsimulated/floor/white, /area/tdome) "kfk" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/abstract/landmark{ name = "tdomeobserve" }, @@ -2314,7 +2314,7 @@ /turf/unsimulated/floor/lino, /area/tdome/tdomeobserve) "kjk" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 1 }, /obj/effect/floor_decal/corner/blue/diagonal{ @@ -2403,7 +2403,7 @@ /turf/unsimulated/floor/lino, /area/tdome/tdomeadmin) "lQy" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/structure/disposalpipe/segment, /obj/abstract/landmark{ name = "tdomeobserve" @@ -2505,7 +2505,7 @@ /turf/unsimulated/floor/vault, /area/tdome/tdome2) "nPB" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 4 }, /turf/floor/tiled/monotile, diff --git a/maps/exodus/exodus.dm b/maps/exodus/exodus.dm index 081ad6f823b1..47e23abbfe0b 100644 --- a/maps/exodus/exodus.dm +++ b/maps/exodus/exodus.dm @@ -3,6 +3,7 @@ #include "../../mods/content/mundane.dm" #include "../../mods/content/scaling_descriptors.dm" + #include "../../mods/content/beekeeping/_beekeeping.dme" #include "../../mods/content/bigpharma/_bigpharma.dme" #include "../../mods/content/corporate/_corporate.dme" #include "../../mods/content/government/_government.dme" diff --git a/maps/karzerfeste/karzerfeste-1-1.dmm b/maps/karzerfeste/karzerfeste-1-1.dmm index 5c3ea3fa0d55..89b5437d5d37 100644 --- a/maps/karzerfeste/karzerfeste-1-1.dmm +++ b/maps/karzerfeste/karzerfeste-1-1.dmm @@ -100,7 +100,7 @@ /turf/floor/path/herringbone/granite, /area/karzerfeste/keep) "bZ" = ( -/obj/structure/bed/chair/bench/ebony, +/obj/structure/chair/bench/ebony, /turf/floor/mud, /area/karzerfeste/outside/keep) "cb" = ( @@ -127,7 +127,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep/gatehouse/west) "cx" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /obj/structure/wall_sconce/lantern{ @@ -144,7 +144,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/keep) "cL" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /turf/floor/wood/maple, @@ -242,7 +242,7 @@ /turf/floor/carpet/red, /area/karzerfeste/ward/shrine) "er" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /obj/effect/floor_decal/spline/fancy/wood/walnut{ @@ -277,7 +277,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/ward/shrine) "eH" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 1 }, /obj/structure/wall_sconce/lantern{ @@ -320,7 +320,7 @@ /turf/wall/brick/basalt, /area/karzerfeste/keep/tower/two) "fp" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 1 }, /turf/floor/path/running_bond/granite, @@ -335,7 +335,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep) "fr" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /turf/floor/wood/maple, @@ -389,7 +389,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep) "gz" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /turf/floor/wood/maple, @@ -401,7 +401,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep/tower/three) "gG" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /obj/effect/floor_decal/spline/fancy/wood/walnut{ @@ -498,7 +498,7 @@ /turf/floor/path/herringbone/granite, /area/karzerfeste/keep/gatehouse/west) "iq" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /obj/abstract/landmark/start/karzerfeste/guild_clerk, @@ -523,7 +523,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/ward/wall/four) "iG" = ( -/obj/structure/bed/chair/bench/pew/ebony{ +/obj/structure/chair/bench/pew/ebony{ dir = 8 }, /obj/structure/railing/mapped/wooden/ebony{ @@ -602,7 +602,7 @@ /area/karzerfeste/outside/keep) "jZ" = ( /obj/item/bladed/folding, -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 1 }, /turf/floor/path/running_bond/granite, @@ -700,7 +700,7 @@ /turf/wall/brick/basalt, /area/karzerfeste/ward/shrine/east) "mf" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /turf/floor/dirt, @@ -766,7 +766,7 @@ /turf/floor/wood/maple, /area/karzerfeste/ward/shrine) "nv" = ( -/obj/structure/bed/chair/bench/ebony, +/obj/structure/chair/bench/ebony, /obj/effect/floor_decal/spline/fancy/wood/walnut, /obj/structure/wall_sconce/lantern{ dir = 4 @@ -780,7 +780,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/ward/shrine) "nH" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /obj/abstract/landmark/start/karzerfeste/adventurer, @@ -936,7 +936,7 @@ /turf/wall/brick/basalt, /area/karzerfeste/ward/wall/three) "pS" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /turf/floor/carpet, @@ -1010,7 +1010,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/ward/shrine) "rE" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 1 }, /turf/floor/path/running_bond/granite, @@ -1022,7 +1022,7 @@ /turf/floor/path/basalt, /area/karzerfeste/outside/keep/courtyard) "rK" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 1 }, /turf/floor/dirt, @@ -1058,7 +1058,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep/gatehouse/west) "sl" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/effect/floor_decal/spline/fancy/wood/walnut, @@ -1111,7 +1111,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep) "tl" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 1 }, /turf/floor/wood/maple, @@ -1201,7 +1201,7 @@ /turf/floor/wood/maple, /area/karzerfeste/ward/shrine) "uK" = ( -/obj/structure/bed/chair/wood/wings/ebony{ +/obj/structure/chair/wood/wings/ebony{ dir = 1 }, /obj/structure/railing/mapped/wooden/ebony, @@ -1233,7 +1233,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep/tower/three) "vm" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /turf/floor/path/running_bond/granite, @@ -1252,7 +1252,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/keep/tower) "vR" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 1 }, /turf/floor/mud, @@ -1286,7 +1286,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep/gatehouse) "wM" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /turf/floor/carpet, @@ -1343,7 +1343,7 @@ /turf/floor/path/granite, /area/karzerfeste/keep/tower/four) "yj" = ( -/obj/structure/bed/chair/bench/pew/mahogany{ +/obj/structure/chair/bench/pew/mahogany{ dir = 4 }, /obj/abstract/landmark/start/karzerfeste/cleric, @@ -1375,7 +1375,7 @@ /turf/floor/mud, /area/karzerfeste/outside/keep) "yO" = ( -/obj/structure/bed/chair/wood/wings/ebony, +/obj/structure/chair/wood/wings/ebony, /turf/floor/carpet/blue, /area/karzerfeste/keep) "zk" = ( @@ -1385,7 +1385,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep/gatehouse/west) "zv" = ( -/obj/structure/bed/chair/bench/pew/ebony{ +/obj/structure/chair/bench/pew/ebony{ dir = 4 }, /obj/structure/railing/mapped/wooden/ebony{ @@ -1436,7 +1436,7 @@ /turf/floor/path/herringbone/granite, /area/karzerfeste/keep) "AJ" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/effect/floor_decal/spline/fancy/wood/walnut{ @@ -1456,14 +1456,14 @@ /turf/floor/wood/maple, /area/karzerfeste/keep) "AX" = ( -/obj/structure/bed/chair/bench/pew/mahogany{ +/obj/structure/chair/bench/pew/mahogany{ dir = 4 }, /obj/abstract/landmark/start/karzerfeste/gravekeeper, /turf/floor/path/granite, /area/karzerfeste/ward/shrine) "Bd" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 1 }, /turf/floor/path/running_bond/granite, @@ -1506,7 +1506,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/ward/wall) "Cd" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /obj/effect/floor_decal/spline/fancy/wood/walnut{ @@ -1535,7 +1535,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep) "CA" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /obj/effect/floor_decal/spline/fancy/wood/walnut{ dir = 1 }, @@ -1543,7 +1543,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep) "CG" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /obj/effect/floor_decal/spline/fancy/wood/walnut{ dir = 8 }, @@ -1604,7 +1604,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep) "Dw" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /obj/abstract/landmark/start/karzerfeste/adventurer, @@ -1708,7 +1708,7 @@ /turf/open, /area/karzerfeste/outside/ward) "Fa" = ( -/obj/structure/bed/chair/bench/ebony, +/obj/structure/chair/bench/ebony, /obj/effect/floor_decal/spline/fancy/wood/walnut, /turf/floor/wood/maple, /area/karzerfeste/keep/gatehouse/west) @@ -1751,7 +1751,7 @@ /turf/floor/mud/water/deep, /area/karzerfeste/outside/ward) "Gg" = ( -/obj/structure/bed/chair/bench/pew/mahogany{ +/obj/structure/chair/bench/pew/mahogany{ dir = 4 }, /obj/abstract/landmark/start/karzerfeste/shrine_attendant, @@ -1838,7 +1838,7 @@ /turf/floor/mud, /area/karzerfeste/outside/keep/courtyard) "HE" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /obj/effect/floor_decal/spline/fancy/wood/walnut{ dir = 1 }, @@ -1851,7 +1851,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep) "HK" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/abstract/landmark/start/karzerfeste/adventurer, @@ -1879,7 +1879,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep/tower/three) "Ip" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /turf/floor/path/running_bond/granite, @@ -2021,7 +2021,7 @@ /turf/floor/dirt, /area/karzerfeste/outside/keep/courtyard) "Lb" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /obj/abstract/landmark/start/karzerfeste/guildmaster, @@ -2034,20 +2034,20 @@ /turf/unsimulated/mask, /area/karzerfeste/caves/surface_east) "Lq" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /obj/structure/wall_sconce/lantern{ dir = 4 }, /turf/floor/wood/maple, /area/karzerfeste/keep/tower/three) "Lz" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /turf/floor/dirt, /area/karzerfeste/outside/keep) "LE" = ( -/obj/structure/bed/chair/bench/pew/mahogany{ +/obj/structure/chair/bench/pew/mahogany{ dir = 4 }, /turf/floor/path/granite, @@ -2134,7 +2134,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep) "NS" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /obj/abstract/landmark/start/karzerfeste/greenhorn_adventurer, @@ -2166,20 +2166,20 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/ward/wall/two) "Oi" = ( -/obj/structure/bed/chair/wood/wings/ebony{ +/obj/structure/chair/wood/wings/ebony{ dir = 8 }, /turf/floor/carpet/blue, /area/karzerfeste/keep) "Ok" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/abstract/landmark/start/karzerfeste/adventurer, /turf/floor/path/running_bond/granite, /area/karzerfeste/keep/gatehouse/west) "Os" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /obj/effect/floor_decal/spline/fancy/wood/walnut{ dir = 4 }, @@ -2327,7 +2327,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep/gatehouse) "Rb" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /obj/abstract/landmark/start/karzerfeste/greenhorn_adventurer, @@ -2403,7 +2403,7 @@ /turf/floor/wood/maple, /area/karzerfeste/keep/gatehouse) "SW" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /obj/abstract/landmark/start/karzerfeste/guild_merchant, /turf/floor/path/running_bond/granite, /area/karzerfeste/keep) @@ -2474,7 +2474,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/keep) "UP" = ( -/obj/structure/bed/chair/bench/ebony, +/obj/structure/chair/bench/ebony, /obj/effect/floor_decal/spline/fancy/wood/walnut, /obj/effect/floor_decal/spline/fancy/wood/walnut{ dir = 8 @@ -2512,7 +2512,7 @@ /turf/floor/snow, /area/karzerfeste/outside/road) "VX" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /turf/floor/path/running_bond/granite, @@ -2534,13 +2534,13 @@ /turf/floor/carpet/blue, /area/karzerfeste/keep) "Wh" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /turf/floor/path/running_bond/granite, /area/karzerfeste/keep/gatehouse) "Wj" = ( -/obj/structure/bed/chair/bench/ebony, +/obj/structure/chair/bench/ebony, /turf/floor/dirt, /area/karzerfeste/outside/keep) "Wk" = ( @@ -2571,7 +2571,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/keep/tower/two) "WF" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /turf/floor/path/running_bond/granite, /area/karzerfeste/keep/tower) "WP" = ( @@ -2615,7 +2615,7 @@ /turf/floor/mud, /area/karzerfeste/ward/wall/three) "XK" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /turf/floor/wood/maple, /area/karzerfeste/keep) "XM" = ( @@ -2678,7 +2678,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/ward/wall) "YY" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /turf/floor/wood/maple, @@ -2723,7 +2723,7 @@ /turf/floor/mud, /area/karzerfeste/outside/road) "ZH" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /turf/floor/path/running_bond/granite, /area/karzerfeste/keep) "ZI" = ( diff --git a/maps/karzerfeste/karzerfeste-1-2.dmm b/maps/karzerfeste/karzerfeste-1-2.dmm index de53cd2fcd30..85751b625681 100644 --- a/maps/karzerfeste/karzerfeste-1-2.dmm +++ b/maps/karzerfeste/karzerfeste-1-2.dmm @@ -148,7 +148,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/outside/keep/above/indoors/west) "gB" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /turf/floor/path/running_bond/granite, @@ -264,7 +264,7 @@ /obj/structure/railing/mapped/wooden/ebony{ dir = 1 }, -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /turf/floor/path/running_bond/granite, @@ -298,7 +298,7 @@ /obj/structure/railing/mapped/wooden/ebony{ dir = 1 }, -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /obj/structure/railing/mapped/wooden/ebony{ dir = 8 }, @@ -325,7 +325,7 @@ dir = 4 }, /obj/structure/railing/mapped/wooden/ebony, -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 1 }, /turf/floor/wood/maple, @@ -416,7 +416,7 @@ /turf/unsimulated/mask, /area/karzerfeste/caves/upper_east) "uo" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /turf/floor/path/running_bond/granite, @@ -676,7 +676,7 @@ /turf/open, /area/karzerfeste/outside/ward/wall) "FZ" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 4 }, /turf/floor/path/running_bond/granite, @@ -694,7 +694,7 @@ /turf/open, /area/karzerfeste/outside/keep/tower/four) "GX" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 1 }, /turf/floor/path/running_bond/granite, @@ -745,7 +745,7 @@ /area/karzerfeste/outside/road) "IY" = ( /obj/structure/railing/mapped/wooden/ebony, -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /turf/floor/wood/maple, /area/karzerfeste/outside/ward) "IZ" = ( @@ -764,7 +764,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/outside/keep/gatehouse) "KA" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /turf/floor/path/running_bond/granite, /area/karzerfeste/outside/keep/above/indoors/west) "Lc" = ( @@ -779,7 +779,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/outside/keep/tower/four) "LL" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /obj/effect/floor_decal/spline/fancy/wood/walnut{ @@ -823,7 +823,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/outside/keep/tower/three) "Ns" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /turf/floor/path/running_bond/granite, @@ -844,7 +844,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/outside/keep/tower/four) "NS" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /turf/floor/path/running_bond/granite, @@ -863,7 +863,7 @@ /area/karzerfeste/outside/keep/tower/three) "PH" = ( /obj/structure/railing/mapped/wooden/ebony, -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 1 }, /obj/structure/railing/mapped/wooden/ebony{ @@ -911,7 +911,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/outside/keep/above/indoors) "Si" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /turf/floor/wood/maple, @@ -986,7 +986,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/outside/keep/above/indoors/southwest) "VC" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 1 }, /turf/floor/wood/maple, @@ -1005,7 +1005,7 @@ /obj/structure/railing/mapped/wooden/ebony{ dir = 1 }, -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /turf/floor/wood/maple, /area/karzerfeste/outside/keep/above/indoors/west) "VS" = ( @@ -1042,7 +1042,7 @@ /obj/structure/railing/mapped/wooden/ebony{ dir = 1 }, -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /turf/floor/path/running_bond/granite, @@ -1080,7 +1080,7 @@ /turf/floor/path/running_bond/granite, /area/karzerfeste/outside/keep/tower/three) "ZI" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /turf/floor/path/running_bond/granite, /area/karzerfeste/outside/keep/above/indoors/east) "ZJ" = ( diff --git a/maps/karzerfeste/submaps/dungeon_barracks.dmm b/maps/karzerfeste/submaps/dungeon_barracks.dmm index 1c04fea28c6e..f99160d6a1be 100644 --- a/maps/karzerfeste/submaps/dungeon_barracks.dmm +++ b/maps/karzerfeste/submaps/dungeon_barracks.dmm @@ -1,6 +1,6 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /turf/floor/path/herringbone/basalt, @@ -78,7 +78,7 @@ /turf/floor/path/herringbone/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "A" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/item/stack/medical/bandage/crafted/five, @@ -94,7 +94,7 @@ /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "I" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/item/stack/material/bolt/mapped/cloth/five, @@ -122,7 +122,7 @@ /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "O" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/item/food/grown/dried_tobacco/bad, @@ -140,27 +140,27 @@ /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "R" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/item/bladed/folding, /turf/floor/path/herringbone/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "U" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/item/food/grown/dried_tobacco/bad, /turf/floor/path/herringbone/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "X" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /turf/floor/path/herringbone/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "Z" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/item/stack/medical/bandage/crafted/five, diff --git a/maps/karzerfeste/submaps/dungeon_feasting_hall.dmm b/maps/karzerfeste/submaps/dungeon_feasting_hall.dmm index e7b91b43b25f..a1ece7b2f17f 100644 --- a/maps/karzerfeste/submaps/dungeon_feasting_hall.dmm +++ b/maps/karzerfeste/submaps/dungeon_feasting_hall.dmm @@ -29,13 +29,13 @@ /turf/floor/path/herringbone/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "n" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "p" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/random/hostile/dungeon, @@ -66,7 +66,7 @@ /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "E" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/item/remains/human, @@ -74,14 +74,14 @@ /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "G" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/item/stack/material/bolt/mapped/cloth/five, /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "J" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/item/remains/human, @@ -102,7 +102,7 @@ /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "S" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/random/hostile/dungeon, @@ -117,7 +117,7 @@ /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "Z" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /turf/floor/path/running_bond/basalt, diff --git a/maps/karzerfeste/submaps/dungeon_smithy.dmm b/maps/karzerfeste/submaps/dungeon_smithy.dmm index 81170216471d..9d6165cc4995 100644 --- a/maps/karzerfeste/submaps/dungeon_smithy.dmm +++ b/maps/karzerfeste/submaps/dungeon_smithy.dmm @@ -23,7 +23,7 @@ /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "k" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /turf/floor/path/running_bond/basalt, @@ -87,7 +87,7 @@ /turf/floor/path/herringbone/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "X" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /turf/floor/path/running_bond/basalt, diff --git a/maps/karzerfeste/submaps/dungeon_workshop.dmm b/maps/karzerfeste/submaps/dungeon_workshop.dmm index dd164268a206..b6c4d7e75595 100644 --- a/maps/karzerfeste/submaps/dungeon_workshop.dmm +++ b/maps/karzerfeste/submaps/dungeon_workshop.dmm @@ -3,7 +3,7 @@ /turf/template_noop, /area/karzerfeste/caves/point_of_interest/dungeon) "c" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /turf/floor/path/running_bond/basalt, @@ -53,7 +53,7 @@ /turf/floor/path/running_bond/basalt, /area/karzerfeste/caves/point_of_interest/dungeon) "K" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /turf/floor/path/running_bond/basalt, diff --git a/maps/ministation/ministation-0.dmm b/maps/ministation/ministation-0.dmm index 35b21cdc415d..1ee33475b72d 100644 --- a/maps/ministation/ministation-0.dmm +++ b/maps/ministation/ministation-0.dmm @@ -436,7 +436,7 @@ /turf/floor/tiled, /area/ministation/cargo) "cg" = ( -/obj/structure/bed/chair/comfy, +/obj/structure/chair/comfy, /turf/floor/carpet/blue2, /area/ministation/hall/s1) "cj" = ( @@ -1655,7 +1655,7 @@ /obj/effect/floor_decal/corner/beige{ dir = 6 }, -/obj/structure/bed/chair/office, +/obj/structure/chair/office, /turf/floor/tiled, /area/ministation/cargo) "gt" = ( @@ -2599,7 +2599,7 @@ dir = 1; pixel_y = -23 }, -/obj/structure/bed/chair/janicart{ +/obj/structure/janicart{ dir = 4 }, /turf/floor/tiled, @@ -2811,7 +2811,7 @@ /turf/floor/plating, /area/ministation/smcontrol) "lA" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 8 }, /turf/floor/laminate/walnut, @@ -3386,7 +3386,7 @@ /turf/floor/pool, /area/ministation/dorms) "od" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 1 }, /turf/floor/laminate/walnut, @@ -4579,7 +4579,7 @@ /turf/floor/tiled, /area/ministation/hall/s1) "uj" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/floor_decal/corner/beige{ @@ -4678,7 +4678,7 @@ /area/ministation/smcontrol) "uH" = ( /obj/machinery/light, -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 1 }, /turf/floor/laminate/walnut, @@ -4927,7 +4927,7 @@ "vK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/decal/cleanable/dirt/visible, -/obj/structure/bed/chair/wood{ +/obj/structure/chair/wood{ dir = 8 }, /obj/machinery/camera/autoname{ @@ -4964,7 +4964,7 @@ /area/ministation/hall/s1) "vY" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/steel_grid, @@ -5021,7 +5021,7 @@ /turf/floor/tiled/monotile, /area/ministation/atmospherics) "wk" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 8 }, /obj/machinery/alarm{ @@ -6115,7 +6115,7 @@ /area/ministation/mining) "Bq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/bed/chair/wood{ +/obj/structure/chair/wood{ dir = 8 }, /turf/floor/tiled, @@ -10572,7 +10572,7 @@ /obj/abstract/landmark/start{ name = "Head Engineer" }, -/obj/structure/bed/chair/office{ +/obj/structure/chair/office{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -12176,7 +12176,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/bed/chair/office, +/obj/structure/chair/office, /turf/floor/tiled, /area/ministation/smcontrol) "SO" = ( diff --git a/maps/ministation/ministation-1.dmm b/maps/ministation/ministation-1.dmm index d8e968288635..68b588d80e87 100644 --- a/maps/ministation/ministation-1.dmm +++ b/maps/ministation/ministation-1.dmm @@ -167,7 +167,7 @@ /turf/floor/plating, /area/ministation/maint/l2centraln) "aH" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled, /area/ministation/hall/w2) "aL" = ( @@ -540,7 +540,7 @@ /turf/floor/tiled/white, /area/ministation/medical) "cR" = ( -/obj/structure/bed/chair/office/comfy/brown, +/obj/structure/chair/office/comfy/brown, /obj/abstract/landmark/start{ name = "Detective" }, @@ -1268,7 +1268,7 @@ /area/ministation/detective) "gL" = ( /obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 4 }, /turf/floor/tiled/dark, @@ -1359,7 +1359,7 @@ /turf/floor/tiled, /area/ministation/security) "hh" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /obj/abstract/landmark/start{ name = "Medical Doctor" }, @@ -1384,7 +1384,7 @@ /turf/floor/tiled, /area/ministation/hall/w2) "hm" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, @@ -1488,7 +1488,7 @@ /obj/abstract/landmark/start{ name = "Medical Doctor" }, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /obj/effect/floor_decal/corner/paleblue{ @@ -1817,7 +1817,7 @@ /turf/floor/tiled/white, /area/ministation/medical) "iG" = ( -/obj/structure/bed/chair/office/comfy/brown{ +/obj/structure/chair/office/comfy/brown{ dir = 1 }, /turf/floor/carpet/red, @@ -2423,7 +2423,7 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/status_display{ pixel_x = -32; dir = 8 @@ -2496,7 +2496,7 @@ /turf/floor/tiled, /area/ministation/hydro) "lR" = ( -/obj/structure/bed/chair/comfy/beige{ +/obj/structure/chair/comfy/beige{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -3218,7 +3218,7 @@ /turf/floor/tiled/white, /area/ministation/medical) "pQ" = ( -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 4 }, /obj/effect/floor_decal/corner/paleblue{ @@ -3382,10 +3382,10 @@ /turf/floor/tiled/white, /area/ministation/medical) "qz" = ( -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 4 }, -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 4 }, /obj/effect/floor_decal/corner/paleblue{ @@ -3408,7 +3408,7 @@ /turf/floor/tiled/dark, /area/ministation/cafe) "qF" = ( -/obj/structure/bed/chair/comfy/beige{ +/obj/structure/chair/comfy/beige{ dir = 8 }, /obj/machinery/light{ @@ -4426,7 +4426,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/bed/chair/armchair/red{ +/obj/structure/chair/armchair/red{ dir = 1 }, /turf/floor/tiled, @@ -4636,7 +4636,7 @@ /turf/floor/tiled, /area/ministation/hall/w2) "uG" = ( -/obj/structure/bed/chair/office/comfy/brown{ +/obj/structure/chair/office/comfy/brown{ dir = 8 }, /obj/structure/disposalpipe/segment{ @@ -5384,7 +5384,7 @@ /turf/floor/tiled/white, /area/ministation/medical) "xd" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /obj/machinery/alarm{ @@ -6034,7 +6034,7 @@ /turf/floor/tiled/dark, /area/ministation/cafe) "zi" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /turf/floor/carpet/red, /area/ministation/security) "zj" = ( @@ -6051,7 +6051,7 @@ /area/ministation/maint/l2centrals) "zn" = ( /obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 1 }, /turf/floor/tiled/dark, @@ -6244,7 +6244,7 @@ /turf/floor/laminate, /area/ministation/detective) "zZ" = ( -/obj/structure/bed/chair/comfy/beige{ +/obj/structure/chair/comfy/beige{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -6546,7 +6546,7 @@ /turf/floor/lino, /area/ministation/cafe) "Bs" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -7080,7 +7080,7 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/structure/bed/chair/comfy/beige, +/obj/structure/chair/comfy/beige, /turf/floor/carpet, /area/ministation/hall/w2) "Es" = ( @@ -7315,7 +7315,7 @@ /obj/machinery/firealarm{ pixel_y = 32 }, -/obj/structure/bed/chair/comfy/beige, +/obj/structure/chair/comfy/beige, /turf/floor/carpet, /area/ministation/hall/w2) "Ga" = ( @@ -8169,7 +8169,7 @@ /turf/floor/tiled, /area/ministation/security) "KW" = ( -/obj/structure/bed/chair/office/comfy/brown{ +/obj/structure/chair/office/comfy/brown{ dir = 1 }, /obj/structure/cable{ @@ -8266,7 +8266,7 @@ /turf/floor/tiled, /area/ministation/hall/w2) "LK" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 4 }, /obj/structure/railing/mapped{ @@ -9148,7 +9148,7 @@ /turf/floor/tiled/white, /area/ministation/medical) "Qj" = ( -/obj/structure/bed/chair/comfy/beige{ +/obj/structure/chair/comfy/beige{ dir = 1 }, /turf/floor/tiled, @@ -9284,7 +9284,7 @@ /turf/floor/tiled, /area/ministation/security) "Rd" = ( -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 1 }, /obj/effect/floor_decal/corner/paleblue/diagonal, @@ -9596,7 +9596,7 @@ /turf/floor/plating, /area/ministation/maint/l2centraln) "Te" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -9775,7 +9775,7 @@ /area/ministation/cafe) "Ue" = ( /obj/effect/floor_decal/corner/paleblue/diagonal, -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 8 }, /turf/floor/tiled/dark, @@ -9895,7 +9895,7 @@ /turf/floor/plating, /area/ministation/maint/l2centraln) "UN" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/plating, @@ -9907,7 +9907,7 @@ /turf/space, /area/space) "UW" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled, /area/ministation/hall/e2) "UY" = ( @@ -9930,7 +9930,7 @@ /turf/wall/r_wall/hull, /area/ministation/arrival) "Va" = ( -/obj/structure/bed/chair/wheelchair, +/obj/structure/chair/wheelchair, /obj/machinery/camera/network/medbay{ req_access = list("ACCESS_CAMERAS") }, @@ -10478,7 +10478,7 @@ /turf/floor/plating, /area/ministation/security) "Yj" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /obj/abstract/landmark/start{ name = "Security Officer" }, diff --git a/maps/ministation/ministation-2.dmm b/maps/ministation/ministation-2.dmm index b087edf407c3..3b9ba99954de 100644 --- a/maps/ministation/ministation-2.dmm +++ b/maps/ministation/ministation-2.dmm @@ -421,7 +421,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/bed/chair/comfy/captain, +/obj/structure/chair/comfy/captain, /turf/floor/tiled, /area/ministation/bridge) "bA" = ( @@ -486,7 +486,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/structure/bed/chair/comfy/captain{ +/obj/structure/chair/comfy/captain{ dir = 4 }, /obj/machinery/camera/network/command{ @@ -1594,7 +1594,7 @@ /turf/floor/tiled/white, /area/ministation/science) "gN" = ( -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -2053,7 +2053,7 @@ /obj/abstract/landmark/start{ name = "Scientist" }, -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /obj/item/radio/intercom{ dir = 8; pixel_x = 22 @@ -2752,7 +2752,7 @@ /obj/effect/floor_decal/corner/red{ dir = 5 }, -/obj/structure/bed/chair/padded/blue{ +/obj/structure/chair/padded/blue{ dir = 1 }, /turf/floor/tiled, @@ -2771,7 +2771,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 1 }, /obj/structure/extinguisher_cabinet{ @@ -2927,7 +2927,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 1 }, /turf/floor/tiled, @@ -3322,7 +3322,7 @@ /obj/effect/floor_decal/corner/yellow{ dir = 5 }, -/obj/structure/bed/chair/padded/blue{ +/obj/structure/chair/padded/blue{ dir = 1 }, /turf/floor/tiled, @@ -4619,7 +4619,7 @@ /turf/floor/tiled/white, /area/ministation/science) "Bb" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -4756,7 +4756,7 @@ /turf/floor/lino, /area/ministation/telecomms) "BE" = ( -/obj/structure/bed/chair/padded/blue{ +/obj/structure/chair/padded/blue{ dir = 1 }, /turf/floor/lino, @@ -5304,7 +5304,7 @@ /turf/floor/carpet/green, /area/ministation/library) "DS" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -5370,7 +5370,7 @@ /turf/floor/carpet/magenta, /area/ministation/science) "Ex" = ( -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 4 }, /turf/floor/carpet/green, @@ -5795,7 +5795,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/bed/chair/wood/maple{ +/obj/structure/chair/wood/maple{ dir = 8 }, /obj/abstract/landmark/start{ @@ -6180,7 +6180,7 @@ /turf/floor/plating, /area/ministation/maint/l3central) "LT" = ( -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 4 }, /turf/floor/laminate/mahogany, @@ -6319,7 +6319,7 @@ /turf/floor/tiled/white, /area/ministation/science) "MJ" = ( -/obj/structure/bed/chair/armchair/black, +/obj/structure/chair/armchair/black, /turf/floor/carpet/green, /area/ministation/library) "MP" = ( @@ -6560,7 +6560,7 @@ /turf/floor/tiled, /area/ministation/bridge) "Od" = ( -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 4 }, /turf/floor/laminate/yew, @@ -6573,7 +6573,7 @@ /turf/wall/titanium, /area/ministation/shuttle/outgoing) "Om" = ( -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 8 }, /turf/floor/carpet/green, @@ -6630,7 +6630,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /turf/floor/tiled/white, @@ -6810,7 +6810,7 @@ /turf/floor/laminate/mahogany, /area/ministation/library) "PE" = ( -/obj/structure/bed/chair/armchair/black{ +/obj/structure/chair/armchair/black{ dir = 8 }, /turf/floor/laminate/mahogany, @@ -6883,7 +6883,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -6904,7 +6904,7 @@ /turf/floor/tiled/white, /area/ministation/science) "Qh" = ( -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 4 }, /obj/machinery/light{ @@ -7480,7 +7480,7 @@ dir = 5 }, /obj/effect/overmap/visitable/ship/ministation, -/obj/structure/bed/chair/padded/blue, +/obj/structure/chair/padded/blue, /turf/floor/tiled, /area/ministation/bridge) "TF" = ( @@ -7783,7 +7783,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/structure/bed/chair/comfy/captain{ +/obj/structure/chair/comfy/captain{ dir = 8 }, /obj/machinery/camera/autoname{ @@ -8077,7 +8077,7 @@ /turf/floor/tiled, /area/ministation/hall/n3) "Xe" = ( -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 4 }, /obj/machinery/light, @@ -8483,7 +8483,7 @@ /turf/floor/plating, /area/ministation/maint/l3ne) "Zt" = ( -/obj/structure/bed/chair/wood/walnut{ +/obj/structure/chair/wood/walnut{ dir = 4 }, /obj/machinery/firealarm{ @@ -8550,7 +8550,7 @@ /turf/floor/tiled, /area/ministation/hall/s3) "ZS" = ( -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ diff --git a/maps/ministation/ministation.dm b/maps/ministation/ministation.dm index 4a4d02771021..4b103d995e43 100644 --- a/maps/ministation/ministation.dm +++ b/maps/ministation/ministation.dm @@ -43,6 +43,7 @@ Twice... #include "../../mods/mobs/dionaea/_dionaea.dme" #include "../../mods/mobs/borers/_borers.dme" + #include "../../mods/content/beekeeping/_beekeeping.dme" #include "../../mods/content/tabloids/_tabloids.dme" #include "../../mods/species/ascent/_ascent.dme" #include "../../mods/species/tajaran/_tajaran.dme" diff --git a/maps/ministation/ministation_areas.dm b/maps/ministation/ministation_areas.dm index 5046e0c921cf..b9da56005930 100644 --- a/maps/ministation/ministation_areas.dm +++ b/maps/ministation/ministation_areas.dm @@ -335,7 +335,7 @@ /area/turbolift/l1 name = "Station Level 1" - base_turf = /turf/floor + base_turf = /turf/floor/plating /area/turbolift/l2 name = "Station Level 2" diff --git a/maps/ministation/space.dmm b/maps/ministation/space.dmm index ec8b28cf0179..54f8c3513fd8 100644 --- a/maps/ministation/space.dmm +++ b/maps/ministation/space.dmm @@ -56,7 +56,7 @@ /turf/floor/shuttle/blue, /area/shuttle/escape_shuttle) "ao" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ icon_state = "shuttle_chair"; dir = 1 }, @@ -67,7 +67,7 @@ /turf/floor/shuttle/blue, /area/shuttle/escape_shuttle) "aq" = ( -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ icon_state = "shuttle_chair"; dir = 1 }, @@ -120,7 +120,7 @@ icon_state = "stripe"; dir = 1 }, -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ icon_state = "shuttle_chair"; dir = 1 }, @@ -135,7 +135,7 @@ icon_state = "stripe"; dir = 1 }, -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ icon_state = "shuttle_chair"; dir = 1 }, @@ -146,7 +146,7 @@ icon_state = "stripe"; dir = 5 }, -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ icon_state = "shuttle_chair"; dir = 1 }, @@ -176,7 +176,7 @@ /turf/floor/shuttle/blue, /area/shuttle/escape_shuttle) "aC" = ( -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ icon_state = "shuttle_chair"; dir = 1 }, @@ -187,7 +187,7 @@ icon_state = "stripe"; dir = 4 }, -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ icon_state = "shuttle_chair"; dir = 1 }, @@ -207,7 +207,7 @@ /area/shuttle/escape_shuttle) "aG" = ( /obj/effect/floor_decal/industrial/traffic, -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ icon_state = "shuttle_chair"; dir = 1 }, @@ -219,7 +219,7 @@ /area/shuttle/escape_shuttle) "aH" = ( /obj/effect/floor_decal/industrial/traffic, -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ icon_state = "shuttle_chair"; dir = 1 }, @@ -230,7 +230,7 @@ icon_state = "stripe"; dir = 6 }, -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ icon_state = "shuttle_chair"; dir = 1 }, diff --git a/maps/modpack_testing/modpack_testing.dm b/maps/modpack_testing/modpack_testing.dm index 533ca68cf0bc..842799d1fc45 100644 --- a/maps/modpack_testing/modpack_testing.dm +++ b/maps/modpack_testing/modpack_testing.dm @@ -24,6 +24,7 @@ #include "../../mods/content/shackles/_shackles.dme" #include "../../mods/content/supermatter/_supermatter.dme" #include "../../mods/content/xenobiology/_xenobiology.dme" + #include "../../mods/content/blacksmithy/_blacksmithy.dme" #include "../../mods/content/item_sharpening/_item_sharpening.dme" #include "../../mods/pyrelight/_pyrelight.dme" // include after _fantasy.dme so overrides work diff --git a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm index ac68a3de9626..45318e7f6b90 100644 --- a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm +++ b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm @@ -688,7 +688,7 @@ pixel_x = -24; locked = 0 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/effect/decal/cleanable/dirt/visible, @@ -955,7 +955,7 @@ /turf/floor/tiled/techfloor, /area/map_template/crashed_pod) "bC" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/effect/decal/cleanable/dirt/visible, @@ -992,13 +992,13 @@ /turf/floor/tiled/techfloor, /area/map_template/crashed_pod) "bH" = ( -/obj/structure/bed/chair/shuttle/black, +/obj/structure/chair/shuttle/black, /obj/abstract/submap_landmark/spawnpoint/crashed_pod_survivor, /obj/effect/decal/cleanable/dirt/visible, /turf/floor/tiled/dark, /area/map_template/crashed_pod) "bI" = ( -/obj/structure/bed/chair/shuttle/black, +/obj/structure/chair/shuttle/black, /obj/structure/window/reinforced{ dir = 4 }, @@ -1143,7 +1143,7 @@ /turf/floor/tiled/white, /area/map_template/crashed_pod) "bW" = ( -/obj/structure/bed/chair/shuttle/black, +/obj/structure/chair/shuttle/black, /obj/structure/window/reinforced{ dir = 8 }, @@ -1200,7 +1200,7 @@ /turf/floor/tiled/techfloor, /area/map_template/crashed_pod) "ca" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/effect/decal/cleanable/dirt/visible, /turf/floor/tiled/dark, /area/map_template/crashed_pod) diff --git a/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm b/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm index b1ebe4b69dce..62b119ba2ef2 100644 --- a/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm +++ b/maps/random_ruins/exoplanet_ruins/datacapsule/datacapsule.dm @@ -57,7 +57,13 @@ to_chat(user, SPAN_NOTICE("You pry out the data drive from \the [src].")) playsound(loc, 'sound/items/Crowbar.ogg', 50, 1) var/obj/item/stock_parts/computer/hard_drive/cluster/drive = new(get_turf(src)) - drive.origin_tech = @'{"[TECH_DATA]":[rand(4,5)],"[TECH_ENGINEERING]":[rand(4,5)],"[TECH_EXOTIC_MATTER]":[rand(4,5)],"[TECH_COMBAT]":[rand(2,5)],"[TECH_ESOTERIC]":[rand(0,6)]}' + drive.origin_tech = json_encode(list( + (TECH_DATA) = rand(4,5), + (TECH_ENGINEERING) = rand(4,5), + (TECH_EXOTIC_MATTER) = rand(4,5), + (TECH_COMBAT) = rand(2,5), + (TECH_ESOTERIC) = rand(0,6) + )) disk_looted = TRUE return TRUE . = ..() diff --git a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm b/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm index 1552d243610f..39a8a4743f78 100644 --- a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm +++ b/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm @@ -109,7 +109,7 @@ /turf/floor/tiled/steel_ridged, /area/template_noop) "ax" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /obj/structure/emergency_dispenser/east, /turf/floor/tiled/white, /area/template_noop) @@ -185,7 +185,7 @@ /area/template_noop) "aM" = ( /obj/effect/decal/cleanable/vomit/mapped, -/obj/item/chems/glass/paint/random, +/obj/item/chems/glass/bucket/paint/random, /obj/structure/closet/medical_wall/filled{ pixel_y = 32 }, @@ -231,7 +231,7 @@ /area/template_noop) "aU" = ( /obj/random/junk, -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /turf/floor/carpet/blue2, /area/template_noop) "aV" = ( diff --git a/maps/random_ruins/exoplanet_ruins/hut/hut.dmm b/maps/random_ruins/exoplanet_ruins/hut/hut.dmm index 21fc564bfdd4..a3ba0e14396d 100644 --- a/maps/random_ruins/exoplanet_ruins/hut/hut.dmm +++ b/maps/random_ruins/exoplanet_ruins/hut/hut.dmm @@ -36,7 +36,7 @@ /turf/floor/tiled/dark, /area/template_noop) "k" = ( -/obj/structure/bed/chair/wheelchair, +/obj/structure/chair/wheelchair, /turf/floor/tiled/dark, /area/template_noop) "l" = ( diff --git a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm b/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm index 7677b177ff42..ea2408b5f99e 100644 --- a/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm +++ b/maps/random_ruins/exoplanet_ruins/hydrobase/hydrobase.dmm @@ -1389,7 +1389,7 @@ /obj/structure/sign/warning/smoking{ pixel_y = 32 }, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 4 }, /turf/floor/tiled, @@ -1524,7 +1524,7 @@ /turf/floor/fixed/alium, /area/map_template/hydrobase/station/processing) "ei" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 1 }, /turf/floor/tiled, diff --git a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm index c3b5df5467f1..a98e2f8fec67 100644 --- a/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm +++ b/maps/random_ruins/exoplanet_ruins/lodge/lodge.dmm @@ -86,7 +86,7 @@ /turf/floor/wood, /area/template_noop) "p" = ( -/obj/structure/bed/chair/wood{ +/obj/structure/chair/wood{ dir = 8 }, /obj/effect/floor_decal/spline/fancy/wood/corner, @@ -162,7 +162,7 @@ /turf/floor/tiled/monotile, /area/template_noop) "D" = ( -/obj/structure/bed/chair/wood{ +/obj/structure/chair/wood{ dir = 8 }, /obj/effect/floor_decal/spline/fancy/wood{ diff --git a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm b/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm index 13485f43f126..430aedf95a2c 100644 --- a/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm +++ b/maps/random_ruins/exoplanet_ruins/marooned/marooned.dmm @@ -51,7 +51,7 @@ /area/map_template/marooned) "am" = ( /obj/abstract/landmark/corpse/marooned_officer, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/effect/decal/cleanable/blood, @@ -183,7 +183,7 @@ /obj/structure/handrail{ dir = 4 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/item/trash/liquidfood, @@ -207,7 +207,7 @@ /obj/structure/handrail{ dir = 4 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/floor_decal/industrial/outline, diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm index cd6082a3b661..7008a642da99 100644 --- a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm +++ b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm @@ -317,7 +317,7 @@ /turf/floor/tiled/techfloor, /area/map_template/colony/command) "aW" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /obj/effect/floor_decal/techfloor{ @@ -849,7 +849,7 @@ /turf/floor/reinforced/oxygen, /area/map_template/colony/atmospherics) "bX" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/floor_decal/corner/red{ @@ -2468,7 +2468,7 @@ /turf/floor/tiled/techfloor, /area/map_template/colony/atmospherics) "fn" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /obj/effect/floor_decal/spline/fancy/wood{ @@ -2477,7 +2477,7 @@ /turf/floor/laminate/walnut, /area/map_template/colony/messhall) "fo" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /obj/structure/sign/double/maltesefalcon/right{ @@ -2548,7 +2548,7 @@ /turf/floor/tiled/techfloor, /area/map_template/colony/atmospherics) "fu" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /obj/structure/sign/double/maltesefalcon/left{ @@ -2725,7 +2725,7 @@ /area/map_template/colony/messhall) "fK" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /obj/machinery/light{ @@ -3790,7 +3790,7 @@ dir = 9 }, /obj/effect/floor_decal/corner/red, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled/techfloor, @@ -4158,7 +4158,7 @@ /obj/machinery/recharger/wallcharger{ pixel_y = 36 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled/techfloor, @@ -4865,7 +4865,7 @@ /obj/effect/floor_decal/techfloor{ dir = 6 }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /obj/effect/floor_decal/corner/red{ @@ -5636,7 +5636,7 @@ /turf/floor/lino, /area/map_template/colony) "kQ" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /turf/floor/lino, @@ -6338,7 +6338,7 @@ /turf/floor/tiled/techfloor, /area/map_template/colony/airlock) "mi" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /turf/floor/tiled/techfloor/grid, @@ -6709,7 +6709,7 @@ /turf/floor/concrete, /area/map_template/colony/mineralprocessing) "mR" = ( -/obj/structure/bed/chair/comfy/beige{ +/obj/structure/chair/comfy/beige{ dir = 4 }, /obj/effect/floor_decal/techfloor, @@ -6950,7 +6950,7 @@ /turf/floor/tiled/dark/monotile, /area/map_template/colony/jail) "np" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/effect/floor_decal/corner/red{ dir = 6 }, @@ -7075,7 +7075,7 @@ /turf/floor/tiled/dark/monotile, /area/map_template/colony/jail) "nD" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/effect/floor_decal/corner/red{ diff --git a/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dmm b/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dmm index b4b342d006d0..8d586cbed4b2 100644 --- a/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dmm +++ b/maps/random_ruins/exoplanet_ruins/radshrine/radshrine.dmm @@ -10,7 +10,7 @@ /turf/wall/uranium, /area/template_noop) "e" = ( -/obj/structure/bed/chair/wood, +/obj/structure/chair/wood, /obj/effect/decal/cleanable/cobweb, /turf/floor/carpet/red, /area/template_noop) @@ -30,7 +30,7 @@ /turf/floor/reinforced, /area/template_noop) "I" = ( -/obj/structure/bed/chair/wood, +/obj/structure/chair/wood, /turf/floor/carpet/red, /area/template_noop) diff --git a/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm b/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm index c3c28c3bdc98..5e646433908f 100644 --- a/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm +++ b/maps/random_ruins/exoplanet_ruins/spider_nest/spider_nest.dmm @@ -53,7 +53,7 @@ /turf/floor/lino, /area/template_noop) "l" = ( -/obj/structure/bed/chair/office/comfy/blue, +/obj/structure/chair/office/comfy/blue, /obj/item/pen, /obj/effect/spider/stickyweb, /obj/effect/decal/cleanable/blood/drip, @@ -174,7 +174,7 @@ /turf/floor/reinforced, /area/template_noop) "F" = ( -/obj/structure/bed/chair/office/comfy/purple, +/obj/structure/chair/office/comfy/purple, /obj/effect/decal/cleanable/blood/drip, /obj/effect/decal/cleanable/filth, /turf/floor/lino, diff --git a/maps/shaded_hills/shaded_hills-dungeon.dmm b/maps/shaded_hills/shaded_hills-dungeon.dmm index 52330b32d366..61a7c7421733 100644 --- a/maps/shaded_hills/shaded_hills-dungeon.dmm +++ b/maps/shaded_hills/shaded_hills-dungeon.dmm @@ -34,7 +34,7 @@ /turf/floor/path/running_bond/basalt, /area/shaded_hills/caves/dungeon/poi) "dA" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/item/remains/human, @@ -66,7 +66,7 @@ /turf/floor/rock/basalt, /area/shaded_hills/caves/dungeon/poi) "fW" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/item/stack/medical/bandage/crafted/five, @@ -86,7 +86,7 @@ /turf/floor/path/running_bond/basalt, /area/shaded_hills/caves/dungeon/poi) "hz" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /turf/floor/path/running_bond/basalt, @@ -115,7 +115,7 @@ /turf/floor/mud, /area/shaded_hills/caves/dungeon) "jU" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/item/food/grown/dried_tobacco/bad, @@ -147,7 +147,7 @@ /turf/floor/path/running_bond/basalt, /area/shaded_hills/caves/dungeon/poi) "kN" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/item/stack/material/bolt/mapped/cloth/five, @@ -176,13 +176,13 @@ /turf/floor/path/running_bond/basalt, /area/shaded_hills/caves/dungeon/poi) "nD" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /turf/floor/path/herringbone/basalt, /area/shaded_hills/caves/dungeon/poi) "nE" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/item/bladed/folding, @@ -243,7 +243,7 @@ /turf/floor/path/basalt, /area/shaded_hills/caves/dungeon/inn) "oW" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /turf/floor/path/herringbone/basalt, @@ -336,13 +336,13 @@ /turf/floor/path/running_bond/basalt, /area/shaded_hills/caves/dungeon/poi) "wa" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /turf/floor/path/running_bond/basalt, /area/shaded_hills/caves/dungeon/poi) "wg" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/random/hostile/dungeon, @@ -397,7 +397,7 @@ /turf/floor/path/basalt, /area/shaded_hills/caves/dungeon/poi) "Bk" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/item/food/grown/dried_tobacco/bad, @@ -443,7 +443,7 @@ /turf/floor/path/basalt, /area/shaded_hills/caves/dungeon/poi) "Eq" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/item/stack/material/bolt/mapped/cloth/five, @@ -554,7 +554,7 @@ /turf/floor/path/running_bond/basalt, /area/shaded_hills/caves/dungeon/poi) "ME" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /obj/item/stack/medical/bandage/crafted/five, @@ -609,7 +609,7 @@ /turf/floor/path/herringbone/basalt, /area/shaded_hills/caves/dungeon/poi) "Rt" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/random/hostile/dungeon, @@ -624,7 +624,7 @@ /turf/floor/path/running_bond/basalt, /area/shaded_hills/caves/dungeon/poi) "SN" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/item/remains/human, diff --git a/maps/shaded_hills/shaded_hills-grassland.dmm b/maps/shaded_hills/shaded_hills-grassland.dmm index 3adbafa7443c..4fa441d975f4 100644 --- a/maps/shaded_hills/shaded_hills-grassland.dmm +++ b/maps/shaded_hills/shaded_hills-grassland.dmm @@ -8,7 +8,7 @@ /turf/floor/grass, /area/shaded_hills/outside) "cy" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/abstract/landmark/start/shaded_hills/miner, @@ -92,7 +92,7 @@ /turf/floor/mud, /area/shaded_hills/caves) "mG" = ( -/obj/structure/bed/chair/bench/ebony, +/obj/structure/chair/bench/ebony, /obj/item/bladed/folding, /obj/abstract/landmark/start/shaded_hills/miner, /turf/floor/barren, @@ -364,7 +364,7 @@ /turf/wall/natural/basalt/shaded_hills, /area/shaded_hills/caves/river) "YB" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 8 }, /obj/abstract/landmark/start/shaded_hills/miner, diff --git a/maps/shaded_hills/shaded_hills-inn.dmm b/maps/shaded_hills/shaded_hills-inn.dmm index 7dc097ab79b6..df16c776c0b2 100644 --- a/maps/shaded_hills/shaded_hills-inn.dmm +++ b/maps/shaded_hills/shaded_hills-inn.dmm @@ -27,7 +27,7 @@ /turf/floor/wood/rough/walnut, /area/shaded_hills/stable) "bv" = ( -/obj/structure/bed/chair/rustic{ +/obj/structure/chair/rustic{ dir = 4 }, /turf/floor/wood/walnut, @@ -148,6 +148,10 @@ /obj/structure/cask_rack/large/mapped, /turf/floor/path/herringbone/basalt, /area/shaded_hills/inn/kitchen) +"fM" = ( +/obj/structure/working/bellows, +/turf/floor/path/basalt, +/area/shaded_hills/stable) "fR" = ( /turf/floor/wood/rough/walnut, /area/shaded_hills/storehouse) @@ -214,6 +218,10 @@ }, /turf/floor/wood/rough/walnut, /area/shaded_hills/farmhouse) +"gJ" = ( +/mob/living/simple_animal/passive/horse/small, +/turf/floor/straw, +/area/shaded_hills/stable) "gL" = ( /obj/structure/reagent_dispensers/barrel/ebony/oil, /turf/floor/path/herringbone/basalt, @@ -232,18 +240,22 @@ "gU" = ( /turf/wall/brick/basalt, /area/shaded_hills/inn/kitchen) +"gW" = ( +/obj/structure/closet/crate/chest/ebony, +/turf/floor/wood/rough/walnut, +/area/shaded_hills/stable) "hb" = ( /obj/structure/wall_sconce/lantern{ dir = 4; start_lit = 1 }, -/obj/structure/bed/chair/rustic_fancy/ebony{ +/obj/structure/chair/rustic_fancy/ebony{ dir = 1 }, /turf/floor/carpet, /area/shaded_hills/inn) "hc" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 1 }, /turf/floor/wood/rough/walnut, @@ -293,7 +305,7 @@ /turf/floor/path/herringbone/basalt, /area/shaded_hills/inn) "ij" = ( -/obj/structure/bed/chair/rustic{ +/obj/structure/chair/rustic{ dir = 4 }, /turf/floor/wood/walnut, @@ -338,7 +350,7 @@ /turf/floor/wood/rough/walnut, /area/shaded_hills/stable) "jk" = ( -/obj/structure/bed/chair/bench/pew/mahogany{ +/obj/structure/chair/bench/pew/mahogany{ dir = 1 }, /obj/abstract/landmark/start/shaded_hills/cleric, @@ -394,7 +406,7 @@ /turf/floor/wood/rough/walnut, /area/shaded_hills/stable) "kI" = ( -/obj/structure/bed/chair/bench/pew/ebony{ +/obj/structure/chair/bench/pew/ebony{ dir = 4 }, /turf/floor/wood/walnut, @@ -421,7 +433,7 @@ /turf/floor/path/herringbone/basalt, /area/shaded_hills/inn) "lL" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 1 }, /obj/abstract/landmark/start/shaded_hills/farmer, @@ -446,6 +458,10 @@ /obj/item/shears, /turf/floor/wood/rough/walnut, /area/shaded_hills/farmhouse) +"mD" = ( +/obj/structure/chair/rustic, +/turf/floor/wood/rough/walnut, +/area/shaded_hills/stable) "mG" = ( /obj/structure/railing/mapped/wooden/walnut{ dir = 4 @@ -472,7 +488,7 @@ /turf/wall/log/walnut, /area/shaded_hills/stable) "nx" = ( -/obj/structure/bed/chair/bench/pew/ebony{ +/obj/structure/chair/bench/pew/ebony{ dir = 8 }, /obj/structure/railing/mapped/wooden/ebony{ @@ -516,7 +532,7 @@ /turf/floor/grass, /area/shaded_hills/outside/downlands) "pd" = ( -/obj/structure/bed/chair/bench/pew/mahogany{ +/obj/structure/chair/bench/pew/mahogany{ dir = 1 }, /turf/floor/wood/mahogany, @@ -677,6 +693,10 @@ /obj/abstract/landmark/organize/horizontal, /turf/floor/path/herringbone/basalt, /area/shaded_hills/inn/kitchen) +"tH" = ( +/obj/structure/reagent_dispensers/barrel/ebony/wine, +/turf/floor/wood/rough/walnut, +/area/shaded_hills/stable) "tS" = ( /obj/structure/railing/mapped/wooden/walnut{ dir = 8 @@ -685,13 +705,13 @@ /turf/floor/grass, /area/shaded_hills/outside/downlands) "tZ" = ( -/obj/structure/bed/chair/rustic{ +/obj/structure/chair/rustic{ dir = 4 }, /turf/floor/wood/rough/walnut, /area/shaded_hills/inn/porch) "uk" = ( -/obj/structure/bed/chair/bench/pew/ebony{ +/obj/structure/chair/bench/pew/ebony{ dir = 8 }, /obj/effect/floor_decal/spline/fancy/wood/walnut{ @@ -771,6 +791,21 @@ /obj/structure/closet/crate/chest/ebony, /turf/floor/path/basalt, /area/shaded_hills/general_store) +"wp" = ( +/obj/structure/wall_sconce/lantern{ + dir = 4 + }, +/obj/structure/chair/rustic{ + dir = 1 + }, +/turf/floor/wood/rough/walnut, +/area/shaded_hills/stable) +"xa" = ( +/obj/item/stack/material/bar/mapped/iron/thirty, +/obj/structure/table/wood/reinforced/ebony, +/obj/item/tongs, +/turf/floor/path/basalt, +/area/shaded_hills/stable) "xh" = ( /obj/structure/table/wood/ebony, /obj/item/chems/condiment/large/salt, @@ -785,6 +820,10 @@ "xH" = ( /turf/wall/brick/basalt, /area/shaded_hills/slaughterhouse) +"xI" = ( +/obj/structure/fire_source/forge, +/turf/floor/path/basalt, +/area/shaded_hills/stable) "xJ" = ( /obj/structure/table/desk/dresser/ebony, /turf/floor/carpet/rustic, @@ -830,7 +869,7 @@ /turf/wall/brick/basalt, /area/shaded_hills/general_store) "yJ" = ( -/obj/structure/bed/chair/rustic{ +/obj/structure/chair/rustic{ dir = 1 }, /obj/abstract/landmark/start/shaded_hills/farmer, @@ -893,6 +932,9 @@ /obj/structure/wall_sconce/lantern, /turf/floor/wood/rough/walnut, /area/shaded_hills/shrine/kitchen) +"At" = ( +/turf/wall/log/walnut/shutter/open, +/area/shaded_hills/stable) "Aw" = ( /obj/structure/railing/mapped/wooden/walnut{ dir = 4 @@ -922,6 +964,10 @@ /obj/item/bag/sack, /turf/floor/wood/rough/walnut, /area/shaded_hills/farmhouse) +"AS" = ( +/mob/living/simple_animal/passive/horse, +/turf/floor/straw, +/area/shaded_hills/stable) "AW" = ( /obj/structure/railing/mapped/wooden/walnut, /obj/structure/flora/bush/brflowers, @@ -949,7 +995,7 @@ /turf/floor/grass, /area/shaded_hills/outside/shrine) "BG" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 1 }, /turf/floor/wood/walnut, @@ -1019,7 +1065,7 @@ /turf/floor/wood/walnut, /area/shaded_hills/general_store) "Er" = ( -/obj/structure/bed/chair/bench/pew/ebony{ +/obj/structure/chair/bench/pew/ebony{ dir = 4 }, /obj/structure/railing/mapped/wooden/ebony{ @@ -1186,6 +1232,10 @@ /obj/item/chems/glass/handmade/jar, /turf/floor/path/herringbone/basalt, /area/shaded_hills/shrine/kitchen) +"HM" = ( +/obj/structure/reagent_dispensers/barrel/ebony/water, +/turf/floor/path/basalt, +/area/shaded_hills/stable) "HP" = ( /obj/structure/table/end/alt, /obj/item/flame/candle/handmade{ @@ -1261,7 +1311,7 @@ /turf/floor/wood/rough/walnut, /area/shaded_hills/shrine) "Jw" = ( -/obj/structure/bed/chair/rustic, +/obj/structure/chair/rustic, /turf/floor/wood/rough/walnut, /area/shaded_hills/inn/porch) "Jz" = ( @@ -1283,6 +1333,12 @@ /obj/structure/wall_sconce/lantern, /turf/floor/path/herringbone/basalt, /area/shaded_hills/shrine) +"JS" = ( +/obj/structure/chair/rustic{ + dir = 1 + }, +/turf/floor/wood/rough/walnut, +/area/shaded_hills/stable) "JU" = ( /obj/structure/railing/mapped/wooden/walnut, /turf/floor/wood/rough/walnut, @@ -1299,7 +1355,7 @@ /turf/wall/log/walnut/shutter/open, /area/shaded_hills/shrine) "KD" = ( -/obj/structure/bed/chair/rustic{ +/obj/structure/chair/rustic{ dir = 1 }, /turf/floor/wood/walnut, @@ -1326,6 +1382,13 @@ }, /turf/floor/path/herringbone/basalt, /area/shaded_hills/inn) +"LA" = ( +/obj/structure/closet/crate/chest/ebony, +/obj/item/stack/material/brick/mapped/graphite/forty, +/obj/item/rock/flint/striker, +/obj/item/bladed/knife/iron, +/turf/floor/path/basalt, +/area/shaded_hills/stable) "LH" = ( /obj/structure/table/wood/ebony, /obj/item/chems/glass/bucket/wood, @@ -1419,6 +1482,10 @@ "Pa" = ( /turf/floor/path/running_bond/basalt, /area/shaded_hills/outside/downlands/poi) +"Pb" = ( +/obj/structure/closet/cabinet/wooden/ebony, +/turf/floor/wood/rough/walnut, +/area/shaded_hills/stable) "Pd" = ( /turf/floor/carpet/rustic, /area/shaded_hills/farmhouse) @@ -1426,7 +1493,7 @@ /obj/structure/wall_sconce/lantern{ dir = 8 }, -/obj/structure/bed/chair/bench/pew/ebony{ +/obj/structure/chair/bench/pew/ebony{ dir = 4 }, /turf/floor/wood/walnut, @@ -1450,6 +1517,10 @@ /obj/structure/reagent_dispensers/barrel/ebony/oil, /turf/floor/wood/rough/walnut, /area/shaded_hills/storehouse) +"Qa" = ( +/obj/structure/reagent_dispensers/barrel/ebony/oil, +/turf/floor/path/basalt, +/area/shaded_hills/stable) "Qb" = ( /turf/floor/carpet, /area/shaded_hills/inn) @@ -1469,7 +1540,7 @@ /turf/wall/log/walnut, /area/shaded_hills/shrine) "QL" = ( -/obj/structure/bed/chair/rustic{ +/obj/structure/chair/rustic{ dir = 1 }, /obj/structure/wall_sconce/lantern{ @@ -1502,6 +1573,11 @@ /obj/abstract/landmark/start/shaded_hills/innkeeper, /turf/floor/wood/walnut, /area/shaded_hills/inn) +"Rk" = ( +/obj/structure/anvil, +/obj/item/tool/hammer/forge/iron, +/turf/floor/path/basalt, +/area/shaded_hills/stable) "Rl" = ( /turf/floor/mud, /area/shaded_hills/outside/downlands) @@ -1545,7 +1621,7 @@ /turf/floor/mud, /area/shaded_hills/outside/shrine) "Sw" = ( -/obj/structure/bed/chair/rustic{ +/obj/structure/chair/rustic{ dir = 8 }, /turf/floor/wood/rough/walnut, @@ -1593,7 +1669,7 @@ /turf/floor/path/herringbone/basalt, /area/shaded_hills/inn/kitchen) "Td" = ( -/obj/structure/bed/chair/rustic{ +/obj/structure/chair/rustic{ dir = 8 }, /turf/floor/wood/walnut, @@ -1647,7 +1723,7 @@ /turf/floor/wood/rough/walnut, /area/shaded_hills/shrine) "US" = ( -/obj/structure/bed/chair/rustic{ +/obj/structure/chair/rustic{ dir = 4 }, /turf/floor/wood/walnut, @@ -1818,6 +1894,10 @@ /obj/machinery/portable_atmospherics/hydroponics/soil, /turf/floor/mud, /area/shaded_hills/outside/shrine) +"ZC" = ( +/obj/structure/table/wood/ebony, +/turf/floor/wood/walnut, +/area/shaded_hills/stable) "ZD" = ( /obj/abstract/landmark/start/shaded_hills/bartender, /turf/floor/path/herringbone/basalt, @@ -13138,7 +13218,7 @@ nn nn nn nn -nn +At nn nn nn @@ -13287,19 +13367,19 @@ TR nn jA HP -js +Pb nn -js -js -js +mD +ZC +JS js nn +LA Ak Ak Ak Ak -Ak -Ak +HM nn TR TR @@ -13448,10 +13528,10 @@ js kE Ak Ak +fM Ak Ak -Ak -Ak +Qa nn aU TR @@ -13590,20 +13670,20 @@ TR TR nn bu -jf +wp js nn js jf -js -js +tH +gW nn Ak Ak +xI Ak Ak -Ak -Ak +xa HE KG EV @@ -13752,7 +13832,7 @@ nn nn Ak Ak -Ak +Rk Ak Ak Ak @@ -14198,19 +14278,19 @@ HI TR nn Wk -PA +Wk Wk nn Wk -PA +Wk Wk nn Wk -PA +Wk Wk nn Wk -PA +Wk Wk nn aU @@ -14350,7 +14430,7 @@ HI TR nn PA -PA +AS PA nn PA @@ -14358,7 +14438,7 @@ PA PA nn PA -PA +gJ PA nn PA diff --git a/maps/shaded_hills/shaded_hills-swamp.dmm b/maps/shaded_hills/shaded_hills-swamp.dmm index bbd09a8b2284..f3d064b8b2ba 100644 --- a/maps/shaded_hills/shaded_hills-swamp.dmm +++ b/maps/shaded_hills/shaded_hills-swamp.dmm @@ -9,7 +9,7 @@ /turf/floor/mud/water, /area/shaded_hills/outside/river/swamp) "cS" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 8 }, /turf/floor/wood/rough/walnut, diff --git a/maps/shaded_hills/shaded_hills-woods.dmm b/maps/shaded_hills/shaded_hills-woods.dmm index 06a9695d6345..854c4bb10df2 100644 --- a/maps/shaded_hills/shaded_hills-woods.dmm +++ b/maps/shaded_hills/shaded_hills-woods.dmm @@ -8,7 +8,7 @@ /turf/floor/path/running_bond/basalt, /area/shaded_hills/outside/woods) "cN" = ( -/obj/item/bladed/knife, +/obj/item/bladed/knife/iron, /turf/floor/wood/rough/walnut, /area/shaded_hills/forester_hut) "dp" = ( diff --git a/maps/shaded_hills/shaded_hills.dm b/maps/shaded_hills/shaded_hills.dm index befdf1440f79..be1120e13cfb 100644 --- a/maps/shaded_hills/shaded_hills.dm +++ b/maps/shaded_hills/shaded_hills.dm @@ -9,6 +9,7 @@ #include "../../mods/content/anima/_anima.dme" // include before _fantasy.dme so skill overrides work #include "../../mods/content/fantasy/_fantasy.dme" #include "../../mods/pyrelight/_pyrelight.dme" // include after _fantasy.dme so overrides work + #include "../../mods/content/blacksmithy/_blacksmithy.dme" #include "areas/_areas.dm" #include "areas/downlands.dm" diff --git a/maps/tradeship/tradeship-0.dmm b/maps/tradeship/tradeship-0.dmm index 1e1c08af1588..ff571e169d9f 100644 --- a/maps/tradeship/tradeship-0.dmm +++ b/maps/tradeship/tradeship-0.dmm @@ -1334,7 +1334,7 @@ /turf/floor/tiled, /area/ship/trade/disused) "rt" = ( -/obj/structure/bed/chair/padded/beige, +/obj/structure/chair/padded/beige, /turf/floor/carpet/red, /area/ship/trade/disused) "rv" = ( @@ -1767,7 +1767,7 @@ /turf/floor/carpet/green, /area/ship/trade/disused) "IG" = ( -/obj/structure/bed/chair/comfy/green{ +/obj/structure/chair/comfy/green{ dir = 1 }, /obj/machinery/power/apc{ @@ -2107,7 +2107,7 @@ /turf/floor/tiled/techfloor/grid, /area/ship/trade/livestock) "Ua" = ( -/obj/structure/bed/chair/wood/walnut, +/obj/structure/chair/wood/walnut, /turf/floor/carpet/red, /area/ship/trade/disused) "Ug" = ( diff --git a/maps/tradeship/tradeship-1.dmm b/maps/tradeship/tradeship-1.dmm index fd28e95fb89d..c5b77f4f34ce 100644 --- a/maps/tradeship/tradeship-1.dmm +++ b/maps/tradeship/tradeship-1.dmm @@ -512,7 +512,7 @@ /obj/structure/closet/crate/plastic, /obj/random/accessory, /obj/random/accessory, -/obj/item/chems/glass/paint/random, +/obj/item/chems/glass/bucket/paint/random, /turf/floor/tiled/monotile, /area/ship/trade/cargo/lower) "bf" = ( diff --git a/maps/tradeship/tradeship-2.dmm b/maps/tradeship/tradeship-2.dmm index d00b923a361d..dae19f721128 100644 --- a/maps/tradeship/tradeship-2.dmm +++ b/maps/tradeship/tradeship-2.dmm @@ -3,7 +3,7 @@ /turf/space, /area/space) "ab" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /obj/effect/floor_decal/corner/beige{ @@ -467,7 +467,7 @@ /turf/floor/carpet/blue, /area/ship/trade/command/captain) "aW" = ( -/obj/structure/bed/chair/comfy/brown, +/obj/structure/chair/comfy/brown, /turf/floor/carpet/blue, /area/ship/trade/command/captain) "aX" = ( @@ -575,7 +575,7 @@ /obj/effect/floor_decal/corner/beige{ dir = 6 }, -/obj/structure/bed/chair/shuttle/black{ +/obj/structure/chair/shuttle/black{ dir = 8 }, /obj/machinery/firealarm{ @@ -593,7 +593,7 @@ /obj/effect/floor_decal/corner/beige{ dir = 6 }, -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 8 }, /turf/floor/tiled/steel_ridged, @@ -1121,7 +1121,7 @@ /turf/floor/tiled/steel_ridged, /area/ship/trade/dock) "cw" = ( -/obj/structure/bed/chair/comfy/teal{ +/obj/structure/chair/comfy/teal{ dir = 1 }, /obj/abstract/landmark/start{ @@ -1265,7 +1265,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/structure/bed/chair/wood, +/obj/structure/chair/wood, /turf/floor/tiled, /area/ship/trade/crew/saloon) "da" = ( @@ -2414,7 +2414,7 @@ /turf/floor/tiled/freezer, /area/ship/trade/crew/wash) "fV" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /obj/abstract/landmark/start{ name = "Head Doctor" }, @@ -3216,7 +3216,7 @@ /turf/floor/tiled/techfloor, /area/ship/trade/maintenance/engineering) "hW" = ( -/obj/structure/bed/chair/comfy/brown, +/obj/structure/chair/comfy/brown, /obj/abstract/landmark/start{ name = "Head Engineer" }, @@ -3690,7 +3690,7 @@ /obj/effect/floor_decal/corner/white{ dir = 6 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled, @@ -3779,7 +3779,7 @@ /turf/floor/reinforced/airmix, /area/ship/trade/maintenance/atmos) "jb" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /obj/machinery/media/jukebox/old, @@ -4670,7 +4670,7 @@ /obj/effect/floor_decal/corner/white{ dir = 6 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled, @@ -5047,7 +5047,7 @@ /turf/wall/r_wall/hull, /area/ship/trade/maintenance/atmos) "rH" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled/dark, @@ -5074,7 +5074,7 @@ /obj/effect/floor_decal/corner/beige{ dir = 9 }, -/obj/structure/bed/chair/shuttle/white{ +/obj/structure/chair/shuttle/white{ dir = 4 }, /turf/floor/tiled/steel_ridged, @@ -6641,7 +6641,7 @@ /turf/floor/tiled/monotile, /area/ship/trade/command/hallway) "Jk" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /obj/abstract/landmark/start{ name = "First Mate" }, @@ -7090,7 +7090,7 @@ /obj/effect/floor_decal/corner/beige{ dir = 9 }, -/obj/structure/bed/chair/shuttle/blue{ +/obj/structure/chair/shuttle/blue{ dir = 4 }, /obj/item/radio/intercom{ @@ -7234,7 +7234,7 @@ dir = 4; id_tag = "tradeship_rescue_shuttle_pump" }, -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /obj/effect/floor_decal/corner/white{ @@ -7995,7 +7995,7 @@ /obj/effect/floor_decal/corner/white{ dir = 6 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled, diff --git a/maps/tradeship/tradeship-3.dmm b/maps/tradeship/tradeship-3.dmm index bc596cfeecd4..3ff3588e2d8f 100644 --- a/maps/tradeship/tradeship-3.dmm +++ b/maps/tradeship/tradeship-3.dmm @@ -47,7 +47,7 @@ /turf/floor/plating, /area/ship/trade/maintenance/solars) "ai" = ( -/obj/structure/bed/chair/wood, +/obj/structure/chair/wood, /turf/floor/reinforced/airless, /area/space) "aj" = ( @@ -1076,7 +1076,7 @@ /turf/wall/r_wall/hull, /area/ship/trade/comms) "Pg" = ( -/obj/item/chems/glass/paint/yellow, +/obj/item/chems/glass/bucket/paint/yellow, /obj/effect/floor_decal/industrial/warning/corner{ dir = 4; icon_state = "warningcorner" diff --git a/maps/tradeship/tradeship.dm b/maps/tradeship/tradeship.dm index e829a3299185..5a866a9c8b8b 100644 --- a/maps/tradeship/tradeship.dm +++ b/maps/tradeship/tradeship.dm @@ -11,6 +11,7 @@ #include "../../mods/content/government/away_sites/icarus/icarus.dm" #include "../../mods/content/corporate/away_sites/lar_maria/lar_maria.dm" + #include "../../mods/content/beekeeping/_beekeeping.dme" #include "../../mods/content/mundane.dm" #include "../../mods/content/scaling_descriptors.dm" diff --git a/maps/tradeship/tradeship_areas.dm b/maps/tradeship/tradeship_areas.dm index 6884791c7495..1d46436626ce 100644 --- a/maps/tradeship/tradeship_areas.dm +++ b/maps/tradeship/tradeship_areas.dm @@ -314,7 +314,7 @@ /area/turbolift/tradeship_enclave name = "Disused Sublevel" - base_turf = /turf/floor + base_turf = /turf/floor/plating /area/turbolift/tradeship_cargo name = "Lower Cargo Bay" diff --git a/mods/content/beekeeping/_beekeeping.dm b/mods/content/beekeeping/_beekeeping.dm new file mode 100644 index 000000000000..cfa1427bbeb1 --- /dev/null +++ b/mods/content/beekeeping/_beekeeping.dm @@ -0,0 +1,2 @@ +/decl/modpack/beekeeping + name = "Beekeeping Content" diff --git a/mods/content/beekeeping/_beekeeping.dme b/mods/content/beekeeping/_beekeeping.dme new file mode 100644 index 000000000000..2d950fe7a392 --- /dev/null +++ b/mods/content/beekeeping/_beekeeping.dme @@ -0,0 +1,12 @@ +#ifndef MODPACK_BEEKEEPING +#define MODPACK_BEEKEEPING +// BEGIN_INCLUDE +#include "_beekeeping.dm" +#include "centrifuge.dm" +#include "closets.dm" +#include "items.dm" +#include "recipes.dm" +#include "trading.dm" +#include "hives\_hive.dm" +// END_INCLUDE +#endif diff --git a/icons/obj/apiary_bees_etc.dmi b/mods/content/beekeeping/apiary_bees_etc.dmi similarity index 100% rename from icons/obj/apiary_bees_etc.dmi rename to mods/content/beekeeping/apiary_bees_etc.dmi diff --git a/mods/content/beekeeping/centrifuge.dm b/mods/content/beekeeping/centrifuge.dm new file mode 100644 index 000000000000..9b04168d744a --- /dev/null +++ b/mods/content/beekeeping/centrifuge.dm @@ -0,0 +1,53 @@ +/obj/machinery/honey_extractor + name = "honey extractor" + desc = "A machine used to extract honey and wax from a beehive frame." + icon = 'icons/obj/virology.dmi' + icon_state = "centrifuge" + anchored = TRUE + density = TRUE + construct_state = /decl/machine_construction/default/panel_closed + uncreated_component_parts = null + stat_immune = 0 + + var/processing = 0 + var/honey = 0 + +/obj/machinery/honey_extractor/components_are_accessible(path) + return !processing && ..() + +/obj/machinery/honey_extractor/cannot_transition_to(state_path, mob/user) + if(processing) + return SPAN_NOTICE("You must wait for \the [src] to finish first!") + return ..() + +/obj/machinery/honey_extractor/attackby(var/obj/item/I, var/mob/user) + if(processing) + to_chat(user, "\The [src] is currently spinning, wait until it's finished.") + return + if((. = component_attackby(I, user))) + return + if(istype(I, /obj/item/honey_frame)) + var/obj/item/honey_frame/H = I + if(!H.honey) + to_chat(user, "\The [H] is empty, put it into a beehive.") + return + user.visible_message("\The [user] loads \the [H] into \the [src] and turns it on.", "You load \the [H] into \the [src] and turn it on.") + processing = H.honey + icon_state = "centrifuge_moving" + qdel(H) + spawn(50) + new /obj/item/honey_frame(loc) + new /obj/item/stack/material/bar/wax(loc, 1) + honey += processing + processing = 0 + icon_state = "centrifuge" + else if(istype(I, /obj/item/chems/glass)) + if(!honey) + to_chat(user, "There is no honey in \the [src].") + return + var/obj/item/chems/glass/G = I + var/transferred = min(G.reagents.maximum_volume - G.reagents.total_volume, honey) + G.add_to_reagents(/decl/material/liquid/nutriment/honey, transferred) + honey -= transferred + user.visible_message("\The [user] collects honey from \the [src] into \the [G].", "You collect [transferred] units of honey from \the [src] into \the [G].") + return 1 diff --git a/mods/content/beekeeping/closets.dm b/mods/content/beekeeping/closets.dm new file mode 100644 index 000000000000..224ff0561eb8 --- /dev/null +++ b/mods/content/beekeeping/closets.dm @@ -0,0 +1,15 @@ +/obj/structure/closet/crate/hydroponics/beekeeping + name = "beekeeping crate" + desc = "All you need to set up your own beehive." + +/obj/structure/closet/crate/hydroponics/beekeeping/Initialize() + . = ..() + new /obj/item/beehive_assembly(src) + new /obj/item/bee_smoker(src) + new /obj/item/honey_frame(src) + new /obj/item/honey_frame(src) + new /obj/item/honey_frame(src) + new /obj/item/honey_frame(src) + new /obj/item/honey_frame(src) + new /obj/item/bee_pack(src) + new /obj/item/crowbar(src) diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/mods/content/beekeeping/hives/_hive.dm similarity index 56% rename from code/modules/hydroponics/beekeeping/beehive.dm rename to mods/content/beekeeping/hives/_hive.dm index e2c2d1bc219d..edea2885862b 100644 --- a/code/modules/hydroponics/beekeeping/beehive.dm +++ b/mods/content/beekeeping/hives/_hive.dm @@ -1,6 +1,6 @@ /obj/machinery/beehive name = "apiary" - icon = 'icons/obj/beekeeping.dmi' + icon = 'mods/content/beekeeping/icons/beekeeping.dmi' icon_state = "beehive-0" desc = "A wooden box designed specifically to house our buzzling buddies. Far more efficient than traditional hives. Just insert a frame and a queen, close it up, and you're good to go!" density = TRUE @@ -40,10 +40,10 @@ if(81 to 100) overlays += "bees5" -/obj/machinery/beehive/examine(mob/user) +/obj/machinery/beehive/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(!closed) - to_chat(user, "The lid is open.") + . += "The lid is open." /obj/machinery/beehive/attackby(var/obj/item/I, var/mob/user) if(IS_CROWBAR(I)) @@ -162,142 +162,7 @@ for(var/obj/machinery/portable_atmospherics/hydroponics/H in view(7, src)) if(H.seed && !H.dead) H.plant_health += 0.05 * coef - ++trays + if(H.pollen >= 1) + H.pollen-- + trays++ honeycombs = min(honeycombs + 0.1 * coef * min(trays, 5), frames * 100) - -/obj/machinery/honey_extractor - name = "honey extractor" - desc = "A machine used to extract honey and wax from a beehive frame." - icon = 'icons/obj/virology.dmi' - icon_state = "centrifuge" - anchored = TRUE - density = TRUE - construct_state = /decl/machine_construction/default/panel_closed - uncreated_component_parts = null - stat_immune = 0 - - var/processing = 0 - var/honey = 0 - -/obj/machinery/honey_extractor/components_are_accessible(path) - return !processing && ..() - -/obj/machinery/honey_extractor/cannot_transition_to(state_path, mob/user) - if(processing) - return SPAN_NOTICE("You must wait for \the [src] to finish first!") - return ..() - -/obj/machinery/honey_extractor/attackby(var/obj/item/I, var/mob/user) - if(processing) - to_chat(user, "\The [src] is currently spinning, wait until it's finished.") - return TRUE - if(istype(I, /obj/item/honey_frame)) - var/obj/item/honey_frame/H = I - if(!H.honey) - to_chat(user, "\The [H] is empty, put it into a beehive.") - return TRUE - user.visible_message("\The [user] loads \the [H] into \the [src] and turns it on.", "You load \the [H] into \the [src] and turn it on.") - processing = H.honey - icon_state = "centrifuge_moving" - qdel(H) - spawn(50) - new /obj/item/honey_frame(loc) - new /obj/item/stack/material/bar/wax(loc, 1) - honey += processing - processing = 0 - icon_state = "centrifuge" - return TRUE - else if(istype(I, /obj/item/chems/glass)) - if(!honey) - to_chat(user, "There is no honey in \the [src].") - return TRUE - var/obj/item/chems/glass/G = I - var/transferred = min(G.reagents.maximum_volume - G.reagents.total_volume, honey) - G.add_to_reagents(/decl/material/liquid/nutriment/honey, transferred) - honey -= transferred - user.visible_message("\The [user] collects honey from \the [src] into \the [G].", "You collect [transferred] units of honey from \the [src] into \the [G].") - return TRUE - return ..() // smack it, interact with components, etc. - -/obj/item/bee_smoker - name = "bee smoker" - desc = "A device used to calm down bees before harvesting honey." - icon = 'icons/obj/items/weapon/batterer.dmi' - icon_state = ICON_STATE_WORLD - w_class = ITEM_SIZE_SMALL - material = /decl/material/solid/metal/steel - -/obj/item/honey_frame - name = "beehive frame" - desc = "A frame for the beehive that the bees will fill with honeycombs." - icon = 'icons/obj/beekeeping.dmi' - icon_state = "honeyframe" - w_class = ITEM_SIZE_SMALL - material = /decl/material/solid/organic/wood/oak - var/honey = 0 - -/obj/item/honey_frame/filled - name = "filled beehive frame" - desc = "A frame for the beehive that the bees have filled with honeycombs." - honey = 20 - material = /decl/material/solid/organic/wood/oak - -/obj/item/honey_frame/filled/Initialize() - . = ..() - overlays += "honeycomb" - -/obj/item/beehive_assembly - name = "beehive assembly" - desc = "Contains everything you need to build a beehive." - icon = 'icons/obj/apiary_bees_etc.dmi' - icon_state = "apiary" - material = /decl/material/solid/organic/wood/oak - -/obj/item/beehive_assembly/attack_self(var/mob/user) - to_chat(user, "You start assembling \the [src]...") - if(do_after(user, 30, src)) - user.visible_message("\The [user] constructs a beehive.", "You construct a beehive.") - new /obj/machinery/beehive(get_turf(user)) - qdel(src) - -/obj/item/bee_pack - name = "bee pack" - desc = "Contains a queen bee and some worker bees. Everything you'll need to start a hive!" - icon = 'icons/obj/beekeeping.dmi' - icon_state = "beepack" - material = /decl/material/solid/organic/plastic - var/full = 1 - -/obj/item/bee_pack/Initialize() - . = ..() - overlays += "beepack-full" - -/obj/item/bee_pack/proc/empty() - full = 0 - name = "empty bee pack" - desc = "A stasis pack for moving bees. It's empty." - overlays.Cut() - overlays += "beepack-empty" - -/obj/item/bee_pack/proc/fill() - full = initial(full) - SetName(initial(name)) - desc = initial(desc) - overlays.Cut() - overlays += "beepack-full" - -/obj/structure/closet/crate/hydroponics/beekeeping - name = "beekeeping crate" - desc = "All you need to set up your own beehive." - -/obj/structure/closet/crate/hydroponics/beekeeping/Initialize() - . = ..() - new /obj/item/beehive_assembly(src) - new /obj/item/bee_smoker(src) - new /obj/item/honey_frame(src) - new /obj/item/honey_frame(src) - new /obj/item/honey_frame(src) - new /obj/item/honey_frame(src) - new /obj/item/honey_frame(src) - new /obj/item/bee_pack(src) - new /obj/item/crowbar(src) diff --git a/icons/obj/beekeeping.dmi b/mods/content/beekeeping/icons/beekeeping.dmi similarity index 100% rename from icons/obj/beekeeping.dmi rename to mods/content/beekeeping/icons/beekeeping.dmi diff --git a/mods/content/beekeeping/icons/smoker.dmi b/mods/content/beekeeping/icons/smoker.dmi new file mode 100644 index 000000000000..5109ca468e5e Binary files /dev/null and b/mods/content/beekeeping/icons/smoker.dmi differ diff --git a/mods/content/beekeeping/items.dm b/mods/content/beekeeping/items.dm new file mode 100644 index 000000000000..69a888b28830 --- /dev/null +++ b/mods/content/beekeeping/items.dm @@ -0,0 +1,75 @@ +/obj/item/beehive_assembly + name = "beehive assembly" + desc = "Contains everything you need to build a beehive." + icon = 'mods/content/beekeeping/apiary_bees_etc.dmi' + icon_state = "apiary" + material = /decl/material/solid/organic/wood + +/obj/item/beehive_assembly/attack_self(var/mob/user) + to_chat(user, "You start assembling \the [src]...") + if(do_after(user, 30, src)) + user.visible_message("\The [user] constructs a beehive.", "You construct a beehive.") + new /obj/machinery/beehive(get_turf(user)) + qdel(src) + +/obj/item/stock_parts/circuitboard/honey + name = "circuitboard (honey extractor)" + build_path = /obj/machinery/honey_extractor + board_type = "machine" + origin_tech = @'{"biotech":2,"engineering":1}' + req_components = list( + /obj/item/stock_parts/manipulator = 2, + /obj/item/stock_parts/matter_bin = 2) + +/obj/item/bee_smoker + name = "bee smoker" + desc = "A device used to calm down bees before harvesting honey." + icon = 'mods/content/beekeeping/icons/smoker.dmi' + icon_state = ICON_STATE_WORLD + w_class = ITEM_SIZE_SMALL + material = /decl/material/solid/metal/steel + +/obj/item/honey_frame + name = "beehive frame" + desc = "A frame for the beehive that the bees will fill with honeycombs." + icon = 'mods/content/beekeeping/icons/beekeeping.dmi' + icon_state = "honeyframe" + w_class = ITEM_SIZE_SMALL + material = /decl/material/solid/organic/wood + var/honey = 0 + +/obj/item/honey_frame/filled + name = "filled beehive frame" + desc = "A frame for the beehive that the bees have filled with honeycombs." + honey = 20 + material = /decl/material/solid/organic/wood + +/obj/item/honey_frame/filled/Initialize() + . = ..() + overlays += "honeycomb" + +/obj/item/bee_pack + name = "bee pack" + desc = "Contains a queen bee and some worker bees. Everything you'll need to start a hive!" + icon = 'mods/content/beekeeping/icons/beekeeping.dmi' + icon_state = "beepack" + material = /decl/material/solid/organic/plastic + var/full = 1 + +/obj/item/bee_pack/Initialize() + . = ..() + overlays += "beepack-full" + +/obj/item/bee_pack/proc/empty() + full = 0 + name = "empty bee pack" + desc = "A stasis pack for moving bees. It's empty." + overlays.Cut() + overlays += "beepack-empty" + +/obj/item/bee_pack/proc/fill() + full = initial(full) + SetName(initial(name)) + desc = initial(desc) + overlays.Cut() + overlays += "beepack-full" diff --git a/mods/content/beekeeping/recipes.dm b/mods/content/beekeeping/recipes.dm new file mode 100644 index 000000000000..03089d932ab9 --- /dev/null +++ b/mods/content/beekeeping/recipes.dm @@ -0,0 +1,10 @@ + +/decl/stack_recipe/planks/beehive_assembly + result_type = /obj/item/beehive_assembly + category = "furniture" + +/decl/stack_recipe/planks/beehive_frame + result_type = /obj/item/honey_frame + +/datum/fabricator_recipe/imprinter/circuit/honey_extractor + path = /obj/item/stock_parts/circuitboard/honey diff --git a/mods/content/beekeeping/trading.dm b/mods/content/beekeeping/trading.dm new file mode 100644 index 000000000000..1a119ddc99be --- /dev/null +++ b/mods/content/beekeeping/trading.dm @@ -0,0 +1,15 @@ +/datum/trader/trading_beacon/manufacturing/New() + LAZYSET(possible_trading_items, /obj/item/bee_pack, TRADER_THIS_TYPE) + LAZYSET(possible_trading_items, /obj/item/bee_smoker, TRADER_THIS_TYPE) + LAZYSET(possible_trading_items, /obj/item/beehive_assembly, TRADER_THIS_TYPE) + LAZYSET(possible_trading_items, /obj/item/honey_frame, TRADER_THIS_TYPE) + ..() + +/decl/hierarchy/supply_pack/hydroponics/bee_keeper + name = "Equipment - Beekeeping" + contains = list(/obj/item/beehive_assembly, + /obj/item/bee_smoker, + /obj/item/honey_frame = 5, + /obj/item/bee_pack) + containername = "beekeeping crate" + access = access_hydroponics diff --git a/mods/content/bigpharma/chems.dm b/mods/content/bigpharma/chems.dm index 5aa5a0963695..a1cf00ae7118 100644 --- a/mods/content/bigpharma/chems.dm +++ b/mods/content/bigpharma/chems.dm @@ -12,7 +12,7 @@ . = ..() handle_med_obfuscation(src) -/obj/item/chems/examine(mob/user, distance, infix, suffix) +/obj/item/chems/examined_by(mob/user, distance, infix, suffix) . = ..() var/datum/extension/obfuscated_medication/meds = get_extension(src, /datum/extension/obfuscated_medication) if(meds && user && (user.skill_check(SKILL_CHEMISTRY, meds.skill_threshold) || user.skill_check(SKILL_MEDICAL, meds.skill_threshold))) diff --git a/mods/content/bigpharma/pill_bottle.dm b/mods/content/bigpharma/pill_bottle.dm index 24d2a2db6153..b0a70757af6d 100644 --- a/mods/content/bigpharma/pill_bottle.dm +++ b/mods/content/bigpharma/pill_bottle.dm @@ -12,7 +12,7 @@ . = ..() handle_med_obfuscation(src) -/obj/item/pill_bottle/examine(mob/user) +/obj/item/pill_bottle/examined_by(mob/user, distance, infix, suffix) . = ..() var/datum/extension/obfuscated_medication/meds = get_extension(src, /datum/extension/obfuscated_medication) if(meds && user && (user.skill_check(SKILL_CHEMISTRY, meds.skill_threshold) || user.skill_check(SKILL_MEDICAL, meds.skill_threshold))) diff --git a/mods/content/blacksmithy/_blacksmithy.dm b/mods/content/blacksmithy/_blacksmithy.dm new file mode 100644 index 000000000000..978dbebe0d6e --- /dev/null +++ b/mods/content/blacksmithy/_blacksmithy.dm @@ -0,0 +1,3 @@ +/decl/modpack/blacksmithy + name = "Blacksmithy" + diff --git a/mods/content/blacksmithy/_blacksmithy.dme b/mods/content/blacksmithy/_blacksmithy.dme new file mode 100644 index 000000000000..3421d65d10fe --- /dev/null +++ b/mods/content/blacksmithy/_blacksmithy.dme @@ -0,0 +1,19 @@ +#ifndef MODPACK_BLACKSMITHY +#define MODPACK_BLACKSMITHY +// BEGIN_INCLUDE +#include "_blacksmithy.dm" +#include "anvil.dm" +#include "billet.dm" +#include "boulder.dm" +#include "forge_fire.dm" +#include "forging_step.dm" +#include "forging_step_armor.dm" +#include "forging_step_billets.dm" +#include "forging_step_blades.dm" +#include "forging_step_components.dm" +#include "forging_step_ornate.dm" +#include "forging_step_tools.dm" +#include "forging_types.dm" +#include "tongs.dm" +// END_INCLUDE +#endif diff --git a/mods/content/blacksmithy/anvil.dm b/mods/content/blacksmithy/anvil.dm new file mode 100644 index 000000000000..0968a7806ce5 --- /dev/null +++ b/mods/content/blacksmithy/anvil.dm @@ -0,0 +1,134 @@ +// Cut up from https://freesound.org/people/MrAuralization/sounds/274846/ (Avil, MrAuralization) (CC-BY-4) +/datum/composite_sound/anvil_strike + mid_sounds = list( + 'sound/effects/anvil1.ogg', + 'sound/effects/anvil2.ogg', + 'sound/effects/anvil3.ogg', + 'sound/effects/anvil4.ogg', + 'sound/effects/anvil5.ogg', + ) + mid_length = 1.5 SECONDS + var/mob/user + +/datum/composite_sound/anvil_strike/Destroy() + user = null + return ..() + +// This is a bit evil, but it should be cleaner than trying to run a second timing loop for the hammer strikes. +/datum/composite_sound/anvil_strike/play(soundfile) + . = ..() + for(var/obj/structure/anvil/anvil in output_atoms) + if(user) + user.do_attack_animation(anvil, user.get_active_held_item()) + anvil.shake_animation() + for(var/obj/item/thing in anvil.loc?.get_contained_external_atoms()) + thing.shake_animation() + spark_at(get_turf(anvil), amount = 1, spark_type = /datum/effect/effect/system/spark_spread/silent) + +/obj/structure/anvil + name = "anvil" + desc = "A heavy block of material used as support for hammering things into shape." + icon = 'mods/content/blacksmithy/icons/anvil.dmi' + icon_state = ICON_STATE_WORLD + anchored = TRUE + density = TRUE + opacity = FALSE + atom_flags = ATOM_FLAG_CLIMBABLE + w_class = ITEM_SIZE_STRUCTURE //_LARGE + material = /decl/material/solid/metal/iron + max_health = 1000 + structure_flags = STRUCTURE_FLAG_SURFACE + material_alteration = MAT_FLAG_ALTERATION_ALL + hitsound = 'sound/effects/anvil1.ogg' + var/datum/composite_sound/anvil_strike/clang + +/obj/structure/anvil/Initialize() + . = ..() + clang = new(list(src), FALSE) + +/obj/structure/anvil/Destroy() + QDEL_NULL(clang) + return ..() + +/obj/structure/anvil/proc/start_working(mob/user) + if(clang) + clang.user = user + if(!clang.started) + clang.start() + +/obj/structure/anvil/proc/stop_working() + if(clang) + clang.user = null + if(clang.started) + clang.stop() + +/obj/structure/anvil/on_update_icon() + . = ..() + icon_state = initial(icon_state) + switch(get_health_percent()) + if(0 to 0.35) + icon_state = "[icon_state]-damage-heavy" + if(0.35 to 0.65) + icon_state = "[icon_state]-damage-light" + +/obj/structure/anvil/attackby(obj/item/used_item, mob/user, click_params) + + // Put the bar from tongs onto the anvil. + if(istype(used_item, /obj/item/tongs)) + var/obj/item/tongs/tongs = used_item + if(tongs.holding_bar) + used_item = tongs.holding_bar + tongs.holding_bar.dropInto(loc) + // Flow through into procs below. + + // Put the bar onto the anvil (need to do this to avoid repairs in ..()) + if(istype(used_item, /obj/item/stack/material/bar)) + var/obj/item/stack/material/bar/bar = used_item + if(used_item.material != material || current_health >= get_max_health()) + if(bar.get_amount() > 1) + bar = bar.split(1) + if(bar.loc == user) + if(!user.try_unequip(bar, get_turf(src))) + return TRUE + else + bar.dropInto(get_turf(src)) + qdel(bar) + used_item = new /obj/item/billet(loc, used_item.material?.type) + // Flow through to billet placement below. + + // Place things onto the anvil. + if(!user.check_intent(I_FLAG_HARM) && (istype(used_item, /obj/item/tool/hammer/forge) || istype(used_item, /obj/item/tongs) || istype(used_item, /obj/item/billet))) + if(used_item.loc == user) + if(!user.try_unequip(used_item, get_turf(src))) + return TRUE + else + used_item.dropInto(get_turf(src)) + auto_align(used_item, click_params) + return TRUE + + . = ..() + +// Chipped out of a boulder with a pick. +/obj/structure/anvil/boulder + name_prefix = "crude" + icon = 'mods/content/blacksmithy/icons/anvil_crude.dmi' + desc = "A crude anvil chipped out of a chunk of stone. It probably won't last very long." + material = /decl/material/solid/stone/granite + max_health = 500 + +/obj/structure/anvil/boulder/Initialize(ml, _mat, _reinf_mat) + . = ..() + if(prob(50)) + set_icon('mods/content/blacksmithy/icons/anvil_crude_alt.dmi') + +// Improvised with spaceman materials. +/obj/structure/anvil/improvised + name_prefix = "improvised" + icon = 'mods/content/blacksmithy/icons/anvil_improvised.dmi' + desc = "A anvil roughly improvised out of scrap metal. It probably won't last very long." + material = /decl/material/solid/metal/steel + max_health = 500 + +/decl/stack_recipe/steel/furniture + result_type = /obj/structure/anvil/improvised + difficulty = MAT_VALUE_HARD_DIY diff --git a/mods/content/blacksmithy/billet.dm b/mods/content/blacksmithy/billet.dm new file mode 100644 index 000000000000..da40b1fcd00d --- /dev/null +++ b/mods/content/blacksmithy/billet.dm @@ -0,0 +1,208 @@ +// Turning billets back into bars. +/obj/item/stack/material/bar/attackby(obj/item/used_item, mob/user) + if(istype(used_item, /obj/item/billet) && used_item.material == material && !reinf_material) + var/obj/item/billet/billet = used_item + if(billet.current_forging_step && billet.current_forging_step.type != /decl/forging_step/billet) + to_chat(user, SPAN_WARNING("\The [used_item] will need to be melted down and recast before you can reuse it as a bar.")) + return TRUE + if(!user.try_unequip(used_item, loc)) + return TRUE + if(get_amount() >= get_max_amount()) + return TRUE + add(1) + qdel(used_item) + return TRUE + . = ..() + +/obj/item/proc/hot_enough_to_forge(melting_point_percent = 0.25) + if(!istype(material) || isnull(material.melting_point) || !material.forgable) + return FALSE + // Defaults to >25% of the way to melting to be considered 'forgable' + return temperature >= ((material.melting_point - T20C) * melting_point_percent) + T20C + +/obj/item/billet + name = "billet" + desc = "An unworked or partially-worked length of metal used to forge items and tools." + icon = 'mods/content/blacksmithy/icons/billet.dmi' + icon_state = ICON_STATE_WORLD + material = /decl/material/solid/metal/iron + material_alteration = MAT_FLAG_ALTERATION_ALL + var/decl/forging_step/current_forging_step = /decl/forging_step/billet + +/obj/item/billet/Initialize(ml, material_key) + if(ispath(current_forging_step)) + set_forging_step(current_forging_step, force = TRUE) + . = ..() + +/obj/item/billet/proc/set_forging_step(decl/forging_step/new_step, force) + if(ispath(new_step)) + new_step = GET_DECL(new_step) + if(!istype(new_step) || (!force && current_forging_step == new_step)) + return FALSE + current_forging_step = new_step + . = current_forging_step.apply_to(src) + if(!QDELETED(src)) + update_name() + update_icon() + update_heat_glow(anim_time = 0) // reset heat color to avoid weird visual jitter + +/obj/item/billet/attackby(obj/item/used_item, mob/user) + + // Merging billets back into bars. + if(istype(used_item, /obj/item/billet) && material == used_item.material) + if(current_forging_step && current_forging_step.type != /decl/forging_step/billet) + to_chat(user, SPAN_WARNING("\The [src] will need to be melted down and recast before you can reuse it as a bar.")) + return TRUE + var/obj/item/billet/billet = used_item + if(billet.current_forging_step && billet.current_forging_step.type != /decl/forging_step/billet) + to_chat(user, SPAN_WARNING("\The [billet] will need to be melted down and recast before you can reuse it as a bar.")) + return TRUE + if(user.try_unequip(used_item, loc)) + var/obj/item/stack/material/bar/bars = new(loc, 2, material.type) + bars.dropInto(loc) + qdel(used_item) + qdel(src) + return TRUE + + // Picking up in tongs. + if(istype(used_item, /obj/item/tongs)) + var/obj/item/tongs/tongs = used_item + if(tongs.holding_bar) + return ..() + var/mob/holder = loc + if(istype(holder)) + if(!holder.try_unequip(src, tongs)) + return TRUE + else if(loc?.storage) + if(!loc.storage.remove_from_storage(user, src, tongs)) + return TRUE + else + forceMove(tongs) + if(loc == tongs) + tongs.holding_bar = src + tongs.update_icon() + return TRUE + + if(!istype(used_item, /obj/item/tool/hammer/forge) || user.check_intent(I_FLAG_HARM)) + return ..() + + // Check for surface. + var/obj/structure/anvil/anvil = locate() in loc + if(!istype(anvil)) + to_chat(user, SPAN_WARNING("\The [src] can only be worked on an anvil.")) + return TRUE + + // Check for heat. + if(!hot_enough_to_forge()) + to_chat(user, SPAN_WARNING("\The [src] is too cold to be worked on the anvil.")) + return TRUE + + // Sanity check. + if(!length(current_forging_step?.steps)) // how tho + to_chat(user, SPAN_WARNING("You cannot see any further way to refine \the [src].")) + return TRUE + + // Handle the actual forging process. + var/last_step = current_forging_step + var/decl/forging_step/next_step = show_radial_menu(user, src, current_forging_step.get_radial_choices(), radius = 42, use_labels = RADIAL_LABELS_CENTERED, require_near = TRUE, check_locs = list(src)) + + if(!standard_forging_checks(user, used_item, last_step, next_step, anvil)) + return TRUE + + if(user.get_stamina() < 10) + to_chat(user, SPAN_WARNING("You are too exhausted to swing \the [used_item].")) + return TRUE + + user.adjust_stamina(-10) + anvil.start_working(user) + + // Skill checks! + if(!user.do_skilled(3 SECONDS, next_step.work_skill, anvil)) + anvil?.stop_working() + return TRUE + + if(!istype(next_step) || (next_step.skill_fail_prob && user.skill_fail_prob(next_step.work_skill, next_step.skill_fail_prob, next_step.skill_level, next_step.skill_factor))) + to_chat(user, SPAN_WARNING("You fumble the work and fail to reshape \the [src].")) + anvil?.stop_working() + return TRUE + + // Since we have a sleep() above, we recheck our basic conditions. + if(!standard_forging_checks(user, used_item, last_step, next_step, anvil)) + anvil?.stop_working() + return TRUE + + if(user.get_stamina() < 10) + to_chat(user, SPAN_WARNING("You are too exhausted to keep swinging \the [used_item].")) + anvil?.stop_working() + return TRUE + + user.adjust_stamina(-10) + + // Update the billet (which may produce an item!) + var/obj/item/forged_thing = set_forging_step(next_step) + if(istype(forged_thing)) + user.visible_message(SPAN_NOTICE("\The [user] has [next_step.work_verb] the billet into \a [forged_thing].")) + // Forging gradually degrades anvils. + if(!QDELETED(anvil)) + anvil.stop_working() + anvil.take_damage(rand(10, 20), BRUTE, silent = TRUE) // We are already going CLANG CLANG CLANG, don't need a THUNK + return TRUE + +/obj/item/billet/get_examine_hints(mob/user, distance, infix, suffix) + . = ..() + for(var/decl/forging_step/next_step in current_forging_step?.steps) + if(user.skill_check(next_step.work_skill, next_step.skill_level)) + LAZYADD(., SPAN_INFO("It can be [next_step.work_verb] into \a [next_step.get_product_name(material)] on an anvil.")) + +/obj/item/billet/proc/standard_forging_checks(mob/user, obj/item/used_item, decl/forging_step/last_step, decl/forging_step/next_step, obj/structure/anvil/anvil) + // We cancelled or changed state, abort. + if(!next_step || current_forging_step != last_step || !(next_step in current_forging_step.steps)) + return FALSE + // Something has been destroyed since we started forging. + if(QDELETED(src) || QDELETED(used_item) || QDELETED(anvil) || QDELETED(user)) + return FALSE + // Something else has changed, very unfortunate. + if(loc != anvil.loc || !CanPhysicallyInteract(user) || user.get_active_held_item() != used_item) + return FALSE + return hot_enough_to_forge() + +/obj/item/billet/on_update_icon() + . = ..() + if(!istype(current_forging_step)) + return + if(current_forging_step.billet_icon) + set_icon(current_forging_step.billet_icon) + else + set_icon(initial(icon)) + icon_state = get_world_inventory_state() + if(current_forging_step.billet_icon_state) + icon_state = "[icon_state]-[current_forging_step.billet_icon_state]" + +/obj/item/billet/get_world_inventory_state() + if(!current_forging_step?.billet_icon_state) + return ..() + if(!check_state_in_icon("[ICON_STATE_INV]-[current_forging_step.billet_icon_state]", icon)) + return ICON_STATE_WORLD + return ..() + +/obj/item/billet/update_name() + if(!istype(current_forging_step)) + base_name = initial(base_name) + name_prefix = initial(name_prefix) + desc = initial(desc) + return ..() + base_name = current_forging_step.billet_name + name_prefix = current_forging_step.billet_name_prefix + . = ..() + desc = current_forging_step.billet_desc + if(istype(material)) + desc = "[desc] This one is made of [material.solid_name]." + +/obj/item/billet/ProcessAtomTemperature() + . = ..() + update_heat_glow() + +// Arbitrary value to give people enough time to forge the bloody thing. +/obj/item/billet/get_thermal_mass_coefficient(delta) + // Only delay cooling if we're over our forging point. + return delta < 0 && hot_enough_to_forge() ? 0.01 : ..() diff --git a/mods/content/blacksmithy/boulder.dm b/mods/content/blacksmithy/boulder.dm new file mode 100644 index 000000000000..73ce542cf98a --- /dev/null +++ b/mods/content/blacksmithy/boulder.dm @@ -0,0 +1,23 @@ +/obj/structure/boulder/get_alt_interactions(mob/user) + . = ..() + LAZYADD(., /decl/interaction_handler/chip_anvil) + +/decl/interaction_handler/chip_anvil + name = "Chip Into Anvil" + expected_target_type = /obj/structure/boulder + var/work_skill = SKILL_CONSTRUCTION + +/decl/interaction_handler/chip_anvil/is_possible(atom/target, mob/user, obj/item/prop) + . = ..() && istype(prop) && IS_PICK(prop) && prop.material?.hardness >= target.get_material()?.hardness && user.skill_check(work_skill, SKILL_BASIC) + +/decl/interaction_handler/chip_anvil/invoked(atom/target, mob/user, obj/item/prop) + user.visible_message(SPAN_NOTICE("\The [user] begins chipping \the [target] into a rough anvil using \the [prop].")) + if(!user.do_skilled(10 SECONDS, work_skill, target)) + return FALSE + if(QDELETED(user) || QDELETED(target) || QDELETED(prop) || user.get_active_held_item() != prop || !CanPhysicallyInteractWith(user, target)) + return FALSE + if(!is_possible(target, user, prop)) + return FALSE + user.visible_message(SPAN_NOTICE("\The [user] chips \the [target] into a rough anvil using \the [prop].")) + new /obj/structure/anvil/boulder(get_turf(target), target.get_material()?.type) + return TRUE diff --git a/mods/content/blacksmithy/forge_fire.dm b/mods/content/blacksmithy/forge_fire.dm new file mode 100644 index 000000000000..437c9cd1c1c8 --- /dev/null +++ b/mods/content/blacksmithy/forge_fire.dm @@ -0,0 +1,82 @@ +/datum/storage/forge + can_hold = list( + /obj/item/stack/material/bar, + /obj/item/billet + ) + max_storage_space = ITEM_SIZE_NORMAL * 10 // Fairly spacious + max_w_class = ITEM_SIZE_LARGE + +/datum/storage/forge/consolidate_stacks() + return // We want to keep them as single bars. + +/obj/structure/fire_source/forge + name = "forge fire" + desc = "A sturdy hearth used to heat metal bars for forging on an anvil." + density = TRUE + icon = 'mods/content/blacksmithy/icons/forge.dmi' + icon_state = "forge" + storage = /datum/storage/forge + +/obj/structure/fire_source/forge/proc/get_forgable_contents() + . = list() + for(var/obj/item/thing in get_stored_inventory()) + if(thing.material?.forgable && (istype(thing, /obj/item/billet) || istype(thing, /obj/item/stack/material/bar))) + . += thing + +/obj/structure/fire_source/forge/attackby(obj/item/used_item, mob/user) + + // Raw materials. + if(istype(used_item, /obj/item/stack/material/bar)) + var/obj/item/stack/material/bar/bar = used_item + if(used_item.material != material || current_health >= get_max_health()) + if(bar.get_amount() > 1) + bar = bar.split(1) + if(bar.loc == user) + if(!user.try_unequip(bar, get_turf(src))) + return TRUE + else + bar.dropInto(get_turf(src)) + qdel(bar) + used_item = new /obj/item/billet(loc, used_item.material?.type) + // Flows through to below. + + // Partially worked billets. + if(istype(used_item, /obj/item/billet)) + if(used_item.loc == user) + user.try_unequip(used_item, loc) + else + used_item.dropInto(loc) + if(storage.can_be_inserted(used_item, user)) + storage.handle_item_insertion(user, used_item) + update_icon() + return TRUE + + // Tongs holding bars or partially worked billets. + if(istype(used_item, /obj/item/tongs) && !user.check_intent(I_FLAG_HARM)) + + // Put whatever's in the tongs into storage. + var/obj/item/tongs/tongs = used_item + if(tongs.holding_bar) + return attackby(tongs.holding_bar, user) + + // Check if we have any bars. + var/list/bars = get_forgable_contents() + if(!length(bars)) + to_chat(user, SPAN_WARNING("There are no bars in \the [src] to retrieve.")) + return TRUE + + // Get the hottest bar. + var/obj/item/hottest_bar + for(var/obj/item/bar in bars) + if(!hottest_bar || bar.temperature > hottest_bar) + hottest_bar = bar + + // Extract a single bar from the forge with the tongs. + if(storage.remove_from_storage(user, hottest_bar, tongs)) + tongs.holding_bar = hottest_bar + if(tongs.holding_bar) + user.visible_message(SPAN_NOTICE("\The [user] pulls \the [tongs.holding_bar] from \the [src] with \the [tongs].")) + tongs.update_icon() + return TRUE + + return ..() diff --git a/mods/content/blacksmithy/forging_step.dm b/mods/content/blacksmithy/forging_step.dm new file mode 100644 index 000000000000..44eaa8824a74 --- /dev/null +++ b/mods/content/blacksmithy/forging_step.dm @@ -0,0 +1,100 @@ +/decl/forging_step + abstract_type = /decl/forging_step + /// Base name, generated from billet_name and billet_name_prefix. + var/name + /// Name to use for the actual billet item. + var/billet_name = "billet" + /// Name prefix to use for the billet at this stage. + var/billet_name_prefix + /// Description to use for the billet at this stage. + var/billet_desc + /// Icon state modifier to use for the billet at this stage. + var/billet_icon_state + /// Icon to use for the billet (for modpacks/downstreams) + var/billet_icon = 'mods/content/blacksmithy/icons/billet.dmi' + /// List of available /decl/forging_step instances. + var/list/steps + /// Probability of failing this step if we're below skill_level. + var/skill_fail_prob = 30 + /// Impact of skill against probability of failure. + var/skill_factor = 1 + /// Skill level where failing this step becomes impossible. + var/skill_level = SKILL_ADEPT + /// What skill this step requires. + var/work_skill = SKILL_CONSTRUCTION + /// Descriptive string for this action. + var/work_verb = "forged" + +/decl/forging_step/Initialize() + + // Resolve our types now to get it out of the way. + for(var/step in steps) + steps -= step + steps += GET_DECL(step) + + if(billet_name_prefix) + name = jointext(list(billet_name_prefix, billet_name), " ") + else + name = billet_name + + . = ..() + +/decl/forging_step/validate() + . = ..() + if(!istext(name)) + . += "null or invalid name" + if(!istext(billet_desc)) + . += "null or invalid billet_desc" + if(!length(steps) && !istype(src, /decl/forging_step/product)) + . += "null or empty steps list" + if(billet_icon_state) + if(billet_icon) + if(!check_state_in_icon("[ICON_STATE_WORLD]-[billet_icon_state]", billet_icon)) + . += "missing billet icon state '[ICON_STATE_WORLD]-[billet_icon_state]' from icon '[billet_icon]'" + else + . += "missing billet_icon" + +/decl/forging_step/proc/get_product_name(decl/material/billet_material) + . = billet_name + if(billet_material) + . = "[billet_material.adjective_name] [.]" + if(billet_name_prefix) + . = "[billet_name_prefix] [.]" + +/decl/forging_step/proc/get_radial_choices() + for(var/decl/forging_step/step in steps) + var/image/radial_button = new + radial_button.name = capitalize(step.name) + LAZYSET(., step, radial_button) + +/decl/forging_step/proc/apply_to(obj/item/billet/billet) + return billet + +// There are effectively finished products. +/decl/forging_step/product + // Dummy strings to avoid validate() fails; shouldn't be used anywhere. + name = "finished product" + billet_desc = "A finished product." + abstract_type = /decl/forging_step/product + var/product_type = /obj/item/stick + +/decl/forging_step/product/get_product_name(decl/material/billet_material) + return atom_info_repository.get_name_for(product_type, billet_material?.type) + +/decl/forging_step/product/apply_to(obj/item/billet/billet) + var/obj/item/thing = new product_type(null, billet.material?.type) + thing.dropInto(billet.loc) + thing.pixel_x = billet.pixel_x + thing.pixel_y = billet.pixel_y + thing.pixel_w = billet.pixel_w + thing.pixel_z = billet.pixel_z + thing.temperature = billet.temperature + thing.update_heat_glow(anim_time = 0) + + if(billet.paint_color) + thing.paint_color = billet.paint_color + thing.update_icon() + qdel(billet) + thing.base_name = name + thing.update_name() + return thing diff --git a/mods/content/blacksmithy/forging_step_armor.dm b/mods/content/blacksmithy/forging_step_armor.dm new file mode 100644 index 000000000000..f0633652912e --- /dev/null +++ b/mods/content/blacksmithy/forging_step_armor.dm @@ -0,0 +1,37 @@ +/decl/forging_step/armour_plates + billet_desc = "A set of worked metal plates, a few steps and fittings away from forming some kind of armour." + billet_name = "armour plates" + billet_icon_state = "armour" + steps = list( + /decl/forging_step/product/breastplate, + /decl/forging_step/product/cuirass, + /decl/forging_step/product/banded + ) + +/decl/forging_step/armour_segments + billet_desc = "A set of small worked metal plates, a few steps and fittings away from forming a helmet, or arm or leg armour." + billet_name = "armour segments" + billet_icon_state = "helmet" + steps = list( + /decl/forging_step/product/helmet, + /decl/forging_step/product/sabatons, + /decl/forging_step/product/vambraces + ) + +/decl/forging_step/product/breastplate + product_type = /obj/item/clothing/suit/armor/forged/breastplate + +/decl/forging_step/product/cuirass + product_type = /obj/item/clothing/suit/armor/forged/cuirass + +/decl/forging_step/product/banded + product_type = /obj/item/clothing/suit/armor/forged/banded + +/decl/forging_step/product/helmet + product_type = /obj/item/clothing/head/helmet/plumed + +/decl/forging_step/product/sabatons + product_type = /obj/item/clothing/shoes/sabatons + +/decl/forging_step/product/vambraces + product_type = /obj/item/clothing/gloves/vambrace diff --git a/mods/content/blacksmithy/forging_step_billets.dm b/mods/content/blacksmithy/forging_step_billets.dm new file mode 100644 index 000000000000..f1c23273b93a --- /dev/null +++ b/mods/content/blacksmithy/forging_step_billets.dm @@ -0,0 +1,47 @@ +/decl/forging_step/billet + billet_desc = "An unworked length of metal used to forge items and tools." + steps = list( + /decl/forging_step/thin_billet, + /decl/forging_step/curved_billet, + /decl/forging_step/flat_bar, + /decl/forging_step/punched_billet + ) + +/decl/forging_step/thin_billet + billet_name_prefix = "thin" + billet_icon_state = "thin" + billet_desc = "A thin, elongated length of metal used to forge items and tools." + steps = list( + /decl/forging_step/blade_blank, + /decl/forging_step/ornate_blank + ) + +/decl/forging_step/curved_billet + billet_name_prefix = "curved" + billet_icon_state = "curved" + billet_desc = "A curved length of metal used to forge items and tools." + steps = list( + /decl/forging_step/product/hook, + /decl/forging_step/product/chain, + /decl/forging_step/product/horseshoe + ) + +/decl/forging_step/flat_bar + billet_name = "bar" + billet_name_prefix = "flat" + billet_icon_state = "flat" + billet_desc = "A flattened bar of metal used to forge armour components and plates." + steps = list( + /decl/forging_step/armour_plates, + /decl/forging_step/armour_segments, + /decl/forging_step/product/shield_fasteners + ) + +/decl/forging_step/punched_billet + billet_name_prefix = "punched" + billet_icon_state = "punched" + billet_desc = "A punched bar of metal used to forge items and tools" + steps = list( + /decl/forging_step/tool_head_blank, + /decl/forging_step/product/tongs + ) diff --git a/mods/content/blacksmithy/forging_step_blades.dm b/mods/content/blacksmithy/forging_step_blades.dm new file mode 100644 index 000000000000..253a1dd73321 --- /dev/null +++ b/mods/content/blacksmithy/forging_step_blades.dm @@ -0,0 +1,59 @@ +/decl/forging_step/blade_blank + billet_name = "blade blank" + billet_icon_state = "blade" + billet_desc = "A roughly shaped, dull blade. It will need further refinement before it can be finished." + steps = list( + /decl/forging_step/long_blade_blank, + /decl/forging_step/short_sword_blank + ) + +/decl/forging_step/long_blade_blank + billet_name = "blade blank" + billet_name_prefix = "long" + billet_desc = "A long, dull and unrefined blade, only a step from being a finished product." + + steps = list( + /decl/forging_step/product/longsword_blade, + /decl/forging_step/product/broadsword_blade, + /decl/forging_step/product/rapier_blade + ) + +/decl/forging_step/short_sword_blank + billet_name = "blade blank" + billet_name_prefix = "short" + billet_desc = "A short, dull and unrefined blade, only a step from being a finished product." + steps = list( + /decl/forging_step/product/poignard_blade, + /decl/forging_step/product/knife_blade, + /decl/forging_step/product/shortsword_blade, + /decl/forging_step/product/spear_head + ) + +// TODO: make these blades, add weapon crafting. +/decl/forging_step/product/longsword_blade + billet_name = "longsword" + product_type = /obj/item/bladed/longsword/forged + +/decl/forging_step/product/broadsword_blade + billet_name = "broadsword" + product_type = /obj/item/bladed/broadsword/forged + +/decl/forging_step/product/rapier_blade + billet_name = "rapier" + product_type = /obj/item/bladed/rapier/forged + +/decl/forging_step/product/poignard_blade + billet_name = "poignard" + product_type = /obj/item/bladed/poignard/forged + +/decl/forging_step/product/knife_blade + billet_name = "knife" + product_type = /obj/item/bladed/knife/forged + +/decl/forging_step/product/shortsword_blade + billet_name = "shortsword" + product_type = /obj/item/bladed/shortsword/forged + +/decl/forging_step/product/spear_head + billet_name = "spear" + product_type = /obj/item/bladed/polearm/spear/forged diff --git a/mods/content/blacksmithy/forging_step_components.dm b/mods/content/blacksmithy/forging_step_components.dm new file mode 100644 index 000000000000..6e508d3aa528 --- /dev/null +++ b/mods/content/blacksmithy/forging_step_components.dm @@ -0,0 +1,15 @@ +/decl/forging_step/product/hook + billet_name = "hook" + product_type = /obj/item/hook + +/decl/forging_step/product/chain + billet_name = "chain" + product_type = /obj/item/chain + +/decl/forging_step/product/horseshoe + billet_name = "horseshoe" + product_type = /obj/item/horseshoe + +/decl/forging_step/product/shield_fasteners + billet_name = "shield fasteners" + product_type = /obj/item/shield_fasteners diff --git a/mods/content/blacksmithy/forging_step_ornate.dm b/mods/content/blacksmithy/forging_step_ornate.dm new file mode 100644 index 000000000000..515d9d57d21f --- /dev/null +++ b/mods/content/blacksmithy/forging_step_ornate.dm @@ -0,0 +1,22 @@ +/decl/forging_step/ornate_blank + billet_name = "blank" + billet_name_prefix = "ornate" + billet_icon_state = "ornate" + billet_desc = "An ornate piece of worked metal. It still needs some last touches to be made into something useful." + steps = list( + /decl/forging_step/product/candelabra, + /decl/forging_step/product/decanter, + /decl/forging_step/product/goblet + ) + +/decl/forging_step/product/candelabra + billet_name = "candelabra" + product_type = /obj/item/candelabra + +/decl/forging_step/product/goblet + billet_name = "goblet" + product_type = /obj/item/chems/glass/handmade/fancy/goblet + +/decl/forging_step/product/decanter + billet_name = "decanter" + product_type =/obj/item/chems/glass/handmade/fancy/decanter \ No newline at end of file diff --git a/mods/content/blacksmithy/forging_step_tools.dm b/mods/content/blacksmithy/forging_step_tools.dm new file mode 100644 index 000000000000..d7cfb50501bb --- /dev/null +++ b/mods/content/blacksmithy/forging_step_tools.dm @@ -0,0 +1,56 @@ +/decl/forging_step/tool_head_blank + billet_desc = "A heavy piece of shaped metal, almost suitable for use as the head of a tool. It still needs some last touches to be made into something useful." + billet_name = "tool head blank" + billet_icon_state = "tool_head" + steps = list( + /decl/forging_step/product/hoe_head, + /decl/forging_step/product/shovel_head, + /decl/forging_step/hammer_head_blank, + /decl/forging_step/product/chisel_head + ) + +/decl/forging_step/hammer_head_blank + billet_name = "hammer head blank" + billet_desc = "A worked slab of material in the rough shape of a hammer head, only a step from being a finished product." + steps = list( + /decl/forging_step/product/pickaxe_head, + /decl/forging_step/product/sledge_head, + /decl/forging_step/product/hammer_head, + /decl/forging_step/product/forging_hammer_head + ) + +/decl/forging_step/product/tongs + billet_name = "tongs" + product_type = /obj/item/tongs + +/decl/forging_step/product/chisel_head + billet_name = "chisel head" + product_type = /obj/item/tool_component/head/chisel + +/decl/forging_step/product/hammer_head + billet_name = "hammer head" + product_type = /obj/item/tool_component/head/hammer + +/decl/forging_step/product/shovel_head + billet_name = "shovel head" + product_type = /obj/item/tool_component/head/shovel + +/decl/forging_step/product/hoe_head + billet_name = "hoe head" + product_type = /obj/item/tool_component/head/hoe + +/decl/forging_step/product/handaxe_head + billet_name = "handaxe head" + product_type = /obj/item/tool_component/head/handaxe + +/decl/forging_step/product/pickaxe_head + billet_name = "pickaxe head" + product_type = /obj/item/tool_component/head/pickaxe + +/decl/forging_step/product/sledge_head + billet_name = "sledge head" + product_type = /obj/item/tool_component/head/sledgehammer + +/decl/forging_step/product/forging_hammer_head + billet_name = "forging hammer head" + product_type = /obj/item/tool_component/head/forging_hammer diff --git a/mods/content/blacksmithy/forging_types.dm b/mods/content/blacksmithy/forging_types.dm new file mode 100644 index 000000000000..f766d39982da --- /dev/null +++ b/mods/content/blacksmithy/forging_types.dm @@ -0,0 +1,41 @@ +/obj/item/bladed/longsword/forged + material = /decl/material/solid/metal/iron + hilt_material = null + guard_material = null + pommel_material = null + +/obj/item/bladed/broadsword/forged + material = /decl/material/solid/metal/iron + hilt_material = null + guard_material = null + pommel_material = null + +/obj/item/bladed/rapier/forged + material = /decl/material/solid/metal/iron + hilt_material = null + guard_material = null + pommel_material = null + +/obj/item/bladed/poignard/forged + material = /decl/material/solid/metal/iron + hilt_material = null + guard_material = null + pommel_material = null + +/obj/item/bladed/knife/forged + material = /decl/material/solid/metal/iron + hilt_material = null + guard_material = null + pommel_material = null + +/obj/item/bladed/shortsword/forged + material = /decl/material/solid/metal/iron + hilt_material = null + guard_material = null + pommel_material = null + +/obj/item/bladed/polearm/spear/forged + material = /decl/material/solid/metal/iron + hilt_material = null + guard_material = null + pommel_material = null diff --git a/mods/content/blacksmithy/icons/anvil.dmi b/mods/content/blacksmithy/icons/anvil.dmi new file mode 100644 index 000000000000..403390e3251b Binary files /dev/null and b/mods/content/blacksmithy/icons/anvil.dmi differ diff --git a/mods/content/blacksmithy/icons/anvil_crude.dmi b/mods/content/blacksmithy/icons/anvil_crude.dmi new file mode 100644 index 000000000000..1f43be3ed0ff Binary files /dev/null and b/mods/content/blacksmithy/icons/anvil_crude.dmi differ diff --git a/mods/content/blacksmithy/icons/anvil_crude_alt.dmi b/mods/content/blacksmithy/icons/anvil_crude_alt.dmi new file mode 100644 index 000000000000..d3876c4f37fd Binary files /dev/null and b/mods/content/blacksmithy/icons/anvil_crude_alt.dmi differ diff --git a/mods/content/blacksmithy/icons/anvil_improvised.dmi b/mods/content/blacksmithy/icons/anvil_improvised.dmi new file mode 100644 index 000000000000..a80b2d7a06b0 Binary files /dev/null and b/mods/content/blacksmithy/icons/anvil_improvised.dmi differ diff --git a/mods/content/blacksmithy/icons/billet.dmi b/mods/content/blacksmithy/icons/billet.dmi new file mode 100644 index 000000000000..1b841d667a04 Binary files /dev/null and b/mods/content/blacksmithy/icons/billet.dmi differ diff --git a/mods/content/blacksmithy/icons/forge.dmi b/mods/content/blacksmithy/icons/forge.dmi new file mode 100644 index 000000000000..452def1aa589 Binary files /dev/null and b/mods/content/blacksmithy/icons/forge.dmi differ diff --git a/mods/content/blacksmithy/icons/tongs.dmi b/mods/content/blacksmithy/icons/tongs.dmi new file mode 100644 index 000000000000..72764d913b32 Binary files /dev/null and b/mods/content/blacksmithy/icons/tongs.dmi differ diff --git a/mods/content/blacksmithy/tongs.dm b/mods/content/blacksmithy/tongs.dm new file mode 100644 index 000000000000..624e790dc53a --- /dev/null +++ b/mods/content/blacksmithy/tongs.dm @@ -0,0 +1,32 @@ +/obj/item/tongs + name = "tongs" + desc = "Long-handled grippers well suited to fishing white-hot iron out of a forge fire." + icon = 'mods/content/blacksmithy/icons/tongs.dmi' + icon_state = ICON_STATE_WORLD + material = /decl/material/solid/metal/iron + obj_flags = OBJ_FLAG_INSULATED_HANDLE + material_alteration = MAT_FLAG_ALTERATION_ALL + var/obj/item/holding_bar + +/obj/item/tongs/on_update_icon() + . = ..() + if(holding_bar) + // Note, not get_color(); heat color is temporarily applied over the top of base color. + add_overlay(overlay_image(icon, "[icon_state]-bar", holding_bar.color, RESET_COLOR)) + +/obj/item/tongs/adjust_mob_overlay(mob/living/user_mob, bodytype, image/overlay, slot, bodypart, use_fallback_if_icon_missing) + if(overlay && holding_bar) + var/check_state = "[overlay.icon_state]-bar" + if(check_state_in_icon(check_state, overlay.icon)) + overlay.overlays += overlay_image(overlay.icon, check_state, holding_bar.get_color(), RESET_COLOR) + . = ..() + +/obj/item/tongs/Exited(atom/movable/AM, atom/new_loc) + . = ..() + if(AM == holding_bar) + holding_bar = null + update_icon() + +/obj/item/tongs/Destroy() + QDEL_NULL(holding_bar) + . = ..() diff --git a/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm b/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm index d6d797ba1b0f..7b0313e2d201 100644 --- a/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm +++ b/mods/content/corporate/away_sites/lar_maria/lar_maria-1.dmm @@ -560,7 +560,7 @@ /turf/floor/tiled/white, /area/lar_maria/vir_main) "bL" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 8 }, /turf/floor/tiled/white, @@ -571,7 +571,7 @@ /turf/floor/tiled/white, /area/lar_maria/vir_main) "bN" = ( -/obj/structure/bed/chair/office/dark{ +/obj/structure/chair/office/dark{ dir = 1 }, /turf/floor/tiled/white, @@ -585,7 +585,7 @@ /turf/floor/tiled, /area/lar_maria/cells) "bR" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled, @@ -597,7 +597,7 @@ /area/lar_maria/cells) "bT" = ( /obj/machinery/light, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled, @@ -969,7 +969,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled, @@ -1527,13 +1527,13 @@ /turf/floor/tiled, /area/lar_maria/sec_wing) "ev" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled, /area/lar_maria/sec_wing) "ew" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/abstract/landmark/corpse/lar_maria/zhp_guard, @@ -1652,7 +1652,7 @@ /turf/floor/tiled, /area/lar_maria/sec_wing) "eK" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled, @@ -1762,7 +1762,7 @@ /turf/floor/tiled/white, /area/lar_maria/vir_aux) "eZ" = ( -/obj/structure/bed/chair/office/dark, +/obj/structure/chair/office/dark, /turf/floor/tiled/white, /area/lar_maria/vir_aux) "fa" = ( @@ -1782,7 +1782,7 @@ /area/lar_maria/cells) "fd" = ( /obj/machinery/light, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /mob/living/simple_animal/hostile/lar_maria/test_subject, @@ -2376,7 +2376,7 @@ /turf/floor/plating, /area/lar_maria/sec_wing) "gj" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/abstract/landmark/corpse/lar_maria/test_subject, @@ -2680,7 +2680,7 @@ /turf/floor/plating, /area/lar_maria/cells) "hb" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/alarm{ @@ -2789,7 +2789,7 @@ /turf/floor/plating, /area/lar_maria/cells) "ht" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled, /area/lar_maria/vir_access) "hu" = ( @@ -2861,7 +2861,7 @@ /turf/floor/tiled, /area/lar_maria/vir_access) "hF" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -3050,7 +3050,7 @@ /turf/floor/tiled, /area/lar_maria/vir_access) "hZ" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -3373,7 +3373,7 @@ /turf/floor/tiled, /area/lar_maria/vir_access) "iK" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/item/gun/energy/taser, @@ -3384,7 +3384,7 @@ /turf/floor/tiled, /area/lar_maria/sec_wing) "iM" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /mob/living/simple_animal/hostile/lar_maria/guard, diff --git a/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm b/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm index 68f05027666b..7707209d40df 100644 --- a/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm +++ b/mods/content/corporate/away_sites/lar_maria/lar_maria-2.dmm @@ -899,7 +899,7 @@ /obj/structure/window/basic{ dir = 1 }, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /turf/floor/tiled, @@ -920,7 +920,7 @@ /obj/structure/window/basic{ dir = 4 }, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /turf/floor/tiled, @@ -1006,7 +1006,7 @@ /turf/floor/plating, /area/lar_maria/atmos) "cY" = ( -/obj/structure/bed/chair/comfy/purple{ +/obj/structure/chair/comfy/purple{ dir = 1 }, /turf/floor/laminate, @@ -1021,7 +1021,7 @@ /turf/floor/laminate, /area/lar_maria/dorms) "db" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 1 }, /turf/floor/laminate, @@ -1031,7 +1031,7 @@ /turf/floor/laminate, /area/lar_maria/dorms) "de" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 1 }, /turf/floor/laminate, @@ -1062,7 +1062,7 @@ /turf/floor/tiled, /area/lar_maria/library) "dj" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 4 }, /turf/floor/tiled, @@ -1338,7 +1338,7 @@ /obj/structure/window/basic{ dir = 4 }, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /turf/floor/tiled, @@ -1358,7 +1358,7 @@ /obj/structure/window/basic{ dir = 4 }, -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 8 }, /obj/machinery/light, @@ -1386,7 +1386,7 @@ /turf/floor/tiled, /area/lar_maria/library) "ei" = ( -/obj/structure/bed/chair/comfy/beige, +/obj/structure/chair/comfy/beige, /turf/floor/laminate, /area/lar_maria/dorms) "ej" = ( @@ -1394,7 +1394,7 @@ /turf/floor/laminate, /area/lar_maria/dorms) "ek" = ( -/obj/structure/bed/chair/comfy/brown, +/obj/structure/chair/comfy/brown, /turf/floor/laminate, /area/lar_maria/dorms) "el" = ( @@ -1414,7 +1414,7 @@ /turf/floor/laminate, /area/lar_maria/dorms) "eo" = ( -/obj/structure/bed/chair/comfy/green, +/obj/structure/chair/comfy/green, /turf/floor/laminate, /area/lar_maria/dorms) "ep" = ( @@ -1488,7 +1488,7 @@ /turf/floor/tiled, /area/lar_maria/office) "eD" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /obj/abstract/landmark/corpse/lar_maria/virologist_female, /obj/effect/decal/cleanable/blood, /turf/floor/tiled, @@ -1696,7 +1696,7 @@ /turf/floor/tiled, /area/lar_maria/office) "fo" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /turf/floor/tiled, /area/lar_maria/office) "fp" = ( @@ -1783,7 +1783,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled, @@ -1794,7 +1794,7 @@ /turf/floor/tiled, /area/lar_maria/office) "fB" = ( -/obj/structure/bed/chair/office/light, +/obj/structure/chair/office/light, /obj/effect/decal/cleanable/blood, /turf/floor/tiled, /area/lar_maria/office) @@ -2001,7 +2001,7 @@ /turf/floor/tiled, /area/lar_maria/office) "gl" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 1 }, /turf/floor/tiled, @@ -2188,7 +2188,7 @@ /turf/floor/tiled, /area/lar_maria/mess_hall) "gQ" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled, @@ -2200,7 +2200,7 @@ /turf/floor/tiled, /area/lar_maria/mess_hall) "gS" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled, @@ -2255,7 +2255,7 @@ /turf/floor/plating, /area/lar_maria/hallway) "hd" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /obj/machinery/light/small{ @@ -2303,7 +2303,7 @@ /turf/floor/tiled, /area/lar_maria/mess_hall) "hj" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled, @@ -2765,7 +2765,7 @@ /turf/floor/tiled, /area/lar_maria/mess_hall) "iz" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/abstract/landmark/corpse/lar_maria/virologist, @@ -3052,7 +3052,7 @@ /turf/floor/plating, /area/space) "kb" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/light/small{ @@ -3061,7 +3061,7 @@ /turf/floor/plating, /area/lar_maria/solar_control) "lb" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/light/small{ diff --git a/mods/content/corporate/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm b/mods/content/corporate/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm index 1edbe07fd68b..b89a49fad8d1 100644 --- a/mods/content/corporate/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm +++ b/mods/content/corporate/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm @@ -87,7 +87,7 @@ /turf/floor/tiled/monotile, /area/map_template/oldpod) "ao" = ( -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /obj/structure/window/reinforced{ @@ -97,7 +97,7 @@ /turf/floor/tiled/monotile, /area/map_template/oldpod) "ap" = ( -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ dir = 4 }, /obj/structure/window/reinforced{ diff --git a/mods/content/fantasy/submaps/woods/bear_den/bear_den.dmm b/mods/content/fantasy/submaps/woods/bear_den/bear_den.dmm index 021df578e9b0..0a5b96087a42 100644 --- a/mods/content/fantasy/submaps/woods/bear_den/bear_den.dmm +++ b/mods/content/fantasy/submaps/woods/bear_den/bear_den.dmm @@ -22,7 +22,7 @@ /turf/floor/dirt, /area/fantasy/outside/point_of_interest/bear_den) "w" = ( -/obj/item/bladed/knife, +/obj/item/bladed/knife/iron, /obj/item/cash/imperial/crown, /obj/item/cash/imperial/crown, /obj/item/cash/imperial/quin, diff --git a/mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dmm b/mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dmm index 6ed42c835894..a35016e505f1 100644 --- a/mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dmm +++ b/mods/content/fantasy/submaps/woods/chemistry_shack/chemistry_shack.dmm @@ -108,7 +108,7 @@ "L" = ( /obj/abstract/exterior_marker/inside, /obj/structure/table/wood/ebony, -/obj/item/bladed/knife, +/obj/item/bladed/knife/iron, /obj/item/food/grown/potato, /obj/item/food/grown/potato, /obj/item/food/grown/carrot, diff --git a/mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring.dmm b/mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring.dmm index 2611fe47b348..7d554d6fc8a4 100644 --- a/mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring.dmm +++ b/mods/content/fantasy/submaps/woods/fairy_rings/fairy_ring.dmm @@ -1,10 +1,10 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "a" = ( -/turf/floor/fake_grass, +/turf/floor/grass, /area/fantasy/outside/point_of_interest/fairy_ring) "w" = ( /obj/structure/flora/plant/random_mushroom, -/turf/floor/fake_grass, +/turf/floor/grass, /area/fantasy/outside/point_of_interest/fairy_ring) "D" = ( /turf/floor/grass/wild, diff --git a/mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dmm b/mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dmm index b269d8d4cdde..c54ef3bfe8ca 100644 --- a/mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dmm +++ b/mods/content/fantasy/submaps/woods/hunter_camp/hunter_camp.dmm @@ -85,7 +85,7 @@ /turf/floor/barren, /area/fantasy/outside/point_of_interest/hunter_camp) "Z" = ( -/obj/item/bladed/knife, +/obj/item/bladed/knife/iron, /turf/floor/barren, /area/fantasy/outside/point_of_interest/hunter_camp) diff --git a/mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dmm b/mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dmm index 18e121752741..9156eb4514d4 100644 --- a/mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dmm +++ b/mods/content/fantasy/submaps/woods/old_cabin/old_cabin.dmm @@ -67,7 +67,7 @@ /area/fantasy/outside/point_of_interest/old_cabin) "H" = ( /obj/structure/table/wood/ebony, -/obj/item/bladed/knife, +/obj/item/bladed/knife/iron, /obj/item/food/grown/potato, /obj/item/food/grown/potato, /obj/item/food/grown/carrot, diff --git a/mods/content/fantasy/submaps/woods/suspicious_cabin/suspicious_cabin.dmm b/mods/content/fantasy/submaps/woods/suspicious_cabin/suspicious_cabin.dmm index 1629e04adafd..c362ae5342f8 100644 --- a/mods/content/fantasy/submaps/woods/suspicious_cabin/suspicious_cabin.dmm +++ b/mods/content/fantasy/submaps/woods/suspicious_cabin/suspicious_cabin.dmm @@ -3,7 +3,7 @@ /turf/template_noop, /area/template_noop) "d" = ( -/obj/structure/bed/chair/wood/ebony{ +/obj/structure/chair/wood/ebony{ dir = 1 }, /turf/floor/wood/walnut, @@ -33,7 +33,7 @@ /turf/floor/wood/walnut, /area/template_noop) "r" = ( -/obj/structure/bed/chair/bench/ebony{ +/obj/structure/chair/bench/ebony{ dir = 4 }, /turf/floor/wood/walnut, @@ -43,14 +43,14 @@ /area/template_noop) "t" = ( /obj/structure/table/wood/ebony, -/obj/item/bladed/knife, +/obj/item/bladed/knife/iron, /turf/floor/path/basalt, /area/template_noop) "v" = ( /turf/wall/log/walnut/shutter, /area/template_noop) "w" = ( -/obj/structure/bed/chair/wood/ebony, +/obj/structure/chair/wood/ebony, /turf/floor/wood/walnut, /area/template_noop) "x" = ( @@ -96,7 +96,7 @@ /turf/floor/path/basalt, /area/template_noop) "P" = ( -/obj/structure/bed/chair/bench/ebony, +/obj/structure/chair/bench/ebony, /turf/floor/wood/walnut, /area/template_noop) "Q" = ( diff --git a/mods/content/generic_shuttles/tanker/tanker.dmm b/mods/content/generic_shuttles/tanker/tanker.dmm index ff28ca555215..c189bc9b389f 100644 --- a/mods/content/generic_shuttles/tanker/tanker.dmm +++ b/mods/content/generic_shuttles/tanker/tanker.dmm @@ -257,7 +257,7 @@ /turf/floor/tiled/steel_grid, /area/tanker) "yG" = ( -/obj/structure/bed/chair/office, +/obj/structure/chair/office, /turf/floor/tiled/steel_grid, /area/tanker) "An" = ( @@ -315,7 +315,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/floor/tiled/steel_grid, @@ -475,7 +475,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/floor/tiled/steel_grid, diff --git a/mods/content/government/away_sites/icarus/icarus-1.dmm b/mods/content/government/away_sites/icarus/icarus-1.dmm index fc98131743c2..00df803d74e4 100644 --- a/mods/content/government/away_sites/icarus/icarus-1.dmm +++ b/mods/content/government/away_sites/icarus/icarus-1.dmm @@ -37,15 +37,15 @@ /turf/floor/grass/wild, /area/icarus/open) "am" = ( -/obj/structure/bed/chair/comfy/black, +/obj/structure/chair/comfy/black, /turf/floor/laminate, /area/icarus/vessel) "an" = ( -/obj/structure/bed/chair/comfy/captain, +/obj/structure/chair/comfy/captain, /turf/floor/laminate, /area/icarus/vessel) "ao" = ( -/obj/structure/bed/chair/comfy/black, +/obj/structure/chair/comfy/black, /obj/item/secure_storage/briefcase, /turf/floor/laminate, /area/icarus/vessel) @@ -99,7 +99,7 @@ /turf/floor/laminate, /area/icarus/vessel) "aB" = ( -/obj/structure/bed/chair/comfy/black{ +/obj/structure/chair/comfy/black{ dir = 1 }, /turf/floor/laminate, @@ -467,7 +467,7 @@ /turf/floor/tiled, /area/icarus/vessel) "bP" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled, @@ -928,13 +928,13 @@ /turf/floor/tiled, /area/icarus/vessel) "dk" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled, /area/icarus/vessel) "dl" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/decal/cleanable/dirt/visible, @@ -980,7 +980,7 @@ /turf/floor/tiled, /area/icarus/open) "dt" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/decal/cleanable/dirt/visible, @@ -1095,7 +1095,7 @@ /turf/floor/tiled, /area/icarus/vessel) "dN" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/decal/cleanable/dirt/visible, @@ -1185,7 +1185,7 @@ /turf/floor/tiled, /area/icarus/vessel) "eb" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -1201,7 +1201,7 @@ /turf/floor/tiled, /area/icarus/vessel) "ed" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/effect/decal/cleanable/dirt/visible, @@ -1424,7 +1424,7 @@ "eO" = ( /obj/effect/decal/cleanable/dirt/visible, /obj/effect/decal/cleanable/dirt/visible, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/unsimulated/floor/sand, diff --git a/mods/content/government/away_sites/icarus/icarus-2.dmm b/mods/content/government/away_sites/icarus/icarus-2.dmm index 57e1757f4eb2..9d2175f2af71 100644 --- a/mods/content/government/away_sites/icarus/icarus-2.dmm +++ b/mods/content/government/away_sites/icarus/icarus-2.dmm @@ -38,7 +38,7 @@ /turf/floor/tiled, /area/icarus/vessel) "al" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/tiled, @@ -115,7 +115,7 @@ /turf/floor/tiled, /area/icarus/open) "aA" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/abstract/landmark/corpse/bridgeofficer, @@ -127,7 +127,7 @@ /turf/floor/tiled, /area/icarus/vessel) "aD" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/tiled, @@ -180,7 +180,7 @@ /turf/floor/tiled, /area/icarus/vessel) "aO" = ( -/obj/structure/bed/chair/comfy/captain{ +/obj/structure/chair/comfy/captain{ dir = 8 }, /turf/floor/tiled, @@ -199,7 +199,7 @@ /turf/floor/tiled/dark, /area/icarus/vessel) "aR" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/tiled, @@ -478,7 +478,7 @@ /turf/floor/tiled, /area/icarus/vessel) "bH" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /turf/floor/tiled, @@ -493,7 +493,7 @@ /turf/floor/tiled, /area/icarus/vessel) "bK" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 8 }, /turf/floor/tiled, @@ -572,7 +572,7 @@ /turf/floor/tiled, /area/icarus/vessel) "ca" = ( -/obj/structure/bed/chair/comfy/brown, +/obj/structure/chair/comfy/brown, /turf/floor/tiled, /area/icarus/vessel) "cb" = ( @@ -604,7 +604,7 @@ /turf/floor/tiled, /area/icarus/vessel) "cf" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/abstract/landmark/corpse/engineer, @@ -1006,7 +1006,7 @@ /turf/floor/tiled, /area/icarus/vessel) "dl" = ( -/obj/structure/bed/chair/comfy/brown{ +/obj/structure/chair/comfy/brown{ dir = 4 }, /obj/abstract/landmark/corpse/scientist, @@ -1101,7 +1101,7 @@ /turf/floor/tiled, /area/icarus/vessel) "dz" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/tiled, /area/icarus/vessel) "dA" = ( @@ -1429,7 +1429,7 @@ }, /area/icarus/vessel) "eB" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /turf/floor/shuttle/white, /area/icarus/vessel) "eC" = ( @@ -1475,7 +1475,7 @@ /turf/floor/shuttle/white, /area/icarus/open) "eK" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/shuttle/white, @@ -1521,7 +1521,7 @@ /turf/floor/plating, /area/icarus/vessel) "eS" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/shuttle/white, @@ -1532,7 +1532,7 @@ }, /area/icarus/vessel) "eU" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 1 }, /turf/floor/shuttle/white, diff --git a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm index 5aa3911fe646..049ae42287b1 100644 --- a/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm +++ b/mods/content/government/ruins/ec_old_crash/ec_old_crash.dmm @@ -1529,7 +1529,7 @@ /turf/floor, /area/map_template/ecship/engineering) "dr" = ( -/obj/structure/bed/chair, +/obj/structure/chair, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, diff --git a/mods/content/psionics/items/id_card.dm b/mods/content/psionics/items/id_card.dm index 27d4d5be4057..521e1d2be180 100644 --- a/mods/content/psionics/items/id_card.dm +++ b/mods/content/psionics/items/id_card.dm @@ -15,14 +15,14 @@ icon = 'icons/obj/id/id_warrantcard.dmi' detail_color = null -/obj/item/card/id/foundation/examine(mob/user, distance) +/obj/item/card/id/foundation/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 && isliving(user)) var/datum/ability_handler/psionics/psi = user.get_ability_handler(/datum/ability_handler/psionics) if(psi) - to_chat(user, SPAN_WARNING("There is a psionic compulsion surrounding \the [src], forcing anyone who reads it to perceive it as a legitimate document of authority. The actual text just reads 'I can do what I want.'")) + . += SPAN_WARNING("There is a psionic compulsion surrounding \the [src], forcing anyone who reads it to perceive it as a legitimate document of authority. The actual text just reads 'I can do what I want.'") else - to_chat(user, SPAN_NOTICE("This is the real deal, stamped by [global.using_map.boss_name]. It gives the holder the full authority to pursue their goals. You believe it implicitly.")) + . += SPAN_NOTICE("This is the real deal, stamped by [global.using_map.boss_name]. It gives the holder the full authority to pursue their goals. You believe it implicitly.") /obj/item/card/id/foundation/attack_self(var/mob/user) . = ..() diff --git a/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm b/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm index 0519216447d3..1ae917174555 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus_helpers.dm @@ -87,7 +87,7 @@ var/mob/living/human/pop = owner if(pop.should_have_organ(BP_BRAIN)) var/obj/item/organ/internal/sponge = GET_INTERNAL_ORGAN(pop, BP_BRAIN) - if(sponge && sponge.damage >= sponge.max_damage) + if(sponge && sponge.get_organ_damage() >= sponge.max_damage) var/obj/item/organ/external/affecting = GET_EXTERNAL_ORGAN(pop, sponge.parent_organ) if(affecting) affecting.dismember(0, DISMEMBER_METHOD_BLUNT) diff --git a/mods/content/psionics/system/psionics/complexus/complexus_process.dm b/mods/content/psionics/system/psionics/complexus/complexus_process.dm index d8a3a2a3f5cc..44f3258b9cec 100644 --- a/mods/content/psionics/system/psionics/complexus/complexus_process.dm +++ b/mods/content/psionics/system/psionics/complexus/complexus_process.dm @@ -183,19 +183,20 @@ // Heal organ damage. if(heal_internal) - for(var/obj/item/organ/I in H.get_internal_organs()) + for(var/obj/item/organ/internal/organ in H.get_internal_organs()) - if(BP_IS_PROSTHETIC(I) || BP_IS_CRYSTAL(I)) + if(BP_IS_PROSTHETIC(organ) || BP_IS_CRYSTAL(organ)) continue // Autoredaction doesn't heal brain damage directly. - if(I.organ_tag == BP_BRAIN) + if(organ.organ_tag == BP_BRAIN) continue - if(I.damage > 0 && spend_power(heal_rate)) - I.damage = max(I.damage - heal_rate, 0) + var/organ_damage = organ.get_organ_damage() + if(organ_damage > 0 && spend_power(heal_rate)) + organ.adjust_organ_damage(-(heal_rate)) if(prob(25)) - to_chat(H, SPAN_NOTICE("Your innards itch as your autoredactive faculty mends your [I.name].")) + to_chat(H, SPAN_NOTICE("Your innards itch as your autoredactive faculty mends your [organ.name].")) return // Heal broken bones. diff --git a/mods/content/psionics/system/psionics/faculties/redaction.dm b/mods/content/psionics/system/psionics/faculties/redaction.dm index 8879259a72ac..3ac69fe16179 100644 --- a/mods/content/psionics/system/psionics/faculties/redaction.dm +++ b/mods/content/psionics/system/psionics/faculties/redaction.dm @@ -111,11 +111,12 @@ to_chat(user, SPAN_NOTICE("This [W.desc] is beyond your power to heal.")) if(redaction_rank >= PSI_RANK_GRANDMASTER) - for(var/obj/item/organ/internal/I in E.internal_organs) - if(!BP_IS_PROSTHETIC(I) && !BP_IS_CRYSTAL(I) && I.damage > 0 && I.organ_tag != BP_BRAIN) - to_chat(user, SPAN_NOTICE("You encourage the damaged tissue of \the [I] to repair itself.")) + for(var/obj/item/organ/internal/organ in E.internal_organs) + var/organ_damage = organ.get_organ_damage() + if(!BP_IS_PROSTHETIC(organ) && !BP_IS_CRYSTAL(organ) && organ_damage > 0 && organ.organ_tag != BP_BRAIN) + to_chat(user, SPAN_NOTICE("You encourage the damaged tissue of \the [organ] to repair itself.")) var/heal_rate = redaction_rank - I.damage = max(0, I.damage - rand(heal_rate,heal_rate*2)) + organ.adjust_organ_damage(-rand(heal_rate, heal_rate*2)) return TRUE to_chat(user, SPAN_NOTICE("You can find nothing within \the [target]'s [E.name] to mend.")) diff --git a/mods/content/psionics/system/psionics/null/material.dm b/mods/content/psionics/system/psionics/null/material.dm index c76d1bbaf8d6..e28146d5b44a 100644 --- a/mods/content/psionics/system/psionics/null/material.dm +++ b/mods/content/psionics/system/psionics/null/material.dm @@ -11,7 +11,7 @@ flags = MAT_FLAG_BRITTLE opacity = 0.5 integrity = 30 - shard_type = SHARD_SHARD + shard_name = SHARD_SHARD tableslam_noise = 'sound/effects/Glasshit.ogg' hardness = 80 weight = MAT_VALUE_HEAVY diff --git a/mods/content/psionics/system/psionics/null/turf_floor.dm b/mods/content/psionics/system/psionics/null/turf_floor.dm index 4a470f77bdc6..f13498b21cc0 100644 --- a/mods/content/psionics/system/psionics/null/turf_floor.dm +++ b/mods/content/psionics/system/psionics/null/turf_floor.dm @@ -3,6 +3,6 @@ return (flooring && flooring.is_psi_null()) ? src : ..() /turf/floor/tiled/nullglass - name = "nullglass floor" + name = "nullglass floor" icon_state = "nullglass" - _flooring = /decl/flooring/tiling/nullglass + _flooring = /decl/flooring/tiling/nullglass diff --git a/mods/content/supermatter/endgame_cascade/cascade_blob.dm b/mods/content/supermatter/endgame_cascade/cascade_blob.dm index 6cd76d142330..92b7c96b491e 100644 --- a/mods/content/supermatter/endgame_cascade/cascade_blob.dm +++ b/mods/content/supermatter/endgame_cascade/cascade_blob.dm @@ -52,14 +52,14 @@ /turf/unsimulated/wall/cascade/attack_robot(mob/user) . = attack_hand_with_interaction_checks(user) if(!.) - user.examinate(src) + user.examine_verb(src) // /vg/: Don't let ghosts fuck with this. /turf/unsimulated/wall/cascade/attack_ghost(mob/user) - user.examinate(src) + user.examine_verb(src) /turf/unsimulated/wall/cascade/attack_ai(mob/living/silicon/ai/user) - user.examinate(src) + user.examine_verb(src) /turf/unsimulated/wall/cascade/attack_hand(mob/user) if(try_supermatter_consume(null, user, src, TRUE)) diff --git a/mods/content/supermatter/machinery/supermatter.dm b/mods/content/supermatter/machinery/supermatter.dm index f05b56abdaac..2a876bd55ea4 100644 --- a/mods/content/supermatter/machinery/supermatter.dm +++ b/mods/content/supermatter/machinery/supermatter.dm @@ -354,7 +354,7 @@ var/global/list/supermatter_delam_accent_sounds = list( explosion(TS, explosion_power/2, explosion_power, explosion_power * 2, explosion_power * 4, 1) qdel(src) -/obj/machinery/power/supermatter/examine(mob/user) +/obj/machinery/power/supermatter/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(user.skill_check(SKILL_ENGINES, SKILL_EXPERT)) var/integrity_message @@ -365,12 +365,12 @@ var/global/list/supermatter_delam_accent_sounds = list( integrity_message = "It appears to be losing cohesion!" else integrity_message = "At a glance, it seems to be in sound shape." - to_chat(user, integrity_message) + . += integrity_message if(user.skill_check(SKILL_ENGINES, SKILL_PROF)) var/display_power = power display_power *= (0.85 + 0.3 * rand()) display_power = round(display_power, 20) - to_chat(user, "Eyeballing it, you place the relative EER at around [display_power] MeV/cm3.") + . += "Eyeballing it, you place the relative EER at around [display_power] MeV/cm3." //Changes color and luminosity of the light to these values if they were not already set /obj/machinery/power/supermatter/proc/shift_light(var/lum, var/clr) diff --git a/mods/content/tabloids/tabloid.dm b/mods/content/tabloids/tabloid.dm index 6fc781a7ee64..579820aabfab 100644 --- a/mods/content/tabloids/tabloid.dm +++ b/mods/content/tabloids/tabloid.dm @@ -18,10 +18,10 @@ if(length(tabloid_headlines) && tabloid_headlines[headline]) article_body = tabloid_headlines[headline] -/obj/item/tabloid/examine(mob/user, distance, infix, suffix) +/obj/item/tabloid/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(headline) - to_chat(user, "The headline screams, \"[headline]\"") + . += "The headline screams, \"[headline]\"" /obj/item/tabloid/attack_self(mob/user) . = ..() diff --git a/mods/content/xenobiology/colours/colour_pyrite.dm b/mods/content/xenobiology/colours/colour_pyrite.dm index f87a9e8e65a8..739ba7a8910e 100644 --- a/mods/content/xenobiology/colours/colour_pyrite.dm +++ b/mods/content/xenobiology/colours/colour_pyrite.dm @@ -8,5 +8,5 @@ /decl/slime_colour/pyrite/handle_uranium_reaction(var/datum/reagents/holder) var/turf/location = get_turf(holder.get_reaction_loc()) if(location) - new /obj/item/chems/glass/paint/random(location) + new /obj/item/chems/glass/bucket/paint/random(location) return TRUE diff --git a/mods/content/xenobiology/slime/examine.dm b/mods/content/xenobiology/slime/examine.dm index 34d23565b8ea..318435bc62b3 100644 --- a/mods/content/xenobiology/slime/examine.dm +++ b/mods/content/xenobiology/slime/examine.dm @@ -1,16 +1,18 @@ -/mob/living/slime/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/living/slime/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) . = ..() - var/list/msg = list() if(stat == DEAD) - msg += "It is limp and unresponsive." + . += "It is limp and unresponsive." else if(src.get_damage(BRUTE) >= 40) - msg += SPAN_DANGER("It has severe punctures and tears in its flesh!") + . += SPAN_DANGER("It has severe punctures and tears in its flesh!") else if(src.get_damage(BRUTE)) - msg += SPAN_WARNING("It has some punctures in its flesh!") + . += SPAN_WARNING("It has some punctures in its flesh!") switch(powerlevel) - if(2 to 3) msg += SPAN_WARNING("It is flickering gently with a little electrical activity.") - if(4 to 5) msg += SPAN_WARNING("It is glowing gently with moderate levels of electrical activity.") - if(6 to 9) msg += SPAN_DANGER("It is glowing brightly with high levels of electrical activity.") - if(10) msg += SPAN_DANGER("It is radiating with massive levels of electrical activity!") - to_chat(user, jointext(msg, "
")) + if(2 to 3) + . += SPAN_WARNING("It is flickering gently with a little electrical activity.") + if(4 to 5) + . += SPAN_WARNING("It is glowing gently with moderate levels of electrical activity.") + if(6 to 9) + . += SPAN_DANGER("It is glowing brightly with high levels of electrical activity.") + if(10) + . += SPAN_DANGER("It is radiating with massive levels of electrical activity!") diff --git a/mods/gamemodes/cult/cultify/turf.dm b/mods/gamemodes/cult/cultify/turf.dm index 4e7669850ec9..77d554cbcea2 100644 --- a/mods/gamemodes/cult/cultify/turf.dm +++ b/mods/gamemodes/cult/cultify/turf.dm @@ -17,10 +17,10 @@ return ..() /turf/floor/cult - name = "engraved floor" - icon = 'icons/turf/flooring/cult.dmi' - icon_state = "cult" - _flooring = /decl/flooring/reinforced/cult + name = "engraved floor" + icon = 'icons/turf/flooring/cult.dmi' + icon_state = "cult" + _flooring = /decl/flooring/reinforced/cult /turf/wall/on_defilement() var/new_material @@ -38,12 +38,12 @@ //Cult wall /turf/wall/cult - icon_state = "cult" - color = COLOR_RED_GRAY - material = /decl/material/solid/stone/cult + icon_state = "cult" + color = COLOR_RED_GRAY + material = /decl/material/solid/stone/cult /turf/wall/cult/reinf - icon_state = "reinforced_cult" + icon_state = "reinforced_cult" reinf_material = /decl/material/solid/stone/cult/reinforced /turf/wall/cult/dismantle_turf(devastated, explode, no_product, keep_air = TRUE) diff --git a/mods/gamemodes/cult/flooring.dm b/mods/gamemodes/cult/flooring.dm index 71aff2a3ff30..7169311366c7 100644 --- a/mods/gamemodes/cult/flooring.dm +++ b/mods/gamemodes/cult/flooring.dm @@ -5,7 +5,7 @@ icon_base = "cult" build_type = null turf_flags = TURF_ACID_IMMUNE | TURF_REMOVE_WRENCH - can_paint = null + can_paint = FALSE /decl/flooring/reinforced/cult/on_flooring_remove(turf/removing_from) var/decl/special_role/cultist/cult = GET_DECL(/decl/special_role/cultist) diff --git a/mods/gamemodes/cult/materials.dm b/mods/gamemodes/cult/materials.dm index 6b1165f2f05a..e014bd441ec4 100644 --- a/mods/gamemodes/cult/materials.dm +++ b/mods/gamemodes/cult/materials.dm @@ -4,7 +4,7 @@ icon_base = 'icons/turf/walls/cult.dmi' icon_reinf = 'icons/turf/walls/reinforced_cult.dmi' color = "#402821" - shard_type = SHARD_STONE_PIECE + shard_name = SHARD_STONE_PIECE conductive = 0 construction_difficulty = MAT_VALUE_NORMAL_DIY hidden_from_codex = TRUE diff --git a/mods/gamemodes/cult/mobs/constructs/constructs.dm b/mods/gamemodes/cult/mobs/constructs/constructs.dm index ce9913eb9f33..228b834cc2d9 100644 --- a/mods/gamemodes/cult/mobs/constructs/constructs.dm +++ b/mods/gamemodes/cult/mobs/constructs/constructs.dm @@ -79,14 +79,14 @@ return return ..() -/mob/living/simple_animal/construct/show_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) +/mob/living/simple_animal/construct/get_other_examine_strings(mob/user, distance, infix, suffix, hideflags, decl/pronouns/pronouns) . = ..(user) var/current_max_health = get_max_health() if(current_health < current_max_health) if(current_health >= current_max_health/2) - to_chat(user, SPAN_WARNING("It looks slightly dented.")) + . += SPAN_WARNING("It looks slightly dented.") else - to_chat(user, SPAN_DANGER("It looks severely dented!")) + . += SPAN_DANGER("It looks severely dented!") /////////////////Juggernaut/////////////// diff --git a/mods/gamemodes/cult/mobs/constructs/soulstone.dm b/mods/gamemodes/cult/mobs/constructs/soulstone.dm index 69e5d0ef21e4..19e1c55448e9 100644 --- a/mods/gamemodes/cult/mobs/constructs/soulstone.dm +++ b/mods/gamemodes/cult/mobs/constructs/soulstone.dm @@ -37,14 +37,14 @@ QDEL_NULL(shade) return ..() -/obj/item/soulstone/examine(mob/user) +/obj/item/soulstone/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(full == SOULSTONE_EMPTY) - to_chat(user, "The shard still flickers with a fraction of the full artifact's power, but it needs to be filled with the essence of someone's life before it can be used.") + . += "The shard still flickers with a fraction of the full artifact's power, but it needs to be filled with the essence of someone's life before it can be used." if(full == SOULSTONE_ESSENCE) - to_chat(user,"The shard has gone transparent, a seeming window into a dimension of unspeakable horror.") + . += "The shard has gone transparent, a seeming window into a dimension of unspeakable horror." if(full == SOULSTONE_CRACKED) - to_chat(user, "This one is cracked and useless.") + . += "This one is cracked and useless." /obj/item/soulstone/attackby(var/obj/item/I, var/mob/user) if(is_evil && istype(I, /obj/item/nullrod)) diff --git a/mods/gamemodes/cult/ritual.dm b/mods/gamemodes/cult/ritual.dm index 72d49fc92495..a6c6a1a3f748 100644 --- a/mods/gamemodes/cult/ritual.dm +++ b/mods/gamemodes/cult/ritual.dm @@ -17,12 +17,12 @@ else to_chat(user, "Hold \the [src] in your hand while drawing a rune to use it.") -/obj/item/book/tome/examine(mob/user) +/obj/item/book/tome/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(!iscultist(user)) - to_chat(user, "An old, dusty tome with frayed edges and a sinister looking cover.") + if(iscultist(user)) + . += "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though." else - to_chat(user, "The scriptures of Nar-Sie, The One Who Sees, The Geometer of Blood. Contains the details of every ritual his followers could think of. Most of these are useless, though.") + . += "An old, dusty tome with frayed edges and a sinister looking cover." /obj/item/book/tome/afterattack(var/atom/A, var/mob/user, var/proximity) if(!proximity || !iscultist(user)) diff --git a/mods/gamemodes/cult/runes.dm b/mods/gamemodes/cult/runes.dm index c8e47d2bed60..4ed65a929f5f 100644 --- a/mods/gamemodes/cult/runes.dm +++ b/mods/gamemodes/cult/runes.dm @@ -39,18 +39,18 @@ color = bcolor desc = "A strange collection of symbols drawn in [blood]." -/obj/effect/rune/examine(mob/user) +/obj/effect/rune/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(iscultist(user)) - to_chat(user, "This is \a [cultname] rune.") + . += "This is \a [cultname] rune." -/obj/effect/rune/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/book/tome) && iscultist(user)) - user.visible_message(SPAN_NOTICE("[user] rubs \the [src] with \the [I], and \the [src] is absorbed by it."), "You retrace your steps, carefully undoing the lines of \the [src].") +/obj/effect/rune/attackby(var/obj/item/used_item, var/mob/user) + if(istype(used_item, /obj/item/book/tome) && iscultist(user)) + user.visible_message(SPAN_NOTICE("[user] rubs \the [src] with \the [used_item], and \the [src] is absorbed by it."), "You retrace your steps, carefully undoing the lines of \the [src].") qdel(src) return TRUE - else if(istype(I, /obj/item/nullrod)) - user.visible_message(SPAN_NOTICE("[user] hits \the [src] with \the [I], and it disappears, fizzling."), SPAN_NOTICE("You disrupt the vile magic with the deadening field of \the [I]."), "You hear a fizzle.") + else if(istype(used_item, /obj/item/nullrod)) + user.visible_message(SPAN_NOTICE("[user] hits \the [src] with \the [used_item], and it disappears, fizzling."), SPAN_NOTICE("You disrupt the vile magic with the deadening field of \the [used_item]."), "You hear a fizzle.") qdel(src) return TRUE return ..() @@ -177,10 +177,10 @@ A.forceMove(T) return ..() -/obj/effect/rune/teleport/examine(mob/user) +/obj/effect/rune/teleport/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(iscultist(user)) - to_chat(user, "Its name is [destination].") + . += "Its name is [destination]." /obj/effect/rune/teleport/cast(var/mob/living/user) if(user.loc == src) @@ -297,16 +297,16 @@ rune = null return ..() -/obj/effect/cultwall/examine(mob/user) +/obj/effect/cultwall/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(iscultist(user)) var/current_max_health = get_max_health() if(current_health == current_max_health) - to_chat(user, SPAN_NOTICE("It is fully intact.")) + . += SPAN_NOTICE("It is fully intact.") else if(current_health > current_max_health * 0.5) - to_chat(user, SPAN_WARNING("It is damaged.")) + . += SPAN_WARNING("It is damaged.") else - to_chat(user, SPAN_DANGER("It is about to dissipate.")) + . += SPAN_DANGER("It is about to dissipate.") /obj/effect/cultwall/attack_hand(var/mob/user) SHOULD_CALL_PARENT(FALSE) @@ -317,15 +317,15 @@ to_chat(user, SPAN_NOTICE("You touch \the [src]. It feels wet and becomes harder the further you push your arm.")) return TRUE -/obj/effect/cultwall/attackby(var/obj/item/I, var/mob/user) - if(istype(I, /obj/item/nullrod)) - user.visible_message(SPAN_NOTICE("\The [user] touches \the [src] with \the [I], and it disappears."), SPAN_NOTICE("You disrupt the vile magic with the deadening field of \the [I].")) +/obj/effect/cultwall/attackby(var/obj/item/used_item, var/mob/user) + if(istype(used_item, /obj/item/nullrod)) + user.visible_message(SPAN_NOTICE("\The [user] touches \the [src] with \the [used_item], and it disappears."), SPAN_NOTICE("You disrupt the vile magic with the deadening field of \the [used_item].")) qdel(src) return TRUE - var/force = I.expend_attack_force(user) + var/force = used_item.expend_attack_force(user) if(force) - user.visible_message(SPAN_NOTICE("\The [user] hits \the [src] with \the [I]."), SPAN_NOTICE("You hit \the [src] with \the [I].")) - take_damage(force, I.atom_damage_type) + user.visible_message(SPAN_NOTICE("\The [user] hits \the [src] with \the [used_item]."), SPAN_NOTICE("You hit \the [src] with \the [used_item].")) + take_damage(force, used_item.atom_damage_type) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) user.do_attack_animation(src) return TRUE @@ -442,8 +442,8 @@ var/obj/item/backpack/cultpack/C = new /obj/item/backpack/cultpack(user) user.equip_to_slot_or_del(C, slot_back_str) if(C) - for(var/obj/item/I in O) - I.forceMove(C) + for(var/obj/item/thing in O) + thing.forceMove(C) else if(!O) var/obj/item/backpack/cultpack/C = new /obj/item/backpack/cultpack(user) user.equip_to_slot_or_del(C, slot_back_str) @@ -576,16 +576,16 @@ if(!charges) return statuses var/list/obj/item/organ/damaged = list() - for(var/obj/item/organ/I in user.internal_organs) - if(I.damage) - damaged += I + for(var/obj/item/organ/internal/organ in user.internal_organs) + if(organ.get_organ_damage()) + damaged += organ if(damaged.len) statuses += "you feel pain inside for a moment that passes quickly" while(charges && damaged.len) - var/obj/item/organ/fix = pick(damaged) - fix.damage = max(0, fix.damage - min(charges, 1)) + var/obj/item/organ/internal/fix = pick(damaged) + fix.adjust_organ_damage(-(min(charges, 1))) charges = max(charges - 1, 0) - if(fix.damage == 0) + if(fix.get_organ_damage() <= 0) damaged -= fix return statuses diff --git a/mods/gamemodes/heist/heist_base.dmm b/mods/gamemodes/heist/heist_base.dmm index 5a445c37f40b..656c74be4a27 100644 --- a/mods/gamemodes/heist/heist_base.dmm +++ b/mods/gamemodes/heist/heist_base.dmm @@ -830,7 +830,7 @@ /turf/floor/shuttle/red, /area/map_template/skipjack_station/start) "cL" = ( -/obj/structure/bed/chair/shuttle{ +/obj/structure/chair/shuttle{ dir = 8 }, /turf/floor/shuttle/red, @@ -856,7 +856,7 @@ /turf/floor/shuttle/red, /area/map_template/skipjack_station/start) "cN" = ( -/obj/structure/bed/chair/office/light{ +/obj/structure/chair/office/light{ dir = 4 }, /turf/floor/shuttle/red, @@ -1229,7 +1229,7 @@ /turf/floor/plating, /area/map_template/skipjack_station/start) "dM" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /obj/machinery/light/small{ @@ -1243,7 +1243,7 @@ /turf/floor/shuttle/red, /area/map_template/skipjack_station/start) "dO" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /obj/machinery/light/small{ @@ -1298,7 +1298,7 @@ /turf/floor/plating, /area/map_template/skipjack_station/start) "dX" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/floor/shuttle/red, @@ -1310,7 +1310,7 @@ /turf/floor/shuttle/red, /area/map_template/skipjack_station/start) "dZ" = ( -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 8 }, /turf/floor/shuttle/red, diff --git a/mods/gamemodes/ninja/maps/ninja_base.dmm b/mods/gamemodes/ninja/maps/ninja_base.dmm index 9b4d2bb2ad4f..f4de17a60585 100644 --- a/mods/gamemodes/ninja/maps/ninja_base.dmm +++ b/mods/gamemodes/ninja/maps/ninja_base.dmm @@ -896,7 +896,7 @@ /area/map_template/ninja_dojo/start) "cS" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/bed/chair{ +/obj/structure/chair{ dir = 4 }, /turf/unsimulated/floor/dark, @@ -976,7 +976,7 @@ /turf/unsimulated/floor/dark, /area/map_template/ninja_dojo/start) "da" = ( -/obj/structure/bed/chair/shuttle, +/obj/structure/chair/shuttle, /turf/unsimulated/floor/dark, /area/map_template/ninja_dojo/start) "db" = ( diff --git a/mods/mobs/dionaea/icons/ui_hands.dmi b/mods/mobs/dionaea/icons/ui_hands.dmi index 422a397d49ba..c17a1f29ca11 100644 Binary files a/mods/mobs/dionaea/icons/ui_hands.dmi and b/mods/mobs/dionaea/icons/ui_hands.dmi differ diff --git a/mods/mobs/dionaea/mob/_nymph.dm b/mods/mobs/dionaea/mob/_nymph.dm index 296d0a20e8bc..d3e6f257ebe2 100644 --- a/mods/mobs/dionaea/mob/_nymph.dm +++ b/mods/mobs/dionaea/mob/_nymph.dm @@ -24,7 +24,7 @@ can_pull_mobs = MOB_PULL_SMALLER holder_type = /obj/item/holder/diona - possession_candidate = 1 + possession_candidate = TRUE atom_flags = ATOM_FLAG_NO_CHEM_CHANGE hud_used = /datum/hud/diona_nymph diff --git a/mods/mobs/dionaea/mob/gestalt/_gestalt.dm b/mods/mobs/dionaea/mob/gestalt/_gestalt.dm index c9475121df87..d4216b018272 100644 --- a/mods/mobs/dionaea/mob/gestalt/_gestalt.dm +++ b/mods/mobs/dionaea/mob/gestalt/_gestalt.dm @@ -40,6 +40,7 @@ nymphs.Cut() . = ..() -/obj/structure/diona_gestalt/examine(mob/user) +/obj/structure/diona_gestalt/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(nymphs) to_chat(user, "It seems to be composed of at least [nymphs.len] nymph\s.") + if(nymphs) + . += "It seems to be composed of at least [nymphs.len] nymph\s." diff --git a/mods/pyrelight/plants/plants_fruit.dm b/mods/pyrelight/plants/plants_fruit.dm index 3fd545216628..c68bfeb162cd 100644 --- a/mods/pyrelight/plants/plants_fruit.dm +++ b/mods/pyrelight/plants/plants_fruit.dm @@ -41,14 +41,17 @@ for(var/i = 1 to remaining) add_overlay(image(icon, "[comp.icon_state][++comp_count[comp.name]]")) -/obj/item/food/fruit/examine(mob/user, distance) +/obj/item/food/fruit/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance > 1) return - if(examine_info && (!examine_info_skill || !examine_info_rank || user.skill_check(examine_info_skill, examine_info_rank))) - to_chat(user, examine_info) + . += examine_info +/obj/item/food/fruit/get_examine_hints(mob/user, distance, infix, suffix) + . = ..() + if(distance > 1) + return var/list/fruit_comp_strings = list() for(var/datum/fruit_segment/comp as anything in get_composition()) var/remaining = comp.dissect_amount - LAZYACCESS(removed_segments, comp) @@ -65,7 +68,7 @@ for(var/comp_string in fruit_comp_strings[comp_ind]) comp_string_comps += "[fruit_comp_strings[comp_ind][comp_string]] [comp_string]\s" if(length(comp_string_comps)) - to_chat(user, SPAN_NOTICE("With [comp_ind], you could harvest [english_list(comp_string_comps)].")) + LAZYADD(., SPAN_NOTICE("With [comp_ind], you could harvest [english_list(comp_string_comps)].")) /obj/item/food/fruit/attackby(obj/item/W, mob/living/user) if(!user?.check_intent(I_FLAG_HARM)) diff --git a/mods/pyrelight/plants/plants_fruit_segment.dm b/mods/pyrelight/plants/plants_fruit_segment.dm index 4541d1061d69..c1cbe47dd5b4 100644 --- a/mods/pyrelight/plants/plants_fruit_segment.dm +++ b/mods/pyrelight/plants/plants_fruit_segment.dm @@ -32,7 +32,7 @@ reagents.add_reagent(rid, fruit_template.reagents[rid]) return ..() -/obj/item/food/fruit_segment/examine(mob/user, distance) +/obj/item/food/fruit_segment/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if(distance <= 1 && fruit_template.examine_info && (!fruit_template.examine_info_skill || !fruit_template.examine_info_rank || user.skill_check(fruit_template.examine_info_skill, fruit_template.examine_info_rank))) - to_chat(user, fruit_template.examine_info) + . += fruit_template.examine_info diff --git a/mods/pyrelight/undead/undead_zombie.dm b/mods/pyrelight/undead/undead_zombie.dm index 71da5e1ade31..2537b7642145 100644 --- a/mods/pyrelight/undead/undead_zombie.dm +++ b/mods/pyrelight/undead/undead_zombie.dm @@ -19,9 +19,15 @@ for(var/obj/item/organ/organ in get_organs()) organ.die() - organ.damage = 0 // die() sets to max damage organ.germ_level = INFECTION_LEVEL_THREE + // die() sets to max damage + for(var/obj/item/organ/internal/organ in get_internal_organs()) + organ.set_organ_damage(0) + for(var/obj/item/organ/external/limb in get_internal_organs()) + limb.brute_dam = 0 + limb.burn_dam = 0 + // Set this so nonhumans look appropriately gross. reset_hair() if(get_bodytype()?.appearance_flags & HAS_SKIN_COLOR) diff --git a/mods/species/ascent/_ascent.dme b/mods/species/ascent/_ascent.dme index 461ef828f3a8..acb7c9b9a93e 100644 --- a/mods/species/ascent/_ascent.dme +++ b/mods/species/ascent/_ascent.dme @@ -40,7 +40,6 @@ #include "mobs\nymph\nymph_inventory.dm" #include "mobs\nymph\nymph_life.dm" #include "mobs\nymph\nymph_ui.dm" -#include "structures\furniture.dm" #include "structures\ship_furniture.dm" #include "turfs\ship.dm" // END_INCLUDE diff --git a/mods/species/ascent/icons/ascent_bucket.dmi b/mods/species/ascent/icons/ascent_bucket.dmi new file mode 100644 index 000000000000..b9838cae4f9b Binary files /dev/null and b/mods/species/ascent/icons/ascent_bucket.dmi differ diff --git a/mods/species/ascent/icons/furniture/chair_nest.dmi b/mods/species/ascent/icons/furniture/chair_nest.dmi new file mode 100644 index 000000000000..d4e79af000c0 Binary files /dev/null and b/mods/species/ascent/icons/furniture/chair_nest.dmi differ diff --git a/mods/species/ascent/icons/furniture/chair_nest_large.dmi b/mods/species/ascent/icons/furniture/chair_nest_large.dmi new file mode 100644 index 000000000000..b95c2c1a338a Binary files /dev/null and b/mods/species/ascent/icons/furniture/chair_nest_large.dmi differ diff --git a/mods/species/ascent/icons/ui_hands.dmi b/mods/species/ascent/icons/ui_hands.dmi index c479fd124136..d60c12b14431 100644 Binary files a/mods/species/ascent/icons/ui_hands.dmi and b/mods/species/ascent/icons/ui_hands.dmi differ diff --git a/mods/species/ascent/items/id_control.dm b/mods/species/ascent/items/id_control.dm index a3fb7a4b25f0..b5d09fe55e4a 100644 --- a/mods/species/ascent/items/id_control.dm +++ b/mods/species/ascent/items/id_control.dm @@ -64,9 +64,9 @@ /obj/item/organ/internal/controller/GetIdCards(list/exceptions) . = ..() //Not using is_broken() because it should be able to function when CUT_AWAY is set - if(id_card && damage < min_broken_damage && !is_type_in_list(id_card, exceptions)) + if(id_card && _organ_damage < min_broken_damage && !is_type_in_list(id_card, exceptions)) LAZYDISTINCTADD(., id_card) /obj/item/organ/internal/controller/GetAccess() - if(damage < min_broken_damage) + if(_organ_damage < min_broken_damage) return id_card?.GetAccess() diff --git a/mods/species/ascent/items/tools.dm b/mods/species/ascent/items/tools.dm index 663a47ca6ea5..ddd9fceb544d 100644 --- a/mods/species/ascent/items/tools.dm +++ b/mods/species/ascent/items/tools.dm @@ -28,7 +28,7 @@ MANTIDIFY(/obj/item/tank/jetpack/carbondioxide, "maneuvering pack", "pr /obj/item/chems/glass/bucket/ascent name = "portable liquid cleaning agent carrier" desc = "An alien container of some sort." - icon = 'mods/species/ascent/icons/ascent_doodads.dmi' + icon = 'mods/species/ascent/icons/ascent_bucket.dmi' /obj/item/knife/kitchen/cleaver/ascent name = "xenobiological flenser" diff --git a/mods/species/ascent/mobs/insectoid_egg.dm b/mods/species/ascent/mobs/insectoid_egg.dm index 74619efb53e9..685b62a50aa4 100644 --- a/mods/species/ascent/mobs/insectoid_egg.dm +++ b/mods/species/ascent/mobs/insectoid_egg.dm @@ -50,25 +50,23 @@ var/global/default_gyne else icon_state = "egg" -/obj/structure/insectoid_egg/examine(mob/user) +/obj/structure/insectoid_egg/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - if(hatched || !current_health) - to_chat(user, "\icon[src] \The [src] lays in shambles, having been hatched or broken.") + . += "\icon[src] \The [src] lays in shambles, having been hatched or broken." return - if(maturity < 5) - to_chat(user, "\icon[src] \The [src] is freshly laid and sticky.") + . += "\icon[src] \The [src] is freshly laid and sticky." else if(maturity < 15) - to_chat(user, "\icon[src] \The [src] is small and still to the touch.") + . += "\icon[src] \The [src] is small and still to the touch." else if(maturity < 30) - to_chat(user, "\icon[src] \The [src] has swollen in size; a faint glow can be seen inside the shell.") + . += "\icon[src] \The [src] has swollen in size; a faint glow can be seen inside the shell." else if(maturity < 50) - to_chat(user, "\icon[src] \The [src] emanates a faint glow and moves from time to time.") + . += "\icon[src] \The [src] emanates a faint glow and moves from time to time." else if(maturity < 75) - to_chat(user, "\icon[src] \The [src] appears to be close to hatching.") + . += "\icon[src] \The [src] appears to be close to hatching." else - to_chat(user, "\icon[src] \The [src] is lively and appears ready to hatch at any moment.") + . += "\icon[src] \The [src] is lively and appears ready to hatch at any moment." /obj/structure/insectoid_egg/Process() if(!current_health || hatched || hatching || (world.time <= (last_tick + maturity_rate))) diff --git a/mods/species/ascent/mobs/nymph/_nymph.dm b/mods/species/ascent/mobs/nymph/_nymph.dm index f9ed8bb3b4a2..a1ea74d77e3c 100644 --- a/mods/species/ascent/mobs/nymph/_nymph.dm +++ b/mods/species/ascent/mobs/nymph/_nymph.dm @@ -27,7 +27,7 @@ can_pull_mobs = MOB_PULL_SMALLER holder_type = /obj/item/holder/ascent_nymph - possession_candidate = 1 + possession_candidate = TRUE atom_flags = ATOM_FLAG_NO_CHEM_CHANGE hud_used = /datum/hud/ascent_nymph diff --git a/mods/species/ascent/structures/furniture.dm b/mods/species/ascent/structures/furniture.dm deleted file mode 100644 index 4971e1130479..000000000000 --- a/mods/species/ascent/structures/furniture.dm +++ /dev/null @@ -1,17 +0,0 @@ -MANTIDIFY(/obj/structure/bed/chair/padded/purple, "mantid nest", "resting place") - -/obj/structure/bed/chair/padded/purple/ascent - icon_state = "nest_chair" - pixel_z = 0 - -/obj/structure/bed/chair/padded/purple/ascent/gyne - name = "mantid throne" - icon_state = "nest_chair_large" - -/obj/structure/ascent_spawn - name = "mantid cryotank" - desc = "A liquid-filled, cloudy tank with strange forms twitching inside." - icon = 'icons/obj/cryogenics.dmi' - icon_state = "cellold2" - anchored = TRUE - density = TRUE diff --git a/mods/species/ascent/structures/ship_furniture.dm b/mods/species/ascent/structures/ship_furniture.dm index 1e29e7d74d7b..d9192bf07875 100644 --- a/mods/species/ascent/structures/ship_furniture.dm +++ b/mods/species/ascent/structures/ship_furniture.dm @@ -1,12 +1,11 @@ -MANTIDIFY(/obj/structure/bed/chair/padded/purple, "mantid nest", "resting place") +MANTIDIFY(/obj/structure/chair/padded/purple, "mantid nest", "resting place") // sets up name, description and color -/obj/structure/bed/chair/padded/purple/ascent - icon_state = "nest_chair" - pixel_z = 0 +/obj/structure/chair/padded/purple/ascent // sets up icon and offsets + icon = 'mods/species/ascent/icons/furniture/chair_nest.dmi' -/obj/structure/bed/chair/padded/purple/ascent/gyne +/obj/structure/chair/padded/purple/ascent/gyne name = "mantid throne" - icon_state = "nest_chair_large" + icon = 'mods/species/ascent/icons/furniture/chair_nest_large.dmi' /obj/structure/ascent_spawn name = "mantid cryotank" diff --git a/mods/species/ascent/turfs/ship.dm b/mods/species/ascent/turfs/ship.dm index 1886013ae555..e62ba1cbab16 100644 --- a/mods/species/ascent/turfs/ship.dm +++ b/mods/species/ascent/turfs/ship.dm @@ -17,40 +17,46 @@ broken_states = null /turf/wall/ascent - color = COLOR_PURPLE + color = COLOR_PURPLE /turf/wall/ascent/on_update_icon() . = ..() - color = COLOR_PURPLE + color = COLOR_PURPLE /turf/wall/r_wall/ascent - color = COLOR_PURPLE + color = COLOR_PURPLE /turf/wall/r_wall/ascent/on_update_icon() . = ..() - color = COLOR_PURPLE + color = COLOR_PURPLE /turf/floor/shuttle_ceiling/ascent - color = COLOR_PURPLE - icon_state = "jaggy" - icon = 'icons/turf/flooring/alium.dmi' + color = COLOR_PURPLE + icon_state = "jaggy" + icon = 'icons/turf/flooring/alium.dmi' /turf/floor/ascent - name = "mantid plating" - color = COLOR_GRAY20 - initial_gas = list(/decl/material/gas/methyl_bromide = MOLES_CELLSTANDARD * 0.5, /decl/material/gas/oxygen = MOLES_CELLSTANDARD * 0.5) + name = "mantid plating" + color = COLOR_GRAY20 _base_flooring = /decl/flooring/plating/ascent - icon_state = "curvy" - icon = 'icons/turf/flooring/alium.dmi' + icon_state = "curvy" + icon = 'icons/turf/flooring/alium.dmi' + initial_gas = list( + /decl/material/gas/methyl_bromide = MOLES_CELLSTANDARD * 0.5, + /decl/material/gas/oxygen = MOLES_CELLSTANDARD * 0.5 + ) /turf/floor/ascent/Initialize() . = ..() - icon_state = "curvy[rand(0,6)]" + icon_state = "curvy[rand(0,6)]" /turf/floor/tiled/ascent - name = "mantid tiling" - icon_state = "jaggy" - icon = 'icons/turf/flooring/alium.dmi' - color = COLOR_GRAY40 - initial_gas = list(/decl/material/gas/methyl_bromide = MOLES_CELLSTANDARD * 0.5, /decl/material/gas/oxygen = MOLES_CELLSTANDARD * 0.5) - _flooring = /decl/flooring/tiling_ascent + name = "mantid tiling" + icon = 'icons/turf/flooring/alium.dmi' + icon_state = "jaggy" + color = COLOR_GRAY40 + _flooring = /decl/flooring/tiling_ascent + initial_gas = list( + /decl/material/gas/methyl_bromide = MOLES_CELLSTANDARD * 0.5, + /decl/material/gas/oxygen = MOLES_CELLSTANDARD * 0.5 + ) diff --git a/mods/species/serpentid/mobs/bodyparts_serpentid.dm b/mods/species/serpentid/mobs/bodyparts_serpentid.dm index 55aa7fd4eff7..6073d5f39044 100644 --- a/mods/species/serpentid/mobs/bodyparts_serpentid.dm +++ b/mods/species/serpentid/mobs/bodyparts_serpentid.dm @@ -13,7 +13,7 @@ /obj/item/organ/internal/eyes/insectoid/serpentid/additional_flash_effects(var/intensity) if(!eyes_shielded) - take_internal_damage(max(0, 4 * (intensity))) + take_damage(max(0, 4 * (intensity))) return 1 else return -1 @@ -78,7 +78,7 @@ if(breath_fail_ratio < 0.25 && oxygenated) SET_HUD_ALERT(H, HUD_OXY, 0) - if(breath_fail_ratio >= 0.25 && (damage || world.time > last_successful_breath + 2 MINUTES)) + if(breath_fail_ratio >= 0.25 && (_organ_damage || world.time > last_successful_breath + 2 MINUTES)) H.take_damage(HUMAN_MAX_OXYLOSS * breath_fail_ratio, OXY) if(oxygenated) SET_HUD_ALERT(H, HUD_OXY, 1) @@ -118,7 +118,7 @@ to_chat(owner, "Your body is barely functioning and is starting to shut down.") SET_STATUS_MAX(owner, STAT_PARA, 2) var/obj/item/organ/internal/I = pick(owner.internal_organs) - I.take_internal_damage(5) + I.take_damage(5) ..() /obj/item/organ/external/chest/insectoid/serpentid diff --git a/mods/species/skrell/turfs/flooring.dm b/mods/species/skrell/turfs/flooring.dm index 255c64ebb71b..8ddfdf54d665 100644 --- a/mods/species/skrell/turfs/flooring.dm +++ b/mods/species/skrell/turfs/flooring.dm @@ -1,33 +1,33 @@ /turf/floor/tiled/skrell - icon = 'mods/species/skrell/icons/turf/skrellturf.dmi' + icon = 'mods/species/skrell/icons/turf/skrellturf.dmi' icon_state = "skrellblack" - _flooring = /decl/flooring/reinforced/shuttle/skrell + _flooring = /decl/flooring/reinforced/shuttle/skrell /turf/floor/tiled/skrell/white icon_state = "skrellwhite" - _flooring = /decl/flooring/reinforced/shuttle/skrell/white + _flooring = /decl/flooring/reinforced/shuttle/skrell/white /turf/floor/tiled/skrell/red icon_state = "skrellred" - _flooring = /decl/flooring/reinforced/shuttle/skrell/red + _flooring = /decl/flooring/reinforced/shuttle/skrell/red /turf/floor/tiled/skrell/blue icon_state = "skrellblue" - _flooring = /decl/flooring/reinforced/shuttle/skrell/blue + _flooring = /decl/flooring/reinforced/shuttle/skrell/blue /turf/floor/tiled/skrell/orange icon_state = "skrellorange" - _flooring = /decl/flooring/reinforced/shuttle/skrell/orange + _flooring = /decl/flooring/reinforced/shuttle/skrell/orange /turf/floor/tiled/skrell/green icon_state = "skrellgreen" - _flooring = /decl/flooring/reinforced/shuttle/skrell/green + _flooring = /decl/flooring/reinforced/shuttle/skrell/green ///////////////////////////////////////////////////////////////////////// /decl/flooring/reinforced/shuttle/skrell - icon = 'mods/species/skrell/icons/turf/skrellturf.dmi' - icon_base = "skrellblack" + icon = 'mods/species/skrell/icons/turf/skrellturf.dmi' + icon_base = "skrellblack" /decl/flooring/reinforced/shuttle/skrell/white icon_base = "skrellwhite" @@ -42,4 +42,4 @@ icon_base = "skrellorange" /decl/flooring/reinforced/shuttle/skrell/green - icon_base = "skrellgreen" \ No newline at end of file + icon_base = "skrellgreen" diff --git a/mods/species/vox/gear/gear_shoes.dm b/mods/species/vox/gear/gear_shoes.dm index 2e44270e3e54..fcb9d4e39cfb 100644 --- a/mods/species/vox/gear/gear_shoes.dm +++ b/mods/species/vox/gear/gear_shoes.dm @@ -39,7 +39,7 @@ canremove = TRUE update_icon() -/obj/item/clothing/shoes/magboots/vox/examine(mob/user) +/obj/item/clothing/shoes/magboots/vox/get_examine_strings(mob/user, distance, infix, suffix) . = ..() if (magpulse) - to_chat(user, "It would be hard to take these off without relaxing your grip first.")//theoretically this message should only be seen by the wearer when the claws are equipped. + . += "It would be hard to take these off without relaxing your grip first." diff --git a/mods/species/vox/gear/gun_spikethrower.dm b/mods/species/vox/gear/gun_spikethrower.dm index a3270b98636f..25461355159c 100644 --- a/mods/species/vox/gear/gun_spikethrower.dm +++ b/mods/species/vox/gear/gun_spikethrower.dm @@ -21,9 +21,9 @@ last_regen = world.time update_icon() -/obj/item/gun/launcher/alien/examine(mob/user) +/obj/item/gun/launcher/alien/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - to_chat(user, "It has [ammo] [ammo_name]\s remaining.") + . += "It has [ammo] [ammo_name]\s remaining." /obj/item/gun/launcher/alien/consume_next_projectile() if(ammo < 1) return null diff --git a/mods/species/vox/organs_vox.dm b/mods/species/vox/organs_vox.dm index 7933c8f41a41..e2e43ad49331 100644 --- a/mods/species/vox/organs_vox.dm +++ b/mods/species/vox/organs_vox.dm @@ -183,18 +183,17 @@ . = ..(mapload, material_key, supplied_appearance, dna_species?.base_internal_prosthetics_model) do_backup() -/obj/item/organ/internal/voxstack/examine(mob/user) +/obj/item/organ/internal/voxstack/get_examine_strings(mob/user, distance, infix, suffix) . = ..() - var/user_vox = user.get_species_name() == SPECIES_VOX // TODO use bodytype flags instead so subspecies are included if (istype(backup)) var/owner_viable = find_dead_player(stored_ckey, TRUE) if (user_vox) - to_chat(user, SPAN_NOTICE("The integrity light on [src] blinks [owner_viable ? "rapidly. It can be implanted." : "slowly. It is dormant."]")) + . += SPAN_NOTICE("The integrity light on [src] blinks [owner_viable ? "rapidly. It can be implanted." : "slowly. It is dormant."]") else - to_chat(user, SPAN_NOTICE("A light on [src] blinks [owner_viable ? "rapidly" : "slowly"].")) + . += SPAN_NOTICE("A light on [src] blinks [owner_viable ? "rapidly" : "slowly"].") else if (user_vox) - to_chat(user, SPAN_NOTICE("The integrity light on [src] is off. It is empty and lifeless.")) + . += SPAN_NOTICE("The integrity light on [src] is off. It is empty and lifeless.") /obj/item/organ/internal/voxstack/emp_act() return @@ -236,9 +235,9 @@ /obj/item/organ/internal/voxstack/on_remove_effects(mob/living/last_owner) var/obj/item/organ/external/head = GET_EXTERNAL_ORGAN(last_owner, parent_organ) last_owner.visible_message(SPAN_DANGER("\The [src] rips gaping holes in \the [last_owner]'s [head.name] as it is torn loose!")) - head.take_external_damage(rand(15,20)) + head.take_damage(rand(15,20)) for(var/obj/item/organ/internal/O in head.contents) - O.take_internal_damage(rand(30,70)) + O.take_damage(rand(30,70)) do_backup() ..() diff --git a/mods/~compatibility/patches/fantasy.dm b/mods/~compatibility/patches/fantasy.dm index 4b4d6f7feaba..b0abba63bcd4 100644 --- a/mods/~compatibility/patches/fantasy.dm +++ b/mods/~compatibility/patches/fantasy.dm @@ -7,3 +7,7 @@ #ifdef MODPACK_ITEM_SHARPENING #include "fantasy/whetstone_fantasy.dm" #endif + +#ifdef MODPACK_BLACKSMITHY +#include "fantasy/forging_fantasy.dm" +#endif \ No newline at end of file diff --git a/mods/~compatibility/patches/fantasy/forging_fantasy.dm b/mods/~compatibility/patches/fantasy/forging_fantasy.dm new file mode 100644 index 000000000000..6de02a927d29 --- /dev/null +++ b/mods/~compatibility/patches/fantasy/forging_fantasy.dm @@ -0,0 +1,2 @@ +/decl/forging_step + work_skill = SKILL_METALWORK diff --git a/nebula.dme b/nebula.dme index f02a17d70440..7fba6e1968a5 100644 --- a/nebula.dme +++ b/nebula.dme @@ -485,6 +485,7 @@ #include "code\datums\extensions\multitool\items\items.dm" #include "code\datums\extensions\multitool\items\stock_parts_radio.dm" #include "code\datums\extensions\on_click\turf_hand.dm" +#include "code\datums\extensions\padding\padding.dm" #include "code\datums\extensions\resistable\resistable.dm" #include "code\datums\extensions\shearable\shearable.dm" #include "code\datums\genetics\genetic_conditions.dm" @@ -1476,6 +1477,7 @@ #include "code\game\objects\structures\target_stake.dm" #include "code\game\objects\structures\town_bell.dm" #include "code\game\objects\structures\transit_tubes.dm" +#include "code\game\objects\structures\travois.dm" #include "code\game\objects\structures\under_wardrobe.dm" #include "code\game\objects\structures\wall_frame.dm" #include "code\game\objects\structures\wall_sconce.dm" @@ -1493,7 +1495,6 @@ #include "code\game\objects\structures\beds\mattress.dm" #include "code\game\objects\structures\beds\rollerbed.dm" #include "code\game\objects\structures\beds\simple_bed.dm" -#include "code\game\objects\structures\beds\travois.dm" #include "code\game\objects\structures\benches\bench.dm" #include "code\game\objects\structures\benches\lounge.dm" #include "code\game\objects\structures\benches\pew.dm" @@ -1589,6 +1590,7 @@ #include "code\game\turfs\floors\floor_digging.dm" #include "code\game\turfs\floors\floor_height.dm" #include "code\game\turfs\floors\floor_icon.dm" +#include "code\game\turfs\floors\floor_layers.dm" #include "code\game\turfs\floors\floor_materials.dm" #include "code\game\turfs\floors\subtypes\floor_carpet.dm" #include "code\game\turfs\floors\subtypes\floor_circuit.dm" @@ -1808,7 +1810,6 @@ #include "code\modules\awaymissions\corpse.dm" #include "code\modules\awaymissions\exile.dm" #include "code\modules\awaymissions\gateway.dm" -#include "code\modules\awaymissions\loot.dm" #include "code\modules\awaymissions\pamphlet.dm" #include "code\modules\awaymissions\trigger.dm" #include "code\modules\backgrounds\_background.dm" @@ -2521,6 +2522,7 @@ #include "code\modules\genetics\plants\trait_photosynthesis.dm" #include "code\modules\genetics\plants\trait_plant_colour.dm" #include "code\modules\genetics\plants\trait_plant_icon.dm" +#include "code\modules\genetics\plants\trait_pollen.dm" #include "code\modules\genetics\plants\trait_potency.dm" #include "code\modules\genetics\plants\trait_produces_power.dm" #include "code\modules\genetics\plants\trait_product_colour.dm" @@ -2587,7 +2589,6 @@ #include "code\modules\hydroponics\seed_mobs.dm" #include "code\modules\hydroponics\seed_packets.dm" #include "code\modules\hydroponics\seed_storage.dm" -#include "code\modules\hydroponics\beekeeping\beehive.dm" #include "code\modules\hydroponics\plant_types\seeds_herbs.dm" #include "code\modules\hydroponics\plant_types\seeds_misc.dm" #include "code\modules\hydroponics\spreading\spreading.dm" diff --git a/sound/effects/anvil1.ogg b/sound/effects/anvil1.ogg new file mode 100644 index 000000000000..2c29e2427508 Binary files /dev/null and b/sound/effects/anvil1.ogg differ diff --git a/sound/effects/anvil2.ogg b/sound/effects/anvil2.ogg new file mode 100644 index 000000000000..dc7f43ceaa06 Binary files /dev/null and b/sound/effects/anvil2.ogg differ diff --git a/sound/effects/anvil3.ogg b/sound/effects/anvil3.ogg new file mode 100644 index 000000000000..ad3747c0f32f Binary files /dev/null and b/sound/effects/anvil3.ogg differ diff --git a/sound/effects/anvil4.ogg b/sound/effects/anvil4.ogg new file mode 100644 index 000000000000..88da5eb8bb66 Binary files /dev/null and b/sound/effects/anvil4.ogg differ diff --git a/sound/effects/anvil5.ogg b/sound/effects/anvil5.ogg new file mode 100644 index 000000000000..80533e38aebe Binary files /dev/null and b/sound/effects/anvil5.ogg differ diff --git a/test/check-paths.sh b/test/check-paths.sh index 852c681ae6ca..4e2cdcdf3f75 100755 --- a/test/check-paths.sh +++ b/test/check-paths.sh @@ -32,13 +32,13 @@ exactly 2 "/mob text paths" '"/mob' exactly 6 "/obj text paths" '"/obj' exactly 10 "/turf text paths" '"/turf' exactly 1 "world<< uses" 'world\s*<<' -exactly 74 "'in world' uses" '\s+\bin world\b(?=\s*$|\s*//|\s*\))' -P +exactly 75 "'in world' uses" '\s+\bin world\b(?=\s*$|\s*//|\s*\))' -P exactly 1 "world.log<< uses" 'world.log\s*<<' exactly 18 "<< uses" '(?> uses" '(?\\])>>(?!>)' -P exactly 0 "incorrect indentations" '^( {4,})' -P -exactly 23 "text2path uses" 'text2path' +exactly 22 "text2path uses" 'text2path' exactly 4 "update_icon() overrides" '\/update_icon\(' -P exactly 0 "goto uses" '\bgoto\b' exactly 9 "atom/New uses" '^/(obj|atom|area|mob|turf).*/New\(' @@ -49,6 +49,7 @@ exactly 0 "global-marked member variables" '\t+/?var.*/global/' -P exactly 0 "static-marked globally scoped variables" '^/?var.*/static/.+' -P exactly 1 "direct usage of decls_repository.get_decl()" 'decls_repository\.get_decl\(' -P exactly 19 "direct loc set" '[^ ,(/]\bloc\s*=(?!=)' -P +exactly 6 "pronoun macro use" '\\(he|she|him|her|his|hers|himself|herself|He|She|Him|Her|His|Hers|Himself|Herself)\b' -P exactly 0 "magic number mouse opacity set" 'mouse_opacity\s*=\s*[0-2]' -P exactly 0 "magic number density set" '\bdensity\s*=\s*[01]\b' -P exactly 0 "magic number anchored set" '\banchored\s*=\s*[01]\b' -P diff --git a/tools/map_migrations/4344_soup.txt b/tools/map_migrations/4344_soup.txt new file mode 100644 index 000000000000..2c04d0126bc0 --- /dev/null +++ b/tools/map_migrations/4344_soup.txt @@ -0,0 +1,14 @@ +/obj/item/food/beetsoup : /obj/item/chems/glass/bowl/mapped/beet{@OLD} +/obj/item/food/bloodsoup : /obj/item/chems/glass/bowl/mapped/blood{@OLD} +/obj/item/food/meatballsoup : /obj/item/chems/glass/bowl/mapped/meatball{@OLD} +/obj/item/food/milosoup : /obj/item/chems/glass/bowl/mapped/meatball{@OLD} +/obj/item/food/mushroomsoup : /obj/item/chems/glass/bowl/mapped/mushroom{@OLD} +/obj/item/food/vegetablesoup : /obj/item/chems/glass/bowl/mapped/vegetable{@OLD} +/obj/item/food/tomatosoup : /obj/item/chems/glass/bowl/mapped/tomato{@OLD} +/obj/item/food/nettlesoup : /obj/item/chems/glass/bowl/mapped/nettle{@OLD} +/obj/item/food/stew : /obj/item/chems/glass/bowl/mapped/stew{@OLD} +/obj/item/food/hotchili : /obj/item/chems/glass/bowl/mapped/chili/hot{@OLD} +/obj/item/food/coldchili : /obj/item/chems/glass/bowl/mapped/chili/cold{@OLD} +/obj/item/food/katsucurry : /obj/item/chems/glass/bowl/mapped/curry/katsu{@OLD} + +/obj/item/food/mysterysoup : /obj/item/chems/glass/bowl/mystery{@OLD} \ No newline at end of file diff --git a/tools/map_migrations/4533_animal_cubes.txt b/tools/map_migrations/4533_animal_cubes.txt index d1572223795f..1a3a15a3b76f 100644 --- a/tools/map_migrations/4533_animal_cubes.txt +++ b/tools/map_migrations/4533_animal_cubes.txt @@ -1,5 +1,5 @@ /obj/item/box/monkeycubes/spidercubes/@SUBTYPES : /obj/item/box/animal_cubes/spiders/@SUBTYPES{@OLD} -/obj/item/box/monkeycubes/@SUBTYPES : /obj/item/box/animal_cubes/monkey/@SUBTYPES{@OLD} +/obj/item/box/monkeycubes/@SUBTYPES : /obj/item/box/animal_cubes/monkeys/@SUBTYPES{@OLD} /obj/item/food/monkeycube/wrapped/spidercube/@SUBTYPES : /obj/item/food/animal_cube/wrapped/spider/@SUBTYPES{@OLD} /obj/item/food/monkeycube/spidercube/@SUBTYPES : /obj/item/food/animal_cube/spider/@SUBTYPES{@OLD} /obj/item/food/monkeycube/wrapped/@SUBTYPES : /obj/item/food/animal_cube/wrapped/monkey/@SUBTYPES{@OLD} diff --git a/tools/map_migrations/4535_rations_crate.txt b/tools/map_migrations/4535_rations_crate.txt new file mode 100644 index 000000000000..addcc538ebd7 --- /dev/null +++ b/tools/map_migrations/4535_rations_crate.txt @@ -0,0 +1 @@ +/obj/structure/closet/crate/freezer/rations : /obj/structure/closet/crate/plastic/rations{@OLD} \ No newline at end of file diff --git a/tools/map_migrations/4647_dirt.txt b/tools/map_migrations/4647_dirt.txt index 262db2c52ce3..fde23f21533c 100644 --- a/tools/map_migrations/4647_dirt.txt +++ b/tools/map_migrations/4647_dirt.txt @@ -1,2 +1,2 @@ -/obj/effect/decal/cleanable/dirt/@SUBTYPES : /obj/effect/decal/cleanable/dirt/visible/@SUBTYPES{@OLD} +/obj/effect/decal/cleanable/dirt : /obj/effect/decal/cleanable/dirt/visible{@OLD} diff --git a/tools/map_migrations/4740_sulphur_sulfur.txt b/tools/map_migrations/4740_sulphur_sulfur.txt new file mode 100644 index 000000000000..20cc37ab7457 --- /dev/null +++ b/tools/map_migrations/4740_sulphur_sulfur.txt @@ -0,0 +1 @@ +/obj/item/chems/glass/beaker/sulphuric/@SUBTYPES : /obj/item/chems/glass/beaker/sulfuric/@SUBTYPES{@OLD} \ No newline at end of file diff --git a/tools/map_migrations/4790_shuttle_ceilings.txt b/tools/map_migrations/4790_shuttle_ceilings.txt new file mode 100644 index 000000000000..083b1b9f32d6 --- /dev/null +++ b/tools/map_migrations/4790_shuttle_ceilings.txt @@ -0,0 +1 @@ +/turf/unsimulated/floor/shuttle_ceiling : /turf/floor/shuttle_ceiling{@OLD} \ No newline at end of file diff --git a/tools/map_migrations/4838_chairs.txt b/tools/map_migrations/4838_chairs.txt new file mode 100644 index 000000000000..a49c4df623eb --- /dev/null +++ b/tools/map_migrations/4838_chairs.txt @@ -0,0 +1,2 @@ +/obj/structure/bed/chair/janicart/@SUBTYPES : /obj/structure/janicart/@SUBTYPES{@OLD} +/obj/structure/bed/chair/@SUBTYPES : /obj/structure/chair/@SUBTYPES{@OLD} \ No newline at end of file diff --git a/tools/map_migrations/4854_buckets.txt b/tools/map_migrations/4854_buckets.txt new file mode 100644 index 000000000000..e5a8e74319e4 --- /dev/null +++ b/tools/map_migrations/4854_buckets.txt @@ -0,0 +1 @@ +/obj/item/chems/glass/paint/@SUBTYPES : /obj/item/chems/glass/bucket/paint/@SUBTYPES{@OLD}