diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 0512b8ce1e7..dbd392509b6 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -22,11 +22,14 @@ var/obj/screen/action_button/button = null var/button_icon = 'icons/obj/action_buttons/actions.dmi' var/button_icon_state = "default" + /// The icon to use for the background icon state. Defaults to button_icon if unset. + var/background_icon = 'icons/obj/action_buttons/actions.dmi' var/background_icon_state = "bg_default" var/mob/living/owner /datum/action/New(var/Target) target = Target + background_icon ||= button_icon /datum/action/Destroy() if(owner) diff --git a/code/_onclick/hud/screen/screen_action_button.dm b/code/_onclick/hud/screen/screen_action_button.dm index 2681beeabc8..33bf849cb9c 100644 --- a/code/_onclick/hud/screen/screen_action_button.dm +++ b/code/_onclick/hud/screen/screen_action_button.dm @@ -16,7 +16,7 @@ /obj/screen/action_button/on_update_icon() if(!action) return - icon = action.button_icon + icon = action.background_icon icon_state = action.background_icon_state cut_overlays() diff --git a/code/_onclick/hud/screen/screen_maneuver.dm b/code/_onclick/hud/screen/screen_maneuver.dm index 76c524467e5..203bffc6943 100644 --- a/code/_onclick/hud/screen/screen_maneuver.dm +++ b/code/_onclick/hud/screen/screen_maneuver.dm @@ -8,7 +8,7 @@ var/mob/living/user_living = user user_living.prepare_maneuver() -/obj/screen/maneuver/examine(mob/user) +/obj/screen/maneuver/examine(mob/user, distance) . = ..() if(!isliving(user)) return diff --git a/code/datums/supplypacks/galley.dm b/code/datums/supplypacks/galley.dm index c72edc97336..1cbeceeaeff 100644 --- a/code/datums/supplypacks/galley.dm +++ b/code/datums/supplypacks/galley.dm @@ -108,7 +108,7 @@ /obj/item/chems/drinks/bottle/premiumvodka = 3, /obj/item/chems/drinks/bottle/whiskey = 3 ) - containertype = /obj/structure/closet/crate/freezer + containertype = /obj/structure/closet/crate/plastic containername = "premium drinks crate" /decl/hierarchy/supply_pack/galley/barsupplies diff --git a/code/game/objects/items/flame/_flame.dm b/code/game/objects/items/flame/_flame.dm index 72fc0349305..3865a9f8f09 100644 --- a/code/game/objects/items/flame/_flame.dm +++ b/code/game/objects/items/flame/_flame.dm @@ -64,7 +64,7 @@ /obj/item/flame/proc/get_sconce_overlay() return null -/obj/item/flame/get_tool_quality(archetype, property) +/obj/item/flame/get_tool_quality(archetype) return (!lit && archetype == TOOL_CAUTERY) ? TOOL_QUALITY_NONE : ..() /obj/item/flame/proc/has_fuel(amount) diff --git a/code/game/objects/items/weapons/material/swiss.dm b/code/game/objects/items/weapons/material/swiss.dm index f11c1f061be..8ecae6134fa 100644 --- a/code/game/objects/items/weapons/material/swiss.dm +++ b/code/game/objects/items/weapons/material/swiss.dm @@ -19,12 +19,12 @@ material_alteration = MAT_FLAG_ALTERATION_COLOR | MAT_FLAG_ALTERATION_NAME var/active_tool = SWISSKNF_CLOSED - var/can_use_tools = FALSE var/list/tools = list(SWISSKNF_LBLADE, SWISSKNF_CLIFTER, SWISSKNF_COPENER) var/static/list/sharp_tools = list(SWISSKNF_LBLADE, SWISSKNF_SBLADE, SWISSKNF_GBLADE, SWISSKNF_WBLADE) /obj/item/knife/folding/swiss/Initialize(ml, material_key) - set_extension(src, /datum/extension/tool/variable/simple, list( + // Variable tool qualities are handled by proc below. + set_extension(src, /datum/extension/tool, list( TOOL_CROWBAR = TOOL_QUALITY_MEDIOCRE, TOOL_SCREWDRIVER = TOOL_QUALITY_MEDIOCRE, TOOL_WIRECUTTERS = TOOL_QUALITY_MEDIOCRE, @@ -33,16 +33,18 @@ . = ..() /obj/item/knife/folding/swiss/proc/get_tool_archetype() - if(can_use_tools) - if(active_tool == SWISSKNF_CROWBAR) - return TOOL_CROWBAR - if(active_tool == SWISSKNF_CLIFTER || active_tool == SWISSKNF_COPENER) - return TOOL_SCREWDRIVER - if(active_tool == SWISSKNF_WCUTTER) - return TOOL_WIRECUTTERS + if(active_tool == SWISSKNF_CROWBAR) + return TOOL_CROWBAR + if(active_tool == SWISSKNF_CLIFTER || active_tool == SWISSKNF_COPENER) + return TOOL_SCREWDRIVER + if(active_tool == SWISSKNF_WCUTTER) + return TOOL_WIRECUTTERS if(active_tool == SWISSKNF_WBLADE) return TOOL_HATCHET +/obj/item/knife/folding/swiss/get_tool_property(archetype, property) + . = (archetype == get_tool_archetype()) ? ..() : null + /obj/item/knife/folding/swiss/get_tool_speed(archetype) . = (archetype == get_tool_archetype()) ? ..() : 0 @@ -50,6 +52,7 @@ . = (archetype == get_tool_archetype()) ? ..() : 0 /obj/item/knife/folding/swiss/attack_self(mob/user) + var/choice if(user.a_intent != I_HELP && ((SWISSKNF_LBLADE in tools) || (SWISSKNF_SBLADE in tools)) && active_tool == SWISSKNF_CLOSED) open = TRUE @@ -65,7 +68,8 @@ open = FALSE if(!choice || !CanPhysicallyInteract(user)) - return + return TRUE + if(choice == SWISSKNF_CLOSED) open = FALSE user.visible_message("\The [user] closes the [name].") @@ -81,6 +85,7 @@ update_force() update_icon() add_fingerprint(user) + return TRUE /obj/item/knife/folding/swiss/examine(mob/user) . = ..() @@ -115,16 +120,8 @@ /obj/item/knife/folding/swiss/resolve_attackby(obj/target, mob/user) if((istype(target, /obj/structure/window) || istype(target, /obj/structure/grille)) && active_tool == SWISSKNF_GBLADE) force = force * 8 - . = ..() - update_force() - return - if(istype(target, /obj/item)) - if(target.w_class <= ITEM_SIZE_NORMAL) - can_use_tools = TRUE - . = ..() - can_use_tools = FALSE - return - return ..() + . = ..() + update_force() /obj/item/knife/folding/swiss/officer name = "officer's combi-knife" diff --git a/code/game/objects/random/random_multi.dm b/code/game/objects/random/random_multi.dm index aef5ffd5e15..11ad1cd96df 100644 --- a/code/game/objects/random/random_multi.dm +++ b/code/game/objects/random/random_multi.dm @@ -10,6 +10,10 @@ var/id // Group id var/weight // Probability weight for this spawn point +/obj/random_multi/modify_mapped_vars(map_hash) + . = ..() + ADJUST_TAG_VAR(id, map_hash) + /obj/random_multi/Initialize() . = ..() weight = max(1, round(weight)) diff --git a/code/game/objects/random/subtypes/multi.dm b/code/game/objects/random/subtypes/multi.dm index d54cb0b0f02..34cd5d7077e 100644 --- a/code/game/objects/random/subtypes/multi.dm +++ b/code/game/objects/random/subtypes/multi.dm @@ -1,16 +1,22 @@ -/hook/roundstart/proc/generate_multi_spawn_items() +/hook/roundstart/proc/roundstart_multi_spawn() + generate_multi_spawn_items() + return TRUE + +/proc/generate_multi_spawn_items() for(var/id in multi_point_spawns) var/list/spawn_points = multi_point_spawns[id] var/obj/random_multi/rm = pickweight(spawn_points) rm.generate_items() - for(var/entry in spawn_points) - qdel(entry) - return 1 + QDEL_LIST(spawn_points) + LAZYCLEARLIST(multi_point_spawns) /obj/random_multi/single_item var/item_path // Item type to spawn + var/spawn_nothing_chance = 0 /// Chance to spawn nothing. /obj/random_multi/single_item/generate_items() + if(prob(spawn_nothing_chance)) + return new item_path(loc) /obj/random_multi/single_item/captains_spare_id diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index bb9feda3c86..43dff791397 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -77,6 +77,16 @@ desc = "A rectangular plastic crate." closet_appearance = /decl/closet_appearance/crate/plastic +/obj/structure/closet/crate/plastic/rations //For use in the escape shuttle + name = "emergency rations" + desc = "A crate of emergency rations." + +/obj/structure/closet/crate/plastic/rations/WillContain() + return list( + /obj/random/mre = 6, + /obj/item/chems/drinks/cans/waterbottle = 12 + ) + /obj/structure/closet/crate/internals name = "internals crate" desc = "A internals crate." @@ -151,13 +161,6 @@ /obj/structure/closet/crate/freezer/ProcessAtomTemperature() return PROCESS_KILL -/obj/structure/closet/crate/freezer/rations //For use in the escape shuttle - name = "emergency rations" - desc = "A crate of emergency rations." - -/obj/structure/closet/crate/freezer/rations/WillContain() - return list(/obj/random/mre = 6, /obj/item/chems/drinks/cans/waterbottle = 12) - /obj/structure/closet/crate/freezer/meat name = "meat crate" desc = "A crate of meat." diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index c997a7e0780..d5fcfd51455 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -98,6 +98,7 @@ abstract_type = /obj/structure/sign parts_type = /obj/item/sign parts_amount = 1 + material = /decl/material/solid/organic/plastic /obj/structure/sign/Initialize(ml, _mat, _reinf_mat) . = ..() diff --git a/code/modules/atmospherics/_atmos_setup.dm b/code/modules/atmospherics/_atmos_setup.dm index b19e6b1958b..57b3c67d140 100644 --- a/code/modules/atmospherics/_atmos_setup.dm +++ b/code/modules/atmospherics/_atmos_setup.dm @@ -14,7 +14,8 @@ var/global/list/pipe_colors = list( "yellow" = PIPE_COLOR_YELLOW, "black" = PIPE_COLOR_BLACK, "orange" = PIPE_COLOR_ORANGE, - "white" = PIPE_COLOR_WHITE) + "white" = PIPE_COLOR_WHITE, + "dark gray" = COLOR_DARK_GRAY) /proc/pipe_color_check(var/color) if(!color) diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index 7cb0b51b682..57d310f200d 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -36,7 +36,8 @@ W.write("real_name", pref.real_name) W.write("name_is_always_random", pref.be_random_name) var/decl/spawnpoint/spawnpoint = GET_DECL(pref.spawnpoint) - W.write("spawnpoint", spawnpoint.uid) + if(spawnpoint) + W.write("spawnpoint", spawnpoint.uid) /datum/category_item/player_setup_item/physical/basic/sanitize_character() diff --git a/code/modules/clothing/masks/smokable.dm b/code/modules/clothing/masks/smokable.dm index 7227459f044..343fbf0d733 100644 --- a/code/modules/clothing/masks/smokable.dm +++ b/code/modules/clothing/masks/smokable.dm @@ -22,7 +22,7 @@ var/smoke_effect = 0 var/smoke_amount = 1 -/obj/item/clothing/mask/smokable/get_tool_quality(archetype, property) +/obj/item/clothing/mask/smokable/get_tool_quality(archetype) return (!lit && archetype == TOOL_CAUTERY) ? TOOL_QUALITY_NONE : ..() /obj/item/clothing/mask/smokable/dropped(mob/user) diff --git a/code/modules/fabrication/designs/replicator/designs_food.dm b/code/modules/fabrication/designs/replicator/designs_food.dm index 0e281b318f4..5f88f2eedb4 100644 --- a/code/modules/fabrication/designs/replicator/designs_food.dm +++ b/code/modules/fabrication/designs/replicator/designs_food.dm @@ -2,6 +2,28 @@ fabricator_types = list(FABRICATOR_CLASS_FOOD) path = /obj/item/chems/food/tofurkey +// Remove matter from plates from the recipe, since we don't print food with plates. +/datum/fabricator_recipe/food/get_resources() + . = ..() + var/obj/item/chems/food/food_result = path + if(!ispath(food_result, /obj/item/chems/food)) + return // why?? why would this not be food?? + var/plate_path = initial(food_result.plate) + if(ispath(plate_path)) + var/list/plate_matter = atom_info_repository.get_matter_for(plate_path) + for(var/key in plate_matter) + resources[key] -= (plate_matter[key] * FABRICATOR_EXTRA_COST_FACTOR) + if(resources[key] <= 0) + resources -= key + +// Print the resulting food without a plate. +/datum/fabricator_recipe/food/build(turf/location, datum/fabricator_build_order/order) + // TODO: On dev, we can just spawn it with skip_plate = TRUE instead. Without that we need a workaround. + . = ..() + for(var/obj/item/chems/food/food in .) + if(istype(food.plate)) + QDEL_NULL(food.plate) + /datum/fabricator_recipe/food/soylentviridians path = /obj/item/chems/food/soylenviridians diff --git a/code/modules/fabrication/fabricator_food.dm b/code/modules/fabrication/fabricator_food.dm index 99098e446b3..2655645e74f 100644 --- a/code/modules/fabrication/fabricator_food.dm +++ b/code/modules/fabrication/fabricator_food.dm @@ -6,6 +6,7 @@ icon_state = "replicator" base_icon_state = "replicator" base_storage_capacity_mult = 5 + base_type = /obj/machinery/fabricator/replicator /obj/machinery/fabricator/replicator/hear_talk(var/mob/M, var/text, var/verb, var/decl/language/speaking) if(speaking && !speaking.machine_understands) diff --git a/code/modules/maps/_map_template.dm b/code/modules/maps/_map_template.dm index 447f6d8acea..5ac8cfb679f 100644 --- a/code/modules/maps/_map_template.dm +++ b/code/modules/maps/_map_template.dm @@ -237,6 +237,7 @@ if(!QDELETED(mark)) qdel(mark) subtemplates_to_spawn = null + generate_multi_spawn_items() /datum/map_template/proc/extend_bounds_if_needed(var/list/existing_bounds, var/list/new_bounds) var/list/bounds_to_combine = existing_bounds diff --git a/code/modules/maps/helper_landmarks.dm b/code/modules/maps/helper_landmarks.dm index 08824ecc50c..926b7849e4e 100644 --- a/code/modules/maps/helper_landmarks.dm +++ b/code/modules/maps/helper_landmarks.dm @@ -133,6 +133,9 @@ INITIALIZE_IMMEDIATE(/obj/abstract/landmark/map_load_mark) . = ..() if(!prob(probability)) return // Do nothing. + var/turf/our_turf = get_turf(src) + if(ispath(type_to_find, /turf) && istype(our_turf, type_to_find) && try_set_variable(our_turf)) + return INITIALIZE_HINT_QDEL for(var/atom/candidate_atom in get_turf(src)) if(!istype(candidate_atom, type_to_find)) continue @@ -167,6 +170,10 @@ INITIALIZE_IMMEDIATE(/obj/abstract/landmark/map_load_mark) . = ..() if(!prob(probability)) return // Do nothing. + // turf is not in turf contents, oops + var/turf/our_turf = get_turf(src) + if(ispath(type_to_find, /turf) && istype(our_turf, type_to_find) && try_call_proc(our_turf)) + return INITIALIZE_HINT_QDEL // we don't use locate in case try_call_proc returns false on our first attempt for(var/atom/candidate_atom in get_turf(src)) if(!istype(candidate_atom, type_to_find)) @@ -187,7 +194,7 @@ INITIALIZE_IMMEDIATE(/obj/abstract/landmark/map_load_mark) /obj/abstract/landmark/proc_caller/floor_burner type_to_find = /turf/floor - proc_to_call = /turf/floor/proc/burn_tile + proc_to_call = TYPE_PROC_REF(/turf/floor, burn_tile) arguments_to_pass = null /// Used to tell pipe leak unit tests that a leak is intentional. Placed over the pipe that leaks, not the tile missing a pipe. diff --git a/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm b/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm index f4d6e9f4604..98034069279 100644 --- a/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm +++ b/code/modules/maps/template_types/random_exoplanet/planet_types/volcanic.dm @@ -99,8 +99,7 @@ /datum/level_data/planetoid/exoplanet/underground ) possible_themes = list( - /datum/exoplanet_theme/mountains = 100, - /datum/exoplanet_theme = 90, + /datum/exoplanet_theme/mountains = 190, /datum/exoplanet_theme/robotic_guardians = 10 ) diff --git a/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm b/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm index aa5e3bd1242..8eb2764c4c1 100644 --- a/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm +++ b/code/modules/maps/template_types/random_exoplanet/random_exoplanet.dm @@ -11,8 +11,7 @@ /datum/level_data/planetoid/exoplanet, ) possible_themes = list( - /datum/exoplanet_theme = 30, - /datum/exoplanet_theme/mountains = 100, + /datum/exoplanet_theme/mountains = 130, /datum/exoplanet_theme/radiation_bombing = 10, /datum/exoplanet_theme/ruined_city = 5, /datum/exoplanet_theme/robotic_guardians = 10 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 9d2ca26ba77..15933dd3233 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -386,7 +386,7 @@ default behaviour is: switch_from_dead_to_living_mob_list() timeofdeath = 0 - stat = CONSCIOUS + set_stat(CONSCIOUS) update_icon() BITSET(hud_updateflag, HEALTH_HUD) diff --git a/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm b/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm index 9563d47d807..f3c92813e3b 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_remote_control.dm @@ -36,7 +36,7 @@ add_language(/decl/language/machine, 1) default_language = controlling_ai.default_language - stat = CONSCIOUS + set_stat(CONSCIOUS) if(user.mind) user.mind.transfer_to(src) else diff --git a/code/modules/modular_computers/networking/machinery/relay.dm b/code/modules/modular_computers/networking/machinery/relay.dm index 4710d86c3e1..5283cc7294f 100644 --- a/code/modules/modular_computers/networking/machinery/relay.dm +++ b/code/modules/modular_computers/networking/machinery/relay.dm @@ -31,4 +31,5 @@ name = "long-ranged network relay" icon = 'icons/obj/machines/tcomms/relay.dmi' icon_state = "relay" - network_device_type = /datum/extension/network_device/broadcaster/relay/long_range + network_device_type = /datum/extension/network_device/broadcaster/relay/long_range + base_type = /obj/machinery/network/relay/long_range diff --git a/code/modules/organs/internal/brain_computer.dm b/code/modules/organs/internal/brain_computer.dm index 3d298b04b30..78689d8f059 100644 --- a/code/modules/organs/internal/brain_computer.dm +++ b/code/modules/organs/internal/brain_computer.dm @@ -11,6 +11,7 @@ /decl/material/solid/metal/gold = MATTER_AMOUNT_TRACE, /decl/material/solid/gemstone/diamond = MATTER_AMOUNT_TRACE ) + bodytype = /decl/bodytype/prosthetic/basic_human can_use_brain_interface = FALSE var/searching = FALSE var/brain_name @@ -23,7 +24,6 @@ /obj/item/organ/internal/brain/robotic/Initialize() . = ..() - set_bodytype(/decl/bodytype/prosthetic/basic_human) update_icon() brain_name = "[pick(list("ADA","DOS","GNU","MAC","WIN"))]-[random_id(type,1000,9999)]" SetName("[name] ([brain_name])") diff --git a/code/modules/overmap/overmap_shuttle.dm b/code/modules/overmap/overmap_shuttle.dm index 153ed401c14..40a1add39dc 100644 --- a/code/modules/overmap/overmap_shuttle.dm +++ b/code/modules/overmap/overmap_shuttle.dm @@ -24,13 +24,13 @@ fuel_ports += fuel_port_in_area /datum/shuttle/autodock/overmap/fuel_check() - if(!src.try_consume_fuel()) //insufficient fuel - for(var/area/A in shuttle_area) - for(var/mob/living/M in A) - M.show_message(SPAN_WARNING("You hear the shuttle engines sputter... perhaps it doesn't have enough fuel?"), AUDIBLE_MESSAGE, + if(!try_consume_fuel()) //insufficient fuel + for(var/mob/hearer in global.living_mob_list_ + global.ghost_mob_list) + if(is_type_in_list(get_area(hearer), shuttle_area)) + hearer.show_message(SPAN_WARNING("You hear the shuttle engines sputter... perhaps it doesn't have enough fuel?"), AUDIBLE_MESSAGE, SPAN_WARNING("The shuttle shakes but fails to take off."), VISIBLE_MESSAGE) - return 0 //failure! - return 1 //sucess, continue with launch + return FALSE //failure + return TRUE //sucess, continue with launch /datum/shuttle/autodock/overmap/proc/can_go() if(!next_location) diff --git a/code/modules/reagents/chems/chems_ethanol.dm b/code/modules/reagents/chems/chems_ethanol.dm index 7982a87a312..9e63763c239 100644 --- a/code/modules/reagents/chems/chems_ethanol.dm +++ b/code/modules/reagents/chems/chems_ethanol.dm @@ -25,6 +25,7 @@ ) bypass_chilling_products_for_root_type = /decl/material/liquid/ethanol affect_blood_on_ingest = FALSE // prevents automatic toxins/inebriation as though injected + affect_blood_on_inhale = FALSE var/strength = 10 // This is, essentially, units between stages - the lower, the stronger. Less fine tuning, more clarity. var/alcohol_toxicity = 1 @@ -41,6 +42,12 @@ M.take_damage(removed * 2 * alcohol_toxicity, TOX) M.add_chemical_effect(CE_ALCOHOL_TOXIC, alcohol_toxicity) +/decl/material/liquid/ethanol/affect_inhale(mob/living/M, removed, datum/reagents/holder) + if(M.has_trait(/decl/trait/metabolically_inert)) + return + ..() + affect_ingest(M, removed, holder) // a bit of a hack, but it avoids code duplication + /decl/material/liquid/ethanol/affect_ingest(var/mob/living/M, var/removed, var/datum/reagents/holder) if(M.has_trait(/decl/trait/metabolically_inert)) diff --git a/code/modules/tools/archetypes/tool_extension.dm b/code/modules/tools/archetypes/tool_extension.dm index e61e4314221..a75a8d9488b 100644 --- a/code/modules/tools/archetypes/tool_extension.dm +++ b/code/modules/tools/archetypes/tool_extension.dm @@ -29,14 +29,14 @@ var/decl/tool_archetype/tool_archetype = GET_DECL(tool) tool_use_sounds[tool] = tool_archetype.tool_sound -/datum/extension/tool/proc/get_tool_speed(var/archetype) +/datum/extension/tool/proc/get_tool_speed(archetype) . = clamp((TOOL_QUALITY_BEST - get_tool_quality(archetype)), TOOL_SPEED_BEST, TOOL_SPEED_WORST) -/datum/extension/tool/proc/get_tool_quality(var/archetype) +/datum/extension/tool/proc/get_tool_quality(archetype) return LAZYACCESS(tool_values, archetype) /**Return the value of the property specified for the given tool archetype. */ -/datum/extension/tool/proc/get_tool_property(var/archetype, var/property) +/datum/extension/tool/proc/get_tool_property(archetype, property) var/list/props = LAZYACCESS(tool_properties, archetype) //If we don't override, check the datum's default values if(!LAZYLEN(props)) @@ -45,14 +45,14 @@ return LAZYACCESS(props, property) /**Set the given tool property for the given tool archetype */ -/datum/extension/tool/proc/set_tool_property(var/archetype, var/property, var/value) +/datum/extension/tool/proc/set_tool_property(archetype, property, value) var/list/props = LAZYACCESS(tool_properties, archetype) if(!props) LAZYSET(tool_properties, archetype, list()) //Init the properties override list props = tool_properties[archetype] LAZYSET(props, property, value) -/datum/extension/tool/proc/handle_physical_manipulation(var/mob/user) +/datum/extension/tool/proc/handle_physical_manipulation(mob/user) return FALSE /datum/extension/tool/proc/get_tool_message(archetype) @@ -70,7 +70,7 @@ . = max(round(.), 5) // Returns a failure message as a string if the interaction fails. -/proc/handle_tool_interaction(var/archetype, var/mob/user, var/obj/item/tool, var/atom/target, var/delay = (1 SECOND), var/start_message, var/success_message, var/failure_message, var/fuel_expenditure = 0, var/check_skill = SKILL_CONSTRUCTION, var/prefix_message, var/suffix_message, var/check_skill_threshold, var/check_skill_prob = 50, var/set_cooldown = FALSE) +/proc/handle_tool_interaction(archetype, mob/user, obj/item/tool, atom/target, delay = (1 SECOND), start_message, success_message, failure_message, fuel_expenditure = 0, check_skill = SKILL_CONSTRUCTION, prefix_message, suffix_message, check_skill_threshold, check_skill_prob = 50, set_cooldown = FALSE) if(!istype(user) || !istype(target)) return TOOL_USE_FAILURE_NOMESSAGE diff --git a/code/modules/tools/archetypes/tool_extension_variable.dm b/code/modules/tools/archetypes/tool_extension_variable.dm index fdfcc651c6b..df714e62a92 100644 --- a/code/modules/tools/archetypes/tool_extension_variable.dm +++ b/code/modules/tools/archetypes/tool_extension_variable.dm @@ -27,10 +27,10 @@ return current_tool = tool_values[1] -/datum/extension/tool/variable/get_tool_quality(var/archetype) +/datum/extension/tool/variable/get_tool_quality(archetype) return (current_tool == archetype) ? ..() : 0 -/datum/extension/tool/variable/get_tool_speed(var/archetype) +/datum/extension/tool/variable/get_tool_speed(archetype) return (current_tool == archetype) ? ..() : INFINITY /datum/extension/tool/variable/handle_physical_manipulation(var/mob/user) diff --git a/code/modules/tools/archetypes/tool_item.dm b/code/modules/tools/archetypes/tool_item.dm index 0f3310a89a2..6440f857dc9 100644 --- a/code/modules/tools/archetypes/tool_item.dm +++ b/code/modules/tools/archetypes/tool_item.dm @@ -64,16 +64,26 @@ return FALSE /obj/item/examine(mob/user, distance, infix, suffix) + . = ..() + if(!user || user.get_preference_value(/datum/client_preference/inquisitive_examine) == PREF_OFF) return + var/datum/extension/tool/tool = get_extension(src, /datum/extension/tool) + if(!istype(tool)) + return + var/list/tool_strings for(var/tool_type in tool?.tool_values) + var/tool_quality = get_tool_quality(tool_type) + if(tool_quality < TOOL_QUALITY_WORST) + continue var/decl/tool_archetype/tool_archetype = GET_DECL(tool_type) - var/tool_string = tool_archetype.get_tool_quality_descriptor(tool.tool_values[tool_type]) + var/tool_string = tool_archetype.get_tool_quality_descriptor(tool_quality) if(tool_archetype.codex_key) tool_string = "[tool_string]" LAZYADD(tool_strings, tool_string) + if(length(tool_strings)) to_chat(user, "[gender == PLURAL ? "They look" : "It looks"] like [english_list(tool_strings)].") diff --git a/code/unit_tests/machine_tests.dm b/code/unit_tests/machine_tests.dm index fc1da183105..bcb10b27b2f 100644 --- a/code/unit_tests/machine_tests.dm +++ b/code/unit_tests/machine_tests.dm @@ -66,3 +66,23 @@ else pass("All machines had valid construction states.") return 1 + +/datum/unit_test/machine_circuit_matches_basetype + name = "MACHINE: All mapped machines with a circuit for their exact type will have a matching basetype." + +/datum/unit_test/machine_circuit_matches_basetype/start_test() + var/failed = list() + for(var/obj/machinery/machine in SSmachines.machinery) + if(failed[machine.type]) + continue + var/exact_circuit = get_circuit_by_build_path(machine.type) + var/base_circuit = machine.base_type && get_circuit_by_build_path(machine.base_type) + if(exact_circuit && base_circuit && (exact_circuit != base_circuit) && (machine.base_type != machine.type)) + failed[machine.type] = TRUE + log_bad("[machine.type] exactly matches [exact_circuit] but its base type is [machine.base_type], which has [base_circuit].") + + if(length(failed)) + fail("One or more machines had an invaild basetype.") + else + pass("All machines had valid basetypes.") + return 1 diff --git a/maps/antag_spawn/ert/ert_base.dmm b/maps/antag_spawn/ert/ert_base.dmm index a5904e18667..41a96a8b86c 100644 --- a/maps/antag_spawn/ert/ert_base.dmm +++ b/maps/antag_spawn/ert/ert_base.dmm @@ -2452,7 +2452,7 @@ /obj/machinery/door/blast/regular/open{ id_tag = "rescuebridge"; name = "Cockpit Blast Shutters"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/blue, @@ -2462,7 +2462,7 @@ /obj/machinery/door/blast/regular/open{ id_tag = "rescuedock"; name = "Blast Shutters"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/blue, @@ -2696,7 +2696,7 @@ dir = 4; id_tag = "rescuebridge"; name = "Cockpit Blast Shutters"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/blue, @@ -2756,7 +2756,7 @@ dir = 4; id_tag = "rescueeva"; name = "Blast Shutters"; - + }, /obj/effect/wallframe_spawn/reinforced/titanium, /obj/effect/paint/blue, @@ -2982,7 +2982,7 @@ /turf/floor/tiled/dark, /area/map_template/rescue_base/start) "gs" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/plating, /area/map_template/rescue_base/start) "gt" = ( @@ -3162,7 +3162,7 @@ dir = 4; id_tag = "rescuebridge"; name = "Blast Shutters"; - + }, /obj/effect/paint/blue, /turf/floor/plating, @@ -3213,7 +3213,7 @@ dir = 4; id_tag = "rescueinfirm"; name = "Blast Shutters"; - + }, /obj/effect/paint/blue, /turf/floor/plating, diff --git a/maps/away/errant_pisces/errant_pisces.dmm b/maps/away/errant_pisces/errant_pisces.dmm index 73a12cad534..b4ea6d9d054 100644 --- a/maps/away/errant_pisces/errant_pisces.dmm +++ b/maps/away/errant_pisces/errant_pisces.dmm @@ -4040,7 +4040,7 @@ /turf/floor/tiled, /area/errant_pisces/cryo) "kO" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/plating, /area/errant_pisces/general_storage) "kP" = ( @@ -4140,7 +4140,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/plating, /area/errant_pisces/general_storage) "li" = ( diff --git a/maps/away/lost_supply_base/lost_supply_base.dmm b/maps/away/lost_supply_base/lost_supply_base.dmm index 31eca7ad177..6bbdff65898 100644 --- a/maps/away/lost_supply_base/lost_supply_base.dmm +++ b/maps/away/lost_supply_base/lost_supply_base.dmm @@ -979,7 +979,7 @@ /turf/floor/airless, /area/lost_supply_base/common) "cO" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/airless, /area/lost_supply_base) "cP" = ( diff --git a/maps/away/slavers/slavers_base.dmm b/maps/away/slavers/slavers_base.dmm index f3c3c34d4e0..3eaae3dbb7e 100644 --- a/maps/away/slavers/slavers_base.dmm +++ b/maps/away/slavers/slavers_base.dmm @@ -442,7 +442,7 @@ /turf/floor/airless, /area/slavers_base/cells) "bv" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/airless, /area/slavers_base/cells) "bw" = ( @@ -465,7 +465,7 @@ /turf/floor/airless, /area/slavers_base/powatm) "bz" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -1306,12 +1306,12 @@ /turf/floor/airless, /area/slavers_base/med) "dE" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/item/chems/food/liquidfood, /turf/floor/airless, /area/slavers_base/med) "dF" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/airless, /area/slavers_base/med) "dG" = ( diff --git a/maps/away/smugglers/smugglers.dmm b/maps/away/smugglers/smugglers.dmm index 9de3527ba05..6350c90c5d2 100644 --- a/maps/away/smugglers/smugglers.dmm +++ b/maps/away/smugglers/smugglers.dmm @@ -819,7 +819,7 @@ /turf/floor/tiled, /area/smugglers/dorms) "ci" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/effect/decal/cleanable/cobweb2, /obj/effect/decal/cleanable/dirt, /turf/floor/tiled, diff --git a/maps/away/unishi/unishi-3.dmm b/maps/away/unishi/unishi-3.dmm index c2f2ddd1c94..33f16f02823 100644 --- a/maps/away/unishi/unishi-3.dmm +++ b/maps/away/unishi/unishi-3.dmm @@ -272,7 +272,7 @@ /turf/floor/tiled, /area/unishi/living) "aZ" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -282,7 +282,7 @@ /turf/floor/tiled, /area/unishi/bridge) "ba" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -1297,7 +1297,7 @@ /turf/floor/tiled/freezer, /area/unishi/kitchen) "dI" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/machinery/light/small{ dir = 4; icon_state = "bulb1" diff --git a/maps/away/yacht/yacht.dmm b/maps/away/yacht/yacht.dmm index 57cb7aa166f..9a9dcc80b7b 100644 --- a/maps/away/yacht/yacht.dmm +++ b/maps/away/yacht/yacht.dmm @@ -996,7 +996,7 @@ /turf/floor/plating, /area/yacht/engine) "dg" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/effect/decal/cleanable/dirt, /turf/floor/plating, /area/yacht/engine) diff --git a/maps/exodus/exodus-admin.dmm b/maps/exodus/exodus-admin.dmm index 73a6ea89d62..b9f0a83ea47 100644 --- a/maps/exodus/exodus-admin.dmm +++ b/maps/exodus/exodus-admin.dmm @@ -1011,7 +1011,7 @@ /obj/structure/emergency_dispenser{ pixel_x = -28 }, -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/effect/floor_decal/industrial/outline/yellow, /turf/floor/tiled/dark/monotile, /area/shuttle/escape_shuttle) @@ -2235,7 +2235,7 @@ }, /area/centcom/holding) "cGo" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/machinery/camera/network/crescent{ c_tag = "Shuttle West Storage"; dir = 4 diff --git a/maps/ministation/space.dmm b/maps/ministation/space.dmm index 42f8eb5b5df..ec8b28cf017 100644 --- a/maps/ministation/space.dmm +++ b/maps/ministation/space.dmm @@ -321,7 +321,7 @@ /turf/floor/shuttle/yellow, /area/shuttle/escape_shuttle) "aX" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/shuttle/yellow, /area/shuttle/escape_shuttle) "aY" = ( 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 52104140d5d..58bb010573c 100644 --- a/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm +++ b/maps/random_ruins/exoplanet_ruins/crashed_pod/crashed_pod.dmm @@ -947,7 +947,7 @@ /turf/floor/tiled/techfloor/grid, /area/map_template/crashed_pod) "bY" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/item/bag/trash, /obj/item/bag/trash, /obj/item/box/donkpockets, 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 eb58a431cf7..f88a3a7043a 100644 --- a/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm +++ b/maps/random_ruins/exoplanet_ruins/deserted_lab/deserted_lab.dmm @@ -83,7 +83,7 @@ /turf/template_noop, /area/template_noop) "as" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/abstract/landmark/clear, /turf/template_noop, /area/template_noop) diff --git a/maps/random_ruins/exoplanet_ruins/hut/hut.dmm b/maps/random_ruins/exoplanet_ruins/hut/hut.dmm index a3bb1dbe12a..21fc564bfdd 100644 --- a/maps/random_ruins/exoplanet_ruins/hut/hut.dmm +++ b/maps/random_ruins/exoplanet_ruins/hut/hut.dmm @@ -31,7 +31,7 @@ /turf/floor/tiled/dark, /area/template_noop) "j" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/effect/decal/cleanable/cobweb2, /turf/floor/tiled/dark, /area/template_noop) diff --git a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm b/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm index 1562dd282a0..ed155d0788a 100644 --- a/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm +++ b/maps/random_ruins/exoplanet_ruins/oldpod/oldpod.dmm @@ -365,7 +365,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/effect/decal/cleanable/dirt, /obj/item/gun/projectile/zipgun, /obj/item/gun/projectile/zipgun, diff --git a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm index 7ab290325a1..a750e66c114 100644 --- a/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm +++ b/maps/random_ruins/exoplanet_ruins/playablecolony/colony.dmm @@ -422,7 +422,7 @@ /turf/wall/r_wall, /area/map_template/colony/airlock) "bi" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/effect/floor_decal/techfloor{ dir = 9 }, @@ -6654,7 +6654,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/effect/floor_decal/techfloor{ dir = 10 }, @@ -6666,7 +6666,7 @@ /turf/floor/tiled/techfloor, /area/map_template/colony) "mN" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/effect/floor_decal/techfloor, /obj/item/mre/menu10, /obj/item/mre/menu9, diff --git a/maps/tradeship/tradeship-2.dmm b/maps/tradeship/tradeship-2.dmm index 13774ee3362..a456d9a86ee 100644 --- a/maps/tradeship/tradeship-2.dmm +++ b/maps/tradeship/tradeship-2.dmm @@ -4910,7 +4910,7 @@ dir = 4; icon_state = "bulb1" }, -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/plating, /area/ship/trade/shuttle/outgoing/engineering) "qv" = ( 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 711c89fd8c5..204a6fe9433 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 @@ -603,7 +603,7 @@ /turf/floor/tiled, /area/lar_maria/cells) "bU" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/tiled, /area/lar_maria/cells) "bV" = ( @@ -975,7 +975,7 @@ /turf/floor/tiled, /area/lar_maria/cells) "cR" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/machinery/alarm{ alarm_id = "xenobio1_alarm"; pixel_y = 24 @@ -1510,7 +1510,7 @@ /turf/floor/tiled, /area/lar_maria/cells) "es" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/plating, /area/lar_maria/cells) "et" = ( @@ -1913,7 +1913,7 @@ /turf/floor/tiled/white, /area/lar_maria/vir_aux) "fu" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/machinery/power/apc{ dir = 4; name = "east bump"; diff --git a/mods/content/government/away_sites/icarus/icarus-1.dmm b/mods/content/government/away_sites/icarus/icarus-1.dmm index 5e8ae63d89a..00833acfc31 100644 --- a/mods/content/government/away_sites/icarus/icarus-1.dmm +++ b/mods/content/government/away_sites/icarus/icarus-1.dmm @@ -329,7 +329,7 @@ /turf/floor/tiled/freezer, /area/icarus/vessel) "bs" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/tiled/freezer, /area/icarus/vessel) "bt" = ( @@ -1883,7 +1883,7 @@ /turf/floor/plating, /area/icarus/vessel) "gc" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /turf/floor/plating, /area/icarus/vessel) "gd" = ( 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 17b27012cb4..457b5762167 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 @@ -255,7 +255,7 @@ /turf/floor/tiled/airless, /area/map_template/ecship/crew) "aP" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/structure/handrail{ dir = 8 }, diff --git a/mods/content/psionics/system/psionics/mob/mob.dm b/mods/content/psionics/system/psionics/mob/mob.dm index e51d5aeedae..e4b033d6f70 100644 --- a/mods/content/psionics/system/psionics/mob/mob.dm +++ b/mods/content/psionics/system/psionics/mob/mob.dm @@ -7,9 +7,6 @@ return /mob/living/set_psi_rank(var/faculty, var/rank, var/take_larger, var/defer_update, var/temporary) - if(!get_target_zone()) // Can't target a zone, so you can't really invoke psionics. - to_chat(src, SPAN_NOTICE("You feel something strange brush against your mind... but your brain is not able to grasp it.")) - return var/datum/ability_handler/psionics/psi = get_ability_handler(/datum/ability_handler/psionics) var/current_rank = psi?.get_rank(faculty) if(!current_rank && !rank) diff --git a/mods/gamemodes/heist/heist_base.dmm b/mods/gamemodes/heist/heist_base.dmm index 9d5c5150cf7..17ac1eec159 100644 --- a/mods/gamemodes/heist/heist_base.dmm +++ b/mods/gamemodes/heist/heist_base.dmm @@ -1488,7 +1488,7 @@ /turf/floor/plating, /area/map_template/skipjack_station/start) "dK" = ( -/obj/structure/closet/crate/freezer/rations, +/obj/structure/closet/crate/plastic/rations, /obj/item/clothing/mask/gas/cyborg, /obj/item/box/donkpockets{ pixel_x = 3; diff --git a/nano/css/layout_default.css b/nano/css/layout_default.css index c9762874dec..3a7d875cfd5 100644 --- a/nano/css/layout_default.css +++ b/nano/css/layout_default.css @@ -1,6 +1,5 @@ body { background: #121212 url(uiBackground.png) 50% 0 repeat; - box-shadow: 0px 0px 5px 5px #000; } #uiWrapper { diff --git a/scripts/server.sh b/scripts/server.sh index 77b99788cef..b65b6b33d16 100755 --- a/scripts/server.sh +++ b/scripts/server.sh @@ -12,6 +12,7 @@ cd $SERVERDIR cleanup() { # $1: server pid + cd $SERVERDIR rm server_running [[ $1 != "" ]] && kill -s SIGTERM $1 } @@ -62,6 +63,7 @@ while [[ ! -e stopserver ]]; do cp "$GITDIR/$DME.rsc" . cp -r "$GITDIR/nano" . # Necessary for NanoUI cp -r "$GITDIR/maps" . # Necessary for runtime submap loading + cp -r "$GITDIR/mods" . # Also necessary for runtime submap loading. TODO: a better solution [[ ! -e btime.so && -e "$GITDIR/btime.so" ]] && cp "$GITDIR/btime.so" . [[ ! -e .git/logs ]] && mkdir -p .git/logs cp "$GITDIR/.git/HEAD" ./.git/HEAD