" @@ -153,24 +150,20 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(show_player_panel, R_ADMIN, "Show Player Panel", mo user << browse(body, "window=adminplayeropts-[REF(player)];size=550x515") BLACKBOX_LOG_ADMIN_VERB("Player Panel") -/client/proc/cmd_admin_godmode(mob/mob in GLOB.mob_list) +/client/proc/cmd_admin_godmode(mob/M in GLOB.mob_list) set category = "Admin.Game" set name = "Godmode" if(!check_rights(R_ADMIN)) return - var/had_trait = HAS_TRAIT_FROM(mob, TRAIT_GODMODE, ADMIN_TRAIT) - if(had_trait) - REMOVE_TRAIT(mob, TRAIT_GODMODE, ADMIN_TRAIT) - else - ADD_TRAIT(mob, TRAIT_GODMODE, ADMIN_TRAIT) - to_chat(usr, span_adminnotice("Toggled [had_trait ? "OFF" : "ON"]"), confidential = TRUE) + M.status_flags ^= GODMODE + to_chat(usr, span_adminnotice("Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]"), confidential = TRUE) - log_admin("[key_name(usr)] has toggled [key_name(mob)]'s nodamage to [had_trait ? "Off" : "On"]") - var/msg = "[key_name_admin(usr)] has toggled [ADMIN_LOOKUPFLW(mob)]'s nodamage to [had_trait ? "Off" : "On"]" + log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]") + var/msg = "[key_name_admin(usr)] has toggled [ADMIN_LOOKUPFLW(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]" message_admins(msg) - admin_ticket_log(mob, msg) - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Godmode", "[had_trait ? "Disabled" : "Enabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + admin_ticket_log(M, msg) + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Godmode", "[M.status_flags & GODMODE ? "Enabled" : "Disabled"]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! /* If a guy was gibbed and you want to revive him, this is a good way to do so. @@ -197,7 +190,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th if(findtext(G_found.real_name,"monkey")) if(tgui_alert(user,"This character appears to have been a monkey. Would you like to respawn them as such?",,list("Yes","No")) == "Yes") var/mob/living/carbon/human/species/monkey/new_monkey = new - SSjob.send_to_late_join(new_monkey) + SSjob.SendToLateJoin(new_monkey) G_found.mind.transfer_to(new_monkey) //be careful when doing stuff like this! I've already checked the mind isn't in use new_monkey.key = G_found.key to_chat(new_monkey, "You have been fully respawned. Enjoy the game.", confidential = TRUE) @@ -209,7 +202,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th //Ok, it's not a monkey. So, spawn a human. var/mob/living/carbon/human/new_character = new//The mob being spawned. - SSjob.send_to_late_join(new_character) + SSjob.SendToLateJoin(new_character) var/datum/record/locked/record_found //Referenced to later to either randomize or not randomize the character. if(G_found.mind && !G_found.mind.active) //mind isn't currently in use by someone/something @@ -232,7 +225,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th else new_character.mind_initialize() if(is_unassigned_job(new_character.mind.assigned_role)) - new_character.mind.set_assigned_role(SSjob.get_job_type(SSjob.overflow_role)) + new_character.mind.set_assigned_role(SSjob.GetJobType(SSjob.overflow_role)) new_character.key = G_found.key @@ -249,7 +242,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th //Now for special roles and equipment. var/datum/antagonist/traitor/traitordatum = new_character.mind.has_antag_datum(/datum/antagonist/traitor) if(traitordatum) - SSjob.equip_rank(new_character, new_character.mind.assigned_role, new_character.client) + SSjob.EquipRank(new_character, new_character.mind.assigned_role, new_character.client) new_character.mind.give_uplink(silent = TRUE, antag_datum = traitordatum) switch(new_character.mind.special_role) @@ -278,7 +271,7 @@ ADMIN_VERB(respawn_character, R_ADMIN, "Respawn Character", "Respawn a player th new_character = new_character.AIize() else if(!traitordatum) // Already equipped there. - SSjob.equip_rank(new_character, new_character.mind.assigned_role, new_character.client)//Or we simply equip them. + SSjob.EquipRank(new_character, new_character.mind.assigned_role, new_character.client)//Or we simply equip them. //Announces the character on all the systems, based on the record. if(!record_found && (new_character.mind.assigned_role.job_flags & JOB_CREW_MEMBER)) diff --git a/code/modules/admin/verbs/ai_triumvirate.dm b/code/modules/admin/verbs/ai_triumvirate.dm index 38c2eba712c60..d63994a25c319 100644 --- a/code/modules/admin/verbs/ai_triumvirate.dm +++ b/code/modules/admin/verbs/ai_triumvirate.dm @@ -36,7 +36,7 @@ GLOBAL_DATUM(triple_ai_controller, /datum/triple_ai_controller) to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.", confidential = TRUE) return - var/datum/job/job = SSjob.get_job_type(/datum/job/ai) + var/datum/job/job = SSjob.GetJobType(/datum/job/ai) if(!job) to_chat(usr, "Unable to locate the AI job", confidential = TRUE) CRASH("triple_ai() called, no /datum/job/ai to be found.") diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm index 23f1627503e06..441a5d0dd56fe 100644 --- a/code/modules/admin/verbs/ert.dm +++ b/code/modules/admin/verbs/ert.dm @@ -248,7 +248,7 @@ ert_antag.random_names = ertemplate.random_names ert_operative.mind.add_antag_datum(ert_antag,ert_team) - ert_operative.mind.set_assigned_role(SSjob.get_job_type(ert_antag.ert_job_path)) + ert_operative.mind.set_assigned_role(SSjob.GetJobType(ert_antag.ert_job_path)) //Logging and cleanup ert_operative.log_message("has been selected as \a [ert_antag.name].", LOG_GAME) diff --git a/code/modules/admin/verbs/lawpanel.dm b/code/modules/admin/verbs/lawpanel.dm index 6de3ff70182b8..f1daaf175761f 100644 --- a/code/modules/admin/verbs/lawpanel.dm +++ b/code/modules/admin/verbs/lawpanel.dm @@ -24,7 +24,7 @@ ADMIN_VERB(law_panel, R_ADMIN, "Law Panel", "View the AI laws.", ADMIN_CATEGORY_ var/lawtype = tgui_input_list(user, "Select law type", "Law type", lawtypes) if(isnull(lawtype)) return FALSE - var/lawtext = tgui_input_text(user, "Input law text", "Law text") // admin verb so no max length and also any user-level input is config based already so ehhhh + var/lawtext = tgui_input_text(user, "Input law text", "Law text") if(!lawtext) return FALSE if(QDELETED(src) || QDELETED(borgo)) diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index 9012a8652bbff..bcb89379ef40a 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -84,7 +84,7 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w if("infinite_sec") if(!is_debugger) return - var/datum/job/sec_job = SSjob.get_job_type(/datum/job/security_officer) + var/datum/job/sec_job = SSjob.GetJobType(/datum/job/security_officer) sec_job.total_positions = -1 sec_job.spawn_positions = -1 message_admins("[key_name_admin(holder)] has removed the cap on security officers.") diff --git a/code/modules/admin/view_variables/debug_variable_appearance.dm b/code/modules/admin/view_variables/debug_variable_appearance.dm index c5a367e83a064..6d87f6cc85d86 100644 --- a/code/modules/admin/view_variables/debug_variable_appearance.dm +++ b/code/modules/admin/view_variables/debug_variable_appearance.dm @@ -38,9 +38,6 @@ // can't use the name either for byond reasons var/_vis_flags -#if (MIN_COMPILER_VERSION > 515 || MIN_COMPILER_BUILD > 1643) -#warn vis_flags should now be supported by mutable appearances so we can safely remove the weird copying in this code -#endif // all alone at the end of the universe GLOBAL_DATUM_INIT(pluto, /atom/movable, new /atom/movable(null)) @@ -66,28 +63,6 @@ GLOBAL_DATUM_INIT(pluto, /atom/movable, new /atom/movable(null)) return FALSE if(var_name == NAMEOF(src, realized_underlays)) return FALSE - -#if (MIN_COMPILER_VERSION >= 515 && MIN_COMPILER_BUILD >= 1643) -#warn X/Y/Z and contents are now fully unviewable on our supported versions, remove the below check -#endif - -// lummy removed these from the the MA/image type -#if (DM_VERSION <= 515 && DM_BUILD < 1643) - // Filtering out the stuff I know we don't care about - if(var_name == NAMEOF(src, x)) - return FALSE - if(var_name == NAMEOF(src, y)) - return FALSE - if(var_name == NAMEOF(src, z)) - return FALSE - #ifndef SPACEMAN_DMM // Spaceman doesn't believe in contents on appearances, sorry lads - if(var_name == NAMEOF(src, contents)) - return FALSE - #endif - if(var_name == NAMEOF(src, loc)) - return FALSE -#endif - // Could make an argument for this but I think they will just confuse people, so yeeet if(var_name == NAMEOF(src, vis_contents)) return FALSE return ..() diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index 66ac70f3f62f7..37bf0911c608f 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -3,7 +3,7 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the variables of a datum.", ADMIN_CATEGORY_DEBUG, datum/thing in world) user.debug_variables(thing) -// This is kept as a separate proc because admins are able to show VV to non-admins +// This is kept as a seperate proc because admins are able to show VV to non-admins /client/proc/debug_variables(datum/thing in world) set category = "Debug" @@ -23,7 +23,7 @@ ADMIN_VERB_AND_CONTEXT_MENU(debug_variables, R_NONE, "View Variables", "View the if(isappearance(thing)) thing = get_vv_appearance(thing) // this is /mutable_appearance/our_bs_subtype - var/islist = islist(thing) || (!isdatum(thing) && hascall(thing, "Cut")) // Some special lists don't count as lists, but can be detected by if they have list procs + var/islist = islist(thing) || (!isdatum(thing) && hascall(thing, "Cut")) // Some special lists dont count as lists, but can be detected by if they have list procs if(!islist && !isdatum(thing)) return diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index da7c7e9e39cac..5f7a7e579d3ee 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -83,7 +83,7 @@ app.wiz_team = master_wizard.wiz_team master_wizard.wiz_team.add_member(app_mind) app_mind.add_antag_datum(app) - app_mind.set_assigned_role(SSjob.get_job_type(/datum/job/wizard_apprentice)) + app_mind.set_assigned_role(SSjob.GetJobType(/datum/job/wizard_apprentice)) app_mind.special_role = ROLE_WIZARD_APPRENTICE SEND_SOUND(M, sound('sound/effects/magic.ogg')) @@ -424,7 +424,15 @@ monkey_man.fully_replace_character_name(monkey_man.real_name, pick(GLOB.syndicate_monkey_names)) - monkey_man.make_clever_and_no_dna_scramble() + monkey_man.dna.add_mutation(/datum/mutation/human/clever) + // Can't make them human or nonclever. At least not with the easy and boring way out. + for(var/datum/mutation/human/mutation as anything in monkey_man.dna.mutations) + mutation.mutadone_proof = TRUE + mutation.instability = 0 + + // Extra backup! + ADD_TRAIT(monkey_man, TRAIT_NO_DNA_SCRAMBLE, SPECIES_TRAIT) + // Anything else requires enough effort that they deserve it. monkey_man.mind.enslave_mind_to_creator(user) diff --git a/code/modules/antagonists/abductor/abductor.dm b/code/modules/antagonists/abductor/abductor.dm index cd56fcdaa5cdc..7fc0c565ab1df 100644 --- a/code/modules/antagonists/abductor/abductor.dm +++ b/code/modules/antagonists/abductor/abductor.dm @@ -70,7 +70,7 @@ return team /datum/antagonist/abductor/on_gain() - owner.set_assigned_role(SSjob.get_job_type(role_job)) + owner.set_assigned_role(SSjob.GetJobType(role_job)) owner.special_role = ROLE_ABDUCTOR objectives += team.objectives finalize_abductor() diff --git a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm index ab1636b4dedfd..5a8f699832e6e 100644 --- a/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm +++ b/code/modules/antagonists/abductor/equipment/gear/abductor_items.dm @@ -189,12 +189,8 @@ to_chat(user, span_warning("Your target is already under a mind-controlling influence!")) return - var/command = tgui_input_text( - user, - "Enter the command for your target to follow. Uses Left: [target_gland.mind_control_uses], Duration: [DisplayTimeText(target_gland.mind_control_duration)]", - "Enter command", - max_length = MAX_MESSAGE_LEN, - ) + var/command = tgui_input_text(user, "Enter the command for your target to follow.\ + Uses Left: [target_gland.mind_control_uses], Duration: [DisplayTimeText(target_gland.mind_control_duration)]", "Enter command") if(!command) return @@ -219,7 +215,7 @@ if(living_target.stat == DEAD) to_chat(user, span_warning("Your target is dead!")) return - var/message = tgui_input_text(user, "Message to send to your target's brain", "Enter message", max_length = MAX_MESSAGE_LEN) + var/message = tgui_input_text(user, "Message to send to your target's brain", "Enter message") if(!message) return if(QDELETED(living_target) || living_target.stat == DEAD) diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm index 27093778c3116..09790f4ba897e 100644 --- a/code/modules/antagonists/abductor/machinery/experiment.dm +++ b/code/modules/antagonists/abductor/machinery/experiment.dm @@ -190,7 +190,7 @@ H.forceMove(console.pad.teleport_target) return //Area not chosen / It's not safe area - teleport to arrivals - SSjob.send_to_late_join(H, FALSE) + SSjob.SendToLateJoin(H, FALSE) return /obj/machinery/abductor/experiment/update_icon_state() diff --git a/code/modules/antagonists/blob/blobstrains/_reagent.dm b/code/modules/antagonists/blob/blobstrains/_reagent.dm index 65a50621b1717..2d7f4c5d34eb8 100644 --- a/code/modules/antagonists/blob/blobstrains/_reagent.dm +++ b/code/modules/antagonists/blob/blobstrains/_reagent.dm @@ -26,21 +26,12 @@ // These can only be applied by blobs. They are what (reagent) blobs are made out of. /datum/reagent/blob name = "Unknown" - description = "" + description = "shouldn't exist and you should adminhelp immediately." color = COLOR_WHITE taste_description = "bad code and slime" chemical_flags = NONE penetrates_skin = NONE - -/datum/reagent/blob/New() - ..() - - if(name == "Unknown") - description = "shouldn't exist and you should adminhelp immediately." - else if(description == "") - description = "[name] is the reagent created by that type of blob." - /// Used by blob reagents to calculate the reaction volume they should use when exposing mobs. /datum/reagent/blob/proc/return_mob_expose_reac_volume(mob/living/exposed_mob, methods=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/overmind) if(exposed_mob.stat == DEAD || HAS_TRAIT(exposed_mob, TRAIT_BLOB_ALLY)) diff --git a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm index acb4d96c23ad8..a18d802ff7dd4 100644 --- a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm +++ b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm @@ -12,7 +12,7 @@ /datum/reagent/blob/cryogenic_poison name = "Cryogenic Poison" - description = "A freezing poison that does high damage over time. Cryogenic poison blobs inject this into their victims." + description = "will inject targets with a freezing poison that does high damage over time." color = "#8BA6E9" taste_description = "brain freeze" diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm index d9010a965376e..a62895ae6c4b7 100644 --- a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm +++ b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm @@ -12,7 +12,6 @@ /datum/reagent/blob/regenerative_materia name = "Regenerative Materia" - description = "Chemical that inflicts toxin damage and makes the target believe they are fully healed. Regenerative materia blobs inject this into their victims." taste_description = "heaven" color = "#A88FB7" diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm index c7a2fc3a1107f..324c91ea3a529 100644 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ b/code/modules/antagonists/blob/structures/_blob.dm @@ -175,7 +175,6 @@ if(isspaceturf(T) && !(locate(/obj/structure/lattice) in T) && prob(80)) make_blob = FALSE playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE) //Let's give some feedback that we DID try to spawn in space, since players are used to it - balloon_alert(controller, "failed to expand!") ConsumeTile() //hit the tile we're in, making sure there are no border objects blocking us if(!T.CanPass(src, get_dir(T, src))) //is the target turf impassable diff --git a/code/modules/antagonists/blob/structures/core.dm b/code/modules/antagonists/blob/structures/core.dm index f995dc0b81b03..6eeccc8c361dd 100644 --- a/code/modules/antagonists/blob/structures/core.dm +++ b/code/modules/antagonists/blob/structures/core.dm @@ -24,7 +24,7 @@ GLOB.blob_cores += src START_PROCESSING(SSobj, src) SSpoints_of_interest.make_point_of_interest(src) - update_appearance() //so it at least appears + update_appearance() //so it atleast appears if(!placed && !overmind) return INITIALIZE_HINT_QDEL if(overmind) diff --git a/code/modules/antagonists/brainwashing/brainwashing.dm b/code/modules/antagonists/brainwashing/brainwashing.dm index 5d5cca3cb6de1..57707688f4daf 100644 --- a/code/modules/antagonists/brainwashing/brainwashing.dm +++ b/code/modules/antagonists/brainwashing/brainwashing.dm @@ -61,7 +61,7 @@ return var/list/objectives = list() do - var/objective = tgui_input_text(admin, "Add an objective", "Brainwashing", max_length = MAX_MESSAGE_LEN) + var/objective = tgui_input_text(admin, "Add an objective", "Brainwashing") if(objective) objectives += objective while(tgui_alert(admin, "Add another objective?", "More Brainwashing", list("Yes","No")) == "Yes") diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index d5ee0c2fc873a..7e13612153b49 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -41,14 +41,9 @@ owner.visible_message(span_danger("[owner] sucks the fluids from [target]!"), span_notice("We have absorbed [target].")) to_chat(target, span_userdanger("You are absorbed by the changeling!")) - var/true_absorbtion = (!isnull(target.client) || !isnull(target.mind) || !isnull(target.last_mind)) - if (!true_absorbtion) - to_chat(owner, span_changeling(span_bold("You absorb [target], but their weak DNA is not enough to satisfy your hunger."))) - if(!changeling.has_profile_with_dna(target.dna)) changeling.add_new_profile(target) - if (true_absorbtion) - changeling.true_absorbs++ + changeling.true_absorbs++ if(owner.nutrition < NUTRITION_LEVEL_WELL_FED) owner.set_nutrition(min((owner.nutrition + target.nutrition), NUTRITION_LEVEL_WELL_FED)) @@ -62,8 +57,7 @@ is_absorbing = FALSE changeling.adjust_chemicals(10) - if (true_absorbtion) - changeling.can_respec = TRUE + changeling.can_respec = TRUE if(target.stat != DEAD) target.investigate_log("has died from being changeling absorbed.", INVESTIGATE_DEATHS) diff --git a/code/modules/antagonists/clown_ops/clownop.dm b/code/modules/antagonists/clown_ops/clownop.dm index 9866ee30ccf13..07c1cc84ad756 100644 --- a/code/modules/antagonists/clown_ops/clownop.dm +++ b/code/modules/antagonists/clown_ops/clownop.dm @@ -11,7 +11,7 @@ nuke_icon_state = "bananiumbomb_base" /datum/antagonist/nukeop/clownop/admin_add(datum/mind/new_owner,mob/admin) - new_owner.set_assigned_role(SSjob.get_job_type(/datum/job/clown_operative)) + new_owner.set_assigned_role(SSjob.GetJobType(/datum/job/clown_operative)) new_owner.add_antag_datum(src) message_admins("[key_name_admin(admin)] has clown op'ed [key_name_admin(new_owner)].") log_admin("[key_name(admin)] has clown op'ed [key_name(new_owner)].") diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm index 45c3aee695574..3d5677996502a 100644 --- a/code/modules/antagonists/cult/cult_comms.dm +++ b/code/modules/antagonists/cult/cult_comms.dm @@ -27,7 +27,7 @@ return ..() /datum/action/innate/cult/comm/Activate() - var/input = tgui_input_text(usr, "Message to tell to the other acolytes", "Voice of Blood", max_length = MAX_MESSAGE_LEN) + var/input = tgui_input_text(usr, "Message to tell to the other acolytes", "Voice of Blood") if(!input || !IsAvailable(feedback = TRUE)) return diff --git a/code/modules/antagonists/cult/cult_objectives.dm b/code/modules/antagonists/cult/cult_objectives.dm index 60542f259bf2a..d290b212ab22f 100644 --- a/code/modules/antagonists/cult/cult_objectives.dm +++ b/code/modules/antagonists/cult/cult_objectives.dm @@ -63,7 +63,7 @@ /datum/objective/sacrifice/proc/on_possible_mindswap(mob/source) SIGNAL_HANDLER UnregisterSignal(target.current, list(COMSIG_QDELETING, COMSIG_MOB_MIND_TRANSFERRED_INTO)) - //we check if the mind is bodyless only after mindswap shenanigans to avoid issues. + //we check if the mind is bodyless only after mindswap shenanigeans to avoid issues. addtimer(CALLBACK(src, PROC_REF(do_we_have_a_body)), 0 SECONDS) /datum/objective/sacrifice/proc/do_we_have_a_body() diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm index 511988fb5bcbb..773f890d25dbb 100644 --- a/code/modules/antagonists/cult/cult_structures.dm +++ b/code/modules/antagonists/cult/cult_structures.dm @@ -137,7 +137,7 @@ /* * Set up and populate our list of options. - * Overridden by subtypes. + * Overriden by subtypes. * * The list of options is a associated list of format: * item_name = list( diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 29515e45bb124..4b94666abc367 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -233,11 +233,9 @@ var/mob/living/carbon/human/H = owner.current if(!istype(H)) return - if(isplasmaman(H)) - H.dna.species.outfit_important_for_life = plasmaman_outfit - - H.dna.species.give_important_for_life(H) + H.equipOutfit(plasmaman_outfit) + H.open_internals(H.get_item_for_held_index(2)) H.equipOutfit(outfit) if(isplasmaman(H)) diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm index 7b316d6cdb984..abba2c3f1007e 100644 --- a/code/modules/antagonists/heretic/influences.dm +++ b/code/modules/antagonists/heretic/influences.dm @@ -43,7 +43,7 @@ while((length(smashes) + num_drained) < how_many_can_we_make && location_sanity < 100) var/turf/chosen_location = get_safe_random_station_turf() - // We don't want them close to each other - at least 1 tile of separation + // We don't want them close to each other - at least 1 tile of seperation var/list/nearby_things = range(1, chosen_location) var/obj/effect/heretic_influence/what_if_i_have_one = locate() in nearby_things var/obj/effect/visible_heretic_influence/what_if_i_had_one_but_its_used = locate() in nearby_things diff --git a/code/modules/antagonists/heretic/items/heretic_armor.dm b/code/modules/antagonists/heretic/items/heretic_armor.dm index 8375c3ae44334..0c64e4a227eaf 100644 --- a/code/modules/antagonists/heretic/items/heretic_armor.dm +++ b/code/modules/antagonists/heretic/items/heretic_armor.dm @@ -153,7 +153,6 @@ RemoveElement(/datum/element/heretic_focus) if(isliving(loc)) - REMOVE_TRAIT(loc, TRAIT_RESISTLOWPRESSURE, REF(src)) loc.balloon_alert(loc, "cloak hidden") loc.visible_message(span_notice("Light shifts around [loc], making the cloak around them invisible!")) @@ -164,6 +163,5 @@ AddElement(/datum/element/heretic_focus) if(isliving(loc)) - ADD_TRAIT(loc, TRAIT_RESISTLOWPRESSURE, REF(src)) loc.balloon_alert(loc, "cloak revealed") loc.visible_message(span_notice("A kaleidoscope of colours collapses around [loc], a cloak appearing suddenly around their person!")) diff --git a/code/modules/antagonists/heretic/items/heretic_necks.dm b/code/modules/antagonists/heretic/items/heretic_necks.dm index a738b4aae47ea..5c73c22a4e793 100644 --- a/code/modules/antagonists/heretic/items/heretic_necks.dm +++ b/code/modules/antagonists/heretic/items/heretic_necks.dm @@ -1,5 +1,5 @@ /obj/item/clothing/neck/heretic_focus - name = "amber focus" + name = "Amber Focus" desc = "An amber focusing glass that provides a link to the world beyond. The necklace seems to twitch, but only when you look at it from the corner of your eye." icon_state = "eldritch_necklace" w_class = WEIGHT_CLASS_SMALL @@ -10,7 +10,7 @@ AddElement(/datum/element/heretic_focus) /obj/item/clothing/neck/heretic_focus/crimson_medallion - name = "crimson medallion" + name = "Crimson Medallion" desc = "A blood-red focusing glass that provides a link to the world beyond, and worse. Its eye is constantly twitching and gazing in all directions. It almost seems to be silently screaming..." icon_state = "crimson_medallion" /// The aura healing component. Used to delete it when taken off. @@ -105,7 +105,7 @@ . += span_red("You can also squeeze it to recover a large amount of health quickly, at a cost...") /obj/item/clothing/neck/eldritch_amulet - name = "warm eldritch medallion" + name = "Warm Eldritch Medallion" desc = "A strange medallion. Peering through the crystalline surface, the world around you melts away. You see your own beating heart, and the pulsing of a thousand others." icon = 'icons/obj/antags/eldritch.dmi' icon_state = "eye_medalion" @@ -134,7 +134,7 @@ user.update_sight() /obj/item/clothing/neck/eldritch_amulet/piercing - name = "piercing eldritch medallion" + name = "Piercing Eldritch Medallion" desc = "A strange medallion. Peering through the crystalline surface, the light refracts into new and terrifying spectrums of color. You see yourself, reflected off cascading mirrors, warped into impossible shapes." heretic_only_trait = TRAIT_XRAY_VISION @@ -149,7 +149,7 @@ // The amulet conversion tool used by moon heretics /obj/item/clothing/neck/heretic_focus/moon_amulet - name = "moonlight amulet" + name = "Moonlight Amulet" desc = "A piece of the mind, the soul and the moon. Gazing into it makes your head spin and hear whispers of laughter and joy." icon = 'icons/obj/antags/eldritch.dmi' icon_state = "moon_amulette" diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm index 5919f9a40d12a..4b3525c93b044 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm @@ -501,7 +501,6 @@ sac_target.remove_status_effect(/datum/status_effect/necropolis_curse) sac_target.remove_status_effect(/datum/status_effect/unholy_determination) sac_target.reagents?.del_reagent(/datum/reagent/inverse/helgrasp/heretic) - sac_target.uncuff() sac_target.clear_mood_event("shadow_realm") if(IS_HERETIC(sac_target)) var/datum/antagonist/heretic/victim_heretic = sac_target.mind?.has_antag_datum(/datum/antagonist/heretic) diff --git a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm index 2bae6ed540296..3a0f17ed48391 100644 --- a/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm +++ b/code/modules/antagonists/heretic/knowledge/side_blade_rust.dm @@ -47,7 +47,7 @@ desc = "Allows you to transmute any ballistic weapon, such as a pipegun, with hide \ from any animal, a plank of wood, and a camera to create the Lionhunter's rifle. \ The Lionhunter's Rifle is a long ranged ballistic weapon with three shots. \ - These shots function as normal, albeit weak high-caliber munitions when fired from \ + These shots function as normal, albeit weak high caliber mutitions when fired from \ close range or at inanimate objects. You can aim the rifle at distant foes, \ causing the shot to deal massively increased damage and hone in on them." gain_text = "I met an old man in an antique shop who wielded a very unusual weapon. \ diff --git a/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm b/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm index d54646fe103b2..a958ab3f272bb 100644 --- a/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm +++ b/code/modules/antagonists/heretic/knowledge/side_flesh_void.dm @@ -37,23 +37,6 @@ route = PATH_SIDE depth = 8 -/datum/heretic_knowledge/spell/void_prison - name = "Void Prison" - desc = "Grants you Void Prison, a spell that places your victim into ball, making them unable to do anything or speak. \ - Applies void chill afterwards." - gain_text = "At first, I see myself, waltzing along a snow-laden street. \ - I try to yell, grab hold of this fool and tell them to run. \ - But the only welts made are on my own beating fist. \ - My smiling face turns to regard me, reflecting back in glassy eyes the empty path I have been lead down." - next_knowledge = list( - /datum/heretic_knowledge/spell/void_phase, - /datum/heretic_knowledge/summon/raw_prophet, - ) - spell_to_add = /datum/action/cooldown/spell/pointed/void_prison - cost = 1 - route = PATH_SIDE - depth = 8 - /datum/heretic_knowledge/spell/cleave name = "Blood Cleave" desc = "Grants you Cleave, an area-of-effect targeted spell \ diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm index d2fd0efe8b570..11031a51aca96 100644 --- a/code/modules/antagonists/heretic/knowledge/void_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm @@ -12,10 +12,9 @@ * * Mark of Void * Ritual of Knowledge - * Void Conduit + * Cone of Cold * Void Phase * > Sidepaths: - * Void Stasis * Carving Knife * Blood Siphon * @@ -79,7 +78,7 @@ var/mob/living/carbon/carbon_target = target carbon_target.adjust_silence(10 SECONDS) - carbon_target.apply_status_effect(/datum/status_effect/void_chill, 2) + carbon_target.apply_status_effect(/datum/status_effect/void_chill) /datum/heretic_knowledge/cold_snap name = "Aristocrat's Way" @@ -97,29 +96,12 @@ research_tree_icon_path = 'icons/effects/effects.dmi' research_tree_icon_state = "the_freezer" depth = 4 - /// Traits we apply to become immune to the environment - var/static/list/gain_traits = list(TRAIT_NO_SLIP_ICE, TRAIT_NO_SLIP_SLIDE) /datum/heretic_knowledge/cold_snap/on_gain(mob/user, datum/antagonist/heretic/our_heretic) user.add_traits(list(TRAIT_NOBREATH, TRAIT_RESISTCOLD), type) - RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(check_environment)) /datum/heretic_knowledge/cold_snap/on_lose(mob/user, datum/antagonist/heretic/our_heretic) user.remove_traits(list(TRAIT_RESISTCOLD, TRAIT_NOBREATH), type) - UnregisterSignal(user, COMSIG_LIVING_LIFE) - -///Checks if our traits should be active -/datum/heretic_knowledge/cold_snap/proc/check_environment(mob/living/user) - SIGNAL_HANDLER - - var/datum/gas_mixture/environment = user.loc?.return_air() - if(!isnull(environment)) - var/affected_temperature = environment.return_temperature() - var/affected_pressure = environment.return_pressure() - if(affected_temperature <= T0C || affected_pressure < ONE_ATMOSPHERE) - user.add_traits(gain_traits, type) - else - user.remove_traits(gain_traits, type) /datum/heretic_knowledge/mark/void_mark name = "Mark of Void" @@ -132,17 +114,17 @@ mark_type = /datum/status_effect/eldritch/void /datum/heretic_knowledge/knowledge_ritual/void - next_knowledge = list(/datum/heretic_knowledge/spell/void_conduit) + next_knowledge = list(/datum/heretic_knowledge/spell/void_cone) route = PATH_VOID -/datum/heretic_knowledge/spell/void_conduit - name = "Void Conduit" - desc = "Grants you Void Conduit, a spell which summons a pulsing gate to the Void itself. Every pulse breaks windows and airlocks, while afflicting Heathens with an eldritch chill and shielding Heretics against low pressure." - gain_text = "The hum in the still, cold air turns to a cacophonous rattle. \ - Over the noise, there is no distinction to the clattering of window panes and the yawning knowledge that ricochets through my skull. \ - The doors won't close. I can't keep the cold out now." +/datum/heretic_knowledge/spell/void_cone + name = "Void Blast" + desc = "Grants you Void Blast, a spell that shoots out a freezing blast in a cone in front of you, \ + freezing the ground and any victims within." + gain_text = "Every door I open racks my body. I am afraid of what is behind them. Someone is expecting me, \ + and my legs start to drag. Is that... snow?" next_knowledge = list(/datum/heretic_knowledge/spell/void_phase) - spell_to_add = /datum/action/cooldown/spell/conjure/void_conduit + spell_to_add = /datum/action/cooldown/spell/cone/staggered/cone_of_cold/void cost = 1 route = PATH_VOID depth = 7 @@ -157,7 +139,6 @@ /datum/heretic_knowledge/blade_upgrade/void, /datum/heretic_knowledge/reroll_targets, /datum/heretic_knowledge/spell/blood_siphon, - /datum/heretic_knowledge/spell/void_prison, /datum/heretic_knowledge/rune_carver, ) spell_to_add = /datum/action/cooldown/spell/pointed/void_phase @@ -168,19 +149,13 @@ /datum/heretic_knowledge/blade_upgrade/void name = "Seeking Blade" - desc = "Your blade now freezes enemies. Additionally, you can now attack distant marked targets with your Void Blade, teleporting directly next to them." + desc = "You can now attack distant marked targets with your Void Blade, teleporting directly next to them." gain_text = "Fleeting memories, fleeting feet. I mark my way with frozen blood upon the snow. Covered and forgotten." next_knowledge = list(/datum/heretic_knowledge/spell/void_pull) route = PATH_VOID research_tree_icon_path = 'icons/ui_icons/antags/heretic/knowledge.dmi' research_tree_icon_state = "blade_upgrade_void" -/datum/heretic_knowledge/blade_upgrade/void/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) - if(source == target) - return - - target.apply_status_effect(/datum/status_effect/void_chill, 2) - /datum/heretic_knowledge/blade_upgrade/void/do_ranged_effects(mob/living/user, mob/living/target, obj/item/melee/sickly_blade/blade) if(!target.has_status_effect(/datum/status_effect/eldritch)) return @@ -225,8 +200,6 @@ var/datum/looping_sound/void_loop/sound_loop ///Reference to the ongoing voidstrom that surrounds the heretic var/datum/weather/void_storm/storm - ///The storm where there are actual effects - var/datum/proximity_monitor/advanced/void_storm/heavy_storm /datum/heretic_knowledge/ultimate/void_final/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) if(!isopenturf(loc)) @@ -248,22 +221,16 @@ sound = 'sound/ambience/antag/heretic/ascend_void.ogg', color_override = "pink", ) - user.add_traits(list(TRAIT_RESISTLOWPRESSURE, TRAIT_NEGATES_GRAVITY, TRAIT_MOVE_FLYING, TRAIT_FREE_HYPERSPACE_MOVEMENT), MAGIC_TRAIT) + ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT) // Let's get this show on the road! sound_loop = new(user, TRUE, TRUE) RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) - RegisterSignal(user, COMSIG_ATOM_PRE_BULLET_ACT, PROC_REF(hit_by_projectile)) - RegisterSignals(user, list(COMSIG_LIVING_DEATH, COMSIG_QDELETING), PROC_REF(on_death)) - heavy_storm = new(user, 10) - if(ishuman(user)) - var/mob/living/carbon/human/ascended_human = user - var/obj/item/organ/internal/eyes/heretic_eyes = ascended_human.get_organ_slot(ORGAN_SLOT_EYES) - heretic_eyes?.color_cutoffs = list(30, 30, 30) - ascended_human.update_sight() + RegisterSignal(user, COMSIG_LIVING_DEATH, PROC_REF(on_death)) /datum/heretic_knowledge/ultimate/void_final/on_lose(mob/user, datum/antagonist/heretic/our_heretic) on_death() // Losing is pretty much dying. I think + RegisterSignals(user, list(COMSIG_LIVING_LIFE, COMSIG_LIVING_DEATH)) /** * Signal proc for [COMSIG_LIVING_LIFE]. @@ -276,29 +243,10 @@ /datum/heretic_knowledge/ultimate/void_final/proc/on_life(mob/living/source, seconds_per_tick, times_fired) SIGNAL_HANDLER - for(var/atom/thing_in_range as anything in range(10, source)) - if(iscarbon(thing_in_range)) - var/mob/living/carbon/close_carbon = thing_in_range - if(IS_HERETIC_OR_MONSTER(close_carbon)) - close_carbon.apply_status_effect(/datum/status_effect/void_conduit) - continue - close_carbon.adjust_silence_up_to(2 SECONDS, 20 SECONDS) - close_carbon.apply_status_effect(/datum/status_effect/void_chill, 1) - close_carbon.adjust_eye_blur(rand(0 SECONDS, 2 SECONDS)) - close_carbon.adjust_bodytemperature(-30 * TEMPERATURE_DAMAGE_COEFFICIENT) - - if(istype(thing_in_range, /obj/machinery/door) || istype(thing_in_range, /obj/structure/door_assembly)) - var/obj/affected_door = thing_in_range - affected_door.take_damage(rand(60, 80)) - - if(istype(thing_in_range, /obj/structure/window) || istype(thing_in_range, /obj/structure/grille)) - var/obj/structure/affected_structure = thing_in_range - affected_structure.take_damage(rand(20, 40)) - - if(isturf(thing_in_range)) - var/turf/affected_turf = thing_in_range - var/datum/gas_mixture/environment = affected_turf.return_air() - environment.temperature *= 0.9 + for(var/mob/living/carbon/close_carbon in view(5, source)) + if(IS_HERETIC_OR_MONSTER(close_carbon)) + continue + close_carbon.adjust_silence_up_to(2 SECONDS, 20 SECONDS) // Telegraph the storm in every area on the station. var/list/station_levels = SSmapping.levels_by_trait(ZTRAIT_STATION) @@ -306,6 +254,14 @@ storm = new /datum/weather/void_storm(station_levels) storm.telegraph() + // When the heretic enters a new area, intensify the storm in the new area, + // and lessen the intensity in the former area. + var/area/source_area = get_area(source) + if(!storm.impacted_areas[source_area]) + storm.former_impacted_areas |= storm.impacted_areas + storm.impacted_areas = list(source_area) + storm.update_areas() + /** * Signal proc for [COMSIG_LIVING_DEATH]. * @@ -319,32 +275,3 @@ if(storm) storm.end() QDEL_NULL(storm) - if(heavy_storm) - QDEL_NULL(heavy_storm) - UnregisterSignal(source, list(COMSIG_LIVING_LIFE, COMSIG_ATOM_PRE_BULLET_ACT, COMSIG_LIVING_DEATH, COMSIG_QDELETING)) - -///Few checks to determine if we can deflect bullets -/datum/heretic_knowledge/ultimate/void_final/proc/can_deflect(mob/living/ascended_heretic) - if(!(ascended_heretic.mobility_flags & MOBILITY_USE)) - return FALSE - if(!isturf(ascended_heretic.loc)) - return FALSE - return TRUE - -/datum/heretic_knowledge/ultimate/void_final/proc/hit_by_projectile(mob/living/ascended_heretic, obj/projectile/hitting_projectile, def_zone) - SIGNAL_HANDLER - - if(!can_deflect(ascended_heretic)) - return NONE - - ascended_heretic.visible_message( - span_danger("The void storm surrounding [ascended_heretic] deflects [hitting_projectile]!"), - span_userdanger("The void storm protects you from [hitting_projectile]!"), - ) - playsound(ascended_heretic, pick('sound/magic/VoidDeflect01.ogg', 'sound/magic/VoidDeflect02.ogg', 'sound/magic/VoidDeflect03.ogg'), 75, TRUE) - hitting_projectile.firer = ascended_heretic - if(prob(75)) - hitting_projectile.set_angle(get_angle(hitting_projectile.firer, hitting_projectile.fired_from)) - else - hitting_projectile.set_angle(rand(0, 360))//SHING - return COMPONENT_BULLET_PIERCED diff --git a/code/modules/antagonists/heretic/magic/void_phase.dm b/code/modules/antagonists/heretic/magic/void_phase.dm index c6e367e87608c..350ca0f29c100 100644 --- a/code/modules/antagonists/heretic/magic/void_phase.dm +++ b/code/modules/antagonists/heretic/magic/void_phase.dm @@ -10,7 +10,7 @@ ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' school = SCHOOL_FORBIDDEN - cooldown_time = 25 SECONDS + cooldown_time = 30 SECONDS invocation = "RE'L'TY PH'S'E." invocation_type = INVOCATION_WHISPER @@ -57,7 +57,6 @@ if(living_mob.can_block_magic(antimagic_flags)) continue living_mob.apply_damage(40, BRUTE, wound_bonus = CANT_WOUND) - living_mob.apply_status_effect(/datum/status_effect/void_chill, 1) /obj/effect/temp_visual/voidin icon = 'icons/effects/96x96.dmi' diff --git a/code/modules/antagonists/heretic/magic/void_pull.dm b/code/modules/antagonists/heretic/magic/void_pull.dm index 1db1c6601718e..2021bf8a04e4f 100644 --- a/code/modules/antagonists/heretic/magic/void_pull.dm +++ b/code/modules/antagonists/heretic/magic/void_pull.dm @@ -9,7 +9,7 @@ sound = 'sound/magic/voidblink.ogg' school = SCHOOL_FORBIDDEN - cooldown_time = 30 SECONDS + cooldown_time = 40 SECONDS invocation = "BR'NG F'RTH TH'M T' M'." invocation_type = INVOCATION_WHISPER @@ -32,7 +32,6 @@ // Before we cast the actual effects, deal AOE damage to anyone adjacent to us for(var/mob/living/nearby_living as anything in get_things_to_cast_on(cast_on, damage_radius)) nearby_living.apply_damage(30, BRUTE, wound_bonus = CANT_WOUND) - nearby_living.apply_status_effect(/datum/status_effect/void_chill, 1) /datum/action/cooldown/spell/aoe/void_pull/get_things_to_cast_on(atom/center, radius_override = 1) var/list/things = list() diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm index e4f5990040be4..1668ea5a11ef7 100644 --- a/code/modules/antagonists/heretic/status_effects/buffs.dm +++ b/code/modules/antagonists/heretic/status_effects/buffs.dm @@ -251,10 +251,11 @@ status_type = STATUS_EFFECT_REFRESH duration = -1 alert_type = null - var/static/list/caretaking_traits = list(TRAIT_GODMODE, TRAIT_HANDS_BLOCKED, TRAIT_IGNORESLOWDOWN, TRAIT_SECLUDED_LOCATION) + var/static/list/caretaking_traits = list(TRAIT_HANDS_BLOCKED, TRAIT_IGNORESLOWDOWN, TRAIT_SECLUDED_LOCATION) /datum/status_effect/caretaker_refuge/on_apply() owner.add_traits(caretaking_traits, TRAIT_STATUS_EFFECT(id)) + owner.status_flags |= GODMODE animate(owner, alpha = 45,time = 0.5 SECONDS) owner.density = FALSE RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING), PROC_REF(on_focus_lost)) @@ -265,6 +266,7 @@ /datum/status_effect/caretaker_refuge/on_remove() owner.remove_traits(caretaking_traits, TRAIT_STATUS_EFFECT(id)) + owner.status_flags &= ~GODMODE owner.alpha = initial(owner.alpha) owner.density = initial(owner.density) UnregisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING)) diff --git a/code/modules/antagonists/heretic/status_effects/debuffs.dm b/code/modules/antagonists/heretic/status_effects/debuffs.dm index 8b1751bccde69..7037d1cc3778b 100644 --- a/code/modules/antagonists/heretic/status_effects/debuffs.dm +++ b/code/modules/antagonists/heretic/status_effects/debuffs.dm @@ -1,3 +1,41 @@ +// VOID CHILL +/datum/status_effect/void_chill + id = "void_chill" + alert_type = /atom/movable/screen/alert/status_effect/void_chill + duration = 8 SECONDS + status_type = STATUS_EFFECT_REPLACE + tick_interval = 0.5 SECONDS + /// The amount the victim's body temperature changes each tick() in kelvin. Multiplied by TEMPERATURE_DAMAGE_COEFFICIENT. + var/cooling_per_tick = -14 + +/atom/movable/screen/alert/status_effect/void_chill + name = "Void Chill" + desc = "There's something freezing you from within and without. You've never felt cold this oppressive before..." + icon_state = "void_chill" + +/datum/status_effect/void_chill/on_apply() + owner.add_atom_colour(COLOR_BLUE_LIGHT, TEMPORARY_COLOUR_PRIORITY) + owner.add_movespeed_modifier(/datum/movespeed_modifier/void_chill, update = TRUE) + return TRUE + +/datum/status_effect/void_chill/on_remove() + owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_BLUE_LIGHT) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/void_chill, update = TRUE) + +/datum/status_effect/void_chill/tick(seconds_between_ticks) + owner.adjust_bodytemperature(cooling_per_tick * TEMPERATURE_DAMAGE_COEFFICIENT) + +/datum/status_effect/void_chill/major + duration = 10 SECONDS + cooling_per_tick = -20 + +/datum/status_effect/void_chill/lasting + id = "lasting_void_chill" + duration = -1 + +/datum/movespeed_modifier/void_chill + multiplicative_slowdown = 0.3 + // AMOK /datum/status_effect/amok id = "amok" diff --git a/code/modules/antagonists/heretic/status_effects/mark_effects.dm b/code/modules/antagonists/heretic/status_effects/mark_effects.dm index 4cbdbdf8c1ce1..b647ba6ca8077 100644 --- a/code/modules/antagonists/heretic/status_effects/mark_effects.dm +++ b/code/modules/antagonists/heretic/status_effects/mark_effects.dm @@ -105,7 +105,7 @@ effect_icon_state = "emark4" /datum/status_effect/eldritch/void/on_effect() - owner.apply_status_effect(/datum/status_effect/void_chill, 3) + owner.apply_status_effect(/datum/status_effect/void_chill/major) owner.adjust_silence(10 SECONDS) return ..() diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm index dc92289f66bef..4dc2568fe0e89 100644 --- a/code/modules/antagonists/malf_ai/malf_ai.dm +++ b/code/modules/antagonists/malf_ai/malf_ai.dm @@ -41,7 +41,6 @@ malfunction_flavor = strings(MALFUNCTION_FLAVOR_FILE, employer) add_law_zero() - RegisterSignal(owner.current, COMSIG_SILICON_AI_CORE_STATUS, PROC_REF(core_status)) if(malf_sound) owner.current.playsound_local(get_turf(owner.current), malf_sound, 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE) owner.current.grant_language(/datum/language/codespeak, source = LANGUAGE_MALF) @@ -59,7 +58,7 @@ QDEL_NULL(malf_ai.malf_picker) owner.special_role = null - UnregisterSignal(owner, COMSIG_SILICON_AI_CORE_STATUS) + return ..() /// Generates a complete set of malf AI objectives up to the traitor objective limit. @@ -198,7 +197,7 @@ "name" = category, "items" = (category == malf_ai.malf_picker.selected_cat ? list() : null)) for(var/module in malf_ai.malf_picker.possible_modules[category]) - var/datum/ai_module/malf/mod = malf_ai.malf_picker.possible_modules[category][module] + var/datum/ai_module/mod = malf_ai.malf_picker.possible_modules[category][module] cat["items"] += list(list( "name" = mod.name, "cost" = mod.cost, @@ -223,7 +222,7 @@ for(var/category in malf_ai.malf_picker.possible_modules) buyable_items += malf_ai.malf_picker.possible_modules[category] for(var/key in buyable_items) - var/datum/ai_module/malf/valid_mod = buyable_items[key] + var/datum/ai_module/valid_mod = buyable_items[key] if(valid_mod.name == item_name) malf_ai.malf_picker.purchase_module(malf_ai, valid_mod) return TRUE @@ -272,14 +271,6 @@ return malf_ai_icon -/datum/antagonist/malf_ai/proc/core_status(datum/source) - SIGNAL_HANDLER - - var/mob/living/silicon/ai/malf_owner = owner.current - if(malf_owner.linked_core) - return COMPONENT_CORE_ALL_GOOD - return COMPONENT_CORE_DISCONNECTED - //Subtype of Malf AI datum, used for one of the traitor final objectives /datum/antagonist/malf_ai/infected name = "Infected AI" diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index a9f84c51dad1a..90f3b76649230 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -52,7 +52,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /obj/machinery/computer/gateway_control, ))) -GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) +GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module)) /// The malf AI action subtype. All malf actions are subtypes of this. /datum/action/innate/ai @@ -137,19 +137,19 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) return /// Modules causing destruction -/datum/ai_module/malf/destructive +/datum/ai_module/destructive category = "Destructive Modules" /// Modules with stealthy and utility uses -/datum/ai_module/malf/utility +/datum/ai_module/utility category = "Utility Modules" /// Modules that are improving AI abilities and assets -/datum/ai_module/malf/upgrade +/datum/ai_module/upgrade category = "Upgrade Modules" /// Doomsday Device: Starts the self-destruct timer. It can only be stopped by killing the AI completely. -/datum/ai_module/malf/destructive/nuke_station +/datum/ai_module/destructive/nuke_station name = "Doomsday Device" description = "Activate a weapon that will disintegrate all organic life on the station after a 450 second delay. \ Can only be used while on the station, will fail if your core is moved off station or destroyed. \ @@ -372,7 +372,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) return TRUE /// Hostile Station Lockdown: Locks, bolts, and electrifies every airlock on the station. After 90 seconds, the doors reset. -/datum/ai_module/malf/destructive/lockdown +/datum/ai_module/destructive/lockdown name = "Hostile Station Lockdown" description = "Overload the airlock, blast door and fire control networks, locking them down. \ Caution! This command also electrifies all airlocks. The networks will automatically reset after 90 seconds, briefly \ @@ -424,7 +424,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) CHECK_TICK /// Override Machine: Allows the AI to override a machine, animating it into an angry, living version of itself. -/datum/ai_module/malf/destructive/override_machine +/datum/ai_module/destructive/override_machine name = "Machine Override" description = "Overrides a machine's programming, causing it to rise up and attack everyone except other machines. Four uses per purchase." cost = 30 @@ -481,7 +481,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) new /mob/living/simple_animal/hostile/mimic/copy/machine(get_turf(to_animate), to_animate, caller, TRUE) /// Destroy RCDs: Detonates all non-cyborg RCDs on the station. -/datum/ai_module/malf/destructive/destroy_rcd +/datum/ai_module/destructive/destroy_rcd name = "Destroy RCDs" description = "Send a specialised pulse to detonate all hand-held and exosuit Rapid Construction Devices on the station." cost = 25 @@ -506,7 +506,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) owner.playsound_local(owner, 'sound/machines/twobeep.ogg', 50, 0) /// Overload Machine: Allows the AI to overload a machine, detonating it after a delay. Two uses per purchase. -/datum/ai_module/malf/destructive/overload_machine +/datum/ai_module/destructive/overload_machine name = "Machine Overload" description = "Overheats an electrical machine, causing a small explosion and destroying it. Two uses per purchase." cost = 20 @@ -567,7 +567,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) return TRUE /// Blackout: Overloads a random number of lights across the station. Three uses. -/datum/ai_module/malf/destructive/blackout +/datum/ai_module/destructive/blackout name = "Blackout" description = "Attempts to overload the lighting circuits on the station, destroying some bulbs. Three uses per purchase." cost = 15 @@ -601,7 +601,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) build_all_button_icons() /// HIGH IMPACT HONKING -/datum/ai_module/malf/destructive/megahonk +/datum/ai_module/destructive/megahonk name = "Percussive Intercomm Interference" description = "Emit a debilitatingly percussive auditory blast through the station intercoms. Does not overpower hearing protection. Two uses per purchase." cost = 20 @@ -632,7 +632,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) to_chat(honk_victim, span_clown("HOOOOONK!")) /// Robotic Factory: Places a large machine that converts humans that go through it into cyborgs. Unlocking this ability removes shunting. -/datum/ai_module/malf/utility/place_cyborg_transformer +/datum/ai_module/utility/place_cyborg_transformer name = "Robotic Factory (Removes Shunting)" description = "Build a machine anywhere, using expensive nanomachines, that can convert a living human into a loyal cyborg slave when placed inside." cost = 100 @@ -707,7 +707,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) return success /// Air Alarm Safety Override: Unlocks the ability to enable dangerous modes on all air alarms. -/datum/ai_module/malf/utility/break_air_alarms +/datum/ai_module/utility/break_air_alarms name = "Air Alarm Safety Override" description = "Gives you the ability to disable safeties on all air alarms. This will allow you to use extremely dangerous environmental modes. \ Anyone can check the air alarm's interface and may be tipped off by their nonfunctionality." @@ -733,7 +733,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0) /// Thermal Sensor Override: Unlocks the ability to disable all fire alarms from doing their job. -/datum/ai_module/malf/utility/break_fire_alarms +/datum/ai_module/utility/break_fire_alarms name = "Thermal Sensor Override" description = "Gives you the ability to override the thermal sensors on all fire alarms. \ This will remove their ability to scan for fire and thus their ability to alert." @@ -764,7 +764,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) owner.playsound_local(owner, 'sound/machines/terminal_off.ogg', 50, 0) /// Disable Emergency Lights -/datum/ai_module/malf/utility/emergency_lights +/datum/ai_module/utility/emergency_lights name = "Disable Emergency Lights" description = "Cuts emergency lights across the entire station. If power is lost to light fixtures, \ they will not attempt to fall back on emergency power reserves." @@ -791,7 +791,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) owner.playsound_local(owner, 'sound/effects/light_flicker.ogg', 50, FALSE) /// Reactivate Camera Network: Reactivates up to 30 cameras across the station. -/datum/ai_module/malf/utility/reactivate_cameras +/datum/ai_module/utility/reactivate_cameras name = "Reactivate Camera Network" description = "Runs a network-wide diagnostic on the camera network, resetting focus and re-routing power to failed cameras. \ Can be used to repair up to 30 cameras." @@ -832,7 +832,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) build_all_button_icons() /// Upgrade Camera Network: EMP-proofs all cameras, in addition to giving them X-ray vision. -/datum/ai_module/malf/upgrade/upgrade_cameras +/datum/ai_module/upgrade/upgrade_cameras name = "Upgrade Camera Network" description = "Install broad-spectrum scanning and electrical redundancy firmware to the camera network, enabling EMP-proofing and light-amplified X-ray vision. Upgrade is done immediately upon purchase." //I <3 pointless technobabble //This used to have motion sensing as well, but testing quickly revealed that giving it to the whole cameranet is PURE HORROR. @@ -841,7 +841,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) unlock_text = span_notice("OTA firmware distribution complete! Cameras upgraded: CAMSUPGRADED. Light amplification system online.") unlock_sound = 'sound/items/rped.ogg' -/datum/ai_module/malf/upgrade/upgrade_cameras/upgrade(mob/living/silicon/ai/AI) +/datum/ai_module/upgrade/upgrade_cameras/upgrade(mob/living/silicon/ai/AI) // Sets up nightvision RegisterSignal(AI, COMSIG_MOB_UPDATE_SIGHT, PROC_REF(on_update_sight)) AI.update_sight() @@ -864,13 +864,13 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) upgraded_cameras++ unlock_text = replacetext(unlock_text, "CAMSUPGRADED", "[upgraded_cameras]") //This works, since unlock text is called after upgrade() -/datum/ai_module/malf/upgrade/upgrade_cameras/proc/on_update_sight(mob/source) +/datum/ai_module/upgrade/upgrade_cameras/proc/on_update_sight(mob/source) SIGNAL_HANDLER // Dim blue, pretty source.lighting_color_cutoffs = blend_cutoff_colors(source.lighting_color_cutoffs, list(5, 25, 35)) /// AI Turret Upgrade: Increases the health and damage of all turrets. -/datum/ai_module/malf/upgrade/upgrade_turrets +/datum/ai_module/upgrade/upgrade_turrets name = "AI Turret Upgrade" description = "Improves the power and health of all AI turrets. This effect is permanent. Upgrade is done immediately upon purchase." cost = 30 @@ -878,7 +878,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) unlock_text = span_notice("You establish a power diversion to your turrets, upgrading their health and damage.") unlock_sound = 'sound/items/rped.ogg' -/datum/ai_module/malf/upgrade/upgrade_turrets/upgrade(mob/living/silicon/ai/AI) +/datum/ai_module/upgrade/upgrade_turrets/upgrade(mob/living/silicon/ai/AI) for(var/obj/machinery/porta_turret/ai/turret as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/porta_turret/ai)) turret.AddElement(/datum/element/empprotection, EMP_PROTECT_ALL) turret.max_integrity = 200 @@ -887,7 +887,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) turret.lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' /// Enhanced Surveillance: Enables AI to hear conversations going on near its active vision. -/datum/ai_module/malf/upgrade/eavesdrop +/datum/ai_module/upgrade/eavesdrop name = "Enhanced Surveillance" description = "Via a combination of hidden microphones and lip reading software, \ you are able to use your cameras to listen in on conversations. Upgrade is done immediately upon purchase." @@ -896,12 +896,12 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) unlock_text = span_notice("OTA firmware distribution complete! Cameras upgraded: Enhanced surveillance package online.") unlock_sound = 'sound/items/rped.ogg' -/datum/ai_module/malf/upgrade/eavesdrop/upgrade(mob/living/silicon/ai/AI) +/datum/ai_module/upgrade/eavesdrop/upgrade(mob/living/silicon/ai/AI) if(AI.eyeobj) AI.eyeobj.relay_speech = TRUE /// Unlock Mech Domination: Unlocks the ability to dominate mechs. Big shocker, right? -/datum/ai_module/malf/upgrade/mecha_domination +/datum/ai_module/upgrade/mecha_domination name = "Unlock Mech Domination" description = "Allows you to hack into a mech's onboard computer, shunting all processes into it and ejecting any occupants. \ Do not allow the mech to leave the station's vicinity or allow it to be destroyed. \ @@ -912,10 +912,10 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) Loss of signal will result in total system lockout.") unlock_sound = 'sound/mecha/nominal.ogg' -/datum/ai_module/malf/upgrade/mecha_domination/upgrade(mob/living/silicon/ai/AI) +/datum/ai_module/upgrade/mecha_domination/upgrade(mob/living/silicon/ai/AI) AI.can_dominate_mechs = TRUE //Yep. This is all it does. Honk! -/datum/ai_module/malf/upgrade/voice_changer +/datum/ai_module/upgrade/voice_changer name = "Voice Changer" description = "Allows you to change the AI's voice. Upgrade is active immediately upon purchase." cost = 40 @@ -1053,7 +1053,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) if("name") say_name = strip_html(params["name"], MAX_NAME_LEN) -/datum/ai_module/malf/utility/emag +/datum/ai_module/utility/emag name = "Targeted Safeties Override" description = "Allows you to disable the safeties of any machinery on the station, provided you can access it." cost = 20 @@ -1147,7 +1147,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) return TRUE -/datum/ai_module/malf/utility/core_tilt +/datum/ai_module/utility/core_tilt name = "Rolling Servos" description = "Allows you to slowly roll around, crushing anything in your way with your bulk." cost = 10 @@ -1246,7 +1246,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) stack_trace("non-standard dir entered to get_rotation_from_dir. (got: [dir])") return 0 -/datum/ai_module/malf/utility/remote_vendor_tilt +/datum/ai_module/utility/remote_vendor_tilt name = "Remote vendor tilting" description = "Lets you remotely tip vendors over in any direction." cost = 15 diff --git a/code/modules/antagonists/nukeop/datums/operative.dm b/code/modules/antagonists/nukeop/datums/operative.dm index c05295e15d32e..9eca88d33852d 100644 --- a/code/modules/antagonists/nukeop/datums/operative.dm +++ b/code/modules/antagonists/nukeop/datums/operative.dm @@ -94,7 +94,7 @@ nuke_team = new_team /datum/antagonist/nukeop/admin_add(datum/mind/new_owner,mob/admin) - new_owner.set_assigned_role(SSjob.get_job_type(/datum/job/nuclear_operative)) + new_owner.set_assigned_role(SSjob.GetJobType(/datum/job/nuclear_operative)) new_owner.add_antag_datum(src) message_admins("[key_name_admin(admin)] has nuke op'ed [key_name_admin(new_owner)].") log_admin("[key_name(admin)] has nuke op'ed [key_name(new_owner)].") diff --git a/code/modules/antagonists/nukeop/datums/operative_leader.dm b/code/modules/antagonists/nukeop/datums/operative_leader.dm index 1af9f1d28c40e..c2995e5575326 100644 --- a/code/modules/antagonists/nukeop/datums/operative_leader.dm +++ b/code/modules/antagonists/nukeop/datums/operative_leader.dm @@ -44,13 +44,7 @@ /datum/antagonist/nukeop/leader/proc/ask_name() var/randomname = pick(GLOB.last_names) - var/newname = tgui_input_text( - owner.current, - "You are the nuclear operative [title]. Please choose a last name for your family.", - "Name change", - randomname, - max_length = MAX_NAME_LEN, - ) + var/newname = tgui_input_text(owner.current, "You are the nuclear operative [title]. Please choose a last name for your family.", "Name change", randomname, MAX_NAME_LEN) if (!newname) newname = randomname else diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index b59d984238e61..0160fbd89149c 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -43,7 +43,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) if(custom_threat == "Yes") declaring_war = TRUE - war_declaration = tgui_input_text(user, "Insert your custom declaration", "Declaration", max_length = MAX_MESSAGE_LEN, multiline = TRUE, encode = FALSE) + war_declaration = tgui_input_text(user, "Insert your custom declaration", "Declaration", multiline = TRUE, encode = FALSE) declaring_war = FALSE if(!check_allowed(user) || !war_declaration) @@ -63,7 +63,7 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) var/custom_threat = tgui_alert(usr, "Do you want to customize the declaration?", "Customize?", list("Yes", "No")) if(custom_threat == "Yes") - war_declaration = tgui_input_text(usr, "Insert your custom declaration", "Declaration", max_length = MAX_MESSAGE_LEN, multiline = TRUE, encode = FALSE) + war_declaration = tgui_input_text(usr, "Insert your custom declaration", "Declaration", multiline = TRUE, encode = FALSE) if(!war_declaration) tgui_alert(usr, "Invalid war declaration.", "Poor Choice of Words") diff --git a/code/modules/antagonists/obsessed/obsessed.dm b/code/modules/antagonists/obsessed/obsessed.dm index 7f9d9614fb1d9..7316102e2ce09 100644 --- a/code/modules/antagonists/obsessed/obsessed.dm +++ b/code/modules/antagonists/obsessed/obsessed.dm @@ -1,9 +1,3 @@ -#define OBSESSED_OBJECTIVE_SPEND_TIME "spend_time" -#define OBSESSED_OBJECTIVE_POLAROID "polaroid" -#define OBSESSED_OBJECTIVE_HUG "hug" -#define OBSESSED_OBJECTIVE_HEIRLOOM "heirloom" -#define OBSESSED_OBJECTIVE_JEALOUS "jealous" - /datum/antagonist/obsessed name = "Obsessed" show_in_antagpanel = TRUE @@ -19,23 +13,8 @@ preview_outfit = /datum/outfit/obsessed hardcore_random_bonus = TRUE stinger_sound = 'sound/ambience/antag/creepalert.ogg' - /// How many objectives should be generated - var/objectives_to_generate = 3 - /// Brain trauma that causes the obsession var/datum/brain_trauma/special/obsessed/trauma -/// Dummy antag datum that will show the cured obsessed to admins -/datum/antagonist/former_obsessed - name = "Former Obsessed" - show_in_antagpanel = FALSE - show_name_in_check_antagonists = TRUE - antagpanel_category = ANTAG_GROUP_CREW - show_in_roundend = FALSE - count_against_dynamic_roll_chance = FALSE - silent = TRUE - can_elimination_hijack = ELIMINATION_PREVENT - antag_flags = FLAG_FAKE_ANTAG - /datum/antagonist/obsessed/admin_add(datum/mind/new_owner,mob/admin) var/mob/living/carbon/C = new_owner.current if(!istype(C)) @@ -93,7 +72,7 @@ H.regenerate_icons() /datum/antagonist/obsessed/forge_objectives(datum/mind/obsessionmind) - var/list/objectives_left = list(OBSESSED_OBJECTIVE_SPEND_TIME, OBSESSED_OBJECTIVE_POLAROID, OBSESSED_OBJECTIVE_HUG) + var/list/objectives_left = list("spendtime", "polaroid", "hug") var/datum/objective/assassinate/obsessed/kill = new kill.owner = owner kill.target = obsessionmind @@ -105,44 +84,44 @@ family_heirloom = heirloom_quirk.heirloom?.resolve() break if(family_heirloom) - objectives_left += OBSESSED_OBJECTIVE_HEIRLOOM + objectives_left += "heirloom" // If they have no coworkers, jealousy will pick someone else on the station. This will never be a free objective. if(!is_captain_job(obsessionmind.assigned_role)) - objectives_left += OBSESSED_OBJECTIVE_JEALOUS + objectives_left += "jealous" - for(var/i in 1 to objectives_to_generate) - var/chosen_objective = pick_n_take(objectives_left) + for(var/i in 1 to 3) + var/chosen_objective = pick(objectives_left) + objectives_left.Remove(chosen_objective) switch(chosen_objective) - if(OBSESSED_OBJECTIVE_SPEND_TIME) + if("spendtime") var/datum/objective/spendtime/spendtime = new spendtime.owner = owner spendtime.target = obsessionmind objectives += spendtime - if(OBSESSED_OBJECTIVE_POLAROID) + if("polaroid") var/datum/objective/polaroid/polaroid = new polaroid.owner = owner polaroid.target = obsessionmind objectives += polaroid - if(OBSESSED_OBJECTIVE_HUG) + if("hug") var/datum/objective/hug/hug = new hug.owner = owner hug.target = obsessionmind objectives += hug - if(OBSESSED_OBJECTIVE_HEIRLOOM) + if("heirloom") var/datum/objective/steal/heirloom_thief/heirloom_thief = new heirloom_thief.owner = owner heirloom_thief.target = obsessionmind//while you usually wouldn't need this for stealing, we need the name of the obsession heirloom_thief.steal_target = family_heirloom objectives += heirloom_thief - if(OBSESSED_OBJECTIVE_JEALOUS) + if("jealous") var/datum/objective/assassinate/jealous/jealous = new jealous.owner = owner jealous.target = obsessionmind//will reroll into a coworker on the objective itself objectives += jealous objectives += kill//finally add the assassinate last, because you'd have to complete it last to greentext. - for(var/datum/objective/O in objectives) O.update_explanation_text() @@ -299,9 +278,3 @@ explanation_text = "Steal [target.name]'s family heirloom, [steal_target] they cherish." else explanation_text = "Free Objective" - -#undef OBSESSED_OBJECTIVE_SPEND_TIME -#undef OBSESSED_OBJECTIVE_POLAROID -#undef OBSESSED_OBJECTIVE_HUG -#undef OBSESSED_OBJECTIVE_HEIRLOOM -#undef OBSESSED_OBJECTIVE_JEALOUS diff --git a/code/modules/antagonists/paradox_clone/paradox_clone.dm b/code/modules/antagonists/paradox_clone/paradox_clone.dm index bd8eb7cd7d866..e809e8cecbf00 100644 --- a/code/modules/antagonists/paradox_clone/paradox_clone.dm +++ b/code/modules/antagonists/paradox_clone/paradox_clone.dm @@ -52,7 +52,7 @@ kill.update_explanation_text() objectives += kill - owner.set_assigned_role(SSjob.get_job_type(/datum/job/paradox_clone)) + owner.set_assigned_role(SSjob.GetJobType(/datum/job/paradox_clone)) //clone doesnt show up on message lists var/obj/item/modular_computer/pda/messenger = locate() in owner.current diff --git a/code/modules/antagonists/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm index cc82f491c1fcd..0d982dc492d4e 100644 --- a/code/modules/antagonists/space_dragon/space_dragon.dm +++ b/code/modules/antagonists/space_dragon/space_dragon.dm @@ -67,12 +67,12 @@ forge_objectives() rift_ability = new() owner.special_role = ROLE_SPACE_DRAGON - owner.set_assigned_role(SSjob.get_job_type(/datum/job/space_dragon)) + owner.set_assigned_role(SSjob.GetJobType(/datum/job/space_dragon)) return ..() /datum/antagonist/space_dragon/on_removal() owner.special_role = null - owner.set_assigned_role(SSjob.get_job_type(/datum/job/unassigned)) + owner.set_assigned_role(SSjob.GetJobType(/datum/job/unassigned)) return ..() /datum/antagonist/space_dragon/apply_innate_effects(mob/living/mob_override) diff --git a/code/modules/antagonists/space_ninja/space_ninja.dm b/code/modules/antagonists/space_ninja/space_ninja.dm index 37bc2299928da..7f88c687c12d1 100644 --- a/code/modules/antagonists/space_ninja/space_ninja.dm +++ b/code/modules/antagonists/space_ninja/space_ninja.dm @@ -114,12 +114,12 @@ equip_space_ninja(owner.current) owner.current.add_quirk(/datum/quirk/freerunning) owner.current.add_quirk(/datum/quirk/light_step) - owner.current.mind.set_assigned_role(SSjob.get_job_type(/datum/job/space_ninja)) + owner.current.mind.set_assigned_role(SSjob.GetJobType(/datum/job/space_ninja)) owner.current.mind.special_role = ROLE_NINJA return ..() /datum/antagonist/ninja/admin_add(datum/mind/new_owner,mob/admin) - new_owner.set_assigned_role(SSjob.get_job_type(/datum/job/space_ninja)) + new_owner.set_assigned_role(SSjob.GetJobType(/datum/job/space_ninja)) new_owner.special_role = ROLE_NINJA new_owner.add_antag_datum(src) message_admins("[key_name_admin(admin)] has ninja'ed [key_name_admin(new_owner)].") diff --git a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm index 71ae454df72f9..2c9d45e382dd4 100644 --- a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm @@ -102,17 +102,14 @@ if(traitor_data.uplink_handler.contractor_hub.current_contract == src) traitor_data.uplink_handler.contractor_hub.current_contract = null - for(var/obj/item/person_contents as anything in person_sent.gather_belongings(FALSE, FALSE)) + for(var/obj/item/person_contents as anything in person_sent.gather_belongings()) if(ishuman(person_sent)) var/mob/living/carbon/human/human_sent = person_sent if(person_contents == human_sent.w_uniform) continue //So all they're left with are shoes and uniform. if(person_contents == human_sent.shoes) continue - var/unequipped = person_sent.temporarilyRemoveItemFromInventory(person_contents) - if (!unequipped) - continue - person_contents.moveToNullspace() + person_sent.transferItemToLoc(person_contents) victim_belongings.Add(WEAKREF(person_contents)) var/obj/structure/closet/supplypod/extractionpod/pod = source diff --git a/code/modules/antagonists/traitor/objectives/kidnapping.dm b/code/modules/antagonists/traitor/objectives/kidnapping.dm index 0d4ff5cfd9971..ea7fef9b4b607 100644 --- a/code/modules/antagonists/traitor/objectives/kidnapping.dm +++ b/code/modules/antagonists/traitor/objectives/kidnapping.dm @@ -228,14 +228,13 @@ var/mob/living/carbon/human/sent_mob = entered_atom - for(var/obj/item/belonging in sent_mob.gather_belongings(FALSE, FALSE)) + for(var/obj/item/belonging in sent_mob.gather_belongings()) if(belonging == sent_mob.get_item_by_slot(ITEM_SLOT_ICLOTHING) || belonging == sent_mob.get_item_by_slot(ITEM_SLOT_FEET)) continue - var/unequipped = sent_mob.temporarilyRemoveItemFromInventory(belonging) + var/unequipped = sent_mob.transferItemToLoc(belonging) if (!unequipped) continue - belonging.moveToNullspace() target_belongings.Add(WEAKREF(belonging)) var/datum/market_item/hostage/market_item = sent_mob.process_capture(rand(1000, 3000)) diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm index b8bf9a8e3cf25..fe5f69fd9fa53 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm @@ -74,7 +74,7 @@ cost = 4 /datum/spellbook_entry/summon/curse_of_madness/buy_spell(mob/living/carbon/human/user, obj/item/spellbook/book, log_buy = TRUE) - var/message = tgui_input_text(user, "Whisper a secret truth to drive your victims to madness", "Whispers of Madness", max_length = MAX_MESSAGE_LEN) + var/message = tgui_input_text(user, "Whisper a secret truth to drive your victims to madness", "Whispers of Madness") if(!message || QDELETED(user) || QDELETED(book) || !can_buy(user, book)) return FALSE curse_of_madness(user, message) diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm index 25883370c0d1b..15900a6ac0b0a 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm @@ -147,7 +147,7 @@ haunt_color = spell_colour, \ haunt_duration = 10 SECONDS, \ aggro_radius = 0, \ - spawn_message = span_revenwarning("[sacrifice] begins to float and twirl into the air as it becomes enveloped in otherworldly energies..."), \ + spawn_message = span_revenwarning("[sacrifice] begins to float and twirl into the air as it becomes enveloped in otherworldy energies..."), \ ) addtimer(CALLBACK(sacrifice, TYPE_PROC_REF(/obj/item/food/cheese/wheel, consume_cheese)), 10 SECONDS) cheese_sacrificed += length(cheese_to_haunt) @@ -253,7 +253,7 @@ while(created < to_create && location_sanity < 100) var/turf/chosen_location = get_safe_random_station_turf() - // We don't want them close to each other - at least 1 tile of separation + // We don't want them close to each other - at least 1 tile of seperation var/list/nearby_things = range(1, chosen_location) var/obj/effect/heretic_influence/what_if_i_have_one = locate() in nearby_things var/obj/effect/visible_heretic_influence/what_if_i_had_one_but_its_used = locate() in nearby_things diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index fa6d9a515b680..335c934a32052 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -124,7 +124,7 @@ GLOBAL_LIST_EMPTY(wizard_spellbook_purchases_by_key) if(!owner.current) return if(!GLOB.wizardstart.len) - SSjob.send_to_late_join(owner.current) + SSjob.SendToLateJoin(owner.current) to_chat(owner, "HOT INSERTION, GO GO GO") owner.current.forceMove(pick(GLOB.wizardstart)) diff --git a/code/modules/antagonists/xeno/xeno.dm b/code/modules/antagonists/xeno/xeno.dm index 5ef26665bf238..59c83fd52ed11 100644 --- a/code/modules/antagonists/xeno/xeno.dm +++ b/code/modules/antagonists/xeno/xeno.dm @@ -160,7 +160,7 @@ else mind.add_antag_datum(/datum/antagonist/xeno) - mind.set_assigned_role(SSjob.get_job_type(/datum/job/xenomorph)) + mind.set_assigned_role(SSjob.GetJobType(/datum/job/xenomorph)) mind.special_role = ROLE_ALIEN /mob/living/carbon/alien/on_wabbajacked(mob/living/new_mob) @@ -170,7 +170,7 @@ if(isalien(new_mob)) return mind.remove_antag_datum(/datum/antagonist/xeno) - mind.set_assigned_role(SSjob.get_job_type(/datum/job/unassigned)) + mind.set_assigned_role(SSjob.GetJobType(/datum/job/unassigned)) mind.special_role = null #undef CAPTIVE_XENO_DEAD diff --git a/code/modules/art/paintings.dm b/code/modules/art/paintings.dm index 1c11e0f8086cc..2e330d31185da 100644 --- a/code/modules/art/paintings.dm +++ b/code/modules/art/paintings.dm @@ -417,7 +417,7 @@ /obj/item/canvas/proc/try_rename(mob/user) if(painting_metadata.loaded_from_json) // No renaming old paintings return TRUE - var/new_name = tgui_input_text(user, "What do you want to name the painting?", "Title Your Masterpiece", max_length = MAX_NAME_LEN) + var/new_name = tgui_input_text(user, "What do you want to name the painting?", "Title Your Masterpiece", null, MAX_NAME_LEN) new_name = reject_bad_name(new_name, allow_numbers = TRUE, ascii_only = FALSE, strict = TRUE, cap_after_symbols = FALSE) if(isnull(new_name)) return FALSE diff --git a/code/modules/art/statues.dm b/code/modules/art/statues.dm index da4a47dd843d8..fd64d212f3e80 100644 --- a/code/modules/art/statues.dm +++ b/code/modules/art/statues.dm @@ -36,7 +36,7 @@ /obj/structure/statue/attackby(obj/item/W, mob/living/user, params) add_fingerprint(user) if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!W.tool_start_check(user, amount=1)) return FALSE user.balloon_alert(user, "slicing apart...") if(W.use_tool(src, user, 40, volume=50)) diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index f20d364759927..b81eb26e7fae9 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -128,7 +128,7 @@ /** * Handles actual flashing part of the attack * - * This proc is awful in every sense of the way, someone should definitely refactor this whole code. + * This proc is awful in every sense of the way, someone should definately refactor this whole code. * Arguments: * * M - Victim * * user - Attacker @@ -161,7 +161,7 @@ else if(sigreturn & DEVIATION_OVERRIDE_NONE) deviation = DEVIATION_NONE - //If you face away from someone they shouldn't notice any effects. + //If you face away from someone they shouldnt notice any effects. if(deviation == DEVIATION_FULL) return @@ -185,7 +185,7 @@ /** * Handles the directionality of the attack * - * Returns the amount of 'deviation', 0 being facing each other, 1 being sideways, 2 being facing away from each other. + * Returns the amount of 'deviation', 0 being facing eachother, 1 being sideways, 2 being facing away from eachother. * Arguments: * * victim - Victim * * attacker - Attacker diff --git a/code/modules/asset_cache/assets/inventory.dm b/code/modules/asset_cache/assets/inventory.dm index 5aaab9332a852..0883dbd7515e5 100644 --- a/code/modules/asset_cache/assets/inventory.dm +++ b/code/modules/asset_cache/assets/inventory.dm @@ -14,7 +14,6 @@ "inventory-suit_storage.png" = 'icons/ui/inventory/suit_storage.png', "inventory-id.png" = 'icons/ui/inventory/id.png', "inventory-belt.png" = 'icons/ui/inventory/belt.png', - "inventory-tail.png" = 'icons/ui/inventory/tail.png', // DOPPLER ADDITION - tail item slot "inventory-back.png" = 'icons/ui/inventory/back.png', "inventory-pocket.png" = 'icons/ui/inventory/pocket.png', "inventory-collar.png" = 'icons/ui/inventory/collar.png', diff --git a/code/modules/asset_cache/assets/rtd.dm b/code/modules/asset_cache/assets/rtd.dm index 66899fcb943f1..23a3b0d71b2db 100644 --- a/code/modules/asset_cache/assets/rtd.dm +++ b/code/modules/asset_cache/assets/rtd.dm @@ -2,7 +2,7 @@ name = "rtd" /datum/asset/spritesheet/rtd/create_spritesheets() - //some tiles may share the same icon but have different properties to animate that icon + //some tiles may share the same icon but have diffrent properties to animate that icon //so we keep track of what icons we registered var/list/registered = list() diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index dc56aa3fda7f7..e7c5f5d35c7fa 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -304,7 +304,7 @@ our_excited_group = excited_group //update our cache if(our_excited_group && enemy_excited_group && enemy_tile.excited) //If you're both excited, no need to compare right? should_share_air = TRUE - else if(our_air.compare(enemy_air, ARCHIVE)) //Lets see if you're up for it + else if(our_air.compare(enemy_air)) //Lets see if you're up for it SSair.add_to_active(enemy_tile) //Add yourself young man var/datum/excited_group/existing_group = our_excited_group || enemy_excited_group || new if(!our_excited_group) @@ -332,7 +332,7 @@ var/datum/gas_mixture/planetary_mix = SSair.planetary[initial_gas_mix] // archive ourself again so we don't accidentally share more gas than we currently have LINDA_CYCLE_ARCHIVE(src) - if(our_air.compare(planetary_mix, ARCHIVE)) + if(our_air.compare(planetary_mix)) if(!our_excited_group) var/datum/excited_group/new_group = new new_group.add_turf(src) diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index f329b98bec06a..db2732be83fad 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -451,17 +451,16 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) //thermal energy of the system (self and sharer) is unchanged ///Compares sample to self to see if within acceptable ranges that group processing may be enabled -///Takes the gas index to read from as a second arg (either MOLES or ARCHIVE) ///Returns: a string indicating what check failed, or "" if check passes -/datum/gas_mixture/proc/compare(datum/gas_mixture/sample, index) +/datum/gas_mixture/proc/compare(datum/gas_mixture/sample) var/list/sample_gases = sample.gases //accessing datum vars is slower than proc vars var/list/cached_gases = gases var/moles_sum = 0 for(var/id in cached_gases | sample_gases) // compare gases from either mixture // Yes this is actually fast. I too hate it here - var/gas_moles = cached_gases[id]?[index] || 0 - var/sample_moles = sample_gases[id]?[index] || 0 + var/gas_moles = cached_gases[id]?[MOLES] || 0 + var/sample_moles = sample_gases[id]?[MOLES] || 0 // Brief explanation. We are much more likely to not pass this first check then pass the first and fail the second // Because of this, double calculating the delta is FASTER then inserting it into a var if(abs(gas_moles - sample_moles) > MINIMUM_MOLES_DELTA_TO_MOVE) @@ -471,12 +470,8 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) moles_sum += gas_moles if(moles_sum > MINIMUM_MOLES_DELTA_TO_MOVE) //Don't consider temp if there's not enough mols - if(index == ARCHIVE) - if(abs(temperature_archived - sample.temperature_archived) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) - return "temp" - else - if(abs(temperature - sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) - return "temp" + if(abs(temperature - sample.temperature) > MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND) + return "temp" return "" @@ -552,7 +547,7 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) /** * Counts how much pressure will there be if we impart MOLAR_ACCURACY amounts of our gas to the output gasmix. - * We do all of this without actually transferring it so don't worry about it changing the gasmix. + * We do all of this without actually transferring it so dont worry about it changing the gasmix. * Returns: Resulting pressure (number). * Args: * - output_air (gasmix). @@ -567,10 +562,10 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) * Args: * - output_air. The gas mix we want to pump to. * - target_pressure. The target pressure we want. - * - ignore_temperature. Returns a cheaper form of gas calculation, useful if the temperature difference between the two gasmixes is low or nonexistent. + * - ignore_temperature. Returns a cheaper form of gas calculation, useful if the temperature difference between the two gasmixes is low or nonexistant. */ /datum/gas_mixture/proc/gas_pressure_calculate(datum/gas_mixture/output_air, target_pressure, ignore_temperature = FALSE) - // So we don't need to iterate the gaslist multiple times. + // So we dont need to iterate the gaslist multiple times. var/our_moles = total_moles() var/output_moles = output_air.total_moles() var/output_pressure = output_air.return_pressure() diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index c040e30db3fcf..7bbfea3dcf253 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -85,7 +85,7 @@ rarity = 1000 purchaseable = TRUE base_value = 0.1 - desc = "A very common gas that used to pad artificial atmospheres to habitable pressure." + desc = "A very common gas that used to pad artifical atmospheres to habitable pressure." primary_color = "#ffff00" /datum/gas/carbon_dioxide //what the fuck is this? @@ -133,7 +133,7 @@ fusion_power = 10 rarity = 50 base_value = 2.5 - desc = "The most noble gas of them all. High quantities of hyper-noblium actively prevents reactions from occurring." + desc = "The most noble gas of them all. High quantities of hyper-noblium actively prevents reactions from occuring." primary_color = COLOR_TEAL /datum/gas/nitrous_oxide @@ -173,7 +173,7 @@ fusion_power = 5 rarity = 300 base_value = 2.5 - desc = "A highly flammable and radioactive gas." + desc = "A highly flammable and radioctive gas." primary_color = "#32cd32" /datum/gas/bz @@ -279,7 +279,7 @@ moles_visible = MOLES_GAS_VISIBLE rarity = 300 base_value = 4 - desc = "A potent fire suppressant. Removes oxygen from high temperature fires and cools down the area" + desc = "A potent fire supressant. Removes oxygen from high temperature fires and cools down the area" primary_color = COLOR_PURPLE /datum/gas/helium @@ -314,7 +314,7 @@ appearance_flags = TILE_BOUND vis_flags = NONE // The visual offset we are "on". - // Can't use the traditional loc because we are stored in nullspace, and we can't set plane before init because of the helping that SET_PLANE_EXPLICIT does IN init + // Can't use the tradtional loc because we are stored in nullspace, and we can't set plane before init because of the helping that SET_PLANE_EXPLICIT does IN init var/plane_offset = 0 /obj/effect/overlay/gas/New(state, alph, offset) diff --git a/code/modules/atmospherics/gasmixtures/reaction_factors.dm b/code/modules/atmospherics/gasmixtures/reaction_factors.dm index af058dc77877f..5148793179500 100644 --- a/code/modules/atmospherics/gasmixtures/reaction_factors.dm +++ b/code/modules/atmospherics/gasmixtures/reaction_factors.dm @@ -50,14 +50,14 @@ /datum/gas/carbon_dioxide = "Carbon Dioxide is formed at 1 mole per mole of freon consumed.", "Temperature" = "Can only occur between [FREON_LOWER_TEMPERATURE] - [FREON_MAXIMUM_BURN_TEMPERATURE] Kelvin", "Energy" = "[FIRE_FREON_ENERGY_CONSUMED] joules of energy is absorbed per mole of freon consumed.", - "Hot Ice" = "This reaction produces hot ice when occurring between [HOT_ICE_FORMATION_MINIMUM_TEMPERATURE]-[HOT_ICE_FORMATION_MAXIMUM_TEMPERATURE] kelvins", + "Hot Ice" = "This reaction produces hot ice when occuring between [HOT_ICE_FORMATION_MINIMUM_TEMPERATURE]-[HOT_ICE_FORMATION_MAXIMUM_TEMPERATURE] kelvins", ) /datum/gas_reaction/nitrousformation/init_factors() factor = list( /datum/gas/oxygen = "10 moles of Oxygen needs to be present for the reaction to occur. Oxygen is consumed at 0.5 moles per mole of nitrous oxide formed.", - /datum/gas/nitrogen = " 20 moles of Nitrogen needs to be present for the reaction to occur. Nitrogen is consumed at 1 mole per mole of nitrous oxide formed.", + /datum/gas/nitrogen = " 20 moles of Nitrogen needs to be present for the reaction to occur. Nitrogen is consumed at 1 mole per mole of nitrous oxife formed.", /datum/gas/bz = "5 moles of BZ needs to be present for the reaction to occur. Not consumed.", /datum/gas/nitrous_oxide = "Nitrous oxide gets produced rapidly.", "Temperature" = "Can only occur between [N2O_FORMATION_MIN_TEMPERATURE] - [N2O_FORMATION_MAX_TEMPERATURE] Kelvin", diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index f6c238c8d0e28..49254d077deae 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -328,7 +328,7 @@ SET_REACTION_RESULTS(burned_fuel) var/turf/open/location - if(istype(holder, /datum/pipeline)) //Find the tile the reaction is occurring on, or a random part of the network if it's a pipenet. + if(istype(holder, /datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet. var/datum/pipeline/pipenet = holder location = pick(pipenet.members) else if(isatom(holder)) @@ -686,7 +686,7 @@ var/list/cached_gases = air.gases var/temperature = air.temperature - //This reaction is aggressively slow. like, a tenth of a mole per fire slow. Keep that in mind + //This reaction is agressively slow. like, a tenth of a mole per fire slow. Keep that in mind var/heat_efficiency = min(temperature / NITRIUM_DECOMPOSITION_TEMP_DIVISOR, cached_gases[/datum/gas/nitrium][MOLES]) if (heat_efficiency <= 0 || (cached_gases[/datum/gas/nitrium][MOLES] - heat_efficiency < 0)) //Shouldn't produce gas from nothing. @@ -1091,7 +1091,7 @@ SET_REACTION_RESULTS(produced_amount) var/turf/open/location var/energy_released = produced_amount * PN_TRITIUM_CONVERSION_ENERGY - if(istype(holder,/datum/pipeline)) //Find the tile the reaction is occurring on, or a random part of the network if it's a pipenet. + if(istype(holder,/datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet. var/datum/pipeline/pipenet = holder location = pick(pipenet.members) else if(isatom(holder)) @@ -1143,7 +1143,7 @@ SET_REACTION_RESULTS(consumed_amount) var/turf/open/location var/energy_released = consumed_amount * PN_BZASE_ENERGY - if(istype(holder,/datum/pipeline)) //Find the tile the reaction is occurring on, or a random part of the network if it's a pipenet. + if(istype(holder,/datum/pipeline)) //Find the tile the reaction is occuring on, or a random part of the network if it's a pipenet. var/datum/pipeline/pipenet = holder location = pick(pipenet.members) else if(isatom(holder)) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 95758c22707c6..12e6c684079e6 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -34,7 +34,7 @@ ///The flags of the pipe/component (PIPING_ALL_LAYER | PIPING_ONE_PER_TURF | PIPING_DEFAULT_LAYER_ONLY | PIPING_CARDINAL_AUTONORMALIZE) var/pipe_flags = NONE - ///This only works on pipes, because they have 1000 subtypes which need to be visible and invisible under tiles, so we track this here + ///This only works on pipes, because they have 1000 subtypes wich need to be visible and invisible under tiles, so we track this here var/hide = TRUE ///The image of the pipe/device used for ventcrawling @@ -331,7 +331,7 @@ if(isnull(given_layer)) given_layer = piping_layer - // you can't place the machine on the same location as the target cause it blocks + // you cant place the machine on the same location as the target cause it blocks if(target.loc == loc) return FALSE @@ -478,7 +478,7 @@ * Called by wrench_act() before deconstruct() * Arguments: * * mob_user - the mob doing the act - * * pressures - it can be passed on from wrench_act(), it's the pressure difference between the environment pressure and the pipe internal pressure + * * pressures - it can be passed on from wrench_act(), it's the pressure difference between the enviroment pressure and the pipe internal pressure */ /obj/machinery/atmospherics/proc/unsafe_pressure_release(mob/user, pressures = null) if(!user) @@ -569,7 +569,7 @@ // Handles mob movement inside a pipenet /obj/machinery/atmospherics/relaymove(mob/living/user, direction) - if(!direction) //can't go this way. + if(!direction) //cant go this way. return if(user in buckled_mobs)// fixes buckle ventcrawl edgecase fuck bug return diff --git a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm index e3ef70489ac85..9f2f6a96f4bf8 100644 --- a/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm +++ b/code/modules/atmospherics/machinery/components/fusion/hfr_procs.dm @@ -430,7 +430,7 @@ radio.talk_into(src, "[safe_alert] Failsafe has been disengaged.", common_channel) final_countdown = FALSE return - else if((i % 50) != 0 && i > 50) // A message once every 5 seconds until the final 5 seconds which count down individually + else if((i % 50) != 0 && i > 50) // A message once every 5 seconds until the final 5 seconds which count down individualy sleep(1 SECONDS) continue else if(i > 50) diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm index b5cc7c628df29..565ada80b931e 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer.dm @@ -106,7 +106,7 @@ return TRUE return FALSE -///Injects the gases from the input inside the internal gasmix, the amount is dependent on the gas_input var +///Injects the gases from the input inside the internal gasmix, the amount is dependant on the gas_input var /obj/machinery/atmospherics/components/binary/crystallizer/proc/inject_gases() var/datum/gas_mixture/contents = airs[2] for(var/gas_type in selected_recipe.requirements) diff --git a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm index 6308e1eee611e..26cb395113519 100644 --- a/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm +++ b/code/modules/atmospherics/machinery/components/gas_recipe_machines/crystallizer_items.dm @@ -1,6 +1,6 @@ /obj/item/hypernoblium_crystal name = "Hypernoblium Crystal" - desc = "Crystallized oxygen and hypernoblium stored in a bottle to pressureproof your clothes or stop reactions occurring in portable atmospheric devices." + desc = "Crystalized oxygen and hypernoblium stored in a bottle to pressureproof your clothes or stop reactions occuring in portable atmospheric devices." icon = 'icons/obj/pipes_n_cables/atmos.dmi' icon_state = "hypernoblium_crystal" var/uses = 1 diff --git a/code/modules/atmospherics/machinery/components/tank.dm b/code/modules/atmospherics/machinery/components/tank.dm index f76f3dc470f57..ee1e61428d196 100644 --- a/code/modules/atmospherics/machinery/components/tank.dm +++ b/code/modules/atmospherics/machinery/components/tank.dm @@ -304,7 +304,7 @@ . = TRUE if(atom_integrity >= max_integrity) return - if(!tool.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!tool.tool_start_check(user, amount = 0)) return to_chat(user, span_notice("You begin to repair the cracks in the gas tank...")) var/repair_amount = max_integrity / 10 @@ -562,7 +562,7 @@ if(!anchored) to_chat(user, span_notice("You need to wrench [src] to the floor before finishing.")) return - if(!tool.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!tool.tool_start_check(user, amount = 0)) return to_chat(user, span_notice("You begin sealing the outer plating with the welder...")) if(!tool.use_tool(src, user, 2 SECONDS, volume = 60)) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index e6c60140f3a70..a5a03c3ba1204 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -397,7 +397,7 @@ return ITEM_INTERACT_SUCCESS /obj/machinery/portable_atmospherics/canister/welder_act_secondary(mob/living/user, obj/item/I) - if(!I.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!I.tool_start_check(user, amount=1)) return ITEM_INTERACT_BLOCKING var/pressure = air_contents.return_pressure() diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index edd8e30eaf8ce..210eb9b0d9e28 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -95,7 +95,7 @@ /obj/machinery/portable_atmospherics/welder_act(mob/living/user, obj/item/tool) if(user.combat_mode) return ITEM_INTERACT_SKIP_TO_ATTACK - if(atom_integrity >= max_integrity || (machine_stat & BROKEN) || !tool.tool_start_check(user, amount = 1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(atom_integrity >= max_integrity || (machine_stat & BROKEN) || !tool.tool_start_check(user, amount = 1)) return ITEM_INTERACT_BLOCKING balloon_alert(user, "repairing...") while(tool.use_tool(src, user, 2.5 SECONDS, volume=40)) @@ -223,17 +223,16 @@ if(!user.transferItemToLoc(new_tank, src)) return FALSE + investigate_log("had its internal [holding] swapped with [new_tank] by [key_name(user)].", INVESTIGATE_ATMOS) + to_chat(user, span_notice("[holding ? "In one smooth motion you pop [holding] out of [src]'s connector and replace it with [new_tank]" : "You insert [new_tank] into [src]"].")) + if(holding && new_tank)//for when we are actually switching tanks - investigate_log("had its internal [holding] swapped with [new_tank] by [key_name(user)].", INVESTIGATE_ATMOS) - to_chat(user, span_notice("In one smooth motion you pop [holding] out of [src]'s connector and replace it with [new_tank].")) user.put_in_hands(holding) UnregisterSignal(holding, COMSIG_QDELETING) holding = new_tank RegisterSignal(holding, COMSIG_QDELETING, PROC_REF(unregister_holding)) playsound(src, list(insert_sound,remove_sound), sound_vol) else if(holding)//we remove a tank - investigate_log("had its internal [holding] removed by [key_name(user)].", INVESTIGATE_ATMOS) - to_chat(user, span_notice("You remove [holding] from [src].")) if(Adjacent(user)) user.put_in_hands(holding) else @@ -242,8 +241,6 @@ UnregisterSignal(holding, COMSIG_QDELETING) holding = null else if(new_tank)//we insert the tank - investigate_log("had [new_tank] inserted into it by [key_name(user)].", INVESTIGATE_ATMOS) - to_chat(user, span_notice("You insert [new_tank] into [src].")) holding = new_tank playsound(src, insert_sound, sound_vol) RegisterSignal(holding, COMSIG_QDELETING, PROC_REF(unregister_holding)) diff --git a/code/modules/autowiki/pages/base.dm b/code/modules/autowiki/pages/base.dm index ce32bfd4032b7..8e745ace61c2d 100644 --- a/code/modules/autowiki/pages/base.dm +++ b/code/modules/autowiki/pages/base.dm @@ -46,12 +46,7 @@ if (IsAdminAdvancedProcCall()) return - var/static/uploaded_icons = list() - if(uploaded_icons["[name]"]) - CRASH("We tried uploading an icon, but the name \"[name]\" was already taken!") - fcopy(icon, "data/autowiki_files/[name].png") - uploaded_icons["[name]"] = TRUE /// Escape a parameter such that it can be correctly put inside a wiki output /datum/autowiki/proc/escape_value(parameter) diff --git a/code/modules/autowiki/pages/soup.dm b/code/modules/autowiki/pages/soup.dm index 754beb3a82adb..f67d00e97a057 100644 --- a/code/modules/autowiki/pages/soup.dm +++ b/code/modules/autowiki/pages/soup.dm @@ -16,7 +16,6 @@ var/container_for_images = /obj/item/reagent_containers/cup/bowl - var/list/already_generated_icons = list() for(var/soup_recipe_type in subtypesof(/datum/chemical_reaction/food/soup)) var/datum/chemical_reaction/food/soup/soup_recipe = new soup_recipe_type() // Used to determine what icon is displayed on the wiki @@ -124,17 +123,14 @@ template_list["results"] = escape_value(compiled_results) // -- While we're here, generate an icon of the bowl -- - - if(!already_generated_icons[filename]) - if(!soup_icon_state) - var/obj/item/reagent_containers/cup/bowl/soup_bowl = new() - soup_bowl.reagents.add_reagent(result_soup_type, soup_bowl.reagents.maximum_volume) - upload_icon(getFlatIcon(soup_bowl, no_anim = TRUE), filename) - qdel(soup_bowl) - else - var/image/compiled_image = image(icon = soup_icon, icon_state = soup_icon_state) - upload_icon(getFlatIcon(compiled_image, no_anim = TRUE), filename) - already_generated_icons[filename] = TRUE + if(!soup_icon_state) + var/obj/item/reagent_containers/cup/bowl/soup_bowl = new() + soup_bowl.reagents.add_reagent(result_soup_type, soup_bowl.reagents.maximum_volume) + upload_icon(getFlatIcon(soup_bowl, no_anim = TRUE), filename) + qdel(soup_bowl) + else + var/image/compiled_image = image(icon = soup_icon, icon_state = soup_icon_state) + upload_icon(getFlatIcon(compiled_image, no_anim = TRUE), filename) // -- Cleanup -- qdel(soup_recipe) diff --git a/code/modules/autowiki/pages/vending.dm b/code/modules/autowiki/pages/vending.dm index e110afa760ea2..0a8dd3db0a9d5 100644 --- a/code/modules/autowiki/pages/vending.dm +++ b/code/modules/autowiki/pages/vending.dm @@ -10,10 +10,7 @@ // So we put it inside, something var/obj/parent = new - for (var/obj/machinery/vending/vending_type as anything in sort_list(subtypesof(/obj/machinery/vending), GLOBAL_PROC_REF(cmp_typepaths_asc))) - var/obj/machinery/vending/parent_machine = type2parent(vending_type) - if(initial(parent_machine.name) == initial(vending_type.name)) - continue //Same name, likely just a slightly touched up subtype for specific maps. + for (var/vending_type in sort_list(subtypesof(/obj/machinery/vending), GLOBAL_PROC_REF(cmp_typepaths_asc))) var/obj/machinery/vending/vending_machine = new vending_type(parent) vending_machine.use_power = FALSE vending_machine.update_icon(UPDATE_ICON_STATE) diff --git a/code/modules/awaymissions/cordon.dm b/code/modules/awaymissions/cordon.dm index 738efa1d7c21f..285d0d49e1051 100644 --- a/code/modules/awaymissions/cordon.dm +++ b/code/modules/awaymissions/cordon.dm @@ -49,10 +49,10 @@ /turf/cordon/Bumped(atom/movable/bumped_atom) . = ..() - if(HAS_TRAIT(bumped_atom, TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT)) //we could feasibly reach the border, so just don't + if(HAS_TRAIT(bumped_atom, TRAIT_FREE_HYPERSPACE_SOFTCORDON_MOVEMENT)) //we could feasibly reach the border, so just dont dump_in_space(bumped_atom) -/// Area used in conjunction with the cordon turf to create a fully functioning world border. +/// Area used in conjuction with the cordon turf to create a fully functioning world border. /area/misc/cordon name = "CORDON" icon_state = "cordon" diff --git a/code/modules/basketball/basketball.dm b/code/modules/basketball/basketball.dm index c69c2fd1f7833..35579dc448282 100644 --- a/code/modules/basketball/basketball.dm +++ b/code/modules/basketball/basketball.dm @@ -8,6 +8,7 @@ inhand_icon_state = "basketball" desc = "Here's your chance, do your dance at the Space Jam." w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets + item_flags = XENOMORPH_HOLDABLE // playing ball against a xeno is rigged since they cannot be disarmed /// The person dribbling the basketball var/mob/living/wielder /// So the basketball doesn't make sound every step diff --git a/code/modules/bitrunning/areas.dm b/code/modules/bitrunning/areas.dm index 0656f9d65b389..4fcf0a0496e47 100644 --- a/code/modules/bitrunning/areas.dm +++ b/code/modules/bitrunning/areas.dm @@ -14,7 +14,7 @@ name = "Virtual Domain Ruins" icon_state = "bit_ruin" icon = 'icons/area/areas_station.dmi' - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA has_gravity = STANDARD_GRAVITY requires_power = FALSE @@ -26,7 +26,7 @@ /area/virtual_domain/safehouse name = "Virtual Domain Safehouse" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA | UNLIMITED_FISHING + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA icon_state = "bit_safe" requires_power = FALSE sound_environment = SOUND_ENVIRONMENT_ROOM @@ -36,30 +36,30 @@ /area/lavaland/surface/outdoors/virtual_domain name = "Virtual Domain Lava Ruins" icon_state = "bit_ruin" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA /area/icemoon/underground/explored/virtual_domain name = "Virtual Domain Ice Ruins" icon_state = "bit_ice" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA /area/ruin/space/virtual_domain name = "Virtual Domain Unexplored Location" icon = 'icons/area/areas_station.dmi' icon_state = "bit_ruin" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA /area/space/virtual_domain name = "Virtual Domain Space" icon = 'icons/area/areas_station.dmi' icon_state = "bit_space" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA | UNLIMITED_FISHING + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | HIDDEN_AREA ///Areas that virtual entities should not be in /area/virtual_domain/protected_space name = "Virtual Domain Safe Zone" - area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA | UNLIMITED_FISHING + area_flags = UNIQUE_AREA | NOTELEPORT | EVENT_PROTECTED | VIRTUAL_SAFE_AREA icon_state = "bit_safe" /area/virtual_domain/protected_space/fullbright diff --git a/code/modules/bitrunning/server/threats.dm b/code/modules/bitrunning/server/threats.dm index ea612a43efaea..6b9a334d9252a 100644 --- a/code/modules/bitrunning/server/threats.dm +++ b/code/modules/bitrunning/server/threats.dm @@ -119,7 +119,7 @@ var/datum/mind/antag_mind = new_mob.mind antag_mind.add_antag_datum(chosen_role) antag_mind.special_role = ROLE_GLITCH - antag_mind.set_assigned_role(SSjob.get_job_type(/datum/job/bitrunning_glitch)) + antag_mind.set_assigned_role(SSjob.GetJobType(/datum/job/bitrunning_glitch)) playsound(new_mob, 'sound/magic/ethereal_exit.ogg', 50, vary = TRUE) message_admins("[ADMIN_LOOKUPFLW(new_mob)] has been made into virtual antagonist by an event.") diff --git a/code/modules/bitrunning/spawners.dm b/code/modules/bitrunning/spawners.dm index 26288d54a1555..4b5f79a43b186 100644 --- a/code/modules/bitrunning/spawners.dm +++ b/code/modules/bitrunning/spawners.dm @@ -1,5 +1,5 @@ /obj/effect/mob_spawn/ghost_role/human/virtual_domain - outfit = /datum/outfit/virtual_pirate + outfit = /datum/outfit/pirate prompt_name = "a virtual domain debug entity" flavour_text = "You probably shouldn't be seeing this, contact a coder!" you_are_text = "You are NOT supposed to be here. How did you let this happen?" @@ -32,16 +32,6 @@ you_are_text = "You are a virtual pirate. Yarrr!" flavour_text = " There's a LANDLUBBER after yer booty. Stop them!" -/datum/outfit/virtual_pirate - name = "Virtual Pirate" - id = /obj/item/card/id/advanced - id_trim = /datum/id_trim/pirate - uniform = /obj/item/clothing/under/costume/pirate - suit = /obj/item/clothing/suit/costume/pirate/armored - glasses = /obj/item/clothing/glasses/eyepatch - head = /obj/item/clothing/head/costume/pirate/bandana/armored - shoes = /obj/item/clothing/shoes/pirate/armored - /obj/effect/mob_spawn/ghost_role/human/virtual_domain/pirate/special(mob/living/spawned_mob, mob/mob_possessor) . = ..() diff --git a/code/modules/bitrunning/virtual_domain/domains/meta_central.dm b/code/modules/bitrunning/virtual_domain/domains/meta_central.dm index dc1029353c320..0bc35ceaf40e4 100644 --- a/code/modules/bitrunning/virtual_domain/domains/meta_central.dm +++ b/code/modules/bitrunning/virtual_domain/domains/meta_central.dm @@ -10,4 +10,3 @@ map_name = "meta_central" mob_modules = list(/datum/modular_mob_segment/revolutionary) reward_points = BITRUNNER_REWARD_LOW - announce_to_ghosts = TRUE diff --git a/code/modules/capture_the_flag/ctf_controller.dm b/code/modules/capture_the_flag/ctf_controller.dm index dbc152d6bf467..b5df4981c9f15 100644 --- a/code/modules/capture_the_flag/ctf_controller.dm +++ b/code/modules/capture_the_flag/ctf_controller.dm @@ -63,7 +63,7 @@ ///Unloading CTF removes the map entirely and allows for a new map to be loaded in its place. /datum/ctf_controller/proc/unload_ctf() if(game_id != CTF_GHOST_CTF_GAME_ID) - return //At present we only support unloading standard centcom ctf, if we intend to support ctf unloading elsewhere then this proc will need to be amended. + return //At present we only support unloading standard centcom ctf, if we intend to support ctf unloading elsewhere then this proc will need to be ammended. stop_ctf() new /obj/effect/landmark/ctf(get_turf(GLOB.ctf_spawner)) @@ -187,7 +187,7 @@ respawn_cooldown = CTF_DEFAULT_RESPAWN instagib_mode = !instagib_mode -///A datum that holds details about individual CTF teams, any team specific CTF functionality should be implemented here. +///A datum that holds details about individual CTF teams, any team specific CTF functionality should be implimented here. /datum/ctf_team ///Reference to the spawn point that this team uses. var/obj/machinery/ctf/spawner/spawner @@ -206,7 +206,7 @@ team_color = spawner.team team_span = spawner.team_span -///If the team is destroyed all players in that team need their component removed. +///If the team is destroyed all players in that team need their componenet removed. /datum/ctf_team/Destroy(force) for(var/player in team_members) var/datum/component/ctf_player/ctf_player = team_members[player] @@ -217,7 +217,7 @@ /datum/ctf_team/proc/score_points(points_scored) points += points_scored -///Resets this teams score and clears its member list. All members will be dusted and have their player component removed. +///Resets this teams score and clears its member list. All members will be dusted and have their player componenet removed. /datum/ctf_team/proc/reset_team() points = 0 for(var/player in team_members) @@ -231,7 +231,7 @@ var/datum/component/ctf_player/ctf_player = team_members[player] ctf_player.send_message(message) -///Creates a CTF game with the provided team ID then returns a reference to the new controller. If a controller already exists provides a reference to it. +///Creates a CTF game with the provided teeam ID then returns a reference to the new controller. If a controller already exists provides a reference to it. /proc/create_ctf_game(game_id) if(GLOB.ctf_games[game_id]) return GLOB.ctf_games[game_id] diff --git a/code/modules/capture_the_flag/ctf_map_loading.dm b/code/modules/capture_the_flag/ctf_map_loading.dm index 4c2f6b319e036..6448533a3c74b 100644 --- a/code/modules/capture_the_flag/ctf_map_loading.dm +++ b/code/modules/capture_the_flag/ctf_map_loading.dm @@ -100,5 +100,5 @@ GLOBAL_DATUM(ctf_spawner, /obj/effect/landmark/ctf) /datum/map_template/ctf/turbine name = "Turbine" - description = "A CTF map that takes place in a familiar facility. Don't try to hold out mid- There's no sentries in this version." + description = "A CTF map that takes place in a familiar facility. Don't try to hold out mid- Theres no sentries in this version." mappath = "_maps/map_files/CTF/turbine.dmm" diff --git a/code/modules/capture_the_flag/ctf_player_component.dm b/code/modules/capture_the_flag/ctf_player_component.dm index 5a02a954aba6a..c51b48b918c98 100644 --- a/code/modules/capture_the_flag/ctf_player_component.dm +++ b/code/modules/capture_the_flag/ctf_player_component.dm @@ -1,4 +1,4 @@ -///A component added to the mind of anyone who is playing in an ongoing CTF match. Any player specific CTF functionality should be implemented here. (someone should implement score tracking here) +///A component added to the mind of anyone who is playing in an ongoing CTF match. Any player specific CTF functionality should be implimented here. (someone should impliment score tracking here) /datum/component/ctf_player ///The team that this player is associated with. var/team diff --git a/code/modules/cargo/bounties/science.dm b/code/modules/cargo/bounties/science.dm index be0edbe1eb64b..0206ea41967d6 100644 --- a/code/modules/cargo/bounties/science.dm +++ b/code/modules/cargo/bounties/science.dm @@ -55,7 +55,7 @@ //******Modular Computer Bounties****** /datum/bounty/item/science/ntnet name = "Modular Tablets" - description = "Turns out that NTNet wasn't actually a fad after all, who knew. Send some fully functional PDAs to help get us up to speed on the latest technology." + description = "Turns out that NTNet wasn't actually a fad afterall, who knew. Send some fully functional PDAs to help get us up to speed on the latest technology." reward = CARGO_CRATE_VALUE * 6 required_count = 4 wanted_types = list(/obj/item/modular_computer/pda = TRUE) diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index 179ca701adc0c..cd86761587680 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -343,10 +343,10 @@ ADMIN_VERB(centcom_podlauncher, R_ADMIN, "Config/Launch Supplypod", "Configure a temp_pod.adminNamed = FALSE temp_pod.setStyle(temp_pod.style) //This resets the name of the pod based on its current style (see supplypod/setStyle() proc) return - var/nameInput= tgui_input_text(usr, "Enter a custom name", "Custom name", temp_pod.style::name, max_length = MAX_NAME_LEN) + var/nameInput= tgui_input_text(usr, "Enter a custom name", "Custom name", temp_pod.style::name, MAX_NAME_LEN) //Gather input for name and desc if (isnull(nameInput)) return - var/descInput = tgui_input_text(usr, "Enter a custom desc", "Custom description", temp_pod.style::desc, max_length = MAX_DESC_LEN) + var/descInput = tgui_input_text(usr, "Enter a custom desc", "Custom description", temp_pod.style::desc) if (isnull(descInput)) return temp_pod.name = nameInput diff --git a/code/modules/cargo/order.dm b/code/modules/cargo/order.dm index ef6484f21fc1f..a10bb3da5c00c 100644 --- a/code/modules/cargo/order.dm +++ b/code/modules/cargo/order.dm @@ -140,7 +140,7 @@ manifest_text += "Item: [packname]
" manifest_text += "Contents:
" manifest_text += "
- "
- var/container_contents = list() // Associative list with the format (item_name = nº of occurrences, ...)
+ var/container_contents = list() // Associative list with the format (item_name = nº of occurences, ...)
for(var/atom/movable/AM in container.contents - manifest_paper)
container_contents[AM.name]++
if((manifest_paper.errors & MANIFEST_ERROR_CONTENTS) && container_contents)
diff --git a/code/modules/cargo/orderconsole.dm b/code/modules/cargo/orderconsole.dm
index ac37511f789a4..ae46d9943818b 100644
--- a/code/modules/cargo/orderconsole.dm
+++ b/code/modules/cargo/orderconsole.dm
@@ -235,7 +235,7 @@
var/reason = ""
if(requestonly && !self_paid)
working_list = SSshuttle.request_list
- reason = tgui_input_text(user, "Reason", name, max_length = MAX_MESSAGE_LEN)
+ reason = tgui_input_text(user, "Reason", name)
if(isnull(reason))
return
@@ -384,7 +384,7 @@
return add_item(ui.user, supply_pack_id)
if("remove")
var/order_name = params["order_name"]
- //try removing at least one item with the specified name. An order may not be removed if it was from the department
+ //try removing atleast one item with the specified name. An order may not be removed if it was from the department
for(var/datum/supply_order/order in SSshuttle.shopping_list)
if(order.pack.name != order_name)
continue
diff --git a/code/modules/cargo/packs/engineering.dm b/code/modules/cargo/packs/engineering.dm
index dd376ec201747..e8255a58e6431 100644
--- a/code/modules/cargo/packs/engineering.dm
+++ b/code/modules/cargo/packs/engineering.dm
@@ -199,6 +199,7 @@
desc = "Protect the very existence of this station with these Anti-Meteor defenses. \
Contains three Shield Generator Satellites."
cost = CARGO_CRATE_VALUE * 6
+ special = TRUE
access_view = ACCESS_COMMAND
contains = list(/obj/machinery/satellite/meteor_shield = 3)
crate_name= "shield sat crate"
@@ -208,6 +209,7 @@
name = "Shield System Control Board"
desc = "A control system for the Shield Generator Satellite system."
cost = CARGO_CRATE_VALUE * 10
+ special = TRUE
access_view = ACCESS_COMMAND
contains = list(/obj/item/circuitboard/computer/sat_control)
crate_name= "shield control board crate"
diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm
index a47c92fabc449..f405fc7de3a8a 100644
--- a/code/modules/cargo/packs/organic.dm
+++ b/code/modules/cargo/packs/organic.dm
@@ -101,8 +101,8 @@
/datum/supply_pack/organic/randomized/chef/fruits
name = "Fruit Crate"
- desc = "Rich in vitamins. Contains a lime, orange, watermelon, apple, \
- berries and a lemon."
+ desc = "Rich of vitamins. Contains a lime, orange, watermelon, apple, \
+ berries and a lime."
cost = CARGO_CRATE_VALUE * 3
contains = list(/obj/item/food/grown/citrus/lime,
/obj/item/food/grown/citrus/orange,
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index cbf05c8c0c256..833142ed34b03 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -181,7 +181,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
data["character_profiles"] = create_character_profiles()
data["character_preview_view"] = character_preview_view.assigned_map
- data["overflow_role"] = SSjob.get_job_type(SSjob.overflow_role).title
+ data["overflow_role"] = SSjob.GetJobType(SSjob.overflow_role).title
data["window"] = current_window
data["content_unlocked"] = unlock_content
diff --git a/code/modules/client/preferences/middleware/jobs.dm b/code/modules/client/preferences/middleware/jobs.dm
index 392822eac6149..201e57668ea6a 100644
--- a/code/modules/client/preferences/middleware/jobs.dm
+++ b/code/modules/client/preferences/middleware/jobs.dm
@@ -10,7 +10,7 @@
if (level != null && level != JP_LOW && level != JP_MEDIUM && level != JP_HIGH)
return FALSE
- var/datum/job/job = SSjob.get_job(job_title)
+ var/datum/job/job = SSjob.GetJob(job_title)
if (isnull(job))
return FALSE
diff --git a/code/modules/client/preferences/species_features/vampire.dm b/code/modules/client/preferences/species_features/vampire.dm
index f720dca3649ec..5ecdae7b1bf8e 100644
--- a/code/modules/client/preferences/species_features/vampire.dm
+++ b/code/modules/client/preferences/species_features/vampire.dm
@@ -32,7 +32,7 @@ GLOBAL_LIST_EMPTY(vampire_houses)
//find and setup the house (department) this vampire is joining
var/datum/job_department/vampire_house
- var/datum/job/vampire_job = SSjob.get_job(target.job)
+ var/datum/job/vampire_job = SSjob.GetJob(target.job)
if(!vampire_job) //no job or no mind LOSERS
return
var/list/valid_departments = (SSjob.joinable_departments.Copy()) - list(/datum/job_department/silicon, /datum/job_department/undefined)
diff --git a/code/modules/clothing/belts/polymorph_belt.dm b/code/modules/clothing/belts/polymorph_belt.dm
index 9f28c33e01964..fb09b2e68c8f1 100644
--- a/code/modules/clothing/belts/polymorph_belt.dm
+++ b/code/modules/clothing/belts/polymorph_belt.dm
@@ -104,14 +104,9 @@
invocation_type = INVOCATION_NONE
spell_requirements = NONE
possible_shapes = list(/mob/living/basic/cockroach)
- can_be_shared = FALSE
/// Amount of time it takes us to transform back or forth
var/channel_time = 3 SECONDS
-/datum/action/cooldown/spell/shapeshift/polymorph_belt/cast(mob/living/cast_on)
- cast_on = owner //make sure this is only affecting the wearer of the belt
- return ..()
-
/datum/action/cooldown/spell/shapeshift/polymorph_belt/Remove(mob/remove_from)
var/datum/status_effect/shapechange_mob/shapechange = remove_from.has_status_effect(/datum/status_effect/shapechange_mob/from_spell)
var/atom/changer = shapechange?.caster_mob || remove_from
@@ -119,7 +114,6 @@
return ..()
/datum/action/cooldown/spell/shapeshift/polymorph_belt/before_cast(mob/living/cast_on)
- cast_on = owner
. = ..()
if (. & SPELL_CANCEL_CAST)
return
diff --git a/code/modules/clothing/chameleon/_chameleon_action.dm b/code/modules/clothing/chameleon/_chameleon_action.dm
index e03f64f6292f8..25d6744152156 100644
--- a/code/modules/clothing/chameleon/_chameleon_action.dm
+++ b/code/modules/clothing/chameleon/_chameleon_action.dm
@@ -230,7 +230,7 @@
if(istype(applying_from, /datum/outfit/job))
var/datum/outfit/job/job_outfit = applying_from
- var/datum/job/job_datum = SSjob.get_job_type(job_outfit.jobtype)
+ var/datum/job/job_datum = SSjob.GetJobType(job_outfit.jobtype)
apply_job_data(job_datum)
update_look(using_item_type)
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 8260acaa9474e..d4705aee14c43 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -314,6 +314,14 @@
. += span_warning("[p_Theyre()] completely shredded and require[p_s()] mending before [p_they()] can be worn again!")
return
+ switch (max_heat_protection_temperature)
+ if (400 to 1000)
+ . += "[src] offers the wearer limited protection from fire."
+ if (1001 to 1600)
+ . += "[src] offers the wearer some protection from fire."
+ if (1601 to 35000)
+ . += "[src] offers the wearer robust protection from fire."
+
if(TRAIT_FAST_CUFFING in clothing_traits)
. += "[src] increase the speed that you handcuff others."
@@ -348,38 +356,6 @@
if(get_armor().has_any_armor() || (flags_cover & (HEADCOVERSMOUTH|PEPPERPROOF)) || (clothing_flags & STOPSPRESSUREDAMAGE) || (visor_flags & STOPSPRESSUREDAMAGE))
. += span_notice("It has a tag listing its protection classes.")
-/obj/item/clothing/examine_tags(mob/user)
- . = ..()
- if (clothing_flags & THICKMATERIAL)
- .["thick"] = "Protects from most injections and sprays."
- if (clothing_flags & CASTING_CLOTHES)
- .["magical"] = "Allows magical beings to cast spells when wearing [src]."
- if((clothing_flags & STOPSPRESSUREDAMAGE) || (visor_flags & STOPSPRESSUREDAMAGE))
- .["pressureproof"] = "Protects the wearer from extremely low or high pressure, such as vacuum of space."
- if(flags_cover & PEPPERPROOF)
- .["pepperproof"] = "Protects the wearer from the effects of pepperspray."
- if (heat_protection || cold_protection)
- var/heat_desc
- var/cold_desc
- switch (max_heat_protection_temperature)
- if (400 to 1000)
- heat_desc = "high"
- if (1001 to 1600)
- heat_desc = "very high"
- if (1601 to 35000)
- heat_desc = "extremely high"
- switch (min_cold_protection_temperature)
- if (160 to 272)
- cold_desc = "low"
- if (72 to 159)
- cold_desc = "very low"
- if (0 to 71)
- cold_desc = "extremely low"
- .["thermally insulated"] = "Protects the wearer from [jointext(list(heat_desc, cold_desc), " and ")] temperatures."
-
-/obj/item/clothing/examine_descriptor(mob/user)
- return "clothing"
-
/obj/item/clothing/Topic(href, href_list)
. = ..()
@@ -407,7 +383,7 @@
added_damage_header = TRUE
readout += "[armor_to_protection_name(durability_key)] [armor_to_protection_class(rating)]"
- if((flags_cover & HEADCOVERSMOUTH) || (flags_cover & PEPPERPROOF))
+ if(flags_cover & HEADCOVERSMOUTH || flags_cover & PEPPERPROOF)
var/list/things_blocked = list()
if(flags_cover & HEADCOVERSMOUTH)
things_blocked += span_tooltip("Because this item is worn on the head and is covering the mouth, it will block facehugger proboscides, killing facehuggers.", "facehuggers")
@@ -417,7 +393,7 @@
readout += "COVERAGE"
readout += "It will block [english_list(things_blocked)]."
- if((clothing_flags & STOPSPRESSUREDAMAGE) || (visor_flags & STOPSPRESSUREDAMAGE))
+ if(clothing_flags & STOPSPRESSUREDAMAGE || visor_flags & STOPSPRESSUREDAMAGE)
var/list/parts_covered = list()
var/output_string = "It"
if(!(clothing_flags & STOPSPRESSUREDAMAGE))
@@ -429,19 +405,8 @@
if(length(parts_covered)) // Just in case someone makes spaceproof gloves or something
readout += "[output_string] will protect the wearer's [english_list(parts_covered)] from [span_tooltip("The extremely low pressure is the biggest danger posed by the vacuum of space.", "low pressure")]."
- var/heat_prot
- switch (max_heat_protection_temperature)
- if (400 to 1000)
- heat_prot = "minor"
- if (1001 to 1600)
- heat_prot = "some"
- if (1601 to 35000)
- heat_prot = "extreme"
- if (heat_prot)
- . += "[src] offers the wearer [heat_protection] protection from heat, up to [max_heat_protection_temperature] kelvin."
-
- if(min_cold_protection_temperature)
- readout += "It will insulate the wearer from [min_cold_protection_temperature <= SPACE_SUIT_MIN_TEMP_PROTECT ? span_tooltip("While not as dangerous as the lack of pressure, the extremely low temperature of space is also a hazard.", "the cold of space, down to [min_cold_protection_temperature] kelvin") : "cold, down to [min_cold_protection_temperature] kelvin"]."
+ if(min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT)
+ readout += "It will insulate the wearer from [span_tooltip("While not as dangerous as the lack of pressure, the extremely low temperature of space is also a hazard.", "the cold of space")]."
if(!length(readout))
readout += "No armor or durability information available."
diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm
index bdc294f5366ae..5ae5b628808e1 100644
--- a/code/modules/clothing/ears/_ears.dm
+++ b/code/modules/clothing/ears/_ears.dm
@@ -26,4 +26,3 @@
. = ..()
AddElement(/datum/element/earhealing)
AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS))
- AddComponent(/datum/component/adjust_fishing_difficulty, -1)
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 3bb50a5e6b176..4ed35997680c0 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -344,7 +344,6 @@
/obj/item/clothing/glasses/sunglasses/Initialize(mapload)
. = ..()
add_glasses_slapcraft_component()
- AddComponent(/datum/component/adjust_fishing_difficulty, -1)
/obj/item/clothing/glasses/sunglasses/proc/add_glasses_slapcraft_component()
var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/hudsunsec, /datum/crafting_recipe/hudsunmed, /datum/crafting_recipe/hudsundiag, /datum/crafting_recipe/scienceglasses)
@@ -445,21 +444,9 @@
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
glass_colour_type = /datum/client_colour/glass_colour/gray
-/obj/item/clothing/glasses/welding/Initialize(mapload)
- . = ..()
- if(!up)
- AddComponent(/datum/component/adjust_fishing_difficulty, 8)
-
-/obj/item/clothing/glasses/welding/attack_self(mob/living/user)
+/obj/item/clothing/glasses/welding/attack_self(mob/user)
adjust_visor(user)
-/obj/item/clothing/glasses/welding/adjust_visor(mob/user)
- . = ..()
- if(up)
- qdel(GetComponent(/datum/component/adjust_fishing_difficulty))
- else
- AddComponent(/datum/component/adjust_fishing_difficulty, 8)
-
/obj/item/clothing/glasses/welding/update_icon_state()
. = ..()
icon_state = "[initial(icon_state)][up ? "up" : ""]"
@@ -478,10 +465,6 @@
tint = INFINITY // You WILL Be blind, no matter what
dog_fashion = /datum/dog_fashion/head
-/obj/item/clothing/glasses/blindfold/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 8)
-
/obj/item/clothing/glasses/trickblindfold
name = "blindfold"
desc = "A see-through blindfold perfect for cheating at games like pin the stun baton on the clown."
@@ -519,10 +502,6 @@
flags_cover = GLASSESCOVERSEYES
glass_colour_type = /datum/client_colour/glass_colour/red
-/obj/item/clothing/glasses/thermal/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -4)
-
/obj/item/clothing/glasses/thermal/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
@@ -635,10 +614,6 @@
var/list/hudlist = list(DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC, DATA_HUD_SECURITY_ADVANCED, DATA_HUD_BOT_PATH)
var/xray = FALSE
-/obj/item/clothing/glasses/debug/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -15)
-
/obj/item/clothing/glasses/debug/equipped(mob/user, slot)
. = ..()
if(!(slot & ITEM_SLOT_EYES))
@@ -725,10 +700,6 @@
/// Hallucination datum currently being used for seeing mares
var/datum/hallucination/stored_hallucination
-/obj/item/clothing/glasses/nightmare_vision/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 13)
-
/obj/item/clothing/glasses/nightmare_vision/Destroy()
QDEL_NULL(stored_hallucination)
return ..()
diff --git a/code/modules/clothing/gloves/bone.dm b/code/modules/clothing/gloves/bone.dm
index 761057054f901..2c75e642ff617 100644
--- a/code/modules/clothing/gloves/bone.dm
+++ b/code/modules/clothing/gloves/bone.dm
@@ -12,10 +12,6 @@
resistance_flags = NONE
armor_type = /datum/armor/gloves_bracer
-/obj/item/clothing/gloves/bracer/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 2)
-
/datum/armor/gloves_bracer
melee = 15
bullet = 25
diff --git a/code/modules/clothing/gloves/botany.dm b/code/modules/clothing/gloves/botany.dm
index 144477240b29d..af94a6b7bb13e 100644
--- a/code/modules/clothing/gloves/botany.dm
+++ b/code/modules/clothing/gloves/botany.dm
@@ -12,10 +12,6 @@
clothing_traits = list(TRAIT_PLANT_SAFE)
armor_type = /datum/armor/gloves_botanic_leather
-/obj/item/clothing/gloves/botanic_leather/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2)
-
/datum/armor/gloves_botanic_leather
bio = 50
fire = 70
diff --git a/code/modules/clothing/gloves/boxing.dm b/code/modules/clothing/gloves/boxing.dm
index ab6e03ae493d2..021d895f69c36 100644
--- a/code/modules/clothing/gloves/boxing.dm
+++ b/code/modules/clothing/gloves/boxing.dm
@@ -19,7 +19,6 @@
)
AddComponent(/datum/component/martial_art_giver, style_to_give)
- AddComponent(/datum/component/adjust_fishing_difficulty, 19)
/obj/item/clothing/gloves/boxing/evil
name = "evil boxing gloves"
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index 048d575f5f02e..82b1eb8f37954 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -44,7 +44,6 @@
/obj/item/clothing/gloves/color/fingerless/Initialize(mapload)
. = ..()
var/static/list/slapcraft_recipe_list = list(/datum/crafting_recipe/gripperoffbrand)
- AddComponent(/datum/component/adjust_fishing_difficulty, -2)
AddElement(
/datum/element/slapcrafting,\
diff --git a/code/modules/clothing/gloves/combat.dm b/code/modules/clothing/gloves/combat.dm
index a2574c8d23ec7..efc5bd40b0587 100644
--- a/code/modules/clothing/gloves/combat.dm
+++ b/code/modules/clothing/gloves/combat.dm
@@ -25,16 +25,8 @@
greyscale_colors = null
inhand_icon_state = null
-/obj/item/clothing/gloves/combat/wizard/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3) //something something wizard casting
-
/obj/item/clothing/gloves/combat/floortile
name = "floortile camouflage gloves"
desc = "Is it just me or is there a pair of gloves on the floor?"
icon_state = "ftc_gloves"
inhand_icon_state = "greyscale_gloves"
-
-/obj/item/clothing/gloves/combat/floortiletile/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3) //tacticool
diff --git a/code/modules/clothing/gloves/insulated.dm b/code/modules/clothing/gloves/insulated.dm
index b04637d4c527b..19109d68b9c93 100644
--- a/code/modules/clothing/gloves/insulated.dm
+++ b/code/modules/clothing/gloves/insulated.dm
@@ -15,19 +15,13 @@
cut_type = /obj/item/clothing/gloves/cut
clothing_traits = list(TRAIT_CHUNKYFINGERS)
-/obj/item/clothing/gloves/color/yellow/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 10)
-
/obj/item/clothing/gloves/color/yellow/apply_fantasy_bonuses(bonus)
. = ..()
if(bonus >= 10)
detach_clothing_traits(TRAIT_CHUNKYFINGERS)
- qdel(GetComponent(/datum/component/adjust_fishing_difficulty))
/obj/item/clothing/gloves/color/yellow/remove_fantasy_bonuses(bonus)
attach_clothing_traits(TRAIT_CHUNKYFINGERS)
- AddComponent(/datum/component/adjust_fishing_difficulty, 10)
return ..()
/datum/armor/color_yellow
@@ -122,10 +116,6 @@
greyscale_colors = null
clothing_traits = list(TRAIT_FINGERPRINT_PASSTHROUGH)
-/obj/item/clothing/gloves/cut/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3)
-
/obj/item/clothing/gloves/cut/heirloom
desc = "The old gloves your great grandfather stole from Engineering, many moons ago. They've seen some tough times recently."
@@ -141,7 +131,3 @@
heat_protection = HANDS
max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT
resistance_flags = NONE
-
-/obj/item/clothing/gloves/chief_engineer/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -4)
diff --git a/code/modules/clothing/gloves/punch_mitts.dm b/code/modules/clothing/gloves/punch_mitts.dm
index 96848731a9cbb..07d93d5ab021c 100644
--- a/code/modules/clothing/gloves/punch_mitts.dm
+++ b/code/modules/clothing/gloves/punch_mitts.dm
@@ -11,7 +11,7 @@
/obj/item/clothing/gloves/fingerless/punch_mitts/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -4)
+
AddComponent(/datum/component/martial_art_giver, /datum/martial_art/boxing/hunter)
/datum/armor/gloves_mitts
diff --git a/code/modules/clothing/gloves/special.dm b/code/modules/clothing/gloves/special.dm
index 3e18a4ed2adc0..1366a29ac4a6e 100644
--- a/code/modules/clothing/gloves/special.dm
+++ b/code/modules/clothing/gloves/special.dm
@@ -14,7 +14,6 @@
. = ..()
RegisterSignal(src, COMSIG_ITEM_EQUIPPED, PROC_REF(on_glove_equip))
RegisterSignal(src, COMSIG_ITEM_POST_UNEQUIP, PROC_REF(on_glove_unequip))
- AddComponent(/datum/component/adjust_fishing_difficulty, 19)
/// Called when the glove is equipped. Adds a component to the equipper and stores a weak reference to it.
/obj/item/clothing/gloves/cargo_gauntlet/proc/on_glove_equip(datum/source, mob/equipper, slot)
@@ -60,7 +59,6 @@
/obj/item/clothing/gloves/rapid/Initialize(mapload)
. = ..()
AddComponent(/datum/component/wearertargeting/punchcooldown)
- AddComponent(/datum/component/adjust_fishing_difficulty, -7)
/obj/item/clothing/gloves/radio
name = "translation gloves"
@@ -76,10 +74,6 @@
icon_state = "black"
greyscale_colors = "#2f2e31"
-/obj/item/clothing/gloves/race/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -7)
-
/obj/item/clothing/gloves/captain
desc = "Regal blue gloves, with a nice gold trim, a diamond anti-shock coating, and an integrated thermal barrier. Swanky."
name = "captain's gloves"
@@ -96,10 +90,6 @@
resistance_flags = NONE
clothing_traits = list(TRAIT_FAST_CUFFING)
-/obj/item/clothing/gloves/captain/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -4)
-
/datum/armor/captain_gloves
bio = 90
fire = 70
@@ -127,10 +117,6 @@
greyscale_colors = "#99eeff"
clothing_traits = list(TRAIT_QUICKER_CARRY, TRAIT_FASTMED)
-/obj/item/clothing/gloves/latex/nitrile/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -4)
-
/obj/item/clothing/gloves/latex/coroner
name = "coroner's gloves"
desc = "Black gloves made from latex with a superhydrophobic coating. Useful for picking bodies up instead of dragging blood behind."
@@ -170,50 +156,42 @@
clothing_traits = list(TRAIT_QUICKER_CARRY, TRAIT_CHUNKYFINGERS)
clothing_flags = THICKMATERIAL
-/obj/item/clothing/gloves/atmos/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 6)
-
///A pair of gloves that both allow the user to fish without the need of a held fishing rod and provides athletics experience.
/obj/item/clothing/gloves/fishing
name = "athletic fishing gloves"
desc = "A pair of gloves to fish without a fishing rod but your raw athletics strength. It doubles as a good workout device. WARNING: May cause injuries when catching bigger fish."
icon_state = "fishing_gloves"
- ///The current fishing minigame datum the wearer is engaged in.
- var/datum/fishing_challenge/challenge
/obj/item/clothing/gloves/fishing/Initialize(mapload)
. = ..()
AddComponent(/datum/component/profound_fisher, new /obj/item/fishing_rod/mob_fisher/athletic(src))
- AddComponent(/datum/component/adjust_fishing_difficulty, -3) //on top of the extra that you get from the athletics skill.
/obj/item/clothing/gloves/fishing/equipped(mob/user, slot)
. = ..()
if(slot == ITEM_SLOT_GLOVES)
- RegisterSignal(user, COMSIG_MOB_BEGIN_FISHING_MINIGAME, PROC_REF(begin_workout))
+ RegisterSignal(user, SIGNAL_ADDTRAIT(TRAIT_ACTIVELY_FISHING), PROC_REF(begin_workout))
/obj/item/clothing/gloves/fishing/dropped(mob/user)
- UnregisterSignal(user, COMSIG_MOB_BEGIN_FISHING_MINIGAME)
- if(challenge)
- stop_workout(user)
+ UnregisterSignal(user, list(SIGNAL_ADDTRAIT(TRAIT_ACTIVELY_FISHING), SIGNAL_REMOVETRAIT(TRAIT_ACTIVELY_FISHING)))
+ STOP_PROCESSING(SSprocessing, src)
return ..()
-/obj/item/clothing/gloves/fishing/proc/begin_workout(datum/source, datum/fishing_challenge/challenge)
+/obj/item/clothing/gloves/fishing/proc/begin_workout(datum/source)
SIGNAL_HANDLER
- RegisterSignal(source, COMSIG_MOB_COMPLETE_FISHING, PROC_REF(stop_workout))
+ RegisterSignal(source, SIGNAL_REMOVETRAIT(TRAIT_ACTIVELY_FISHING), PROC_REF(stop_workout))
if(HAS_TRAIT(source, TRAIT_PROFOUND_FISHER)) //Only begin working out if we're fishing with these gloves and not some other fishing rod..
START_PROCESSING(SSprocessing, src)
- src.challenge = challenge
/obj/item/clothing/gloves/fishing/proc/stop_workout(datum/source)
SIGNAL_HANDLER
- UnregisterSignal(source, COMSIG_MOB_COMPLETE_FISHING)
- challenge = null
+ UnregisterSignal(source, SIGNAL_REMOVETRAIT(TRAIT_ACTIVELY_FISHING))
STOP_PROCESSING(SSprocessing, src)
/obj/item/clothing/gloves/fishing/process(seconds_per_tick)
var/mob/living/wearer = loc
- var/stamina_exhaustion = 2 + challenge.difficulty * 0.02
+ var/list/trait_source = GET_TRAIT_SOURCES(wearer, TRAIT_ACTIVELY_FISHING)
+ var/datum/fishing_challenge/challenge = trait_source[1]
+ var/stamina_exhaustion = 2.5 + challenge.difficulty * 0.025
var/is_heavy_gravity = wearer.has_gravity() > STANDARD_GRAVITY
var/obj/item/organ/internal/cyberimp/chest/spine/potential_spine = wearer.get_organ_slot(ORGAN_SLOT_SPINE)
if(istype(potential_spine))
@@ -232,14 +210,11 @@
///The internal fishing rod of the athletic fishing gloves. The more athletic you're, the easier the minigame will be.
/obj/item/fishing_rod/mob_fisher/athletic
- name = "athletics fishing gloves"
icon = /obj/item/clothing/gloves/fishing::icon
icon_state = /obj/item/clothing/gloves/fishing::icon_state
line = null
bait = null
- ui_description = "A pair of gloves to fish without a fishing rod while training your athletics."
- wiki_description = "It requires the Advanced Fishing Technology Node to be researched to be printed. It may hurt the user when catching larger fish."
- show_in_wiki = TRUE //Show this cool pair of gloves in the wiki.
+ ui_description = "The integrated fishing rod of a pair of athletic fishing gloves"
/obj/item/fishing_rod/mob_fisher/athletic/Initialize(mapload)
. = ..()
@@ -249,7 +224,7 @@
return list()
/obj/item/fishing_rod/mob_fisher/athletic/hook_hit(atom/atom_hit_by_hook_projectile, mob/user)
- difficulty_modifier = -3 * (user.mind?.get_skill_level(/datum/skill/athletics) - 1)
+ difficulty_modifier = -3 * user.mind?.get_skill_level(/datum/skill/athletics)
return ..()
/obj/item/fishing_rod/mob_fisher/athletic/proc/noodling_is_dangerous(datum/source, atom/movable/reward, mob/living/user)
diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm
index d45fa8d0a90b5..bbe7f5dba18b4 100644
--- a/code/modules/clothing/gloves/tacklers.dm
+++ b/code/modules/clothing/gloves/tacklers.dm
@@ -22,12 +22,6 @@
var/tackle_speed = 1
/// See: [/datum/component/tackler/var/skill_mod]
var/skill_mod = 1
- ///How much these gloves affect fishing difficulty
- var/fishing_modifier = -5
-
-/obj/item/clothing/gloves/tackler/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) //fishing tackle equipment (ba dum tsh)
/obj/item/clothing/gloves/tackler/Destroy()
tackler = null
@@ -61,7 +55,6 @@
tackle_speed = 2
min_distance = 2
skill_mod = -2
- fishing_modifier = -8
/obj/item/clothing/gloves/tackler/combat
name = "gorilla gloves"
@@ -113,11 +106,9 @@
base_knockdown = 1.75 SECONDS
min_distance = 2
skill_mod = -1
- fishing_modifier = -3
/obj/item/clothing/gloves/tackler/football
name = "football gloves"
desc = "Gloves for football players! Teaches them how to tackle like a pro."
icon_state = "tackle_gloves"
inhand_icon_state = null
- fishing_modifier = -3
diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm
index 9f7d01506f1e5..3cd88ffc8eda0 100644
--- a/code/modules/clothing/head/collectable.dm
+++ b/code/modules/clothing/head/collectable.dm
@@ -107,10 +107,6 @@
inhand_icon_state = null
dog_fashion = /datum/dog_fashion/head/pirate
-/obj/item/clothing/head/collectable/pirate/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3)
-
/obj/item/clothing/head/collectable/kitty
name = "collectable kitty ears"
desc = "The fur feels... a bit too realistic."
@@ -133,10 +129,6 @@
icon_state = "wizard"
dog_fashion = /datum/dog_fashion/head/blue_wizard
-/obj/item/clothing/head/collectable/wizard/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -1)
-
/obj/item/clothing/head/collectable/hardhat
name = "collectable hard hat"
desc = "WARNING! Offers no real protection, or luminosity, but damn, is it fancy!"
@@ -181,7 +173,3 @@
inhand_icon_state = "swatsyndie_helmet"
clothing_flags = SNUG_FIT
flags_inv = HIDEHAIR
-
-/obj/item/clothing/head/collectable/swat/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 2)
diff --git a/code/modules/clothing/head/fedora.dm b/code/modules/clothing/head/fedora.dm
index 7bf295f74553a..cf0d23ac37f58 100644
--- a/code/modules/clothing/head/fedora.dm
+++ b/code/modules/clothing/head/fedora.dm
@@ -36,10 +36,6 @@
icon_state = "fedora_carpskin"
inhand_icon_state = null
-/obj/item/clothing/head/fedora/carpskin/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -4)
-
/obj/item/clothing/head/fedora/beige/press
name = "press fedora"
desc = "An beige fedora with a piece of paper saying \"PRESS\" stuck in its rim."
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 1b86a8ea36ce0..fc56f83342346 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -40,6 +40,7 @@
/obj/item/clothing/head/utility/hardhat/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
+ RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur))
/obj/item/clothing/head/utility/hardhat/proc/toggle_helmet_light(mob/living/user)
on = !on
@@ -59,11 +60,11 @@
/obj/item/clothing/head/utility/hardhat/proc/turn_off(mob/user)
set_light_on(FALSE)
-/obj/item/clothing/head/utility/hardhat/on_saboteur(datum/source, disrupt_duration)
- . = ..()
+/obj/item/clothing/head/utility/hardhat/proc/on_saboteur(datum/source, disrupt_duration)
+ SIGNAL_HANDLER
if(on)
toggle_helmet_light()
- return TRUE
+ return COMSIG_SABOTEUR_SUCCESS
/obj/item/clothing/head/utility/hardhat/attack_self(mob/living/user)
toggle_helmet_light(user)
@@ -238,10 +239,6 @@
dog_fashion = /datum/dog_fashion/head/pumpkin/unlit
clothing_traits = list()
-/obj/item/clothing/head/utility/hardhat/pumpkinhead/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 3)
-
/obj/item/clothing/head/utility/hardhat/pumpkinhead/set_light_on(new_value)
. = ..()
if(isnull(.))
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index b9b371d498c10..2874a27b72b98 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -201,10 +201,6 @@
visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF
clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED)
-/obj/item/clothing/head/helmet/toggleable/riot/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 2)
-
/datum/armor/toggleable_riot
melee = 50
bullet = 10
@@ -284,10 +280,6 @@
dog_fashion = null
clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED)
-/obj/item/clothing/head/helmet/swat/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 3)
-
/datum/armor/helmet_swat
melee = 40
bullet = 30
@@ -437,10 +429,6 @@
dog_fashion = null
clothing_traits = list(TRAIT_HEAD_INJURY_BLOCKED)
-/obj/item/clothing/head/helmet/knight/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 3)
-
/datum/armor/helmet_knight
melee = 50
bullet = 10
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 7b67cda761f2e..5d5fc87d409f4 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -624,10 +624,6 @@
flags_inv = HIDEHAIR //Cover your head doctor!
w_class = WEIGHT_CLASS_SMALL //surgery cap can be easily crumpled
-/obj/item/clothing/head/utility/surgerycap/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?!
-
/obj/item/clothing/head/utility/surgerycap/attack_self(mob/user)
. = ..()
if(.)
@@ -670,10 +666,6 @@
icon_state = "headmirror"
body_parts_covered = NONE
-/obj/item/clothing/head/utility/head_mirror/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?!
-
/obj/item/clothing/head/utility/head_mirror/examine(mob/user)
. = ..()
. += span_notice("In a properly lit room, you can use this to examine people's eyes, ears, and mouth closer.")
diff --git a/code/modules/clothing/head/mind_monkey_helmet.dm b/code/modules/clothing/head/mind_monkey_helmet.dm
index 9dcaa5c365f27..449df33550560 100644
--- a/code/modules/clothing/head/mind_monkey_helmet.dm
+++ b/code/modules/clothing/head/mind_monkey_helmet.dm
@@ -10,10 +10,6 @@
var/mob/living/carbon/human/magnification = null ///if the helmet is on a valid target (just works like a normal helmet if not (cargo please stop))
var/polling = FALSE///if the helmet is currently polling for targets (special code for removal)
var/light_colors = 1 ///which icon state color this is (red, blue, yellow)
- /// This chance is increased by 7 every time the helmet fails to get a host, to dissuade spam. starts negative to add 1 safe reuse
- var/rage_chance = -7
- /// Holds the steam effect at dangerous rage chance levels.
- var/obj/effect/abstract/particle_holder/particle_effect
/obj/item/clothing/head/helmet/monkey_sentience/Initialize(mapload)
. = ..()
@@ -22,13 +18,12 @@
/obj/item/clothing/head/helmet/monkey_sentience/examine(mob/user)
. = ..()
- . += span_boldwarning("---WARNING: REMOVAL OF HELMET ON SUBJECT, OR REPEATED SENTIENCE GENERATION FAILURES MAY LEAD TO:---")
+ . += span_boldwarning("---WARNING: REMOVAL OF HELMET ON SUBJECT MAY LEAD TO:---")
. += span_warning("BLOOD RAGE")
. += span_warning("BRAIN DEATH")
. += span_warning("PRIMAL GENE ACTIVATION")
. += span_warning("GENETIC MAKEUP MASS SUSCEPTIBILITY")
- . += span_notice("Warranty voided if helmet is placed after more than ") + span_boldnotice("two") + span_notice(" mind magnification failures.")
- . += span_boldnotice("Ask your CMO if mind magnification is right for you!")
+ . += span_boldnotice("Ask your CMO if mind magnification is right for you.")
/obj/item/clothing/head/helmet/monkey_sentience/update_icon_state()
. = ..()
@@ -60,40 +55,9 @@
UnregisterSignal(magnification, COMSIG_SPECIES_LOSS)
magnification = null
visible_message(span_notice("[src] falls silent and drops on the floor. Maybe you should try again later?"))
- var/particle_path
- switch(rage_chance)
- if(-7 to 0)
- user.visible_message(span_notice("[src] falls silent and drops on the floor. Try again later?"))
- playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
- particle_path = null
- if(7 to 13)
- user.visible_message(span_notice("[src] sparkles momentarily, then falls silent and drops on the floor. Maybe you should try again later?"))
- playsound(src, SFX_SPARKS, 30, TRUE)
- do_sparks(2, FALSE, src)
- particle_path = /particles/smoke/steam/mild
- if(14 to 21)
- user.visible_message(span_notice("[src] sparkles and shatters ominously, then falls silent and drops on the floor. Maybe you shouldn't try again later."))
- do_sparks(4, FALSE, src)
- playsound(src, SFX_SPARKS, 15, TRUE)
- playsound(src, SFX_SHATTER, 30, TRUE)
- particle_path = /particles/smoke/steam/bad
- if(21 to INFINITY)
- user.visible_message(span_notice("[src] buzzes and smokes heavily, then falls silent and drops on the floor. This is clearly a bad idea."))
- do_sparks(6, FALSE, src)
- playsound(src, 'sound/machines/buzz-two.ogg', 30, TRUE)
- particle_path = /particles/smoke/steam
- rage_chance += 7
-
- QDEL_NULL(particle_effect)
- if(particle_path)
- particle_effect = new(src, particle_path)
- QDEL_IN(particle_effect, 2 MINUTES)
-
- if((rage_chance > 0) && prob(rage_chance)) // too much spam means agnry gorilla running at you
- malfunction(user)
+ playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
user.dropItemToGround(src)
return
-
magnification.key = chosen_one.key
playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, FALSE)
to_chat(magnification, span_notice("You're a mind magnified monkey! Protect your helmet with your life- if you lose it, your sentience goes with it!"))
@@ -114,7 +78,17 @@
to_chat(magnification, span_userdanger("You feel your flicker of sentience ripped away from you, as everything becomes dim..."))
magnification.ghostize(FALSE)
if(prob(10))
- malfunction(magnification)
+ switch(rand(1,4))
+ if(1) //blood rage
+ var/datum/ai_controller/monkey/monky_controller = magnification.ai_controller
+ monky_controller.set_trip_mode(mode = FALSE)
+ monky_controller.set_blackboard_key(BB_MONKEY_AGGRESSIVE, TRUE)
+ if(2) //brain death
+ magnification.apply_damage(500,BRAIN,BODY_ZONE_HEAD,FALSE,FALSE,FALSE)
+ if(3) //primal gene (gorilla)
+ magnification.gorillize()
+ if(4) //genetic mass susceptibility (gib)
+ magnification.gib(DROP_ALL_REMAINS)
//either used up correctly or taken off before polling finished (punish this by destroying the helmet)
UnregisterSignal(magnification, COMSIG_SPECIES_LOSS)
playsound(src, 'sound/machines/buzz-sigh.ogg', 30, TRUE)
@@ -123,19 +97,6 @@
magnification = null
new /obj/effect/decal/cleanable/ash(drop_location()) //just in case they're in a locker or other containers it needs to use crematorium ash, see the path itself for an explanation
-/obj/item/clothing/head/helmet/monkey_sentience/proc/malfunction(mob/living/carbon/target)
- switch(rand(1,4))
- if(1) //blood rage
- var/datum/ai_controller/monkey/monky_controller = target.ai_controller
- monky_controller.set_trip_mode(mode = FALSE)
- monky_controller.set_blackboard_key(BB_MONKEY_AGGRESSIVE, TRUE)
- if(2) //brain death
- target.apply_damage(500,BRAIN,BODY_ZONE_HEAD,FALSE,FALSE,FALSE)
- if(3) //primal gene (gorilla)
- target.gorillize()
- if(4) //genetic mass susceptibility (gib)
- target.gib(DROP_ALL_REMAINS)
-
/obj/item/clothing/head/helmet/monkey_sentience/dropped(mob/user)
. = ..()
if(magnification || polling)
diff --git a/code/modules/clothing/head/moth.dm b/code/modules/clothing/head/moth.dm
index e040d834c9d21..58be10a1b0fc7 100644
--- a/code/modules/clothing/head/moth.dm
+++ b/code/modules/clothing/head/moth.dm
@@ -15,7 +15,6 @@
/obj/item/clothing/head/mothcap/original/Initialize(mapload)
. = ..()
AddComponent(/datum/component/scope, range_modifier = 1.2, zoom_method = ZOOM_METHOD_ITEM_ACTION, item_action_type = /datum/action/item_action/hands_free/moth_googles)
- AddComponent(/datum/component/adjust_fishing_difficulty, -2)
/obj/item/clothing/head/mothcap/original/item_action_slot_check(slot, mob/user, datum/action/action)
return (slot & ITEM_SLOT_HEAD)
diff --git a/code/modules/clothing/head/pirate.dm b/code/modules/clothing/head/pirate.dm
index 6d5d0a67f30f9..818478ccb7d4a 100644
--- a/code/modules/clothing/head/pirate.dm
+++ b/code/modules/clothing/head/pirate.dm
@@ -5,9 +5,8 @@
inhand_icon_state = null
dog_fashion = /datum/dog_fashion/head/pirate
-/obj/item/clothing/head/costume/pirate/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3)
+/obj/item/clothing/head/costume/pirate
+ var/datum/language/piratespeak/L = new
/obj/item/clothing/head/costume/pirate/equipped(mob/user, slot)
. = ..()
diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm
index 629305740318d..f8e7e80532f16 100644
--- a/code/modules/clothing/head/soft_caps.dm
+++ b/code/modules/clothing/head/soft_caps.dm
@@ -175,7 +175,6 @@
. = ..()
AddComponent(/datum/component/speechmod, replacements = strings("crustacean_replacement.json", "crustacean")) //you asked for this.
AddElement(/datum/element/skill_reward, /datum/skill/fishing)
- AddComponent(/datum/component/adjust_fishing_difficulty, -4)
#define PROPHAT_MOOD "prophat"
diff --git a/code/modules/clothing/head/welding.dm b/code/modules/clothing/head/welding.dm
index 000448fd7258d..e3f014875dde4 100644
--- a/code/modules/clothing/head/welding.dm
+++ b/code/modules/clothing/head/welding.dm
@@ -18,11 +18,6 @@
resistance_flags = FIRE_PROOF
clothing_flags = SNUG_FIT | STACKABLE_HELMET_EXEMPT
-/obj/item/clothing/head/utility/welding/Initialize(mapload)
- . = ..()
- if(!up)
- AddComponent(/datum/component/adjust_fishing_difficulty, 8)
-
/datum/armor/utility_welding
melee = 10
fire = 100
@@ -31,13 +26,6 @@
/obj/item/clothing/head/utility/welding/attack_self(mob/user)
adjust_visor(user)
-/obj/item/clothing/head/utility/welding/adjust_visor(mob/user)
- . = ..()
- if(up)
- qdel(GetComponent(/datum/component/adjust_fishing_difficulty))
- else
- AddComponent(/datum/component/adjust_fishing_difficulty, 8)
-
/obj/item/clothing/head/utility/welding/update_icon_state()
. = ..()
icon_state = "[initial(icon_state)][up ? "up" : ""]"
diff --git a/code/modules/clothing/masks/animal_masks.dm b/code/modules/clothing/masks/animal_masks.dm
index 7b29519e12ba5..05e5888168e12 100644
--- a/code/modules/clothing/masks/animal_masks.dm
+++ b/code/modules/clothing/masks/animal_masks.dm
@@ -150,18 +150,6 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list(
animal_sounds_alt = list("HUUUUU!!","SMOOOOOKIN'!!","Hello my baby, hello my honey, hello my rag-time gal.", "Feels bad, man.", "GIT DIS GUY OFF ME!!" ,"SOMEBODY STOP ME!!", "NORMIES, GET OUT!!")
flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
-/obj/item/clothing/mask/animal/frog/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, cursed ? 2 : -2)
-
-/obj/item/clothing/mask/animal/frog/make_cursed()
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 2)
-
-/obj/item/clothing/mask/animal/frog/clear_curse()
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2)
-
/obj/item/clothing/mask/animal/frog/cursed
cursed = TRUE
@@ -239,18 +227,6 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list(
inhand_icon_state = null
animal_sounds = list("RAWR!","Rawr!","GRR!","Growl!")
-/obj/item/clothing/mask/animal/small/bear/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, cursed ? 2 : -2)
-
-/obj/item/clothing/mask/animal/small/bear/make_cursed()
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 2)
-
-/obj/item/clothing/mask/animal/small/bear/clear_curse()
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2)
-
/obj/item/clothing/mask/animal/small/bear/cursed
cursed = TRUE
@@ -299,17 +275,5 @@ GLOBAL_LIST_INIT(cursed_animal_masks, list(
animal_sounds_alt = list("Eekum-bokum!", "Oomenacka!", "In mah head..... Zombi.... Zombi!")
animal_sounds_alt_probability = 5
-/obj/item/clothing/mask/animal/small/tribal/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, cursed ? 4 : -4)
-
-/obj/item/clothing/mask/animal/small/tribal/make_cursed()
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 4)
-
-/obj/item/clothing/mask/animal/small/tribal/clear_curse()
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -4)
-
/obj/item/clothing/mask/animal/small/tribal/cursed //adminspawn only.
cursed = TRUE
diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm
index 46ad60e58deaa..2e75cebf5d98f 100644
--- a/code/modules/clothing/masks/boxing.dm
+++ b/code/modules/clothing/masks/boxing.dm
@@ -24,10 +24,6 @@
w_class = WEIGHT_CLASS_SMALL
actions_types = list(/datum/action/item_action/adjust)
-/obj/item/clothing/mask/floortilebalaclava/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3) //tacticool
-
/obj/item/clothing/mask/floortilebalaclava/attack_self(mob/user)
adjust_visor(user)
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 47ecf9a11f5a8..c5871d23c1859 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -18,7 +18,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
armor_type = /datum/armor/mask_gas
flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH | PEPPERPROOF
resistance_flags = NONE
- voice_filter = "lowpass=f=750,volume=2"
///Max numbers of installable filters
var/max_filters = 1
///List to keep track of each filter
@@ -29,19 +28,19 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
var/has_fov = TRUE
///Cigarette in the mask
var/obj/item/cigarette/cig
- ///How much does this mask affect fishing difficulty
- var/fishing_modifier = 2
+ voice_filter = "lowpass=f=750,volume=2"
/datum/armor/mask_gas
bio = 100
+/obj/item/clothing/mask/gas/worn_overlays(mutable_appearance/standing, isinhands)
+ . = ..()
+ if(!isinhands && cig)
+ . += cig.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi')
+
/obj/item/clothing/mask/gas/Initialize(mapload)
. = ..()
init_fov()
-
- if(fishing_modifier)
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier)
-
if(!max_filters || !starting_filter_type)
return
@@ -50,11 +49,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
LAZYADD(gas_filters, inserted_filter)
has_filter = TRUE
-/obj/item/clothing/mask/gas/worn_overlays(mutable_appearance/standing, isinhands)
- . = ..()
- if(!isinhands && cig)
- . += cig.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi')
-
/obj/item/clothing/mask/gas/Destroy()
QDEL_LAZYLIST(gas_filters)
return..()
@@ -228,7 +222,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
resistance_flags = FIRE_PROOF
clothing_flags = parent_type::clothing_flags | INTERNALS_ADJUST_EXEMPT
- fishing_modifier = 8
/datum/armor/gas_welding
melee = 10
@@ -243,12 +236,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
. = ..()
if(.)
playsound(src, 'sound/mecha/mechmove03.ogg', 50, TRUE)
- if(!fishing_modifier)
- return
- if(up)
- qdel(GetComponent(/datum/component/adjust_fishing_difficulty))
- else
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier)
/obj/item/clothing/mask/gas/welding/update_icon_state()
. = ..()
@@ -279,7 +266,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
strip_delay = 60
w_class = WEIGHT_CLASS_SMALL
has_fov = FALSE
- fishing_modifier = 0
/obj/item/clothing/mask/gas/clown_hat
name = "clown wig and mask"
@@ -299,7 +285,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
has_fov = FALSE
var/list/clownmask_designs = list()
voice_filter = null // performer masks expect to be talked through
- fishing_modifier = 0
/obj/item/clothing/mask/gas/clown_hat/plasmaman
starting_filter_type = /obj/item/gas_filter/plasmaman
@@ -342,7 +327,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
flags_cover = MASKCOVERSEYES
resistance_flags = FLAMMABLE
has_fov = FALSE
- fishing_modifier = 0
/obj/item/clothing/mask/gas/mime
name = "mime mask"
@@ -356,7 +340,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
actions_types = list(/datum/action/item_action/adjust)
species_exception = list(/datum/species/golem)
has_fov = FALSE
- fishing_modifier = 0
var/list/mimemask_designs = list()
/obj/item/clothing/mask/gas/mime/plasmaman
@@ -401,7 +384,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
flags_cover = MASKCOVERSEYES
resistance_flags = FLAMMABLE
has_fov = FALSE
- fishing_modifier = 0
/obj/item/clothing/mask/gas/sexymime
name = "sexy mime mask"
@@ -413,7 +395,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
resistance_flags = FLAMMABLE
species_exception = list(/datum/species/golem)
has_fov = FALSE
- fishing_modifier = 0
/obj/item/clothing/mask/gas/cyborg
name = "cyborg visor"
@@ -422,7 +403,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
resistance_flags = FLAMMABLE
has_fov = FALSE
flags_cover = MASKCOVERSEYES
- fishing_modifier = 0
/obj/item/clothing/mask/gas/owl_mask
name = "owl mask"
@@ -433,7 +413,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
flags_cover = MASKCOVERSEYES
resistance_flags = FLAMMABLE
has_fov = FALSE
- fishing_modifier = -1
/obj/item/clothing/mask/gas/carp
name = "carp mask"
@@ -442,7 +421,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
inhand_icon_state = null
has_fov = FALSE
flags_cover = MASKCOVERSEYES
- fishing_modifier = -3
/obj/item/clothing/mask/gas/tiki_mask
name = "tiki mask"
@@ -456,7 +434,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
max_integrity = 100
actions_types = list(/datum/action/item_action/adjust)
dog_fashion = null
- fishing_modifier = -2
var/list/tikimask_designs = list()
/obj/item/clothing/mask/gas/tiki_mask/Initialize(mapload)
@@ -499,7 +476,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
resistance_flags = FIRE_PROOF | ACID_PROOF
flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR|HIDESNOUT
has_fov = FALSE
- fishing_modifier = -2
/obj/item/clothing/mask/gas/prop
name = "prop gas mask"
@@ -510,7 +486,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
flags_cover = MASKCOVERSMOUTH
resistance_flags = FLAMMABLE
has_fov = FALSE
- fishing_modifier = 0
/obj/item/clothing/mask/gas/atmosprop
name = "prop atmospheric gas mask"
@@ -522,7 +497,6 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
flags_cover = MASKCOVERSMOUTH
resistance_flags = FLAMMABLE
has_fov = FALSE
- fishing_modifier = 0
/obj/item/clothing/mask/gas/driscoll
name = "driscoll mask"
@@ -531,4 +505,3 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
flags_inv = HIDEFACIALHAIR
w_class = WEIGHT_CLASS_NORMAL
inhand_icon_state = null
- fishing_modifier = 0
diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm
index c5e538d44468e..cbfbc166cbcab 100644
--- a/code/modules/clothing/masks/hailer.dm
+++ b/code/modules/clothing/masks/hailer.dm
@@ -57,7 +57,6 @@ GLOBAL_LIST_INIT(hailer_phrases, list(
visor_flags_cover = MASKCOVERSMOUTH
tint = 0
has_fov = FALSE
- fishing_modifier = 0
unique_death = 'sound/voice/sec_death.ogg'
COOLDOWN_DECLARE(hailer_cooldown)
///Decides the phrases available for use; defines used are the last index of a category of available phrases
@@ -87,7 +86,6 @@ GLOBAL_LIST_INIT(hailer_phrases, list(
visor_flags_inv = 0
flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF
visor_flags_cover = MASKCOVERSMOUTH | MASKCOVERSEYES | PEPPERPROOF
- fishing_modifier = 2
/obj/item/clothing/mask/gas/sechailer/swat/spacepol
name = "spacepol mask"
@@ -105,7 +103,6 @@ GLOBAL_LIST_INIT(hailer_phrases, list(
slot_flags = null
aggressiveness = AGGR_GOOD_COP // Borgs are nicecurity!
actions_types = list(/datum/action/item_action/halt)
- fishing_modifier = 0
/obj/item/clothing/mask/gas/sechailer/screwdriver_act(mob/living/user, obj/item/I)
. = ..()
diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm
index 7e16bd3bdab83..839f3430cd9cc 100644
--- a/code/modules/clothing/neck/_neck.dm
+++ b/code/modules/clothing/neck/_neck.dm
@@ -213,10 +213,6 @@
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
icon_state = "stethoscope"
-/obj/item/clothing/neck/stethoscope/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?!
-
/obj/item/clothing/neck/stethoscope/suicide_act(mob/living/carbon/user)
user.visible_message(span_suicide("[user] puts \the [src] to [user.p_their()] chest! It looks like [user.p_they()] won't hear much!"))
return OXYLOSS
@@ -456,10 +452,6 @@
/obj/item/clothing/neck/petcollar/attack_self(mob/user)
tagname = sanitize_name(tgui_input_text(user, "Would you like to change the name on the tag?", "Pet Naming", "Spot", MAX_NAME_LEN))
- if (!tagname || !length(tagname))
- name = initial(name)
- tagname = null
- return
name = "[initial(name)] - [tagname]"
//////////////
diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm
index b99ea6f526202..fa07b3297b285 100644
--- a/code/modules/clothing/outfits/event.dm
+++ b/code/modules/clothing/outfits/event.dm
@@ -18,7 +18,7 @@
if(visualsOnly)
return
user.fully_replace_character_name(user.real_name, "Santa Claus")
- user.mind.set_assigned_role(SSjob.get_job_type(/datum/job/santa))
+ user.mind.set_assigned_role(SSjob.GetJobType(/datum/job/santa))
user.mind.special_role = ROLE_SANTA
user.hairstyle = "Long Hair 3"
diff --git a/code/modules/clothing/shoes/boots.dm b/code/modules/clothing/shoes/boots.dm
index 68a7b1bb0aefd..03f174aa43c31 100644
--- a/code/modules/clothing/shoes/boots.dm
+++ b/code/modules/clothing/shoes/boots.dm
@@ -72,10 +72,6 @@
icon_state = "ftc_boots"
inhand_icon_state = null
-/obj/item/clothing/shoes/jackboots/floortile/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3) //tacticool
-
/obj/item/clothing/shoes/winterboots
name = "winter boots"
desc = "Boots lined with 'synthetic' animal fur."
@@ -179,10 +175,6 @@
icon_state = "pirateboots"
inhand_icon_state = null
-/obj/item/clothing/shoes/pirate/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2)
-
/obj/item/clothing/shoes/pirate/armored
armor_type = /datum/armor/shoes_pirate
strip_delay = 40
diff --git a/code/modules/clothing/shoes/clown.dm b/code/modules/clothing/shoes/clown.dm
index c999a242a190f..699d6fa627bf5 100644
--- a/code/modules/clothing/shoes/clown.dm
+++ b/code/modules/clothing/shoes/clown.dm
@@ -15,7 +15,6 @@
create_storage(storage_type = /datum/storage/pockets/shoes/clown)
LoadComponent(/datum/component/squeak, squeak_sound, 50, falloff_exponent = 20) //die off quick please
AddElement(/datum/element/swabable, CELL_LINE_TABLE_CLOWN, CELL_VIRUS_TABLE_GENERIC, rand(2,3), 0)
- AddComponent(/datum/component/adjust_fishing_difficulty, 3) //Goofy
/obj/item/clothing/shoes/clown_shoes/equipped(mob/living/user, slot)
. = ..()
diff --git a/code/modules/clothing/shoes/costume.dm b/code/modules/clothing/shoes/costume.dm
index 4f2287f40d278..bf8000d9a0800 100644
--- a/code/modules/clothing/shoes/costume.dm
+++ b/code/modules/clothing/shoes/costume.dm
@@ -45,7 +45,6 @@
/obj/item/clothing/shoes/bronze/Initialize(mapload)
. = ..()
AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/magic/clockwork/fellowship_armory.ogg' = 1), 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE)
- AddComponent(/datum/component/adjust_fishing_difficulty, 4)
/obj/item/clothing/shoes/cookflops
desc = "All this talk of antags, greytiding, and griefing... I just wanna grill for god's sake!"
@@ -129,7 +128,6 @@
create_storage(storage_type = /datum/storage/pockets/shoes)
LoadComponent(/datum/component/squeak, list('sound/effects/quack.ogg' = 1), 50, falloff_exponent = 20)
- AddComponent(/datum/component/adjust_fishing_difficulty, -6) //deploy tactical duckling lure
/obj/item/clothing/shoes/ducky_shoes/equipped(mob/living/user, slot)
. = ..()
diff --git a/code/modules/clothing/shoes/galoshes.dm b/code/modules/clothing/shoes/galoshes.dm
index d42b8ffddb388..e743db6b7424c 100644
--- a/code/modules/clothing/shoes/galoshes.dm
+++ b/code/modules/clothing/shoes/galoshes.dm
@@ -12,18 +12,11 @@
can_be_bloody = FALSE
custom_price = PAYCHECK_CREW * 3
can_be_tied = FALSE
- ///How much these boots affect fishing difficulty
- var/fishing_modifier = -3
-
-/obj/item/clothing/shoes/galoshes/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier)
/obj/item/clothing/shoes/galoshes/dry
name = "absorbent galoshes"
desc = "A pair of purple rubber boots, designed to prevent slipping on wet surfaces while also drying them."
icon_state = "galoshes_dry"
- fishing_modifier = -6
/datum/armor/shoes_galoshes
bio = 100
diff --git a/code/modules/clothing/shoes/laceup.dm b/code/modules/clothing/shoes/laceup.dm
index 808bf22f5080d..7ee348ea6c434 100644
--- a/code/modules/clothing/shoes/laceup.dm
+++ b/code/modules/clothing/shoes/laceup.dm
@@ -3,7 +3,3 @@
desc = "The height of fashion, and they're pre-polished!"
icon_state = "laceups"
equip_delay_other = 50
-
-/obj/item/clothing/shoes/laceup/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 3) //You aren't going to fish with these are you?
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 38d4770244abd..2ae13924dedc9 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -20,30 +20,18 @@
var/slowdown_active = 2
/// A list of traits we apply when we get activated
var/list/active_traits = list(TRAIT_NO_SLIP_WATER, TRAIT_NO_SLIP_ICE, TRAIT_NO_SLIP_SLIDE, TRAIT_NEGATES_GRAVITY)
- /// How much do these boots affect fishing when active
- var/magpulse_fishing_modifier = 8
- /// How much do these boots affect fishing when not active
- var/fishing_modifier = 4
/obj/item/clothing/shoes/magboots/Initialize(mapload)
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
RegisterSignal(src, COMSIG_SPEED_POTION_APPLIED, PROC_REF(on_speed_potioned))
- if(fishing_modifier)
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier)
/// Signal handler for [COMSIG_SPEED_POTION_APPLIED]. Speed potion removes the active slowdown
/obj/item/clothing/shoes/magboots/proc/on_speed_potioned(datum/source)
SIGNAL_HANDLER
- // Don't need to touch the actual slowdown here, since the speed potion does it for us
slowdown_active = 0
-
- if(magpulse && magpulse_fishing_modifier)
- qdel(GetComponent(/datum/component/adjust_fishing_difficulty))
- if(fishing_modifier)
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier)
- magpulse_fishing_modifier = fishing_modifier
+ // Don't need to touch the actual slowdown here, since the speed potion does it for us
/obj/item/clothing/shoes/magboots/verb/toggle()
set name = "Toggle Magboots"
@@ -59,15 +47,7 @@
if(magpulse)
attach_clothing_traits(active_traits)
slowdown += slowdown_active
- if(magpulse_fishing_modifier)
- AddComponent(/datum/component/adjust_fishing_difficulty, magpulse_fishing_modifier)
- else if(magpulse_fishing_modifier != fishing_modifier)
- qdel(GetComponent(/datum/component/adjust_fishing_difficulty))
else
- if(fishing_modifier)
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier)
- else if(magpulse_fishing_modifier != fishing_modifier)
- qdel(GetComponent(/datum/component/adjust_fishing_difficulty))
detach_clothing_traits(active_traits)
slowdown = max(initial(slowdown), slowdown - slowdown_active) // Just in case, for speed pot shenanigans
@@ -91,13 +71,9 @@
base_icon_state = "advmag"
slowdown_active = SHOES_SLOWDOWN // ZERO active slowdown
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
- magpulse_fishing_modifier = 3
- fishing_modifier = 0
/obj/item/clothing/shoes/magboots/syndie
name = "blood-red magboots"
desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders."
icon_state = "syndiemag0"
base_icon_state = "syndiemag"
- magpulse_fishing_modifier = 6
- fishing_modifier = 3
diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm
index 124dfcee41c0b..caf84d9562dcb 100644
--- a/code/modules/clothing/spacesuits/_spacesuits.dm
+++ b/code/modules/clothing/spacesuits/_spacesuits.dm
@@ -25,13 +25,6 @@
resistance_flags = NONE
dog_fashion = null
slowdown = 0.5
- ///How much this helmet affects fishing difficulty
- var/fishing_modifier = 3
-
-/obj/item/clothing/head/helmet/space/Initialize(mapload)
- . = ..()
- if(fishing_modifier)
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier)
/datum/armor/helmet_space
bio = 100
@@ -77,8 +70,6 @@
var/thermal_on = FALSE
/// If this is FALSE the batery status UI will be disabled. This is used for suits that don't use bateries like the changeling's flesh suit mutation.
var/show_hud = TRUE
- ///How much this suit affects fishing difficulty
- var/fishing_modifier = 5
/datum/armor/suit_space
bio = 100
@@ -90,9 +81,6 @@
if(ispath(cell))
cell = new cell(src)
- if(fishing_modifier)
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier)
-
/// Start Processing on the space suit when it is worn to heat the wearer
/obj/item/clothing/suit/space/equipped(mob/living/user, slot)
. = ..()
diff --git a/code/modules/clothing/spacesuits/freedom.dm b/code/modules/clothing/spacesuits/freedom.dm
index 085b9c8deb7c2..b0a08f4cc7367 100644
--- a/code/modules/clothing/spacesuits/freedom.dm
+++ b/code/modules/clothing/spacesuits/freedom.dm
@@ -9,7 +9,6 @@
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = ACID_PROOF | FIRE_PROOF
- fishing_modifier = 0
/datum/armor/space_freedom
melee = 20
@@ -32,4 +31,3 @@
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = ACID_PROOF | FIRE_PROOF
slowdown = 0
- fishing_modifier = 0
diff --git a/code/modules/clothing/spacesuits/pirate.dm b/code/modules/clothing/spacesuits/pirate.dm
index 8ead0aeaa6619..73feec525c548 100644
--- a/code/modules/clothing/spacesuits/pirate.dm
+++ b/code/modules/clothing/spacesuits/pirate.dm
@@ -7,7 +7,6 @@
armor_type = /datum/armor/space_pirate
strip_delay = 40
equip_delay_other = 20
- fishing_modifier = -2
/datum/armor/space_pirate
melee = 30
@@ -32,7 +31,6 @@
armor_type = /datum/armor/space_pirate
strip_delay = 40
equip_delay_other = 20
- fishing_modifier = -3
/obj/item/clothing/head/helmet/space/pirate/tophat
name = "designer pirate helmet"
@@ -41,7 +39,7 @@
/obj/item/clothing/suit/space/pirate/silverscale
name = "designer pirate suit"
- desc = "A specially-made Cybersun branded space suit; the fine plastisilk exterior is woven from the cocoons of black-market Lümlan mothroaches \
- and the trim is lined with the ivory of the critically endangered Zanzibarian dwarf elephant. Baby seal leather boots sold separately."
+ desc = "A specially-made Cybersun branded space suit; the fine plastisilk exterior is woven from the coccons of black-market Lümlan mothroaches \
+ and the trim is lined with the ivory of the critically endagered Zanzibarian dwarf elephant. Baby seal leather boots sold seperately."
inhand_icon_state = "syndicate-black"
icon_state = "syndicate-black-white"
diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm
index 8faaf58b53ed4..380cd0cf3fb53 100644
--- a/code/modules/clothing/spacesuits/plasmamen.dm
+++ b/code/modules/clothing/spacesuits/plasmamen.dm
@@ -8,7 +8,6 @@
resistance_flags = FIRE_PROOF
icon_state = "plasmaman_suit"
inhand_icon_state = "plasmaman_suit"
- fishing_modifier = 0
var/next_extinguish = 0
var/extinguish_cooldown = 100
var/extinguishes_left = 10
@@ -58,7 +57,6 @@
light_power = 0.8
light_color = "#ffcc99"
light_on = FALSE
- fishing_modifier = 0
var/helmet_on = FALSE
var/smile = FALSE
var/smile_color = COLOR_RED
@@ -70,7 +68,6 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF
visor_flags_inv = HIDEEYES|HIDEFACE
- slowdown = 0
/datum/armor/space_plasmaman
bio = 100
@@ -81,6 +78,7 @@
. = ..()
visor_toggling()
update_appearance()
+ RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur))
/obj/item/clothing/head/helmet/space/plasmaman/examine()
. = ..()
@@ -196,13 +194,13 @@
update_item_action_buttons()
-/obj/item/clothing/head/helmet/space/plasmaman/on_saboteur(datum/source, disrupt_duration)
- . = ..()
+/obj/item/clothing/head/helmet/space/plasmaman/proc/on_saboteur(datum/source, disrupt_duration)
+ SIGNAL_HANDLER
if(!helmet_on)
- return FALSE
+ return
helmet_on = FALSE
update_appearance()
- return TRUE
+ return COMSIG_SABOTEUR_SUCCESS
/obj/item/clothing/head/helmet/space/plasmaman/attack_hand_secondary(mob/user)
..()
diff --git a/code/modules/clothing/spacesuits/santa.dm b/code/modules/clothing/spacesuits/santa.dm
index 08f01cc1869bb..f6bd1657606c5 100644
--- a/code/modules/clothing/spacesuits/santa.dm
+++ b/code/modules/clothing/spacesuits/santa.dm
@@ -8,7 +8,6 @@
flags_cover = HEADCOVERSEYES
dog_fashion = /datum/dog_fashion/head/santa
slowdown = 0
- fishing_modifier = 0
/obj/item/clothing/head/helmet/space/santahat/beardless
icon = 'icons/obj/clothing/head/costume.dmi'
@@ -27,4 +26,3 @@
inhand_icon_state = "santa"
slowdown = 0
allowed = list(/obj/item) //for stuffing exta special presents
- fishing_modifier = 0
diff --git a/code/modules/clothing/spacesuits/specialops.dm b/code/modules/clothing/spacesuits/specialops.dm
index dbe02400aa664..caaa32cc24be2 100644
--- a/code/modules/clothing/spacesuits/specialops.dm
+++ b/code/modules/clothing/spacesuits/specialops.dm
@@ -13,7 +13,6 @@
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
- fishing_modifier = 0
/datum/armor/space_beret
melee = 80
@@ -42,7 +41,6 @@
strip_delay = 130
max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
resistance_flags = FIRE_PROOF | ACID_PROOF
- fishing_modifier = 0
/datum/armor/space_officer
melee = 80
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index efa23e1a06862..6e56107173c46 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -294,10 +294,6 @@
equip_delay_other = 60
clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED)
-/obj/item/clothing/suit/armor/riot/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 5)
-
/datum/armor/armor_riot
melee = 50
bullet = 10
@@ -417,10 +413,6 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
clothing_traits = list(TRAIT_BRAWLING_KNOCKDOWN_BLOCKED)
-/obj/item/clothing/suit/armor/swat/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 5)
-
//All of the armor below is mostly unused
@@ -562,10 +554,6 @@
armor_type = /datum/armor/vest_durathread
dog_fashion = null
-/obj/item/clothing/suit/armor/vest/durathread/Initialize(mapload)
- . = ..()
- allowed |= /obj/item/clothing/suit/apron::allowed
-
/datum/armor/vest_durathread
melee = 20
bullet = 10
@@ -707,10 +695,6 @@
/obj/item/gun/ballistic/bow
)
-/obj/item/clothing/suit/armor/vest/military/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 5)
-
/datum/armor/military
melee = 45
bullet = 25
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index 4fa5eeb5a90f7..4ddfd31631d5c 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -16,7 +16,6 @@
. = ..()
if(flags_inv & HIDEFACE)
AddComponent(/datum/component/clothing_fov_visor, FOV_90_DEGREES)
- AddComponent(/datum/component/adjust_fishing_difficulty, 6)
/datum/armor/head_bio_hood
bio = 100
@@ -41,10 +40,6 @@
equip_delay_other = 70
resistance_flags = ACID_PROOF
-/obj/item/clothing/suit/bio_suit/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 6)
-
//Standard biosuit, orange stripe
/datum/armor/suit_bio_suit
bio = 100
diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm
index a720f49b9383f..566ca5557f728 100644
--- a/code/modules/clothing/suits/costume.dm
+++ b/code/modules/clothing/suits/costume.dm
@@ -263,10 +263,6 @@
allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/rifle/boltaction/harpoon)
hoodtype = /obj/item/clothing/head/hooded/carp_hood
-/obj/item/clothing/suit/hooded/carp_costume/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2)
-
/obj/item/clothing/head/hooded/carp_hood
name = "carp hood"
desc = "A hood attached to a carp costume."
@@ -278,10 +274,6 @@
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
flags_inv = HIDEHAIR|HIDEEARS
-/obj/item/clothing/head/hooded/carp_hood/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3)
-
/obj/item/clothing/head/hooded/carp_hood/equipped(mob/living/carbon/human/user, slot)
..()
if (slot & ITEM_SLOT_HEAD)
@@ -402,10 +394,6 @@
clothing_flags = THICKMATERIAL
hoodtype = /obj/item/clothing/head/hooded/shark_hood
-/obj/item/clothing/suit/hooded/shark_costume/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2)
-
/obj/item/clothing/head/hooded/shark_hood
name = "shark hood"
desc = "A hood attached to a shark costume."
@@ -416,10 +404,6 @@
clothing_flags = THICKMATERIAL
flags_inv = HIDEHAIR|HIDEEARS
-/obj/item/clothing/head/hooded/shark_hood/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3)
-
/obj/item/clothing/suit/hooded/shork_costume // Oh God Why
name = "shork costume"
desc = "Why would you ever do this?"
@@ -431,10 +415,6 @@
clothing_flags = THICKMATERIAL
hoodtype = /obj/item/clothing/head/hooded/shork_hood
-/obj/item/clothing/suit/hooded/shork_costume/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 2)
-
/obj/item/clothing/head/hooded/shork_hood
name = "shork hood"
desc = "A hood attached to a shork costume."
@@ -445,10 +425,6 @@
clothing_flags = THICKMATERIAL
flags_inv = HIDEHAIR|HIDEEARS
-/obj/item/clothing/head/hooded/shork_hood/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 3)
-
/obj/item/clothing/suit/hooded/bloated_human //OH MY GOD WHAT HAVE YOU DONE!?!?!?
name = "bloated human suit"
desc = "A horribly bloated suit made from human skins."
@@ -613,10 +589,6 @@
flags_1 = IS_PLAYER_COLORABLE_1
species_exception = list(/datum/species/golem)
-/obj/item/clothing/suit/costume/hawaiian/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3)
-
/obj/item/clothing/suit/costume/football_armor
name = "football protective gear"
desc = "Given to members of the football team!"
diff --git a/code/modules/clothing/suits/ethereal.dm b/code/modules/clothing/suits/ethereal.dm
index 1c86ca34094f3..6c53329a13e7d 100644
--- a/code/modules/clothing/suits/ethereal.dm
+++ b/code/modules/clothing/suits/ethereal.dm
@@ -14,7 +14,6 @@
/obj/item/clothing/suit/hooded/ethereal_raincoat/Initialize(mapload)
. = ..()
update_icon(UPDATE_OVERLAYS)
- AddComponent(/datum/component/adjust_fishing_difficulty, -3)
/obj/item/clothing/suit/hooded/ethereal_raincoat/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
. = ..()
@@ -29,11 +28,6 @@
name = "trailwarden oilcoat"
desc = "A masterfully handcrafted oilslick coat, supposedly makes for excellent camouflage among Sprout's vegetation. You can hear a faint electrical buzz emanating from the luminescent pattern."
greyscale_colors = "#32a87d"
- hoodtype = /obj/item/clothing/head/hooded/ethereal_rainhood/trailwarden
-
-/obj/item/clothing/suit/hooded/ethereal_raincoat/trailwarden/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -5)
/obj/item/clothing/suit/hooded/ethereal_raincoat/trailwarden/equipped(mob/living/user, slot)
. = ..()
@@ -51,9 +45,3 @@
worn_icon = 'icons/mob/clothing/head/ethereal.dmi'
body_parts_covered = HEAD
flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR
-
-/obj/item/clothing/head/hooded/ethereal_rainhood/trailwarden
-
-/obj/item/clothing/head/hooded/ethereal_rainhood/trailwarden/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -4)
diff --git a/code/modules/clothing/suits/ghostsheet.dm b/code/modules/clothing/suits/ghostsheet.dm
index 965adc9b7e2ff..65213fd176dba 100644
--- a/code/modules/clothing/suits/ghostsheet.dm
+++ b/code/modules/clothing/suits/ghostsheet.dm
@@ -16,7 +16,6 @@
. = ..()
if(check_holidays(HALLOWEEN))
update_icon(UPDATE_OVERLAYS)
- AddComponent(/datum/component/adjust_fishing_difficulty, 8)
/obj/item/clothing/suit/costume/ghost_sheet/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
. = ..()
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index 2ba150ab692ee..7e6bdde01cdfd 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -52,10 +52,6 @@
greyscale_colors = "#313c6e"
flags_1 = IS_PLAYER_COLORABLE_1
-/obj/item/clothing/suit/apron/overalls/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2)
-
//Captain
/obj/item/clothing/suit/jacket/capjacket
name = "captain's parade jacket"
@@ -353,10 +349,6 @@
/obj/item/tank/internals/emergency_oxygen,
)
-/obj/item/clothing/suit/apron/surgical/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2) // FISH DOCTOR?!
-
//Curator
/obj/item/clothing/suit/jacket/curator
name = "treasure hunter's coat"
diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm
index 954fb9342e3ca..e5cda21a78a77 100644
--- a/code/modules/clothing/suits/labcoat.dm
+++ b/code/modules/clothing/suits/labcoat.dm
@@ -38,10 +38,6 @@
icon_state = "labcoat_cmo"
inhand_icon_state = null
-/obj/item/clothing/suit/toggle/labcoat/cmo/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?!
-
/datum/armor/toggle_labcoat
bio = 50
fire = 50
@@ -59,10 +55,6 @@
icon_state = "labcoat_paramedic"
inhand_icon_state = null
-/obj/item/clothing/suit/toggle/labcoat/paramedic/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?!
-
/obj/item/clothing/suit/toggle/labcoat/mad
name = "\proper The Mad's labcoat"
desc = "It makes you look capable of konking someone on the noggin and shooting them into space."
diff --git a/code/modules/clothing/suits/moth.dm b/code/modules/clothing/suits/moth.dm
index 076a0dd0b3c9a..dd0a7f016ac17 100644
--- a/code/modules/clothing/suits/moth.dm
+++ b/code/modules/clothing/suits/moth.dm
@@ -16,7 +16,7 @@
/obj/item/clothing/suit/mothcoat/original/Initialize(mapload)
. = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3)
+
create_storage(storage_type = /datum/storage/pockets)
/obj/item/clothing/suit/mothcoat/winter
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index bb42fb1ed3975..1541c66a333b6 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -39,10 +39,6 @@
equip_delay_other = 60
resistance_flags = FIRE_PROOF
-/obj/item/clothing/suit/utility/fire/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 7)
-
/datum/armor/utility_fire
melee = 15
bullet = 5
@@ -108,7 +104,6 @@
. = ..()
if(flags_inv & HIDEFACE)
AddComponent(/datum/component/clothing_fov_visor, FOV_90_DEGREES)
- AddComponent(/datum/component/adjust_fishing_difficulty, 8)
/datum/armor/utility_bomb_hood
melee = 20
@@ -138,10 +133,6 @@
equip_delay_other = 70
resistance_flags = NONE
-/obj/item/clothing/suit/utility/bomb_suit/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 8)
-
/datum/armor/utility_bomb_suit
melee = 20
laser = 20
@@ -188,7 +179,6 @@
. = ..()
if(flags_inv & HIDEFACE)
AddComponent(/datum/component/clothing_fov_visor, FOV_90_DEGREES)
- AddComponent(/datum/component/adjust_fishing_difficulty, 7)
/datum/armor/utility_radiation
bio = 60
@@ -222,4 +212,3 @@
/obj/item/clothing/suit/utility/radiation/Initialize(mapload)
. = ..()
AddElement(/datum/element/radiation_protected_clothing)
- AddComponent(/datum/component/adjust_fishing_difficulty, 7)
diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm
index 4636054ee3e6b..dcc33fb65376b 100644
--- a/code/modules/clothing/suits/wintercoats.dm
+++ b/code/modules/clothing/suits/wintercoats.dm
@@ -221,7 +221,16 @@
desc = "A green and blue winter coat. The zipper tab looks like the flower from a member of Rosa Hesperrhodos, a pretty pink-and-white rose. The colours absolutely clash."
icon_state = "coathydro"
inhand_icon_state = "coathydro"
- allowed = /obj/item/clothing/suit/apron::allowed
+ allowed = list(
+ /obj/item/cultivator,
+ /obj/item/hatchet,
+ /obj/item/plant_analyzer,
+ /obj/item/reagent_containers/spray/plantbgone,
+ /obj/item/reagent_containers/cup/bottle,
+ /obj/item/reagent_containers/spray/pestspray,
+ /obj/item/seeds,
+ /obj/item/storage/bag/plants,
+ )
hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro
/obj/item/clothing/head/hooded/winterhood/hydro
diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm
index b590984cbc7cb..53026e974bf63 100644
--- a/code/modules/clothing/suits/wiz_robe.dm
+++ b/code/modules/clothing/suits/wiz_robe.dm
@@ -11,12 +11,6 @@
clothing_flags = SNUG_FIT | CASTING_CLOTHES
resistance_flags = FIRE_PROOF | ACID_PROOF
dog_fashion = /datum/dog_fashion/head/blue_wizard
- ///How much this hat affects fishing difficulty
- var/fishing_modifier = -4
-
-/obj/item/clothing/head/wizard/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) //A wizard always practices his casting (ba dum tsh)
/datum/armor/head_wizard
melee = 30
@@ -54,7 +48,6 @@
armor_type = /datum/armor/none
resistance_flags = FLAMMABLE
dog_fashion = /datum/dog_fashion/head/blue_wizard
- fishing_modifier = -1
/obj/item/clothing/head/wizard/chanterelle
name = "chanterelle hat"
@@ -121,12 +114,6 @@
equip_delay_other = 50
clothing_flags = CASTING_CLOTHES
resistance_flags = FIRE_PROOF | ACID_PROOF
- ///How much this robe affects fishing difficulty
- var/fishing_modifier = -6
-
-/obj/item/clothing/suit/wizrobe/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, fishing_modifier) //A wizard always practices his casting (ba dum tsh)
/datum/armor/suit_wizrobe
melee = 30
@@ -194,20 +181,17 @@
inhand_icon_state = "wizrobe"
armor_type = /datum/armor/none
resistance_flags = FLAMMABLE
- fishing_modifier = -2
/obj/item/clothing/head/wizard/marisa/fake
name = "witch hat"
armor_type = /datum/armor/none
resistance_flags = FLAMMABLE
- fishing_modifier = -1
/obj/item/clothing/head/wizard/tape/fake
name = "tape hat"
desc = "A hat designed exclusively from duct tape. You can barely see."
armor_type = /datum/armor/none
resistance_flags = FLAMMABLE
- fishing_modifier = -1
/obj/item/clothing/suit/wizrobe/marisa/fake
name = "witch robe"
@@ -216,14 +200,12 @@
inhand_icon_state = null
armor_type = /datum/armor/none
resistance_flags = FLAMMABLE
- fishing_modifier = -2
/obj/item/clothing/suit/wizrobe/tape/fake
name = "tape robe"
desc = "An outfit designed exclusively from duct tape. It was hard to put on."
armor_type = /datum/armor/none
resistance_flags = FLAMMABLE
- fishing_modifier = -2
/obj/item/clothing/suit/wizrobe/paper
name = "papier-mache robe" // no non-latin characters!
@@ -240,8 +222,21 @@
icon_state = "durathread-fake"
inhand_icon_state = null
armor_type = /datum/armor/robe_durathread
- allowed = /obj/item/clothing/suit/apron::allowed
- fishing_modifier = -4
+ allowed = list(
+ /obj/item/cultivator,
+ /obj/item/geneshears,
+ /obj/item/graft,
+ /obj/item/hatchet,
+ /obj/item/plant_analyzer,
+ /obj/item/reagent_containers/cup/beaker,
+ /obj/item/reagent_containers/cup/bottle,
+ /obj/item/reagent_containers/cup/tube,
+ /obj/item/reagent_containers/spray/pestspray,
+ /obj/item/reagent_containers/spray/plantbgone,
+ /obj/item/secateurs,
+ /obj/item/seeds,
+ /obj/item/storage/bag/plants,
+ )
/datum/armor/robe_durathread
melee = 15
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 9212f5e431ff6..fa7813f0f4695 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -108,7 +108,11 @@
. += accessory_overlay
/obj/item/clothing/under/attackby(obj/item/attacking_item, mob/user, params)
- if(repair_sensors(attacking_item, user))
+ if(has_sensor == BROKEN_SENSORS && istype(attacking_item, /obj/item/stack/cable_coil))
+ var/obj/item/stack/cable_coil/cabling = attacking_item
+ to_chat(user, span_notice("You repair the suit sensors on [src] with [cabling]."))
+ cabling.use(1)
+ has_sensor = HAS_SENSORS
return TRUE
if(istype(attacking_item, /obj/item/clothing/accessory))
@@ -127,11 +131,35 @@
/obj/item/clothing/under/update_clothes_damaged_state(damaged_state = CLOTHING_DAMAGED)
. = ..()
if(damaged_state == CLOTHING_SHREDDED && has_sensor > NO_SENSORS)
- break_sensors()
+ has_sensor = BROKEN_SENSORS
else if(damaged_state == CLOTHING_PRISTINE && has_sensor == BROKEN_SENSORS)
- repair_sensors(cable_required = FALSE)
+ has_sensor = HAS_SENSORS
update_appearance()
+/obj/item/clothing/under/emp_act(severity)
+ . = ..()
+ if(. & EMP_PROTECT_SELF)
+ return
+ if(has_sensor == NO_SENSORS || has_sensor == BROKEN_SENSORS)
+ return
+
+ if(severity <= EMP_HEAVY)
+ has_sensor = BROKEN_SENSORS
+ if(ismob(loc))
+ var/mob/M = loc
+ to_chat(M,span_warning("[src]'s sensors short out!"))
+
+ else
+ sensor_mode = pick(SENSOR_OFF, SENSOR_OFF, SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS)
+ if(ismob(loc))
+ var/mob/M = loc
+ to_chat(M,span_warning("The sensors on the [src] change rapidly!"))
+
+ if(ishuman(loc))
+ var/mob/living/carbon/human/ooman = loc
+ if(ooman.w_uniform == src)
+ ooman.update_suit_sensors()
+
/obj/item/clothing/under/visual_equipped(mob/user, slot)
. = ..()
if(adjusted == ALT_STYLE)
@@ -153,68 +181,13 @@
freshly_laundered = FALSE
user.add_mood_event("fresh_laundry", /datum/mood_event/fresh_laundry)
-// Start suit sensor handling
-
-/// Change the suit sensor state to broken and update the mob's status on the global sensor list
-/obj/item/clothing/under/proc/break_sensors()
- if(has_sensor == BROKEN_SENSORS || has_sensor == NO_SENSORS)
- return
-
- visible_message(span_warning("[src]'s medical sensors short out!"), blind_message = span_warning("The [src] makes an electronic sizzling sound!"), vision_distance = COMBAT_MESSAGE_RANGE)
- has_sensor = BROKEN_SENSORS
- sensor_malfunction()
- update_wearer_status()
-
-/**
- * Repair the suit sensors and update the mob's status on the global sensor list.
- * Can be called either through player action such as repairing with coil, or as part of a general fixing proc
- *
- * Arguments:
- * * attacking_item - the item being used for the repair, if any
- * * user - mob that's doing the repair
- * * cable_required - set to FALSE to bypass consuming cable coil
- */
-/obj/item/clothing/under/proc/repair_sensors(obj/item/attacking_item, mob/user, cable_required = TRUE)
- if(has_sensor != BROKEN_SENSORS)
- return
-
- if(cable_required)
- if(!istype(attacking_item, /obj/item/stack/cable_coil))
- return
- var/obj/item/stack/cable_coil/cabling = attacking_item
- if(!cabling.use(1))
- return
- cabling.visible_message(span_notice("[user] repairs the suit sensors on [src] with [cabling]."))
-
- playsound(source = src, soundin = 'sound/effects/sparks4.ogg', vol = 100, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE)
- has_sensor = HAS_SENSORS
- update_wearer_status()
-
- return TRUE
-
-/// If the item is being worn, a gentle reminder every 3-5 minutes that the sensors are broken
-/obj/item/clothing/under/proc/sensor_malfunction()
- if(!QDELETED(src) && has_sensor == BROKEN_SENSORS && ishuman(loc))
- do_sparks(number = 2, cardinal_only = FALSE, source = src)
- addtimer(CALLBACK(src, PROC_REF(sensor_malfunction)), rand(BROKEN_SPARKS_MIN, BROKEN_SPARKS_MAX * 0.5), TIMER_UNIQUE | TIMER_NO_HASH_WAIT)
-
-/// If the item is being worn, update the mob's status on the global sensor list
-/obj/item/clothing/under/proc/update_wearer_status()
- if(!ishuman(loc))
- return
-
- var/mob/living/carbon/human/ooman = loc
- ooman.update_suit_sensors()
- ooman.med_hud_set_status()
-
/mob/living/carbon/human/update_suit_sensors()
. = ..()
update_sensor_list()
-/// Adds or removes a mob from the global suit sensors list based on sensor status and mode
/mob/living/carbon/human/proc/update_sensor_list()
- var/obj/item/clothing/under/uniform = w_uniform
- if(istype(uniform) && uniform.has_sensor > NO_SENSORS && uniform.sensor_mode)
+ var/obj/item/clothing/under/U = w_uniform
+ if(istype(U) && U.has_sensor > NO_SENSORS && U.sensor_mode)
GLOB.suit_sensors_list |= src
else
GLOB.suit_sensors_list -= src
@@ -222,46 +195,6 @@
/mob/living/carbon/human/dummy/update_sensor_list()
return
-/obj/item/clothing/under/emp_act(severity)
- . = ..()
- if(. & EMP_PROTECT_SELF)
- return
- if(has_sensor == NO_SENSORS || has_sensor == BROKEN_SENSORS)
- return
-
- if(severity <= EMP_HEAVY)
- break_sensors()
-
- else
- sensor_mode = pick(SENSOR_OFF, SENSOR_OFF, SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS)
- playsound(source = src, soundin = 'sound/effects/sparks3.ogg', vol = 75, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE)
- visible_message(span_warning("The [src]'s medical sensors flash and change rapidly!"), blind_message = span_warning("The [src] makes an electronic sizzling sound!"), vision_distance = COMBAT_MESSAGE_RANGE)
-
- update_wearer_status()
-
-/**
- * Called by medical scanners a simple summary of the status
- *
- * Arguments:
- * * silent: If TRUE, will return blank if everything is fine
- */
-/obj/item/clothing/under/proc/get_sensor_text(silent = TRUE)
- if(has_sensor == BROKEN_SENSORS)
- return "Non-Functional: Repair with cable coil"
-
- if(silent)
- return ""
-
- switch(has_sensor)
- if(NO_SENSORS)
- return "Not Present"
-
- if(LOCKED_SENSORS)
- return "Functional, Locked"
-
- if(HAS_SENSORS)
- return "Functional"
-
// End suit sensor handling
/// Attach the passed accessory to the clothing item
@@ -357,7 +290,7 @@
if(can_adjust)
. += "Alt-click on [src] to wear it [adjusted == ALT_STYLE ? "normally" : "casually"]."
if(has_sensor == BROKEN_SENSORS)
- . += span_warning("The medical sensors appear to be shorted out. You could repair it with some cabling.")
+ . += "Its sensors appear to be shorted out. You could repair it with some cabling."
else if(has_sensor > NO_SENSORS)
switch(sensor_mode)
if(SENSOR_OFF)
@@ -408,7 +341,10 @@
if(SENSOR_COORDS)
to_chat(user_mob, span_notice("Your suit will now report your exact vital lifesigns as well as your coordinate position."))
- update_wearer_status()
+ if(ishuman(loc))
+ var/mob/living/carbon/human/H = loc
+ if(H.w_uniform == src)
+ H.update_suit_sensors()
/obj/item/clothing/under/item_ctrl_click(mob/user)
if(!can_toggle_sensors(user))
@@ -416,7 +352,6 @@
sensor_mode = SENSOR_COORDS
balloon_alert(user, "set to tracking")
- update_wearer_status()
return CLICK_ACTION_SUCCESS
/// Checks if the toggler is allowed to toggle suit sensors currently
diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm
index b43196c1628e2..cc66e9d406a57 100644
--- a/code/modules/clothing/under/accessories/badges.dm
+++ b/code/modules/clothing/under/accessories/badges.dm
@@ -264,9 +264,9 @@
/obj/item/clothing/accessory/press_badge/attack_self(mob/user, modifiers)
. = ..()
if(!journalist_name)
- journalist_name = tgui_input_text(user, "What is your name?", "Journalist Name", "[user.name]", max_length = MAX_NAME_LEN)
+ journalist_name = tgui_input_text(user, "What is your name?", "Journalist Name", "[user.name]", MAX_NAME_LEN)
if(!press_name)
- press_name = tgui_input_text(user, "For what organization you work?", "Press Name", "Nanotrasen", max_length = MAX_CHARTER_LEN)
+ press_name = tgui_input_text(user, "For what organization you work?", "Press Name", "Nanotrasen", MAX_CHARTER_LEN)
/obj/item/clothing/accessory/press_badge/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
. = ..()
diff --git a/code/modules/clothing/under/accessories/tribal.dm b/code/modules/clothing/under/accessories/tribal.dm
index 0d5786a20e94b..ad55b26fa89fd 100644
--- a/code/modules/clothing/under/accessories/tribal.dm
+++ b/code/modules/clothing/under/accessories/tribal.dm
@@ -12,7 +12,7 @@
attachment_slot = GROIN
/obj/item/clothing/accessory/skilt
- name = "sinew skirt"
+ name = "Sinew Skirt"
desc = "For the last time. IT'S A KILT not a skirt."
icon_state = "skilt"
minimize_when_attached = FALSE
diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm
index c8550dd0ff6ba..ddf325a2201ab 100644
--- a/code/modules/clothing/under/costume.dm
+++ b/code/modules/clothing/under/costume.dm
@@ -417,7 +417,7 @@
can_adjust = FALSE
/obj/item/clothing/under/costume/gi
- name = "martial gi"
+ name = "Martial Artist Gi"
desc = "Assistant, nukie, whatever. You can beat anyone; it's called hard work!"
icon_state = "martial_arts_gi"
greyscale_config = /datum/greyscale_config/gi
@@ -434,13 +434,13 @@
update_icon(UPDATE_OVERLAYS)
/obj/item/clothing/under/costume/gi/goku
- name = "sacred gi"
+ name = "Sacred Gi"
desc = "Created by a man who touched the hearts and lives of many."
icon_state = "martial_arts_gi_goku"
greyscale_colors = "#f89925#3e6dd7"
/obj/item/clothing/under/costume/traditional
- name = "traditional suit"
+ name = "Traditional Suit"
desc = "A full, vibrantly coloured suit. Likely with traditional purposes. Maybe the colours represent a familly, clan, or rank, who knows."
icon_state = "tradition"
inhand_icon_state = null
@@ -448,7 +448,7 @@
can_adjust = FALSE
/obj/item/clothing/under/costume/loincloth
- name = "leather loincloth"
+ name = "Leather Loincloth"
desc = "Just a piece of leather to cover private areas. Itchy to the touch. Whoever made this must have been desperate, or savage."
icon_state = "loincloth"
inhand_icon_state = null
diff --git a/code/modules/clothing/under/jobs/civilian/curator.dm b/code/modules/clothing/under/jobs/civilian/curator.dm
index f08657cee0754..8f40e623d8adf 100644
--- a/code/modules/clothing/under/jobs/civilian/curator.dm
+++ b/code/modules/clothing/under/jobs/civilian/curator.dm
@@ -28,10 +28,6 @@
inhand_icon_state = null
worn_icon = 'icons/mob/clothing/under/civilian.dmi'
-/obj/item/clothing/under/rank/civilian/curator/treasure_hunter/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3)
-
/obj/item/clothing/under/rank/civilian/curator/nasa
name = "\improper NASA jumpsuit"
desc = "It has a NASA logo on it and is made of space-proofed materials."
diff --git a/code/modules/clothing/under/jobs/medical.dm b/code/modules/clothing/under/jobs/medical.dm
index 2dea332408231..1574b64bbf066 100644
--- a/code/modules/clothing/under/jobs/medical.dm
+++ b/code/modules/clothing/under/jobs/medical.dm
@@ -44,10 +44,6 @@
icon_state = "scrubscmo"
inhand_icon_state = "w_suit"
-/obj/item/clothing/under/rank/medical/chief_medical_officer/scrubs/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?!
-
/obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck
name = "chief medical officer's turtleneck"
desc = "A light blue turtleneck and tan khakis, for a chief medical officer with a superior sense of style."
@@ -86,10 +82,6 @@
/obj/item/clothing/under/rank/medical/scrubs
name = "medical scrubs"
-/obj/item/clothing/under/rank/medical/scrubs/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?!
-
/obj/item/clothing/under/rank/medical/scrubs/blue
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 588dd8efc2a68..81002bd8a9e2d 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -15,7 +15,7 @@
icon_state = "blue_pyjamas"
/obj/item/clothing/under/misc/patriotsuit
- name = "patriotic suit"
+ name = "Patriotic Suit"
desc = "Motorcycle not included."
icon_state = "ek"
inhand_icon_state = null
@@ -58,10 +58,6 @@
can_adjust = FALSE
resistance_flags = FIRE_PROOF | ACID_PROOF
-/obj/item/clothing/under/misc/adminsuit/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -15)
-
/datum/armor/clothing_under/adminsuit
melee = 100
bullet = 100
diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm
index 30f74920ef9d6..638b754c2b83d 100644
--- a/code/modules/clothing/under/skirt_dress.dm
+++ b/code/modules/clothing/under/skirt_dress.dm
@@ -40,10 +40,6 @@
body_parts_covered = CHEST|GROIN|LEGS
flags_inv = HIDESHOES
-/obj/item/clothing/under/dress/wedding_dress/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 4) //You aren't going to fish with this are you?
-
/obj/item/clothing/under/dress/eveninggown
name = "evening gown"
desc = "Fancy dress for space bar singers."
@@ -54,10 +50,6 @@
flags_1 = IS_PLAYER_COLORABLE_1
greyscale_colors = "#e11f1f"
-/obj/item/clothing/under/dress/eveninggown/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 4) //You aren't going to fish with this are you?
-
/obj/item/clothing/under/dress/skirt
name = "cardigan skirt"
desc = "A nice skirt with a cute cardigan, very fancy!"
diff --git a/code/modules/clothing/under/suits.dm b/code/modules/clothing/under/suits.dm
index 98f41f407cab9..0dbf1880d7d2f 100644
--- a/code/modules/clothing/under/suits.dm
+++ b/code/modules/clothing/under/suits.dm
@@ -107,16 +107,8 @@
icon_state = "tuxedo"
inhand_icon_state = null
-/obj/item/clothing/under/suit/tuxedo/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, 4) //You aren't going to fish with this are you?
-
/obj/item/clothing/under/suit/carpskin
name = "carpskin suit"
desc = "An luxurious suit made with only the finest scales, perfect for conducting dodgy business deals."
icon_state = "carpskin_suit"
inhand_icon_state = null
-
-/obj/item/clothing/under/suit/carpskin/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2)
diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm
index e4653b1c9bd47..ff3061d3e5992 100644
--- a/code/modules/clothing/under/syndicate.dm
+++ b/code/modules/clothing/under/syndicate.dm
@@ -34,10 +34,6 @@
can_adjust = FALSE
supports_variations_flags = NONE
-/obj/item/clothing/under/syndicate/bloodred/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2) //extra-tactical
-
/datum/armor/clothing_under/syndicate_bloodred
melee = 10
bullet = 10
@@ -123,10 +119,6 @@
can_adjust = FALSE
supports_variations_flags = NONE
-/obj/item/clothing/under/syndicate/floortilecamo/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -4) //tacticool
-
/obj/item/clothing/under/syndicate/soviet
name = "Ratnik 5 tracksuit"
desc = "Badly translated labels tell you to clean this in Vodka. Great for squatting in."
@@ -168,10 +160,6 @@
supports_variations_flags = NONE
armor_type = /datum/armor/clothing_under/syndicate_scrubs
-/obj/item/clothing/under/syndicate/scrubs/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -2) //FISH DOCTOR?!
-
/datum/armor/clothing_under/syndicate_scrubs
melee = 10
bio = 50
diff --git a/code/modules/economy/account.dm b/code/modules/economy/account.dm
index 4c76534175a60..d31e204333b31 100644
--- a/code/modules/economy/account.dm
+++ b/code/modules/economy/account.dm
@@ -44,7 +44,6 @@
payday_modifier = modifier
add_to_accounts = player_account
setup_unique_account_id()
- update_account_job_lists(job)
pay_token = uppertext("[copytext(newname, 1, 2)][copytext(newname, -1)]-[random_capital_letter()]-[rand(1111,9999)]")
/datum/bank_account/Destroy()
@@ -72,22 +71,11 @@
if(SSeconomy.bank_accounts_by_id["[account_id]"])
stack_trace("Unable to find a unique account ID, substituting currently existing account of id [account_id].")
SSeconomy.bank_accounts_by_id["[account_id]"] = src
-
-/**
- * Proc places this account into the right place in the `SSeconomy.bank_accounts_by_job` list, if needed.
- * If an old job is given, it removes it from its previous place first.
- */
-/datum/bank_account/proc/update_account_job_lists(datum/job/new_job, datum/job/old_job)
- if(!add_to_accounts)
- return
-
- if(old_job)
- SSeconomy.bank_accounts_by_job[old_job.type] -= src
- LAZYADD(SSeconomy.bank_accounts_by_job[new_job.type], src)
+ if(account_job)
+ LAZYADD(SSeconomy.bank_accounts_by_job[account_job.type], src)
/datum/bank_account/vv_edit_var(var_name, var_value) // just so you don't have to do it manually
var/old_id = account_id
- var/datum/job/old_job = account_job
var/old_balance = account_balance
. = ..()
switch(var_name)
@@ -95,15 +83,11 @@
if(add_to_accounts)
SSeconomy.bank_accounts_by_id -= "[old_id]"
setup_unique_account_id()
- if(NAMEOF(src, account_job))
- update_account_job_lists(account_job, old_job)
if(NAMEOF(src, add_to_accounts))
if(add_to_accounts)
setup_unique_account_id()
- update_account_job_lists(account_job)
else
SSeconomy.bank_accounts_by_id -= "[account_id]"
- SSeconomy.bank_accounts_by_job[account_job.type] -= src
if(NAMEOF(src, account_balance))
add_log_to_history(var_value - old_balance, "Nanotrasen: Moderator Action")
diff --git a/code/modules/emote_panel/emote_panel.dm b/code/modules/emote_panel/emote_panel.dm
index d064161c23249..72caf05e92b27 100644
--- a/code/modules/emote_panel/emote_panel.dm
+++ b/code/modules/emote_panel/emote_panel.dm
@@ -42,7 +42,7 @@
var/datum/emote/emote = GLOB.emote_list[emote_key][1]
var/emote_param
if(emote.message_param && use_params)
- emote_param = tgui_input_text(ui.user, "Add params to the emote...", emote.message_param, max_length = MAX_MESSAGE_LEN)
+ emote_param = tgui_input_text(ui.user, "Add params to the emote...", emote.message_param)
ui.user.emote(emote_key, message = emote_param, intentional = TRUE)
/datum/emote_panel/ui_interact(mob/user, datum/tgui/ui)
diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm
index a1e8aef5b6c91..0a41f5ffb6c9a 100644
--- a/code/modules/events/_event.dm
+++ b/code/modules/events/_event.dm
@@ -15,7 +15,7 @@
var/earliest_start = 20 MINUTES //The earliest world.time that an event can start (round-duration in deciseconds) default: 20 mins
var/min_players = 0 //The minimum amount of alive, non-AFK human players on server required to start the event.
- var/occurrences = 0 //How many times this event has occurred
+ var/occurrences = 0 //How many times this event has occured
var/max_occurrences = 20 //The maximum number of times this event can occur (naturally), it can still be forced.
//By setting this to 0 you can effectively disable an event.
@@ -143,7 +143,7 @@ Runs the event
*/
/datum/round_event_control/proc/run_event(random = FALSE, announce_chance_override = null, admin_forced = FALSE, event_cause)
/*
- * We clear our signals first so we don't cancel a wanted event by accident,
+ * We clear our signals first so we dont cancel a wanted event by accident,
* the majority of time the admin will probably want to cancel a single midround spawned random events
* and not multiple events called by others admins
* * In the worst case scenario we can still recall a event which we cancelled by accident, which is much better then to have a unwanted event
@@ -220,7 +220,7 @@ Runs the event
SHOULD_CALL_PARENT(FALSE)
return
-///Announces the event name to deadchat, override this if what an event should show to deadchat is different to its event name.
+///Annouces the event name to deadchat, override this if what an event should show to deadchat is different to its event name.
/datum/round_event/proc/announce_deadchat(random, cause)
deadchat_broadcast(" has just been[random ? " randomly" : ""] triggered[cause ? " by [cause]" : ""]!", "[control.name]", message_type=DEADCHAT_ANNOUNCEMENT) //STOP ASSUMING IT'S BADMINS!
@@ -267,8 +267,8 @@ Runs the event
-//Do not override this proc, instead use the appropriate procs.
-//This proc will handle the calls to the appropriate procs.
+//Do not override this proc, instead use the appropiate procs.
+//This proc will handle the calls to the appropiate procs.
/datum/round_event/process()
SHOULD_NOT_OVERRIDE(TRUE)
if(!processing)
diff --git a/code/modules/events/ghost_role/fugitive_event.dm b/code/modules/events/ghost_role/fugitive_event.dm
index f0e1a7c893a3e..9eb792a6f6ab3 100644
--- a/code/modules/events/ghost_role/fugitive_event.dm
+++ b/code/modules/events/ghost_role/fugitive_event.dm
@@ -72,7 +72,7 @@
player_mind.active = TRUE
var/mob/living/carbon/human/S = new(landing_turf)
player_mind.transfer_to(S)
- player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/fugitive))
+ player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/fugitive))
player_mind.special_role = ROLE_FUGITIVE
player_mind.add_antag_datum(/datum/antagonist/fugitive)
var/datum/antagonist/fugitive/fugitiveantag = player_mind.has_antag_datum(/datum/antagonist/fugitive)
diff --git a/code/modules/events/ghost_role/morph_event.dm b/code/modules/events/ghost_role/morph_event.dm
index 1b7af6361fdbb..21d4b07873d86 100644
--- a/code/modules/events/ghost_role/morph_event.dm
+++ b/code/modules/events/ghost_role/morph_event.dm
@@ -25,7 +25,7 @@
var/mob/living/basic/morph/corpus_accipientis = new(spawn_loc)
player_mind.transfer_to(corpus_accipientis)
- player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/morph))
+ player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/morph))
player_mind.special_role = ROLE_MORPH
player_mind.add_antag_datum(/datum/antagonist/morph)
SEND_SOUND(corpus_accipientis, sound('sound/magic/mutate.ogg'))
diff --git a/code/modules/events/ghost_role/nightmare.dm b/code/modules/events/ghost_role/nightmare.dm
index 1fdebff0cd864..d30108d94b984 100644
--- a/code/modules/events/ghost_role/nightmare.dm
+++ b/code/modules/events/ghost_role/nightmare.dm
@@ -27,7 +27,7 @@
var/mob/living/carbon/human/S = new (spawn_loc)
player_mind.transfer_to(S)
- player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/nightmare))
+ player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/nightmare))
player_mind.special_role = ROLE_NIGHTMARE
player_mind.add_antag_datum(/datum/antagonist/nightmare)
S.set_species(/datum/species/shadow/nightmare)
diff --git a/code/modules/events/ghost_role/operative.dm b/code/modules/events/ghost_role/operative.dm
index c7ad41d001d16..98cfe5ecad41e 100644
--- a/code/modules/events/ghost_role/operative.dm
+++ b/code/modules/events/ghost_role/operative.dm
@@ -22,7 +22,7 @@
operative.randomize_human_appearance(~RANDOMIZE_SPECIES)
operative.dna.update_dna_identity()
var/datum/mind/Mind = new /datum/mind(chosen_one.key)
- Mind.set_assigned_role(SSjob.get_job_type(/datum/job/lone_operative))
+ Mind.set_assigned_role(SSjob.GetJobType(/datum/job/lone_operative))
Mind.special_role = ROLE_LONE_OPERATIVE
Mind.active = TRUE
Mind.transfer_to(operative)
diff --git a/code/modules/events/holiday/easter.dm b/code/modules/events/holiday/easter.dm
index d10fb681cc5bd..40c7fda57c3c2 100644
--- a/code/modules/events/holiday/easter.dm
+++ b/code/modules/events/holiday/easter.dm
@@ -66,7 +66,7 @@
//Bunny Suit
/obj/item/clothing/head/costume/bunnyhead
- name = "Easter Bunny head"
+ name = "Easter Bunny Head"
icon_state = "bunnyhead"
inhand_icon_state = null
desc = "Considerably more cute than 'Frank'."
@@ -75,7 +75,7 @@
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
/obj/item/clothing/suit/costume/bunnysuit
- name = "easter bunny suit"
+ name = "Easter Bunny Suit"
desc = "Hop Hop Hop!"
icon_state = "bunnysuit"
icon = 'icons/obj/clothing/suits/costume.dmi'
@@ -88,7 +88,7 @@
//Bunny bag!
/obj/item/storage/backpack/satchel/bunnysatchel
- name = "easter bunny satchel"
+ name = "Easter Bunny Satchel"
desc = "Good for your eyes."
icon_state = "satchel_carrot"
inhand_icon_state = null
diff --git a/code/modules/events/wizard/rpgtitles.dm b/code/modules/events/wizard/rpgtitles.dm
index b78ae483ea687..9bb69a90f2cf4 100644
--- a/code/modules/events/wizard/rpgtitles.dm
+++ b/code/modules/events/wizard/rpgtitles.dm
@@ -38,7 +38,7 @@ GLOBAL_DATUM(rpgtitle_controller, /datum/rpgtitle_controller)
/datum/rpgtitle_controller/proc/on_crewmember_join(datum/source, mob/living/new_crewmember, rank)
SIGNAL_HANDLER
- var/datum/job/job = SSjob.get_job(rank)
+ var/datum/job/job = SSjob.GetJob(rank)
//we must prepare for the mother of all strings
new_crewmember.maptext_height = max(new_crewmember.maptext_height, 32)
diff --git a/code/modules/experisci/experiment/types/experiment.dm b/code/modules/experisci/experiment/types/experiment.dm
index 358d795f68f59..add015622f621 100644
--- a/code/modules/experisci/experiment/types/experiment.dm
+++ b/code/modules/experisci/experiment/types/experiment.dm
@@ -99,9 +99,3 @@
experiment_handler.selected_experiment = null
var/announcetext = experiment_handler.linked_web.complete_experiment(src)
experiment_handler.announce_message_to_all(announcetext)
-
-/datum/experiment/proc/get_points_reward_text()
- var/list/english_list_keys = list()
- for(var/points_type in points_reward)
- english_list_keys += "[points_reward[points_type]] [points_type]"
- return "[english_list(english_list_keys)] points"
diff --git a/code/modules/experisci/experiment/types/scanning_fish.dm b/code/modules/experisci/experiment/types/scanning_fish.dm
index 3ea4f543687ea..f1c2263a84c7e 100644
--- a/code/modules/experisci/experiment/types/scanning_fish.dm
+++ b/code/modules/experisci/experiment/types/scanning_fish.dm
@@ -64,7 +64,7 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb)
///Only scannable fish will contribute towards the experiment.
/datum/experiment/scanning/fish/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, obj/item/fish/target, typepath)
- return target.fish_flags & FISH_FLAG_EXPERIMENT_SCANNABLE
+ return target.experisci_scannable
/**
* After a fish scanning experiment is done, more may be unlocked. If so, add them to the techweb
diff --git a/code/modules/fishing/admin.dm b/code/modules/fishing/admin.dm
index 46212f421283b..f4643201a7788 100644
--- a/code/modules/fishing/admin.dm
+++ b/code/modules/fishing/admin.dm
@@ -56,7 +56,7 @@ ADMIN_VERB(fishing_calculator, R_DEBUG, "Fishing Calculator", "A calculator... f
var/list/info = list()
info["result"] = result_type
info["weight"] = modified_table[result_type] || 0
- info["difficulty"] = spot.calculate_difficulty(result_type, temporary_rod, user) + /datum/fishing_challenge::difficulty
+ info["difficulty"] = spot.calculate_difficulty(result_type,temporary_rod, user)
info["count"] = spot.fish_counts[result_type] || "Infinite"
result_table += list(info)
current_table = result_table
diff --git a/code/modules/fishing/aquarium/aquarium.dm b/code/modules/fishing/aquarium/aquarium.dm
index a3becfe671860..0d2cd462128d4 100644
--- a/code/modules/fishing/aquarium/aquarium.dm
+++ b/code/modules/fishing/aquarium/aquarium.dm
@@ -295,7 +295,7 @@
else
dead_fish++
- var/morb = HAS_MIND_TRAIT(user, TRAIT_MORBID)
+ var/morb = HAS_TRAIT(user, TRAIT_MORBID)
//Check if there are live fish - good mood
//All fish dead - bad mood.
//No fish - nothing.
diff --git a/code/modules/fishing/aquarium/aquarium_kit.dm b/code/modules/fishing/aquarium/aquarium_kit.dm
index 11fd841009d08..3257760f6a439 100644
--- a/code/modules/fishing/aquarium/aquarium_kit.dm
+++ b/code/modules/fishing/aquarium/aquarium_kit.dm
@@ -122,16 +122,7 @@
/obj/item/aquarium_prop/Initialize(mapload)
. = ..()
- //It's important that we register the signals before the component is attached.
- RegisterSignal(src, COMSIG_AQUARIUM_CONTENT_GENERATE_APPEARANCE, PROC_REF(generate_aquarium_appearance))
- AddComponent(/datum/component/aquarium_content, beauty = beauty)
- ADD_TRAIT(src, TRAIT_UNIQUE_AQUARIUM_CONTENT, INNATE_TRAIT)
-
-/obj/item/aquarium_prop/proc/generate_aquarium_appearance(datum/source, obj/effect/aquarium/visual)
- SIGNAL_HANDLER
- visual.icon = icon
- visual.icon_state = icon_state
- visual.layer_mode = layer_mode
+ AddComponent(/datum/component/aquarium_content, icon, beauty = beauty)
/obj/item/aquarium_prop/rocks
name = "decorative rocks"
diff --git a/code/modules/fishing/aquarium/fish_analyzer.dm b/code/modules/fishing/aquarium/fish_analyzer.dm
index c899c0c3abc55..3d01479ef5a2f 100644
--- a/code/modules/fishing/aquarium/fish_analyzer.dm
+++ b/code/modules/fishing/aquarium/fish_analyzer.dm
@@ -8,7 +8,6 @@
worn_icon_state = "fish_analyzer"
desc = "A fish-shaped scanner used to monitor fish's status and evolutionary traits."
obj_flags = CONDUCTS_ELECTRICITY
- custom_price = PAYCHECK_CREW * 3
item_flags = NOBLUDGEON
slot_flags = ITEM_SLOT_BELT
throwforce = 3
@@ -41,7 +40,7 @@
register_item_context()
update_appearance()
- AddComponent(/datum/component/adjust_fishing_difficulty, -3, ITEM_SLOT_HANDS)
+
/obj/item/fish_analyzer/examine(mob/user)
. = ..()
diff --git a/code/modules/fishing/bait.dm b/code/modules/fishing/bait.dm
index 9bd36daa7bebd..8fb66ad4c3d22 100644
--- a/code/modules/fishing/bait.dm
+++ b/code/modules/fishing/bait.dm
@@ -1,6 +1,6 @@
/obj/item/bait_can
name = "can o bait"
- desc = "there's a lot of them in there, getting them out takes a while though."
+ desc = "there's a lot of them in there, getting them out takes a while though"
icon = 'icons/obj/fishing.dmi'
icon_state = "bait_can"
base_icon_state = "bait_can"
@@ -112,7 +112,7 @@
var/list/known_fishes = list()
for(var/obj/item/fish/fish_type as anything in SSfishing.lure_catchables[type])
- if(initial(fish_type.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG)
+ if(initial(fish_type.show_in_catalog))
known_fishes += initial(fish_type.name)
if(!length(known_fishes))
diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm
index 494d74c5ef772..08d09188e6bdd 100644
--- a/code/modules/fishing/fish/_fish.dm
+++ b/code/modules/fishing/fish/_fish.dm
@@ -1,11 +1,12 @@
#define FISH_SAD 0
+#define FISH_NEUTRAL 1
+#define FISH_SATISFIED 2
+#define FISH_HAPPY 3
#define FISH_VERY_HAPPY 4
-#define GET_FISH_ELECTROGENESIS(fish) (fish.electrogenesis_power * fish.size * 0.1)
-
// Fish path used for autogenerated fish
/obj/item/fish
- name = "fish"
+ name = "generic looking aquarium fish"
desc = "very bland"
icon = 'icons/obj/aquarium/fish.dmi'
lefthand_file = 'icons/mob/inhands/fish_lefthand.dmi'
@@ -19,12 +20,11 @@
drop_sound = 'sound/creatures/fish/fish_drop1.ogg'
pickup_sound = SFX_FISH_PICKUP
sound_vary = TRUE
+ ///The grind results of the fish. They scale with the weight of the fish.
+ grind_results = list(/datum/reagent/blood = 5, /datum/reagent/consumable/liquidgibs = 5)
obj_flags = UNIQUE_RENAME
item_flags = IMMUTABLE_SLOW|SLOWS_WHILE_IN_HAND
- /// Flags for fish variables that would otherwise be TRUE/FALSE
- var/fish_flags = FISH_FLAG_SHOW_IN_CATALOG|FISH_DO_FLOP_ANIM|FISH_FLAG_EXPERIMENT_SCANNABLE
-
/// width of aquarium visual icon
var/sprite_width
/// height of aquarium visual icon
@@ -59,12 +59,16 @@
var/status = FISH_ALIVE
///icon used when the fish is dead, ifset.
var/icon_state_dead
+ ///If this fish should do the flopping animation
+ var/do_flop_animation = TRUE
/// Current fish health. Dies at 0.
var/health = 100
/// The message shown when the fish dies.
var/death_text = "%SRC dies."
+ /// Should this fish type show in fish catalog
+ var/show_in_catalog = TRUE
/// How rare this fish is in the random cases
var/random_case_rarity = FISH_RARITY_BASIC
@@ -134,36 +138,27 @@
var/min_pressure = WARNING_LOW_PRESSURE
var/max_pressure = HAZARD_HIGH_PRESSURE
+ /// If this fish type counts towards the Fish Species Scanning experiments
+ var/experisci_scannable = TRUE
/// cooldown on creating tesla zaps
COOLDOWN_DECLARE(electrogenesis_cooldown)
- /// power of the tesla zap created by the fish in a bioelectric generator. Scales with size.
- var/electrogenesis_power = 2 MEGA JOULES
+ /// power of the tesla zap created by the fish in a bioelectric generator
+ var/electrogenesis_power = 10 MEGA JOULES
/// The beauty this fish provides to the aquarium it's inserted in.
var/beauty = FISH_BEAUTY_GENERIC
-
- /**
- * If you wonder why this isn't being tracked by the edible component instead:
- * We reset the this value when revived, and slowly chip it away as we heal.
- * Of course, it would be daunting to get this to be handled by the edible component
- * given its complexity.
- */
- var/bites_amount = 0
+ ///have we recently pet this fish
+ var/recently_petted = FALSE
/obj/item/fish/Initialize(mapload, apply_qualities = TRUE)
. = ..()
- //It's important that we register the signals before the component is attached.
- RegisterSignal(src, COMSIG_AQUARIUM_CONTENT_DO_ANIMATION, PROC_REF(update_aquarium_animation))
- RegisterSignal(src, AQUARIUM_CONTENT_RANDOMIZE_POSITION, PROC_REF(randomize_aquarium_position))
- RegisterSignal(src, COMSIG_AQUARIUM_CONTENT_GENERATE_APPEARANCE, PROC_REF(update_aquarium_appearance))
- AddComponent(/datum/component/aquarium_content, list(COMSIG_FISH_STIRRED), beauty)
+ AddComponent(/datum/component/aquarium_content, icon, PROC_REF(get_aquarium_animation), list(COMSIG_FISH_STIRRED), beauty)
RegisterSignal(src, COMSIG_ATOM_ON_LAZARUS_INJECTOR, PROC_REF(use_lazarus))
- if(fish_flags & FISH_DO_FLOP_ANIM)
+ if(do_flop_animation)
RegisterSignal(src, COMSIG_ATOM_TEMPORARY_ANIMATION_START, PROC_REF(on_temp_animation))
- check_flopping()
+ check_environment()
if(status != FISH_DEAD)
- ADD_TRAIT(src, TRAIT_UNCOMPOSTABLE, REF(src)) //Composting a food that is not real food wouldn't work anyway.
START_PROCESSING(SSobj, src)
//stops new fish from being able to reproduce right away.
@@ -175,215 +170,6 @@
update_size_and_weight()
register_evolutions()
- register_context()
- register_item_context()
-
-/obj/item/fish/add_item_context(atom/source, list/context, obj/item/held_item, mob/user)
- if(HAS_TRAIT(source, TRAIT_CATCH_AND_RELEASE))
- context[SCREENTIP_CONTEXT_RMB] = "Release"
- return CONTEXTUAL_SCREENTIP_SET
- return NONE
-
-/obj/item/fish/add_context(atom/source, list/context, obj/item/held_item, mob/user)
- if(src == held_item)
- context[SCREENTIP_CONTEXT_LMB] = "Pet"
- return CONTEXTUAL_SCREENTIP_SET
- if(istype(held_item, /obj/item/fish_feed))
- context[SCREENTIP_CONTEXT_LMB] = "Feed"
- return CONTEXTUAL_SCREENTIP_SET
- if(istype(held_item, /obj/item/fish_analyzer))
- context[SCREENTIP_CONTEXT_LMB] = "Scan"
- return CONTEXTUAL_SCREENTIP_SET
- return NONE
-
-/obj/item/fish/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers)
- if(!HAS_TRAIT(interacting_with, TRAIT_CATCH_AND_RELEASE))
- return NONE
- if(HAS_TRAIT(src, TRAIT_NODROP))
- balloon_alert(user, "it's stuck to your hand!")
- return ITEM_INTERACT_BLOCKING
- balloon_alert(user, "releasing fish...")
- if(!do_after(src, 3 SECONDS, interacting_with))
- return ITEM_INTERACT_BLOCKING
- balloon_alert(user, "fish released")
- var/goodbye_text = "Bye bye [name]."
- if(status == FISH_DEAD && !HAS_MIND_TRAIT(user, TRAIT_NAIVE))
- goodbye_text = "May it rest in peace..."
- user.visible_message(span_notice("[user] releases [src] into [interacting_with]"), \
- span_notice("You release [src] into [interacting_with]. [goodbye_text]"), \
- span_notice("You hear a splash."))
- playsound(interacting_with, 'sound/effects/splash.ogg', 50)
- SEND_SIGNAL(interacting_with, COMSIG_FISH_RELEASED_INTO, src)
- qdel(src)
- return ITEM_INTERACT_SUCCESS
-
-///Main proc that makes the fish edible.
-/obj/item/fish/proc/make_edible()
- var/foodtypes = get_food_types()
- if(foodtypes & RAW)
- AddComponent(/datum/component/infective, GLOB.floor_diseases.Copy(), weak = TRUE, weak_infection_chance = PERFORM_ALL_TESTS(edible_fish) ? 100 : 15)
- else
- AddComponent(/datum/component/germ_sensitive)
- var/bites_to_finish = weight / FISH_WEIGHT_BITE_DIVISOR
- create_reagents(INFINITY) //We'll set this to the total volume of the reagents right after generate_fish_reagents() is over
- generate_fish_reagents(bites_to_finish)
- reagents.maximum_volume = round(reagents.total_volume * 1.25) //make some meager space for condiments.
- AddComponent(/datum/component/edible, \
- food_flags = FOOD_NO_EXAMINE|FOOD_NO_BITECOUNT, \
- foodtypes = foodtypes, \
- volume = reagents.total_volume, \
- eat_time = 1.5 SECONDS, \
- bite_consumption = reagents.total_volume / bites_to_finish, \
- after_eat = CALLBACK(src, PROC_REF(after_eat)), \
- check_liked = CALLBACK(src, PROC_REF(check_liked)), \
- reagent_purity = 1, \
- )
- RegisterSignals(src, list(COMSIG_ITEM_FRIED, COMSIG_ITEM_BARBEQUE_GRILLED), PROC_REF(on_fish_cooked))
-
-///A proc that returns the food types the edible component has when initialized.
-/obj/item/fish/proc/get_food_types()
- return SEAFOOD|MEAT|RAW|GORE
-
-///Kill the fish, remove the raw and gore food types, and the infectiveness too if not under-cooked.
-/obj/item/fish/proc/on_fish_cooked(datum/source, cooking_time)
- SIGNAL_HANDLER
- SHOULD_NOT_OVERRIDE(TRUE)
- adjust_health(0)
-
- //Remove the blood from the reagents holder and reward the player with some extra nutriment added to the fish.
- var/datum/reagent/consumable/nutriment/protein/protein = reagents.has_reagent(/datum/reagent/consumable/nutriment/protein, check_subtypes = TRUE)
- var/datum/reagent/blood/blood = reagents.has_reagent(/datum/reagent/blood)
- var/old_blood_volume = blood?.volume
- reagents.del_reagent(/datum/reagent/blood)
-
- ///Make space for the additional nutriment
- var/volume_mult = 1
- if(bites_amount)
- var/initial_bites_left = weight / FISH_WEIGHT_BITE_DIVISOR
- var/bites_left = initial_bites_left - bites_amount
- volume_mult = initial_bites_left / bites_left
- adjust_reagents_capacity((protein?.volume - old_blood_volume) * volume_mult)
-
- ///Add the extra nutriment
- if(protein)
- reagents.multiply_single_reagent(/datum/reagent/consumable/nutriment/protein, 2)
-
- var/datum/component/edible/edible = GetComponent(/datum/component/edible)
- edible.foodtypes &= ~(RAW|GORE)
- if(cooking_time >= FISH_SAFE_COOKING_DURATION)
- well_cooked()
-
- ///override the signals so they don't mess with blood and proteins again.
- RegisterSignals(src, list(COMSIG_ITEM_FRIED, COMSIG_ITEM_BARBEQUE_GRILLED), PROC_REF(on_fish_cooked_again), TRUE)
-
-///Just kill the fish, again, and perhaps remove the infective comp.
-/obj/item/fish/proc/on_fish_cooked_again(datum/source, cooking_time)
- SIGNAL_HANDLER
- adjust_health(0)
- if(cooking_time >= FISH_SAFE_COOKING_DURATION)
- well_cooked()
-
-///The fish is well cooked. Change how the fish tastes, remove the infective comp and add the relative trait.
-/obj/item/fish/proc/well_cooked()
- qdel(GetComponent(/datum/component/infective))
- AddComponent(/datum/component/germ_sensitive)
- ADD_TRAIT(src, TRAIT_FISH_WELL_COOKED, INNATE_TRAIT)
- var/datum/reagent/consumable/nutriment/protein/protein = reagents.has_reagent(/datum/reagent/consumable/nutriment/protein, check_subtypes = TRUE)
- if(protein)
- protein.data = get_fish_taste_cooked()
-
-///Checks if the fish is liked or not when eaten by a human.
-/obj/item/fish/proc/check_liked(mob/living/eater)
- if(HAS_TRAIT(eater, TRAIT_PACIFISM) && (status == FISH_ALIVE ||HAS_MIND_TRAIT(eater, TRAIT_NAIVE)))
- eater.add_mood_event("eating_fish", /datum/mood_event/pacifist_eating_fish_item)
- return FOOD_TOXIC
- if(HAS_TRAIT(eater, TRAIT_AGEUSIA))
- return
- if(HAS_TRAIT(eater, TRAIT_FISH_EATER) && !HAS_TRAIT(eater, TRAIT_VEGETARIAN))
- return FOOD_LIKED
-
-/**
- * Fish is not a reagent holder yet it's edible, so it doen't behave like most other snacks
- * which means it has its own way of handling being bitten, which is defined here.
- */
-/obj/item/fish/proc/after_eat(mob/living/eater, mob/living/feeder)
- SHOULD_CALL_PARENT(TRUE)
- if(!reagents.total_volume)
- return
- bites_amount++
- var/bites_to_finish = weight / FISH_WEIGHT_BITE_DIVISOR
- adjust_health(health - (initial(health) / bites_to_finish) * 3)
- if(status == FISH_ALIVE && prob(50) && feeder.is_holding(src) && feeder.dropItemToGround(src))
- to_chat(feeder, span_warning("[src] slips out of your hands in pain!"))
- var/turf/target_turf = get_ranged_target_turf(get_turf(src), pick(GLOB.alldirs), 2)
- throw_at(target_turf)
-
-///A proc that returns a static reagent holder with a set reagents that you'd get when eating this fish.
-/obj/item/fish/proc/generate_fish_reagents(multiplier = 1)
- SHOULD_NOT_OVERRIDE(TRUE)
- var/list/reagents_to_add = get_base_edible_reagents_to_add()
- SEND_SIGNAL(src, COMSIG_GENERATE_REAGENTS_TO_ADD, reagents_to_add)
- if(multiplier != 1)
- for(var/reagent in reagents_to_add)
- reagents_to_add[reagent] *= multiplier
- reagents.add_reagent_list(reagents_to_add, added_purity = 1)
- var/datum/reagent/consumable/nutriment/protein/protein = reagents.has_reagent(/datum/reagent/consumable/nutriment/protein, check_subtypes = TRUE)
- if(protein)
- protein.data = HAS_TRAIT(src, TRAIT_FISH_WELL_COOKED) ? get_fish_taste_cooked() : get_fish_taste()
-
-/obj/item/fish/proc/get_fish_taste()
- return list("raw fish" = 2.5, "scales" = 1)
-
-/obj/item/fish/proc/get_fish_taste_cooked()
- return list("cooked fish" = 2)
-
-///The proc that adds in the main reagents this fish has when eaten (without accounting for traits)
-/obj/item/fish/proc/get_base_edible_reagents_to_add()
- var/return_list = list(
- /datum/reagent/consumable/nutriment/protein = 2,
- /datum/reagent/blood = 1,
- )
- //It has been at the very least under-cooked.
- if(HAS_TRAIT(src, TRAIT_FOOD_FRIED) || HAS_TRAIT(src, TRAIT_FOOD_BBQ_GRILLED))
- return_list[/datum/reagent/consumable/nutriment/protein] *= 2
- return_list -= /datum/reagent/blood
- if(required_fluid_type == AQUARIUM_FLUID_SALTWATER)
- return_list[/datum/reagent/consumable/salt] = 0.4
- return return_list
-
-///adjusts the maximum volume of the fish reagents holder and update the amount of food to bite
-/obj/item/fish/proc/adjust_reagents_capacity(amount_to_add)
- if(!reagents)
- return
- reagents.maximum_volume += amount_to_add
- var/bites_to_finish = weight / FISH_WEIGHT_BITE_DIVISOR
- ///updates how many units of reagent one bite takes if edible.
- if(IS_EDIBLE(src))
- AddComponent(/datum/component/edible, bite_consumption = reagents.maximum_volume / bites_to_finish)
-
-///Grinding a fish replaces some the protein it has with blood and gibs. You ain't getting a clean smoothie out of it.
-/obj/item/fish/on_grind()
- . = ..()
- if(!reagents)
- return
- reagents.convert_reagent(/datum/reagent/consumable/nutriment/protein, /datum/reagent/consumable/liquidgibs, 0.4, include_source_subtypes = TRUE)
- reagents.convert_reagent(/datum/reagent/consumable/nutriment/protein, /datum/reagent/blood, 0.2, include_source_subtypes = TRUE)
-
-///When processed, the reagents inside this fish will be passed to the created atoms.
-/obj/item/fish/UsedforProcessing(mob/living/user, obj/item/used_item, list/chosen_option, list/created_atoms)
- var/created_len = length(created_atoms)
- for(var/atom/movable/created as anything in created_atoms)
- if(!created.reagents)
- continue
- for(var/datum/reagent/reagent as anything in reagents.reagent_list)
- var/transfer_vol = reagent.volume / created_len
- var/datum/reagent/result_reagent = created.reagents.has_reagent(reagent.type)
- if(!result_reagent)
- created.reagents.add_reagent(reagent.type, transfer_vol, reagents.copy_data(reagent), reagents.chem_temp, reagent.purity, reagent.ph, no_react = TRUE)
- continue
- var/multiplier = transfer_vol / result_reagent.volume
- created.reagents.multiply_single_reagent(reagent.type, multiplier)
- return ..()
/obj/item/fish/update_icon_state()
if(status == FISH_DEAD && icon_state_dead)
@@ -396,37 +182,34 @@
if(!istype(item, /obj/item/fish_feed))
return ..()
if(!item.reagents.total_volume)
- balloon_alert(user, "[item.name] is empty!")
+ balloon_alert(user, "[item] is empty!")
return TRUE
if(status == FISH_DEAD)
- balloon_alert(user, "[name] [HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "isn't hungry" : "is dead!"]")
+ balloon_alert(user, "[src] is dead!")
return TRUE
feed(item.reagents)
- balloon_alert(user, "fed [name]")
+ balloon_alert(user, "fed [src]")
return TRUE
/obj/item/fish/examine(mob/user)
. = ..()
if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_DEEPER_FISH))
if(status == FISH_DEAD)
- . += span_deadsay("It's [HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "taking the big snooze" : "dead"].")
- else
- var/list/warnings = list()
- if(is_hungry())
- warnings += "starving"
- if(!HAS_TRAIT(src, TRAIT_FISH_STASIS) && !proper_environment())
- warnings += "drowning"
- if(health < initial(health) * 0.6)
- warnings += "sick"
- if(length(warnings))
- . += span_warning("It's [english_list(warnings)].")
+ . += span_deadsay("it's dead.")
+ var/list/warnings = list()
+ if(is_hungry())
+ warnings += "starving"
+ if(!HAS_TRAIT(src, TRAIT_FISH_STASIS) && !proper_environment())
+ warnings += "drowning"
+ if(health < initial(health) * 0.6)
+ warnings += "sick"
+ if(length(warnings))
+ . += span_warning("it's [english_list(warnings)]")
if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISH))
. += span_notice("It's [size] cm long.")
. += span_notice("It weighs [weight] g.")
if(HAS_TRAIT(src, TRAIT_FISHING_BAIT))
. += span_smallnoticeital("It can be used as a fishing bait.")
- if(bites_amount)
- . += span_warning("It's been bitten by someone.")
///Randomizes weight and size.
/obj/item/fish/proc/randomize_size_and_weight(base_size = average_size, base_weight = average_weight, deviation = weight_size_deviation)
@@ -442,12 +225,11 @@
/obj/item/fish/proc/update_size_and_weight(new_size = average_size, new_weight = average_weight)
SEND_SIGNAL(src, COMSIG_FISH_UPDATE_SIZE_AND_WEIGHT, new_size, new_weight)
if(size)
- remove_fillet_type()
+ if(fillet_type)
+ RemoveElement(/datum/element/processable, TOOL_KNIFE, fillet_type, num_fillets, 0.5 SECONDS * num_fillets, screentip_verb = "Cut")
if(size > FISH_SIZE_TWO_HANDS_REQUIRED)
qdel(GetComponent(/datum/component/two_handed))
-
size = new_size
-
var/init_icon_state = initial(inhand_icon_state)
switch(size)
if(0 to FISH_SIZE_TINY_MAX)
@@ -479,34 +261,17 @@
inhand_icon_state = "[inhand_icon_state]_wielded"
AddComponent(/datum/component/two_handed, require_twohands = TRUE)
- add_fillet_type()
+ if(fillet_type)
+ var/init_fillets = initial(num_fillets)
+ var/amount = max(round(init_fillets * size / FISH_FILLET_NUMBER_SIZE_DIVISOR, 1), 1)
+ num_fillets = amount
+ AddElement(/datum/element/processable, TOOL_KNIFE, fillet_type, num_fillets, 0.5 SECONDS * num_fillets, screentip_verb = "Cut")
- var/make_edible = TRUE
if(weight)
for(var/reagent_type in grind_results)
- grind_results[reagent_type] /= max(FLOOR(weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR, 0.1), 0.1)
- if(reagents) //This fish has reagents. Adjust the maximum volume of the reagent holder and do some math to adjut the reagents too.
- var/new_weight_ratio = new_weight / weight
- var/volume_diff = reagents.maximum_volume * new_weight_ratio - reagents.maximum_volume
- if(new_weight_ratio > weight)
- adjust_reagents_capacity(volume_diff)
- ///As always, we want to maintain proportions here, so we need to get the ratio of bites left and initial bites left.
- var/weight_diff = new_weight - weight
- var/multiplier = weight_diff / FISH_WEIGHT_BITE_DIVISOR
- var/initial_bites_left = weight / FISH_WEIGHT_BITE_DIVISOR
- var/bites_left = initial_bites_left - bites_amount
- var/amount_to_gen = bites_left / initial_bites_left * multiplier
- generate_fish_reagents(amount_to_gen)
- else
- reagents.multiply_reagents(new_weight_ratio)
- adjust_reagents_capacity(volume_diff)
- make_edible = FALSE
-
+ grind_results[reagent_type] /= FLOOR(weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR, 0.1)
weight = new_weight
- if(make_edible)
- make_edible()
-
if(weight >= FISH_WEIGHT_SLOWDOWN)
slowdown = round(((weight/FISH_WEIGHT_SLOWDOWN_DIVISOR)**FISH_WEIGHT_SLOWDOWN_EXPONENT)-1.3, 0.1)
drag_slowdown = round(slowdown * 0.5, 1)
@@ -518,25 +283,10 @@
mob.update_equipment_speed_mods()
for(var/reagent_type in grind_results)
- grind_results[reagent_type] *= max(FLOOR(weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR, 0.1), 0.1)
+ grind_results[reagent_type] *= FLOOR(weight/FISH_GRIND_RESULTS_WEIGHT_DIVISOR, 0.1)
update_fish_force()
-/obj/item/fish/proc/remove_fillet_type()
- if(!fillet_type)
- return
- var/amount = max(round(num_fillets * size / FISH_FILLET_NUMBER_SIZE_DIVISOR, 1), 1)
- var/time = PERFORM_ALL_TESTS(fish_size_weight) ? 0 : 0.5 SECONDS * amount
- RemoveElement(/datum/element/processable, TOOL_KNIFE, fillet_type, amount, time, screentip_verb = "Cut")
-
-/obj/item/fish/proc/add_fillet_type()
- if(!fillet_type)
- return
- var/amount = max(round(num_fillets * size / FISH_FILLET_NUMBER_SIZE_DIVISOR, 1), 1)
- var/time = PERFORM_ALL_TESTS(fish_size_weight) ? 0 : 0.5 SECONDS * amount
- AddElement(/datum/element/processable, TOOL_KNIFE, fillet_type, amount, time, screentip_verb = "Cut")
- return amount //checked by a unit test
-
///Reset weapon-related variables of this items and recalculates those values based on the fish weight and size.
/obj/item/fish/proc/update_fish_force()
if(force >= 15 && hitsound == SFX_ALT_FISH_SLAP)
@@ -671,7 +421,7 @@
/obj/item/fish/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE)
. = ..()
- check_flopping()
+ check_environment()
/obj/item/fish/proc/enter_stasis()
ADD_TRAIT(src, TRAIT_FISH_STASIS, INNATE_TRAIT)
@@ -700,11 +450,11 @@
fed_reagents.remove_reagent(fed_reagent_type, 0.1)
SEND_SIGNAL(src, COMSIG_FISH_FED, fed_reagents, fed_reagent_type)
-/obj/item/fish/proc/check_flopping()
+/obj/item/fish/proc/check_environment()
if(QDELETED(src)) //we don't care anymore
return
- if(!(fish_flags & FISH_DO_FLOP_ANIM))
+ if(!do_flop_animation)
return
// Do additional stuff
@@ -737,15 +487,12 @@
if(FISH_ALIVE)
status = FISH_ALIVE
health = initial(health) // since the fishe has been revived
- regenerate_bites(bites_amount)
last_feeding = world.time //reset hunger
- check_flopping()
+ check_environment()
START_PROCESSING(SSobj, src)
- ADD_TRAIT(src, TRAIT_UNCOMPOSTABLE, INNATE_TRAIT)
if(FISH_DEAD)
status = FISH_DEAD
STOP_PROCESSING(SSobj, src)
- REMOVE_TRAIT(src, TRAIT_UNCOMPOSTABLE, INNATE_TRAIT)
stop_flopping()
if(!silent)
var/message = span_notice(replacetext(death_text, "%SRC", "[src]"))
@@ -757,51 +504,6 @@
update_fish_force()
SEND_SIGNAL(src, COMSIG_FISH_STATUS_CHANGED)
-/obj/item/fish/vv_edit_var(var_name, var_value)
- switch(var_name)
- if(NAMEOF(src, status))
- if(var_value != FISH_DEAD && var_value != FISH_ALIVE)
- var_value = var_value ? FISH_ALIVE : FISH_DEAD
- set_status(var_value)
- if(NAMEOF(src, size))
- if(!isnum(var_value) || var_value == 0)
- return FALSE
- update_size_and_weight(var_value, weight)
- if(NAMEOF(src, weight))
- if(!isnum(var_value) || var_value == 0)
- return FALSE
- update_size_and_weight(size, var_value)
- if(NAMEOF(src, health))
- if(!isnum(var_value))
- return FALSE
- adjust_health(health)
- if(NAMEOF(src, fish_flags))
- var/old_fish_flags = fish_flags
- fish_flags = var_value
- if((old_fish_flags ^ fish_flags) & FISH_DO_FLOP_ANIM) //the flopping flag wasn't added nor removed
- return TRUE
- if(fish_flags & FISH_DO_FLOP_ANIM)
- RegisterSignal(src, COMSIG_ATOM_TEMPORARY_ANIMATION_START, PROC_REF(on_temp_animation))
- else
- UnregisterSignal(src, COMSIG_ATOM_TEMPORARY_ANIMATION_START)
- check_flopping()
- if(NAMEOF(src, fillet_type))
- if(!ispath(var_value))
- return FALSE
- remove_fillet_type()
- fillet_type = var_value
- add_fillet_type()
- if(NAMEOF(src, num_fillets))
- if(!isnum(var_value))
- return FALSE
- remove_fillet_type()
- num_fillets = var_value
- add_fillet_type()
- else
- return ..()
-
- return TRUE
-
/obj/item/fish/expose_reagents(list/reagents, datum/reagents/source, methods = TOUCH, volume_modifier = 1, show_message = TRUE)
. = ..()
if(. & COMPONENT_NO_EXPOSE_REAGENTS || status != FISH_DEAD)
@@ -828,25 +530,6 @@
injector.expend(src, user)
return LAZARUS_INJECTOR_USED
-/obj/item/fish/proc/update_aquarium_appearance(datum/source, obj/effect/aquarium/visual)
- SIGNAL_HANDLER
- visual.icon = dedicated_in_aquarium_icon || icon
- visual.icon_state = dedicated_in_aquarium_icon_state || "[initial(icon_state)]_small"
- visual.color = aquarium_vc_color
-
-/obj/item/fish/proc/randomize_aquarium_position(datum/source, obj/structure/aquarium/current_aquarium, obj/effect/aquarium/visual)
- SIGNAL_HANDLER
- var/list/aq_properties = current_aquarium.get_surface_properties()
- var/avg_width = round(sprite_width * 0.5)
- var/avg_height = round(sprite_height * 0.5)
- var/px_min = aq_properties[AQUARIUM_PROPERTIES_PX_MIN] + avg_width - 16
- var/px_max = aq_properties[AQUARIUM_PROPERTIES_PX_MAX] - avg_width - 16
- var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16
- var/py_max = aq_properties[AQUARIUM_PROPERTIES_PY_MAX] - avg_width - 16
-
- visual.pixel_x = visual.base_px = rand(px_min,px_max)
- visual.pixel_y = visual.base_py = rand(py_min,py_max)
-
/obj/item/fish/proc/get_aquarium_animation()
var/obj/structure/aquarium/aquarium = loc
if(!istype(aquarium) || aquarium.fluid_type == AQUARIUM_FLUID_AIR || status == FISH_DEAD)
@@ -854,59 +537,6 @@
else
return AQUARIUM_ANIMATION_FISH_SWIM
-/obj/item/fish/proc/update_aquarium_animation(datum/source, current_animation, obj/structure/current_aquarium, obj/effect/visual)
- SIGNAL_HANDLER
- var/animation = get_aquarium_animation()
- if(animation == current_animation)
- return
- switch(animation)
- if(AQUARIUM_ANIMATION_FISH_SWIM)
- swim_animation(current_aquarium, visual)
- if(AQUARIUM_ANIMATION_FISH_DEAD)
- dead_animation(current_aquarium, visual)
-
-/// Create looping random path animation, pixel offsets parameters include offsets already
-/obj/item/fish/proc/swim_animation(obj/structure/aquarium/current_aquarium, obj/effect/aquarium/visual)
- var/avg_width = round(sprite_width / 2)
- var/avg_height = round(sprite_height / 2)
-
- var/list/aq_properties = current_aquarium.get_surface_properties()
- var/px_min = aq_properties[AQUARIUM_PROPERTIES_PX_MIN] + avg_width - 16
- var/px_max = aq_properties[AQUARIUM_PROPERTIES_PX_MAX] - avg_width - 16
- var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16
- var/py_max = aq_properties[AQUARIUM_PROPERTIES_PY_MAX] - avg_width - 16
-
- var/origin_x = visual.base_px
- var/origin_y = visual.base_py
- var/prev_x = origin_x
- var/prev_y = origin_y
- animate(visual, pixel_x = origin_x, time = 0, loop = -1) //Just to start the animation
- var/move_number = rand(3, 5) //maybe unhardcode this
- for(var/i in 1 to move_number)
- //If it's last movement, move back to start otherwise move to some random point
- var/target_x = i == move_number ? origin_x : rand(px_min,px_max) //could do with enforcing minimal delta for prettier zigzags
- var/target_y = i == move_number ? origin_y : rand(py_min,py_max)
- var/dx = prev_x - target_x
- var/dy = prev_y - target_y
- prev_x = target_x
- prev_y = target_y
- var/dist = abs(dx) + abs(dy)
- var/eyeballed_time = dist * 2 //2ds per px
- //Face the direction we're going
- var/matrix/dir_mx = matrix(visual.transform)
- if(dx <= 0) //assuming default sprite is facing left here
- dir_mx.Scale(-1, 1)
- animate(transform = dir_mx, time = 0, loop = -1)
- animate(pixel_x = target_x, pixel_y = target_y, time = eyeballed_time, loop = -1)
-
-/obj/item/fish/proc/dead_animation(obj/structure/aquarium/current_aquarium, obj/effect/aquarium/visual)
- //Set base_py to lowest possible value
- var/avg_height = round(sprite_height / 2)
- var/list/aq_properties = current_aquarium.get_surface_properties()
- var/py_min = aq_properties[AQUARIUM_PROPERTIES_PY_MIN] + avg_height - 16
- visual.base_py = py_min
- animate(visual, pixel_y = py_min, time = 1) //flop to bottom and end current animation.
-
/// Checks if our current environment lets us live.
/obj/item/fish/proc/proper_environment()
var/obj/structure/aquarium/aquarium = loc
@@ -945,28 +575,10 @@
health_change_per_second += 0.5 //Slowly healing
adjust_health(health + health_change_per_second * seconds_per_tick)
-/obj/item/fish/proc/adjust_health(amount)
- if(status == FISH_DEAD || amount == health)
- return
- var/pre_health = health
- var/initial_health = initial(health)
- health = clamp(amount, 0, initial_health)
+/obj/item/fish/proc/adjust_health(amt)
+ health = clamp(amt, 0, initial(health))
if(health <= 0)
set_status(FISH_DEAD)
- return
- if(amount < pre_health || !bites_amount)
- return
- var/health_to_pre_health_diff = amount - pre_health
- var/init_health_to_pre_diff = initial_health - pre_health
- var/bites_to_recover = bites_amount * (health_to_pre_health_diff / init_health_to_pre_diff)
- regenerate_bites(bites_to_recover)
-
-/obj/item/fish/proc/regenerate_bites(amount)
- amount = min(amount, bites_amount)
- if(amount <= 0)
- return
- bites_amount -= amount
- generate_fish_reagents(amount)
/obj/item/fish/proc/ready_to_reproduce(being_targeted = FALSE)
var/obj/structure/aquarium/aquarium = loc
@@ -1145,7 +757,7 @@
var/fish_zap_flags = ZAP_MOB_DAMAGE
if(istype(loc, /obj/structure/aquarium/bioelec_gen))
fish_zap_range = 5
- fish_zap_power = GET_FISH_ELECTROGENESIS(src)
+ fish_zap_power = electrogenesis_power
fish_zap_flags |= (ZAP_GENERATES_POWER | ZAP_MOB_STUN)
tesla_zap(source = get_turf(src), zap_range = fish_zap_range, power = fish_zap_power, cutoff = 1 MEGA JOULES, zap_flags = fish_zap_flags)
@@ -1156,10 +768,9 @@
if(HAS_TRAIT(src, TRAIT_FISH_FROM_CASE)) //Avoid printing money by simply ordering fish and sending it back.
calculated_price *= 0.05
return round(calculated_price)
-
/obj/item/fish/proc/get_happiness_value()
var/happiness_value = 0
- if(fish_flags & FISH_FLAG_PETTED)
+ if(recently_petted)
happiness_value++
if(HAS_TRAIT(src, TRAIT_FISH_NO_HUNGER) || min((world.time - last_feeding) / feeding_frequency, 1) < 0.5)
happiness_value++
@@ -1170,62 +781,18 @@
happiness_value++
if(ISINRANGE(aquarium.fluid_temp, required_temperature_min, required_temperature_max))
happiness_value++
- if(bites_amount) // ouch
- happiness_value -= 2
- if(health < initial(health) * 0.6)
- happiness_value -= 1
- return clamp(happiness_value, FISH_SAD, FISH_VERY_HAPPY)
-
-/obj/item/fish/attack_self(mob/living/user)
- . = ..()
- pet_fish(user)
+ return happiness_value
/obj/item/fish/proc/pet_fish(mob/living/user)
- var/in_aquarium = isaquarium(loc)
- if(status == FISH_DEAD)
- to_chat(user, span_warning("You try to pet [src], but [p_theyre()] motionless!"))
- return FALSE
- if(!proper_environment())
- to_chat(user, span_warning("You try to pet [src], but [p_theyre()] not feeling well!"))
- return FALSE
- if(fish_flags & FISH_FLAG_PETTED)
- if(in_aquarium)
- to_chat(user, span_warning("[src] runs away from your finger as you dip it into the water!"))
- else
- to_chat(user, span_warning("You try to pet [src] but [p_they()] squirms away!"))
- return FALSE
- if(HAS_TRAIT(src, TRAIT_FISH_ELECTROGENESIS) && GET_FISH_ELECTROGENESIS(src) > 15 MEGA JOULES)
+ if(recently_petted)
+ to_chat(user, span_warning("[src] runs away from your finger as you dip it into the water!"))
+ return
+ if(electrogenesis_power > 15 MEGA JOULES)
user.electrocute_act(5, src) //was it all worth it?
- fish_flags |= FISH_FLAG_PETTED
- new /obj/effect/temp_visual/heart(get_turf(src))
- if((/datum/fish_trait/aggressive in fish_traits) && prob(50))
- if(!in_aquarium)
- user.visible_message(
- span_warning("[src] dances around before biting [user]!"),
- span_warning("[src] dances around before biting you!"),
- vision_distance = DEFAULT_MESSAGE_RANGE - 3,
- )
- else
- user.visible_message(
- span_warning("[src] bites [user]'s hand!"),
- span_warning("You pet [src] as you hold it, only for [p_them()] to happily bite back!"),
- vision_distance = DEFAULT_MESSAGE_RANGE - 3,
- )
- var/body_zone = pick(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM)
- user.apply_damage((force * 0.2) + w_class * 2, BRUTE, body_zone, user.run_armor_check(body_zone, MELEE))
- playsound(src,'sound/weapons/bite.ogg', 45, TRUE, -1)
- else
- if(in_aquarium)
- to_chat(user, span_notice("[src] dances around!"))
- else
- to_chat(user, span_notice("You pet [src] as you hold it."))
- user.add_mood_event("petted_fish", /datum/mood_event/fish_petting, src, HAS_MIND_TRAIT(user, TRAIT_MORBID))
- playsound(src, 'sound/weapons/thudswoosh.ogg', 30, TRUE, -1)
- addtimer(CALLBACK(src, PROC_REF(undo_petted)), 30 SECONDS)
- return TRUE
-
-/obj/item/fish/proc/undo_petted()
- fish_flags &= ~FISH_FLAG_PETTED
+ recently_petted = TRUE
+ SEND_SIGNAL(src, COMSIG_FISH_PETTED)
+ to_chat(user, span_notice("[src] dances around!"))
+ addtimer(VARSET_CALLBACK(src, recently_petted, FALSE), 30 SECONDS)
/// Returns random fish, using random_case_rarity probabilities.
/proc/random_fish_type(required_fluid)
@@ -1256,7 +823,3 @@
return fluid_type == AQUARIUM_FLUID_SALTWATER || fluid_type == AQUARIUM_FLUID_FRESHWATER
else
return fish_fluid_type == fluid_type
-
-#undef GET_FISH_ELECTROGENESIS
-#undef FISH_SAD
-#undef FISH_VERY_HAPPY
diff --git a/code/modules/fishing/fish/fish_evolution.dm b/code/modules/fishing/fish/fish_evolution.dm
index d7b8f744f0a67..688b0c201c7b4 100644
--- a/code/modules/fishing/fish/fish_evolution.dm
+++ b/code/modules/fishing/fish/fish_evolution.dm
@@ -1,7 +1,4 @@
-///A global list of fish evolutions, which are singletons.
GLOBAL_LIST_INIT(fish_evolutions, init_subtypes_w_path_keys(/datum/fish_evolution, list()))
-///A list of fish evolution types, each having an associated list containing all fish types that have it.
-GLOBAL_LIST_EMPTY(fishes_by_fish_evolution)
/**
* Fish evolution datums
@@ -10,9 +7,7 @@ GLOBAL_LIST_EMPTY(fishes_by_fish_evolution)
* then there's a chance the offspring may be of a new type rather than the same as its source or mate (if any).
*/
/datum/fish_evolution
- ///The name of the evolution. If not set, it'll be generated on runtime from the name of the new fish type.
var/name
- ///The probability that this evolution can happen.
var/probability = 0
///The obj/item/fish path of the new fish
var/obj/item/fish/new_fish_type = /obj/item/fish
@@ -26,14 +21,8 @@ GLOBAL_LIST_EMPTY(fishes_by_fish_evolution)
var/list/removed_traits
///A text string shown in the catalog, containing information on conditions specific to this evolution.
var/conditions_note
- ///Is this evolution shown on the wiki?
- var/show_on_wiki = TRUE
- ///Is the result of this evolution shown on the wiki?
- var/show_result_on_wiki = TRUE
/datum/fish_evolution/New()
- ..()
- SHOULD_CALL_PARENT(TRUE)
if(!ispath(new_fish_type, /obj/item/fish))
stack_trace("[type] instantiated with a new fish type of [new_fish_type]. That's not a fish, hun, things will break.")
if(!name)
@@ -98,7 +87,6 @@ GLOBAL_LIST_EMPTY(fishes_by_fish_evolution)
new_fish_type = /obj/item/fish/mastodon
new_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/amphibious, /datum/fish_trait/predator, /datum/fish_trait/aggressive)
conditions_note = "The fish (and its mate) needs to be unusually big both in size and weight."
- show_result_on_wiki = FALSE
/datum/fish_evolution/mastodon/check_conditions(obj/item/fish/source, obj/item/fish/mate, obj/structure/aquarium/aquarium)
if((source.size < 120 || source.weight < 3000) || (mate && (mate.size < 120 || mate.weight < 3000)))
@@ -118,11 +106,13 @@ GLOBAL_LIST_EMPTY(fishes_by_fish_evolution)
required_temperature_max = MIN_AQUARIUM_TEMP+10
/datum/fish_evolution/three_eyes
+ name = "Three-eyed Goldfish"
probability = 3
new_fish_type = /obj/item/fish/goldfish/three_eyes
new_traits = list(/datum/fish_trait/recessive)
/datum/fish_evolution/chainsawfish
+ name = "Chainsawfish"
probability = 30
new_fish_type = /obj/item/fish/chainsawfish
new_traits = list(/datum/fish_trait/predator, /datum/fish_trait/aggressive)
diff --git a/code/modules/fishing/fish/fish_traits.dm b/code/modules/fishing/fish/fish_traits.dm
index 8c96df6e4ac5f..e51b810d16b2e 100644
--- a/code/modules/fishing/fish/fish_traits.dm
+++ b/code/modules/fishing/fish/fish_traits.dm
@@ -37,7 +37,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
var/list/fish_whitelist
/// Depending on the value, fish with trait will be reported as more or less difficult in the catalog.
var/added_difficulty = 0
- /// Reagents to add to the fish whenever the COMSIG_GENERATE_REAGENTS_TO_ADD signal is sent. Their values will be multiplied later.
+ /// Reagents added to the fish when gained
var/list/reagents_to_add
/// Difficulty modifier from this mod, needs to return a list with two values
@@ -57,8 +57,10 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/// Applies some special qualities to the fish that has been spawned
/datum/fish_trait/proc/apply_to_fish(obj/item/fish/fish)
SHOULD_CALL_PARENT(TRUE)
- if(length(reagents_to_add))
- RegisterSignal(fish, COMSIG_GENERATE_REAGENTS_TO_ADD, PROC_REF(add_reagents))
+ if(reagents_to_add)
+ for(var/reagent in reagents_to_add)
+ add_to_reagents(fish, reagent, reagents_to_add[reagent])
+ RegisterSignal(fish, COMSIG_ATOM_PROCESSED, PROC_REF(process_reagents))
/// Applies some special qualities to basic mobs generated by fish (i.e. chasm chrab --> young lobstrosity --> lobstrosity).
/datum/fish_trait/proc/apply_to_mob(mob/living/basic/mob)
@@ -77,15 +79,25 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
SEND_SIGNAL(prey, COMSIG_FISH_EATEN_BY_OTHER_FISH, predator)
qdel(prey)
+/// Proc that inserts a reagent to the grind_results list of the fish. You'll still have to set the processed comsig proc yourself.
+/datum/fish_trait/proc/add_to_reagents(obj/item/fish/fish, reagent_type, amount)
+ LAZYINITLIST(fish.grind_results)
+ fish.grind_results.Insert(1, reagent_type)
+ fish.grind_results[reagent_type] = amount
-/**
- * Signal sent when we need to generate an abstract holder containing
- * reagents to be transfered, usually as a result of the fish being eaten by someone
- */
-/datum/fish_trait/proc/add_reagents(obj/item/fish/fish, list/reagents)
+/// Proc that handles adding reagents from the trait to the fillets from butchered fish.
+/datum/fish_trait/proc/process_reagents(obj/item/fish/source, mob/living/user, obj/item/process_item, list/results)
SIGNAL_HANDLER
+ var/results_with_reagents = 0
+ for(var/atom/result as anything in results)
+ if(result.reagents)
+ results_with_reagents++
+ if(!results_with_reagents)
+ return
for(var/reagent in reagents_to_add)
- reagents[reagent] += reagents_to_add[reagent]
+ var/amount = round(source.grind_results[reagent] / results_with_reagents, 0.1)
+ for(var/atom/result as anything in results)
+ result.reagents?.add_reagent(reagent, amount)
/// Proc that adds or changes the venomous when the fish size and/or weight are updated
/datum/fish_trait/proc/add_venom(obj/item/fish/source, venom_path, new_weight, mult = 0.25)
@@ -120,16 +132,10 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/datum/fish_trait/shiny_lover/difficulty_mod(obj/item/fishing_rod/rod, mob/fisherman)
. = ..()
- // These fish are easier to catch with shiny hook
+ // These fish are easier to catch with shiny lure
if(rod.hook && rod.hook.fishing_hook_traits & FISHING_HOOK_SHINY)
.[ADDITIVE_FISHING_MOD] -= FISH_TRAIT_MINOR_DIFFICULTY_BOOST
-/datum/fish_trait/shiny_lover/catch_weight_mod(obj/item/fishing_rod/rod, mob/fisherman)
- . = ..()
- // These fish are harder to find without a shiny hook
- if(rod.hook && rod.hook.fishing_hook_traits & FISHING_HOOK_SHINY)
- .[MULTIPLICATIVE_FISHING_MOD] = 0.5
-
/datum/fish_trait/picky_eater
name = "Picky Eater"
catalog_description = "This fish is very picky and will ignore low quality bait (unless it's amongst its favorites)."
@@ -319,7 +325,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/**
* Useful for those species with the parthenogenesis trait if you don't want them to mate with each other,
- * or for similar shenanigans, I don't know.
+ * or for similar shenanigeans, I don't know.
* Otherwise you could just set the stable_population to 1.
*/
/datum/fish_trait/no_mating
@@ -401,7 +407,7 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/datum/fish_trait/yucky
name = "Yucky"
catalog_description = "This fish tastes so repulsive, other fishes won't try to eat it."
- reagents_to_add = list(/datum/reagent/yuck = 1.2)
+ reagents_to_add = list(/datum/reagent/yuck = 3)
/datum/fish_trait/yucky/apply_to_fish(obj/item/fish/fish)
. = ..()
@@ -409,9 +415,9 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
/datum/fish_trait/toxic
name = "Toxic"
- catalog_description = "This fish contains toxins. Feeding it to predatory fishes or people is not recommended."
+ catalog_description = "This fish contains toxins. Feeding it to predatory fishes or people is not reccomended."
diff_traits_inheritability = 25
- reagents_to_add = list(/datum/reagent/toxin/tetrodotoxin = 1)
+ reagents_to_add = list(/datum/reagent/toxin/tetrodotoxin = 2.5)
/datum/fish_trait/toxic/apply_to_fish(obj/item/fish/fish)
. = ..()
@@ -500,7 +506,6 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
spontaneous_manifest_types = list(/obj/item/fish/clownfish/lube = 100)
catalog_description = "This fish exudes a viscous, slippery lubrificant. It's recommended not to step on it."
added_difficulty = 5
- reagents_to_add = list(/datum/reagent/lube = 1.2)
/datum/fish_trait/lubed/apply_to_fish(obj/item/fish/fish)
. = ..()
@@ -586,30 +591,11 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
inheritability = 60
diff_traits_inheritability = 30
catalog_description = "This fish is electroreceptive, and will generate electric fields. Can be harnessed inside a bioelectric generator."
- reagents_to_add = list(/datum/reagent/consumable/liquidelectricity = 1.5)
/datum/fish_trait/electrogenesis/apply_to_fish(obj/item/fish/fish)
. = ..()
ADD_TRAIT(fish, TRAIT_FISH_ELECTROGENESIS, FISH_TRAIT_DATUM)
RegisterSignal(fish, COMSIG_FISH_FORCE_UPDATED, PROC_REF(on_force_updated))
- RegisterSignals(fish, list(COMSIG_ITEM_FRIED, TRAIT_FOOD_BBQ_GRILLED), PROC_REF(on_fish_cooked))
-
-/datum/fish_trait/electrogenesis/proc/on_fish_cooked(obj/item/fish/fish, cooked_time)
- SIGNAL_HANDLER
- if(cooked_time >= FISH_SAFE_COOKING_DURATION)
- fish.reagents.del_reagent(/datum/reagent/consumable/liquidelectricity)
- else
- fish.reagents.multiply_single_reagent(/datum/reagent/consumable/liquidelectricity, 0.66)
-
-/datum/fish_trait/electrogenesis/add_reagents(obj/item/fish/fish, list/reagents)
- . = ..()
- if(HAS_TRAIT(fish, TRAIT_FISH_WELL_COOKED)) // Cooking it well removes all liquid electricity
- reagents -= /datum/reagent/consumable/liquidelectricity
- else
- reagents -= /datum/reagent/blood
- //Otherwise, undercooking it will remove 2/3 of it.
- if(!HAS_TRAIT(fish, TRAIT_FOOD_FRIED) && !HAS_TRAIT(fish, TRAIT_FOOD_BBQ_GRILLED))
- reagents[/datum/reagent/consumable/liquidelectricity] -= 1
/datum/fish_trait/electrogenesis/proc/on_force_updated(obj/item/fish/fish, weight_rank, bonus_or_malus)
SIGNAL_HANDLER
@@ -678,15 +664,6 @@ GLOBAL_LIST_INIT(spontaneous_fish_traits, populate_spontaneous_fish_traits())
return
change_venom_on_death(source, /datum/reagent/toxin/venom, 0.7, 0.3)
-/datum/fish_trait/hallucinogenic
- name = "Hallucinogenic"
- catalog_description = "This fish is coated with hallucinogenic neurotoxin. We advise cooking it before consumption."
- reagents_to_add = list(/datum/reagent/toxin/mindbreaker/fish = 1)
-
-/datum/fish_trait/hallucinogenic/add_reagents(obj/item/fish/fish, list/reagents)
- if(!HAS_TRAIT(src, TRAIT_FOOD_FRIED) && !HAS_TRAIT(src, TRAIT_FOOD_BBQ_GRILLED))
- return ..()
-
/datum/fish_trait/ink
name = "Ink Production"
catalog_description = "This fish possess a sac that produces ink."
diff --git a/code/modules/fishing/fish/types/air_space.dm b/code/modules/fishing/fish/types/air_space.dm
index dda3794ff4e1c..f3b985edfa78a 100644
--- a/code/modules/fishing/fish/types/air_space.dm
+++ b/code/modules/fishing/fish/types/air_space.dm
@@ -40,12 +40,6 @@
),
)
-/obj/item/fish/sand_crab/get_fish_taste()
- return list("raw crab" = 2)
-
-/obj/item/fish/sand_crab/get_fish_taste_cooked()
- return list("cooked crab" = 2)
-
/obj/item/fish/bumpy
name = "bump-fish"
desc = "An misshapen fish-thing all covered in stubby little tendrils"
diff --git a/code/modules/fishing/fish/types/anadromous.dm b/code/modules/fishing/fish/types/anadromous.dm
index 4edbce5d0c348..ecdbda1fde7d2 100644
--- a/code/modules/fishing/fish/types/anadromous.dm
+++ b/code/modules/fishing/fish/types/anadromous.dm
@@ -11,11 +11,6 @@
fillet_type = /obj/item/food/fishmeat/salmon
beauty = FISH_BEAUTY_GOOD
-/obj/item/fish/sockeye_salmon/get_base_edible_reagents_to_add()
- var/return_list = ..()
- return_list[/datum/reagent/consumable/nutriment/fat] = 1
- return return_list
-
/obj/item/fish/arctic_char
name = "arctic char"
desc = "A cold-water anadromous fish widespread around the Northern Hemisphere of Earth, yet it has somehow found a way here."
diff --git a/code/modules/fishing/fish/types/freshwater.dm b/code/modules/fishing/fish/types/freshwater.dm
index 68254f661371d..129b738fc0ad8 100644
--- a/code/modules/fishing/fish/types/freshwater.dm
+++ b/code/modules/fishing/fish/types/freshwater.dm
@@ -26,14 +26,11 @@
desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case."
stable_population = 1
random_case_rarity = FISH_RARITY_NOPE
- fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG
+ show_in_catalog = FALSE
beauty = FISH_BEAUTY_GOOD
compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/three_eyes)
fish_traits = list(/datum/fish_trait/recessive)
-/obj/item/fish/goldfish/gill/get_fish_taste()
- return list("raw fish" = 2.5, "objection" = 1)
-
/obj/item/fish/goldfish/three_eyes
name = "three-eyed goldfish"
desc = "A goldfish with an extra half a pair of eyes. You wonder what it's been feeding on lately..."
@@ -53,21 +50,15 @@
),
)
-/obj/item/fish/goldfish/three_eyes/get_fish_taste()
- return list("raw fish" = 2.5, "chemical waste" = 0.5)
-
/obj/item/fish/goldfish/three_eyes/gill
name = "McGill"
desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case. It looks kinda different today..."
compatible_types = list(/obj/item/fish/goldfish, /obj/item/fish/goldfish/three_eyes)
beauty = FISH_BEAUTY_GREAT
- fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG
+ show_in_catalog = FALSE
stable_population = 1
random_case_rarity = FISH_RARITY_NOPE
-/obj/item/fish/goldfish/three_eyes/gill/get_fish_taste()
- return list("raw fish" = 2.5, "objection" = 1)
-
/obj/item/fish/angelfish
name = "angelfish"
desc = "Young Angelfish often live in groups, while adults prefer solitary life. They become territorial and aggressive toward other fish when they reach adulthood."
@@ -148,12 +139,9 @@
/datum/fish_trait/electrogenesis,
)
//anxiety naturally limits the amount of zipzaps per tank, so they are stronger alone
- electrogenesis_power = 6.7 MEGA JOULES
+ electrogenesis_power = 20 MEGA JOULES
beauty = FISH_BEAUTY_GOOD
-/obj/item/fish/zipzap/get_fish_taste()
- return list("raw fish" = 2, "anxiety" = 1)
-
/obj/item/fish/tadpole
name = "tadpole"
desc = "The larval spawn of an amphibian. A very minuscle, round creature with a long tail it uses to swim around."
@@ -179,9 +167,6 @@
RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks))
RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth))
-/obj/item/fish/tadpole/make_edible()
- return
-
/obj/item/fish/tadpole/set_status(new_status, silent = FALSE)
. = ..()
if(status == FISH_DEAD)
diff --git a/code/modules/fishing/fish/types/holographic.dm b/code/modules/fishing/fish/types/holographic.dm
index 64de7d866d695..dfcdbeedb6b61 100644
--- a/code/modules/fishing/fish/types/holographic.dm
+++ b/code/modules/fishing/fish/types/holographic.dm
@@ -3,7 +3,7 @@
name = "holographic goldfish"
desc = "A holographic representation of a common goldfish, slowly flickering out, removed from its holo-habitat."
icon_state = /obj/item/fish/goldfish::icon_state
- fish_flags = parent_type::fish_flags & ~(FISH_FLAG_SHOW_IN_CATALOG|FISH_FLAG_EXPERIMENT_SCANNABLE)
+ show_in_catalog = FALSE
random_case_rarity = FISH_RARITY_NOPE
dedicated_in_aquarium_icon_state = /obj/item/fish/goldfish::dedicated_in_aquarium_icon_state
aquarium_vc_color = /obj/item/fish/goldfish::aquarium_vc_color
@@ -13,9 +13,11 @@
average_size = /obj/item/fish/goldfish::average_size
average_weight = /obj/item/fish/goldfish::average_weight
required_fluid_type = AQUARIUM_FLUID_ANADROMOUS
+ grind_results = null
fillet_type = null
death_text = "%SRC gently disappears."
fish_traits = list(/datum/fish_trait/no_mating) //just to be sure, these shouldn't reproduce
+ experisci_scannable = FALSE
beauty = /obj/item/fish/goldfish::beauty
/obj/item/fish/holo/Initialize(mapload, apply_qualities = TRUE)
@@ -26,9 +28,6 @@
return
holo_area.linked.add_to_spawned(src)
-/obj/item/fish/holo/make_edible(weight_val)
- return
-
/obj/item/fish/holo/set_status(new_status, silent = FALSE)
. = ..()
if(status == FISH_DEAD)
diff --git a/code/modules/fishing/fish/types/mining.dm b/code/modules/fishing/fish/types/mining.dm
index 0b29143dd5b8e..7614f259e5939 100644
--- a/code/modules/fishing/fish/types/mining.dm
+++ b/code/modules/fishing/fish/types/mining.dm
@@ -37,12 +37,6 @@
RegisterSignal(src, COMSIG_FISH_BEFORE_GROWING, PROC_REF(growth_checks))
RegisterSignal(src, COMSIG_FISH_FINISH_GROWING, PROC_REF(on_growth))
-/obj/item/fish/chasm_crab/get_fish_taste()
- return list("raw crab" = 2)
-
-/obj/item/fish/chasm_crab/get_fish_taste_cooked()
- return list("cooked crab" = 2)
-
///A chasm crab growth speed is determined by its initial weight and size, ergo bigger crabs for faster lobstrosities
/obj/item/fish/chasm_crab/update_size_and_weight(new_size = average_size, new_weight = average_weight)
. = ..()
@@ -64,11 +58,6 @@
AddComponent(/datum/component/fish_growth, lob_type, initial(growth_rate) * multiplier)
-/obj/item/fish/chasm_crab/pet_fish(mob/living/user)
- . = ..()
- if(.)
- anger -= min(anger, 6.5)
-
/obj/item/fish/chasm_crab/proc/growth_checks(datum/source, seconds_per_tick)
SIGNAL_HANDLER
var/hunger = CLAMP01((world.time - last_feeding) / feeding_frequency)
@@ -136,9 +125,6 @@
evolution_types = list(/datum/fish_evolution/mastodon)
beauty = FISH_BEAUTY_UGLY
-/obj/item/fish/boned/make_edible(weight_val)
- return //it's all bones and no meat.
-
/obj/item/fish/lavaloop
name = "lavaloop fish"
desc = "Due to its curvature, it can be used as make-shift boomerang."
@@ -178,12 +164,6 @@
effect_on_success = /obj/effect/temp_visual/guardian/phase,\
)
-/obj/item/fish/lavaloop/get_fish_taste()
- return list("chewy fish" = 2)
-
-/obj/item/fish/lavaloop/get_food_types()
- return SEAFOOD|MEAT|GORE //Well-cooked in lava
-
/obj/item/fish/lavaloop/proc/explode_on_user(mob/living/user)
var/obj/item/bodypart/arm/active_arm = user.get_active_hand()
active_arm?.dismember()
diff --git a/code/modules/fishing/fish/types/ruins.dm b/code/modules/fishing/fish/types/ruins.dm
index 153a5bc3b7b7c..da9e8388c0c44 100644
--- a/code/modules/fishing/fish/types/ruins.dm
+++ b/code/modules/fishing/fish/types/ruins.dm
@@ -8,7 +8,7 @@
pixel_x = -16
sprite_width = 12
sprite_height = 7
- fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG
+ show_in_catalog = FALSE
random_case_rarity = FISH_RARITY_NOPE
fishing_difficulty_modifier = 30
required_fluid_type = AQUARIUM_FLUID_ANY_WATER
@@ -26,9 +26,6 @@
fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/amphibious, /datum/fish_trait/revival, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive)
beauty = FISH_BEAUTY_BAD
-/obj/item/fish/mastodon/make_edible(weight_val)
- return //it's all bones and gibs.
-
///From the cursed spring
/obj/item/fish/soul
name = "soulfish"
@@ -39,7 +36,7 @@
average_size = 60
average_weight = 1200
stable_population = 4
- fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG
+ show_in_catalog = FALSE
beauty = FISH_BEAUTY_EXCELLENT
fish_movement_type = /datum/fish_movement/choppy //Glideless legacy movement? in my fishing minigame?
favorite_bait = list(
@@ -53,15 +50,6 @@
required_temperature_max = MIN_AQUARIUM_TEMP+38
random_case_rarity = FISH_RARITY_NOPE
-/obj/item/fish/soul/get_food_types()
- return MEAT|RAW|GORE //Not-so-quite-seafood
-
-/obj/item/fish/soul/get_fish_taste()
- return list("meat" = 2, "soulfulness" = 1)
-
-/obj/item/fish/soul/get_fish_taste_cooked()
- return list("cooked meat" = 2)
-
///From the cursed spring
/obj/item/fish/skin_crab
name = "skin crab"
@@ -72,7 +60,7 @@
average_size = 40
average_weight = 750
stable_population = 5
- fish_flags = parent_type::fish_flags & ~FISH_FLAG_SHOW_IN_CATALOG
+ show_in_catalog = FALSE
beauty = FISH_BEAUTY_GREAT
favorite_bait = list(
list(
@@ -83,8 +71,3 @@
fillet_type = /obj/item/food/meat/slab/rawcrab
random_case_rarity = FISH_RARITY_NOPE
-/obj/item/fish/skin_crab/get_fish_taste()
- return list("raw crab" = 2)
-
-/obj/item/fish/skin_crab/get_fish_taste_cooked()
- return list("cooked crab" = 2)
diff --git a/code/modules/fishing/fish/types/saltwater.dm b/code/modules/fishing/fish/types/saltwater.dm
index afb14436fadfc..0271c7f300876 100644
--- a/code/modules/fishing/fish/types/saltwater.dm
+++ b/code/modules/fishing/fish/types/saltwater.dm
@@ -14,9 +14,6 @@
required_temperature_min = MIN_AQUARIUM_TEMP+22
required_temperature_max = MIN_AQUARIUM_TEMP+30
-/obj/item/fish/clownfish/get_fish_taste()
- return list("raw fish" = 2, "something funny" = 1)
-
/obj/item/fish/clownfish/lube
name = "lubefish"
desc = "A clownfish exposed to cherry-flavored lube for far too long. First discovered the days following a cargo incident around the seas of Europa, when thousands of thousands of thousands..."
@@ -230,15 +227,9 @@
required_temperature_max = MIN_AQUARIUM_TEMP+26
fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/ink, /datum/fish_trait/camouflage, /datum/fish_trait/wary)
-/obj/item/fish/squid/get_fish_taste()
- return list("raw mollusk" = 2)
-
-/obj/item/fish/squid/get_fish_taste_cooked()
- return list("cooked mollusk" = 2, "tenderness" = 0.5)
-
/obj/item/fish/monkfish
name = "monkfish"
- desc = "A member of the Lophiid family of anglerfish. It goes by several different names, however none of them will make it look any prettier, nor be any less delicious."
+ desc = "A member of the Lophiid family of anglerfish. It goes by several different names, however none of them will make it look any prettier, nor any less delicious."
icon_state = "monkfish"
required_fluid_type = AQUARIUM_FLUID_SALTWATER
sprite_height = 7
diff --git a/code/modules/fishing/fish/types/station.dm b/code/modules/fishing/fish/types/station.dm
index baf104ae14f2f..8dd459452ab91 100644
--- a/code/modules/fishing/fish/types/station.dm
+++ b/code/modules/fishing/fish/types/station.dm
@@ -20,20 +20,6 @@
)
beauty = FISH_BEAUTY_DISGUSTING
-/obj/item/fish/ratfish/get_fish_taste()
- return list("vermin" = 2, "maintenance" = 1)
-
-/obj/item/fish/ratfish/get_fish_taste_cooked()
- return list("cooked vermin" = 2, "burned fur" = 0.5)
-
-/obj/item/fish/ratfish/get_food_types()
- return MEAT|RAW|GORE //Not-so-quite-seafood
-
-/obj/item/fish/ratfish/get_base_edible_reagents_to_add()
- var/list/return_list = ..()
- return_list[/datum/reagent/rat_spit] = 1
- return return_list
-
/obj/item/fish/ratfish/Initialize(mapload, apply_qualities = TRUE)
. = ..()
//stable pop reflects the config for how many mice migrate. powerful...
@@ -57,9 +43,6 @@
evolution_types = list(/datum/fish_evolution/purple_sludgefish)
beauty = FISH_BEAUTY_NULL
-/obj/item/fish/sludgefish/get_fish_taste()
- return list("raw fish" = 2, "eau de toilet" = 1)
-
/obj/item/fish/sludgefish/purple
name = "purple sludgefish"
desc = "A misshapen, fragile, loosely fish-like living goop. This one has developed sexual reproduction mechanisms, and a purple tint to boot."
@@ -74,12 +57,13 @@
icon_state_dead = "slimefish_dead"
sprite_width = 7
sprite_height = 7
- fish_flags = parent_type::fish_flags & ~FISH_DO_FLOP_ANIM //it already has a cute bouncy wiggle. :3
+ do_flop_animation = FALSE //it already has a cute bouncy wiggle. :3
random_case_rarity = FISH_RARITY_VERY_RARE
required_fluid_type = AQUARIUM_FLUID_ANADROMOUS
stable_population = 4
health = 150
fillet_type = /obj/item/slime_extract/grey
+ grind_results = list(/datum/reagent/toxin/slimejelly = 10)
fish_traits = list(/datum/fish_trait/toxin_immunity, /datum/fish_trait/crossbreeder)
favorite_bait = list(
list(
@@ -94,9 +78,3 @@
)
required_temperature_min = MIN_AQUARIUM_TEMP+20
beauty = FISH_BEAUTY_GREAT
-
-/obj/item/fish/slimefish/get_food_types()
- return SEAFOOD|TOXIC
-
-/obj/item/fish/slimefish/get_base_edible_reagents_to_add()
- return list(/datum/reagent/toxin/slimejelly = 5)
diff --git a/code/modules/fishing/fish/types/syndicate.dm b/code/modules/fishing/fish/types/syndicate.dm
index bf99f4302818e..a3e9a8519b4f3 100644
--- a/code/modules/fishing/fish/types/syndicate.dm
+++ b/code/modules/fishing/fish/types/syndicate.dm
@@ -13,9 +13,6 @@
required_temperature_max = MIN_AQUARIUM_TEMP+40
beauty = FISH_BEAUTY_BAD
-/obj/item/fish/emulsijack/get_fish_taste()
- return list("raw fish" = 2, "acid" = 1) //no scales
-
/obj/item/fish/donkfish
name = "donk co. company patent donkfish"
desc = "A lab-grown donkfish. Its invention was an accident for the most part, as it was intended to be consumed in donk pockets. Unfortunately, it tastes horrible, so it has now become a pseudo-mascot."
@@ -49,7 +46,6 @@
/datum/fish_trait/mixotroph,
/datum/fish_trait/electrogenesis,
)
- electrogenesis_power = 0.9 MEGA JOULES
beauty = FISH_BEAUTY_UGLY
/obj/item/fish/chainsawfish
@@ -97,9 +93,6 @@
. = ..()
AddElement(/datum/element/update_icon_updates_onmob)
-/obj/item/fish/chainsawfish/get_fish_taste()
- return list("raw fish" = 2.5, "anger" = 1)
-
/obj/item/fish/chainsawfish/update_icon_state()
if(status == FISH_DEAD)
inhand_icon_state = "chainsawfish_dead"
@@ -208,13 +201,7 @@
/obj/item/fish,
)
-/obj/item/fish/pike/armored/get_fish_taste()
- return list("raw fish" = 2.5, "metal" = 1)
-
-/obj/item/fish/pike/armored/get_fish_taste()
- return list("cooked fish" = 2.5, "metal" = 1)
-
-/obj/item/fish/pike/armored/get_force_rank()
+/obj/item/fish/swordfish/get_force_rank()
switch(w_class)
if(WEIGHT_CLASS_TINY)
force -= 11
diff --git a/code/modules/fishing/fish/types/tiziran.dm b/code/modules/fishing/fish/types/tiziran.dm
index b6fd43709f2d6..a39e82ce6c422 100644
--- a/code/modules/fishing/fish/types/tiziran.dm
+++ b/code/modules/fishing/fish/types/tiziran.dm
@@ -24,21 +24,10 @@
required_fluid_type = AQUARIUM_FLUID_SALTWATER
stable_population = 4
fillet_type = /obj/item/food/fishmeat/gunner_jellyfish
- fish_traits = list(/datum/fish_trait/hallucinogenic)
required_temperature_min = MIN_AQUARIUM_TEMP+24
required_temperature_max = MIN_AQUARIUM_TEMP+32
beauty = FISH_BEAUTY_GOOD
-/obj/item/fish/gunner_jellyfish/Initialize(mapload, apply_qualities = TRUE)
- . = ..()
- AddElement(/datum/element/quality_food_ingredient, FOOD_COMPLEXITY_2)
-
-/obj/item/fish/gunner_jellyfish/get_fish_taste()
- return list("cold jelly" = 2)
-
-/obj/item/fish/gunner_jellyfish/get_fish_taste_cooked()
- return list("crunchy tenderness" = 2)
-
/obj/item/fish/needlefish
name = "needlefish"
desc = "A tiny, transparent fish which resides in large schools in the oceans of Tizira. A common food for other, larger fish."
@@ -78,9 +67,3 @@
/obj/item/fish/armorfish/Initialize(mapload, apply_qualities = TRUE)
. = ..()
add_traits(list(TRAIT_FISHING_BAIT, TRAIT_GOOD_QUALITY_BAIT), INNATE_TRAIT)
-
-/obj/item/fish/chasm_crab/get_fish_taste()
- return list("raw prawn" = 2)
-
-/obj/item/fish/chasm_crab/get_fish_taste_cooked()
- return list("cooked prawn" = 2)
diff --git a/code/modules/fishing/fish_catalog.dm b/code/modules/fishing/fish_catalog.dm
index 4f329861ff93c..f0880804f8eb0 100644
--- a/code/modules/fishing/fish_catalog.dm
+++ b/code/modules/fishing/fish_catalog.dm
@@ -3,13 +3,8 @@
name = "Fish Encyclopedia"
desc = "Indexes all fish known to mankind (and related species)."
icon_state = "fishbook"
- custom_price = PAYCHECK_CREW * 2
starting_content = "Lot of fish stuff" //book wrappers could use cleaning so this is not necessary
-/obj/item/book/manual/fish_catalog/Initialize(mapload)
- . = ..()
- AddComponent(/datum/component/adjust_fishing_difficulty, -4, ITEM_SLOT_HANDS)
-
/obj/item/book/manual/fish_catalog/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
@@ -21,10 +16,11 @@
var/static/fish_info
if(!fish_info)
fish_info = list()
- for(var/obj/item/fish/fish as anything in subtypesof(/obj/item/fish))
- if(!(initial(fish.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG))
- continue
+ for(var/_fish_type as anything in subtypesof(/obj/item/fish))
+ var/obj/item/fish/fish = _fish_type
var/list/fish_data = list()
+ if(!initial(fish.show_in_catalog))
+ continue
fish_data["name"] = initial(fish.name)
fish_data["desc"] = initial(fish.desc)
fish_data["fluid"] = initial(fish.required_fluid_type)
@@ -41,9 +37,27 @@
else
fish_data["feed"] = "[AQUARIUM_COMPANY] Fish Feed"
fish_data["fishing_tips"] = build_fishing_tips(fish)
- fish_data["beauty"] = SSfishing.fish_properties[fish][FISH_PROPERTIES_BEAUTY_SCORE]
-
+ var/beauty_score = initial(fish.beauty)
+ switch(beauty_score)
+ if(-INFINITY to FISH_BEAUTY_DISGUSTING)
+ beauty_score = "OH HELL NAW!"
+ if(FISH_BEAUTY_DISGUSTING to FISH_BEAUTY_UGLY)
+ beauty_score = "☆☆☆☆☆"
+ if(FISH_BEAUTY_UGLY to FISH_BEAUTY_BAD)
+ beauty_score = "★☆☆☆☆"
+ if(FISH_BEAUTY_BAD to FISH_BEAUTY_NULL)
+ beauty_score = "★★☆☆☆"
+ if(FISH_BEAUTY_NULL to FISH_BEAUTY_GENERIC)
+ beauty_score = "★★★☆☆"
+ if(FISH_BEAUTY_GENERIC to FISH_BEAUTY_GOOD)
+ beauty_score = "★★★★☆"
+ if(FISH_BEAUTY_GOOD to FISH_BEAUTY_GREAT)
+ beauty_score = "★★★★★"
+ if(FISH_BEAUTY_GREAT to INFINITY)
+ beauty_score = "★★★★★★"
+ fish_data["beauty"] = beauty_score
fish_info += list(fish_data)
+ // TODO: Custom entries for unusual stuff
.["fish_info"] = fish_info
.["sponsored_by"] = AQUARIUM_COMPANY
@@ -54,12 +68,12 @@
return initial(bait_item.name)
if(islist(bait))
var/list/special_identifier = bait
- switch(special_identifier[FISH_BAIT_TYPE])
- if(FISH_BAIT_FOODTYPE)
- return jointext(bitfield_to_list(special_identifier[FISH_BAIT_VALUE], FOOD_FLAGS_IC),",")
- if(FISH_BAIT_REAGENT)
- var/datum/reagent/prototype = special_identifier[FISH_BAIT_VALUE]
- return "[initial(prototype.name)] (at least [special_identifier[FISH_BAIT_AMOUNT]]u)"
+ switch(special_identifier["Type"])
+ if("Foodtype")
+ return jointext(bitfield_to_list(special_identifier["Value"], FOOD_FLAGS_IC),",")
+ if("Reagent")
+ var/datum/reagent/prototype = special_identifier["Value"]
+ return "[initial(prototype.name)] (at least [special_identifier["Amount"]]u)"
else
stack_trace("Unknown bait identifier in fish favourite/disliked list")
return "SOMETHING VERY WEIRD"
@@ -77,8 +91,8 @@
spot_descriptions += source.catalog_description
.["spots"] = english_list(spot_descriptions, nothing_text = "Unknown")
var/list/fish_list_properties = SSfishing.fish_properties
- var/list/fav_bait = fish_list_properties[fishy][FISH_PROPERTIES_FAV_BAIT]
- var/list/disliked_bait = fish_list_properties[fishy][FISH_PROPERTIES_BAD_BAIT]
+ var/list/fav_bait = fish_list_properties[fishy][NAMEOF(fishy, favorite_bait)]
+ var/list/disliked_bait = fish_list_properties[fishy][NAMEOF(fishy, disliked_bait)]
var/list/bait_list = list()
// Favourite/Disliked bait
for(var/bait_type_or_trait in fav_bait)
@@ -90,7 +104,7 @@
.["disliked_bait"] = english_list(bait_list, nothing_text = "None")
// Fish traits description
var/list/trait_descriptions = list()
- var/list/fish_traits = fish_list_properties[fishy][FISH_PROPERTIES_TRAITS]
+ var/list/fish_traits = fish_list_properties[fishy][NAMEOF(fishy, fish_traits)]
var/fish_difficulty = initial(fishy.fishing_difficulty_modifier)
for(var/fish_trait in fish_traits)
var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait]
diff --git a/code/modules/fishing/fish_movement.dm b/code/modules/fishing/fish_movement.dm
index b288161b19237..a328903617f62 100644
--- a/code/modules/fishing/fish_movement.dm
+++ b/code/modules/fishing/fish_movement.dm
@@ -53,10 +53,6 @@
else
long_jump_chance *= master.difficulty
-/datum/fish_movement/proc/reset_difficulty_values()
- short_jump_chance = initial(short_jump_chance)
- long_jump_chance = initial(long_jump_chance)
-
///The main proc, called by minigame every SSfishing tick while it's in the 'active' phase.
/datum/fish_movement/proc/move_fish(seconds_per_tick)
times_fired++
@@ -194,12 +190,6 @@
plunging_speed += round(plunging_speed * master.difficulty * 0.03)
fish_idle_velocity += plunging_speed //so it can be safely subtracted if the fish starts at the bottom.
-/datum/fish_movement/plunger/reset_difficulty_values()
- . = ..()
- if(is_plunging)
- fish_idle_velocity -= plunging_speed
- plunging_speed = initial(plunging_speed)
-
/datum/fish_movement/plunger/move_fish(seconds_per_tick)
var/fish_area = FISHING_MINIGAME_AREA - master.fish_height
if(is_plunging)
diff --git a/code/modules/fishing/fishing_equipment.dm b/code/modules/fishing/fishing_equipment.dm
index 7fb33da74ffad..e20f6c54a9104 100644
--- a/code/modules/fishing/fishing_equipment.dm
+++ b/code/modules/fishing/fishing_equipment.dm
@@ -16,8 +16,6 @@
var/list/fishing_line_traits
/// Color of the fishing line
var/line_color = COLOR_GRAY
- ///The description given to the autowiki
- var/wiki_desc = "A generic fishing line. Without one, the casting range of the rod will be significantly hampered."
/obj/item/fishing_line/reinforced
name = "reinforced fishing line reel"
@@ -25,7 +23,6 @@
icon_state = "reel_green"
fishing_line_traits = FISHING_LINE_REINFORCED
line_color = "#2b9c2b"
- wiki_desc = "Allows you to fish in lava and plasma rivers and lakes."
/obj/item/fishing_line/cloaked
name = "cloaked fishing line reel"
@@ -33,7 +30,6 @@
icon_state = "reel_white"
fishing_line_traits = FISHING_LINE_CLOAKED
line_color = "#82cfdd"
- wiki_desc = "Fishing anxious and wary fish will be easier with this equipped."
/obj/item/fishing_line/bouncy
name = "flexible fishing line reel"
@@ -41,7 +37,6 @@
icon_state = "reel_red"
fishing_line_traits = FISHING_LINE_BOUNCY
line_color = "#99313f"
- wiki_desc = "It reduces the progression loss during the fishing minigame."
/obj/item/fishing_line/sinew
name = "fishing sinew"
@@ -49,7 +44,6 @@
icon_state = "reel_sinew"
fishing_line_traits = FISHING_LINE_REINFORCED|FISHING_LINE_STIFF
line_color = "#d1cca3"
- wiki_desc = "Crafted from sinew. It allows you to fish in lava and plasma like the reinforced line, but it'll make the minigame harder."
/**
* A special line reel that let you skip the biting phase of the minigame, netting you a completion bonus,
@@ -62,9 +56,6 @@
icon_state = "reel_auto"
fishing_line_traits = FISHING_LINE_AUTOREEL
line_color = "#F88414"
- wiki_desc = "Automatically starts the minigame once the fish bites the bait. It also spin fishing lures for you without needing an input. \
- It can also be used to snag in objects from a distance more rapidly.
\ - It requires the Advanced Fishing Technology Node to be researched to be printed." /obj/item/fishing_line/auto_reel/Initialize(mapload) . = ..() @@ -127,8 +118,7 @@ var/rod_overlay_icon_state = "hook_overlay" /// What subtype of `/obj/item/chasm_detritus` do we fish out of chasms? Defaults to `/obj/item/chasm_detritus`. var/chasm_detritus_type = /datum/chasm_detritus - ///The description given to the autowiki - var/wiki_desc = "A generic fishing hook. You won't be able to fish without one." + /** * Simple getter proc for hooks to implement special hook bonuses for @@ -172,7 +162,6 @@ icon_state = "treasure" rod_overlay_icon_state = "hook_treasure_overlay" chasm_detritus_type = /datum/chasm_detritus/restricted/objects - wiki_desc = "It vastly improves the chances of catching things other than fish." /obj/item/fishing_hook/magnet/Initialize(mapload) . = ..() @@ -201,14 +190,13 @@ icon_state = "gold_shiny" fishing_hook_traits = FISHING_HOOK_SHINY rod_overlay_icon_state = "hook_shiny_overlay" - wiki_desc = "It's used to attract shiny-loving fish and make them easier to catch." /obj/item/fishing_hook/weighted name = "weighted hook" icon_state = "weighted" fishing_hook_traits = FISHING_HOOK_WEIGHTED rod_overlay_icon_state = "hook_weighted_overlay" - wiki_desc = "It reduces the bounce that happens when you hit the boundaries of the minigame bar." + /obj/item/fishing_hook/rescue name = "rescue hook" @@ -216,8 +204,6 @@ icon_state = "rescue" rod_overlay_icon_state = "hook_rescue_overlay" chasm_detritus_type = /datum/chasm_detritus/restricted/bodies - wiki_desc = "A hook used to rescue bodies whom have fallen into chasms. \ - You won't catch fish with it, nor it can't be used for fishing outside of chasms, though it can still be used to reel in people and items from unreachable locations.." /obj/item/fishing_hook/rescue/can_be_hooked(atom/target) return ..() || isliving(target) @@ -247,7 +233,6 @@ name = "bone hook" desc = "A simple hook carved from sharpened bone" icon_state = "hook_bone" - wiki_desc = "A generic fishing hook carved out of sharpened bone. Bone fishing rods come pre-equipped with it." /obj/item/fishing_hook/stabilized name = "gyro-stabilized hook" @@ -255,8 +240,6 @@ icon_state = "gyro" fishing_hook_traits = FISHING_HOOK_BIDIRECTIONAL rod_overlay_icon_state = "hook_gyro_overlay" - wiki_desc = "It allows you to move both up (left-click) and down (right-click) during the minigame while negating gravity.
\ - It requires the Advanced Fishing Technology Node to be researched to be printed." /obj/item/fishing_hook/stabilized/examine(mob/user) . = ..() @@ -269,9 +252,6 @@ w_class = WEIGHT_CLASS_NORMAL fishing_hook_traits = FISHING_HOOK_NO_ESCAPE|FISHING_HOOK_NO_ESCAPE|FISHING_HOOK_KILL rod_overlay_icon_state = "hook_jaws_overlay" - wiki_desc = "A beartrap-looking hook that makes losing the fishing minigame impossible (Unless you drop the rod or get stunned). However it'll hurt the fish and eventually kill it. \ - Funnily enough, you can snag in people with it too. It won't hurt them like a actual beartrap, but it'll still slow them down.
\ - It has to be bought from the black market uplink." /obj/item/fishing_hook/jaws/can_be_hooked(atom/target) return ..() || isliving(target) @@ -287,9 +267,6 @@ icon_state = "fishing" inhand_icon_state = "artistic_toolbox" material_flags = NONE - custom_price = PAYCHECK_CREW * 3 - ///How much holding this affects fishing difficulty - var/fishing_modifier = -2 /obj/item/storage/toolbox/fishing/Initialize(mapload) . = ..() @@ -298,7 +275,6 @@ /obj/item/fishing_rod, )) atom_storage.exception_hold = exception_cache - AddComponent(/datum/component/adjust_fishing_difficulty, -2, ITEM_SLOT_HANDS) /obj/item/storage/toolbox/fishing/PopulateContents() new /obj/item/bait_can/worm(src) @@ -329,7 +305,6 @@ desc = "Contains EVERYTHING (almost) you need for your fishing trip." icon_state = "gold" inhand_icon_state = "toolbox_gold" - fishing_modifier = -7 /obj/item/storage/toolbox/fishing/master/PopulateContents() new /obj/item/fishing_rod/telescopic/master(src) @@ -344,7 +319,6 @@ /obj/item/storage/box/fishing_hooks name = "fishing hook set" illustration = "fish" - custom_price = PAYCHECK_CREW * 2 /obj/item/storage/box/fishing_hooks/PopulateContents() new /obj/item/fishing_hook/magnet(src) @@ -361,7 +335,6 @@ /obj/item/storage/box/fishing_lines name = "fishing line set" illustration = "fish" - custom_price = PAYCHECK_CREW * 2 /obj/item/storage/box/fishing_lines/PopulateContents() new /obj/item/fishing_line/bouncy(src) @@ -410,7 +383,6 @@ icon_state = "plasticbox" foldable_result = null illustration = "fish" - custom_price = PAYCHECK_CREW * 9 /obj/item/storage/box/fishing_lures/PopulateContents() new /obj/item/paper/lures_instructions(src) diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm index 073158b8fdc0f..fc30d2aa6970f 100644 --- a/code/modules/fishing/fishing_minigame.dm +++ b/code/modules/fishing/fishing_minigame.dm @@ -32,8 +32,6 @@ ///The standard pixel height of the fish (minus a pixel on each direction for the sake of a better looking sprite) #define MINIGAME_FISH_HEIGHT 4 -GLOBAL_LIST_EMPTY(fishing_challenges_by_user) - /datum/fishing_challenge /// When the ui minigame phase started var/start_time @@ -63,8 +61,6 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) var/obj/item/fishing_rod/used_rod /// float visual var/obj/effect/fishing_float/float - ///The physical fishing spot our float is hovering - var/atom/location /// Background icon state from fishing_hud.dmi var/background = "background_default" /// Fish icon state from fishing_hud.dmi @@ -111,21 +107,31 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) ///The background as shown in the minigame, and the holder of the other visual overlays var/atom/movable/screen/fishing_hud/fishing_hud -/datum/fishing_challenge/New(datum/component/fishing_spot/comp, obj/item/fishing_rod/rod, mob/user) +/datum/fishing_challenge/New(datum/component/fishing_spot/comp, reward_path, obj/item/fishing_rod/rod, mob/user) src.user = user - used_rod = rod - location = comp.parent - float = new(get_turf(location), location) + src.reward_path = reward_path + src.used_rod = rod + var/atom/spot = comp.parent + float = new(get_turf(spot), spot) float.spin_frequency = rod.spin_frequency - RegisterSignal(location, COMSIG_QDELETING, PROC_REF(on_spot_gone)) - RegisterSignal(comp, COMSIG_QDELETING, PROC_REF(on_spot_gone)) + RegisterSignal(spot, COMSIG_QDELETING, PROC_REF(on_spot_gone)) RegisterSignal(comp.fish_source, COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE, PROC_REF(interrupt_challenge)) - comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, TYPE_PROC_REF(/datum/fish_source, roll_reward_minigame)) - comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, TYPE_PROC_REF(/datum/fish_source, calculate_difficulty_minigame)) - comp.fish_source.RegisterSignal(user, COMSIG_MOB_COMPLETE_FISHING, TYPE_PROC_REF(/datum/fish_source, on_challenge_completed)) + comp.fish_source.RegisterSignal(src, COMSIG_FISHING_CHALLENGE_COMPLETED, TYPE_PROC_REF(/datum/fish_source, on_challenge_completed)) background = comp.fish_source.background - SEND_SIGNAL(user, COMSIG_MOB_BEGIN_FISHING, src) - GLOB.fishing_challenges_by_user[user] = src + + /// Fish minigame properties + if(ispath(reward_path,/obj/item/fish)) + var/obj/item/fish/fish = reward_path + var/movement_path = initial(fish.fish_movement_type) + mover = new movement_path(src) + // Apply fish trait modifiers + var/list/fish_list_properties = SSfishing.fish_properties + var/list/fish_traits = fish_list_properties[fish][NAMEOF(fish, fish_traits)] + for(var/fish_trait in fish_traits) + var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait] + trait.minigame_mod(rod, user, src) + else + mover = new /datum/fish_movement(src) /// Enable special parameters if(rod.line) @@ -151,8 +157,24 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) completion_loss += user.mind?.get_skill_modifier(/datum/skill/fishing, SKILL_VALUE_MODIFIER)/5 + if(special_effects & FISHING_MINIGAME_RULE_KILL && ispath(reward_path,/obj/item/fish)) + RegisterSignal(comp.fish_source, COMSIG_FISH_SOURCE_REWARD_DISPENSED, PROC_REF(hurt_fish)) + + difficulty += comp.fish_source.calculate_difficulty(reward_path, rod, user, src) + difficulty = clamp(round(difficulty), FISHING_EASY_DIFFICULTY - 5, 100) + + if(difficulty > FISHING_EASY_DIFFICULTY) + completion -= MAX_FISH_COMPLETION_MALUS * (difficulty * 0.01) + + if(HAS_MIND_TRAIT(user, TRAIT_REVEAL_FISH)) + fish_icon = GLOB.specific_fish_icons[reward_path] || FISH_ICON_DEF + + mover.adjust_to_difficulty() + + bait_height -= round(difficulty * BAIT_HEIGHT_DIFFICULTY_MALUS) + bait_pixel_height = round(MINIGAME_BAIT_HEIGHT * (bait_height/initial(bait_height)), 1) + /datum/fishing_challenge/Destroy(force) - GLOB.fishing_challenges_by_user -= user if(!completed) complete(win = FALSE) if(fishing_line) @@ -163,12 +185,12 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) SStgui.close_uis(src) user = null used_rod = null - location = null QDEL_NULL(mover) return ..() /datum/fishing_challenge/proc/send_alert(message) - location?.balloon_alert(user, message) + var/turf/float_turf = get_turf(float) + float_turf?.balloon_alert(user, message) /datum/fishing_challenge/proc/on_spot_gone(datum/source) SIGNAL_HANDLER @@ -197,11 +219,12 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) active_effects = bitfield_to_list(special_effects & FISHING_MINIGAME_ACTIVE_EFFECTS) // If fishing line breaks los / rod gets dropped / deleted RegisterSignal(used_rod, COMSIG_ITEM_ATTACK_SELF, PROC_REF(on_attack_self)) + ADD_TRAIT(user, TRAIT_GONE_FISHING, WEAKREF(src)) user.add_mood_event("fishing", /datum/mood_event/fishing) RegisterSignal(user, COMSIG_MOB_CLICKON, PROC_REF(handle_click)) start_baiting_phase() to_chat(user, span_notice("You start fishing...")) - playsound(location, 'sound/effects/splash.ogg', 100) + playsound(float, 'sound/effects/splash.ogg', 100) ///Set the timers for lure that need to be spun at intervals. /datum/fishing_challenge/proc/set_lure_timers() @@ -243,7 +266,7 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) /datum/fishing_challenge/proc/on_float_or_user_move(datum/source) SIGNAL_HANDLER - if(!user.CanReach(location)) + if(!user.CanReach(float)) user.balloon_alert(user, "too far!") interrupt() @@ -312,6 +335,8 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) if(phase == MINIGAME_PHASE) remove_minigame_hud() if(!QDELETED(user)) + UnregisterSignal(user, SIGNAL_REMOVETRAIT(TRAIT_GONE_FISHING)) + user.remove_traits(list(TRAIT_GONE_FISHING, TRAIT_ACTIVELY_FISHING), WEAKREF(src)) if(start_time) var/seconds_spent = (world.time - start_time) * 0.1 if(!(special_effects & FISHING_MINIGAME_RULE_NO_EXP)) @@ -320,13 +345,12 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) user.client?.give_award(/datum/award/achievement/skill/legendary_fisher, user) if(win) if(reward_path != FISHING_DUD) - playsound(location, 'sound/effects/bigsplash.ogg', 100) - SEND_SIGNAL(user, COMSIG_MOB_COMPLETE_FISHING, src, win) + playsound(float, 'sound/effects/bigsplash.ogg', 100) + SEND_SIGNAL(src, COMSIG_FISHING_CHALLENGE_COMPLETED, user, win) if(!QDELETED(src)) qdel(src) /datum/fishing_challenge/proc/start_baiting_phase(penalty = FALSE) - reward_path = null //In case we missed the biting phase, set the path back to null var/wait_time last_baiting_click = world.time if(penalty) @@ -346,13 +370,8 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) /datum/fishing_challenge/proc/start_biting_phase() phase = BITING_PHASE - - var/list/rewards = list() - SEND_SIGNAL(src, COMSIG_FISHING_CHALLENGE_ROLL_REWARD, used_rod, user, location, rewards) - if(length(rewards)) - reward_path = pick(rewards) - playsound(location, 'sound/effects/fish_splash.ogg', 100) - + // Trashing animation + playsound(float, 'sound/effects/fish_splash.ogg', 100) if(HAS_MIND_TRAIT(user, TRAIT_REVEAL_FISH)) switch(fish_icon) if(FISH_ICON_DEF) @@ -421,61 +440,7 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) var/damage = CEILING((world.time - start_time)/10 * FISH_DAMAGE_PER_SECOND, 1) reward.adjust_health(reward.health - damage) -/datum/fishing_challenge/proc/get_difficulty() - var/list/difficulty_holder = list(0) - SEND_SIGNAL(src, COMSIG_FISHING_CHALLENGE_GET_DIFFICULTY, reward_path, used_rod, user, difficulty_holder) - difficulty = difficulty_holder[1] - //If you manage to be so well-equipped and skilled to completely crush the difficulty, just skip to the reward. - if(difficulty <= 0) - complete(TRUE) - return FALSE - difficulty = clamp(round(difficulty), FISHING_MINIMUM_DIFFICULTY, 100) - return TRUE - -/datum/fishing_challenge/proc/update_difficulty() - if(phase != MINIGAME_PHASE) - return - var/old_difficulty = difficulty - //early return if the difficulty is the same or we crush the minigame all the way to 0 difficulty - if(!get_difficulty() || difficulty == old_difficulty) - return - bait_height = initial(bait_height) - experience_multiplier -= difficulty * FISHING_SKILL_DIFFIULTY_EXP_MULT - mover.reset_difficulty_values() - adjust_to_difficulty() - -/datum/fishing_challenge/proc/adjust_to_difficulty() - mover.adjust_to_difficulty() - bait_height -= round(difficulty * BAIT_HEIGHT_DIFFICULTY_MALUS) - bait_pixel_height = round(MINIGAME_BAIT_HEIGHT * (bait_height/initial(bait_height)), 1) - experience_multiplier += difficulty * FISHING_SKILL_DIFFIULTY_EXP_MULT - fishing_hud.hud_bait.adjust_to_difficulty(src) - -///Get the difficulty and other variables, than start the minigame /datum/fishing_challenge/proc/start_minigame_phase(auto_reel = FALSE) - SEND_SIGNAL(user, COMSIG_MOB_BEGIN_FISHING_MINIGAME, src) - if(!get_difficulty()) //we totalized 0 or less difficulty, instant win. - return - - if(difficulty > FISHING_DEFAULT_DIFFICULTY) - completion -= MAX_FISH_COMPLETION_MALUS * (difficulty * 0.01) - - if(HAS_MIND_TRAIT(user, TRAIT_REVEAL_FISH)) - fish_icon = GLOB.specific_fish_icons[reward_path] || FISH_ICON_DEF - - /// Fish minigame properties - if(ispath(reward_path,/obj/item/fish)) - var/obj/item/fish/fish = reward_path - var/movement_path = initial(fish.fish_movement_type) - mover = new movement_path(src) - // Apply fish trait modifiers - var/list/fish_traits = SSfishing.fish_properties[fish][FISH_PROPERTIES_TRAITS] - for(var/fish_trait in fish_traits) - var/datum/fish_trait/trait = GLOB.fish_traits[fish_trait] - trait.minigame_mod(used_rod, user, src) - else - mover = new /datum/fish_movement(src) - if(auto_reel) completion *= 1.3 else @@ -493,14 +458,11 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) fish_position = rand(0, (FISHING_MINIGAME_AREA - fish_height) * 0.8) var/diff_dist = 100 + difficulty bait_position = clamp(round(fish_position + rand(-diff_dist, diff_dist) - bait_height * 0.5), 0, FISHING_MINIGAME_AREA - bait_height) - if(!prepare_minigame_hud()) get_stack_trace("couldn't prepare minigame hud for a fishing challenge.") //just to be sure. This shouldn't happen. qdel(src) return - - adjust_to_difficulty() - + ADD_TRAIT(user, TRAIT_ACTIVELY_FISHING, WEAKREF(src)) phase = MINIGAME_PHASE deltimer(next_phase_timer) if((FISHING_MINIGAME_RULE_KILL in special_effects) && ispath(reward_path,/obj/item/fish)) @@ -508,6 +470,7 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) var/wait_time = (initial(fish.health) / FISH_DAMAGE_PER_SECOND) SECONDS addtimer(CALLBACK(src, PROC_REF(win_anyway)), wait_time, TIMER_DELETE_ME) start_time = world.time + experience_multiplier += difficulty * FISHING_SKILL_DIFFIULTY_EXP_MULT ///Throws a stack with prefixed text. /datum/fishing_challenge/proc/get_stack_trace(init_text) @@ -733,24 +696,18 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) icon = 'icons/hud/fishing_hud.dmi' icon_state = "bait" vis_flags = VIS_INHERIT_ID - ///The stored value we used to squish the bar based on the difficulty - var/current_vertical_transform /atom/movable/screen/hud_bait/Initialize(mapload, datum/hud/hud_owner, datum/fishing_challenge/challenge) . = ..() if(!challenge || challenge.bait_pixel_height == MINIGAME_BAIT_HEIGHT) return - adjust_to_difficulty(challenge) - -/atom/movable/screen/hud_bait/proc/adjust_to_difficulty(datum/fishing_challenge/challenge) - if(current_vertical_transform) - transform = transform.Scale(1, 1/current_vertical_transform) - pixel_z = 0 - var/list/icon_dimensions = get_icon_dimensions(icon) - var/icon_height = icon_dimensions["height"] - current_vertical_transform = challenge.bait_pixel_height/MINIGAME_BAIT_HEIGHT - transform = transform.Scale(1, current_vertical_transform) - pixel_z = -icon_height * (1 - current_vertical_transform) * 0.5 + var/static/icon_height + if(!icon_height) + var/list/icon_dimensions = get_icon_dimensions(icon) + icon_height = icon_dimensions["height"] + var/height_percent_diff = challenge.bait_pixel_height/MINIGAME_BAIT_HEIGHT + transform = transform.Scale(1, height_percent_diff) + pixel_z = -icon_height * (1 - height_percent_diff) * 0.5 /atom/movable/screen/hud_fish icon = 'icons/hud/fishing_hud.dmi' @@ -788,12 +745,8 @@ GLOBAL_LIST_EMPTY(fishing_challenges_by_user) /obj/effect/fishing_float/Initialize(mapload, atom/spot) . = ..() - if(!spot) - return if(ismovable(spot)) // we want the float and therefore the fishing line to stay connected with the fishing spot. RegisterSignal(spot, COMSIG_MOVABLE_MOVED, PROC_REF(follow_movable)) - SET_BASE_PIXEL(spot.pixel_x, spot.pixel_y) - SET_BASE_VISUAL_PIXEL(spot.pixel_w, spot.pixel_z) /obj/effect/fishing_float/proc/follow_movable(atom/movable/source) SIGNAL_HANDLER diff --git a/code/modules/fishing/fishing_portal_machine.dm b/code/modules/fishing/fishing_portal_machine.dm index f322bf92c78e3..8b157cbebfff3 100644 --- a/code/modules/fishing/fishing_portal_machine.dm +++ b/code/modules/fishing/fishing_portal_machine.dm @@ -11,46 +11,6 @@ ///The current fishing spot loaded in var/datum/component/fishing_spot/active - ///A list of fishing spot it's linked to with a multitool. - var/list/linked_fishing_spots - ///The maximum number of fishing spots it can be linked to - var/max_fishing_spots = 1 - ///If true, the fishing portal can stay connected to a linked fishing spot even on different z-levels - var/long_range_link = FALSE - -/obj/machinery/fishing_portal_generator/Initialize(mapload) - . = ..() - var/static/list/tool_screentips = list( - TOOL_MULTITOOL = list( - SCREENTIP_CONTEXT_LMB = "Link", - SCREENTIP_CONTEXT_RMB = "Unlink fishing spots" - ), - ) - AddElement(/datum/element/contextual_screentip_tools, tool_screentips) - ADD_TRAIT(src, TRAIT_UNLINKABLE_FISHING_SPOT, INNATE_TRAIT) - -/obj/machinery/fishing_portal_generator/Destroy() - deactivate() - linked_fishing_spots = null - return ..() - -///Higher tier parts let you link to more fishing spots at once and eventually let you connect through different zlevels. -/obj/machinery/fishing_portal_generator/RefreshParts() - . = ..() - max_fishing_spots = 0 - long_range_link = FALSE - for(var/datum/stock_part/matter_bin/matter_bin in component_parts) - max_fishing_spots += matter_bin.tier * 0.5 - max_fishing_spots = ROUND_UP(max_fishing_spots) - for(var/datum/stock_part/capacitor/capacitor in component_parts) - if(capacitor.tier >= 3) - long_range_link = TRUE - if(!long_range_link) - check_fishing_spot_z() - if(length(linked_fishing_spots) > max_fishing_spots) - if(active) - deactivate() - linked_fishing_spots.len = max_fishing_spots /obj/machinery/fishing_portal_generator/on_set_panel_open() update_appearance() @@ -61,94 +21,9 @@ default_unfasten_wrench(user, tool) return ITEM_INTERACT_SUCCESS -/obj/machinery/fishing_portal_generator/multitool_act(mob/living/user, obj/item/multitool/tool) - if(machine_stat & NOPOWER) - balloon_alert(user, "no power!") - return ITEM_INTERACT_BLOCKING - var/unlink = tool.buffer == src - tool.set_buffer(unlink ? null : src) - balloon_alert(user, "fish-porter [unlink ? "un" : ""]linked") - if(!unlink) - tool.item_flags |= ITEM_HAS_CONTEXTUAL_SCREENTIPS - RegisterSignal(tool, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, PROC_REF(multitool_context)) - RegisterSignal(tool, COMSIG_MULTITOOL_REMOVE_BUFFER, PROC_REF(multitool_unbuffered)) - return ITEM_INTERACT_SUCCESS - -/obj/machinery/fishing_portal_generator/multitool_act_secondary(mob/living/user, obj/item/tool) - if(machine_stat & NOPOWER) - balloon_alert(user, "no power!") - return ITEM_INTERACT_BLOCKING - if(!length(linked_fishing_spots)) - balloon_alert(user, "nothing to unlink!") - return ITEM_INTERACT_BLOCKING - var/list/fishing_list = list() - var/id = 1 - for(var/atom/spot as anything in linked_fishing_spots) - var/choice_name = "[spot.name] ([id])" - fishing_list[choice_name] = spot - id++ - var/list/choices = list() - for(var/radial_name in fishing_list) - var/datum/fish_source/source = fishing_list[radial_name] - var/mutable_appearance/appearance = mutable_appearance('icons/hud/radial_fishing.dmi', source.radial_state) - appearance.add_overlay('icons/hud/radial_fishing.dmi', "minus_sign") - choices[radial_name] = appearance - - var/choice = show_radial_menu(user, src, choices, radius = 38, custom_check = CALLBACK(src, TYPE_PROC_REF(/atom, can_interact), user), tooltips = TRUE) - if(!choice) - return - var/atom/spot = fishing_list[choice] - if(QDELETED(spot) || !(spot in linked_fishing_spots) || !can_interact(user)) - return - unlink_fishing_spot(spot) - balloon_alert(user, "fishing spot unlinked") - -/obj/machinery/fishing_portal_generator/proc/multitool_context(obj/item/source, list/context, atom/target, mob/living/user) - SIGNAL_HANDLER - if(HAS_TRAIT(target, TRAIT_FISHING_SPOT) && !HAS_TRAIT(target, TRAIT_UNLINKABLE_FISHING_SPOT)) - context[SCREENTIP_CONTEXT_LMB] = "Link to fish-porter" - return CONTEXTUAL_SCREENTIP_SET - return NONE - -/obj/machinery/fishing_portal_generator/proc/multitool_unbuffered(datum/source, datum/buffer) - SIGNAL_HANDLER - UnregisterSignal(source, list(COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, COMSIG_MULTITOOL_REMOVE_BUFFER)) - -///Called when using a multitool on any other fishing source. -/obj/machinery/fishing_portal_generator/proc/link_fishing_spot(datum/fish_source/source, atom/spot, mob/living/user) - if(istype(spot, /obj/machinery/fishing_portal_generator)) //Don't link it to itself or other fishing portals. - return - if(length(linked_fishing_spots) >= max_fishing_spots) - spot.balloon_alert(user, "cannot link more!") - return ITEM_INTERACT_BLOCKING - for(var/other_spot in linked_fishing_spots) - var/datum/fish_source/stored = linked_fishing_spots[other_spot] - if(stored == source) - spot.balloon_alert(user, "already linked!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 15, FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) - return ITEM_INTERACT_BLOCKING - if(HAS_TRAIT(spot, TRAIT_UNLINKABLE_FISHING_SPOT)) - spot.balloon_alert(user, "unlinkable fishing spot!") - playsound(src, 'sound/machines/buzz-sigh.ogg', 15, FALSE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) - return ITEM_INTERACT_BLOCKING - LAZYSET(linked_fishing_spots, spot, source) - RegisterSignal(spot, SIGNAL_REMOVETRAIT(TRAIT_FISHING_SPOT), PROC_REF(unlink_fishing_spot)) - spot.balloon_alert(user, "fishing spot linked") - playsound(spot, 'sound/machines/ping.ogg', 15, TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) - return ITEM_INTERACT_SUCCESS - -/obj/machinery/fishing_portal_generator/proc/unlink_fishing_spot(atom/spot) - SIGNAL_HANDLER - var/datum/fish_source/source = linked_fishing_spots[spot] - if(active?.fish_source == source) - deactivate() - LAZYREMOVE(linked_fishing_spots, spot) - UnregisterSignal(spot, SIGNAL_REMOVETRAIT(TRAIT_FISHING_SPOT)) - /obj/machinery/fishing_portal_generator/examine(mob/user) . = ..() - . += span_notice("You can unlock further portal settings by completing fish scanning experiments, \ - or by connecting it to other fishing spots with a multitool.") + . += span_notice("You can unlock further portal settings by completing fish scanning experiments.") /obj/machinery/fishing_portal_generator/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) @@ -172,78 +47,19 @@ if(!active) return . += "portal_on" - var/datum/fish_source/portal = active.fish_source + var/datum/fish_source/portal/portal = active.fish_source . += portal.overlay_state . += emissive_appearance(icon, "portal_emissive", src) -/obj/machinery/fishing_portal_generator/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) - . = ..() - check_fishing_spot_z() - -/obj/machinery/fishing_portal_generator/proc/check_fishing_spot_z() - if(!active || long_range_link || istype(active.fish_source, /datum/fish_source/portal)) - return - var/turf/new_turf = get_turf(src) - if(!new_turf) - deactivate() - return - for(var/atom/spot as anything in linked_fishing_spots) - if(linked_fishing_spots[spot] != active.fish_source) - continue - var/turf/turf = get_turf(spot) - if(turf.z != new_turf.z && !(is_station_level(turf.z) && is_station_level(new_turf.z))) - deactivate() - -/obj/machinery/fishing_portal_generator/proc/activate(datum/fish_source/selected_source, mob/user) - if(QDELETED(selected_source)) - return - if(machine_stat & NOPOWER) - balloon_alert(user, "no power!") - return ITEM_INTERACT_BLOCKING - if(!istype(selected_source, /datum/fish_source/portal)) //likely from a linked fishing spot - var/abort = TRUE - for(var/atom/spot as anything in linked_fishing_spots) - if(linked_fishing_spots[spot] != selected_source) - continue - if(long_range_link) - abort = FALSE - var/turf/spot_turf = get_turf(spot) - var/turf/turf = get_turf(src) - if(turf.z == spot_turf.z || (is_station_level(turf.z) && is_station_level(spot_turf.z))) - abort = FALSE - if(!abort) - RegisterSignal(spot, COMSIG_MOVABLE_Z_CHANGED, PROC_REF(on_fishing_spot_z_level_changed)) - break - if(abort) - balloon_alert(user, "cannot reach linked!") - return - +/obj/machinery/fishing_portal_generator/proc/activate(datum/fish_source/selected_source) active = AddComponent(/datum/component/fishing_spot, selected_source) - ADD_TRAIT(src, TRAIT_CATCH_AND_RELEASE, INNATE_TRAIT) - if(use_power != NO_POWER_USE) - use_power = ACTIVE_POWER_USE + use_power = ACTIVE_POWER_USE update_icon() /obj/machinery/fishing_portal_generator/proc/deactivate() - if(!active) - return - if(!istype(active.fish_source, /datum/fish_source/portal)) - for(var/atom/spot as anything in linked_fishing_spots) - if(linked_fishing_spots[spot] == active.fish_source) - UnregisterSignal(spot, COMSIG_MOVABLE_Z_CHANGED) QDEL_NULL(active) - - REMOVE_TRAIT(src, TRAIT_CATCH_AND_RELEASE, INNATE_TRAIT) - if(!QDELETED(src)) - if(use_power != NO_POWER_USE) - use_power = IDLE_POWER_USE - update_icon() - -/obj/machinery/fishing_portal_generator/proc/on_fishing_spot_z_level_changed(atom/spot, turf/old_turf, turf/new_turf, same_z_layer) - SIGNAL_HANDLER - var/turf/turf = get_turf(src) - if(turf.z != new_turf.z && !(is_station_level(turf.z) && is_station_level(new_turf.z))) - deactivate() + use_power = IDLE_POWER_USE + update_icon() /obj/machinery/fishing_portal_generator/on_set_is_operational(old_value) if(old_value) @@ -272,24 +88,18 @@ var/datum/fish_source/portal/reward = GLOB.preset_fish_sources[experiment.fish_source_reward] available_fish_sources[reward.radial_name] = reward - var/id = 1 - for(var/atom/spot as anything in linked_fishing_spots) - var/choice_name = "[spot.name] ([id])" - available_fish_sources[choice_name] = linked_fishing_spots[spot] - id++ - if(length(available_fish_sources) == 1) - activate(default, user) + activate(default) return var/list/choices = list() for(var/radial_name in available_fish_sources) - var/datum/fish_source/source = available_fish_sources[radial_name] + var/datum/fish_source/portal/source = available_fish_sources[radial_name] choices[radial_name] = image(icon = 'icons/hud/radial_fishing.dmi', icon_state = source.radial_state) var/choice = show_radial_menu(user, src, choices, radius = 38, custom_check = CALLBACK(src, TYPE_PROC_REF(/atom, can_interact), user), tooltips = TRUE) if(!choice || !can_interact(user)) return - activate(available_fish_sources[choice], user) + activate(available_fish_sources[choice]) /obj/machinery/fishing_portal_generator/emagged obj_flags = parent_type::obj_flags | EMAGGED diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index f18637e3b35ca..291994731c9e3 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -17,12 +17,8 @@ var/cast_range = 3 /// Fishing minigame difficulty modifier (additive) var/difficulty_modifier = 0 - /// Explaination of rod functionality shown in the ui and the autowiki + /// Explaination of rod functionality shown in the ui var/ui_description = "A classic fishing rod, with no special qualities." - /// More explaination shown in the wiki after ui_description - var/wiki_description = "" - /// Is this fishing rod shown in the wiki - var/show_in_wiki = TRUE var/obj/item/bait var/obj/item/fishing_line/line = /obj/item/fishing_line @@ -79,7 +75,7 @@ /obj/item/fishing_rod/add_item_context(obj/item/source, list/context, atom/target, mob/living/user) . = ..() - var/gone_fishing = GLOB.fishing_challenges_by_user[user] + var/gone_fishing = HAS_TRAIT(user, TRAIT_GONE_FISHING) if(currently_hooked || gone_fishing) context[SCREENTIP_CONTEXT_LMB] = (gone_fishing && spin_frequency) ? "Spin" : "Reel in" if(!gone_fishing) @@ -220,7 +216,7 @@ return BEAM_CANCEL_DRAW /obj/item/fishing_rod/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) - //this prevent trying to use telekinesis to fish (which would be broken anyway), also whacking people with a rod. + //this prevent trying to use telekinesis to fish (which would be broken anyway) if(!user.contains(src) || (user.combat_mode && !isturf(interacting_with)) ||HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) return ..() return ranged_interact_with_atom(interacting_with, user, modifiers) @@ -299,11 +295,10 @@ /obj/item/fishing_rod/proc/get_fishing_overlays() . = list() var/line_color = line?.line_color || default_line_color - /// Line part by the rod. - if(reel_overlay) - var/mutable_appearance/reel_appearance = mutable_appearance(icon, reel_overlay) - reel_appearance.color = line_color - . += reel_appearance + /// Line part by the rod, always visible + var/mutable_appearance/reel_appearance = mutable_appearance(icon, reel_overlay) + reel_appearance.color = line_color + . += reel_appearance // Line & hook is also visible when only bait is equipped but it uses default appearances then if(hook || bait) @@ -411,7 +406,7 @@ /// Ideally this will be replaced with generic slotted storage datum + display /obj/item/fishing_rod/proc/use_slot(slot, mob/user, obj/item/new_item) - if(fishing_line || GLOB.fishing_challenges_by_user[user]) + if(fishing_line || HAS_TRAIT(user, TRAIT_GONE_FISHING)) return var/obj/item/current_item switch(slot) @@ -485,12 +480,10 @@ /obj/item/fishing_rod/unslotted hook = null line = null - show_in_wiki = FALSE /obj/item/fishing_rod/bone name = "bone fishing rod" desc = "A humble rod, made with whatever happened to be on hand." - ui_description = "A fishing rod crafted with leather, sinew and bones." icon_state = "fishing_rod_bone" reel_overlay = "reel_bone" default_line_color = "red" @@ -502,11 +495,9 @@ icon_state = "fishing_rod_telescopic" desc = "A lightweight, ergonomic, easy to store telescopic fishing rod. " inhand_icon_state = null - custom_price = PAYCHECK_CREW * 9 force = 0 w_class = WEIGHT_CLASS_NORMAL ui_description = "A collapsible fishing rod that can fit within a backpack." - wiki_description = "It has to be bought from Cargo." reel_overlay = "reel_telescopic" ///The force of the item when extended. var/active_force = 8 @@ -545,7 +536,7 @@ if(HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE)) return //the fishing minigame uses the attack_self signal to let the user end it early without having to drop the rod. - if(GLOB.fishing_challenges_by_user[user]) + if(HAS_TRAIT(user, TRAIT_GONE_FISHING)) return COMPONENT_BLOCK_TRANSFORM ///Gives feedback to the user, makes it show up inhand, toggles whether it can be used for fishing. @@ -556,20 +547,15 @@ if(user) balloon_alert(user, active ? "extended" : "collapsed") playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) - update_appearance() + update_appearance(UPDATE_OVERLAYS) QDEL_NULL(fishing_line) return COMPONENT_NO_DEFAULT_MESSAGE -/obj/item/fishing_rod/telescopic/update_icon_state() - . = ..() - icon_state = "[initial(icon_state)][!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE) ? "_collapsed" : ""]" - /obj/item/fishing_rod/telescopic/master name = "master fishing rod" desc = "The mythical rod of a lost fisher king. Said to be imbued with un-paralleled fishing power. There's writing on the back of the pole. \"中国航天制造\"" difficulty_modifier = -10 - ui_description = "A mythical telescopic fishing rod that makes fishing quite easier." - wiki_description = null + ui_description = "This rod makes fishing easy even for an absolute beginner." icon_state = "fishing_rod_master" reel_overlay = "reel_master" active_force = 13 //It's that sturdy @@ -580,8 +566,7 @@ /obj/item/fishing_rod/tech name = "advanced fishing rod" desc = "An embedded universal constructor along with micro-fusion generator makes this marvel of technology never run out of bait. Interstellar treaties prevent using it outside of recreational fishing. And you can fish with this. " - ui_description = "A rod with an infinite supply of synthetic bait. Doubles as an Experi-Scanner for fish." - wiki_description = "It requires the Advanced Fishing Technology Node to be researched to be printed." + ui_description = "This rod has an infinite supply of synth-bait. Also doubles as an Experi-Scanner for fish." icon_state = "fishing_rod_science" reel_overlay = "reel_science" bait = /obj/item/food/bait/doughball/synthetic/unconsumable @@ -705,7 +690,4 @@ override_origin_pixel_x = lefthand ? lefthand_n_px : righthand_n_px override_origin_pixel_y = lefthand ? lefthand_n_py : righthand_n_py - override_origin_pixel_x += origin.pixel_x - override_origin_pixel_y += origin.pixel_y - #undef FISHING_ROD_REEL_CAST_RANGE diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index 38455068ce22e..a63c087fcc652 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -72,46 +72,28 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) var/list/currently_on_regen /// Text shown as baloon alert when you roll a dud in the table var/duds = list("it was nothing", "the hook is empty") - /// Baseline difficulty for fishing in this spot. THIS IS ADDED TO THE DEFAULT DIFFICULTY OF THE MINIGAME (15) + /// Baseline difficulty for fishing in this spot var/fishing_difficulty = FISHING_DEFAULT_DIFFICULTY /// How the spot type is described in fish catalog section about fish sources, will be skipped if null var/catalog_description /// Background image name from /datum/asset/simple/fishing_minigame var/background = "background_default" - /// It true, repeated and large explosions won't be as efficient. This is usually for fish sources that cover multiple turfs (i.e. rivers, oceans). + /// It true, repeated and large explosions won't be as efficient. This is usually meant for global fish sources. var/explosive_malus = FALSE /// If explosive_malus is true, this will be used to keep track of the turfs where an explosion happened for when we'll spawn the loot. var/list/exploded_turfs - ///When linked to a fishing portal, this will be the icon_state of this option in the radial menu - var/radial_state = "default" - ///When selected by the fishing portal, this will be the icon_state of the overlay shown on the machine. - var/overlay_state = "portal_aquarium" /// Mindless mobs that can fish will never pull up items on this list var/static/list/profound_fisher_blacklist = typecacheof(list( /mob/living/basic/mining/lobstrosity, /obj/structure/closet/crate/necropolis/tendril, )) - - ///List of multipliers used to make fishes more common compared to everything else depending on bait quality, indexed from best to worst. - var/static/weight_result_multiplier = list( - TRAIT_GREAT_QUALITY_BAIT = 9, - TRAIT_GOOD_QUALITY_BAIT = 3.5, - TRAIT_BASIC_QUALITY_BAIT = 2, - ) - ///List of exponents used to level out the table weight differences between fish depending on bait quality. - var/static/weight_leveling_exponents = list( - TRAIT_GREAT_QUALITY_BAIT = 0.7, - TRAIT_GOOD_QUALITY_BAIT = 0.55, - TRAIT_BASIC_QUALITY_BAIT = 0.4, - ) - /datum/fish_source/New() if(!PERFORM_ALL_TESTS(focus_only/fish_sources_tables)) return for(var/path in fish_counts) if(!(path in fish_table)) - stack_trace("path [path] found in the 'fish_counts' list but not in the 'fish_table'") + stack_trace("path [path] found in the 'fish_counts' list but not in the fish_table one of [type]") /datum/fish_source/Destroy() exploded_turfs = null @@ -132,19 +114,6 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) /datum/fish_source/proc/on_start_fishing(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) return -///Comsig proc from the fishing minigame for 'calculate_difficulty' -/datum/fish_source/proc/calculate_difficulty_minigame(datum/fishing_challenge/challenge, reward_path, obj/item/fishing_rod/rod, mob/fisherman, list/difficulty_holder) - SIGNAL_HANDLER - SHOULD_NOT_OVERRIDE(TRUE) - difficulty_holder[1] += calculate_difficulty(reward_path, rod, fisherman) - - // Difficulty modifier added by the fisher's skill level - if(!(challenge.special_effects & FISHING_MINIGAME_RULE_NO_EXP)) - difficulty_holder[1] += fisherman.mind?.get_skill_modifier(/datum/skill/fishing, SKILL_VALUE_MODIFIER) - - if(challenge.special_effects & FISHING_MINIGAME_RULE_KILL) - challenge.RegisterSignal(src, COMSIG_FISH_SOURCE_REWARD_DISPENSED, TYPE_PROC_REF(/datum/fishing_challenge, hurt_fish)) - /** * Calculates the difficulty of the minigame: * @@ -204,13 +173,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) . += additive_mod . *= multiplicative_mod -///Comsig proc from the fishing minigame for 'roll_reward' -/datum/fish_source/proc/roll_reward_minigame(datum/source, obj/item/fishing_rod/rod, mob/fisherman, atom/location, list/rewards) - SIGNAL_HANDLER - SHOULD_NOT_OVERRIDE(TRUE) - rewards += roll_reward(rod, fisherman, location) - -/// Returns a typepath or a special value which we use for spawning dispensing a reward later. +/// In case you want more complex rules for specific spots /datum/fish_source/proc/roll_reward(obj/item/fishing_rod/rod, mob/fisherman, atom/location) return pick_weight(get_modified_fish_table(rod, fisherman, location)) || FISHING_DUD @@ -226,21 +189,21 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) SEND_SIGNAL(src, COMSIG_FISHING_SOURCE_INTERRUPT_CHALLENGE, reason) /** - * Proc called when the COMSIG_MOB_COMPLETE_FISHING signal is sent. + * Proc called when the COMSIG_FISHING_CHALLENGE_COMPLETED signal is sent. * Check if we've succeeded. If so, write into memory and dispense the reward. */ -/datum/fish_source/proc/on_challenge_completed(mob/user, datum/fishing_challenge/challenge, success) +/datum/fish_source/proc/on_challenge_completed(datum/fishing_challenge/source, mob/user, success) SIGNAL_HANDLER SHOULD_CALL_PARENT(TRUE) - UnregisterSignal(user, COMSIG_MOB_COMPLETE_FISHING) if(!success) return - var/turf/fishing_spot = get_turf(challenge.float) - var/atom/movable/reward = dispense_reward(challenge.reward_path, user, fishing_spot) - if(reward) - user.add_mob_memory(/datum/memory/caught_fish, protagonist = user, deuteragonist = reward.name) - SEND_SIGNAL(challenge.used_rod, COMSIG_FISHING_ROD_CAUGHT_FISH, reward, user) - challenge.used_rod.consume_bait(reward) + var/obj/item/fish/caught = source.reward_path + user.add_mob_memory(/datum/memory/caught_fish, protagonist = user, deuteragonist = initial(caught.name)) + var/turf/fishing_spot = get_turf(source.float) + var/atom/movable/reward = dispense_reward(source.reward_path, user, fishing_spot) + if(source.used_rod) + SEND_SIGNAL(source.used_rod, COMSIG_FISHING_ROD_CAUGHT_FISH, reward, user) + source.used_rod.consume_bait(reward) /// Gives out the reward if possible /datum/fish_source/proc/dispense_reward(reward_path, mob/fisherman, turf/fishing_spot) @@ -263,11 +226,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) /datum/fish_source/proc/simple_dispense_reward(reward_path, atom/spawn_location, turf/fishing_spot) if(isnull(reward_path)) return null - var/area/area = get_area(fishing_spot) - if(!(area.area_flags & UNLIMITED_FISHING) && !isnull(fish_counts[reward_path])) // This is limited count result - //Somehow, we're trying to spawn an expended reward. - if(fish_counts[reward_path] <= 0) - return null + if(reward_path in fish_counts) // This is limited count result fish_counts[reward_path] -= 1 var/regen_time = fish_count_regen?[reward_path] if(regen_time) @@ -279,16 +238,13 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) SEND_SIGNAL(src, COMSIG_FISH_SOURCE_REWARD_DISPENSED, reward) return reward -/datum/fish_source/proc/regen_count(reward_path) - if(!LAZYACCESS(currently_on_regen, reward_path)) - return +/datum/fish_source/proc/regen_count(reward_path, regen_time) fish_counts[reward_path] += 1 currently_on_regen[reward_path] -= 1 - if(currently_on_regen[reward_path] <= 0) + if(!currently_on_regen[reward_path]) LAZYREMOVE(currently_on_regen, reward_path) - return - var/regen_time = fish_count_regen[reward_path] - addtimer(CALLBACK(src, PROC_REF(regen_count), reward_path), regen_time) + else + addtimer(CALLBACK(src, PROC_REF(regen_count), reward_path), regen_time) /// Spawns a reward from a atom path right where the fisherman is. Part of the dispense_reward() logic. /datum/fish_source/proc/spawn_reward(reward_path, atom/spawn_location, turf/fishing_spot) @@ -308,28 +264,31 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) /datum/fish_source/proc/get_fish_table() var/list/table = fish_table.Copy() for(var/result in table) - if(!isnull(fish_counts[result]) && fish_counts[result] <= 0) + if(fish_counts[result] == 0) table -= result return table /// Builds a fish weights table modified by bait/rod/user properties /datum/fish_source/proc/get_modified_fish_table(obj/item/fishing_rod/rod, mob/fisherman, atom/location) var/obj/item/bait = rod.bait - ///An exponent used to level out the table weight differences between fish depending on bait quality. + ///An exponent used to level out the difference in probabilities between fishes/mobs on the table depending on bait quality. var/leveling_exponent = 0 ///Multiplier used to make fishes more common compared to everything else. var/result_multiplier = 1 - var/list/final_table = get_fish_table() + var/list/final_table = fish_table.Copy() if(bait) - for(var/trait in weight_result_multiplier) - if(HAS_TRAIT(bait, trait)) - result_multiplier = weight_result_multiplier[trait] - leveling_exponent = weight_leveling_exponents[trait] - break - + if(HAS_TRAIT(bait, TRAIT_GREAT_QUALITY_BAIT)) + result_multiplier = 9 + leveling_exponent = 0.5 + else if(HAS_TRAIT(bait, TRAIT_GOOD_QUALITY_BAIT)) + result_multiplier = 3.5 + leveling_exponent = 0.25 + else if(HAS_TRAIT(bait, TRAIT_BASIC_QUALITY_BAIT)) + result_multiplier = 2 + leveling_exponent = 0.1 if(HAS_TRAIT(rod, TRAIT_ROD_REMOVE_FISHING_DUD)) final_table -= FISHING_DUD @@ -349,7 +308,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) if(mult > 1 && HAS_TRAIT(bait, TRAIT_BAIT_ALLOW_FISHING_DUD)) final_table -= FISHING_DUD else - final_table[result] = round(final_table[result] * FISH_WEIGHT_MULT_WITHOUT_BAIT, 1) //Fishing without bait is not going to be easy + final_table[result] = round(final_table[result] * 0.15, 1) //Fishing without bait is not going to be easy // Apply fish trait modifiers final_table[result] = get_fish_trait_catch_mods(final_table[result], result, rod, fisherman, location) @@ -357,29 +316,25 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) if(final_table[result] <= 0) final_table -= result - + ///here we even out the chances of fishie based on bait quality: better baits lead rarer fishes being more common. if(leveling_exponent) - level_out_fish(final_table, leveling_exponent) + var/highest_fish_weight + var/list/collected_fish_weights = list() + for(var/fishable in final_table) + if(ispath(fishable, /obj/item/fish)) + var/fish_weight = fish_table[fishable] + collected_fish_weights[fishable] = fish_weight + if(fish_weight > highest_fish_weight) + highest_fish_weight = fish_weight + + for(var/fish in collected_fish_weights) + var/difference = highest_fish_weight - collected_fish_weights[fish] + if(!difference) + continue + final_table[fish] += round(difference**leveling_exponent, 1) return final_table -///A proc that levels out the weights of various fish, leading to rarer fishes being more common. -/datum/fish_source/proc/level_out_fish(list/table, exponent) - var/highest_fish_weight - var/list/collected_fish_weights = list() - for(var/fishable in table) - if(ispath(fishable, /obj/item/fish)) - var/fish_weight = table[fishable] - collected_fish_weights[fishable] = fish_weight - if(fish_weight > highest_fish_weight) - highest_fish_weight = fish_weight - - for(var/fish in collected_fish_weights) - var/difference = highest_fish_weight - collected_fish_weights[fish] - if(!difference) - continue - table[fish] += round(difference**exponent, 1) - /datum/fish_source/proc/get_fish_trait_catch_mods(weight, obj/item/fish/fish, obj/item/fishing_rod/rod, mob/user, atom/location) if(!ispath(fish, /obj/item/fish)) return weight @@ -398,7 +353,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) if(!ispath(reward, /obj/item/fish)) continue var/obj/item/fish/prototype = reward - if(initial(prototype.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG) + if(initial(prototype.show_in_catalog)) return TRUE return FALSE @@ -414,7 +369,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) if(!ispath(reward, /obj/item/fish)) continue var/obj/item/fish/prototype = reward - if(initial(prototype.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG) + if(initial(prototype.show_in_catalog)) var/init_name = initial(prototype.name) if(rod) var/init_weight = fish_table[reward] @@ -425,7 +380,7 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) if(weight/init_weight >= 3.5) init_name = "init_name" else if(weight < init_weight) - init_name = span_small(init_name) + init_name = span_small(reward) known_fishes += init_name if(!length(known_fishes)) @@ -470,119 +425,3 @@ GLOBAL_LIST_INIT(specific_fish_icons, generate_specific_fish_icons()) reward.pixel_y = rand(-9, 9) if(severity >= EXPLODE_DEVASTATE) reward.ex_act(EXPLODE_LIGHT) - -///Called when releasing a fish in a fishing spot with the TRAIT_CATCH_AND_RELEASE trait. -/datum/fish_source/proc/readd_fish(obj/item/fish/fish, mob/living/releaser) - var/is_morbid = HAS_MIND_TRAIT(releaser, TRAIT_MORBID) - var/is_naive = HAS_MIND_TRAIT(releaser, TRAIT_NAIVE) - if(fish.status == FISH_DEAD) //ded fish won't repopulate the sea. - if(is_naive || is_morbid) - releaser.add_mood_event("fish_released", /datum/mood_event/fish_released, is_morbid && !is_naive, fish) - return - if(((fish.type in fish_table) != is_morbid) || is_naive) - releaser.add_mood_event("fish_released", /datum/mood_event/fish_released, is_morbid && !is_naive, fish) - if(isnull(fish_counts[fish.type])) //This fish can be caught indefinitely so it won't matter. - return - //If this fish population isn't recovering from recent losses, we just increase it. - if(!LAZYACCESS(currently_on_regen, fish.type)) - fish_counts[fish.type] += 1 - else - regen_count(fish.type) - -/** - * Called by /datum/autowiki/fish_sources unless the catalog entry for this fish source is null. - * It should Return a list of entries with keys named "name", "icon", "weight" and "notes" - * detailing the contents of this fish source. - */ -/datum/fish_source/proc/generate_wiki_contents(datum/autowiki/fish_sources/wiki) - var/list/data = list() - var/list/only_fish = list() - - var/total_weight = 0 - var/total_weight_without_bait = 0 - var/total_weight_no_fish = 0 - - var/list/tables_by_quality = list() - var/list/total_weight_by_quality = list() - var/list/total_weight_by_quality_no_fish = list() - - for(var/obj/item/fish/fish as anything in fish_table) - var/weight = fish_table[fish] - if(fish != FISHING_DUD) - total_weight += weight - if(!ispath(fish, /obj/item/fish)) - total_weight_without_bait += weight - total_weight_no_fish += weight - continue - if(initial(fish.fish_flags) & FISH_FLAG_SHOW_IN_CATALOG) - only_fish += fish - total_weight_without_bait += round(fish_table[fish] * FISH_WEIGHT_MULT_WITHOUT_BAIT, 1) - - for(var/trait in weight_result_multiplier) - var/list/table_copy = fish_table.Copy() - table_copy -= FISHING_DUD - var/exponent = weight_leveling_exponents[trait] - var/multiplier = weight_result_multiplier[trait] - for(var/fish as anything in table_copy) - if(!ispath(fish, /obj/item/fish)) - continue - table_copy[fish] = round(table_copy[fish] * multiplier, 1) - - level_out_fish(table_copy, exponent) - tables_by_quality[trait] = table_copy - - var/tot_weight = 0 - var/tot_weight_no_fish = 0 - for(var/result in table_copy) - var/weight = table_copy[result] - tot_weight += weight - if(!ispath(result, /obj/item/fish)) - tot_weight_no_fish += weight - total_weight_by_quality[trait] = tot_weight - total_weight_by_quality_no_fish[trait] = tot_weight_no_fish - - //show the improved weights in ascending orders for fish. - tables_by_quality = reverseList(tables_by_quality) - - if(FISHING_DUD in fish_table) - data += LIST_VALUE_WRAP_LISTS(list( - FISH_SOURCE_AUTOWIKI_NAME = FISH_SOURCE_AUTOWIKI_DUD, - FISH_SOURCE_AUTOWIKI_ICON = "", - FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(fish_table[FISHING_DUD]/total_weight_without_bait), - FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX = "WITHOUT A BAIT", - FISH_SOURCE_AUTOWIKI_NOTES = "Unless you have a magnet or rescue hook or you know what you're doing, always use a bait", - )) - - for(var/obj/item/fish/fish as anything in only_fish) - var/weight = fish_table[fish] - var/deets = "Can be caught indefinitely" - if(fish in fish_counts) - deets = "It's quite rare and can only be caught up to [fish_counts[fish]] times" - if(fish in fish_count_regen) - deets += " every [DisplayTimeText(fish::breeding_timeout)]" - var/list/weight_deets = list() - for(var/trait in tables_by_quality) - weight_deets += "[round(PERCENT(tables_by_quality[trait][fish]/total_weight_by_quality[trait]), 0.1)]%" - var/weight_suffix = "([english_list(weight_deets, and_text = ", ")])" - data += LIST_VALUE_WRAP_LISTS(list( - FISH_SOURCE_AUTOWIKI_NAME = wiki.escape_value(full_capitalize(initial(fish.name))), - FISH_SOURCE_AUTOWIKI_ICON = FISH_AUTOWIKI_FILENAME(fish), - FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(weight/total_weight), - FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX = weight_suffix, - FISH_SOURCE_AUTOWIKI_NOTES = deets, - )) - - if(total_weight_no_fish) //There are things beside fish that we can catch. - var/list/weight_deets = list() - for(var/trait in tables_by_quality) - weight_deets += "[round(PERCENT(total_weight_by_quality_no_fish[trait]/total_weight_by_quality[trait]), 0.1)]%" - var/weight_suffix = "([english_list(weight_deets, and_text = ", ")])" - data += LIST_VALUE_WRAP_LISTS(list( - FISH_SOURCE_AUTOWIKI_NAME = FISH_SOURCE_AUTOWIKI_OTHER, - FISH_SOURCE_AUTOWIKI_ICON = FISH_SOURCE_AUTOWIKI_QUESTIONMARK, - FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(total_weight_no_fish/total_weight), - FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX = weight_suffix, - FISH_SOURCE_AUTOWIKI_NOTES = "Who knows what it may be. Try and find out", - )) - - return data diff --git a/code/modules/fishing/sources/source_types.dm b/code/modules/fishing/sources/source_types.dm index ef2cdf87989a1..6aea78b994368 100644 --- a/code/modules/fishing/sources/source_types.dm +++ b/code/modules/fishing/sources/source_types.dm @@ -68,7 +68,6 @@ /obj/item/fish/pike = 4 MINUTES, ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 5 - explosive_malus = TRUE /datum/fish_source/sand catalog_description = "Sand" @@ -80,7 +79,6 @@ /obj/item/coin/gold = 3, ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 20 - explosive_malus = TRUE /datum/fish_source/cursed_spring catalog_description = null //it's a secret (sorta, I know you're reading this) @@ -94,7 +92,6 @@ /obj/item/fishing_rod/telescopic/master = 1, ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 25 - explosive_malus = TRUE /datum/fish_source/portal fish_table = list( @@ -106,9 +103,12 @@ /obj/item/fish/goldfish/three_eyes = 3, ) catalog_description = "Aquarium dimension (Fishing portal generator)" - radial_state = "fish_tank" ///The name of this option shown in the radial menu on the fishing portal generator var/radial_name = "Aquarium" + ///The icon state shown for this option in the radial menu + var/radial_state = "fish_tank" + ///The icon state of the overlay shown on the machine when active. + var/overlay_state = "portal_aquarium" /datum/fish_source/portal/beach fish_table = list( @@ -255,7 +255,7 @@ fish_table[reward_path] = rand(1, 4) ///Difficulty has to be calculated before the rest, because of how it influences jump chances -/datum/fish_source/portal/random/calculate_difficulty(datum/fishing_challenge/challenge, result, obj/item/fishing_rod/rod, mob/fisherman) +/datum/fish_source/portal/random/calculate_difficulty(result, obj/item/fishing_rod/rod, mob/fisherman, datum/fishing_challenge/challenge) . = ..() . += rand(-10, 15) @@ -370,7 +370,7 @@ fish_table = list( FISHING_DUD = 20, /obj/item/fish/ratfish = 10, - /obj/item/fish/slimefish = 4, + /obj/item/fish/slimefish = 4 ) fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 10 @@ -401,21 +401,6 @@ ) fishing_difficulty = FISHING_EASY_DIFFICULTY -/datum/fish_source/holographic/on_fishing_spot_init(datum/component/fishing_spot/spot) - ADD_TRAIT(spot.parent, TRAIT_UNLINKABLE_FISHING_SPOT, REF(src)) //You would have to be inside the holodeck anyway... - -/datum/fish_source/holographic/on_fishing_spot_del(datum/component/fishing_spot/spot) - REMOVE_TRAIT(spot.parent, TRAIT_UNLINKABLE_FISHING_SPOT, REF(src)) - -/datum/fish_source/holographic/generate_wiki_contents(datum/autowiki/fish_sources/wiki) - var/obj/item/fish/prototype = /obj/item/fish/holo/checkered - return LIST_VALUE_WRAP_LISTS(list( - FISH_SOURCE_AUTOWIKI_NAME = "Holographic Fish", - FISH_SOURCE_AUTOWIKI_ICON = FISH_AUTOWIKI_FILENAME(prototype), - FISH_SOURCE_AUTOWIKI_WEIGHT = 100, - FISH_SOURCE_AUTOWIKI_NOTES = "Holographic fish disappears outside the Holodeck", - )) - /datum/fish_source/holographic/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) . = ..() if(!istype(get_area(fisherman), /area/station/holodeck)) @@ -460,7 +445,7 @@ fish_table = list( FISHING_DUD = 25, /obj/item/food/grown/grass = 25, - FISHING_RANDOM_SEED = 16, + RANDOM_SEED = 16, /obj/item/seeds/grass = 6, /obj/item/seeds/random = 1, /mob/living/basic/frog = 1, @@ -469,55 +454,13 @@ fish_counts = list( /obj/item/food/grown/grass = 10, /obj/item/seeds/grass = 4, - FISHING_RANDOM_SEED = 4, + RANDOM_SEED = 4, /obj/item/seeds/random = 1, /mob/living/basic/frog = 1, /mob/living/basic/axolotl = 1, ) fishing_difficulty = FISHING_EASY_DIFFICULTY - 5 -/datum/fish_source/hydro_tray/generate_wiki_contents(datum/autowiki/fish_sources/wiki) - var/list/data = list() - var/total_weight = 0 - var/critter_weight = 0 - var/seed_weight = 0 - var/other_weight = 0 - var/dud_weight = fish_table[FISHING_DUD] - for(var/content in fish_table) - var/weight = fish_table[content] - total_weight += weight - if(ispath(content, /mob/living)) - critter_weight += weight - else if(ispath(content, /obj/item/food/grown) || ispath(content, /obj/item/seeds) || content == FISHING_RANDOM_SEED) - seed_weight += weight - else if(content != FISHING_DUD) - other_weight += weight - - data += LIST_VALUE_WRAP_LISTS(list( - FISH_SOURCE_AUTOWIKI_NAME = FISH_SOURCE_AUTOWIKI_DUD, - FISH_SOURCE_AUTOWIKI_DUD = "", - FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(dud_weight/total_weight), - FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX = "WITHOUT A BAIT", - FISH_SOURCE_AUTOWIKI_NOTES = "", - )) - - data += LIST_VALUE_WRAP_LISTS(list( - FISH_SOURCE_AUTOWIKI_NAME = "Critter", - FISH_SOURCE_AUTOWIKI_DUD = "", - FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(critter_weight/total_weight), - FISH_SOURCE_AUTOWIKI_NOTES = "A small creature, usually a frog or an axolotl", - )) - - if(other_weight) - data += LIST_VALUE_WRAP_LISTS(list( - FISH_SOURCE_AUTOWIKI_NAME = "Other Stuff", - FISH_SOURCE_AUTOWIKI_DUD = "", - FISH_SOURCE_AUTOWIKI_WEIGHT = PERCENT(other_weight/total_weight), - FISH_SOURCE_AUTOWIKI_NOTES = "Other stuff, who knows...", - )) - - return data - /datum/fish_source/hydro_tray/reason_we_cant_fish(obj/item/fishing_rod/rod, mob/fisherman, atom/parent) if(!istype(parent, /obj/machinery/hydroponics/constructable)) return ..() diff --git a/code/modules/food_and_drinks/machinery/deep_fryer.dm b/code/modules/food_and_drinks/machinery/deep_fryer.dm index 92270d92fd0e2..322c0a42c5557 100644 --- a/code/modules/food_and_drinks/machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/machinery/deep_fryer.dm @@ -154,7 +154,7 @@ GLOBAL_LIST_INIT(oilfry_blacklisted_items, typecacheof(list( reagents.trans_to(frying, oil_use * seconds_per_tick, multiplier = fry_speed * 3) //Fried foods gain more of the reagent thanks to space magic grease_level += prob(grease_increase_chance) * grease_Increase_amount - cook_time += fry_speed * seconds_per_tick SECONDS + cook_time += fry_speed * seconds_per_tick if(cook_time >= DEEPFRYER_COOKTIME && !frying_fried) frying_fried = TRUE //frying... frying... fried playsound(src.loc, 'sound/machines/ding.ogg', 50, TRUE) diff --git a/code/modules/food_and_drinks/machinery/smartfridge.dm b/code/modules/food_and_drinks/machinery/smartfridge.dm index ed0e5d448cd25..b80a37a0ce6a7 100644 --- a/code/modules/food_and_drinks/machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/machinery/smartfridge.dm @@ -203,7 +203,7 @@ /// Returns details related to the fridge structure /obj/machinery/smartfridge/proc/structure_examine() - . = list() + . = "" if(welded_down) . += span_info("It's moorings are firmly [EXAMINE_HINT("welded")] to the floor.") diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index 282910007dd81..c04edf6fee79d 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -1,6 +1,5 @@ /datum/crafting_recipe/food mass_craftable = TRUE - crafting_flags = parent_type::crafting_flags | CRAFT_TRANSFERS_REAGENTS | CRAFT_CLEARS_REAGENTS /datum/crafting_recipe/food/on_craft_completion(mob/user, atom/result) SHOULD_CALL_PARENT(TRUE) diff --git a/code/modules/food_and_drinks/recipes/soup_mixtures.dm b/code/modules/food_and_drinks/recipes/soup_mixtures.dm index c69de62fbfc97..446782d00cbf4 100644 --- a/code/modules/food_and_drinks/recipes/soup_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/soup_mixtures.dm @@ -245,7 +245,7 @@ // Everything else will just get fried if(isnull(ingredient.reagents) && !is_type_in_list(ingredient, required_ingredients)) - ingredient.AddElement(/datum/element/fried_item, 30 SECONDS) + ingredient.AddElement(/datum/element/fried_item, 30) continue // Things that had reagents or ingredients in the soup will get deleted diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index 8798f7cd8806c..c965526bcb1c6 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -13,14 +13,6 @@ result = /obj/item/food/donut/plain category = CAT_PASTRY -// It is so stupid that we have to do this but because food crafting clears all reagents that got added during init, -// here we are adding it again (but only for crafting, maploaded and spawned donuts work fine). -// Until the issues with crafted items' reagents are resolved this will have to do -/datum/crafting_recipe/food/donut/on_craft_completion(mob/user, atom/result) - . = ..() - var/obj/item/food/donut/donut_result = result - if(donut_result.is_decorated) - donut_result.reagents.add_reagent(/datum/reagent/consumable/sprinkles, 1) /datum/crafting_recipe/food/donut/chaos name = "Chaos donut" diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 39b5615c385d7..6fe7fdbc57d94 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -694,10 +694,6 @@ begin_day = 14 begin_month = DECEMBER -/datum/holiday/monkey/celebrate() - . = ..() - SSstation.setup_trait(/datum/station_trait/job/pun_pun) - /datum/holiday/doomsday name = "Mayan Doomsday Anniversary" begin_day = 21 diff --git a/code/modules/hydroponics/grown/onion.dm b/code/modules/hydroponics/grown/onion.dm index 4287bf9eb3ec9..0d33c3e1f395d 100644 --- a/code/modules/hydroponics/grown/onion.dm +++ b/code/modules/hydroponics/grown/onion.dm @@ -48,7 +48,7 @@ /obj/item/food/grown/onion/red/make_processable() AddElement(/datum/element/processable, TOOL_KNIFE, /obj/item/food/onion_slice/red, 2, 15, screentip_verb = "Cut") -/obj/item/food/grown/onion/UsedforProcessing(mob/living/user, obj/item/I, list/chosen_option, list/created_atoms) +/obj/item/food/grown/onion/UsedforProcessing(mob/living/user, obj/item/I, list/chosen_option) var/datum/effect_system/fluid_spread/smoke/chem/cry_about_it = new //Since the onion is destroyed when it's sliced, var/splat_location = get_turf(src) //we need to set up the smoke beforehand cry_about_it.attach(splat_location) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index cf1875c8efed5..9b2cbdfae40fb 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -603,7 +603,7 @@ SEND_SIGNAL(target, COMSIG_ATOM_RESTYLE, user, target, user.zone_selected, EXTERNAL_RESTYLE_PLANT, 6 SECONDS) /obj/item/geneshears - name = "botanogenetic plant shears" + name = "Botanogenetic Plant Shears" desc = "A high tech, high fidelity pair of plant shears, capable of cutting genetic traits out of a plant." icon = 'icons/obj/service/hydroponics/equipment.dmi' icon_state = "genesheers" diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 8981b90d1cab0..041ff97b73cee 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -139,8 +139,8 @@ context[SCREENTIP_CONTEXT_LMB] = "Lock mutation" return CONTEXTUAL_SCREENTIP_SET - // Edibles can be composted (most of the times). - if(IS_EDIBLE(held_item) && HAS_TRAIT(held_item, TRAIT_UNCOMPOSTABLE)) + // Edibles and pills can be composted. + if(IS_EDIBLE(held_item) || istype(held_item, /obj/item/reagent_containers/pill)) context[SCREENTIP_CONTEXT_LMB] = "Compost" return CONTEXTUAL_SCREENTIP_SET @@ -855,10 +855,7 @@ var/visi_msg = "" var/transfer_amount - if(IS_EDIBLE(reagent_source)) - if(HAS_TRAIT(reagent_source, TRAIT_UNCOMPOSTABLE)) - to_chat(user, "[reagent_source] cannot be composted in its current state") - return + if(IS_EDIBLE(reagent_source) || istype(reagent_source, /obj/item/reagent_containers/pill)) visi_msg="[user] composts [reagent_source], spreading it through [target]" transfer_amount = reagent_source.reagents.total_volume SEND_SIGNAL(reagent_source, COMSIG_ITEM_ON_COMPOSTED, user) @@ -1090,14 +1087,10 @@ /obj/machinery/hydroponics/click_ctrl(mob/user) if(!anchored) return NONE - - update_use_power(ACTIVE_POWER_USE) - if(!powered()) to_chat(user, span_warning("[name] has no power.")) update_use_power(NO_POWER_USE) return CLICK_ACTION_BLOCKING - set_self_sustaining(!self_sustaining) to_chat(user, span_notice("You [self_sustaining ? "activate" : "deactivated"] [src]'s autogrow function[self_sustaining ? ", maintaining the tray's health while using high amounts of power" : ""].")) return CLICK_ACTION_SUCCESS diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 86847f011738b..18197c006b51e 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -470,7 +470,7 @@ return switch(choice) if("Plant Name") - var/newplantname = reject_bad_text(tgui_input_text(user, "Write a new plant name", "Plant Name", plantname, max_length = MAX_NAME_LEN)) + var/newplantname = reject_bad_text(tgui_input_text(user, "Write a new plant name", "Plant Name", plantname, 20)) if(isnull(newplantname)) return if(!user.can_perform_action(src)) @@ -478,7 +478,7 @@ name = "[LOWER_TEXT(newplantname)]" plantname = newplantname if("Seed Description") - var/newdesc = tgui_input_text(user, "Write a new seed description", "Seed Description", desc, max_length = MAX_DESC_LEN) + var/newdesc = tgui_input_text(user, "Write a new seed description", "Seed Description", desc, 180) if(isnull(newdesc)) return if(!user.can_perform_action(src)) @@ -487,7 +487,7 @@ if("Product Description") if(product && !productdesc) productdesc = initial(product.desc) - var/newproductdesc = tgui_input_text(user, "Write a new product description", "Product Description", productdesc, max_length = MAX_DESC_LEN) + var/newproductdesc = tgui_input_text(user, "Write a new product description", "Product Description", productdesc, 180) if(isnull(newproductdesc)) return if(!user.can_perform_action(src)) diff --git a/code/modules/instruments/songs/editor.dm b/code/modules/instruments/songs/editor.dm index 4029e5c395419..651b3d6f3b647 100644 --- a/code/modules/instruments/songs/editor.dm +++ b/code/modules/instruments/songs/editor.dm @@ -111,7 +111,7 @@ tempo = sanitize_tempo(5) // default 120 BPM return TRUE if("add_new_line") - var/newline = tgui_input_text(user, "Enter your line", parent.name, max_length = MUSIC_MAXLINECHARS) + var/newline = tgui_input_text(user, "Enter your line", parent.name) if(!newline || !in_range(parent, user)) return if(lines.len > MUSIC_MAXLINES) @@ -129,7 +129,7 @@ var/line_to_edit = params["line_editing"] if(line_to_edit > lines.len || line_to_edit < 1) return FALSE - var/new_line_text = tgui_input_text(user, "Enter your line ", parent.name, lines[line_to_edit], max_length = MUSIC_MAXLINECHARS) + var/new_line_text = tgui_input_text(user, "Enter your line ", parent.name, lines[line_to_edit], MUSIC_MAXLINECHARS) if(isnull(new_line_text) || !in_range(parent, user)) return FALSE lines[line_to_edit] = new_line_text diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index 41ff0c058cebc..81d42b051dff8 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -220,20 +220,10 @@ dna.species.pre_equip_species_outfit(equipping, src, visual_only) equip_outfit_and_loadout(equipping.get_outfit(consistent), player_client?.prefs, visual_only) -/datum/job/proc/announce_head(mob/living/carbon/human/human, channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. - if(!human) - return - var/obj/machinery/announcement_system/system - var/list/available_machines = list() - for(var/obj/machinery/announcement_system/announce as anything in GLOB.announcement_systems) - if(announce.newhead_toggle) - available_machines += announce - break - if(!length(available_machines)) - return - system = pick(available_machines) - //timer because these should come after the captain announcement - SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(system, TYPE_PROC_REF(/obj/machinery/announcement_system, announce), AUTO_ANNOUNCE_NEWHEAD, human.real_name, human.job, channels), 1)) +/datum/job/proc/announce_head(mob/living/carbon/human/H, channels) //tells the given channel that the given mob is the new department head. See communications.dm for valid channels. + if(H && GLOB.announcement_systems.len) + //timer because these should come after the captain announcement + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_addtimer), CALLBACK(pick(GLOB.announcement_systems), TYPE_PROC_REF(/obj/machinery/announcement_system, announce), "NEWHEAD", H.real_name, H.job, channels), 1)) //If the configuration option is set to require players to be logged as old enough to play certain jobs, then this proc checks that they are, otherwise it just returns 1 /datum/job/proc/player_old_enough(client/player) @@ -391,10 +381,10 @@ if(visualsOnly) return - var/datum/job/equipped_job = SSjob.get_job_type(jobtype) + var/datum/job/equipped_job = SSjob.GetJobType(jobtype) if(!equipped_job) - equipped_job = SSjob.get_job(equipped.job) + equipped_job = SSjob.GetJob(equipped.job) var/obj/item/card/id/card = equipped.wear_id diff --git a/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm b/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm index 0968569ae33af..637177adffbcd 100644 --- a/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm +++ b/code/modules/jobs/job_types/chaplain/chaplain_costumes.dm @@ -222,7 +222,7 @@ inhand_icon_state = null /obj/item/clothing/suit/chaplainsuit/armor/crusader - name = "crusader's armour" + name = "Crusader's Armour" desc = "Armour that's comprised of metal and cloth." icon_state = "crusader" w_class = WEIGHT_CLASS_BULKY diff --git a/code/modules/jobs/job_types/cook.dm b/code/modules/jobs/job_types/cook.dm index dc36796c4d1cf..26a43fa775192 100644 --- a/code/modules/jobs/job_types/cook.dm +++ b/code/modules/jobs/job_types/cook.dm @@ -82,7 +82,7 @@ /datum/outfit/job/cook/pre_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() - var/datum/job/cook/other_chefs = SSjob.get_job_type(jobtype) + var/datum/job/cook/other_chefs = SSjob.GetJobType(jobtype) if(other_chefs) // If there's other Chefs, you're a Cook if(other_chefs.cooks > 0)//Cooks id_trim = /datum/id_trim/job/cook diff --git a/code/modules/jobs/job_types/detective.dm b/code/modules/jobs/job_types/detective.dm index 258b2b322f1b9..00bd8790d9bd0 100644 --- a/code/modules/jobs/job_types/detective.dm +++ b/code/modules/jobs/job_types/detective.dm @@ -29,14 +29,13 @@ mail_goodies = list( /obj/item/storage/fancy/cigarettes = 25, - /obj/item/ammo_box/c38 = 20, + /obj/item/ammo_box/c38 = 25, /obj/item/ammo_box/c38/dumdum = 5, /obj/item/ammo_box/c38/hotshot = 5, /obj/item/ammo_box/c38/iceblox = 5, /obj/item/ammo_box/c38/match = 5, /obj/item/ammo_box/c38/trac = 5, - /obj/item/card/id/advanced/plainclothes = 5, - /obj/item/storage/belt/holster/detective/full = 1, + /obj/item/storage/belt/holster/detective/full = 1 ) family_heirlooms = list(/obj/item/reagent_containers/cup/glass/bottle/whiskey) @@ -50,8 +49,6 @@ name = "Detective" jobtype = /datum/job/detective - id = /obj/item/card/id/advanced/plainclothes - id_trim = /datum/id_trim/job/detective uniform = /obj/item/clothing/under/rank/security/detective suit = /obj/item/clothing/suit/jacket/det_suit diff --git a/code/modules/jobs/job_types/station_trait/veteran_advisor.dm b/code/modules/jobs/job_types/station_trait/veteran_advisor.dm index f8a0f2f801d31..6fcb8d94707f5 100644 --- a/code/modules/jobs/job_types/station_trait/veteran_advisor.dm +++ b/code/modules/jobs/job_types/station_trait/veteran_advisor.dm @@ -37,19 +37,10 @@ allow_bureaucratic_error = FALSE job_flags = STATION_JOB_FLAGS | STATION_TRAIT_JOB_FLAGS -/datum/job/veteran_advisor/get_default_roundstart_spawn_point() - for(var/obj/effect/landmark/start/spawn_point as anything in GLOB.start_landmarks_list) - if(spawn_point.name != "Security Officer") - continue - . = spawn_point - if(spawn_point.used) //so we can revert to spawning them on top of eachother if something goes wrong - continue - spawn_point.used = TRUE - break - if(!.) // Try to fall back to "our" landmark - . = ..() - if(!.) - log_mapping("Job [title] ([type]) couldn't find a round start spawn point.") +/datum/job/veteran_advisor/get_roundstart_spawn_point() //Spawning at Brig where Officers spawn + if (length(GLOB.start_landmarks_list["Security Officer"])) + return pick(GLOB.start_landmarks_list["Security Officer"]) + return ..() /datum/job/veteran_advisor/after_spawn(mob/living/spawned, client/player_client) . = ..() diff --git a/code/modules/language/_language_holder.dm b/code/modules/language/_language_holder.dm index a368186a5137b..b6dea2d4e0e28 100644 --- a/code/modules/language/_language_holder.dm +++ b/code/modules/language/_language_holder.dm @@ -37,10 +37,10 @@ Key procs /datum/language_holder /// Lazyassoclist of all understood languages - var/list/understood_languages + var/list/understood_languages = list(/datum/language/common = list(LANGUAGE_ATOM)) /// Lazyassoclist of languages that can be spoken. /// Tongue organ may also set limits beyond this list. - var/list/spoken_languages + var/list/spoken_languages = list(/datum/language/common = list(LANGUAGE_ATOM)) /// Lazyassoclist of blocked languages. /// Used to prevent understanding and speaking certain languages, ie for certain mobs, mutations etc. var/list/blocked_languages @@ -503,21 +503,14 @@ GLOBAL_LIST_INIT(prototype_language_holders, init_language_holder_prototypes()) /datum/language/nekomimetic = list(LANGUAGE_ATOM), ) -// Given to atoms by default -/datum/language_holder/atom_basic - understood_languages = list(/datum/language/common = list(LANGUAGE_ATOM)) - spoken_languages = list(/datum/language/common = list(LANGUAGE_ATOM)) - -// Explicitly empty one for readability /datum/language_holder/empty understood_languages = null spoken_languages = null -// Has all the languages known (via "mind") /datum/language_holder/universal understood_languages = null spoken_languages = null /datum/language_holder/universal/New() . = ..() - grant_all_languages(source = LANGUAGE_MIND) + grant_all_languages() diff --git a/code/modules/library/bibles.dm b/code/modules/library/bibles.dm index 42194d932e865..4b9b4ae61d153 100644 --- a/code/modules/library/bibles.dm +++ b/code/modules/library/bibles.dm @@ -329,7 +329,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list( new /obj/item/reagent_containers/cup/glass/bottle/whiskey(src) /obj/item/book/bible/syndicate - name = "syndicate tome" + name = "Syndicate Tome" desc = "A very ominous tome resembling a bible." icon_state ="ebook" item_flags = NO_BLOOD_ON_ITEM diff --git a/code/modules/library/book.dm b/code/modules/library/book.dm index 7f5f010563a5a..5ae9afcdcbe49 100644 --- a/code/modules/library/book.dm +++ b/code/modules/library/book.dm @@ -133,7 +133,7 @@ name = newtitle book_data.set_title(html_decode(newtitle)) //Don't want to double encode here if("Contents") - var/content = tgui_input_text(user, "Write your book's contents (HTML NOT allowed)", "Book Contents", max_length = MAX_PAPER_LENGTH, multiline = TRUE) + var/content = tgui_input_text(user, "Write your book's contents (HTML NOT allowed)", "Book Contents", multiline = TRUE) if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return if(!content) @@ -141,7 +141,7 @@ return book_data.set_content(html_decode(content)) if("Author") - var/author = tgui_input_text(user, "Write the author's name", "Author Name", max_length = MAX_NAME_LEN) + var/author = tgui_input_text(user, "Write the author's name", "Author Name") if(!user.can_perform_action(src) || !user.can_write(attacking_item)) return if(!author) diff --git a/code/modules/mafia/controller.dm b/code/modules/mafia/controller.dm index d4edbb37f411e..f6b46c3430dc9 100644 --- a/code/modules/mafia/controller.dm +++ b/code/modules/mafia/controller.dm @@ -602,18 +602,13 @@ GLOBAL_LIST_INIT(mafia_role_by_alignment, setup_mafia_role_by_alignment()) outfit_to_distribute = player_outfit for(var/datum/mafia_role/role as anything in all_roles) - var/mob/living/carbon/human/human = new(get_turf(role.assigned_landmark)) - human.add_traits(list( - TRAIT_NOFIRE, - TRAIT_NOBREATH, - TRAIT_CANNOT_CRYSTALIZE, - TRAIT_PERMANENTLY_MORTAL, - TRAIT_GODMODE, - ), MAFIA_TRAIT) - human.equipOutfit(outfit_to_distribute) - RegisterSignal(human, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(display_votes)) + var/mob/living/carbon/human/H = new(get_turf(role.assigned_landmark)) + H.add_traits(list(TRAIT_NOFIRE, TRAIT_NOBREATH, TRAIT_CANNOT_CRYSTALIZE, TRAIT_PERMANENTLY_MORTAL), MAFIA_TRAIT) + H.equipOutfit(outfit_to_distribute) + H.status_flags |= GODMODE + RegisterSignal(H, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(display_votes)) var/obj/item/modular_computer/modpc = role.player_pda - role.register_body(human) + role.register_body(H) if(modpc) player_role_lookup[modpc] = role else diff --git a/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm b/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm index 6952dd0af588b..7c674e98e24a1 100644 --- a/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm +++ b/code/modules/mapfluff/ruins/icemoonruin_code/hotsprings.dm @@ -11,7 +11,6 @@ */ /turf/open/water/cursed_spring - name = "cursed spring" baseturfs = /turf/open/water/cursed_spring planetary_atmos = TRUE initial_gas_mix = ICEMOON_DEFAULT_ATMOS diff --git a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm index c49b5c1399625..26fdfcbb90bb0 100644 --- a/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm +++ b/code/modules/mapfluff/ruins/lavalandruin_code/syndicate_base.dm @@ -3,6 +3,7 @@ /obj/machinery/vending/syndichem name = "\improper SyndiChem" desc = "A vending machine full of grenades and grenade accessories. Sponsored by Donk Co." + req_access = list(ACCESS_SYNDICATE) products = list(/obj/item/stack/cable_coil = 5, /obj/item/assembly/igniter = 20, /obj/item/assembly/prox_sensor = 5, diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm index aac22db015b20..57f20abb1aa19 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm @@ -159,7 +159,7 @@ mask = /obj/item/clothing/mask/fakemoustache/italian /obj/machinery/vending/hotdog/museum - all_products_free = TRUE + onstation_override = TRUE /obj/machinery/vending/hotdog/museum/screwdriver_act(mob/living/user, obj/item/attack_item) return NONE @@ -199,6 +199,6 @@ var/obj/structure/toilet/destination = pick(partners) forceMove(destination) destination.w_items += w_class - LAZYADD(destination.cistern_items, src) + destination.contents += src #undef CAFE_KEYCARD_TOILETS diff --git a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm index fa39b7063ae12..e06c9bbb03608 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/forgottenship.dm @@ -13,46 +13,41 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) . = ..() password = "[GLOB.fscpassword]" -/obj/machinery/vending/medical/syndicate/cybersun +/obj/machinery/vending/medical/syndicate_access/cybersun name = "\improper CyberMed ++" desc = "An advanced vendor that dispenses medical drugs, both recreational and medicinal." - products = list( - /obj/item/reagent_containers/syringe = 4, - /obj/item/healthanalyzer = 4, - /obj/item/reagent_containers/pill/patch/libital = 5, - /obj/item/reagent_containers/pill/patch/aiuri = 5, - /obj/item/reagent_containers/cup/bottle/multiver = 1, - /obj/item/reagent_containers/cup/bottle/syriniver = 1, - /obj/item/reagent_containers/cup/bottle/epinephrine = 3, - /obj/item/reagent_containers/cup/bottle/morphine = 3, - /obj/item/reagent_containers/cup/bottle/potass_iodide = 1, - /obj/item/reagent_containers/cup/bottle/salglu_solution = 3, - /obj/item/reagent_containers/syringe/antiviral = 5, - /obj/item/reagent_containers/medigel/libital = 2, - /obj/item/reagent_containers/medigel/aiuri = 2, - /obj/item/reagent_containers/medigel/sterilizine = 1, - ) + products = list(/obj/item/reagent_containers/syringe = 4, + /obj/item/healthanalyzer = 4, + /obj/item/reagent_containers/pill/patch/libital = 5, + /obj/item/reagent_containers/pill/patch/aiuri = 5, + /obj/item/reagent_containers/cup/bottle/multiver = 1, + /obj/item/reagent_containers/cup/bottle/syriniver = 1, + /obj/item/reagent_containers/cup/bottle/epinephrine = 3, + /obj/item/reagent_containers/cup/bottle/morphine = 3, + /obj/item/reagent_containers/cup/bottle/potass_iodide = 1, + /obj/item/reagent_containers/cup/bottle/salglu_solution = 3, + /obj/item/reagent_containers/syringe/antiviral = 5, + /obj/item/reagent_containers/medigel/libital = 2, + /obj/item/reagent_containers/medigel/aiuri = 2, + /obj/item/reagent_containers/medigel/sterilizine = 1) contraband = list(/obj/item/reagent_containers/cup/bottle/cold = 2, - /obj/item/restraints/handcuffs = 4, - /obj/item/storage/backpack/duffelbag/syndie/surgery = 1, - /obj/item/storage/medkit/tactical = 1, - ) - premium = list( - /obj/item/storage/pill_bottle/psicodine = 2, - /obj/item/reagent_containers/hypospray/medipen = 3, - /obj/item/reagent_containers/hypospray/medipen/atropine = 2, - /obj/item/storage/medkit/regular = 3, - /obj/item/storage/medkit/brute = 1, - /obj/item/storage/medkit/fire = 1, - /obj/item/storage/medkit/toxin = 1, - /obj/item/storage/medkit/o2 = 1, - /obj/item/storage/medkit/advanced = 1, - /obj/item/defibrillator/loaded = 1, - /obj/item/wallframe/defib_mount = 1, - /obj/item/sensor_device = 2, - /obj/item/pinpointer/crew = 2, - /obj/item/shears = 1, - ) + /obj/item/restraints/handcuffs = 4, + /obj/item/storage/backpack/duffelbag/syndie/surgery = 1, + /obj/item/storage/medkit/tactical = 1) + premium = list(/obj/item/storage/pill_bottle/psicodine = 2, + /obj/item/reagent_containers/hypospray/medipen = 3, + /obj/item/reagent_containers/hypospray/medipen/atropine = 2, + /obj/item/storage/medkit/regular = 3, + /obj/item/storage/medkit/brute = 1, + /obj/item/storage/medkit/fire = 1, + /obj/item/storage/medkit/toxin = 1, + /obj/item/storage/medkit/o2 = 1, + /obj/item/storage/medkit/advanced = 1, + /obj/item/defibrillator/loaded = 1, + /obj/item/wallframe/defib_mount = 1, + /obj/item/sensor_device = 2, + /obj/item/pinpointer/crew = 2, + /obj/item/shears = 1) /////////// forgottenship lore diff --git a/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm b/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm index 958fa51fcc109..03bd6c224deda 100644 --- a/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm +++ b/code/modules/mapfluff/ruins/spaceruin_code/hauntedtradingpost.dm @@ -115,14 +115,16 @@ // [Hazards & Traps] //cyborg holobarriers that die when the boss dies, how exciting -#define SELFDESTRUCT_QUEUE "hauntedtradingpost_sd" //make sure it matches the AI cores ID /obj/structure/holosign/barrier/cyborg/cybersun_ai_shield desc = "A fragile holographic energy field projected by an AI core. It keeps unwanted humanoids at safe distance." /obj/structure/holosign/barrier/cyborg/cybersun_ai_shield/Initialize(mapload) . = ..() - if(mapload) //shouldnt queue when we arent even part of a ruin, probably admin shitspawned - SSqueuelinks.add_to_queue(src, SELFDESTRUCT_QUEUE) + GLOB.selfdestructs_when_boss_dies += src + +/obj/structure/holosign/barrier/cyborg/cybersun_ai_shield/Destroy() + GLOB.selfdestructs_when_boss_dies -= src + return ..() //smes that produces power, until the boss dies then it self destructs and you gotta make your own power /obj/machinery/power/smes/magical/cybersun @@ -134,7 +136,12 @@ /obj/machinery/power/smes/magical/cybersun/Initialize(mapload) . = ..() if(donk_ai_slave) - SSqueuelinks.add_to_queue(src, SELFDESTRUCT_QUEUE) + GLOB.selfdestructs_when_boss_dies += src + +/obj/machinery/power/smes/magical/cybersun/Destroy() + if(donk_ai_slave) + GLOB.selfdestructs_when_boss_dies -= src + return ..() //this is a trigger for traps involving doors and shutters //doors get closed and bolted, shutters get cycled open/closed @@ -158,31 +165,19 @@ var/suicide_pact = FALSE //id of the suicide pact this tripwire is in var/suicide_pact_id +GLOBAL_LIST_EMPTY(tripwire_suicide_pact) /obj/machinery/button/door/invisible_tripwire/Initialize(mapload) . = ..() - if(donk_ai_slave) - SSqueuelinks.add_to_queue(src, SELFDESTRUCT_QUEUE) - if(suicide_pact && suicide_pact_id != null) - SSqueuelinks.add_to_queue(src, suicide_pact_id) - . = INITIALIZE_HINT_LATELOAD + if(donk_ai_slave == TRUE) + GLOB.selfdestructs_when_boss_dies += src + if(suicide_pact == TRUE && suicide_pact_id != null) + GLOB.tripwire_suicide_pact += src var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) -/obj/machinery/button/door/invisible_tripwire/post_machine_initialize() - . = ..() - if(!suicide_pact || isnull(SSqueuelinks.queues[suicide_pact_id])) - return // we got beat to it - SSqueuelinks.pop_link(suicide_pact_id) - -/obj/machinery/button/door/invisible_tripwire/MatchedLinks(id, list/partners) - if(id != suicide_pact_id) - return - for(var/partner in partners) - RegisterSignal(partner, COMSIG_PUZZLE_COMPLETED, TYPE_PROC_REF(/datum, selfdelete)) - /obj/machinery/button/door/invisible_tripwire/proc/on_entered(atom/source, atom/movable/victim) SIGNAL_HANDLER if(!isliving(victim)) @@ -199,10 +194,20 @@ INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, interact), victim) if(multiuse && uses_remaining != 1) return - if(suicide_pact && suicide_pact_id) - SEND_SIGNAL(src, COMSIG_PUZZLE_COMPLETED) + if(suicide_pact&& suicide_pact_id) + for (var/obj/machinery/button/door/invisible_tripwire/pact_member in GLOB.tripwire_suicide_pact) + if(src.suicide_pact_id == pact_member.suicide_pact_id) + qdel(pact_member) qdel(src) + +/obj/machinery/button/door/invisible_tripwire/Destroy() + if(donk_ai_slave) + GLOB.selfdestructs_when_boss_dies -= src + if(suicide_pact && suicide_pact_id) + GLOB.tripwire_suicide_pact -= src + return ..() + //door button that destroys itself when it is pressed /obj/machinery/button/door/selfdestructs icon_state= "button-warning" @@ -266,8 +271,13 @@ proximity_monitor?.set_range(trigger_range) my_turf = get_turf(src) host_machine = locate(/obj/machinery) in loc - if(donk_ai_slave) - SSqueuelinks.add_to_queue(src, SELFDESTRUCT_QUEUE) + if(donk_ai_slave == TRUE) + GLOB.selfdestructs_when_boss_dies += src + +/obj/effect/overloader_trap/Destroy() + if(donk_ai_slave == TRUE) + GLOB.selfdestructs_when_boss_dies -= src + return ..() /obj/effect/overloader_trap/proc/check_faction(mob/target) for(var/faction1 in faction) @@ -371,4 +381,3 @@ damage = 30 wound_bonus = -50 -#undef SELFDESTRUCT_QUEUE diff --git a/code/modules/mining/boulder_processing/_boulder_processing.dm b/code/modules/mining/boulder_processing/_boulder_processing.dm index 834d8d08f807e..ab72e4ebae57b 100644 --- a/code/modules/mining/boulder_processing/_boulder_processing.dm +++ b/code/modules/mining/boulder_processing/_boulder_processing.dm @@ -81,14 +81,14 @@ for(var/obj/item/boulder/potential_boulder in contents) boulder_count += 1 . += span_notice("Storage capacity = [boulder_count]/[boulders_held_max] boulders.") - . += span_notice("Can process up to [boulders_processing_count] boulders at a time.") + . += span_notice("Can process upto [boulders_processing_count] boulders at a time.") if(anchored) - . += span_notice("It's [EXAMINE_HINT("anchored")] in place.") + . += span_notice("Its [EXAMINE_HINT("anchored")] in place.") else . += span_warning("It needs to be [EXAMINE_HINT("anchored")] to start operations.") - . += span_notice("Its maintenance panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") if(panel_open) . += span_notice("The whole machine can be [EXAMINE_HINT("pried")] apart.") @@ -304,7 +304,7 @@ if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) return if(!anchored) - balloon_alert(user, "anchor it first!") + balloon_alert(user, "anchor first!") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN if(panel_open) balloon_alert(user, "close panel!") diff --git a/code/modules/mining/boulder_processing/brm.dm b/code/modules/mining/boulder_processing/brm.dm index 658eb97d5632f..9b9186968918b 100644 --- a/code/modules/mining/boulder_processing/brm.dm +++ b/code/modules/mining/boulder_processing/brm.dm @@ -58,15 +58,15 @@ /obj/machinery/brm/examine(mob/user) . = ..() . += span_notice("The small screen reads there are [span_boldnotice("[SSore_generation.available_boulders.len] boulders")] available to teleport.") - . += span_notice("Can collect up to [boulders_processing_max] boulders at a time.") - . += span_notice("Automatic boulder retrieval can be toggled [EXAMINE_HINT("[toggled_on ? "Off" : "On"]")] with [EXAMINE_HINT("Right Click")].") + . += span_notice("Can collect upto [boulders_processing_max] boulders at a time.") + . += span_notice("Automatic boulder retrival can be toggled [EXAMINE_HINT("[toggled_on ? "Off" : "On"]")] with [EXAMINE_HINT("Right Click")].") if(anchored) - . += span_notice("It's [EXAMINE_HINT("anchored")] in place.") + . += span_notice("Its [EXAMINE_HINT("anchored")] in place.") else . += span_warning("It needs to be [EXAMINE_HINT("anchored")] to start operations.") - . += span_notice("Its maintenance panel can be [EXAMINE_HINT("screwed")] [panel_open ? "closed" : "open"].") + . += span_notice("Its maintainence panel can be [EXAMINE_HINT("screwed")] [panel_open ? "Closed" : "Open"].") if(panel_open) . += span_notice("The whole machine can be [EXAMINE_HINT("pried")] apart.") @@ -127,9 +127,7 @@ var/result = pre_collect_boulder() if(result == TURF_BLOCKED_BY_BOULDER) - balloon_alert(user, "no space!") - else if(result) - balloon_alert(user, "teleporting...") + balloon_alert(user, "no space") COOLDOWN_START(src, manual_teleport_cooldown, TELEPORTATION_TIME) return TRUE @@ -164,9 +162,9 @@ var/result = pre_collect_boulder() if(result == TURF_BLOCKED_BY_BOULDER) - balloon_alert(user, "no space!") + balloon_alert(user, "no space") else if(result) - balloon_alert(user, "teleporting...") + balloon_alert(user, "teleporting") COOLDOWN_START(src, manual_teleport_cooldown, TELEPORTATION_TIME) @@ -181,9 +179,9 @@ var/result = pre_collect_boulder() if(result == TURF_BLOCKED_BY_BOULDER) - balloon_alert(user, "no space!") + balloon_alert(user, "no space") else if(result) - balloon_alert(user, "teleporting...") + balloon_alert(user, "teleporting") COOLDOWN_START(src, manual_teleport_cooldown, TELEPORTATION_TIME) @@ -194,7 +192,7 @@ if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) return if(!anchored) - balloon_alert(user, "anchor it first!") + balloon_alert(user, "anchor first!") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN toggle_auto_on(user) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN @@ -213,7 +211,7 @@ balloon_alert(user, "close panel first!") return if(!anchored) - balloon_alert(user, "anchor it first!") + balloon_alert(user, "anchor first!") return if(!is_operational || machine_stat & (BROKEN | NOPOWER)) return @@ -230,7 +228,7 @@ if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) return if(!anchored) - balloon_alert(user, "unanchored!") + balloon_alert(user, "anchor first!") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN toggle_auto_on(user) @@ -241,7 +239,7 @@ if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN || panel_open) return if(!anchored) - balloon_alert(user, "unanchored!") + balloon_alert(user, "anchor first!") return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN toggle_auto_on(user) diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 1da0a7db6a394..6a276e830726b 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -49,6 +49,7 @@ ) //technically it's huge and bulky, but this provides an incentive to use it AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=20) + RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) /obj/item/kinetic_crusher/Destroy() QDEL_LIST(trophies) @@ -174,11 +175,10 @@ playsound(user, 'sound/weapons/empty.ogg', 100, TRUE) update_appearance() -/obj/item/kinetic_crusher/on_saboteur(datum/source, disrupt_duration) - . = ..() +/obj/item/kinetic_crusher/proc/on_saboteur(datum/source, disrupt_duration) set_light_on(FALSE) playsound(src, 'sound/weapons/empty.ogg', 100, TRUE) - return TRUE + return COMSIG_SABOTEUR_SUCCESS /obj/item/kinetic_crusher/update_icon_state() inhand_icon_state = "crusher[HAS_TRAIT(src, TRAIT_WIELDED)]" // this is not icon_state and not supported by 2hcomponent diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index 3783b5f592cd1..649acabfcae4a 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -38,7 +38,6 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) var/obj/structure/extraction_point/extraction_point = point_ref.resolve() if(isnull(extraction_point)) GLOB.total_extraction_beacons.Remove(point_ref) - continue if(extraction_point.beacon_network in beacon_networks) possible_beacons += extraction_point if(!length(possible_beacons)) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 3a1e88d5af13b..f833e15d3f3de 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -8,7 +8,6 @@ resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF can_install_electronics = FALSE paint_jobs = null - can_weld_shut = FALSE /obj/structure/closet/crate/necropolis/tendril desc = "It's watching you suspiciously. You need a skeleton key to open it." diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index 2ded64c17aaea..0403e17ad796a 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -425,7 +425,8 @@ if(!user) return - user.remove_traits(list(TRAIT_GODMODE, TRAIT_NO_TRANSFORM), REF(src)) + user.status_flags &= ~GODMODE + REMOVE_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src)) user.forceMove(get_turf(src)) user.visible_message(span_danger("[user] pops back into reality!")) @@ -436,7 +437,8 @@ setDir(user.dir) user.forceMove(src) - user.add_traits(list(TRAIT_GODMODE, TRAIT_NO_TRANSFORM), REF(src)) + ADD_TRAIT(user, TRAIT_NO_TRANSFORM, REF(src)) + user.status_flags |= GODMODE user_ref = WEAKREF(user) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 5d96aace182a8..53fd78cf94d49 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -160,7 +160,6 @@ close_sound = 'sound/machines/trapdoor/trapdoor_shut.ogg' set_dir_on_move = TRUE can_buckle = TRUE - can_weld_shut = FALSE /// Whether we're on a set of rails or just on the ground var/on_rails = FALSE diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index eb0d787f64b49..b4ddc8cd9c8b4 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -4,10 +4,10 @@ density = FALSE move_force = INFINITY move_resist = INFINITY + status_flags = GODMODE // You can't damage it. mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_ABSTRACT // No one can see us sight = SEE_SELF - status_flags = NONE /// Toggles if the camera can move on shuttles var/move_on_shuttle = FALSE /// Toggles if the camera can use emotes @@ -15,7 +15,6 @@ /mob/camera/Initialize(mapload) . = ..() - ADD_TRAIT(src, TRAIT_GODMODE, INNATE_TRAIT) SSpoints_of_interest.make_point_of_interest(src) if(!move_on_shuttle) ADD_TRAIT(src, TRAIT_BLOCK_SHUTTLE_MOVEMENT, INNATE_TRAIT) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index f3b48b438b8ae..fbece48ddab86 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -127,7 +127,7 @@ return GENERIC_JOB_UNAVAILABLE_ERROR /mob/dead/new_player/proc/IsJobUnavailable(rank, latejoin = FALSE) - var/datum/job/job = SSjob.get_job(rank) + var/datum/job/job = SSjob.GetJob(rank) if(!(job.job_flags & JOB_NEW_PLAYER_JOINABLE)) return JOB_UNAVAILABLE_GENERIC if((job.current_positions >= job.total_positions) && job.total_positions != -1) @@ -172,9 +172,9 @@ SSticker.queued_players -= src SSticker.queue_delay = 4 - var/datum/job/job = SSjob.get_job(rank) + var/datum/job/job = SSjob.GetJob(rank) - if(!SSjob.assign_role(src, job, TRUE)) + if(!SSjob.AssignRole(src, job, TRUE)) tgui_alert(usr, "There was an unexpected error putting you into your requested job. If you cannot join with any job, you should contact an admin.") return FALSE @@ -187,7 +187,7 @@ CRASH("Failed to create a character for latejoin.") transfer_character() - SSjob.equip_rank(character, job, character.client) + SSjob.EquipRank(character, job, character.client) job.after_latejoin_spawn(character) #define IS_NOT_CAPTAIN 0 diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index fb3b97066e0bf..49ac17d48ece9 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -88,13 +88,13 @@ for(var/job in job_preferences) if(job_preferences[job] > highest_pref) - preview_job = SSjob.get_job(job) + preview_job = SSjob.GetJob(job) highest_pref = job_preferences[job] return preview_job /datum/preferences/proc/render_new_preview_appearance(mob/living/carbon/human/dummy/mannequin, show_job_clothes = TRUE) - var/datum/job/no_job = SSjob.get_job_type(/datum/job/unassigned) + var/datum/job/no_job = SSjob.GetJobType(/datum/job/unassigned) var/datum/job/preview_job = get_highest_priority_job() || no_job if(preview_job) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 708d8bbdd0702..2d22c11ee71f8 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -586,19 +586,19 @@ hud_used.build_hand_slots() //GetAllContents that is reasonable and not stupid -/mob/living/proc/get_all_gear(accessories = TRUE, recursive = TRUE) - var/list/processing_list = get_equipped_items(INCLUDE_POCKETS | INCLUDE_HELD | (accessories ? INCLUDE_ACCESSORIES : NONE)) +/mob/living/proc/get_all_gear() + var/list/processing_list = get_equipped_items(INCLUDE_POCKETS | INCLUDE_ACCESSORIES | INCLUDE_HELD) list_clear_nulls(processing_list) // handles empty hands var/i = 0 while(i < length(processing_list)) var/atom/A = processing_list[++i] - if(A.atom_storage && recursive) + if(A.atom_storage) processing_list += A.atom_storage.return_inv() return processing_list /// Returns a list of things that the provided mob has, including any storage-capable implants. -/mob/living/proc/gather_belongings(accessories = TRUE, recursive = TRUE) - var/list/belongings = get_all_gear(accessories, recursive) +/mob/living/proc/gather_belongings() + var/list/belongings = get_all_gear() for (var/obj/item/implant/storage/internal_bag in implants) belongings += internal_bag.contents return belongings diff --git a/code/modules/mob/living/basic/basic_defense.dm b/code/modules/mob/living/basic/basic_defense.dm index 9a7ddef3ce0f2..646cabe339d42 100644 --- a/code/modules/mob/living/basic/basic_defense.dm +++ b/code/modules/mob/living/basic/basic_defense.dm @@ -159,7 +159,7 @@ ..() /mob/living/basic/update_stat() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return if(stat != DEAD) if(health <= 0) diff --git a/code/modules/mob/living/basic/bots/_bots.dm b/code/modules/mob/living/basic/bots/_bots.dm index be7ce8bc5ddc5..cc6ac85c6cbc4 100644 --- a/code/modules/mob/living/basic/bots/_bots.dm +++ b/code/modules/mob/living/basic/bots/_bots.dm @@ -538,7 +538,6 @@ GLOBAL_LIST_INIT(command_strings, list( /mob/living/basic/bot/proc/bot_reset(bypass_ai_reset = FALSE) SEND_SIGNAL(src, COMSIG_BOT_RESET) access_card.set_access(initial_access) - update_bot_mode(new_mode = src::mode) diag_hud_set_botstat() diag_hud_set_botmode() clear_path_hud() @@ -559,7 +558,8 @@ GLOBAL_LIST_INIT(command_strings, list( // process control input switch(command) if("patroloff") - set_patrol_off() + bot_reset() //HOLD IT!! //OBJECTION!! + set_mode_flags(bot_mode_flags & ~BOT_MODE_AUTOPATROL) if("patrolon") set_mode_flags(bot_mode_flags | BOT_MODE_AUTOPATROL) if("summon") @@ -567,9 +567,6 @@ GLOBAL_LIST_INIT(command_strings, list( if("ejectpai") eject_pai_remote(user) -/mob/living/basic/bot/proc/set_patrol_off() - bot_reset() - set_mode_flags(bot_mode_flags & ~BOT_MODE_AUTOPATROL) /mob/living/basic/bot/proc/bot_control_message(command, user) if(command == "summon") diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm index fd89168ddf4f1..a0abbbfd48b40 100644 --- a/code/modules/mob/living/basic/bots/bot_ai.dm +++ b/code/modules/mob/living/basic/bots/bot_ai.dm @@ -48,12 +48,6 @@ return RegisterSignal(new_pawn, COMSIG_BOT_RESET, PROC_REF(reset_bot)) RegisterSignal(new_pawn, COMSIG_AI_BLACKBOARD_KEY_CLEARED(BB_BOT_SUMMON_TARGET), PROC_REF(clear_summon)) - RegisterSignal(new_pawn, COMSIG_MOB_AI_MOVEMENT_STARTED, PROC_REF(on_movement_start)) - -/datum/ai_controller/basic_controller/bot/proc/on_movement_start(mob/living/basic/bot/source, atom/target) - SIGNAL_HANDLER - if(current_movement_target == blackboard[BB_BEACON_TARGET]) - source.update_bot_mode(new_mode = BOT_PATROL) /datum/ai_controller/basic_controller/bot/proc/clear_summon() SIGNAL_HANDLER @@ -81,7 +75,7 @@ /datum/ai_controller/basic_controller/bot/proc/reset_bot() SIGNAL_HANDLER - CancelActions() + if(!length(reset_keys)) return for(var/key in reset_keys) @@ -136,6 +130,7 @@ return if(controller.blackboard_key_exists(BB_BEACON_TARGET)) + bot_pawn.update_bot_mode(new_mode = BOT_PATROL) controller.queue_behavior(travel_behavior, BB_BEACON_TARGET) return @@ -200,6 +195,8 @@ /datum/ai_planning_subtree/respond_to_summon/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) if(!controller.blackboard_key_exists(BB_BOT_SUMMON_TARGET)) return + controller.clear_blackboard_key(BB_PREVIOUS_BEACON_TARGET) + controller.clear_blackboard_key(BB_BEACON_TARGET) controller.queue_behavior(/datum/ai_behavior/travel_towards/bot_summon, BB_BOT_SUMMON_TARGET) return SUBTREE_RETURN_FINISH_PLANNING diff --git a/code/modules/mob/living/basic/drone/interaction.dm b/code/modules/mob/living/basic/drone/interaction.dm index 58b7cd88ef287..0b0247c1c45f3 100644 --- a/code/modules/mob/living/basic/drone/interaction.dm +++ b/code/modules/mob/living/basic/drone/interaction.dm @@ -32,7 +32,7 @@ return ..() /mob/living/basic/drone/mob_try_pickup(mob/living/user, instant=FALSE) - if(stat == DEAD || HAS_TRAIT(src, TRAIT_GODMODE)) + if(stat == DEAD || status_flags & GODMODE) return return ..() diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm index fcb61892e5714..d1b1aebf9eb00 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm @@ -146,7 +146,10 @@ obj_damage = 15 ai_controller = /datum/ai_controller/basic_controller/gorilla/lesser butcher_results = list(/obj/item/food/meat/slab/gorilla = 2) - current_size = 0.75 + +/mob/living/basic/gorilla/lesser/Initialize(mapload) + . = ..() + transform *= 0.75 /// Cargo's wonderful mascot, the tranquil box-carrying ape /mob/living/basic/gorilla/cargorilla @@ -164,21 +167,4 @@ ADD_TRAIT(src, TRAIT_PACIFISM, INNATE_TRAIT) AddComponent(/datum/component/crate_carrier) -/// A version of the gorilla achieved by reaching enough genetic damage as a monkey -/mob/living/basic/gorilla/genetics - name = "Lab Gorilla" - maxHealth = 180 - health = 180 - desc = "A gorilla created via \"advanced genetic science\". While not quite as strong as their wildborne brethren, this simian still packs a punch." - melee_damage_lower = 15 - melee_damage_upper = 18 - obj_damage = 25 - speed = 0.1 - paralyze_chance = 0 - current_size = 0.9 - -/mob/living/basic/gorilla/genetics/Initialize(mapload) - . = ..() - qdel(GetComponent(/datum/component/amputating_limbs)) - #undef GORILLA_HANDS_LAYER diff --git a/code/modules/mob/living/basic/guardian/guardian_verbs.dm b/code/modules/mob/living/basic/guardian/guardian_verbs.dm index b69fac878209a..80a2af7db7a27 100644 --- a/code/modules/mob/living/basic/guardian/guardian_verbs.dm +++ b/code/modules/mob/living/basic/guardian/guardian_verbs.dm @@ -57,7 +57,7 @@ if (isnull(summoner)) return var/sender_key = key - var/input = tgui_input_text(src, "Enter a message to tell your summoner", "Guardian", max_length = MAX_MESSAGE_LEN) + var/input = tgui_input_text(src, "Enter a message to tell your summoner", "Guardian") if (sender_key != key || !input) //guardian got reset, or did not enter anything return @@ -91,7 +91,7 @@ /datum/action/cooldown/mob_cooldown/guardian_comms/Activate(atom/target) StartCooldown(360 SECONDS) - var/input = tgui_input_text(owner, "Enter a message to tell your guardian", "Message", max_length = MAX_MESSAGE_LEN) + var/input = tgui_input_text(owner, "Enter a message to tell your guardian", "Message") StartCooldown() if (!input) return FALSE diff --git a/code/modules/mob/living/basic/health_adjustment.dm b/code/modules/mob/living/basic/health_adjustment.dm index ca98f98eb8e91..bae9d7b9e57b5 100644 --- a/code/modules/mob/living/basic/health_adjustment.dm +++ b/code/modules/mob/living/basic/health_adjustment.dm @@ -4,12 +4,12 @@ * Arguments: * * amount The amount that will be used to adjust the mob's health * * updating_health If the mob's health should be immediately updated to the new value - * * forced If we should force update the adjustment of the mob's health no matter the restrictions, like TRAIT_GODMODE + * * forced If we should force update the adjustment of the mob's health no matter the restrictions, like GODMODE * returns the net change in bruteloss after applying the damage amount */ /mob/living/basic/proc/adjust_health(amount, updating_health = TRUE, forced = FALSE) . = FALSE - if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) + if(!forced && (status_flags & GODMODE)) return 0 . = bruteloss // bruteloss value before applying damage bruteloss = round(clamp(bruteloss + amount, 0, maxHealth * 2), DAMAGE_PRECISION) diff --git a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm index ca07c1a043ed5..f023215d7dd5c 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_actions.dm @@ -19,14 +19,14 @@ return playsound(burrower, 'sound/effects/break_stone.ogg', 50, TRUE) new /obj/effect/temp_visual/mook_dust(get_turf(burrower)) - ADD_TRAIT(burrower, TRAIT_GODMODE, REF(src)) + burrower.status_flags |= GODMODE burrower.SetInvisibility(INVISIBILITY_MAXIMUM, id=type) burrower.forceMove(unburrow_turf) //not that it's gonna die with godmode but still SLEEP_CHECK_DEATH(rand(0.7 SECONDS, 1.2 SECONDS), burrower) playsound(burrower, 'sound/effects/break_stone.ogg', 50, TRUE) new /obj/effect/temp_visual/mook_dust(unburrow_turf) - REMOVE_TRAIT(burrower, TRAIT_GODMODE, REF(src)) + burrower.status_flags &= ~GODMODE burrower.RemoveInvisibility(type) /datum/action/cooldown/mob_cooldown/resurface/proc/get_unburrow_turf(mob/living/burrower, atom/target) @@ -108,14 +108,14 @@ return //this will give up on devouring the target which is fine by me playsound(devourer, 'sound/effects/break_stone.ogg', 50, TRUE) new /obj/effect/temp_visual/mook_dust(get_turf(devourer)) - ADD_TRAIT(devourer, TRAIT_GODMODE, REF(src)) + devourer.status_flags |= GODMODE devourer.SetInvisibility(INVISIBILITY_MAXIMUM, id=type) devourer.forceMove(devour_turf) //not that it's gonna die with godmode but still SLEEP_CHECK_DEATH(rand(0.7 SECONDS, 1.2 SECONDS), devourer) playsound(devourer, 'sound/effects/break_stone.ogg', 50, TRUE) new /obj/effect/temp_visual/mook_dust(devour_turf) - REMOVE_TRAIT(devourer, TRAIT_GODMODE, REF(src)) + devourer.status_flags &= ~GODMODE devourer.RemoveInvisibility(type) if(!(target in devour_turf)) to_chat(devourer, span_warning("Someone stole your dinner!")) diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm index 6b822d490de78..f9e1d458ef2ed 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers.dm @@ -139,12 +139,12 @@ can_breed = FALSE gender = NEUTER ai_controller = /datum/ai_controller/basic_controller/gutlunch/gutlunch_baby - current_size = 0.6 ///list of stats we inherited var/datum/gutlunch_inherited_stats/inherited_stats /mob/living/basic/mining/gutlunch/grub/Initialize(mapload) . = ..() + transform = transform.Scale(0.6, 0.6) AddComponent(\ /datum/component/growth_and_differentiation,\ growth_time = 3 MINUTES,\ diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm b/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm index 856ff315d0c1e..1bae1b3035379 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm @@ -66,9 +66,6 @@ if (QDELETED(victim) || prob(30)) return ..() - if(HAS_MIND_TRAIT(victim, TRAIT_MIMING)) // mimes cant talk - return - var/list/remembered_speech = controller.blackboard[BB_LEGION_RECENT_LINES] || list() if (length(remembered_speech) && prob(50)) // Don't spam the radio diff --git a/code/modules/mob/living/basic/pets/parrot/poly.dm b/code/modules/mob/living/basic/pets/parrot/poly.dm index f825788decd98..cba3dd6e588e3 100644 --- a/code/modules/mob/living/basic/pets/parrot/poly.dm +++ b/code/modules/mob/living/basic/pets/parrot/poly.dm @@ -191,9 +191,9 @@ name = "The Ghost of Poly" desc = "Doomed to squawk the Earth." color = "#FFFFFF77" + status_flags = GODMODE sentience_type = SENTIENCE_BOSS //This is so players can't mindswap into ghost poly to become a literal god incorporeal_move = INCORPOREAL_MOVE_BASIC - status_flags = NONE butcher_results = list(/obj/item/ectoplasm = 1) ai_controller = /datum/ai_controller/basic_controller/parrot/ghost speech_probability_rate = 1 @@ -202,7 +202,7 @@ /mob/living/basic/parrot/poly/ghost/Initialize(mapload) // block anything and everything that could possibly happen with writing memory for ghosts memory_saved = TRUE - add_traits(list(TRAIT_GODMODE, TRAIT_DONT_WRITE_MEMORY), INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_DONT_WRITE_MEMORY, INNATE_TRAIT) RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) return ..() diff --git a/code/modules/mob/living/basic/ruin_defender/cybersun_aicore.dm b/code/modules/mob/living/basic/ruin_defender/cybersun_aicore.dm index 7b27da8d9778e..e9b62f9deaf2e 100644 --- a/code/modules/mob/living/basic/ruin_defender/cybersun_aicore.dm +++ b/code/modules/mob/living/basic/ruin_defender/cybersun_aicore.dm @@ -31,8 +31,8 @@ var/datum/action/cooldown/mob_cooldown/targeted_mob_ability/donk_laser //is this being used as part of the haunted trading post ruin? if true, stuff there will self destruct when this mob dies var/donk_ai_master = FALSE - /// the queue id for the stuff that selfdestructs when we die - var/selfdestruct_queue_id = "hauntedtradingpost_sd" +// list of stuff tagged to self destruct when this mob dies +GLOBAL_LIST_EMPTY(selfdestructs_when_boss_dies) /mob/living/basic/cybersun_ai_core/Initialize(mapload) . = ..() @@ -45,20 +45,21 @@ BARRAGE_ABILITY_TYPEPATH = BB_CYBERSUN_CORE_BARRAGE, ) grant_actions_by_list(innate_actions) - if(mapload && donk_ai_master) - return INITIALIZE_HINT_LATELOAD - -/mob/living/basic/cybersun_ai_core/LateInitialize() - SSqueuelinks.add_to_queue(src, selfdestruct_queue_id) - SSqueuelinks.pop_link(selfdestruct_queue_id) - -/mob/living/basic/cybersun_ai_core/MatchedLinks(id, list/partners) // id == queue id (for multiple queue objects) - if(id != selfdestruct_queue_id) - return - for(var/datum/partner as anything in partners) // all our partners in the selfdestruct queue are now registered to qdel if I die - partner.RegisterSignal(src, COMSIG_QDELETING, TYPE_PROC_REF(/datum, selfdelete)) /mob/living/basic/cybersun_ai_core/death(gibbed) + if(donk_ai_master == TRUE) + //disable all the tripwire traps + for (var/obj/item/pressure_plate/puzzle/invisible_tripwire as anything in GLOB.selfdestructs_when_boss_dies) + qdel(invisible_tripwire) + //and the electric overload traps + for (var/obj/effect/overloader_trap as anything in GLOB.selfdestructs_when_boss_dies) + qdel(overloader_trap) + //then disable the AI defence holograms + for (var/obj/structure/holosign/barrier/cyborg/cybersun_ai_shield as anything in GLOB.selfdestructs_when_boss_dies) + qdel(cybersun_ai_shield) + //then the power generator + for (var/obj/machinery/power/smes/magical/cybersun as anything in GLOB.selfdestructs_when_boss_dies) + qdel(cybersun) do_sparks(number = 5, source = src) return ..() diff --git a/code/modules/mob/living/basic/ruin_defender/flesh.dm b/code/modules/mob/living/basic/ruin_defender/flesh.dm index f95a949faa27f..359705ecff2bd 100644 --- a/code/modules/mob/living/basic/ruin_defender/flesh.dm +++ b/code/modules/mob/living/basic/ruin_defender/flesh.dm @@ -83,7 +83,7 @@ victim.visible_message(span_warning("[victim]'s [current_bodypart.name] instinctively starts feeling [candidate]!")) if (!victim.anchored && !prob(victim.combat_mode ? LIVING_FLESH_COMBAT_TOUCH_CHANCE : LIVING_FLESH_TOUCH_CHANCE)) - INVOKE_ASYNC(victim, TYPE_PROC_REF(/atom/movable, start_pulling), candidate, supress_message = TRUE) + victim.start_pulling(candidate, supress_message = TRUE) return var/active_hand = victim.active_hand_index diff --git a/code/modules/mob/living/basic/ruin_defender/living_floor.dm b/code/modules/mob/living/basic/ruin_defender/living_floor.dm index ce4fbc53f51fa..105838f0c55dd 100644 --- a/code/modules/mob/living/basic/ruin_defender/living_floor.dm +++ b/code/modules/mob/living/basic/ruin_defender/living_floor.dm @@ -26,7 +26,7 @@ icon_living = "floor" mob_size = MOB_SIZE_HUGE mob_biotypes = MOB_SPECIAL - status_flags = NONE + status_flags = GODMODE //nothing but crowbars may kill us death_message = "" unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 @@ -52,7 +52,7 @@ /mob/living/basic/living_floor/Initialize(mapload) . = ..() - add_traits(list(TRAIT_GODMODE, TRAIT_IMMOBILIZED), INNATE_TRAIT) //nothing but crowbars may kill us + ADD_TRAIT(src, TRAIT_IMMOBILIZED, INNATE_TRAIT) var/static/list/connections = list(COMSIG_ATOM_ENTERED = PROC_REF(look_aggro), COMSIG_ATOM_EXITED = PROC_REF(look_deaggro)) AddComponent(/datum/component/connect_range, tracked = src, connections = connections, range = 1, works_in_containers = FALSE) diff --git a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm index d13df29806409..f4a1267e9db70 100644 --- a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm +++ b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm @@ -42,7 +42,7 @@ /mob/living/basic/bear/Initialize(mapload) . = ..() - add_traits(list(TRAIT_SPACEWALK, TRAIT_FENCE_CLIMBER, TRAIT_SNOWSTORM_IMMUNE), INNATE_TRAIT) + add_traits(list(TRAIT_SPACEWALK, TRAIT_FENCE_CLIMBER), INNATE_TRAIT) AddElement(/datum/element/ai_retaliate) AddComponent(/datum/component/tree_climber, climbing_distance = 15) AddElement(/datum/element/swabable, CELL_LINE_TABLE_BEAR, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) @@ -90,16 +90,16 @@ maxHealth = 250 health = 250 faction = list(FACTION_NEUTRAL) - status_flags = CANPUSH /mob/living/basic/bear/snow/ancient name = "ancient polar bear" desc = "A grizzled old polar bear, its hide thick enough to make it impervious to almost all weapons." + status_flags = CANPUSH | GODMODE gold_core_spawnable = NO_SPAWN -/mob/living/basic/bear/snow/ancient/Initialize(mapload) +/mob/living/basic/bear/snow/Initialize(mapload) . = ..() - ADD_TRAIT(src, TRAIT_GODMODE, INNATE_TRAIT) + ADD_TRAIT(src, TRAIT_SNOWSTORM_IMMUNE, INNATE_TRAIT) /mob/living/basic/bear/russian name = "combat bear" diff --git a/code/modules/mob/living/basic/space_fauna/demon/demon.dm b/code/modules/mob/living/basic/space_fauna/demon/demon.dm index eb424cdce49d4..21eaf66a3e869 100644 --- a/code/modules/mob/living/basic/space_fauna/demon/demon.dm +++ b/code/modules/mob/living/basic/space_fauna/demon/demon.dm @@ -66,7 +66,7 @@ if(isnull(antag_type) || mind.has_antag_datum(antag_type)) return // we weren't built for this proc to run - mind.set_assigned_role(SSjob.get_job_type(/datum/job/slaughter_demon)) + mind.set_assigned_role(SSjob.GetJobType(/datum/job/slaughter_demon)) mind.special_role = ROLE_SLAUGHTER_DEMON mind.add_antag_datum(antag_type) diff --git a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm index 62b6a8da7e6aa..a154ba9da0c65 100644 --- a/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm +++ b/code/modules/mob/living/basic/space_fauna/revenant/_revenant.dm @@ -125,7 +125,7 @@ return TRUE generated_objectives_and_spells = TRUE - mind.set_assigned_role(SSjob.get_job_type(/datum/job/revenant)) + mind.set_assigned_role(SSjob.GetJobType(/datum/job/revenant)) mind.special_role = ROLE_REVENANT SEND_SOUND(src, sound('sound/effects/ghost.ogg')) mind.add_antag_datum(/datum/antagonist/revenant) diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm index 8fc79080cac84..790879b0de2c1 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/spider_abilities/hivemind.dm @@ -18,7 +18,7 @@ var/current_directive = "" /datum/action/cooldown/mob_cooldown/set_spider_directive/Activate(atom/target) - var/new_directive = tgui_input_text(owner, "Enter the new directive", "Create directive", "[current_directive]", max_length = MAX_MESSAGE_LEN) + var/new_directive = tgui_input_text(owner, "Enter the new directive", "Create directive", "[current_directive]") if(isnull(new_directive) || QDELETED(src) || QDELETED(owner) || !IsAvailable(feedback = TRUE)) return @@ -44,7 +44,7 @@ click_to_activate = FALSE /datum/action/cooldown/mob_cooldown/command_spiders/Activate(trigger_flags) - var/input = tgui_input_text(owner, "Input a command for your legions to follow.", "Command", max_length = MAX_MESSAGE_LEN) + var/input = tgui_input_text(owner, "Input a command for your legions to follow.", "Command") if(!input || QDELETED(src) || QDELETED(owner) || !IsAvailable(feedback = TRUE)) return spider_command(owner, input) diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm index a25b3c52ad8fc..bba6e0eb460c6 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/inflation.dm @@ -58,12 +58,13 @@ return FALSE RegisterSignal(fugu, COMSIG_MOB_STATCHANGE, PROC_REF(check_death)) fugu.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/inflated) - fugu.add_traits(list(TRAIT_FUGU_GLANDED, TRAIT_GODMODE), TRAIT_STATUS_EFFECT(id)) + ADD_TRAIT(fugu, TRAIT_FUGU_GLANDED, TRAIT_STATUS_EFFECT(id)) fugu.AddElement(/datum/element/wall_tearer, allow_reinforced = FALSE) fugu.mob_size = MOB_SIZE_LARGE fugu.icon_state = "Fugu1" fugu.melee_damage_lower = 15 fugu.melee_damage_upper = 20 + fugu.status_flags |= GODMODE fugu.obj_damage = 60 fugu.ai_controller.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, TRUE) fugu.ai_controller.CancelActions() @@ -75,11 +76,12 @@ return // Check again in case you changed mob after application but somehow kept the status effect UnregisterSignal(fugu, COMSIG_MOB_STATCHANGE) fugu.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/inflated) - fugu.remove_traits(list(TRAIT_FUGU_GLANDED, TRAIT_GODMODE), TRAIT_STATUS_EFFECT(id)) + REMOVE_TRAIT(fugu, TRAIT_FUGU_GLANDED, TRAIT_STATUS_EFFECT(id)) fugu.RemoveElement(/datum/element/wall_tearer, allow_reinforced = FALSE) fugu.mob_size = MOB_SIZE_SMALL fugu.melee_damage_lower = 0 fugu.melee_damage_upper = 0 + fugu.status_flags &= ~GODMODE if (fugu.stat != DEAD) fugu.icon_state = "Fugu0" fugu.obj_damage = 0 diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index 5b8aad138fe10..7361e4be7b310 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -1,6 +1,6 @@ /mob/living/basic/mouse name = "mouse" - desc = "This cute little guy just loves the taste of insulated electrical cables. Isn't he adorable?" + desc = "This cute little guy just loves the taste of uninsulated electrical cables. Isn't he adorable?" icon_state = "mouse_gray" icon_living = "mouse_gray" icon_dead = "mouse_gray_dead" diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index dfe669a7092ed..1eae92026308f 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -122,7 +122,7 @@ //Makes a blood drop, leaking amt units of blood from the mob /mob/living/carbon/proc/bleed(amt) - if(!blood_volume || HAS_TRAIT(src, TRAIT_GODMODE)) + if(!blood_volume || (status_flags & GODMODE)) return blood_volume = max(blood_volume - amt, 0) diff --git a/code/modules/mob/living/brain/life.dm b/code/modules/mob/living/brain/life.dm index 7ffe49951ec26..9bebeac70ec83 100644 --- a/code/modules/mob/living/brain/life.dm +++ b/code/modules/mob/living/brain/life.dm @@ -14,7 +14,7 @@ handle_emp_damage(seconds_per_tick, times_fired) /mob/living/brain/update_stat() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return if(health > HEALTH_THRESHOLD_DEAD) return diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm index d883cbc635950..7d4255d54d50b 100644 --- a/code/modules/mob/living/brain/posibrain.dm +++ b/code/modules/mob/living/brain/posibrain.dm @@ -76,7 +76,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) addtimer(CALLBACK(src, PROC_REF(check_success)), ask_delay) /obj/item/mmi/posibrain/click_alt(mob/living/user) - var/input_seed = tgui_input_text(user, "Enter a personality seed", "Enter seed", ask_role, max_length = MAX_NAME_LEN) + var/input_seed = tgui_input_text(user, "Enter a personality seed", "Enter seed", ask_role, MAX_NAME_LEN) if(isnull(input_seed)) return CLICK_ACTION_BLOCKING if(!user.can_perform_action(src)) @@ -137,7 +137,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) brainmob.timeofdeath = transferred_user.timeofdeath brainmob.set_stat(CONSCIOUS) if(brainmob.mind) - brainmob.mind.set_assigned_role(SSjob.get_job_type(posibrain_job_path)) + brainmob.mind.set_assigned_role(SSjob.GetJobType(posibrain_job_path)) if(transferred_user.mind) transferred_user.mind.transfer_to(brainmob) @@ -160,7 +160,7 @@ GLOBAL_VAR(posibrain_notify_cooldown) var/policy = get_policy(ROLE_POSIBRAIN) if(policy) to_chat(brainmob, policy) - brainmob.mind.set_assigned_role(SSjob.get_job_type(posibrain_job_path)) + brainmob.mind.set_assigned_role(SSjob.GetJobType(posibrain_job_path)) brainmob.set_stat(CONSCIOUS) visible_message(new_mob_message) diff --git a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm index 21a09d82a6965..999ec07f41a65 100644 --- a/code/modules/mob/living/carbon/alien/adult/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/adult/alien_powers.dm @@ -135,7 +135,7 @@ Doesn't work on other aliens/AI.*/ if(!chosen_recipient) return FALSE - var/to_whisper = tgui_input_text(owner, title = "Alien Whisper", max_length = MAX_MESSAGE_LEN) + var/to_whisper = tgui_input_text(owner, title = "Alien Whisper") if(QDELETED(chosen_recipient) || QDELETED(src) || QDELETED(owner) || !IsAvailable(feedback = TRUE) || !to_whisper) return FALSE if(chosen_recipient.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0)) diff --git a/code/modules/mob/living/carbon/alien/adult/queen.dm b/code/modules/mob/living/carbon/alien/adult/queen.dm index a925b4c5460ea..4387f7db3eca0 100644 --- a/code/modules/mob/living/carbon/alien/adult/queen.dm +++ b/code/modules/mob/living/carbon/alien/adult/queen.dm @@ -168,9 +168,10 @@ span_noticealien("The queen has granted you a promotion to Praetorian!"), ) - var/mob/living/carbon/alien/lucky_winner = to_promote - var/mob/living/carbon/alien/adult/royal/praetorian/new_prae = new(lucky_winner.loc) - lucky_winner.alien_evolve(new_prae) + var/mob/living/carbon/alien/adult/royal/praetorian/new_prae = new(to_promote.loc) + to_promote.mind.transfer_to(new_prae) + + qdel(to_promote) qdel(src) return TRUE diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 9744bcbada7e5..f587b9d00160c 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -23,13 +23,6 @@ unique_name = TRUE var/static/regex/alien_name_regex = new("alien (larva|sentinel|drone|hunter|praetorian|queen)( \\(\\d+\\))?") - var/static/list/xeno_allowed_items = typecacheof(list( - /obj/item/clothing/mask/facehugger, - /obj/item/toy/basketball, // playing ball against a xeno is rigged since they cannot be disarmed, their game is out of this world - /obj/item/toy/toy_xeno, - /obj/item/sticker, //funny ~Jimmyl - /obj/item/toy/plush/rouny, - )) /mob/living/carbon/alien/Initialize(mapload) add_verb(src, /mob/living/proc/mob_sleep) @@ -44,11 +37,6 @@ . = ..() if(alien_speed) update_alien_speed() - LoadComponent( \ - /datum/component/itempicky, \ - xeno_allowed_items, \ - span_alien("Your claws lack the dexterity to hold %TARGET."), \ - CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(_has_trait), src, TRAIT_ADVANCEDTOOLUSER)) /mob/living/carbon/alien/create_internal_organs() organs += new /obj/item/organ/internal/brain/alien @@ -143,11 +131,6 @@ Des: Removes all infected images from the alien. mind.name = new_xeno.real_name mind.transfer_to(new_xeno) - var/obj/item/organ/internal/stomach/alien/melting_pot = get_organ_slot(ORGAN_SLOT_STOMACH) - var/obj/item/organ/internal/stomach/alien/frying_pan = new_xeno.get_organ_slot(ORGAN_SLOT_STOMACH) - if(istype(melting_pot) && istype(frying_pan)) - for (var/atom/movable/poor_sod as anything in melting_pot.stomach_contents) - frying_pan.consume_thing(poor_sod) qdel(src) /// Changes the name of the xeno we are evolving into in order to keep the same numerical identifier the old xeno had. @@ -166,6 +149,9 @@ Des: Removes all infected images from the alien. set_name() +/mob/living/carbon/alien/can_hold_items(obj/item/I) + return (I && (I.item_flags & XENOMORPH_HOLDABLE || ISADVANCEDTOOLUSER(src)) && ..()) + /mob/living/carbon/alien/on_lying_down(new_lying_angle) . = ..() update_icons() diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 52f7b8dfc4789..147079ae720c3 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -11,7 +11,7 @@ /mob/living/carbon/alien/larva/update_stat() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return if(stat != DEAD) if(health <= -maxHealth || !get_organ_by_type(/obj/item/organ/internal/brain)) diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 7bd7d7aec49af..f7ecd3075171e 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -3,7 +3,7 @@ return..() /mob/living/carbon/alien/check_breath(datum/gas_mixture/breath) - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return if(!breath || (breath.total_moles() == 0)) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index 597769f11f271..d1ec6d7e88038 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -23,6 +23,7 @@ flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH layer = MOB_LAYER max_integrity = 100 + item_flags = XENOMORPH_HOLDABLE slowdown = 2 var/stat = CONSCIOUS //UNCONSCIOUS is the idle state in this case diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0edeeb7fb70f3..2f539cc2f9aaa 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -550,7 +550,7 @@ //Updates the mob's health from bodyparts and mob damage variables /mob/living/carbon/updatehealth() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return var/total_burn = 0 var/total_brute = 0 @@ -835,7 +835,7 @@ /mob/living/carbon/update_stat() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return if(stat != DEAD) if(health <= HEALTH_THRESHOLD_DEAD && !HAS_TRAIT(src, TRAIT_NODEATH)) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index dd1d59ebc1043..ae0ad9c6662bf 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -311,12 +311,6 @@ if(HAS_TRAIT(src, TRAIT_BADTOUCH)) to_chat(helper, span_warning("[src] looks visibly upset as you pat [p_them()] on the head.")) - //DOPPLER EDIT ADDITION BEGIN - Excitable quirk! 🐶 - if(HAS_TRAIT(src, TRAIT_EXCITABLE)) - var/obj/item/organ/external/tail/src_tail = get_organ_slot(ORGAN_SLOT_EXTERNAL_TAIL) - if(src_tail && !(src_tail.wag_flags & WAG_WAGGING)) - emote("wag") - //DOPPLER EDIT ADDITION END else if ((helper.zone_selected == BODY_ZONE_PRECISE_GROIN) && !isnull(src.get_organ_by_type(/obj/item/organ/external/tail))) helper.visible_message(span_notice("[helper] pulls on [src]'s tail!"), \ diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index ccbf735bd85aa..b781b296bc882 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -10,7 +10,6 @@ sharpness = NONE, attack_direction = null, attacking_item, - wound_clothing = TRUE, ) // Spread damage should always have def zone be null if(spread_damage) @@ -47,7 +46,6 @@ sharpness = NONE, attack_direction = null, attacking_item, - wound_clothing = TRUE, ) // Add relevant DR modifiers into blocked value to pass to parent @@ -105,7 +103,7 @@ . = heal_overall_damage(brute = abs(amount), required_bodytype = required_bodytype, updating_health = updating_health, forced = forced) /mob/living/carbon/setBruteLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype) - if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) + if(!forced && (status_flags & GODMODE)) return FALSE var/current = getBruteLoss() var/diff = amount - current @@ -122,7 +120,7 @@ . = heal_overall_damage(burn = abs(amount), required_bodytype = required_bodytype, updating_health = updating_health, forced = forced) /mob/living/carbon/setFireLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype) - if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) + if(!forced && (status_flags & GODMODE)) return FALSE var/current = getFireLoss() var/diff = amount - current @@ -152,7 +150,7 @@ apply_status_effect(/datum/status_effect/incapacitating/stamcrit) /** - * If an organ exists in the slot requested, and we are capable of taking damage (we don't have TRAIT_GODMODE), call the damage proc on that organ. + * If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the damage proc on that organ. * * Arguments: * * slot - organ slot, like [ORGAN_SLOT_HEART] @@ -164,14 +162,14 @@ */ /mob/living/carbon/adjustOrganLoss(slot, amount, maximum, required_organ_flag = NONE) var/obj/item/organ/affected_organ = get_organ_slot(slot) - if(!affected_organ || HAS_TRAIT(src, TRAIT_GODMODE)) + if(!affected_organ || (status_flags & GODMODE)) return FALSE if(required_organ_flag && !(affected_organ.organ_flags & required_organ_flag)) return FALSE return affected_organ.apply_organ_damage(amount, maximum) /** - * If an organ exists in the slot requested, and we are capable of taking damage (we don't have TRAIT_GODMODE), call the set damage proc on that organ, which can + * If an organ exists in the slot requested, and we are capable of taking damage (we don't have [GODMODE] on), call the set damage proc on that organ, which can * set or clear the failing variable on that organ, making it either cease or start functions again, unlike adjustOrganLoss. * * Arguments: @@ -183,7 +181,7 @@ */ /mob/living/carbon/setOrganLoss(slot, amount, required_organ_flag = NONE) var/obj/item/organ/affected_organ = get_organ_slot(slot) - if(!affected_organ || HAS_TRAIT(src, TRAIT_GODMODE)) + if(!affected_organ || (status_flags & GODMODE)) return FALSE if(required_organ_flag && !(affected_organ.organ_flags & required_organ_flag)) return FALSE @@ -269,7 +267,7 @@ */ /mob/living/carbon/take_bodypart_damage(brute = 0, burn = 0, updating_health = TRUE, required_bodytype, check_armor = FALSE, wound_bonus = 0, bare_wound_bonus = 0, sharpness = NONE) . = FALSE - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return var/list/obj/item/bodypart/parts = get_damageable_bodyparts(required_bodytype) if(!parts.len) @@ -316,7 +314,7 @@ /mob/living/carbon/take_overall_damage(brute = 0, burn = 0, stamina = 0, updating_health = TRUE, forced = FALSE, required_bodytype) . = FALSE - if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) + if(!forced && (status_flags & GODMODE)) return // treat negative args as positive brute = abs(brute) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index dc03dce8541fb..2053fd3920c58 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -237,7 +237,7 @@ if(!key) npc_message = "[t_He] [t_is] totally catatonic. The stresses of life in deep-space must have been too much for [t_him]. Any recovery is unlikely." else if(!client) - npc_message ="[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon." + npc_message = "[t_He] [t_has] a blank, absent-minded stare and [t_has] been completely unresponsive to anything for [round(((world.time - lastclienttime) / (1 MINUTES)),1)] minutes. [t_He] may snap out of it soon." // DOPPLER EDIT CHANGE - SSD_INDICATOR - ORIGINAL: npc_message ="[t_He] [t_has] a blank, absent-minded stare and appears completely unresponsive to anything. [t_He] may snap out of it soon." if(npc_message) // give some space since this is usually near the end ADD_NEWLINE_IF_NECESSARY(.) @@ -472,33 +472,26 @@ return /mob/living/carbon/human/get_hud_examine_info(mob/living/user) - . = list() - var/perpname = get_face_name(get_id_name("")) - var/title = "" if(perpname && (HAS_TRAIT(user, TRAIT_SECURITY_HUD) || HAS_TRAIT(user, TRAIT_MEDICAL_HUD)) && (user.stat == CONSCIOUS || isobserver(user)) && user != src) var/datum/record/crew/target_record = find_record(perpname) if(target_record) . += "Rank: [target_record.rank]" . += "\[Front photo\]\[Side photo\]" if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD) && HAS_TRAIT(user, TRAIT_SECURITY_HUD)) - title = separator_hr("Medical & Security Analysis") + . += separator_hr("Medical & Security Analysis") . += get_medhud_examine_info(user, target_record) + . += "
" . += get_sechud_examine_info(user, target_record) else if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD)) - title = separator_hr("Medical Analysis") + . += separator_hr("Medical Analysis") . += get_medhud_examine_info(user, target_record) else if(HAS_TRAIT(user, TRAIT_SECURITY_HUD)) - title = separator_hr("Security Analysis") + . += separator_hr("Security Analysis") . += get_sechud_examine_info(user, target_record) - // applies the separator correctly without an extra line break - if(title && length(.)) - .[1] = title + .[1] - return . - /// Collects information displayed about src when examined by a user with a medical HUD. /mob/living/carbon/proc/get_medhud_examine_info(mob/living/user, datum/record/crew/target_record) . = list() @@ -518,6 +511,7 @@ . += "\[Record Missing\]" . += "\[Medical evaluation\]" . += "\[See quirks\]" + . = jointext(., "
") /// Collects information displayed about src when examined by a user with a security HUD. /mob/living/carbon/proc/get_sechud_examine_info(mob/living/user, datum/record/crew/target_record) @@ -540,6 +534,7 @@ . += "\[Add citation\]\ \[Add crime\]\ \[Add note\]" + . = jointext(., "
") /mob/living/carbon/human/examine_more(mob/user) . = ..() @@ -563,9 +558,4 @@ age_text = "withering away" . += list(span_notice("[p_They()] appear[p_s()] to be [age_text].")) - if(istype(w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/undershirt = w_uniform - if(undershirt.has_sensor == BROKEN_SENSORS) - . += list(span_notice("The [undershirt]'s medical sensors are sparking.")) - #undef ADD_NEWLINE_IF_NECESSARY diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 948a3f90ea31d..dec49c2e0f726 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -1240,10 +1240,10 @@ GLOBAL_LIST_EMPTY(features_by_species) // 40% for level 3 damage on humans to scream in pain if (humi.stat < UNCONSCIOUS && (prob(burn_damage) * 10) / 4) - INVOKE_ASYNC(humi, TYPE_PROC_REF(/mob, emote), "scream") + humi.emote("scream") // Apply the damage to all body parts - humi.apply_damage(burn_damage, BURN, spread_damage = TRUE, wound_clothing = FALSE) + humi.apply_damage(burn_damage, BURN, spread_damage = TRUE) // For cold damage, we cap at the threshold if you're dead if(humi.getFireLoss() >= abs(HEALTH_THRESHOLD_DEAD) && humi.stat == DEAD) @@ -1259,11 +1259,11 @@ GLOBAL_LIST_EMPTY(features_by_species) var/damage_mod = coldmod * humi.physiology.cold_mod * (is_hulk ? HULK_COLD_DAMAGE_MOD : 1) // Can't be a switch due to http://www.byond.com/forum/post/2750423 if(humi.coretemperature in 201 to cold_damage_limit) - humi.apply_damage(COLD_DAMAGE_LEVEL_1 * damage_mod * seconds_per_tick, damage_type, wound_clothing = FALSE) + humi.apply_damage(COLD_DAMAGE_LEVEL_1 * damage_mod * seconds_per_tick, damage_type) else if(humi.coretemperature in 120 to 200) - humi.apply_damage(COLD_DAMAGE_LEVEL_2 * damage_mod * seconds_per_tick, damage_type, wound_clothing = FALSE) + humi.apply_damage(COLD_DAMAGE_LEVEL_2 * damage_mod * seconds_per_tick, damage_type) else - humi.apply_damage(COLD_DAMAGE_LEVEL_3 * damage_mod * seconds_per_tick, damage_type, wound_clothing = FALSE) + humi.apply_damage(COLD_DAMAGE_LEVEL_3 * damage_mod * seconds_per_tick, damage_type) /** * Used to apply burn wounds on random limbs @@ -1312,7 +1312,7 @@ GLOBAL_LIST_EMPTY(features_by_species) if(humi.bodytemperature > BODYTEMP_HEAT_WOUND_LIMIT + 2800) burn_damage = HEAT_DAMAGE_LEVEL_3 - humi.apply_damage(burn_damage * seconds_per_tick, BURN, bodypart, wound_clothing = FALSE) + humi.apply_damage(burn_damage * seconds_per_tick, BURN, bodypart) /// Handle the air pressure of the environment /datum/species/proc/handle_environment_pressure(mob/living/carbon/human/H, datum/gas_mixture/environment, seconds_per_tick, times_fired) @@ -1406,9 +1406,10 @@ GLOBAL_LIST_EMPTY(features_by_species) for (var/preference_type in GLOB.preference_entries) var/datum/preference/preference = GLOB.preference_entries[preference_type] + if ( \ (preference.relevant_inherent_trait in inherent_traits) \ - || (preference.relevant_external_organ in get_mut_organs()) \ + || (preference.relevant_external_organ in mutant_organs) \ || (preference.relevant_head_flag && check_head_flags(preference.relevant_head_flag)) \ || (preference.relevant_body_markings in body_markings) \ ) @@ -1456,24 +1457,23 @@ GLOBAL_LIST_EMPTY(features_by_species) /datum/species/proc/get_sneeze_sound(mob/living/carbon/human/human) return -/datum/species/proc/get_mut_organs(include_brain = TRUE) - var/list/mut_organs = list() - mut_organs += mutant_organs - if (include_brain) - mut_organs += mutantbrain - mut_organs += mutantheart - mut_organs += mutantlungs - mut_organs += mutanteyes - mut_organs += mutantears - mut_organs += mutanttongue - mut_organs += mutantliver - mut_organs += mutantstomach - mut_organs += mutantappendix - list_clear_nulls(mut_organs) - return mut_organs - /datum/species/proc/get_types_to_preload() - return get_mut_organs(FALSE) + var/list/to_store = list() + to_store += mutant_organs + for(var/obj/item/organ/horny as anything in mutant_organs) + to_store += horny //Haha get it? + + //Don't preload brains, cause reuse becomes a horrible headache + to_store += mutantheart + to_store += mutantlungs + to_store += mutanteyes + to_store += mutantears + to_store += mutanttongue + to_store += mutantliver + to_store += mutantstomach + to_store += mutantappendix + //We don't cache mutant hands because it's not constrained enough, too high a potential for failure + return to_store /** diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 23b1ad5126694..f13e90719c1dc 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -1,16 +1,13 @@ /mob/living/carbon/human/dummy real_name = "Test Dummy" + status_flags = GODMODE|CANPUSH mouse_drag_pointer = MOUSE_INACTIVE_POINTER visual_only_organs = TRUE var/in_use = FALSE INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) -/mob/living/carbon/human/dummy/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_GODMODE, INNATE_TRAIT) - /mob/living/carbon/human/dummy/Destroy() in_use = FALSE return ..() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 903d489846ab2..5f008af504590 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -322,7 +322,7 @@ var/mob/living/carbon/human/human_user = human_or_ghost_user if(href_list["add_citation"]) var/max_fine = CONFIG_GET(number/maxfine) - var/citation_name = tgui_input_text(human_user, "Citation crime", "Security HUD", max_length = MAX_MESSAGE_LEN) + var/citation_name = tgui_input_text(human_user, "Citation crime", "Security HUD") var/fine = tgui_input_number(human_user, "Citation fine", "Security HUD", 50, max_fine, 5) if(!fine || !target_record || !citation_name || !allowed_access || !isnum(fine) || fine > max_fine || fine <= 0 || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) return @@ -337,7 +337,7 @@ return if(href_list["add_crime"]) - var/crime_name = tgui_input_text(human_user, "Crime name", "Security HUD", max_length = MAX_MESSAGE_LEN) + var/crime_name = tgui_input_text(human_user, "Crime name", "Security HUD") if(!target_record || !crime_name || !allowed_access || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) return @@ -350,7 +350,7 @@ return if(href_list["add_note"]) - var/new_note = tgui_input_text(human_user, "Security note", "Security Records", max_length = MAX_MESSAGE_LEN, multiline = TRUE) + var/new_note = tgui_input_text(human_user, "Security note", "Security Records", multiline = TRUE) if(!target_record || !new_note || !allowed_access || !human_user.canUseHUD() || !HAS_TRAIT(human_user, TRAIT_SECURITY_HUD)) return @@ -1074,17 +1074,6 @@ if(use_random_name) fully_replace_character_name(real_name, generate_random_mob_name()) -///Proc used to prevent syndicate monkeys and player-selectable Pun Pun able to use objects while stuck in monkey mode. -/mob/living/carbon/human/proc/make_clever_and_no_dna_scramble() - dna.add_mutation(/datum/mutation/human/clever) - // Can't make them human or nonclever. At least not with the easy and boring way out. - for(var/datum/mutation/human/mutation as anything in dna.mutations) - mutation.mutadone_proof = TRUE - mutation.instability = 0 - - // Extra backup! - ADD_TRAIT(src, TRAIT_NO_DNA_SCRAMBLE, SPECIES_TRAIT) - /mob/living/carbon/human/species/abductor race = /datum/species/abductor diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 3e2248914dcf0..84b2aa8534d7b 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -317,7 +317,7 @@ clone.pitch = pitch dna.transfer_identity(clone, transfer_SE = TRUE, transfer_species = TRUE) - clone.dress_up_as_job(SSjob.get_job(job)) + clone.dress_up_as_job(SSjob.GetJob(job)) for(var/datum/quirk/original_quircks as anything in quirks) clone.add_quirk(original_quircks.type, override_client = client) diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 7d996bfc1bc5e..fc23160ac013e 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -841,15 +841,13 @@ generate/load female uniform sprites matching all previously decided variables var/mutable_appearance/standing // this is the actual resulting MA var/icon/building_icon // used to construct an icon across multiple procs before converting it to MA - /// DOPPLER SHIFT REMOVAL BEGIN - see below; migrating this down to better support hybrids of female critter + digi or other legs - /*if(female_uniform) + if(female_uniform) building_icon = wear_female_version( icon_state = t_state, icon = file2use, type = female_uniform, greyscale_colors = greyscale_colors, - )*/ - /// DOPPLER SHIFT REMOVAL END + ) if(!isinhands && is_digi && (supports_variations_flags & CLOTHING_DIGITIGRADE_MASK)) building_icon = wear_digi_version( base_icon = building_icon || icon(file2use, t_state), @@ -857,15 +855,6 @@ generate/load female uniform sprites matching all previously decided variables greyscale_config = digitigrade_greyscale_config_worn || greyscale_config_worn, greyscale_colors = digitigrade_greyscale_colors || greyscale_colors || color, ) - /// DOPPLER SHIFT ADDITION BEGIN - we migrate this down here & use building_icon to allow for auto-generated digi sprites to still support ladies - if(female_uniform) - building_icon = wear_female_version( - icon_state = t_state, - icon = istype(building_icon) ? building_icon : file2use, - type = female_uniform, - greyscale_colors = greyscale_colors, - ) - /// DOPPLER SHIFT ADDITION END if(building_icon) standing = mutable_appearance(building_icon, layer = -layer2use) diff --git a/code/modules/mob/living/carbon/human/monkey.dm b/code/modules/mob/living/carbon/human/monkey.dm index de7eb94f39f3f..e63b35ab42af4 100644 --- a/code/modules/mob/living/carbon/human/monkey.dm +++ b/code/modules/mob/living/carbon/human/monkey.dm @@ -48,11 +48,6 @@ GLOBAL_DATUM(the_one_and_only_punpun, /mob/living/carbon/human/species/monkey/pu var/memory_saved = FALSE /mob/living/carbon/human/species/monkey/punpun/Initialize(mapload) - // 1 Pun Pun should exist - REGISTER_REQUIRED_MAP_ITEM(1, 1) - if(mapload && (locate(/datum/station_trait/job/pun_pun) in SSstation.station_traits)) - new /obj/effect/landmark/start/pun_pun(loc) //Pun Pun is a crewmember, and may late-join. - return INITIALIZE_HINT_QDEL Read_Memory() var/name_to_use = name @@ -70,8 +65,8 @@ GLOBAL_DATUM(the_one_and_only_punpun, /mob/living/carbon/human/species/monkey/pu if(!GLOB.the_one_and_only_punpun && mapload) GLOB.the_one_and_only_punpun = src - else if(GLOB.the_one_and_only_punpun) - ADD_TRAIT(src, TRAIT_DONT_WRITE_MEMORY, INNATE_TRAIT) //faaaaaaake! + // 1 Pun Pun should exist + REGISTER_REQUIRED_MAP_ITEM(1, 1) fully_replace_character_name(real_name, name_to_use) diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 0f27f0e47e69b..669b4f6b18dbc 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -54,7 +54,7 @@ default_color = new_ethereal.dna.features["ethcolor"] RegisterSignal(new_ethereal, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag_act)) RegisterSignal(new_ethereal, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp_act)) - RegisterSignal(new_ethereal, COMSIG_ATOM_SABOTEUR_ACT, PROC_REF(hit_by_saboteur)) + RegisterSignal(new_ethereal, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) RegisterSignal(new_ethereal, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) RegisterSignal(new_ethereal, COMSIG_LIVING_HEALTH_UPDATE, PROC_REF(refresh_light_color)) ethereal_light = new_ethereal.mob_light(light_type = /obj/effect/dummy/lighting_obj/moblight/species) @@ -71,7 +71,7 @@ UnregisterSignal(former_ethereal, list( COMSIG_ATOM_EMAG_ACT, COMSIG_ATOM_EMP_ACT, - COMSIG_ATOM_SABOTEUR_ACT, + COMSIG_HIT_BY_SABOTEUR, COMSIG_LIGHT_EATER_ACT, COMSIG_LIVING_HEALTH_UPDATE, )) @@ -124,13 +124,14 @@ if(EMP_HEAVY) addtimer(CALLBACK(src, PROC_REF(stop_emp), source), 20 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) //We're out for 20 seconds -/datum/species/ethereal/proc/hit_by_saboteur(mob/living/carbon/human/source, disrupt_duration) +/datum/species/ethereal/proc/on_saboteur(mob/living/carbon/human/source, disrupt_duration) + SIGNAL_HANDLER EMPeffect = TRUE refresh_light_color(source) to_chat(source, span_warning("Something inside of you crackles in a bad way.")) source.take_bodypart_damage(burn = 3, wound_bonus = CANT_WOUND) addtimer(CALLBACK(src, PROC_REF(stop_emp), source), disrupt_duration, TIMER_UNIQUE|TIMER_OVERRIDE) - return TRUE + return COMSIG_SABOTEUR_SUCCESS /datum/species/ethereal/proc/on_emag_act(mob/living/carbon/human/source, mob/user) SIGNAL_HANDLER diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index bcf0e1c0de2de..811ae45ea8cb3 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -724,7 +724,7 @@ var/mob/living/recipient = tgui_input_list(telepath, "Choose a telepathic message recipient", "Telepathy", sort_names(recipient_options)) if(isnull(recipient) || telepath.stat == DEAD || !is_species(telepath, /datum/species/jelly/stargazer)) return - var/msg = tgui_input_text(telepath, title = "Telepathy", max_length = MAX_MESSAGE_LEN) + var/msg = tgui_input_text(telepath, title = "Telepathy") if(isnull(msg) || telepath.stat == DEAD || !is_species(telepath, /datum/species/jelly/stargazer)) return if(!(recipient in oview(telepath))) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index db6ad1a80e3fd..01531b77d63a9 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -147,7 +147,7 @@ /mob/living/carbon/proc/check_breath(datum/gas_mixture/breath) . = TRUE - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) failed_last_breath = FALSE clear_alert(ALERT_NOT_ENOUGH_OXYGEN) return @@ -665,8 +665,6 @@ * * capped (optional) default True used to cap step mode */ /mob/living/carbon/adjust_bodytemperature(amount, min_temp=0, max_temp=INFINITY, use_insulation=FALSE, use_steps=FALSE, capped=TRUE) - if(HAS_TRAIT(src, TRAIT_HYPOTHERMIC) && amount > 0) //Prevent warming up - return // apply insulation to the amount of change if(use_insulation) amount *= (1 - get_insulation_protection(bodytemperature + amount)) diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index a6078afc9d521..1ae6d3357e594 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -16,7 +16,6 @@ * * sharpness - Sharpness of the weapon. * * attack_direction - Direction of the attack from the attacker to [src]. * * attacking_item - Item that is attacking [src]. - * * wound_clothing - If this should cause damage to clothing. * * Returns the amount of damage dealt. */ @@ -32,7 +31,6 @@ sharpness = NONE, attack_direction = null, attacking_item, - wound_clothing = TRUE, ) SHOULD_CALL_PARENT(TRUE) var/damage_amount = damage @@ -42,7 +40,7 @@ if(damage_amount <= 0) return 0 - SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMAGE, damage_amount, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, attacking_item, wound_clothing) + SEND_SIGNAL(src, COMSIG_MOB_APPLY_DAMAGE, damage_amount, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, attacking_item) var/damage_dealt = 0 switch(damagetype) @@ -59,7 +57,6 @@ sharpness = sharpness, attack_direction = attack_direction, damage_source = attacking_item, - wound_clothing = wound_clothing, )) update_damage_overlays() damage_dealt = actual_hit.get_damage() - delta // Unfortunately bodypart receive_damage doesn't return damage dealt so we do it manually @@ -78,7 +75,6 @@ sharpness = sharpness, attack_direction = attack_direction, damage_source = attacking_item, - wound_clothing = wound_clothing, )) update_damage_overlays() damage_dealt = actual_hit.get_damage() - delta // See above @@ -93,7 +89,7 @@ if(BRAIN) damage_dealt = -1 * adjustOrganLoss(ORGAN_SLOT_BRAIN, damage_amount) - SEND_SIGNAL(src, COMSIG_MOB_AFTER_APPLY_DAMAGE, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus,sharpness, attack_direction, attacking_item, wound_clothing) + SEND_SIGNAL(src, COMSIG_MOB_AFTER_APPLY_DAMAGE, damage_dealt, damagetype, def_zone, blocked, wound_bonus, bare_wound_bonus, sharpness, attack_direction, attacking_item) return damage_dealt /** @@ -270,7 +266,7 @@ return bruteloss /mob/living/proc/can_adjust_brute_loss(amount, forced, required_bodytype) - if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) + if(!forced && (status_flags & GODMODE)) return FALSE if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_BRUTE_DAMAGE, BRUTE, amount, forced) & COMPONENT_IGNORE_CHANGE) return FALSE @@ -289,7 +285,7 @@ /mob/living/proc/setBruteLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype = ALL) - if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) + if(!forced && (status_flags & GODMODE)) return FALSE . = bruteloss bruteloss = amount @@ -305,7 +301,7 @@ /mob/living/proc/can_adjust_oxy_loss(amount, forced, required_biotype, required_respiration_type) if(!forced) - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return FALSE if (required_respiration_type) var/obj/item/organ/internal/lungs/affected_lungs = get_organ_slot(ORGAN_SLOT_LUNGS) @@ -332,7 +328,7 @@ /mob/living/proc/setOxyLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL, required_respiration_type = ALL) if(!forced) - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return FALSE var/obj/item/organ/internal/lungs/affected_lungs = get_organ_slot(ORGAN_SLOT_LUNGS) @@ -354,7 +350,7 @@ return toxloss /mob/living/proc/can_adjust_tox_loss(amount, forced, required_biotype = ALL) - if(!forced && (HAS_TRAIT(src, TRAIT_GODMODE) || !(mob_biotypes & required_biotype))) + if(!forced && ((status_flags & GODMODE) || !(mob_biotypes & required_biotype))) return FALSE if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_TOX_DAMAGE, TOX, amount, forced) & COMPONENT_IGNORE_CHANGE) return FALSE @@ -389,7 +385,7 @@ /mob/living/proc/setToxLoss(amount, updating_health = TRUE, forced = FALSE, required_biotype = ALL) - if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) + if(!forced && (status_flags & GODMODE)) return FALSE if(!forced && !(mob_biotypes & required_biotype)) return FALSE @@ -405,7 +401,7 @@ return fireloss /mob/living/proc/can_adjust_fire_loss(amount, forced, required_bodytype) - if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) + if(!forced && (status_flags & GODMODE)) return FALSE if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_BURN_DAMAGE, BURN, amount, forced) & COMPONENT_IGNORE_CHANGE) return FALSE @@ -423,7 +419,7 @@ updatehealth() /mob/living/proc/setFireLoss(amount, updating_health = TRUE, forced = FALSE, required_bodytype = ALL) - if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) + if(!forced && (status_flags & GODMODE)) return 0 . = fireloss fireloss = amount @@ -446,7 +442,7 @@ return staminaloss /mob/living/proc/can_adjust_stamina_loss(amount, forced, required_biotype = ALL) - if(!forced && (!(mob_biotypes & required_biotype) || HAS_TRAIT(src, TRAIT_GODMODE))) + if(!forced && (!(mob_biotypes & required_biotype) || status_flags & GODMODE)) return FALSE if(SEND_SIGNAL(src, COMSIG_LIVING_ADJUST_STAMINA_DAMAGE, STAMINA, amount, forced) & COMPONENT_IGNORE_CHANGE) return FALSE @@ -468,7 +464,7 @@ return delta /mob/living/proc/setStaminaLoss(amount, updating_stamina = TRUE, forced = FALSE, required_biotype = ALL) - if(!forced && HAS_TRAIT(src, TRAIT_GODMODE)) + if(!forced && (status_flags & GODMODE)) return 0 if(!forced && !(mob_biotypes & required_biotype)) return 0 diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 59bc1a9f4d8ed..7c2af9a15724e 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -11,7 +11,6 @@ */ /mob/living/proc/Life(seconds_per_tick = SSMOBS_DT, times_fired) set waitfor = FALSE - SHOULD_NOT_SLEEP(TRUE) var/signal_result = SEND_SIGNAL(src, COMSIG_LIVING_LIFE, seconds_per_tick, times_fired) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index fc494befd9053..005eff4d542c8 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -798,7 +798,7 @@ /mob/living/proc/updatehealth() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return set_health(maxHealth - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()) update_stat() @@ -1438,7 +1438,7 @@ * Returns a mob (what our mob turned into) or null (if we failed). */ /mob/living/proc/wabbajack(what_to_randomize, change_flags = WABBAJACK) - if(stat == DEAD || HAS_TRAIT(src, TRAIT_GODMODE) || HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) + if(stat == DEAD || (GODMODE & status_flags) || HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return if(SEND_SIGNAL(src, COMSIG_LIVING_PRE_WABBAJACKED, what_to_randomize) & STOP_WABBAJACK) @@ -2254,9 +2254,6 @@ GLOBAL_LIST_EMPTY(fire_appearances) if(isnull(.)) return - if(. <= UNCONSCIOUS || new_stat >= UNCONSCIOUS) - update_body() // to update eyes - switch(.) //Previous stat. if(CONSCIOUS) if(stat >= UNCONSCIOUS) @@ -2742,7 +2739,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) var/picked_theme = tgui_input_list(admin, "Pick the guardian theme.", "Guardian Controller", list(GUARDIAN_THEME_TECH, GUARDIAN_THEME_MAGIC, GUARDIAN_THEME_CARP, GUARDIAN_THEME_MINER, "Random")) if(picked_theme == "Random") picked_theme = null //holopara code handles not having a theme by giving a random one - var/picked_name = tgui_input_text(admin, "Name the guardian, leave empty to let player name it.", "Guardian Controller", max_length = MAX_NAME_LEN) + var/picked_name = tgui_input_text(admin, "Name the guardian, leave empty to let player name it.", "Guardian Controller") var/picked_color = input(admin, "Set the guardian's color, cancel to let player set it.", "Guardian Controller", "#ffffff") as color|null if(tgui_alert(admin, "Confirm creation.", "Guardian Controller", list("Yes", "No")) != "Yes") return diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 6f2fe9afd8970..88525b91bd874 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -539,7 +539,7 @@ return 20 /mob/living/narsie_act() - if(HAS_TRAIT(src, TRAIT_GODMODE) || QDELETED(src)) + if(status_flags & GODMODE || QDELETED(src)) return if(GLOB.cult_narsie && GLOB.cult_narsie.souls_needed[src]) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index fc488471861d3..92c853ba72c4c 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -345,12 +345,7 @@ to_chat(usr, span_alert("[can_evac_or_fail_reason]")) return - var/reason = tgui_input_text( - src, - "What is the nature of your emergency? ([CALL_SHUTTLE_REASON_LENGTH] characters required.)", - "Confirm Shuttle Call", - max_length = MAX_MESSAGE_LEN, - ) + var/reason = tgui_input_text(src, "What is the nature of your emergency? ([CALL_SHUTTLE_REASON_LENGTH] characters required.)", "Confirm Shuttle Call") if(incapacitated) return @@ -783,26 +778,12 @@ button_icon = 'icons/mob/actions/actions_AI.dmi' button_icon_state = "ai_malf_core" -/datum/action/innate/core_return/Grant(mob/new_owner) - . = ..() - RegisterSignal(new_owner, COMSIG_SILICON_AI_VACATE_APC, PROC_REF(returned_to_core)) - -/datum/action/innate/core_return/proc/returned_to_core(datum/source) - SIGNAL_HANDLER - - Remove(source) - UnregisterSignal(source, COMSIG_SILICON_AI_VACATE_APC) - /datum/action/innate/core_return/Activate() var/obj/machinery/power/apc/apc = owner.loc if(!istype(apc)) to_chat(owner, span_notice("You are already in your Main Core.")) return - if(SEND_SIGNAL(owner, COMSIG_SILICON_AI_CORE_STATUS) & COMPONENT_CORE_ALL_GOOD) - apc.malfvacate() - else - to_chat(owner, span_danger("Linked core not detected!")) - return + apc.malfvacate() qdel(src) /mob/living/silicon/ai/proc/toggle_camera_light() @@ -1039,7 +1020,7 @@ malf_picker.processing_time += 10 var/area/apcarea = apc.area - var/datum/ai_module/malf/destructive/nuke_station/doom_n_boom = locate(/datum/ai_module/malf/destructive/nuke_station) in malf_picker.possible_modules["Destructive Modules"] + var/datum/ai_module/destructive/nuke_station/doom_n_boom = locate(/datum/ai_module/destructive/nuke_station) in malf_picker.possible_modules["Destructive Modules"] if(doom_n_boom && (is_type_in_list (apcarea, doom_n_boom.discount_areas)) && !(is_type_in_list (apcarea, doom_n_boom.hacked_command_areas))) doom_n_boom.hacked_command_areas += apcarea doom_n_boom.cost = max(50, 130 - (length(doom_n_boom.hacked_command_areas) * 20)) @@ -1191,7 +1172,7 @@ /mob/living/silicon/ai/get_exp_list(minutes) . = ..() - var/datum/job/ai/ai_job_ref = SSjob.get_job_type(/datum/job/ai) + var/datum/job/ai/ai_job_ref = SSjob.GetJobType(/datum/job/ai) .[ai_job_ref.title] = minutes diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index efb2366ca1234..a71074f9a014c 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -99,13 +99,7 @@ to_chat(src, span_notice("Please wait [DisplayTimeText(announcing_vox - world.time)].")) return - var/message = tgui_input_text( - src, - "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", - "Announcement", - src.last_announcement, - max_length = MAX_MESSAGE_LEN, - ) + var/message = tgui_input_text(src, "WARNING: Misuse of this verb can result in you being job banned. More help is available in 'Announcement Help'", "Announcement", src.last_announcement) if(!message || announcing_vox > world.time) return diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 4adfe057c59fb..b11f125d38ce4 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -13,13 +13,13 @@ view_core() // Handle power damage (oxy) - if (battery <= 0) - to_chat(src, span_warning("Your backup battery's output drops below usable levels. It takes only a moment longer for your systems to fail, corrupted and unusable.")) - adjustOxyLoss(200) - if(aiRestorePowerRoutine) // Lost power - battery-- + if (!battery) + to_chat(src, span_warning("Your backup battery's output drops below usable levels. It takes only a moment longer for your systems to fail, corrupted and unusable.")) + adjustOxyLoss(200) + else + battery-- else // Gain Power if (battery < 200) @@ -47,7 +47,7 @@ return !T || !A || ((!A.power_equip || isspaceturf(T)) && !is_type_in_list(loc, list(/obj/item, /obj/vehicle/sealed/mecha))) /mob/living/silicon/ai/updatehealth() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return var/old_health = health @@ -63,7 +63,7 @@ SEND_SIGNAL(src, COMSIG_LIVING_HEALTH_UPDATE) /mob/living/silicon/ai/update_stat() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return if(stat != DEAD) if(health <= HEALTH_THRESHOLD_DEAD) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 1d3562d9dfb08..2f670c5fbe21b 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -19,6 +19,7 @@ AddElement(/datum/element/ridable, /datum/component/riding/creature/cyborg) RegisterSignal(src, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, PROC_REF(charge)) RegisterSignal(src, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) + RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) robot_modules_background = new() robot_modules_background.icon_state = "block" @@ -451,13 +452,12 @@ return COMPONENT_BLOCK_LIGHT_EATER /// special handling for getting shot with a light disruptor/saboteur e.g. the fisher -/mob/living/silicon/robot/on_saboteur(datum/source, disrupt_duration) - . = ..() +/mob/living/silicon/robot/proc/on_saboteur(datum/source, disrupt_duration) + SIGNAL_HANDLER if(lamp_enabled) toggle_headlamp(TRUE) balloon_alert(src, "headlamp off!") - COOLDOWN_START(src, disabled_time, disrupt_duration) - return TRUE + return COMSIG_SABOTEUR_SUCCESS /** * Handles headlamp smashing @@ -489,9 +489,6 @@ */ /mob/living/silicon/robot/proc/toggle_headlamp(turn_off = FALSE, update_color = FALSE) //if both lamp is enabled AND the update_color flag is on, keep the lamp on. Otherwise, if anything listed is true, disable the lamp. - if(!COOLDOWN_FINISHED(src, disabled_time)) - balloon_alert(src, "disrupted!") - return FALSE if(!(update_color && lamp_enabled) && (turn_off || lamp_enabled || update_color || !lamp_functional || stat || low_power_mode)) set_light_on(lamp_functional && stat != DEAD && lamp_doom) //If the lamp isn't broken and borg isn't dead, doomsday borgs cannot disable their light fully. set_light_color(COLOR_RED) //This should only matter for doomsday borgs, as any other time the lamp will be off and the color not seen @@ -666,7 +663,7 @@ return ..() /mob/living/silicon/robot/update_stat() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return if(stat != DEAD) if(health <= -maxHealth) //die only once @@ -1015,7 +1012,7 @@ /mob/living/silicon/robot/get_exp_list(minutes) . = ..() - var/datum/job/cyborg/cyborg_job_ref = SSjob.get_job_type(/datum/job/cyborg) + var/datum/job/cyborg/cyborg_job_ref = SSjob.GetJobType(/datum/job/cyborg) .[cyborg_job_ref.title] = minutes diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 3ab7b25f8268d..16da8d89783af 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -287,7 +287,7 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real if (!getBruteLoss()) to_chat(user, span_warning("[src] is already in good condition!")) return - if (!tool.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) //The welder has 1u of fuel consumed by its afterattack, so we don't need to worry about taking any away. + if (!tool.tool_start_check(user, amount=1)) //The welder has 1u of fuel consumed by its afterattack, so we don't need to worry about taking any away. return if(src == user) to_chat(user, span_notice("You start fixing yourself...")) diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm index e85dba4a134d3..e6af597bc60b7 100644 --- a/code/modules/mob/living/silicon/robot/robot_defines.dm +++ b/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -42,8 +42,6 @@ ///If this is a path, this gets created as an object in Initialize. var/obj/item/stock_parts/power_store/cell = /obj/item/stock_parts/power_store/cell/high - ///If we've been forcibly disabled for a temporary amount of time. - COOLDOWN_DECLARE(disabled_time) ///If the lamp isn't broken. var/lamp_functional = TRUE ///If the lamp is turned on diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 68579730e8dd0..dbfe987cac57a 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -335,7 +335,7 @@ if(new_dest) set_destination(new_dest) if("setid") - var/new_id = tgui_input_text(user, "Enter ID", "ID Assignment", id, max_length = MAX_NAME_LEN) + var/new_id = tgui_input_text(user, "Enter ID", "ID Assignment", id, MAX_NAME_LEN) if(new_id) set_id(new_id) name = "\improper MULEbot [new_id]" diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index d946367f6c3bd..ea09441687202 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -143,6 +143,7 @@ ) AddElement(/datum/element/connect_loc, loc_connections) AddComponent(/datum/component/security_vision, judgement_criteria = NONE, update_judgement_criteria = CALLBACK(src, PROC_REF(judgement_criteria))) + RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) /mob/living/simple_animal/bot/secbot/Destroy() QDEL_NULL(weapon) @@ -166,12 +167,12 @@ GLOB.move_manager.stop_looping(src) last_found = world.time -/mob/living/simple_animal/bot/secbot/on_saboteur(datum/source, disrupt_duration) - . = ..() +/mob/living/simple_animal/bot/secbot/proc/on_saboteur(datum/source, disrupt_duration) + SIGNAL_HANDLER if(!(security_mode_flags & SECBOT_SABOTEUR_AFFECTED)) security_mode_flags |= SECBOT_SABOTEUR_AFFECTED addtimer(CALLBACK(src, PROC_REF(remove_saboteur_effect)), disrupt_duration) - return TRUE + return COMSIG_SABOTEUR_SUCCESS /mob/living/simple_animal/bot/secbot/proc/remove_saboteur_effect() security_mode_flags &= ~SECBOT_SABOTEUR_AFFECTED diff --git a/code/modules/mob/living/simple_animal/damage_procs.dm b/code/modules/mob/living/simple_animal/damage_procs.dm index 075b40afeeba7..7a8a2fcb63b91 100644 --- a/code/modules/mob/living/simple_animal/damage_procs.dm +++ b/code/modules/mob/living/simple_animal/damage_procs.dm @@ -4,11 +4,11 @@ * Arguments: * * amount The amount that will be used to adjust the mob's health * * updating_health If the mob's health should be immediately updated to the new value - * * forced If we should force update the adjustment of the mob's health no matter the restrictions, like TRAIT_GODMODE + * * forced If we should force update the adjustment of the mob's health no matter the restrictions, like GODMODE */ /mob/living/simple_animal/proc/adjustHealth(amount, updating_health = TRUE, forced = FALSE) . = FALSE - if(forced || !HAS_TRAIT(src, TRAIT_GODMODE)) + if(forced || !(status_flags & GODMODE)) bruteloss = round(clamp(bruteloss + amount, 0, maxHealth * 2), DAMAGE_PRECISION) if(updating_health) updatehealth() diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 5b0cfdcc51e7e..0803d96a706b9 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -254,8 +254,8 @@ return FALSE if(ismob(the_target)) //Target is in godmode, ignore it. - var/mob/mob = the_target - if(HAS_TRAIT(mob, TRAIT_GODMODE)) + var/mob/M = the_target + if(M.status_flags & GODMODE) return FALSE if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 3cfc4e7dd35c7..cde5ecdbc05a8 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -356,7 +356,7 @@ for(var/obj/item/to_strip in new_clown.get_equipped_items()) new_clown.dropItemToGround(to_strip) - new_clown.dress_up_as_job(SSjob.get_job_type(/datum/job/clown)) + new_clown.dress_up_as_job(SSjob.GetJobType(/datum/job/clown)) clowned_mob_refs += clown_ref return TRUE @@ -527,7 +527,8 @@ . = ..() if(isliving(arrived) && holder_animal) var/mob/living/possessor = arrived - possessor.add_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM, TRAIT_GODMODE), STASIS_MUTE) + possessor.add_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM), STASIS_MUTE) + possessor.status_flags |= GODMODE possessor.mind.transfer_to(holder_animal) var/datum/action/exit_possession/escape = new(holder_animal) escape.Grant(holder_animal) @@ -535,7 +536,8 @@ /obj/structure/closet/stasis/dump_contents(kill = TRUE) for(var/mob/living/possessor in src) - possessor.remove_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM, TRAIT_GODMODE), STASIS_MUTE) + possessor.remove_traits(list(TRAIT_UNDENSE, TRAIT_NO_TRANSFORM), STASIS_MUTE) + possessor.status_flags &= ~GODMODE if(kill || !isanimal_or_basicmob(loc)) possessor.investigate_log("has died from [src].", INVESTIGATE_DEATHS) possessor.death(FALSE) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 831589ceaf632..2d16cc169202a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -175,7 +175,7 @@ return FALSE return ..() -/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ") // DOPPLER EDIT ADDITION - separation +/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE) if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit return return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 3d1b56d77e131..6bf09bc5a490e 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -72,40 +72,29 @@ Difficulty: Hard /datum/action/innate/megafauna_attack/cross_blasts, /datum/action/innate/megafauna_attack/blink_spam) - /// range on burst aoe - var/burst_range = 3 - /// range on cross blast beams - var/beam_range = 5 - /// how fast chasers are currently - var/chaser_speed = 3 - /// base delay for major attacks - var/major_attack_cooldown = 6 SECONDS - /// base delay for spawning chasers - var/chaser_cooldown_time = 10.1 SECONDS - /// the current chaser cooldown - COOLDOWN_DECLARE(chaser_cooldown) - /// base delay for making arenas - var/arena_cooldown_time = 20 SECONDS - COOLDOWN_DECLARE(arena_cooldown) - /// if we're doing something that requires us to stand still and not attack - var/blinking = FALSE - /// weakref to our "home base" beacon - var/datum/weakref/spawned_beacon_ref - /// If we are sitting at home base and not doing anything - var/sitting_at_center = TRUE - /// timer id for any active attempts to "go home" - var/respawn_timer_id = null + var/burst_range = 3 //range on burst aoe + var/beam_range = 5 //range on cross blast beams + var/chaser_speed = 3 //how fast chasers are currently + var/major_attack_cooldown = 6 SECONDS //base cooldown for major attacks + var/chaser_cooldown_time = 10.1 SECONDS //base cooldown for spawning chasers + var/chaser_cooldown = 0 + var/arena_cooldown_time = 20 SECONDS //base cooldown for making arenas + var/arena_cooldown = 0 + var/blinking = FALSE //if we're doing something that requires us to stand still and not attack + var/obj/effect/hierophant/spawned_beacon //the beacon we teleport back to + var/timeout_time = 15 //after this many Life() ticks with no target, we return to our beacon + var/did_reset = TRUE //if we timed out, returned to our beacon, and healed some var/list/kill_phrases = list("Wsyvgi sj irivkc xettih. Vitemvmrk...", "Irivkc wsyvgi jsyrh. Vitemvmrk...", "Jyip jsyrh. Egxmzexmrk vitemv gcgpiw...", "Kix fiex. Liepmrk...") var/list/target_phrases = list("Xevkix psgexih.", "Iriqc jsyrh.", "Eguymvih xevkix.") /mob/living/simple_animal/hostile/megafauna/hierophant/Initialize(mapload) . = ..() - spawned_beacon_ref = WEAKREF(new /obj/effect/hierophant(loc)) + spawned_beacon = new(loc) AddComponent(/datum/component/boss_music, 'sound/lavaland/hiero_boss.ogg', 145 SECONDS) /mob/living/simple_animal/hostile/megafauna/hierophant/Destroy() - QDEL_NULL(spawned_beacon_ref) - return ..() + QDEL_NULL(spawned_beacon) + . = ..() /datum/action/innate/megafauna_attack/blink name = "Blink To Target" @@ -138,11 +127,11 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/hierophant/update_cooldowns(list/cooldown_updates, ignore_staggered = FALSE) . = ..() if(cooldown_updates[COOLDOWN_UPDATE_SET_CHASER]) - COOLDOWN_START(src, chaser_cooldown, cooldown_updates[COOLDOWN_UPDATE_SET_CHASER]) + chaser_cooldown = world.time + cooldown_updates[COOLDOWN_UPDATE_SET_CHASER] if(cooldown_updates[COOLDOWN_UPDATE_ADD_CHASER]) chaser_cooldown += cooldown_updates[COOLDOWN_UPDATE_ADD_CHASER] if(cooldown_updates[COOLDOWN_UPDATE_SET_ARENA]) - COOLDOWN_START(src, arena_cooldown, cooldown_updates[COOLDOWN_UPDATE_SET_ARENA]) + arena_cooldown = world.time + cooldown_updates[COOLDOWN_UPDATE_SET_ARENA] if(cooldown_updates[COOLDOWN_UPDATE_ADD_ARENA]) arena_cooldown += cooldown_updates[COOLDOWN_UPDATE_ADD_ARENA] @@ -190,7 +179,7 @@ Difficulty: Hard possibilities += "cross_blast_spam" if(get_dist(src, target) > 2) possibilities += "blink_spam" - if(COOLDOWN_FINISHED(src, chaser_cooldown)) + if(chaser_cooldown < world.time) if(prob(anger_modifier * 2)) possibilities = list("chaser_swarm") else @@ -205,7 +194,7 @@ Difficulty: Hard chaser_swarm(blink_counter, target_slowness, cross_counter) return - if(COOLDOWN_FINISHED(src, chaser_cooldown)) //if chasers are off cooldown, fire some! + if(chaser_cooldown < world.time) //if chasers are off cooldown, fire some! var/obj/effect/temp_visual/hierophant/chaser/C = new /obj/effect/temp_visual/hierophant/chaser(loc, src, target, chaser_speed, FALSE) update_cooldowns(list(COOLDOWN_UPDATE_SET_CHASER = chaser_cooldown_time)) if((prob(anger_modifier) || target.Adjacent(src)) && target != src) @@ -322,7 +311,7 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/hierophant/proc/arena_trap(mob/victim) //trap a target in an arena var/turf/T = get_turf(victim) - if(!istype(victim) || victim.stat == DEAD || !T || !COOLDOWN_FINISHED(src, arena_cooldown)) + if(!istype(victim) || victim.stat == DEAD || !T || arena_cooldown > world.time) return if((istype(get_area(T), /area/ruin/unpowered/hierophant) || istype(get_area(src), /area/ruin/unpowered/hierophant)) && victim != src) return @@ -408,30 +397,23 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/hierophant/proc/burst(turf/original, spread_speed) hierophant_burst(src, original, burst_range, spread_speed) -/mob/living/simple_animal/hostile/megafauna/hierophant/GiveTarget(new_target) +/mob/living/simple_animal/hostile/megafauna/hierophant/Life(seconds_per_tick = SSMOBS_DT, times_fired) . = ..() - if(!isnull(new_target)) - deltimer(respawn_timer_id) - respawn_timer_id = null - return - if(respawn_timer_id || client || !spawned_beacon_ref) - return - respawn_timer_id = addtimer(CALLBACK(src, PROC_REF(send_me_home)), 30 SECONDS, flags = TIMER_STOPPABLE|TIMER_DELETE_ME) - -/mob/living/simple_animal/hostile/megafauna/hierophant/proc/send_me_home() - respawn_timer_id = null - var/obj/effect/hierophant/beacon = spawned_beacon_ref.resolve() - if(!beacon || client) - return - sitting_at_center = TRUE - visible_message(span_hierophant_warning("\"Vixyvrmrk xs fewi...\"")) - blink(beacon) - adjustHealth(min((health - maxHealth) * 0.5, -250)) //heal for 50% of our missing health, minimum 10% of maximum health - wander = FALSE - if(health > maxHealth * 0.9) - visible_message(span_hierophant("\"Vitemvw gsqtpixi. Stivexmrk ex qebmqyq ijjmgmirgc.\"")) - else - visible_message(span_hierophant("\"Vitemvw gsqtpixi. Stivexmsrep ijjmgmirgc gsqtvsqmwih.\"")) + if(. && spawned_beacon && !QDELETED(spawned_beacon) && !client) + if(target || loc == spawned_beacon.loc) + timeout_time = initial(timeout_time) + else + timeout_time-- + if(timeout_time <= 0 && !did_reset) + did_reset = TRUE + visible_message(span_hierophant_warning("\"Vixyvrmrk xs fewi...\"")) + blink(spawned_beacon) + adjustHealth(min((health - maxHealth) * 0.5, -250)) //heal for 50% of our missing health, minimum 10% of maximum health + wander = FALSE + if(health > maxHealth * 0.9) + visible_message(span_hierophant("\"Vitemvw gsqtpixi. Stivexmrk ex qebmqyq ijjmgmirgc.\"")) + else + visible_message(span_hierophant("\"Vitemvw gsqtpixi. Stivexmsrep ijjmgmirgc gsqtvsqmwih.\"")) /mob/living/simple_animal/hostile/megafauna/hierophant/death() if(health > 0 || stat == DEAD) @@ -462,15 +444,14 @@ Difficulty: Hard . = ..() if(. && target && !targets_the_same) visible_message(span_hierophant_warning("\"[pick(target_phrases)]\"")) - var/obj/effect/hierophant/beacon = spawned_beacon_ref.resolve() - if(beacon && loc == beacon.loc && sitting_at_center) + if(spawned_beacon && loc == spawned_beacon.loc && did_reset) arena_trap(src) /mob/living/simple_animal/hostile/megafauna/hierophant/adjustHealth(amount, updating_health = TRUE, forced = FALSE) . = ..() if(src && . && !blinking) wander = TRUE - sitting_at_center = FALSE + did_reset = FALSE /mob/living/simple_animal/hostile/megafauna/hierophant/AttackingTarget(atom/attacked_target) if(!blinking) @@ -515,7 +496,7 @@ Difficulty: Hard ..() /mob/living/simple_animal/hostile/megafauna/hierophant/proc/calculate_rage() //how angry we are overall - sitting_at_center = FALSE //oh hey we're doing SOMETHING, clearly we might need to heal if we recall + did_reset = FALSE //oh hey we're doing SOMETHING, clearly we might need to heal if we recall anger_modifier = clamp(((maxHealth - health) / 42),0,50) burst_range = initial(burst_range) + round(anger_modifier * 0.08) beam_range = initial(beam_range) + round(anger_modifier * 0.12) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm index 821045b51690d..bb3b6874f043c 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/elites/goliath_broodmother.dm @@ -50,7 +50,7 @@ /datum/action/innate/elite_attack/rage, /datum/action/innate/elite_attack/call_children) - COOLDOWN_DECLARE(random_tentacle) + var/rand_tent = 0 var/list/mob/living/simple_animal/hostile/asteroid/elite/broodmother_child/children_list = list() /mob/living/simple_animal/hostile/asteroid/elite/broodmother/Initialize(mapload) @@ -108,16 +108,15 @@ . = ..() if(!.) //Checks if they are dead as a rock. return - if(health >= maxHealth * 0.5 || !COOLDOWN_FINISHED(src, random_tentacle)) - return - COOLDOWN_START(src, random_tentacle, 3 SECONDS) - var/tentacle_amount = 5 - if(health < maxHealth * 0.25) - tentacle_amount = 10 - var/list/possible_turfs = RANGE_TURFS(5, get_turf(src)) - for(var/i in 1 to tentacle_amount) - var/turf/innsmouth = pick_n_take(possible_turfs) - new /obj/effect/goliath_tentacle/broodmother(innsmouth, src) + if(health < maxHealth * 0.5 && rand_tent < world.time) + rand_tent = world.time + 30 + var/tentacle_amount = 5 + if(health < maxHealth * 0.25) + tentacle_amount = 10 + var/tentacle_loc = spiral_range_turfs(5, get_turf(src)) + for(var/i in 1 to tentacle_amount) + var/turf/t = pick_n_take(tentacle_loc) + new /obj/effect/goliath_tentacle/broodmother(t, src) /mob/living/simple_animal/hostile/asteroid/elite/broodmother/proc/tentacle_patch(target) ranged_cooldown = world.time + 15 diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm index b177cc651ecaa..30afc69c8b3e9 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/goose.dm @@ -158,11 +158,10 @@ /mob/living/simple_animal/hostile/retaliate/goose/Life(seconds_per_tick = SSMOBS_DT, times_fired) . = ..() - if(!choking || stat) - return - do_jitter_animation(50) - if(SPT_PROB(10, seconds_per_tick)) - INVOKE_ASYNC(src, PROC_REF(emote), "gasp") + if(choking && !stat) + do_jitter_animation(50) + if(SPT_PROB(10, seconds_per_tick)) + emote("gasp") /mob/living/simple_animal/hostile/retaliate/goose/proc/suffocate() if(!choking) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 179b50710c1d3..9d5041fe870a4 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -234,7 +234,7 @@ . += "There appears to be [icon2html(access_card, user)] \a [access_card] pinned to [p_them()]." /mob/living/simple_animal/update_stat() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return if(stat != DEAD) if(health <= 0) @@ -389,8 +389,8 @@ if(see_invisible < the_target.invisibility) return FALSE if(ismob(the_target)) - var/mob/mob = the_target - if(HAS_TRAIT(mob, TRAIT_GODMODE)) + var/mob/M = the_target + if(M.status_flags & GODMODE) return FALSE if (isliving(the_target)) var/mob/living/L = the_target diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 7bf067c7a120a..c0e2058f23ed2 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -10,7 +10,7 @@ /mob/living/proc/check_stun_immunity(check_flags = CANSTUN, force_stun = FALSE) SHOULD_CALL_PARENT(TRUE) - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return TRUE if(force_stun) // Does not take priority over god mode? I guess @@ -385,7 +385,7 @@ /mob/living/proc/Sleeping(amount) //Can't go below remaining duration if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, amount) & COMPONENT_NO_STUN) return - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return var/datum/status_effect/incapacitating/sleeping/S = IsSleeping() if(S) @@ -397,7 +397,7 @@ /mob/living/proc/SetSleeping(amount) //Sets remaining duration if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, amount) & COMPONENT_NO_STUN) return - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return var/datum/status_effect/incapacitating/sleeping/S = IsSleeping() if(amount <= 0) @@ -412,7 +412,7 @@ /mob/living/proc/AdjustSleeping(amount) //Adds to remaining duration if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, amount) & COMPONENT_NO_STUN) return - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return var/datum/status_effect/incapacitating/sleeping/S = IsSleeping() if(S) @@ -425,7 +425,7 @@ /mob/living/proc/PermaSleeping() if(SEND_SIGNAL(src, COMSIG_LIVING_STATUS_SLEEP, -1) & COMPONENT_NO_STUN) return - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return var/datum/status_effect/incapacitating/sleeping/S = IsSleeping() if(S) diff --git a/code/modules/mob/living/taste.dm b/code/modules/mob/living/taste.dm index 28dbbc078c5af..72adcbb43df8b 100644 --- a/code/modules/mob/living/taste.dm +++ b/code/modules/mob/living/taste.dm @@ -52,31 +52,27 @@ return NONE /mob/living/carbon/get_liked_foodtypes() - if(HAS_TRAIT(src, TRAIT_AGEUSIA)) + var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE) + // No tongue, no tastin' + if(!tongue?.sense_of_taste || HAS_TRAIT(src, TRAIT_AGEUSIA)) return NONE // Handled in here since the brain trauma can't modify taste directly (/datum/brain_trauma/severe/flesh_desire) if(HAS_TRAIT(src, TRAIT_FLESH_DESIRE)) return GORE | MEAT - var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE) - . = tongue.liked_foodtypes - if(HAS_TRAIT(src, TRAIT_VEGETARIAN)) - . &= ~MEAT + return tongue.liked_foodtypes /** * Gets food flags that this mob dislikes **/ /mob/living/proc/get_disliked_foodtypes() - if(HAS_TRAIT(src, TRAIT_VEGETARIAN)) - return MEAT return NONE /mob/living/carbon/get_disliked_foodtypes() - if(HAS_TRAIT(src, TRAIT_AGEUSIA)) - return NONE var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE) - . = tongue.disliked_foodtypes - if(HAS_TRAIT(src, TRAIT_VEGETARIAN)) - . |= MEAT + // No tongue, no tastin' + if(!tongue?.sense_of_taste || HAS_TRAIT(src, TRAIT_AGEUSIA)) + return NONE + return tongue.disliked_foodtypes /** * Gets food flags that this mob hates @@ -87,8 +83,9 @@ /mob/living/carbon/get_toxic_foodtypes() var/obj/item/organ/internal/tongue/tongue = get_organ_slot(ORGAN_SLOT_TONGUE) + // No tongue, no tastin' if(!tongue) - return ..() + return TOXIC if(HAS_TRAIT(src, TRAIT_FLESH_DESIRE)) return VEGETABLES | DAIRY | FRUIT | FRIED return tongue.toxic_foodtypes diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d86d3dd700d9c..8cffe1b766d60 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -266,7 +266,7 @@ * * ignored_mobs (optional) doesn't show any message to any mob in this list. * * visible_message_flags (optional) is the type of message being sent. */ -/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ") // DOPPLER EDIT ADDITION - separation +/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE) var/turf/T = get_turf(src) if(!T) return @@ -276,23 +276,12 @@ var/list/hearers = get_hearers_in_view(vision_distance, src) //caches the hearers and then removes ignored mobs. hearers -= ignored_mobs - //DOPPLER EDIT ADDITION BEGIN - AI QoL - for(var/mob/camera/ai_eye/ai_eye in hearers) - if(ai_eye.ai?.client && !(ai_eye.ai.stat == DEAD)) - hearers -= ai_eye - hearers |= ai_eye.ai - - for(var/obj/effect/overlay/holo_pad_hologram/holo in hearers) - if(holo.Impersonation?.client) - hearers |= holo.Impersonation - //DOPPLER EDIT ADDITION END - AI QoL - if(self_message) hearers -= src var/raw_msg = message if(visible_message_flags & EMOTE_MESSAGE) - message = "[src][separation][message]" // DOPPLER EDIT ADDITION - Better emotes + message = "[src] [message]" for(var/mob/M in hearers) if(!M.client) @@ -322,7 +311,7 @@ ///Adds the functionality to self_message. -/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE, separation = " ") // DOPPLER EDIT ADDITION - separation +/mob/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, visible_message_flags = NONE) . = ..() if(!self_message) return @@ -353,25 +342,13 @@ * * self_message (optional) is what the src mob hears. * * audible_message_flags (optional) is the type of message being sent. */ -/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ") // DOPPLER EDIT ADDITION - separation +/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE) var/list/hearers = get_hearers_in_view(hearing_distance, src) - - //DOPPLER EDIT ADDITION BEGIN - AI QoL - for(var/mob/camera/ai_eye/ai_eye in hearers) - if(ai_eye.ai?.client && !(ai_eye.ai.stat == DEAD)) - hearers -= ai_eye - hearers |= ai_eye.ai - - for(var/obj/effect/overlay/holo_pad_hologram/holo in hearers) - if(holo.Impersonation?.client) - hearers |= holo.Impersonation - //DOPPLER EDIT ADDITION END - AI QoL - if(self_message) hearers -= src var/raw_msg = message if(audible_message_flags & EMOTE_MESSAGE) - message = "[src][separation][message]" //DOPPLER EDIT CHANGE + message = "[src] [message]" for(var/mob/M in hearers) if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, audible_message_flags) && M.can_hear()) M.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags) @@ -388,7 +365,7 @@ * * deaf_message (optional) is what deaf people will see. * * hearing_distance (optional) is the range, how many tiles away the message can be heard. */ -/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE, separation = " ") // DOPPLER EDIT ADDITION - separation +/mob/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, audible_message_flags = NONE) . = ..() if(!self_message) return @@ -566,9 +543,9 @@ var/list/result = examinify.examine(src) var/atom_title = examinify.examine_title(src, thats = TRUE) SEND_SIGNAL(src, COMSIG_MOB_EXAMINING, examinify, result) - result_combined = (atom_title ? fieldset_block("[span_slightly_larger(atom_title)].", jointext(result, "
"), "examine_block") : examine_block(jointext(result, "
"))) + result_combined = (atom_title ? "[span_slightly_larger(separator_hr("[atom_title]."))]" : "") + jointext(result, "
") - to_chat(src, span_infoplain(result_combined)) + to_chat(src, examine_block(span_infoplain(result_combined))) SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, examinify) /mob/proc/blind_examine_check(atom/examined_thing) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 45e54a8475ca8..28de95ff94dd5 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -311,7 +311,7 @@ qdel(src) return new_crab -/mob/living/carbon/proc/gorillize(genetics_gorilla = FALSE) +/mob/living/carbon/proc/gorillize() if(HAS_TRAIT(src, TRAIT_NO_TRANSFORM)) return ADD_TRAIT(src, TRAIT_NO_TRANSFORM, PERMANENT_TRANSFORMATION_TRAIT) @@ -327,8 +327,7 @@ regenerate_icons() icon = null SetInvisibility(INVISIBILITY_MAXIMUM) - var/gorilla_type = genetics_gorilla ? /mob/living/basic/gorilla/genetics : /mob/living/basic/gorilla - var/mob/living/basic/gorilla/new_gorilla = new gorilla_type(get_turf(src)) + var/mob/living/basic/gorilla/new_gorilla = new (get_turf(src)) new_gorilla.set_combat_mode(TRUE) if(mind) mind.transfer_to(new_gorilla) diff --git a/code/modules/mob_spawn/ghost_roles/unused_roles.dm b/code/modules/mob_spawn/ghost_roles/unused_roles.dm index d533c2365c47b..80f584d52c2b6 100644 --- a/code/modules/mob_spawn/ghost_roles/unused_roles.dm +++ b/code/modules/mob_spawn/ghost_roles/unused_roles.dm @@ -273,7 +273,7 @@ /obj/effect/mob_spawn/ghost_role/human/syndicatespace/special(mob/living/new_spawn) . = ..() new_spawn.grant_language(/datum/language/codespeak, source = LANGUAGE_MIND) - var/datum/job/spawn_job = SSjob.get_job_type(spawner_job_path) + var/datum/job/spawn_job = SSjob.GetJobType(spawner_job_path) var/policy = get_policy(spawn_job.policy_index) if(policy) to_chat(new_spawn, span_bold("[policy]")) diff --git a/code/modules/mob_spawn/mob_spawn.dm b/code/modules/mob_spawn/mob_spawn.dm index ca724ab405857..c43164fb62a5f 100644 --- a/code/modules/mob_spawn/mob_spawn.dm +++ b/code/modules/mob_spawn/mob_spawn.dm @@ -274,7 +274,7 @@ spawned_mob.key = mob_possessor.key var/datum/mind/spawned_mind = spawned_mob.mind if(spawned_mind) - spawned_mob.mind.set_assigned_role_with_greeting(SSjob.get_job_type(spawner_job_path)) + spawned_mob.mind.set_assigned_role_with_greeting(SSjob.GetJobType(spawner_job_path)) spawned_mind.name = spawned_mob.real_name if(show_flavor) diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm index 5c8d4a2e2ee47..2c9845afe4cfd 100644 --- a/code/modules/mod/mod_core.dm +++ b/code/modules/mod/mod_core.dm @@ -358,7 +358,7 @@ /obj/item/mod/core/plasma/proc/on_mod_interaction(datum/source, mob/living/user, obj/item/thing) SIGNAL_HANDLER - return item_interaction(user, thing) + return item_interaction(thing, user) /obj/item/mod/core/plasma/item_interaction(mob/living/user, obj/item/tool, list/modifiers) return charge_plasma(tool, user) ? ITEM_INTERACT_SUCCESS : NONE diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm index 76f9063df0b9c..15dcf4f9bef94 100644 --- a/code/modules/mod/mod_theme.dm +++ b/code/modules/mod/mod_theme.dm @@ -1369,7 +1369,7 @@ /obj/item/clothing/head/mod = list( UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, - SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT|HIDEANTENNAE, + SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT, SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, CAN_OVERSLOT = TRUE, UNSEALED_MESSAGE = HELMET_UNSEAL_MESSAGE, @@ -1377,7 +1377,7 @@ ), /obj/item/clothing/suit/mod = list( UNSEALED_CLOTHING = THICKMATERIAL, - SEALED_INVISIBILITY = HIDEJUMPSUIT|HIDEMUTWINGS, + SEALED_INVISIBILITY = HIDEJUMPSUIT, CAN_OVERSLOT = TRUE, UNSEALED_MESSAGE = CHESTPLATE_UNSEAL_MESSAGE, SEALED_MESSAGE = CHESTPLATE_SEAL_MESSAGE, diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index c67fd7755d8c6..8ae22e435839b 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -517,31 +517,18 @@ /obj/item/mod/module/infiltrator/on_suit_activation() mod.wearer.add_traits(traits_to_add, MOD_TRAIT) - RegisterSignal(mod.wearer, COMSIG_TRY_MODIFY_SPEECH, PROC_REF(on_speech_modification)) - var/obj/item/organ/internal/tongue/user_tongue = mod.wearer.get_organ_slot(ORGAN_SLOT_TONGUE) - user_tongue.temp_say_mod = "states" var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) if(istype(head_cover)) head_cover.flash_protect = FLASH_PROTECTION_WELDER_HYPER_SENSITIVE /obj/item/mod/module/infiltrator/on_suit_deactivation(deleting = FALSE) mod.wearer.remove_traits(traits_to_add, MOD_TRAIT) - UnregisterSignal(mod.wearer, COMSIG_TRY_MODIFY_SPEECH) - var/obj/item/organ/internal/tongue/user_tongue = mod.wearer.get_organ_slot(ORGAN_SLOT_TONGUE) - user_tongue.temp_say_mod = initial(user_tongue.temp_say_mod) if(deleting) return var/obj/item/clothing/head_cover = mod.get_part_from_slot(ITEM_SLOT_HEAD) if(istype(head_cover)) head_cover.flash_protect = initial(head_cover.flash_protect) -/obj/item/mod/module/infiltrator/proc/on_speech_modification(datum/source) - SIGNAL_HANDLER - if(!mod.active) - return - //Prevent speech modifications if the suit is active - return PREVENT_MODIFY_SPEECH - ///Medbeam - Medbeam but built into a modsuit /obj/item/mod/module/medbeam name = "MOD medical beamgun module" @@ -558,63 +545,3 @@ /obj/item/gun/medbeam/mod name = "MOD medbeam" - -/obj/item/mod/module/stealth/wraith - name = "MOD Wraith Cloaking Module" - desc = "A more destructive adaptation of the stealth module." - icon_state = "cloak_traitor" - stealth_alpha = 30 - module_type = MODULE_ACTIVE - cooldown_time = 2 SECONDS - -/obj/item/mod/module/stealth/wraith/on_select_use(atom/target) - . = ..() - if(!. || target == mod.wearer) - return - if(get_dist(mod.wearer, target) > 6) - balloon_alert(mod.wearer, "can't reach that!") - return - if(istype(target, /obj/machinery/power/apc)) //Bit too strong for a module so this is blacklisted - balloon_alert(mod.wearer, "cant disable apc!") - return - - var/list/things_to_disrupt = list(target) - if(isliving(target)) - var/mob/living/live_target = target - things_to_disrupt += live_target.get_all_gear() - - for(var/atom/disrupted as anything in things_to_disrupt) - if(disrupted.on_saboteur(src, 1 MINUTES)) - mod.add_charge(DEFAULT_CHARGE_DRAIN * 250) - -/obj/item/mod/module/stealth/wraith/on_suit_activation() - if(bumpoff) - RegisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP, PROC_REF(unstealth)) - RegisterSignal(mod.wearer, COMSIG_LIVING_UNARMED_ATTACK, PROC_REF(on_unarmed_attack)) - RegisterSignal(mod.wearer, COMSIG_ATOM_BULLET_ACT, PROC_REF(on_bullet_act)) - RegisterSignals(mod.wearer, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED), PROC_REF(unstealth)) - animate(mod.wearer, alpha = stealth_alpha, time = 1.5 SECONDS) - drain_power(use_energy_cost) - -/obj/item/mod/module/stealth/wraith/on_suit_deactivation(deleting) - if(bumpoff) - UnregisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP) - UnregisterSignal(mod.wearer, list(COMSIG_LIVING_UNARMED_ATTACK, COMSIG_MOB_ITEM_ATTACK, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BULLET_ACT, COMSIG_ATOM_HITBY, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED)) - animate(mod.wearer, alpha = 255, time = 1.5 SECONDS) - -/obj/item/mod/module/stealth/wraith/unstealth(datum/source) - . = ..() - if(mod.active) - addtimer(CALLBACK(src, PROC_REF(on_suit_activation)), 5 SECONDS) - -/obj/item/mod/module/stealth/wraith/examine_more(mob/user) - . = ..() - . += span_info( \ - "The Wraith Module does not simply bend light around the user to obscure their visual pattern, \ - but actively attacks and overloads surrounding light emitting objects, repurposing this energy to power the suit. \ - It is possible that this technology has its origins in Spider Clan advancements, \ - but the exact source of the Wraith Module is highly disputed. \ - No group has stepped forward to claim it as their handiwork due to the political consequences of having stolen Spider Clan tech and their inevitable retaliation for such transgressions. \ - Most point fingers at Cybersun Industries, but murmurs suggest it could even be even more clandestine organizations amongst the Syndicate branches. \ - Whatever the case, if you are looking at one of these right now, don't show it to a space ninja." \ - ) diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 2a2d29bb08f6a..3b7803a517aac 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -388,6 +388,12 @@ /// Maximum range we can set. var/max_range = 5 +/obj/item/mod/module/flashlight/on_suit_activation() + RegisterSignal(mod.wearer, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) + +/obj/item/mod/module/flashlight/on_suit_deactivation(deleting = FALSE) + UnregisterSignal(mod.wearer, COMSIG_HIT_BY_SABOTEUR) + /obj/item/mod/module/flashlight/on_activation() set_light_flags(light_flags | LIGHT_ATTACHED) set_light_on(active) @@ -397,11 +403,11 @@ set_light_flags(light_flags & ~LIGHT_ATTACHED) set_light_on(active) -/obj/item/mod/module/flashlight/on_saboteur(datum/source, disrupt_duration) - . = ..() +/obj/item/mod/module/flashlight/proc/on_saboteur(datum/source, disrupt_duration) + SIGNAL_HANDLER if(active) on_deactivation() - return TRUE + return COMSIG_SABOTEUR_SUCCESS /obj/item/mod/module/flashlight/on_process(seconds_per_tick) active_power_cost = base_power * light_range @@ -958,7 +964,7 @@ /obj/item/mod/module/fishing_glove name = "MOD fishing glove module" - desc = "A MOD module that takes in an external fishing rod to enable the user to fish without having to hold one, while also making it slightly easier." + desc = "A MOD module that takes in an external fishing rod to enable the user to fish without having to hold one." icon_state = "fishing_glove" complexity = 1 overlay_state_inactive = "fishing_glove" @@ -1013,20 +1019,17 @@ var/obj/item/gloves = mod?.get_part_from_slot(ITEM_SLOT_GLOVES) if(gloves && !QDELETED(mod)) qdel(gloves.GetComponent(/datum/component/profound_fisher)) - return ..() /obj/item/mod/module/fishing_glove/on_suit_activation() - var/obj/item/gloves = mod.get_part_from_slot(ITEM_SLOT_GLOVES) - if(!gloves) + if(!equipped) return - gloves.AddComponent(/datum/component/adjust_fishing_difficulty, 5) - if(equipped) + var/obj/item/gloves = mod.get_part_from_slot(ITEM_SLOT_GLOVES) + if(gloves) gloves.AddComponent(/datum/component/profound_fisher, equipped) /obj/item/mod/module/fishing_glove/on_suit_deactivation(deleting = FALSE) var/obj/item/gloves = mod.get_part_from_slot(ITEM_SLOT_GLOVES) if(gloves && !deleting) - qdel(gloves.GetComponent(/datum/component/adjust_fishing_difficulty)) qdel(gloves.GetComponent(/datum/component/profound_fisher)) /obj/item/mod/module/shock_absorber diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm index 22c30cf5c36c2..0f44570201776 100644 --- a/code/modules/mod/modules/modules_medical.dm +++ b/code/modules/mod/modules/modules_medical.dm @@ -195,7 +195,7 @@ /obj/projectile/organ/on_hit(atom/target, blocked = 0, pierce_hit) . = ..() - if(!isliving(target)) + if(!ishuman(target)) organ.forceMove(drop_location()) organ = null return diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index d8e41c67cb5d6..4f4a8fcc17016 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -139,6 +139,7 @@ UpdateDisplay() if(has_light) add_item_action(/datum/action/item_action/toggle_computer_light) + RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) if(inserted_disk) inserted_disk = new inserted_disk(src) if(internal_cell) @@ -752,16 +753,20 @@ update_item_action_buttons(force = TRUE) //force it because we added an overlay, not changed its icon return TRUE -//Disables the computer's flashlight/LED light, if it has one, for a given disrupt_duration. -/obj/item/modular_computer/on_saboteur(datum/source, disrupt_duration) - . = ..() +/** + * Disables the computer's flashlight/LED light, if it has one, for a given disrupt_duration. + * + * Called when sent COMSIG_HIT_BY_SABOTEUR. + */ +/obj/item/modular_computer/proc/on_saboteur(datum/source, disrupt_duration) + SIGNAL_HANDLER if(!has_light) return set_light_on(FALSE) update_appearance() update_item_action_buttons(force = TRUE) //force it because we added an overlay, not changed its icon COOLDOWN_START(src, disabled_time, disrupt_duration) - return TRUE + return COMSIG_SABOTEUR_SUCCESS /** * Sets the computer's light color, if it has a light. diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index 37021e4fb0f82..ae63639aef6f9 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -181,7 +181,7 @@ /obj/item/modular_computer/pda/proc/remove_pen(mob/user) - if(issilicon(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH | NEED_DEXTERITY)) //TK doesn't work even with this removed but here for readability + if(issilicon(user) || !user.can_perform_action(src, FORBID_TELEKINESIS_REACH)) //TK doesn't work even with this removed but here for readability return if(inserted_item) @@ -326,9 +326,6 @@ starting_programs = list( /datum/computer_file/program/filemanager, /datum/computer_file/program/robotact, - /datum/computer_file/program/borg_monitor, - /datum/computer_file/program/atmosscan, - /datum/computer_file/program/crew_manifest, ) /obj/item/modular_computer/pda/silicon/Initialize(mapload) diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index 7c021c72cf4fb..cbd784b1ef0d4 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -425,14 +425,6 @@ /datum/computer_file/program/borg_monitor, ) -/obj/item/modular_computer/pda/pun_pun - name = "monkey PDA" - greyscale_colors = "#ffcc66#914800" - starting_programs = list( - /datum/computer_file/program/bounty_board, - /datum/computer_file/program/emojipedia, - ) - /** * Non-roles */ diff --git a/code/modules/modular_computers/file_system/programs/borg_monitor.dm b/code/modules/modular_computers/file_system/programs/borg_monitor.dm index 48966f2f2616f..6f5b116a930c0 100644 --- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm @@ -122,7 +122,7 @@ if(robot.stat == DEAD) //Dead borgs will listen to you no longer to_chat(user, span_warning("Error -- Could not open a connection to unit:[robot]")) return FALSE - var/message = tgui_input_text(user, "Message to be sent to remote cyborg", "Send Message", max_length = MAX_MESSAGE_LEN) + var/message = tgui_input_text(user, "Message to be sent to remote cyborg", "Send Message") if(!message) return FALSE send_message(message, robot, user) diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index d1ce57bda61d8..4c1a60a0c8697 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -240,7 +240,7 @@ var/reason = "" if((requestonly && !self_paid) || !(computer.computer_id_slot?.GetID())) - reason = tgui_input_text(usr, "Reason", name, max_length = MAX_MESSAGE_LEN) + reason = tgui_input_text(usr, "Reason", name) if(isnull(reason) || ..()) return diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm index 2d51840886395..8d4db5ffb08d4 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -62,7 +62,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) switch(action) if("PRG_open_job") var/edit_job_target = params["target"] - var/datum/job/j = SSjob.get_job(edit_job_target) + var/datum/job/j = SSjob.GetJob(edit_job_target) if(!can_edit_job(j) || !can_open_job(j)) return TRUE if(opened_positions[edit_job_target] >= 0) @@ -74,7 +74,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return TRUE if("PRG_close_job") var/edit_job_target = params["target"] - var/datum/job/j = SSjob.get_job(edit_job_target) + var/datum/job/j = SSjob.GetJob(edit_job_target) if(!can_edit_job(j) || !can_close_job(j)) return TRUE //Allow instant closing without cooldown if a position has been opened before @@ -87,7 +87,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return TRUE if("PRG_priority") var/priority_target = params["target"] - var/datum/job/j = SSjob.get_job(priority_target) + var/datum/job/j = SSjob.GetJob(priority_target) if(!can_edit_job(j)) return TRUE if(j.total_positions <= j.current_positions) diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm index 3d7c735e4661c..6436e6be2b862 100644 --- a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm +++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm @@ -165,7 +165,7 @@ switch(action) if("PDA_ringSet") var/mob/living/user = usr - var/new_ringtone = tgui_input_text(user, "Enter a new ringtone", "Ringtone", ringtone, max_length = MAX_MESSAGE_LEN, encode = FALSE) + var/new_ringtone = tgui_input_text(user, "Enter a new ringtone", "Ringtone", ringtone, encode = FALSE) if(!computer.can_interact(user)) computer.balloon_alert(user, "can't reach!") return FALSE @@ -401,7 +401,7 @@ chat.can_reply = FALSE return var/target_name = target.computer.saved_identification - var/input_message = tgui_input_text(user, "Enter [mime_mode ? "emojis":"a message"]", "NT Messaging[target_name ? " ([target_name])" : ""]", max_length = MAX_MESSAGE_LEN, encode = FALSE) + var/input_message = tgui_input_text(user, "Enter [mime_mode ? "emojis":"a message"]", "NT Messaging[target_name ? " ([target_name])" : ""]", encode = FALSE) send_message(user, input_message, list(chat)) /// Helper proc that sends a message to everyone diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm index 35d707ec0f2ac..ccf0bae5f042b 100644 --- a/code/modules/pai/card.dm +++ b/code/modules/pai/card.dm @@ -27,6 +27,7 @@ update_appearance() SSpai.pai_card_list += src ADD_TRAIT(src, TRAIT_CASTABLE_LOC, INNATE_TRAIT) + RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) /obj/item/pai_card/attackby(obj/item/used, mob/user, params) if(pai && istype(used, /obj/item/encryptionkey)) @@ -70,8 +71,8 @@ emotion_icon = initial(emotion_icon) update_appearance() -/obj/item/pai_card/on_saboteur(datum/source, disrupt_duration) - . = ..() +/obj/item/pai_card/proc/on_saboteur(datum/source, disrupt_duration) + SIGNAL_HANDLER if(pai) return pai.on_saboteur(source, disrupt_duration) diff --git a/code/modules/pai/pai.dm b/code/modules/pai/pai.dm index 066a1146fd437..4268c040e2bcd 100644 --- a/code/modules/pai/pai.dm +++ b/code/modules/pai/pai.dm @@ -239,6 +239,7 @@ RegisterSignal(src, COMSIG_LIVING_CULT_SACRIFICED, PROC_REF(on_cult_sacrificed)) RegisterSignals(src, list(COMSIG_LIVING_ADJUST_BRUTE_DAMAGE, COMSIG_LIVING_ADJUST_BURN_DAMAGE), PROC_REF(on_shell_damaged)) RegisterSignal(src, COMSIG_LIVING_ADJUST_STAMINA_DAMAGE, PROC_REF(on_shell_weakened)) + RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) /mob/living/silicon/pai/make_laws() laws = new /datum/ai_laws/pai() @@ -259,7 +260,7 @@ return radio.screwdriver_act(user, tool) /mob/living/silicon/pai/updatehealth() - if(HAS_TRAIT(src, TRAIT_GODMODE)) + if(status_flags & GODMODE) return set_health(maxHealth - getBruteLoss() - getFireLoss()) update_stat() @@ -352,11 +353,11 @@ to_chat(src, span_danger("WARN: Holochasis range restrictions disabled.")) return TRUE -/mob/living/silicon/pai/on_saboteur(datum/source, disrupt_duration) - . = ..() +/mob/living/silicon/pai/proc/on_saboteur(datum/source, disrupt_duration) + SIGNAL_HANDLER set_silence_if_lower(disrupt_duration) balloon_alert(src, "muted!") - return TRUE + return COMSIG_SABOTEUR_SUCCESS /** * Resets the pAI and any emagged status. @@ -407,13 +408,7 @@ if(!master_ref) balloon_alert(user, "access denied: no master") return FALSE - var/new_laws = tgui_input_text( - user, - "Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", - "pAI Directive Configuration", - laws.supplied[1], - max_length = 300, - ) + var/new_laws = tgui_input_text(user, "Enter any additional directives you would like your pAI personality to follow. Note that these directives will not override the personality's allegiance to its imprinted master. Conflicting directives will be ignored.", "pAI Directive Configuration", laws.supplied[1], 300) if(!new_laws || !master_ref) return FALSE add_supplied_law(0, new_laws) diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index 09858d8375b4b..fc1b986ce6d67 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -170,7 +170,7 @@ GLOBAL_VAR_INIT(nt_fax_department, pick("NT HR Department", "NT Legal Department /obj/machinery/fax/multitool_act(mob/living/user, obj/item/I) if (panel_open) return - var/new_fax_name = tgui_input_text(user, "Enter a new name for the fax machine.", "New Fax Name", max_length = 128) + var/new_fax_name = tgui_input_text(user, "Enter a new name for the fax machine.", "New Fax Name", , 128) if (!new_fax_name) return ITEM_INTERACT_SUCCESS if (new_fax_name != fax_name) diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index 425ff9d38a403..eb29ca4b8b5c1 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -30,6 +30,7 @@ var/blending = FALSE //lets not take pictures while the previous is still processing! var/see_ghosts = CAMERA_NO_GHOSTS //for the spoop of it var/obj/item/disk/holodisk/disk + var/sound/custom_sound var/silent = FALSE var/picture_size_x = 2 var/picture_size_y = 2 @@ -117,7 +118,7 @@ return FALSE else if(user.client && !(get_turf(target) in get_hear(user.client.view, user))) return FALSE - else if(!(get_turf(target) in get_hear(CONFIG_GET(string/default_view), user))) + else if(!(get_turf(target) in get_hear(world.view, user))) return FALSE else if(isliving(loc)) if(!(get_turf(target) in view(world.view, loc))) @@ -251,9 +252,6 @@ if(print_picture_on_snap) printpicture(user, picture) - if(!silent) - playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, TRUE, -3) - /obj/item/camera/proc/printpicture(mob/user, datum/picture/picture) //Normal camera proc for creating photos pictures_left-- var/obj/item/photo/new_photo = new(get_turf(src), picture) diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm index c9f8d8dbe8eca..64eeb192a2286 100644 --- a/code/modules/photography/camera/camera_image_capturing.dm +++ b/code/modules/photography/camera/camera_image_capturing.dm @@ -142,6 +142,12 @@ res.Blend(img, blendMode2iconMode(clone.blend_mode), xo, yo) CHECK_TICK + if(!silent) + if(istype(custom_sound)) //This is where the camera actually finishes its exposure. + playsound(loc, custom_sound, 75, TRUE, -3) + else + playsound(loc, pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 75, TRUE, -3) + if(wipe_atoms) QDEL_LIST(atoms) else diff --git a/code/modules/photography/camera/other.dm b/code/modules/photography/camera/other.dm index 83e9a5fd28cac..166517d055fba 100644 --- a/code/modules/photography/camera/other.dm +++ b/code/modules/photography/camera/other.dm @@ -25,13 +25,7 @@ see_ghosts = CAMERA_SEE_GHOSTS_ORBIT /obj/item/camera/detective - name = "detective's camera" - desc = "A silent polaroid camera with extra capacity for crime investigations." - flash_enabled = FALSE - silent = TRUE + name = "Detective's camera" + desc = "A polaroid camera with extra capacity for crime investigations." pictures_max = 30 pictures_left = 30 - -/obj/item/camera/detective/after_picture(mob/user, datum/picture/picture) - . = ..() - user.playsound_local(get_turf(src), pick('sound/items/polaroid1.ogg', 'sound/items/polaroid2.ogg'), 35, TRUE) diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index d6c3b5d803da3..b0c5035a1f845 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -223,6 +223,7 @@ register_context() addtimer(CALLBACK(src, PROC_REF(update)), 0.5 SECONDS) RegisterSignal(SSdcs, COMSIG_GLOB_GREY_TIDE, PROC_REF(grey_tide)) + RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) update_appearance() var/static/list/hovering_mob_typechecks = list( @@ -254,11 +255,12 @@ disconnect_terminal() return ..() -/obj/machinery/power/apc/on_saboteur(datum/source, disrupt_duration) - . = ..() +/obj/machinery/power/apc/proc/on_saboteur(datum/source, disrupt_duration) + SIGNAL_HANDLER + disrupt_duration *= 0.1 // so, turns out, failure timer is in seconds, not deciseconds; without this, disruptions last 10 times as long as they probably should energy_fail(disrupt_duration) - return TRUE + return COMSIG_SABOTEUR_SUCCESS /obj/machinery/power/apc/on_set_is_operational(old_value) update_area_power_usage(!old_value) @@ -525,24 +527,20 @@ * This adds up the total static power usage for the apc's area, then draw that power usage from the grid or APC cell. */ /obj/machinery/power/apc/proc/early_process() - if(!QDELETED(cell) && cell.charge < cell.maxcharge) + if(cell && cell.charge < cell.maxcharge) last_charging = charging charging = APC_NOT_CHARGING if(isnull(area)) return var/total_static_energy_usage = 0 - if(operating) - total_static_energy_usage += APC_CHANNEL_IS_ON(lighting) * area.energy_usage[AREA_USAGE_STATIC_LIGHT] - total_static_energy_usage += APC_CHANNEL_IS_ON(equipment) * area.energy_usage[AREA_USAGE_STATIC_EQUIP] - total_static_energy_usage += APC_CHANNEL_IS_ON(environ) * area.energy_usage[AREA_USAGE_STATIC_ENVIRON] + total_static_energy_usage += APC_CHANNEL_IS_ON(lighting) * area.energy_usage[AREA_USAGE_STATIC_LIGHT] + total_static_energy_usage += APC_CHANNEL_IS_ON(equipment) * area.energy_usage[AREA_USAGE_STATIC_EQUIP] + total_static_energy_usage += APC_CHANNEL_IS_ON(environ) * area.energy_usage[AREA_USAGE_STATIC_ENVIRON] area.clear_usage() if(total_static_energy_usage) //Use power from static power users. - var/grid_used = min(terminal?.surplus(), total_static_energy_usage) - terminal?.add_load(grid_used) - if(total_static_energy_usage > grid_used && !QDELETED(cell)) - cell.use(total_static_energy_usage - grid_used, force = TRUE) + draw_energy(total_static_energy_usage) /obj/machinery/power/apc/proc/late_process(seconds_per_tick) if(icon_update_needed) @@ -562,15 +560,9 @@ flicker_hacked_icon() //dont use any power from that channel if we shut that power channel off - if(operating) - lastused_light = APC_CHANNEL_IS_ON(lighting) ? area.energy_usage[AREA_USAGE_LIGHT] + area.energy_usage[AREA_USAGE_STATIC_LIGHT] : 0 - lastused_equip = APC_CHANNEL_IS_ON(equipment) ? area.energy_usage[AREA_USAGE_EQUIP] + area.energy_usage[AREA_USAGE_STATIC_EQUIP] : 0 - lastused_environ = APC_CHANNEL_IS_ON(environ) ? area.energy_usage[AREA_USAGE_ENVIRON] + area.energy_usage[AREA_USAGE_STATIC_ENVIRON] : 0 - else - lastused_light = 0 - lastused_equip = 0 - lastused_environ = 0 - + lastused_light = APC_CHANNEL_IS_ON(lighting) ? area.energy_usage[AREA_USAGE_LIGHT] + area.energy_usage[AREA_USAGE_STATIC_LIGHT] : 0 + lastused_equip = APC_CHANNEL_IS_ON(equipment) ? area.energy_usage[AREA_USAGE_EQUIP] + area.energy_usage[AREA_USAGE_STATIC_EQUIP] : 0 + lastused_environ = APC_CHANNEL_IS_ON(environ) ? area.energy_usage[AREA_USAGE_ENVIRON] + area.energy_usage[AREA_USAGE_STATIC_ENVIRON] : 0 lastused_charge = charging == APC_CHARGING ? area.energy_usage[AREA_USAGE_APC_CHARGE] : 0 lastused_total = lastused_light + lastused_equip + lastused_environ + lastused_charge @@ -760,6 +752,21 @@ /obj/machinery/power/apc/proc/charge() return cell.charge +/// Draws energy from the connected grid. When there isn't enough surplus energy from the grid, draws the rest of the demand from its cell. Returns the energy used. +/obj/machinery/power/apc/proc/draw_energy(amount) + var/grid_used = min(terminal?.surplus(), amount) + terminal?.add_load(grid_used) + if(QDELETED(cell)) + return grid_used + var/cell_used = 0 + if(amount > grid_used) + cell_used += cell.use(amount - grid_used, force = TRUE) + return grid_used + cell_used + +/// Draws power from the connected grid. When there isn't enough surplus energy from the grid, draws the rest of the demand from its cell. Returns the energy used. +/obj/machinery/power/apc/proc/draw_power(amount) + return draw_energy(power_to_energy(amount)) + /*Power module, used for APC construction*/ /obj/item/electronics/apc name = "power control module" diff --git a/code/modules/power/apc/apc_malf.dm b/code/modules/power/apc/apc_malf.dm index b8fe1510c918d..1419e12c46be3 100644 --- a/code/modules/power/apc/apc_malf.dm +++ b/code/modules/power/apc/apc_malf.dm @@ -45,7 +45,7 @@ malf.ShutOffDoomsdayDevice() occupier = malf if (isturf(malf.loc)) // create a deactivated AI core if the AI isn't coming from an emergency mech shunt - malf.linked_core = new /obj/structure/ai_core/deactivated(malf.loc) + malf.linked_core = new /obj/structure/ai_core/deactivated malf.linked_core.remote_ai = malf // note that we do not set the deactivated core's core_mmi.brainmob malf.forceMove(src) // move INTO the APC, not to its tile if(!findtext(occupier.name, "APC Copy")) @@ -57,29 +57,22 @@ disk_pinpointers.switch_mode_to(TRACK_MALF_AI) //Pinpointer will track the shunted AI var/datum/action/innate/core_return/return_action = new return_action.Grant(occupier) - SEND_SIGNAL(src, COMSIG_SILICON_AI_OCCUPY_APC, occupier) - SEND_SIGNAL(occupier, COMSIG_SILICON_AI_OCCUPY_APC, occupier) occupier.cancel_camera() /obj/machinery/power/apc/proc/malfvacate(forced) if(!occupier) return - SEND_SIGNAL(occupier, COMSIG_SILICON_AI_VACATE_APC, occupier) - SEND_SIGNAL(src, COMSIG_SILICON_AI_VACATE_APC, occupier) - if(forced) - occupier.forceMove(drop_location()) - INVOKE_ASYNC(occupier, TYPE_PROC_REF(/mob/living, death)) - occupier.gib(DROP_ALL_REMAINS) - occupier = null - return if(occupier.linked_core) occupier.shunted = FALSE occupier.forceMove(occupier.linked_core.loc) qdel(occupier.linked_core) occupier.cancel_camera() - occupier = null - else - stack_trace("An AI: [occupier] has vacated an APC with no linked core and without being gibbed.") + return + to_chat(occupier, span_danger("Primary core damaged, unable to return core processes.")) + if(forced) + occupier.forceMove(drop_location()) + INVOKE_ASYNC(occupier, TYPE_PROC_REF(/mob/living, death)) + occupier.gib(DROP_ALL_REMAINS) if(!occupier.nuking) //Pinpointers go back to tracking the nuke disk, as long as the AI (somehow) isn't mid-nuking. for(var/obj/item/pinpointer/nuke/disk_pinpointers in GLOB.pinpointer_list) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 5c68bb8f4c8b0..f68319f4205fb 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -577,10 +577,6 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri /obj/item/stack/cable_coil/proc/try_heal_loop(atom/interacting_with, mob/living/user, repeating = FALSE) var/mob/living/carbon/human/attacked_humanoid = interacting_with - var/obj/item/clothing/under/uniform = attacked_humanoid.w_uniform - if(uniform.repair_sensors(src, user)) - return ITEM_INTERACT_SUCCESS - var/obj/item/bodypart/affecting = attacked_humanoid.get_bodypart(check_zone(user.zone_selected)) if(isnull(affecting) || !IS_ROBOTIC_LIMB(affecting)) return NONE diff --git a/code/modules/power/floodlight.dm b/code/modules/power/floodlight.dm index 7799018a238a3..38354241f9a4b 100644 --- a/code/modules/power/floodlight.dm +++ b/code/modules/power/floodlight.dm @@ -69,34 +69,33 @@ if(state == FLOODLIGHT_NEEDS_SECURING) icon_state = "floodlight_c3" state = FLOODLIGHT_NEEDS_LIGHTS - return ITEM_INTERACT_SUCCESS + return TRUE else if(state == FLOODLIGHT_NEEDS_LIGHTS) icon_state = "floodlight_c2" state = FLOODLIGHT_NEEDS_SECURING - return ITEM_INTERACT_SUCCESS - return ITEM_INTERACT_BLOCKING + return TRUE + return FALSE /obj/structure/floodlight_frame/wrench_act(mob/living/user, obj/item/tool) if(state != FLOODLIGHT_NEEDS_WIRES) - return ITEM_INTERACT_BLOCKING + return FALSE - balloon_alert(user, "deconstructing...") if(!tool.use_tool(src, user, 30, volume=50)) - return ITEM_INTERACT_BLOCKING + return TRUE new /obj/item/stack/sheet/iron(loc, 5) qdel(src) - return ITEM_INTERACT_SUCCESS + return TRUE /obj/structure/floodlight_frame/wirecutter_act(mob/living/user, obj/item/tool) if(state != FLOODLIGHT_NEEDS_SECURING) - return ITEM_INTERACT_BLOCKING + return FALSE icon_state = "floodlight_c1" state = FLOODLIGHT_NEEDS_WIRES new /obj/item/stack/cable_coil(loc, 5) - return ITEM_INTERACT_SUCCESS + return TRUE /obj/structure/floodlight_frame/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/stack/cable_coil) && state == FLOODLIGHT_NEEDS_WIRES) @@ -110,11 +109,8 @@ return if(istype(O, /obj/item/light/tube)) - if(state != FLOODLIGHT_NEEDS_LIGHTS) - balloon_alert(user, "construction not completed!") - return var/obj/item/light/tube/L = O - if(L.status != LIGHT_BROKEN) // light tube not broken. + if(state == FLOODLIGHT_NEEDS_LIGHTS && L.status != 2) //Ready for a light tube, and not broken. new /obj/machinery/power/floodlight(loc) qdel(src) qdel(O) @@ -154,6 +150,7 @@ /obj/machinery/power/floodlight/Initialize(mapload) . = ..() RegisterSignal(src, COMSIG_OBJ_PAINTED, TYPE_PROC_REF(/obj/machinery/power/floodlight, on_color_change)) //update light color when color changes + RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) register_context() /obj/machinery/power/floodlight/proc/on_color_change(obj/machinery/power/flood_light, mob/user, obj/item/toy/crayon/spraycan/spraycan, is_dark_color) @@ -299,10 +296,10 @@ /obj/machinery/power/floodlight/attack_ai(mob/user) return attack_hand(user) -/obj/machinery/power/floodlight/on_saboteur(datum/source, disrupt_duration) - . = ..() +/obj/machinery/power/floodlight/proc/on_saboteur(datum/source, disrupt_duration) + SIGNAL_HANDLER atom_break(ENERGY) // technically, - return TRUE + return COMSIG_SABOTEUR_SUCCESS /obj/machinery/power/floodlight/atom_break(damage_flag) . = ..() diff --git a/code/modules/power/lighting/light.dm b/code/modules/power/lighting/light.dm index 431f2095b0a69..889ca7244e8f7 100644 --- a/code/modules/power/lighting/light.dm +++ b/code/modules/power/lighting/light.dm @@ -116,6 +116,7 @@ // Light projects out backwards from the dir of the light set_light(l_dir = REVERSE_DIR(dir)) RegisterSignal(src, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) + RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) AddElement(/datum/element/atmos_sensitive, mapload) AddElement(/datum/element/contextual_screentip_bare_hands, rmb_text = "Remove bulb") if(break_if_moved) @@ -687,10 +688,10 @@ tube?.burn() return -/obj/machinery/light/on_saboteur(datum/source, disrupt_duration) - . = ..() +/obj/machinery/light/proc/on_saboteur(datum/source, disrupt_duration) + SIGNAL_HANDLER break_light_tube() - return TRUE + return COMSIG_SABOTEUR_SUCCESS /obj/machinery/light/proc/grey_tide(datum/source, list/grey_tide_areas) SIGNAL_HANDLER diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 3fb98970ba4d6..c31870f2ad080 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -167,7 +167,7 @@ return amount //Shuttles get free power, don't ask why var/obj/machinery/power/apc/local_apc = home.apc - if(isnull(local_apc) || !local_apc.operating) + if(isnull(local_apc)) return FALSE // Surplus from the grid. @@ -202,7 +202,7 @@ return amount var/obj/machinery/power/apc/my_apc = my_area.apc - if(isnull(my_apc) || !my_apc.operating || QDELETED(my_apc.cell)) + if(isnull(my_apc) || QDELETED(my_apc.cell)) return FALSE return my_apc.cell.use(amount, force = force) @@ -228,9 +228,8 @@ return amount //Shuttles get free power, don't ask why var/obj/machinery/power/apc/local_apc = home.apc - if(isnull(local_apc) || !local_apc.operating) + if(!local_apc) return FALSE - var/surplus = local_apc.surplus() if(surplus <= 0) //I don't know if powernet surplus can ever end up negative, but I'm just gonna failsafe it return FALSE diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index e7cc039c72df9..c4e3127aa5c9f 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -896,11 +896,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) /obj/machinery/proc/supermatter_zap(atom/zapstart = src, range = 5, zap_str = 3.2 MEGA JOULES, zap_flags = ZAP_SUPERMATTER_FLAGS, list/targets_hit = list(), zap_cutoff = 1.2 MEGA JOULES, power_level = 0, zap_icon = DEFAULT_ZAP_ICON_STATE, color = null) if(QDELETED(zapstart)) return - if(zap_cutoff <= 0) - stack_trace("/obj/machinery/supermatter_zap() was called with a non-positive value") - return - if(zap_str <= 0) // Just in case something scales zap_str and zap_cutoff to 0. - return . = zapstart.dir //If the strength of the zap decays past the cutoff, we stop if(zap_str < zap_cutoff) diff --git a/code/modules/power/supermatter/supermatter_extra_effects.dm b/code/modules/power/supermatter/supermatter_extra_effects.dm index 5d4c3474d59f6..b6cc1b792bdcf 100644 --- a/code/modules/power/supermatter/supermatter_extra_effects.dm +++ b/code/modules/power/supermatter/supermatter_extra_effects.dm @@ -130,10 +130,9 @@ if(zap_count >= 1) playsound(loc, 'sound/weapons/emitter2.ogg', 100, TRUE, extrarange = 10) var/delta_time = (SSmachines.times_fired - last_high_energy_zap_perspective_machines) * SSmachines.wait / (1 SECONDS) - if(delta_time) - for(var/i in 1 to zap_count) - supermatter_zap(src, range, clamp(internal_energy * 3200, 6.4e6, 3.2e7) * delta_time, flags, zap_cutoff = src.zap_cutoff * delta_time, power_level = internal_energy, zap_icon = src.zap_icon) - last_high_energy_zap_perspective_machines = SSmachines.times_fired + for(var/i in 1 to zap_count) + supermatter_zap(src, range, clamp(internal_energy * 3200, 6.4e6, 3.2e7) * delta_time, flags, zap_cutoff = src.zap_cutoff * delta_time, power_level = internal_energy, zap_icon = src.zap_icon) + last_high_energy_zap_perspective_machines = SSmachines.times_fired if(prob(5)) supermatter_anomaly_gen(src, FLUX_ANOMALY, rand(5, 10)) if(prob(5)) diff --git a/code/modules/power/supermatter/supermatter_hit_procs.dm b/code/modules/power/supermatter/supermatter_hit_procs.dm index 57c86303a0ad6..6f01b5ff7e3f4 100644 --- a/code/modules/power/supermatter/supermatter_hit_procs.dm +++ b/code/modules/power/supermatter/supermatter_hit_procs.dm @@ -13,11 +13,11 @@ return NONE var/kiss_power = 0 - if (istype(projectile, /obj/projectile/kiss/death)) - kiss_power = 20000 - else if (istype(projectile, /obj/projectile/kiss)) - kiss_power = 60 - + switch(projectile.type) + if(/obj/projectile/kiss) + kiss_power = 60 + if(/obj/projectile/kiss/death) + kiss_power = 20000 if(!istype(projectile.firer, /obj/machinery/power/emitter)) investigate_log("has been hit by [projectile] fired by [key_name(projectile.firer)]", INVESTIGATE_ENGINE) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index bbc1030f0d6ae..0e7957b65fb2f 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -187,8 +187,8 @@ /obj/energy_ball/proc/dust_mobs(atom/A) if(isliving(A)) - var/mob/living/living = A - if(living.incorporeal_move || HAS_TRAIT(living, TRAIT_GODMODE)) + var/mob/living/L = A + if(L.incorporeal_move || L.status_flags & GODMODE) return if(!iscarbon(A)) return diff --git a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm index 6d7d922514282..5331b5c92f8bc 100644 --- a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm @@ -53,10 +53,7 @@ ammo_type = /obj/item/ammo_casing/shotgun/incapacitate max_ammo = 3 -/obj/item/ammo_box/magazine/internal/shot/single - name = "single-barrel shotgun internal magazine" - max_ammo = 1 - -/obj/item/ammo_box/magazine/internal/shot/single/musket +/obj/item/ammo_box/magazine/internal/shot/musket name = "donk co musket internal magazine" ammo_type = /obj/item/ammo_casing/shotgun/fletchette + max_ammo = 1 diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index c3bb92eec7140..a895cbe88e44f 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -319,7 +319,7 @@ // Old Semi-Auto Rifle // /obj/item/gun/ballistic/automatic/surplus - name = "surplus rifle" + name = "Surplus Rifle" desc = "One of countless obsolete ballistic rifles that still sees use as a cheap deterrent. Uses 10mm ammo and its bulky frame prevents one-hand firing." icon_state = "surplus" worn_icon_state = null diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 0317ead192882..888b784ddf86c 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -192,7 +192,7 @@ spread = 50 /obj/item/gun/ballistic/rifle/rebarxbow - name = "heated rebar crossbow" + name = "Heated Rebar Crossbow" desc = "A handcrafted crossbow. \ Aside from conventional sharpened iron rods, it can also fire specialty ammo made from the atmos crystalizer - zaukerite, metallic hydrogen, and healium rods all work. \ Very slow to reload - you can craft the crossbow with a crowbar to loosen the crossbar, but risk a misfire, or worse..." @@ -265,7 +265,7 @@ . += "[initial(icon_state)]" + "_bolt_locked" /obj/item/gun/ballistic/rifle/rebarxbow/forced - name = "stressed rebar crossbow" + name = "Stressed Rebar Crossbow" desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could have a draw this crossbow a bit faster. Hopefully, it was worth it." // Feel free to add a recipe to allow you to change it back if you would like, I just wasn't sure if you could have two recipes for the same thing. can_misfire = TRUE @@ -274,7 +274,7 @@ accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force /obj/item/gun/ballistic/rifle/rebarxbow/syndie - name = "syndicate rebar crossbow" + name = "Syndicate Rebar Crossbow" desc = "The syndicate liked the bootleg rebar crossbow NT engineers made, so they showed what it could be if properly developed. \ Holds three shots without a chance of exploding, and features a built in scope. Compatible with all known crossbow ammunition." icon_state = "rebarxbowsyndie" diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index c3ba84d1cb8cd..9be59ffb5344b 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -287,6 +287,7 @@ can_be_sawn_off = TRUE pb_knockback = 3 // it's a super shotgun! + /obj/item/gun/ballistic/shotgun/doublebarrel/sawoff(mob/user) . = ..() if(.) @@ -342,32 +343,6 @@ return hook.try_fire_gun(target, user, params) return ..() -///An underpowered shotgun given to Pun Pun when the station job trait roll. -/obj/item/gun/ballistic/shotgun/monkey - name = "\improper Barback's Shot" - desc = "A chimp-sized, single-shot and break-action shotgun with an unpractical stock." - icon_state = "chimp_shottie" - inhand_icon_state = "shotgun" - lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi' - inhand_x_dimension = 32 - inhand_y_dimension = 32 - force = 8 - obj_flags = CONDUCTS_ELECTRICITY - slot_flags = NONE - accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/single - obj_flags = UNIQUE_RENAME - w_class = WEIGHT_CLASS_NORMAL - weapon_weight = WEAPON_MEDIUM - semi_auto = TRUE - bolt_type = BOLT_TYPE_NO_BOLT - spread = 10 - projectile_damage_multiplier = 0.5 - projectile_wound_bonus = -25 - recoil = 1 - pin = /obj/item/firing_pin/monkey - pb_knockback = 1 - /obj/item/gun/ballistic/shotgun/musket name = "\improper Donk Co. Musket" icon = 'icons/obj/weapons/guns/ballistic.dmi' @@ -381,4 +356,4 @@ bolt_type = BOLT_TYPE_LOCKING bolt_wording = "bolt" internal_magazine = TRUE - accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/single/musket + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shot/musket diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 244e68e8b031c..d06a36056d1c0 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -141,7 +141,7 @@ // Can we weld? Plasma cutter does not use charge continuously. // Amount cannot be defaulted to 1: most of the code specifies 0 in the call. -/obj/item/gun/energy/plasmacutter/tool_use_check(mob/living/user, amount, heat_required) +/obj/item/gun/energy/plasmacutter/tool_use_check(mob/living/user, amount) if(QDELETED(cell)) balloon_alert(user, "no cell inserted!") return FALSE @@ -151,9 +151,6 @@ if(amount ? cell.charge < PLASMA_CUTTER_CHARGE_WELD * amount : cell.charge < PLASMA_CUTTER_CHARGE_WELD) balloon_alert(user, "not enough charge!") return FALSE - if(heat < heat_required) - to_chat(user, span_warning("[src] is not hot enough to complete this task!")) - return FALSE return TRUE diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index 2a80c366f0346..2915e3e59bd6c 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -92,7 +92,7 @@ /obj/projectile/bullet/rebar/syndie name = "rebar" icon_state = "rebar" - damage = 45 + damage = 55 speed = 0.4 dismemberment = 2 //It's a budget sniper rifle. armour_penetration = 20 //A bit better versus armor. Gets past anti laser armor or a vest, but doesnt wound proc on sec armor. @@ -140,7 +140,7 @@ /obj/projectile/bullet/rebar/hydrogen name = "metallic hydrogen bolt" icon_state = "rebar_hydrogen" - damage = 35 + damage = 55 speed = 0.6 projectile_piercing = PASSMOB|PASSVEHICLE projectile_phasing = ~(PASSMOB|PASSVEHICLE) @@ -148,11 +148,12 @@ dismemberment = 0 //goes through clean. damage_type = BRUTE armour_penetration = 30 //very pointy. - wound_bonus = -100 - bare_wound_bonus = 0 + wound_bonus = -15 + bare_wound_bonus = 10 shrapnel_type = /obj/item/ammo_casing/rebar/hydrogen embed_type = /datum/embed_data/rebar_hydrogen embed_falloff_tile = -3 + shrapnel_type = /obj/item/ammo_casing/rebar/hydrogen accurate_range = 205 //15 tiles before falloff starts to kick in /obj/projectile/bullet/rebar/hydrogen/Impact(atom/A) diff --git a/code/modules/projectiles/projectile/special/saboteur.dm b/code/modules/projectiles/projectile/special/saboteur.dm index 5e7249b7d54aa..46fcc136c0927 100644 --- a/code/modules/projectiles/projectile/special/saboteur.dm +++ b/code/modules/projectiles/projectile/special/saboteur.dm @@ -1,9 +1,3 @@ -///Override on subtype to add behaviour. Whatever happens when we are sabotaged -/atom/proc/on_saboteur(datum/source, disrupt_duration) - SHOULD_CALL_PARENT(TRUE) - if(SEND_SIGNAL(src, COMSIG_ATOM_SABOTEUR_ACT, disrupt_duration) & COMSIG_SABOTEUR_SUCCESS) //Signal handles datums for the most part - return TRUE - /obj/projectile/energy/fisher name = "attenuated kinetic force" alpha = 0 @@ -25,7 +19,7 @@ var/success = FALSE for(var/atom/disrupted as anything in things_to_disrupt) - if(disrupted.on_saboteur(src, disrupt_duration)) + if(SEND_SIGNAL(disrupted, COMSIG_HIT_BY_SABOTEUR, disrupt_duration) & COMSIG_SABOTEUR_SUCCESS) success = TRUE if(success && ismob(firer)) diff --git a/code/modules/reagents/chemistry/chem_wiki_render.dm b/code/modules/reagents/chemistry/chem_wiki_render.dm index 34bc1e1a6f13e..2bb6bd7175bdc 100644 --- a/code/modules/reagents/chemistry/chem_wiki_render.dm +++ b/code/modules/reagents/chemistry/chem_wiki_render.dm @@ -9,12 +9,7 @@ ADMIN_VERB(generate_wikichem_list, R_DEBUG, "Parse Wikichems", "Parse and genera |- "} - var/input_text = tgui_input_text( - user, - "Input a name of a reagent, or a series of reagents split with a comma (no spaces) to get its wiki table entry", - "Recipe", - max_length = MAX_MESSAGE_LEN, - ) //95% of the time, the reagent type is a lowercase, no spaces / underscored version of the name + var/input_text = tgui_input_text(user, "Input a name of a reagent, or a series of reagents split with a comma (no spaces) to get its wiki table entry", "Recipe") //95% of the time, the reagent type is a lowercase, no spaces / underscored version of the name if(!input_text) to_chat(user, "Input was blank!") return diff --git a/code/modules/reagents/chemistry/holder/holder.dm b/code/modules/reagents/chemistry/holder/holder.dm index 593bc6d471092..f084a7eaa39d4 100644 --- a/code/modules/reagents/chemistry/holder/holder.dm +++ b/code/modules/reagents/chemistry/holder/holder.dm @@ -204,12 +204,11 @@ * * * [list_reagents][list] - list to add. Format it like this: list(/datum/reagent/toxin = 10, "beer" = 15) * * [data][list] - additional data to add - * * [added_purity][number] - an override to the default purity for each reagent to add. */ -/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data = null, added_purity = null) +/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data = null) for(var/r_id in list_reagents) var/amt = list_reagents[r_id] - add_reagent(r_id, amt, data, added_purity = added_purity) + add_reagent(r_id, amt, data) /** * Removes a specific reagent. can supress reactions if needed @@ -590,11 +589,10 @@ */ /datum/reagents/proc/multiply_reagents(multiplier = 1) var/list/cached_reagents = reagent_list - if(!total_volume || multiplier == 1) + if(!total_volume) return var/change = (multiplier - 1) //Get the % change for(var/datum/reagent/reagent as anything in cached_reagents) - _multiply_reagent(reagent, change) if(change > 0) add_reagent(reagent.type, reagent.volume * change, added_purity = reagent.purity, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) else @@ -603,28 +601,6 @@ update_total() handle_reactions() -/** - * Multiplies a single inside this holder by a specific amount - * Arguments - * * reagent_path - The path of the reagent we want to multiply the volume of. - * * multiplier - the amount to multiply each reagent by - */ -/datum/reagents/proc/multiply_single_reagent(reagent_path, multiplier = 1) - var/datum/reagent/reagent = locate(reagent_path) in reagent_list - if(!reagent || multiplier == 1) - return - var/change = (multiplier - 1) //Get the % change - _multiply_reagent(reagent, change) - update_total() - handle_reactions() - -///Proc containing the operations called by both multiply_reagents() and multiply_single_reagent() -/datum/reagents/proc/_multiply_reagent(datum/reagent/reagent, change) - if(change > 0) - add_reagent(reagent.type, reagent.volume * change, added_purity = reagent.purity, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) - else - remove_reagent(reagent.type, abs(reagent.volume * change)) //absolute value to prevent a double negative situation (removing -50% would be adding 50%) - /// Updates [/datum/reagents/var/total_volume] /datum/reagents/proc/update_total() var/list/cached_reagents = reagent_list diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index b7266ca0fe375..5f665d876afaa 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -346,7 +346,7 @@ if("save_recording") if(!is_operational) return - var/name = tgui_input_text(ui.user, "What do you want to name this recipe?", "Recipe Name", max_length = MAX_NAME_LEN) + var/name = tgui_input_text(ui.user, "What do you want to name this recipe?", "Recipe Name", MAX_NAME_LEN) if(!ui.user.can_perform_action(src, ALLOW_SILICON_REACH)) return if(saved_recipes[name] && tgui_alert(ui.user, "\"[name]\" already exists, do you want to overwrite it?",, list("Yes", "No")) == "No") diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 87ba535a149c6..237dcb862af50 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -474,13 +474,11 @@ item_name_default = "[master_reagent.name] [item_name_default]" if(!(initial(selected_container.reagent_flags) & OPENCONTAINER)) // Closed containers get both reagent name and units in the name item_name_default = "[master_reagent.name] [item_name_default] ([volume_in_each]u)" - var/item_name = tgui_input_text( - usr, + var/item_name = tgui_input_text(usr, "Container name", "Name", item_name_default, - max_length = MAX_NAME_LEN, - ) + MAX_NAME_LEN) if(!item_name) return FALSE diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index c41ab8ffca521..5365be6fe8d7f 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -166,8 +166,8 @@ return exposed_obj.visible_message(span_warning("[exposed_obj] rapidly fries as it's splashed with hot oil! Somehow.")) - exposed_obj.AddElement(/datum/element/fried_item, volume SECONDS) - exposed_obj.reagents.add_reagent(src.type, reac_volume, reagtemp = holder.chem_temp) + exposed_obj.AddElement(/datum/element/fried_item, volume) + exposed_obj.reagents.add_reagent(src.type, reac_volume) /datum/reagent/consumable/nutriment/fat/expose_mob(mob/living/exposed_mob, methods = TOUCH, reac_volume, show_message = TRUE, touch_protection = 0) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 6f28d12964771..18d02ba2e31fc 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -2950,7 +2950,7 @@ //This is intended to a be a scarce reagent to gate certain drugs and toxins with. Do not put in a synthesizer. Renewable sources of this reagent should be inefficient. /datum/reagent/lead name = "Lead" - description = "A dull metallic element with a low melting point." + description = "A dull metalltic element with a low melting point." taste_description = "metal" reagent_state = SOLID color = "#80919d" diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 95f73e552be34..5e553fce962c5 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -326,19 +326,6 @@ else affected_mob.adjust_hallucinations(10 SECONDS * REM * seconds_per_tick) -/datum/reagent/toxin/mindbreaker/fish - name = "Jellyfish Hallucinogen" - description = "A hallucinogen structurally similar to the mindbreaker toxin, but with weaker molecular bonds, making it easily degradeable by heat." - -/datum/reagent/toxin/mindbreaker/fish/on_new(data) - . = ..() - if(holder?.my_atom) - RegisterSignals(holder.my_atom, list(COMSIG_ITEM_FRIED, TRAIT_FOOD_BBQ_GRILLED), PROC_REF(on_atom_cooked)) - -/datum/reagent/toxin/mindbreaker/fish/proc/on_atom_cooked(datum/source, cooking_time) - SIGNAL_HANDLER - holder.del_reagent(type) - /datum/reagent/toxin/plantbgone name = "Plant-B-Gone" description = "A harmful toxic mixture to kill plantlife. Do not ingest!" diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 8e2353555be5d..bff4d526333be 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -41,7 +41,7 @@ required_other = TRUE /datum/chemical_reaction/sodiumchloride/pre_reaction_other_checks(datum/reagents/holder) - . = ..() + . = ..() if(holder.has_reagent(/datum/reagent/consumable/liquidelectricity) || holder.has_reagent(/datum/reagent/consumable/liquidelectricity/enriched)) return FALSE @@ -990,16 +990,3 @@ var/location = get_turf(holder.my_atom) for(var/i in 1 to created_volume) new /obj/item/stack/sheet/hauntium(location) - -/datum/chemical_reaction/fish_hallucinogen_degradation - results = list(/datum/reagent/consumable/nutriment/protein = 0.1) - required_reagents = list(/datum/reagent/toxin/mindbreaker/fish = 1) - required_temp = 363.15 // 90° - optimal_temp = 450 - rate_up_lim = 8 - temp_exponent_factor = 1.5 - optimal_ph_min = 2 - optimal_ph_max = 10 - thermic_constant = 80 - H_ion_release = 2 - reaction_tags = REACTION_TAG_EASY diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 21d076e949fd7..13eaffca3a898 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -147,7 +147,7 @@ var/obj/item/food_item = new chosen(T) ADD_TRAIT(food_item, TRAIT_FOOD_SILVER, INNATE_TRAIT) if(prob(5))//Fry it! - food_item.AddElement(/datum/element/fried_item, rand(15, 60) SECONDS) + food_item.AddElement(/datum/element/fried_item, rand(15, 60)) if(prob(5))//Grill it! food_item.AddElement(/datum/element/grilled_item, rand(30 SECONDS, 100 SECONDS)) if(prob(50)) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index 15c79e4c150b9..75fc8aef8920c 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -103,7 +103,7 @@ if (IS_WRITING_UTENSIL(tool)) if(!user.can_write(tool)) return - var/custom_label = tgui_input_text(user, "What would you like to label the blood pack?", "Blood Pack", name, max_length = MAX_NAME_LEN) + var/custom_label = tgui_input_text(user, "What would you like to label the blood pack?", "Blood Pack", name, MAX_NAME_LEN) if(!user.can_perform_action(src)) return if(user.get_active_held_item() != tool) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index fa768e67695ff..f9cf10e1068d9 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -81,14 +81,14 @@ if(tank_volume && (damage_flag == BULLET || damage_flag == LASER)) boom() -/obj/structure/reagent_dispensers/attackby(obj/item/attacking_item, mob/user, params) - if(attacking_item.is_refillable()) +/obj/structure/reagent_dispensers/attackby(obj/item/W, mob/user, params) + if(W.is_refillable()) return FALSE //so we can refill them via their afterattack. - if(istype(attacking_item, /obj/item/assembly_holder) && accepts_rig) + if(istype(W, /obj/item/assembly_holder) && accepts_rig) if(rig) balloon_alert(user, "another device is in the way!") return ..() - var/obj/item/assembly_holder/holder = attacking_item + var/obj/item/assembly_holder/holder = W if(!(locate(/obj/item/assembly/igniter) in holder.assemblies)) return ..() @@ -109,8 +109,8 @@ user.balloon_alert_to_viewers("attached rig") return - if(istype(attacking_item, /obj/item/stack/sheet/iron) && can_be_tanked) - var/obj/item/stack/sheet/iron/metal_stack = attacking_item + if(istype(W, /obj/item/stack/sheet/iron) && can_be_tanked) + var/obj/item/stack/sheet/iron/metal_stack = W metal_stack.use(1) var/obj/structure/reagent_dispensers/plumbed/storage/new_tank = new /obj/structure/reagent_dispensers/plumbed/storage(drop_location()) new_tank.reagents.maximum_volume = reagents.maximum_volume @@ -293,39 +293,27 @@ // if this sucks, feel free to change it, but make sure the damn thing will log. thanks. return ..() -/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/attacking_item, mob/user, params) - if(attacking_item.tool_behaviour != TOOL_WELDER) - return ..() - - var/obj/item/weldingtool/refilling_welder = attacking_item - if(istype(refilling_welder) && !refilling_welder.welding) - if(refilling_welder.reagents.has_reagent(/datum/reagent/fuel, refilling_welder.max_fuel)) - to_chat(user, span_warning("Your [refilling_welder.name] is already full!")) +/obj/structure/reagent_dispensers/fueltank/attackby(obj/item/I, mob/living/user, params) + if(I.tool_behaviour == TOOL_WELDER) + if(!reagents.has_reagent(/datum/reagent/fuel)) + to_chat(user, span_warning("[src] is out of fuel!")) return - reagents.trans_to(refilling_welder, refilling_welder.max_fuel, transferred_by = user) - user.visible_message(span_notice("[user] refills [user.p_their()] [refilling_welder.name]."), span_notice("You refill [refilling_welder].")) - playsound(src, 'sound/effects/refill.ogg', 50, TRUE) - refilling_welder.update_appearance() - return - - var/obj/item/lighter/refilling_lighter = attacking_item - if(istype(refilling_lighter) && !refilling_lighter.lit) - if(refilling_lighter.reagents.has_reagent(/datum/reagent/fuel, refilling_lighter.maximum_fuel)) - to_chat(user, span_warning("Your [refilling_lighter.name] is already full!")) - return - reagents.trans_to(refilling_lighter, refilling_lighter.maximum_fuel, transferred_by = user) - user.visible_message(span_notice("[user] refills [user.p_their()] [refilling_lighter.name]."), span_notice("You refill [refilling_lighter].")) - playsound(src, 'sound/effects/refill.ogg', 25, TRUE) + var/obj/item/weldingtool/W = I + if(istype(W) && !W.welding) + if(W.reagents.has_reagent(/datum/reagent/fuel, W.max_fuel)) + to_chat(user, span_warning("Your [W.name] is already full!")) + return + reagents.trans_to(W, W.max_fuel, transferred_by = user) + user.visible_message(span_notice("[user] refills [user.p_their()] [W.name]."), span_notice("You refill [W].")) + playsound(src, 'sound/effects/refill.ogg', 50, TRUE) + W.update_appearance() + else + user.visible_message(span_danger("[user] catastrophically fails at refilling [user.p_their()] [I.name]!"), span_userdanger("That was stupid of you.")) + log_bomber(user, "detonated a", src, "via welding tool") + boom() return - if(!reagents.has_reagent(/datum/reagent/fuel)) - to_chat(user, span_warning("[src] is out of fuel!")) - return - user.visible_message( - span_danger("[user] catastrophically fails at refilling [user.p_their()] [attacking_item.name]!"), - span_userdanger("That was stupid of you.")) - log_bomber(user, "detonated a", src, "via [attacking_item.name]") - boom() + return ..() /obj/structure/reagent_dispensers/fueltank/large name = "high capacity fuel tank" diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 4930136b25bd7..dbcabfab19677 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -120,7 +120,7 @@ to_chat(user, span_notice("You [panel_open ? "remove":"attach"] the screws around the power connection.")) return else if(I.tool_behaviour == TOOL_WELDER && panel_open) - if(!I.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!I.tool_start_check(user, amount=1)) return to_chat(user, span_notice("You start slicing the floorweld off \the [src]...")) @@ -165,11 +165,9 @@ user.visible_message(span_notice("[user.name] places \the [I] into \the [src]."), span_notice("You place \the [I] into \the [src].")) /// Mouse drop another mob or self -/obj/machinery/disposal/mouse_drop_receive(atom/target, mob/living/user, params) - if(isliving(target)) +/obj/machinery/disposal/mouse_drop_receive(mob/living/target, mob/living/user, params) + if(istype(target)) stuff_mob_in(target, user) - if(istype(target, /obj/structure/closet/body_bag) && (user.mobility_flags & (MOBILITY_PICKUP|MOBILITY_STAND) == (MOBILITY_PICKUP|MOBILITY_STAND))) - stuff_bodybag_in(target, user) /// Handles stuffing a grabbed mob into the disposal /obj/machinery/disposal/proc/stuff_mob_in(mob/living/target, mob/living/user) @@ -178,65 +176,33 @@ if (iscyborg(user)) var/mob/living/silicon/robot/borg = user if (!borg.model || !borg.model.canDispose) - return FALSE + return else - return FALSE + return if(!isturf(user.loc)) //No magically doing it from inside closets - return FALSE + return if(target.buckled || target.has_buckled_mobs()) - return FALSE + return if(target.mob_size > MOB_SIZE_HUMAN) to_chat(user, span_warning("[target] doesn't fit inside [src]!")) - return FALSE + return add_fingerprint(user) if(user == target) user.visible_message(span_warning("[user] starts climbing into [src]."), span_notice("You start climbing into [src]...")) else target.visible_message(span_danger("[user] starts putting [target] into [src]."), span_userdanger("[user] starts putting you into [src]!")) - if(!do_after(user, 2 SECONDS, target) || QDELETED(src)) - return FALSE - target.forceMove(src) - if(user == target) - user.visible_message(span_warning("[user] climbs into [src]."), span_notice("You climb into [src].")) - else - target.visible_message(span_danger("[user] places [target] in [src]."), span_userdanger("[user] places you in [src].")) - log_combat(user, target, "stuffed", addition="into [src]") - update_appearance() - return TRUE - -/obj/machinery/disposal/proc/stuff_bodybag_in(obj/structure/closet/body_bag/bag, mob/living/user) - if(!length(bag.contents)) - bag.undeploy_bodybag(src) - qdel(bag) - user.visible_message( - span_warning("[user] stuffs the empty [bag.name] into [src]."), - span_notice("You stuff the empty [bag.name] into [src].") - ) - return TRUE - - user.visible_message( - span_warning("[user] starts putting [bag] into [src]."), - span_notice("You start putting [bag] into [src]...") - ) - - if(!do_after(user, 4 SECONDS, bag) || QDELETED(src)) - return FALSE - - user.visible_message( - span_warning("[user] places [bag] in [src]."), - span_notice("You place [bag] in [src].") - ) - - if(!length(bag.contents)) - bag.undeploy_bodybag(src) - qdel(bag) - else - bag.add_fingerprint(user) - bag.forceMove(src) - - add_fingerprint(user) - update_appearance() - return TRUE + if(do_after(user, 2 SECONDS, target)) + if (!loc) + return + target.forceMove(src) + if(user == target) + user.visible_message(span_warning("[user] climbs into [src]."), span_notice("You climb into [src].")) + . = TRUE + else + target.visible_message(span_danger("[user] places [target] in [src]."), span_userdanger("[user] places you in [src].")) + log_combat(user, target, "stuffed", addition="into [src]") + . = TRUE + update_appearance() /obj/machinery/disposal/relaymove(mob/living/user, direction) attempt_escape(user) diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm index 8e0f4dad6f40f..13f43b1f4a419 100644 --- a/code/modules/recycling/disposal/construction.dm +++ b/code/modules/recycling/disposal/construction.dm @@ -152,7 +152,7 @@ to_chat(user, span_warning("A disposals machine already exists here!")) return TRUE - if(!I.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!I.tool_start_check(user, amount=1)) return TRUE to_chat(user, span_notice("You start welding the [pipename] in place...")) diff --git a/code/modules/recycling/disposal/outlet.dm b/code/modules/recycling/disposal/outlet.dm index 63c3c83edd18c..6773e574d3542 100644 --- a/code/modules/recycling/disposal/outlet.dm +++ b/code/modules/recycling/disposal/outlet.dm @@ -83,7 +83,7 @@ /obj/structure/disposaloutlet/welder_act(mob/living/user, obj/item/I) ..() - if(!I.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!I.tool_start_check(user, amount=1)) return TRUE playsound(src, 'sound/items/welder2.ogg', 100, TRUE) diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index b08323e66e4aa..9a1ad786e7220 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -156,7 +156,7 @@ if(!can_be_deconstructed(user)) return TRUE - if(!I.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!I.tool_start_check(user, amount=1)) return TRUE to_chat(user, span_notice("You start slicing [src]...")) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 280d074c7ff19..a61bf0f59445b 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -216,7 +216,6 @@ layer = BELOW_OBJ_LAYER pass_flags_self = PASSSTRUCTURE interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND - w_class = WEIGHT_CLASS_GIGANTIC /obj/item/delivery/big/interact(mob/user) if(!attempt_pre_unwrap_contents(user)) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index ac90479afc33b..0420c732637a1 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -113,7 +113,7 @@ other types of metals and chemistry for reagents). * Args: * - stored_research - The techweb that's storing us. */ -/obj/item/disk/design_disk/proc/on_upload(datum/techweb/stored_research, atom/research_source) +/obj/item/disk/design_disk/proc/on_upload(datum/techweb/stored_research) return /obj/item/disk/design_disk/bepis @@ -134,9 +134,9 @@ other types of metals and chemistry for reagents). blueprints += new_entry ///Unhide and research our node so we show up in the R&D console. -/obj/item/disk/design_disk/bepis/on_upload(datum/techweb/stored_research, atom/research_source) +/obj/item/disk/design_disk/bepis/on_upload(datum/techweb/stored_research) stored_research.hidden_nodes -= bepis_node.id - stored_research.research_node(bepis_node, force = TRUE, auto_adjust_cost = FALSE, research_source = research_source) + stored_research.research_node(bepis_node, force = TRUE, auto_adjust_cost = FALSE) /** * Subtype of Bepis tech disk diff --git a/code/modules/research/designs/electronics_designs.dm b/code/modules/research/designs/electronics_designs.dm index b1da9f2c1c05d..ce607639e22dc 100644 --- a/code/modules/research/designs/electronics_designs.dm +++ b/code/modules/research/designs/electronics_designs.dm @@ -33,19 +33,7 @@ id = "ai_cam_upgrade" build_type = PROTOLATHE | AWAY_LATHE materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/gold = SHEET_MATERIAL_AMOUNT * 7.5, /datum/material/silver = SHEET_MATERIAL_AMOUNT * 7.5, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 10, /datum/material/plasma = SHEET_MATERIAL_AMOUNT * 5) - build_path = /obj/item/aiupgrade/surveillance_upgrade - category = list( - RND_CATEGORY_AI + RND_SUBCATEGORY_AI_UPGRADES - ) - departmental_flags = DEPARTMENT_BITFLAG_SCIENCE - -/datum/design/ai_power_transfer - name = "AI Power Transfer Update" - desc = "An upgrade package that lets an AI charge an APC from a distance" - id = "ai_power_upgrade" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT * 2.5, /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2.5) - build_path = /obj/item/aiupgrade/power_transfer + build_path = /obj/item/surveillance_upgrade category = list( RND_CATEGORY_AI + RND_SUBCATEGORY_AI_UPGRADES ) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 517eb7c5b9ee4..d4dde8732a0e9 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -123,7 +123,7 @@ Nothing else in the console has ID requirements. user.investigate_log("researched [id]([json_encode(price)]) on techweb id [stored_research.id].", INVESTIGATE_RESEARCH) if(istype(stored_research, /datum/techweb/science)) SSblackbox.record_feedback("associative", "science_techweb_unlock", 1, list("id" = "[id]", "name" = TN.display_name, "price" = "[json_encode(price)]", "time" = ISOtime())) - if(stored_research.research_node_id(id, research_source = src)) + if(stored_research.research_node_id(id)) say("Successfully researched [TN.display_name].") var/logname = "Unknown" if(HAS_AI_ACCESS(user)) @@ -161,9 +161,6 @@ Nothing else in the console has ID requirements. balloon_alert(user, "security protocols disabled") playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) obj_flags |= EMAGGED - var/obj/item/circuitboard/computer/rdconsole/board = circuit - if(!(board.obj_flags & EMAGGED)) - board.silence_announcements = TRUE locked = FALSE return TRUE @@ -365,7 +362,7 @@ Nothing else in the console has ID requirements. if(D) stored_research.add_design(D, TRUE) say("Uploading blueprints from disk.") - d_disk.on_upload(stored_research, src) + d_disk.on_upload(stored_research) return TRUE if (params["type"] == RND_TECH_DISK) if (QDELETED(t_disk)) diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 3da8fe4e1c957..1a5a387551178 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -317,7 +317,11 @@ var/points_rewarded if(completed_experiment.points_reward) add_point_list(completed_experiment.points_reward) - points_rewarded = ",[refund > 0 ? " and" : ""] rewarding [completed_experiment.get_points_reward_text()]" + points_rewarded = ",[refund > 0 ? " and" : ""] rewarding " + var/list/english_list_keys = list() + for(var/points_type in completed_experiment.points_reward) + english_list_keys += "[completed_experiment.points_reward[points_type]] [points_type]" + points_rewarded += "[english_list(english_list_keys)] points" result_text += points_rewarded result_text += "!" @@ -361,10 +365,10 @@ return TRUE -/datum/techweb/proc/research_node_id(id, force, auto_update_points, get_that_dosh_id, atom/research_source) - return research_node(SSresearch.techweb_node_by_id(id), force, auto_update_points, get_that_dosh_id, research_source) +/datum/techweb/proc/research_node_id(id, force, auto_update_points, get_that_dosh_id) + return research_node(SSresearch.techweb_node_by_id(id), force, auto_update_points, get_that_dosh_id) -/datum/techweb/proc/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE, atom/research_source) +/datum/techweb/proc/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) if(!istype(node)) return FALSE update_node_status(node) diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index b6d3bd74d6979..23ad6fd213dba 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -42,12 +42,6 @@ var/show_on_wiki = TRUE /// Hidden Mech nodes unlocked when mech fabricator emaged. var/illegal_mech_node = FALSE - /** - * If set, the researched node will be announced on these channels by an announcement system - * with 'announce_research_node' set to TRUE when researched by the station. - * Not every node has to be announced if you want, some are best kept a little "subtler", like Illegal Weapons. - */ - var/list/announce_channels /datum/techweb_node/error_node id = "ERROR" @@ -115,25 +109,5 @@ return techweb_point_display_generic(get_price(TN)) ///Proc called when the Station (Science techweb specific) researches a node. -/datum/techweb_node/proc/on_station_research(atom/research_source) - SHOULD_CALL_PARENT(TRUE) - var/channels_to_use = announce_channels - if(istype(research_source, /obj/machinery/computer/rdconsole)) - var/obj/machinery/computer/rdconsole/console = research_source - var/obj/item/circuitboard/computer/rdconsole/board = console.circuit - if(board.silence_announcements) - return - if(board.obj_flags & EMAGGED) - channels_to_use = list(RADIO_CHANNEL_COMMON) - if(!length(channels_to_use) || starting_node) - return - var/obj/machinery/announcement_system/system - var/list/available_machines = list() - for(var/obj/machinery/announcement_system/announce as anything in GLOB.announcement_systems) - if(announce.announce_research_node) - available_machines += announce - break - if(!length(available_machines)) - return - system = pick(available_machines) - system.announce(AUTO_ANNOUNCE_NODE, display_name, channels = channels_to_use) +/datum/techweb_node/proc/on_station_research() + SHOULD_CALL_PARENT(FALSE) diff --git a/code/modules/research/techweb/nodes/alien_nodes.dm b/code/modules/research/techweb/nodes/alien_nodes.dm index 331b91bae61ff..58e8dbfc68f1f 100644 --- a/code/modules/research/techweb/nodes/alien_nodes.dm +++ b/code/modules/research/techweb/nodes/alien_nodes.dm @@ -30,7 +30,6 @@ hidden = TRUE /datum/techweb_node/alientech/on_station_research() - . = ..() SSshuttle.shuttle_purchase_requirements_met[SHUTTLE_UNLOCK_ALIENTECH] = TRUE /datum/techweb_node/alien_engi @@ -60,7 +59,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) hidden = TRUE - announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/alien_surgery id = TECHWEB_NODE_ALIEN_SURGERY @@ -101,4 +99,3 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/points/slime/hard = TECHWEB_TIER_5_POINTS) hidden = TRUE - announce_channels = list(RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/atmos_nodes.dm b/code/modules/research/techweb/nodes/atmos_nodes.dm index a61a6a6b094c1..f1ec74b50f482 100644 --- a/code/modules/research/techweb/nodes/atmos_nodes.dm +++ b/code/modules/research/techweb/nodes/atmos_nodes.dm @@ -48,7 +48,6 @@ /datum/experiment/ordnance/gaseous/bz, /datum/experiment/ordnance/gaseous/noblium, ) - announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/plasma_control id = TECHWEB_NODE_PLASMA_CONTROL @@ -64,7 +63,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/ordnance/gaseous/plasma) - announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/fusion id = TECHWEB_NODE_FUSION @@ -86,7 +84,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/nitrous_oxide = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/exp_tools id = TECHWEB_NODE_EXP_TOOLS @@ -108,7 +105,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/bz = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/rcd_upgrade id = TECHWEB_NODE_RCD_UPGRADE @@ -126,4 +122,3 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/ordnance/gaseous/noblium = TECHWEB_TIER_5_POINTS) - announce_channels = list(RADIO_CHANNEL_ENGINEERING) diff --git a/code/modules/research/techweb/nodes/bepis_nodes.dm b/code/modules/research/techweb/nodes/bepis_nodes.dm index f477569aea5a3..baefd8c11d048 100644 --- a/code/modules/research/techweb/nodes/bepis_nodes.dm +++ b/code/modules/research/techweb/nodes/bepis_nodes.dm @@ -1,5 +1,3 @@ -//Nodes that are found inside Bepis Disks. - /datum/techweb_node/light_apps id = TECHWEB_NODE_LIGHT_APPS display_name = "Illumination Applications" @@ -12,7 +10,6 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE - announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/extreme_office id = TECHWEB_NODE_EXTREME_OFFICE @@ -25,7 +22,6 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE - announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/spec_eng id = TECHWEB_NODE_SPEC_ENG @@ -38,7 +34,6 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE - announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/aus_security id = TECHWEB_NODE_AUS_SECURITY @@ -51,7 +46,6 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE - announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/interrogation id = TECHWEB_NODE_INTERROGATION @@ -64,7 +58,6 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE - announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/sticky_advanced id = TECHWEB_NODE_STICKY_ADVANCED @@ -77,7 +70,6 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE - announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/tackle_advanced id = TECHWEB_NODE_TACKLE_ADVANCED @@ -91,7 +83,6 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE - announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/mod_experimental id = TECHWEB_NODE_MOD_EXPERIMENTAL @@ -106,7 +97,6 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE - announce_channels = list(RADIO_CHANNEL_COMMON) /datum/techweb_node/posisphere id = TECHWEB_NODE_POSITRONIC_SPHERE @@ -118,4 +108,3 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) hidden = TRUE experimental = TRUE - announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/biology_nodes.dm b/code/modules/research/techweb/nodes/biology_nodes.dm index 25f9163ab48c4..7b553445a9c2a 100644 --- a/code/modules/research/techweb/nodes/biology_nodes.dm +++ b/code/modules/research/techweb/nodes/biology_nodes.dm @@ -14,7 +14,6 @@ "mod_reagent_scanner", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cytology id = TECHWEB_NODE_CYTOLOGY @@ -61,7 +60,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/people/mutant = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) // Botany root node /datum/techweb_node/botany_equip @@ -90,7 +88,6 @@ "portaseeder", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/selection id = TECHWEB_NODE_SELECTION @@ -104,4 +101,3 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/random/plants/wild) discount_experiments = list(/datum/experiment/scanning/random/plants/traits = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SERVICE) diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm index eeeed268be552..8a9d09807d627 100644 --- a/code/modules/research/techweb/nodes/cyborg_nodes.dm +++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm @@ -44,7 +44,6 @@ "borg_upgrade_restart", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_service id = TECHWEB_NODE_BORG_SERVICES @@ -60,7 +59,6 @@ "borg_upgrade_service_cookbook", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_mining id = TECHWEB_NODE_BORG_MINING @@ -73,7 +71,6 @@ "borg_upgrade_diamonddrill", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_medical id = TECHWEB_NODE_BORG_MEDICAL @@ -90,7 +87,6 @@ "borg_upgrade_surgicalomnitool", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_utility id = TECHWEB_NODE_BORG_UTILITY @@ -109,7 +105,6 @@ "borg_upgrade_trashofholding", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/borg_utility/New() . = ..() @@ -128,7 +123,6 @@ "borg_upgrade_inducer", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) // Implants root node /datum/techweb_node/passive_implants @@ -150,7 +144,6 @@ "c38_trac", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_implants id = TECHWEB_NODE_CYBER_IMPLANTS @@ -164,7 +157,6 @@ "ci-herculean", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/New() ..() @@ -182,7 +174,6 @@ "ci-antistun", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/integrated_toolsets id = TECHWEB_NODE_INTERGRATED_TOOLSETS @@ -195,7 +186,6 @@ "ci-surgery", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs id = TECHWEB_NODE_CYBER_ORGANS @@ -212,7 +202,6 @@ "cybernetic_heart_tier2", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs_upgraded id = TECHWEB_NODE_CYBER_ORGANS_UPGRADED @@ -232,7 +221,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/people/augmented_organs) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cyber/cyber_organs_adv id = TECHWEB_NODE_CYBER_ORGANS_ADV @@ -248,4 +236,3 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/people/android = TECHWEB_TIER_5_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/engi_nodes.dm b/code/modules/research/techweb/nodes/engi_nodes.dm index 0d8572130fb80..949b880d1f23a 100644 --- a/code/modules/research/techweb/nodes/engi_nodes.dm +++ b/code/modules/research/techweb/nodes/engi_nodes.dm @@ -42,7 +42,6 @@ "super_cell", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/parts_adv id = TECHWEB_NODE_PARTS_ADV @@ -60,7 +59,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier2_any) - announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/parts_bluespace @@ -80,7 +78,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_any = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/telecomms id = TECHWEB_NODE_TELECOMS @@ -170,7 +167,6 @@ "tray_goggles", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/holographics id = TECHWEB_NODE_HOLOGRAPHICS @@ -215,7 +211,6 @@ "ci-sechud", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/night_vision id = TECHWEB_NODE_NIGHT_VISION @@ -231,4 +226,3 @@ "security_hud_night", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/mech_nodes.dm b/code/modules/research/techweb/nodes/mech_nodes.dm index 82d6484bf0225..b09957076d712 100644 --- a/code/modules/research/techweb/nodes/mech_nodes.dm +++ b/code/modules/research/techweb/nodes/mech_nodes.dm @@ -36,7 +36,6 @@ "mech_radio", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_clown id = TECHWEB_NODE_MECH_CLOWN @@ -61,7 +60,6 @@ "borg_transform_clown", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SECURITY) //The dread upon security when they hear this... /datum/techweb_node/mech_medical id = TECHWEB_NODE_MECH_MEDICAL @@ -98,7 +96,6 @@ "clarke_peri", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SUPPLY) /datum/techweb_node/mech_combat id = TECHWEB_NODE_MECH_COMBAT @@ -115,7 +112,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/scanning/random/mecha_equipped_scan) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_assault id = TECHWEB_NODE_MECH_ASSAULT @@ -136,7 +132,6 @@ "durand_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_light id = TECHWEB_NODE_MECH_LIGHT @@ -157,7 +152,6 @@ "gygax_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_heavy id = TECHWEB_NODE_MECH_HEAVY @@ -178,7 +172,6 @@ "savannah_ivanov_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_infiltrator id = TECHWEB_NODE_MECH_INFILTRATOR @@ -199,7 +192,6 @@ "phazon_targ", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/justice id = "mecha_justice" @@ -230,7 +222,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/random/mecha_damage_scan = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_firearms id = TECHWEB_NODE_MECH_FIREARMS @@ -246,7 +237,6 @@ "mech_carbine_ammo", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_heavy_arms id = TECHWEB_NODE_MECH_HEAVY_ARMS @@ -262,7 +252,6 @@ "mech_missile_rack_ammo", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mech_equip_bluespace id = TECHWEB_NODE_MECH_EQUIP_BLUESPACE @@ -275,4 +264,3 @@ "mech_wormhole_gen", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/medbay_nodes.dm b/code/modules/research/techweb/nodes/medbay_nodes.dm index 897a2edf18e43..fababbc55e748 100644 --- a/code/modules/research/techweb/nodes/medbay_nodes.dm +++ b/code/modules/research/techweb/nodes/medbay_nodes.dm @@ -60,7 +60,6 @@ "fluid_ducts", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/medbay_equip_adv id = TECHWEB_NODE_MEDBAY_EQUIP_ADV @@ -80,7 +79,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/reagent/haloperidol) - announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/cryostasis id = TECHWEB_NODE_CRYOSTASIS @@ -96,4 +94,3 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/scanning/reagent/cryostylane = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/nodes/mining_nodes.dm b/code/modules/research/techweb/nodes/mining_nodes.dm index 1bfa3a9284ad5..d8a6539caa3ff 100644 --- a/code/modules/research/techweb/nodes/mining_nodes.dm +++ b/code/modules/research/techweb/nodes/mining_nodes.dm @@ -48,7 +48,6 @@ "mesons", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/low_pressure_excavation id = TECHWEB_NODE_LOW_PRESSURE_EXCAVATION @@ -68,7 +67,6 @@ "borg_upgrade_hypermod", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/plasma_mining id = TECHWEB_NODE_PLASMA_MINING @@ -80,7 +78,6 @@ "plasmacutter_adv", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/bitrunning id = TECHWEB_NODE_BITRUNNING @@ -93,7 +90,6 @@ "netpod", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SUPPLY) /datum/techweb_node/mining_adv id = TECHWEB_NODE_MINING_ADV @@ -106,4 +102,3 @@ "mech_diamond_drill", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_SUPPLY) diff --git a/code/modules/research/techweb/nodes/modsuit_nodes.dm b/code/modules/research/techweb/nodes/modsuit_nodes.dm index cc31a1fc1ef77..955389f61aeba 100644 --- a/code/modules/research/techweb/nodes/modsuit_nodes.dm +++ b/code/modules/research/techweb/nodes/modsuit_nodes.dm @@ -36,7 +36,6 @@ "mod_sign_radio", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/mod_entertainment id = TECHWEB_NODE_MOD_ENTERTAINMENT @@ -50,7 +49,6 @@ "mod_waddle", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SERVICE) /datum/techweb_node/mod_medical id = TECHWEB_NODE_MOD_MEDICAL @@ -65,7 +63,6 @@ "mod_patienttransport", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/mod_engi id = TECHWEB_NODE_MOD_ENGI @@ -80,7 +77,6 @@ "mod_mister_atmos", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/mod_security id = TECHWEB_NODE_MOD_SECURITY @@ -99,7 +95,6 @@ "mod_criminalcapture", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SECURITY) /datum/techweb_node/mod_medical_adv id = TECHWEB_NODE_MOD_MEDICAL_ADV @@ -113,7 +108,6 @@ "mod_statusreadout", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/mod_engi_adv id = TECHWEB_NODE_MOD_ENGI_ADV @@ -128,7 +122,6 @@ "mod_storage_expanded", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_ENGINEERING) /datum/techweb_node/mod_engi_adv/New() if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) //we'll really need the rad protection modsuit module @@ -146,4 +139,3 @@ "mod_kinesis", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/research_nodes.dm b/code/modules/research/techweb/nodes/research_nodes.dm index f05199ab65e68..b70d9582681ce 100644 --- a/code/modules/research/techweb/nodes/research_nodes.dm +++ b/code/modules/research/techweb/nodes/research_nodes.dm @@ -28,7 +28,6 @@ "bluespace_crystal", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/applied_bluespace id = TECHWEB_NODE_APPLIED_BLUESPACE @@ -50,7 +49,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/scanning/points/bluespace_crystal) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL, RADIO_CHANNEL_SERVICE, RADIO_CHANNEL_SUPPLY) /datum/techweb_node/bluespace_travel id = TECHWEB_NODE_BLUESPACE_TRAVEL @@ -69,7 +67,6 @@ "swapper", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/anomaly_research id = TECHWEB_NODE_ANOMALY_RESEARCH @@ -82,7 +79,6 @@ "reactive_armour", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/anomaly_shells id = TECHWEB_NODE_ANOMALY_SHELLS @@ -98,4 +94,3 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) discount_experiments = list(/datum/experiment/scanning/points/anomalies = TECHWEB_TIER_5_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) diff --git a/code/modules/research/techweb/nodes/robo_nodes.dm b/code/modules/research/techweb/nodes/robo_nodes.dm index 2b43ba0e4257c..ff018e85b7c9a 100644 --- a/code/modules/research/techweb/nodes/robo_nodes.dm +++ b/code/modules/research/techweb/nodes/robo_nodes.dm @@ -51,7 +51,6 @@ "remove_module", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE) /datum/techweb_node/ai/New() . = ..() @@ -69,7 +68,7 @@ /datum/techweb_node/ai_laws id = TECHWEB_NODE_AI_LAWS - display_name = "Advanced AI Upgrades" + display_name = "Advanced AI Laws" description = "Delving into sophisticated AI directives, with hopes that they won't lead to humanity's extinction." prereq_ids = list(TECHWEB_NODE_AI) design_ids = list( @@ -94,7 +93,5 @@ "freeformcore_module", "onehuman_module", "purge_module", - "ai_power_upgrade" ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_COMMAND) diff --git a/code/modules/research/techweb/nodes/security_nodes.dm b/code/modules/research/techweb/nodes/security_nodes.dm index 97d2036207c56..2d3dd63864f25 100644 --- a/code/modules/research/techweb/nodes/security_nodes.dm +++ b/code/modules/research/techweb/nodes/security_nodes.dm @@ -39,8 +39,6 @@ "electropack", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SECURITY) - /datum/techweb_node/riot_supression id = TECHWEB_NODE_RIOT_SUPRESSION @@ -57,7 +55,6 @@ "bola_energy", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/explosives id = TECHWEB_NODE_EXPLOSIVES @@ -71,7 +68,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb) - announce_channels = list(RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_MEDICAL) /datum/techweb_node/exotic_ammo id = TECHWEB_NODE_EXOTIC_AMMO @@ -85,7 +81,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/ordnance/explosive/highyieldbomb = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/electric_weapons id = TECHWEB_NODE_ELECTRIC_WEAPONS @@ -99,7 +94,6 @@ "lasershell", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_SECURITY) /datum/techweb_node/beam_weapons id = TECHWEB_NODE_BEAM_WEAPONS @@ -111,4 +105,3 @@ "nuclear_gun", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_SECURITY) diff --git a/code/modules/research/techweb/nodes/service_nodes.dm b/code/modules/research/techweb/nodes/service_nodes.dm index a2f6b03007109..3735dc41b3b2c 100644 --- a/code/modules/research/techweb/nodes/service_nodes.dm +++ b/code/modules/research/techweb/nodes/service_nodes.dm @@ -51,7 +51,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) discount_experiments = list(/datum/experiment/scanning/random/janitor_trash = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/consoles id = TECHWEB_NODE_CONSOLES @@ -79,7 +78,6 @@ "bounty_pad", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_SERVICE) /datum/techweb_node/gaming id = TECHWEB_NODE_GAMING @@ -147,7 +145,6 @@ "roastingstick", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) - announce_channels = list(RADIO_CHANNEL_SERVICE) // Fishing root node /datum/techweb_node/fishing_equip diff --git a/code/modules/research/techweb/nodes/surgery_nodes.dm b/code/modules/research/techweb/nodes/surgery_nodes.dm index 7af1dacf1df91..4be7a3256ac70 100644 --- a/code/modules/research/techweb/nodes/surgery_nodes.dm +++ b/code/modules/research/techweb/nodes/surgery_nodes.dm @@ -20,7 +20,6 @@ "surgery_heal_burn_upgrade", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_adv id = TECHWEB_NODE_SURGERY_ADV @@ -38,7 +37,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) required_experiments = list(/datum/experiment/autopsy/human) - announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_exp id = TECHWEB_NODE_SURGERY_EXP @@ -69,7 +67,6 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/autopsy/nonhuman = TECHWEB_TIER_3_POINTS) - announce_channels = list(RADIO_CHANNEL_MEDICAL) /datum/techweb_node/surgery_tools id = TECHWEB_NODE_SURGERY_TOOLS @@ -83,4 +80,3 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) discount_experiments = list(/datum/experiment/autopsy/xenomorph = TECHWEB_TIER_4_POINTS) - announce_channels = list(RADIO_CHANNEL_MEDICAL) diff --git a/code/modules/research/techweb/techweb_types.dm b/code/modules/research/techweb/techweb_types.dm index 407008b284497..f5532e9e53f9d 100644 --- a/code/modules/research/techweb/techweb_types.dm +++ b/code/modules/research/techweb/techweb_types.dm @@ -6,10 +6,10 @@ organization = "Nanotrasen" should_generate_points = TRUE -/datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE, atom/research_source) +/datum/techweb/science/research_node(datum/techweb_node/node, force = FALSE, auto_adjust_cost = TRUE, get_that_dosh = TRUE) . = ..() if(.) - node.on_station_research(research_source) + node.on_station_research() /datum/techweb/oldstation id = "CHARLIE" diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 227f1be5165dd..832d266723d13 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -11,7 +11,8 @@ var/originalcolor /datum/status_effect/rainbow_protection/on_apply() - owner.add_traits(list(TRAIT_GODMODE, TRAIT_PACIFISM), TRAIT_STATUS_EFFECT(id)) + owner.status_flags |= GODMODE + ADD_TRAIT(owner, TRAIT_PACIFISM, /datum/status_effect/rainbow_protection) owner.visible_message(span_warning("[owner] shines with a brilliant rainbow light."), span_notice("You feel protected by an unknown force!")) originalcolor = owner.color @@ -22,8 +23,9 @@ return ..() /datum/status_effect/rainbow_protection/on_remove() + owner.status_flags &= ~GODMODE owner.color = originalcolor - owner.remove_traits(list(TRAIT_GODMODE, TRAIT_PACIFISM), TRAIT_STATUS_EFFECT(id)) + REMOVE_TRAIT(owner, TRAIT_PACIFISM, /datum/status_effect/rainbow_protection) owner.visible_message(span_notice("[owner] stops glowing, the rainbow light fading away."), span_warning("You no longer feel protected...")) @@ -104,7 +106,7 @@ RegisterSignal(owner, COMSIG_LIVING_RESIST, PROC_REF(breakCube)) cube = new /obj/structure/ice_stasis(get_turf(owner)) owner.forceMove(cube) - ADD_TRAIT(owner, TRAIT_GODMODE, TRAIT_STATUS_EFFECT(id)) + owner.status_flags |= GODMODE return ..() /datum/status_effect/frozenstasis/tick(seconds_between_ticks) @@ -119,7 +121,7 @@ /datum/status_effect/frozenstasis/on_remove() if(cube) qdel(cube) - REMOVE_TRAIT(owner, TRAIT_GODMODE, TRAIT_STATUS_EFFECT(id)) + owner.status_flags &= ~GODMODE UnregisterSignal(owner, COMSIG_LIVING_RESIST) /datum/status_effect/slime_clone diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 72d79b20ec53f..9a416372a28ae 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -700,7 +700,7 @@ return CONTEXTUAL_SCREENTIP_SET /obj/item/slimepotion/slime/sentience/click_alt(mob/living/user) - potion_reason = tgui_input_text(user, "Enter reason for offering potion", "Intelligence Potion", potion_reason, max_length = MAX_MESSAGE_LEN, multiline = TRUE) + potion_reason = tgui_input_text(user, "Enter reason for offering potion", "Intelligence Potion", potion_reason, multiline = TRUE) return CLICK_ACTION_SUCCESS /obj/item/slimepotion/slime/sentience/attack(mob/living/dumb_mob, mob/user) diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 3cbe494c8d0fb..484fa32ac8777 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -153,10 +153,9 @@ /obj/structure/table/abductor/wabbajack/right desc = "It wakes so you may sleep." -/** - * Bar staff, mobs with the TRAIT_GODMODE trait (as long as they stay in the shuttle) - * that just want to make sure people have drinks and a good shuttle time. - */ +// Bar staff, GODMODE mobs(as long as they stay in the shuttle) that just want to make sure people have drinks +// and a good time. + /mob/living/basic/drone/snowflake/bardrone name = "Bardrone" desc = "A barkeeping drone, a robot built to tend bars." diff --git a/code/modules/spells/spell_types/jaunt/_jaunt.dm b/code/modules/spells/spell_types/jaunt/_jaunt.dm index c4255dc175be4..207a7ed8b5be4 100644 --- a/code/modules/spells/spell_types/jaunt/_jaunt.dm +++ b/code/modules/spells/spell_types/jaunt/_jaunt.dm @@ -25,11 +25,6 @@ return ..() -/datum/action/cooldown/spell/jaunt/PreActivate(atom/target) - if(SEND_SIGNAL(target, COMSIG_MOB_PRE_JAUNT, target) & COMPONENT_BLOCK_JAUNT) - return FALSE - . = ..() - /datum/action/cooldown/spell/jaunt/before_cast(atom/cast_on) return ..() | SPELL_NO_FEEDBACK // Don't do the feedback until after we're jaunting diff --git a/code/modules/spells/spell_types/list_target/telepathy.dm b/code/modules/spells/spell_types/list_target/telepathy.dm index 861fc49732dfc..9d512f5a0b9ac 100644 --- a/code/modules/spells/spell_types/list_target/telepathy.dm +++ b/code/modules/spells/spell_types/list_target/telepathy.dm @@ -22,7 +22,7 @@ if(. & SPELL_CANCEL_CAST) return - message = tgui_input_text(owner, "What do you wish to whisper to [cast_on]?", "[src]", max_length = MAX_MESSAGE_LEN) + message = tgui_input_text(owner, "What do you wish to whisper to [cast_on]?", "[src]") if(QDELETED(src) || QDELETED(owner) || QDELETED(cast_on) || !can_cast_spell()) return . | SPELL_CANCEL_CAST diff --git a/code/modules/spells/spell_types/self/mime_vow.dm b/code/modules/spells/spell_types/self/mime_vow.dm index 3d1c44dabd608..d4e34880b534d 100644 --- a/code/modules/spells/spell_types/self/mime_vow.dm +++ b/code/modules/spells/spell_types/self/mime_vow.dm @@ -32,6 +32,6 @@ cast_on.log_message("broke [cast_on.p_their()] vow of silence.", LOG_GAME) cast_on.add_mood_event("vow", /datum/mood_event/broken_vow) REMOVE_TRAIT(cast_on, TRAIT_MIMING, "[type]") - var/datum/job/mime/mime_job = SSjob.get_job(JOB_MIME) + var/datum/job/mime/mime_job = SSjob.GetJob(JOB_MIME) mime_job.total_positions += 1 qdel(src) diff --git a/code/modules/spells/spell_types/self/rod_form.dm b/code/modules/spells/spell_types/self/rod_form.dm index 6f26ab167195f..9989c4420c086 100644 --- a/code/modules/spells/spell_types/self/rod_form.dm +++ b/code/modules/spells/spell_types/self/rod_form.dm @@ -138,7 +138,8 @@ our_wizard = WEAKREF(wizard) wizard.forceMove(src) - wizard.add_traits(list(TRAIT_GODMODE, TRAIT_MAGICALLY_PHASED, TRAIT_NO_TRANSFORM), REF(src)) + wizard.status_flags |= GODMODE + wizard.add_traits(list(TRAIT_MAGICALLY_PHASED, TRAIT_NO_TRANSFORM), REF(src)) /** * Eject our current wizard, removing them from the rod @@ -149,7 +150,8 @@ if(QDELETED(wizard)) return - wizard.remove_traits(list(TRAIT_GODMODE, TRAIT_MAGICALLY_PHASED, TRAIT_NO_TRANSFORM), REF(src)) + wizard.status_flags &= ~GODMODE + wizard.remove_traits(list(TRAIT_MAGICALLY_PHASED, TRAIT_NO_TRANSFORM), REF(src)) wizard.forceMove(get_turf(src)) our_wizard = null diff --git a/code/modules/spells/spell_types/self/voice_of_god.dm b/code/modules/spells/spell_types/self/voice_of_god.dm index e7602a214f18f..b1efaabd2a826 100644 --- a/code/modules/spells/spell_types/self/voice_of_god.dm +++ b/code/modules/spells/spell_types/self/voice_of_god.dm @@ -25,7 +25,7 @@ if(. & SPELL_CANCEL_CAST) return - command = tgui_input_text(cast_on, "Speak with the Voice of God", "Command", max_length = MAX_MESSAGE_LEN) + command = tgui_input_text(cast_on, "Speak with the Voice of God", "Command") if(QDELETED(src) || QDELETED(cast_on) || !can_cast_spell()) return . | SPELL_CANCEL_CAST if(!command) diff --git a/code/modules/spells/spell_types/shapeshift/_shape_status.dm b/code/modules/spells/spell_types/shapeshift/_shape_status.dm index 2f8d53eeac203..cffd9804ea588 100644 --- a/code/modules/spells/spell_types/shapeshift/_shape_status.dm +++ b/code/modules/spells/spell_types/shapeshift/_shape_status.dm @@ -174,9 +174,7 @@ var/damage_to_apply = owner.maxHealth * (caster_mob.get_total_damage() / caster_mob.maxHealth) owner.apply_damage(damage_to_apply, source_spell.convert_damage_type, forced = TRUE, spread_damage = TRUE, wound_bonus = CANT_WOUND) - // Only transfer blood if both mobs are supposed to have a blood volume - if (initial(owner.blood_volume) > 0 && initial(caster_mob.blood_volume) > 0 && !HAS_TRAIT(owner, TRAIT_NOBLOOD) && !HAS_TRAIT(caster_mob, TRAIT_NOBLOOD)) - owner.blood_volume = caster_mob.blood_volume + owner.blood_volume = caster_mob.blood_volume for(var/datum/action/bodybound_action as anything in caster_mob.actions) if(bodybound_action.target != caster_mob) @@ -214,9 +212,8 @@ caster_mob.fully_heal(HEAL_DAMAGE) // Remove all of our damage before setting our health to a proportion of the former transformed mob's health var/damage_to_apply = caster_mob.maxHealth * (owner.get_total_damage() / owner.maxHealth) caster_mob.apply_damage(damage_to_apply, source_spell.convert_damage_type, forced = TRUE, spread_damage = TRUE, wound_bonus = CANT_WOUND) - // Only transfer blood if both mobs are supposed to have a blood volume - if (initial(owner.blood_volume) > 0 && initial(caster_mob.blood_volume) > 0 && !HAS_TRAIT(owner, TRAIT_NOBLOOD) && !HAS_TRAIT(caster_mob, TRAIT_NOBLOOD)) - caster_mob.blood_volume = owner.blood_volume + + caster_mob.blood_volume = owner.blood_volume /datum/status_effect/shapechange_mob/from_spell/on_shape_death(datum/source, gibbed) var/datum/action/cooldown/spell/shapeshift/source_spell = source_weakref.resolve() diff --git a/code/modules/surgery/advanced/brainwashing.dm b/code/modules/surgery/advanced/brainwashing.dm index 5509f925cfd10..21870ae57b8df 100644 --- a/code/modules/surgery/advanced/brainwashing.dm +++ b/code/modules/surgery/advanced/brainwashing.dm @@ -65,7 +65,7 @@ success_sound = 'sound/items/taperecorder/taperecorder_close.ogg' /datum/surgery_step/brainwash/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) - objective = tgui_input_text(user, "Choose the objective to imprint on your victim's brain", "Brainwashing", max_length = MAX_MESSAGE_LEN) + objective = tgui_input_text(user, "Choose the objective to imprint on your victim's brain", "Brainwashing") if(!objective) return SURGERY_STEP_FAIL display_results( diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 2a16c2a4922c1..296f818e58744 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -457,12 +457,11 @@ * required_bodytype - A bodytype flag requirement to get this damage (ex: BODYTYPE_ORGANIC) * wound_bonus - Additional bonus chance to get a wound. * bare_wound_bonus - Additional bonus chance to get a wound if the bodypart is naked. - * wound_clothing - If this should damage clothing. * sharpness - Flag on whether the attack is edged or pointy * attack_direction - The direction the bodypart is attacked from, used to send blood flying in the opposite direction. * damage_source - The source of damage, typically a weapon. */ -/obj/item/bodypart/proc/receive_damage(brute = 0, burn = 0, blocked = 0, updating_health = TRUE, forced = FALSE, required_bodytype = null, wound_bonus = 0, bare_wound_bonus = 0, sharpness = NONE, attack_direction = null, damage_source, wound_clothing = TRUE) +/obj/item/bodypart/proc/receive_damage(brute = 0, burn = 0, blocked = 0, updating_health = TRUE, forced = FALSE, required_bodytype = null, wound_bonus = 0, bare_wound_bonus = 0, sharpness = NONE, attack_direction = null, damage_source) SHOULD_CALL_PARENT(TRUE) var/hit_percent = forced ? 1 : (100-blocked)/100 @@ -470,7 +469,7 @@ return FALSE if (!forced) if(!isnull(owner)) - if (HAS_TRAIT(owner, TRAIT_GODMODE)) + if (owner.status_flags & GODMODE) return FALSE if (SEND_SIGNAL(owner, COMSIG_CARBON_LIMB_DAMAGED, src, brute, burn) & COMPONENT_PREVENT_LIMB_DAMAGE) return FALSE @@ -536,7 +535,7 @@ return // now we have our wounding_type and are ready to carry on with wounds and dealing the actual damage if(wounding_dmg >= WOUND_MINIMUM_DAMAGE && wound_bonus != CANT_WOUND) - check_wounding(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, attack_direction, damage_source = damage_source, wound_clothing = wound_clothing) + check_wounding(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, attack_direction, damage_source = damage_source) for(var/datum/wound/iter_wound as anything in wounds) iter_wound.receive_damage(wounding_type, wounding_dmg, wound_bonus, damage_source) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index c53443503fdd5..5579cb64d83d5 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -9,7 +9,9 @@ if(!owner || (bodypart_flags & BODYPART_UNREMOVABLE)) return FALSE var/mob/living/carbon/limb_owner = owner - if(HAS_TRAIT(limb_owner, TRAIT_GODMODE) || HAS_TRAIT(limb_owner, TRAIT_NODISMEMBER)) + if(limb_owner.status_flags & GODMODE) + return FALSE + if(HAS_TRAIT(limb_owner, TRAIT_NODISMEMBER)) return FALSE var/obj/item/bodypart/affecting = limb_owner.get_bodypart(BODY_ZONE_CHEST) diff --git a/code/modules/surgery/bodyparts/wounds.dm b/code/modules/surgery/bodyparts/wounds.dm index 66278669d8c64..93d61b091d9c0 100644 --- a/code/modules/surgery/bodyparts/wounds.dm +++ b/code/modules/surgery/bodyparts/wounds.dm @@ -1,8 +1,8 @@ /// Allows us to roll for and apply a wound without actually dealing damage. Used for aggregate wounding power with pellet clouds -/obj/item/bodypart/proc/painless_wound_roll(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, sharpness=NONE, wound_clothing) +/obj/item/bodypart/proc/painless_wound_roll(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, sharpness=NONE) SHOULD_CALL_PARENT(TRUE) - if(!owner || wounding_dmg <= WOUND_MINIMUM_DAMAGE || wound_bonus == CANT_WOUND || HAS_TRAIT(owner, TRAIT_GODMODE)) + if(!owner || wounding_dmg <= WOUND_MINIMUM_DAMAGE || wound_bonus == CANT_WOUND || (owner.status_flags & GODMODE)) return var/mangled_state = get_mangled_state() @@ -34,7 +34,7 @@ wounding_type = WOUND_BLUNT if ((dismemberable_by_wound() || dismemberable_by_total_damage()) && try_dismember(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus)) return - return check_wounding(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus, wound_clothing) + return check_wounding(wounding_type, wounding_dmg, wound_bonus, bare_wound_bonus) /** * check_wounding() is where we handle rolling for, selecting, and applying a wound if we meet the criteria @@ -47,13 +47,12 @@ * * damage- How much damage is tied to this attack, since wounding potential scales with damage in an attack (see: WOUND_DAMAGE_EXPONENT) * * wound_bonus- The wound_bonus of an attack * * bare_wound_bonus- The bare_wound_bonus of an attack - * * wound_clothing- If this should damage clothing. */ -/obj/item/bodypart/proc/check_wounding(woundtype, damage, wound_bonus, bare_wound_bonus, attack_direction, damage_source, wound_clothing) +/obj/item/bodypart/proc/check_wounding(woundtype, damage, wound_bonus, bare_wound_bonus, attack_direction, damage_source) SHOULD_CALL_PARENT(TRUE) RETURN_TYPE(/datum/wound) - if(HAS_TRAIT(owner, TRAIT_NEVER_WOUNDED) || HAS_TRAIT(owner, TRAIT_GODMODE)) + if(HAS_TRAIT(owner, TRAIT_NEVER_WOUNDED) || (owner.status_flags & GODMODE)) return // note that these are fed into an exponent, so these are magnified @@ -73,7 +72,7 @@ var/base_roll = rand(1, round(damage ** WOUND_DAMAGE_EXPONENT)) var/injury_roll = base_roll - injury_roll += check_woundings_mods(woundtype, damage, wound_bonus, bare_wound_bonus, wound_clothing) + injury_roll += check_woundings_mods(woundtype, damage, wound_bonus, bare_wound_bonus) var/list/series_wounding_mods = check_series_wounding_mods() if(injury_roll > WOUND_DISMEMBER_OUTRIGHT_THRESH && prob(get_damage() / max_damage * 100) && can_dismember()) @@ -241,7 +240,7 @@ * Arguments: * * It's the same ones on [/obj/item/bodypart/proc/receive_damage] */ -/obj/item/bodypart/proc/check_woundings_mods(wounding_type, damage, wound_bonus, bare_wound_bonus, wound_clothing) +/obj/item/bodypart/proc/check_woundings_mods(wounding_type, damage, wound_bonus, bare_wound_bonus) SHOULD_CALL_PARENT(TRUE) var/armor_ablation = 0 @@ -253,12 +252,10 @@ for(var/obj/item/clothing/clothes as anything in clothing) // unlike normal armor checks, we tabluate these piece-by-piece manually so we can also pass on appropriate damage the clothing's limbs if necessary armor_ablation += clothes.get_armor_rating(WOUND) - // Should attack also cause damage to the clothes? - if (wound_clothing) - if(wounding_type == WOUND_SLASH) - clothes.take_damage_zone(body_zone, damage, BRUTE) - else if(wounding_type == WOUND_BURN) - clothes.take_damage_zone(body_zone, damage, BURN) + if(wounding_type == WOUND_SLASH) + clothes.take_damage_zone(body_zone, damage, BRUTE) + else if(wounding_type == WOUND_BURN && damage >= 10) // lazy way to block freezing from shredding clothes without adding another var onto apply_damage() + clothes.take_damage_zone(body_zone, damage, BURN) if(!armor_ablation) injury_mod += bare_wound_bonus diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index c4987ae5c4786..83474363c6cf2 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -85,8 +85,6 @@ if(isnull(step)) return FALSE var/obj/item/tool = user.get_active_held_item() - if(tool) - tool = tool.get_proxy_attacker_for(target, user) if(step.try_op(user, target, user.zone_selected, tool, src, try_to_fail)) return TRUE if(tool && tool.tool_behaviour) //Mechanic organ manipulation isn't done with just surgery tools @@ -213,24 +211,13 @@ if(isnull(chosen_organ)) return SURGERY_STEP_FAIL target_organ = chosen_organ - - if(user && target && user.Adjacent(target)) - //tool check - var/obj/item/held_tool = user.get_active_held_item() - if(held_tool) - held_tool = held_tool.get_proxy_attacker_for(target, user) - if(held_tool != tool) - return SURGERY_STEP_FAIL - - //organ check + if(user && target && user.Adjacent(target) && user.get_active_held_item() == tool) target_organ = organs[target_organ] if(!target_organ) return SURGERY_STEP_FAIL if(target_organ.organ_flags & ORGAN_UNREMOVABLE) to_chat(user, span_warning("[target_organ] is too well connected to take out!")) return SURGERY_STEP_FAIL - - //start operation display_results( user, target, diff --git a/code/modules/surgery/organs/external/_visual_organs.dm b/code/modules/surgery/organs/external/_visual_organs.dm index 74399838f1f6b..a31debceab6b1 100644 --- a/code/modules/surgery/organs/external/_visual_organs.dm +++ b/code/modules/surgery/organs/external/_visual_organs.dm @@ -27,7 +27,7 @@ Unlike normal organs, we're actually inside a persons limbs at all times ///If not null, overrides the appearance with this sprite accessory datum var/sprite_accessory_override -/**accessory_type is optional if you haven't set sprite_datums for the object, and is used mostly to generate sprite_datums from a persons DNA +/**accessory_type is optional if you havent set sprite_datums for the object, and is used mostly to generate sprite_datums from a persons DNA * For _mob_sprite we make a distinction between "Round Snout" and "round". Round Snout is the name of the sprite datum, while "round" would be part of the sprite * I'm sorry */ @@ -263,11 +263,6 @@ Unlike normal organs, we're actually inside a persons limbs at all times /datum/bodypart_overlay/mutant/antennae/get_base_icon_state() return burnt ? burn_datum.icon_state : sprite_datum.icon_state -/datum/bodypart_overlay/mutant/antennae/can_draw_on_bodypart(mob/living/carbon/human/human) - if(!(human.head?.flags_inv & HIDEANTENNAE)) - return TRUE - return FALSE - ///The leafy hair of a podperson /obj/item/organ/external/pod_hair name = "podperson hair" diff --git a/code/modules/surgery/organs/external/restyling.dm b/code/modules/surgery/organs/external/restyling.dm index 097f8b53bd744..f862d9e9c0867 100644 --- a/code/modules/surgery/organs/external/restyling.dm +++ b/code/modules/surgery/organs/external/restyling.dm @@ -1,4 +1,4 @@ -//Contains a bunch of procs for different types, but in the end it just lets you restyle the bodypart overlay so that's why it's here +//Contains a bunch of procs for different types, but in the end it just lets you restyle the bodypart overlay so thats why its here ///Helper proc to fetch a list of styles a player might want to restyle their features into during the round : returns list("Cabbage" = /datum/sprite_accessory/cabbage) /obj/item/organ/proc/get_valid_restyles() @@ -22,7 +22,7 @@ if(src.body_zone == body_zone) INVOKE_ASYNC(src, PROC_REF(attempt_feature_restyle), source, trimmer, original_target, body_zone, restyle_type, style_speed) -///Invoke async so we don't break signals +///Invoke async so we dont break signals /obj/item/bodypart/proc/on_attempt_feature_restyle(atom/source, mob/living/trimmer, atom/movable/original_target, body_zone, restyle_type, style_speed) SIGNAL_HANDLER @@ -41,7 +41,7 @@ target_organ = valid_features[1] if(2 to INFINITY) var/choose_options = list() - var/name_to_organ = list() //literally so I don't have to loop again after someone's made their choice + var/name_to_organ = list() //literally so I dont have to loop again after someones made their choice for(var/obj/item/organ/organ_choice as anything in valid_features) choose_options[organ_choice.name] = image(organ_choice) name_to_organ[organ_choice.name] = organ_choice @@ -56,7 +56,7 @@ target_organ.attempt_feature_restyle(source, trimmer, original_target, body_zone, restyle_type, style_speed) -///Invoke async so we don't break signals +///Invoke async so we dont break signals /obj/item/organ/proc/on_attempt_feature_restyle(atom/source, mob/living/trimmer, atom/movable/original_target, body_zone, restyle_type, style_speed) SIGNAL_HANDLER diff --git a/code/modules/surgery/organs/external/wings/moth_wings.dm b/code/modules/surgery/organs/external/wings/moth_wings.dm index a76b60325ff6d..87b944622aa09 100644 --- a/code/modules/surgery/organs/external/wings/moth_wings.dm +++ b/code/modules/surgery/organs/external/wings/moth_wings.dm @@ -35,7 +35,7 @@ /obj/item/organ/external/wings/moth/proc/update_float_move() SIGNAL_HANDLER - if(can_fly()) + if(!isspaceturf(owner.loc) && !burnt) var/datum/gas_mixture/current = owner.loc.return_air() if(current && (current.return_pressure() >= ONE_ATMOSPHERE*0.85)) //as long as there's reasonable pressure and no gravity, flight is possible ADD_TRAIT(owner, TRAIT_FREE_FLOAT_MOVEMENT, REF(src)) @@ -43,16 +43,6 @@ REMOVE_TRAIT(owner, TRAIT_FREE_FLOAT_MOVEMENT, REF(src)) -///Checks if our wings are usable -/obj/item/organ/external/wings/moth/proc/can_fly() - if(ishuman(owner)) - var/mob/living/carbon/human/human_owner = owner - if(human_owner.wear_suit?.flags_inv & HIDEMUTWINGS) - return FALSE //Can't fly with hidden wings - if(isspaceturf(owner.loc) || burnt) - return FALSE //No flight in space/burnt wings - return TRUE - ///check if our wings can burn off ;_; /obj/item/organ/external/wings/moth/proc/try_burn_wings(mob/living/carbon/human/human) SIGNAL_HANDLER diff --git a/code/modules/surgery/organs/internal/_internal_organ.dm b/code/modules/surgery/organs/internal/_internal_organ.dm index 8b7bd35493127..9f67fb3d89914 100644 --- a/code/modules/surgery/organs/internal/_internal_organ.dm +++ b/code/modules/surgery/organs/internal/_internal_organ.dm @@ -17,7 +17,7 @@ /obj/item/organ/internal/on_mob_remove(mob/living/carbon/organ_owner, special = FALSE) . = ..() - if((organ_flags & ORGAN_VITAL) && !special && !HAS_TRAIT(organ_owner, TRAIT_GODMODE)) + if((organ_flags & ORGAN_VITAL) && !special && !(organ_owner.status_flags & GODMODE)) if(organ_owner.stat != DEAD) organ_owner.investigate_log("has been killed by losing a vital organ ([src]).", INVESTIGATE_DEATHS) organ_owner.death() diff --git a/code/modules/surgery/organs/internal/ears/_ears.dm b/code/modules/surgery/organs/internal/ears/_ears.dm index 9fd0d89adfdd8..53b95b54d9bcf 100644 --- a/code/modules/surgery/organs/internal/ears/_ears.dm +++ b/code/modules/surgery/organs/internal/ears/_ears.dm @@ -64,7 +64,7 @@ * * ddeaf: Handles temporary deafness, 1 ddeaf = 2 seconds of deafness, by default (with no multiplier) */ /obj/item/organ/internal/ears/proc/adjustEarDamage(ddmg = 0, ddeaf = 0) - if(HAS_TRAIT(owner, TRAIT_GODMODE)) + if(owner.status_flags & GODMODE) update_temp_deafness() return @@ -85,7 +85,7 @@ if(isnull(owner)) return - if(HAS_TRAIT(owner, TRAIT_GODMODE)) + if(owner.status_flags & GODMODE) deaf = 0 if(deaf > 0) diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 6d7d24631f6a4..e15f3cdf161b5 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -145,19 +145,8 @@ //var/obj/item/bodypart/head/my_head = parent.get_bodypart(BODY_ZONE_HEAD) /// DOPPLER SHIFT REMOVAL if(my_head) if(my_head.head_flags & HEAD_EYECOLOR) - if(IS_ROBOTIC_ORGAN(src) || !my_head.draw_color || (parent.appears_alive() && !HAS_TRAIT(parent, TRAIT_KNOCKEDOUT))) - // show the eyes as open - eye_right.color = eye_color_right - eye_left.color = eye_color_left - else - // show the eyes as closed, and as such color them like eyelids wound be colored - var/list/base_color = rgb2num(my_head.draw_color, COLORSPACE_HSL) - base_color[2] *= 0.85 - base_color[3] *= 0.85 - var/eyelid_color = rgb(base_color[1], base_color[2], base_color[3], (length(base_color) >= 4 ? base_color[4] : null), COLORSPACE_HSL) - eye_right.color = eyelid_color - eye_left.color = eyelid_color - + eye_right.color = eye_color_right + eye_left.color = eye_color_left if(my_head.worn_face_offset) my_head.worn_face_offset.apply_offset(eye_left) my_head.worn_face_offset.apply_offset(eye_right) diff --git a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm index 4a80f1857a0df..5cdb27942358b 100644 --- a/code/modules/surgery/organs/internal/heart/heart_anomalock.dm +++ b/code/modules/surgery/organs/internal/heart/heart_anomalock.dm @@ -4,7 +4,7 @@ #define DOAFTER_IMPLANTING_HEART "implanting" /obj/item/organ/internal/heart/cybernetic/anomalock - name = "voltaic combat cyberheart" + name = "Voltaic Combat Cyberheart" desc = "A cutting-edge cyberheart, originally designed for Nanotrasen killsquad usage but later declassified for normal research. Voltaic technology allows the heart to keep the body upright in dire circumstances, alongside redirecting anomalous flux energy to fully shield the user from shocks and electro-magnetic pulses. Requires a refined Flux core as a power source." icon_state = "anomalock_heart" bleed_prevention = TRUE diff --git a/code/modules/surgery/organs/internal/lungs/_lungs.dm b/code/modules/surgery/organs/internal/lungs/_lungs.dm index 5f435fff98ebb..9b38803dd7743 100644 --- a/code/modules/surgery/organs/internal/lungs/_lungs.dm +++ b/code/modules/surgery/organs/internal/lungs/_lungs.dm @@ -592,7 +592,7 @@ * * breather: A carbon mob that is using the lungs to breathe. */ /obj/item/organ/internal/lungs/proc/check_breath(datum/gas_mixture/breath, mob/living/carbon/human/breather) - if(HAS_TRAIT(breather, TRAIT_GODMODE)) + if(breather.status_flags & GODMODE) breather.failed_last_breath = FALSE breather.clear_alert(ALERT_NOT_ENOUGH_OXYGEN) return FALSE diff --git a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm index 7df01c516a319..887df31e3fff8 100644 --- a/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm +++ b/code/modules/surgery/organs/internal/stomach/stomach_ethereal.dm @@ -10,7 +10,7 @@ /obj/item/organ/internal/stomach/ethereal/Initialize(mapload) . = ..() - cell = new /obj/item/stock_parts/power_store/cell/ethereal(src) + cell = new /obj/item/stock_parts/power_store/cell/ethereal(null) /obj/item/organ/internal/stomach/ethereal/Destroy() QDEL_NULL(cell) diff --git a/code/modules/surgery/organs/internal/tongue/_tongue.dm b/code/modules/surgery/organs/internal/tongue/_tongue.dm index 786f93263268b..b7a8a33588d87 100644 --- a/code/modules/surgery/organs/internal/tongue/_tongue.dm +++ b/code/modules/surgery/organs/internal/tongue/_tongue.dm @@ -600,7 +600,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list()) say_mod = "meows" liked_foodtypes = SEAFOOD | ORANGES | BUGS | GORE disliked_foodtypes = GROSS | CLOTH | RAW - organ_traits = list(TRAIT_WOUND_LICKER, TRAIT_FISH_EATER) + organ_traits = list(TRAIT_WOUND_LICKER) /obj/item/organ/internal/tongue/jelly name = "jelly tongue" diff --git a/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm b/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm index 4ed51e77e42d6..f2d9abae41669 100644 --- a/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm +++ b/code/modules/surgery/organs/internal/vocal_cords/_vocal_cords.dm @@ -60,7 +60,7 @@ . = ..() if(!.) return - var/command = tgui_input_text(owner, "Speak with the Voice of God", "Command", max_length = MAX_MESSAGE_LEN) + var/command = tgui_input_text(owner, "Speak with the Voice of God", "Command") if(!command) return if(QDELETED(src) || QDELETED(owner)) @@ -101,7 +101,7 @@ /datum/action/item_action/organ_action/use/adamantine_vocal_cords/Trigger(trigger_flags) if(!IsAvailable(feedback = TRUE)) return - var/message = tgui_input_text(owner, "Resonate a message to all nearby golems", "Resonate", max_length = MAX_MESSAGE_LEN) + var/message = tgui_input_text(owner, "Resonate a message to all nearby golems", "Resonate") if(!message) return if(QDELETED(src) || QDELETED(owner)) diff --git a/code/modules/surgery/revival.dm b/code/modules/surgery/revival.dm index 5ade25890ecb6..e0111feb52231 100644 --- a/code/modules/surgery/revival.dm +++ b/code/modules/surgery/revival.dm @@ -47,13 +47,6 @@ return FALSE return TRUE -/datum/surgery/revival/mechanic/is_valid_target(mob/living/patient) - if (iscarbon(patient)) - return FALSE - if (!(patient.mob_biotypes & (MOB_ROBOTIC|MOB_HUMANOID))) - return FALSE - return TRUE - /datum/surgery_step/revive name = "shock brain (defibrillator)" implements = list( diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index d23267fa326bd..a555548e43268 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -124,8 +124,6 @@ if(isnull(step)) return FALSE var/obj/item/tool = user.get_active_held_item() - if(tool) - tool = tool.get_proxy_attacker_for(target, user) if(step.try_op(user, target, user.zone_selected, tool, src, try_to_fail)) return TRUE if(tool && tool.item_flags & SURGICAL_TOOL) //Just because you used the wrong tool it doesn't mean you meant to whack the patient with it diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 8b20184b38ab0..336e76b4d70c2 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -178,7 +178,7 @@ target.clear_mood_event(SURGERY_MOOD_CATEGORY) //incase they gained the trait mid-surgery. has the added side effect that if someone has a bad surgical memory/mood and gets drunk & goes back to surgery, they'll forget they hated it, which is kinda funny imo. return if(target.stat >= UNCONSCIOUS) - var/datum/mood_event/surgery/target_mood_event = target.mob_mood?.mood_events[SURGERY_MOOD_CATEGORY] + var/datum/mood_event/surgery/target_mood_event = target.mob_mood.mood_events[SURGERY_MOOD_CATEGORY] if(!target_mood_event || target_mood_event.surgery_completed) //don't give sleeping mobs trauma. that said, if they fell asleep mid-surgery after already getting the bad mood, lets make sure they wake up to a (hopefully) happy memory. return switch(surgery_state) diff --git a/code/modules/tgui_input/say_modal/modal.dm b/code/modules/tgui_input/say_modal/modal.dm index b8087609022e2..bc3f8f314e021 100644 --- a/code/modules/tgui_input/say_modal/modal.dm +++ b/code/modules/tgui_input/say_modal/modal.dm @@ -86,7 +86,7 @@ if(!payload?["channel"]) CRASH("No channel provided to an open TGUI-Say") window_open = TRUE - if(payload["channel"] != OOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != LOOC_CHANNEL) // DOPPLER EDIT CHANGE (Add LOOC_CHANNEL) + if(payload["channel"] != OOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL) start_thinking() if(!client.typing_indicators) log_speech_indicators("[key_name(client)] started typing at [loc_name(client.mob)], indicators DISABLED.") diff --git a/code/modules/tgui_input/say_modal/speech.dm b/code/modules/tgui_input/say_modal/speech.dm index 32d524eb0146a..0d95b855a15ff 100644 --- a/code/modules/tgui_input/say_modal/speech.dm +++ b/code/modules/tgui_input/say_modal/speech.dm @@ -10,7 +10,7 @@ /datum/tgui_say/proc/alter_entry(payload) var/entry = payload["entry"] /// No OOC leaks - if(!entry || payload["channel"] == OOC_CHANNEL || payload["channel"] == ME_CHANNEL || payload["channel"] == LOOC_CHANNEL) // DOPPLER EDIT CHANGE - VERBS + if(!entry || payload["channel"] == OOC_CHANNEL || payload["channel"] == ME_CHANNEL) return pick(hurt_phrases) /// Random trimming for larger sentences if(length(entry) > 50) @@ -47,16 +47,6 @@ if(ADMIN_CHANNEL) SSadmin_verbs.dynamic_invoke_verb(client, /datum/admin_verb/cmd_admin_say, entry) return TRUE - // DOPPLER EDIT ADDITION START - VERBS - if(LOOC_CHANNEL) - client.looc(entry) - return TRUE - if(WHIS_CHANNEL) - client.mob.whisper_verb(entry) - return TRUE - if(DO_CHANNEL) - client.mob.do_verb(entry) - // DOPPLER EDIT ADDITION END return FALSE /** diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm index 2476ec163422c..ec94fbd6766ac 100644 --- a/code/modules/tgui_input/text.dm +++ b/code/modules/tgui_input/text.dm @@ -15,7 +15,7 @@ * * encode - Toggling this determines if input is filtered via html_encode. Setting this to FALSE gives raw input. * * timeout - The timeout of the textbox, after which the modal will close and qdel itself. Set to zero for no timeout. */ -/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = INFINITY, multiline = FALSE, encode = TRUE, timeout = 0, ui_state = GLOB.always_state) +/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0, ui_state = GLOB.always_state) if (!user) user = usr if (!istype(user)) diff --git a/code/modules/transport/tram/tram_doors.dm b/code/modules/transport/tram/tram_doors.dm index 6d5231db96c56..653b5cbabb527 100644 --- a/code/modules/transport/tram/tram_doors.dm +++ b/code/modules/transport/tram/tram_doors.dm @@ -211,7 +211,7 @@ if(!hasPower() && density) balloon_alert(user, "pulling emergency exit...") if(do_after(user, 4 SECONDS, target = src)) - try_to_crowbar(src, user, TRUE) + try_to_crowbar(null, user, TRUE) return TRUE /** diff --git a/code/modules/transport/tram/tram_floors.dm b/code/modules/transport/tram/tram_floors.dm index ca3d018b48fe3..f267ccf5cdc84 100644 --- a/code/modules/transport/tram/tram_floors.dm +++ b/code/modules/transport/tram/tram_floors.dm @@ -266,7 +266,7 @@ if(atom_integrity >= max_integrity) to_chat(user, span_warning("[src] is already in good condition!")) return ITEM_INTERACT_SUCCESS - if(!tool.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!tool.tool_start_check(user, amount = 0)) return FALSE to_chat(user, span_notice("You begin repairing [src]...")) var/integrity_to_repair = max_integrity - atom_integrity diff --git a/code/modules/transport/tram/tram_structures.dm b/code/modules/transport/tram/tram_structures.dm index 1eed69c84ffb0..368223d11653b 100644 --- a/code/modules/transport/tram/tram_structures.dm +++ b/code/modules/transport/tram/tram_structures.dm @@ -155,7 +155,7 @@ if(atom_integrity >= max_integrity) to_chat(user, span_warning("[src] is already in good condition!")) return ITEM_INTERACT_SUCCESS - if(!tool.tool_start_check(user, amount = 0, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!tool.tool_start_check(user, amount = 0)) return FALSE to_chat(user, span_notice("You begin repairing [src]...")) if(tool.use_tool(src, user, 4 SECONDS, volume = 50)) @@ -579,7 +579,7 @@ return FALSE /obj/structure/tram/spoiler/welder_act(mob/living/user, obj/item/tool) - if(!tool.tool_start_check(user, amount = 1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!tool.tool_start_check(user, amount = 1)) return FALSE if(atom_integrity >= max_integrity) diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 826edbfdf33f0..95b7f4a4634d8 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -292,9 +292,6 @@ #include "weird_food.dm" #include "wizard_loadout.dm" #include "worn_icons.dm" -// DOPPLER EDIT START -#include "~doppler\automapper.dm" -// DOPPLER EDIT END // END_INCLUDE #ifdef REFERENCE_TRACKING_DEBUG //Don't try and parse this file if ref tracking isn't turned on. IE: don't parse ref tracking please mr linter #include "find_reference_sanity.dm" diff --git a/code/modules/unit_tests/anonymous_themes.dm b/code/modules/unit_tests/anonymous_themes.dm index 99cd4f82802ac..a58f60eab3bd7 100644 --- a/code/modules/unit_tests/anonymous_themes.dm +++ b/code/modules/unit_tests/anonymous_themes.dm @@ -12,7 +12,7 @@ client.prefs.write_preference(GLOB.preference_entries[/datum/preference/name/real_name], "Prefs Biddle") - human.apply_prefs_job(client, SSjob.get_job_type(/datum/job/assistant)) + human.apply_prefs_job(client, SSjob.GetJobType(/datum/job/assistant)) TEST_ASSERT_NOTEQUAL(human.real_name, "Prefs Biddle", "apply_prefs_job didn't randomize human name with an anonymous theme") TEST_ASSERT_EQUAL(client.prefs.read_preference(/datum/preference/name/real_name), "Prefs Biddle", "Anonymous theme overrode original prefs") diff --git a/code/modules/unit_tests/dummy_spawn.dm b/code/modules/unit_tests/dummy_spawn.dm index 6ec59eaaa506c..ed359f962b7d0 100644 --- a/code/modules/unit_tests/dummy_spawn.dm +++ b/code/modules/unit_tests/dummy_spawn.dm @@ -16,7 +16,7 @@ /datum/unit_test/dummy_spawn_outfit/Run() var/mob/living/carbon/human/dummy/lad = allocate(/mob/living/carbon/human/dummy) for(var/datum/job/one_two_three as anything in subtypesof(/datum/job)) - var/datum/job/can_you_hear_this = SSjob.get_job_type(one_two_three) + var/datum/job/can_you_hear_this = SSjob.GetJobType(one_two_three) if(!can_you_hear_this) log_test("\tJob type [one_two_three] could not be retrieved from SSjob") continue diff --git a/code/modules/unit_tests/fish_unit_tests.dm b/code/modules/unit_tests/fish_unit_tests.dm index 809bf60d230a8..2fb2487f7810d 100644 --- a/code/modules/unit_tests/fish_unit_tests.dm +++ b/code/modules/unit_tests/fish_unit_tests.dm @@ -1,5 +1,4 @@ #define TRAIT_FISH_TESTING "made_you_read_this" -#define FISH_REAGENT_AMOUNT (10 * FISH_WEIGHT_GRIND_TO_BITE_MULT) ///Ensures that all fish have an aquarium icon state and that sprite_width and sprite_height have been set. /datum/unit_test/fish_aquarium_icons @@ -21,26 +20,11 @@ /datum/unit_test/fish_size_weight /datum/unit_test/fish_size_weight/Run() - - var/obj/structure/table/table = allocate(/obj/structure/table) - var/obj/item/fish/testdummy/fish = new /obj/item/fish/testdummy (table.loc) - allocated += fish - var/datum/reagent/reagent = fish.reagents?.has_reagent(/datum/reagent/fishdummy) - TEST_ASSERT(reagent, "the test fish doesn't have the test reagent.[fish.reagents ? "" : " It doesn't even have a reagent holder."]") - var/expected_units = FISH_REAGENT_AMOUNT * fish.weight / FISH_WEIGHT_BITE_DIVISOR - TEST_ASSERT_EQUAL(reagent.volume, expected_units, "the test fish has [reagent.volume] units of the test reagent when it should have [expected_units]") + var/obj/item/fish/fish = allocate(/obj/item/fish/testdummy) + TEST_ASSERT_EQUAL(fish.grind_results[/datum/reagent], 20, "the test fish has [fish.grind_results[/datum/reagent]] units of reagent when it should have 20") TEST_ASSERT_EQUAL(fish.w_class, WEIGHT_CLASS_BULKY, "the test fish has w_class of [fish.w_class] when it should have been [WEIGHT_CLASS_BULKY]") - var/mob/living/carbon/human/consistent/chef = allocate(/mob/living/carbon/human/consistent) - var/obj/item/knife/kitchen/blade = allocate(/obj/item/knife/kitchen) - var/fish_fillet_type = fish.fillet_type - var/expected_num_fillets = fish.expected_num_fillets - blade.melee_attack_chain(chef, fish) - var/counted_fillets = 0 - for(var/atom/movable/content as anything in table.loc.contents) - if(istype(content, fish_fillet_type)) - counted_fillets++ - allocated += content - TEST_ASSERT_EQUAL(counted_fillets, expected_num_fillets, "the test fish yielded [counted_fillets] fillets when it should have been [expected_num_fillets]") + var/expected_num_fillets = round(FISH_SIZE_BULKY_MAX / FISH_FILLET_NUMBER_SIZE_DIVISOR * 2, 1) + TEST_ASSERT_EQUAL(fish.num_fillets, expected_num_fillets, "the test fish has [fish.num_fillets] number of fillets when it should have [expected_num_fillets]") ///Checks that fish breeding works correctly. /datum/unit_test/fish_breeding @@ -83,7 +67,7 @@ /datum/unit_test/fish_scanning/Run() var/scannable_fishes = 0 for(var/obj/item/fish/fish_prototype as anything in subtypesof(/obj/item/fish)) - if(initial(fish_prototype.fish_flags) & FISH_FLAG_EXPERIMENT_SCANNABLE) + if(initial(fish_prototype.experisci_scannable)) scannable_fishes++ for(var/datum/experiment/scanning/fish/fish_scan as anything in typesof(/datum/experiment/scanning/fish)) fish_scan = new fish_scan @@ -100,12 +84,6 @@ fish_traits = list(/datum/fish_trait/dummy) stable_population = INFINITY breeding_timeout = 0 - fish_flags = parent_type::fish_flags & ~(FISH_FLAG_SHOW_IN_CATALOG|FISH_FLAG_EXPERIMENT_SCANNABLE) - var/expected_num_fillets = 0 //used to know how many fillets should be gotten out of this fish - -/obj/item/fish/testdummy/add_fillet_type() - expected_num_fillets = ..() - return expected_num_fillets /obj/item/fish/testdummy/two fish_traits = list(/datum/fish_trait/dummy/two) @@ -114,7 +92,7 @@ incompatible_traits = list(/datum/fish_trait/dummy/two) inheritability = 100 diff_traits_inheritability = 100 - reagents_to_add = list(/datum/reagent/fishdummy = FISH_REAGENT_AMOUNT) + reagents_to_add = list(/datum/reagent = 10) /datum/fish_trait/dummy/apply_to_fish(obj/item/fish/fish) . = ..() @@ -123,10 +101,6 @@ /datum/fish_trait/dummy/two incompatible_traits = list(/datum/fish_trait/dummy) -/datum/reagent/fishdummy - name = "fish test reagent" - description = "It smells fishy." - /obj/structure/aquarium/traits allow_breeding = TRUE var/obj/item/fish/testdummy/crossbreeder/crossbreeder @@ -190,54 +164,6 @@ . = ..() probability = 0 //works around the global list initialization skipping abstract/impossible evolutions. -///A test that checks that fishing portals can be linked and function as expected -/datum/unit_test/fish_portal_gen_linking - -/datum/unit_test/fish_portal_gen_linking/Run() - var/mob/living/carbon/human/consistent/user = allocate(/mob/living/carbon/human/consistent) - var/obj/machinery/fishing_portal_generator/portal = allocate(/obj/machinery/fishing_portal_generator/no_power) - var/obj/structure/toilet/unit_test/fishing_spot = new(get_turf(user)) //This is deleted during the test - var/obj/structure/moisture_trap/extra_spot = allocate(/obj/structure/moisture_trap) - var/obj/machinery/hydroponics/constructable/inaccessible = allocate(/obj/machinery/hydroponics/constructable) - ADD_TRAIT(inaccessible, TRAIT_UNLINKABLE_FISHING_SPOT, INNATE_TRAIT) - var/obj/item/multitool/tool = allocate(/obj/item/multitool) - var/datum/fish_source/toilet/fish_source = GLOB.preset_fish_sources[/datum/fish_source/toilet] - - portal.max_fishing_spots = 1 //We've no scrying orb to know if it'll be buffed or nerfed this in the future. We only have space for one here. - portal.activate(fish_source, user) - TEST_ASSERT(!portal.active, "[portal] was activated with a fish source from an unlinked fishing spot") - portal.multitool_act(user, tool) - TEST_ASSERT_EQUAL(tool.buffer, portal, "[portal] wasn't set as buffer for [tool]") - tool.melee_attack_chain(user, fishing_spot) - TEST_ASSERT_EQUAL(LAZYACCESS(portal.linked_fishing_spots, fishing_spot), fish_source, "We tried linking [portal] to the fishing spot but didn't succeed.") - portal.activate(fish_source, user) - TEST_ASSERT(portal.active?.fish_source == fish_source, "[portal] can't acces a fish source from a linked fishing spot") - //Let's move the fishing spot away. This is fine as long as the portal moves to another z level, away from the toilet - var/turf/other_z_turf = pick(GLOB.newplayer_start) - portal.forceMove(other_z_turf) - TEST_ASSERT(!portal.active, "[portal] (not upgraded) is still active though the fishing spot is on another z-level.[portal.z == fishing_spot.z ? " Actually they're still on the same level!" : ""]") - portal.long_range_link = TRUE - portal.activate(fish_source, user) - TEST_ASSERT(portal.active?.fish_source == fish_source, "[portal] can't acces a fish source from a linked fishing spot on a different z-level despite being upgraded") - fishing_spot.forceMove(other_z_turf) - portal.forceMove(get_turf(user)) - TEST_ASSERT(portal.active?.fish_source == fish_source, "[portal] (upgraded) deactivated while changing z-level") - tool.melee_attack_chain(user, extra_spot) - TEST_ASSERT_EQUAL(length(portal.linked_fishing_spots), 1, "We managed to link to another fishing spot when there's only space for one") - TEST_ASSERT_EQUAL(LAZYACCESS(portal.linked_fishing_spots, fishing_spot), fish_source, "linking to another fishing spot fouled up the other linked spots") - QDEL_NULL(fishing_spot) - TEST_ASSERT(!portal.active, "[portal] is still linked to the fish source of the deleted fishing spot it's associated to") - tool.melee_attack_chain(user, inaccessible) - TEST_ASSERT(!length(portal.linked_fishing_spots), "We managed to link to an unlinkable fishing spot") - -/obj/machinery/fishing_portal_generator/no_power - use_power = NO_POWER_USE - -/obj/structure/toilet/unit_test/Initialize(mapload) - . = ..() - if(!HAS_TRAIT(src, TRAIT_FISHING_SPOT)) //Ensure this toilet has a fishing spot because only maploaded ones have it. - AddElement(/datum/element/lazy_fishing_spot, /datum/fish_source/toilet) - // we want no default spawns in this unit test /datum/chasm_detritus/restricted/bodies/no_defaults default_contents_chance = 0 @@ -345,113 +271,23 @@ growth_rate = 100 fish_traits = list() //We don't want to end up applying traits twice on the resulting lobstrosity -/datum/unit_test/fish_sources +/datum/unit_test/explosive_fishing -/datum/unit_test/fish_sources/Run() - var/datum/fish_source/source = GLOB.preset_fish_sources[/datum/fish_source/unit_test_explosive] +/datum/unit_test/explosive_fishing/Run() + var/datum/fish_source/source = GLOB.preset_fish_sources[/datum/fish_source/unit_test] source.spawn_reward_from_explosion(run_loc_floor_bottom_left, 1) if(source.fish_counts[/obj/item/wrench]) TEST_FAIL("The unit test item wasn't removed/spawned from fish_table during 'spawn_reward_from_explosion'.") - ///From here, we check that the profound_fisher as well as fish source procs for rolling rewards don't fail. - source = GLOB.preset_fish_sources[/datum/fish_source/unit_test_profound_fisher] - run_loc_floor_bottom_left.AddElement(/datum/element/lazy_fishing_spot, /datum/fish_source/unit_test_profound_fisher) - var/mob/living/basic/fisher = allocate(/mob/living/basic) - fisher.AddComponent(/datum/component/profound_fisher) - fisher.set_combat_mode(FALSE) - fisher.melee_attack(run_loc_floor_bottom_left, ignore_cooldown = TRUE) - if(source.fish_counts[/obj/item/fish/testdummy] != 1) - TEST_FAIL("The unit test profound fisher didn't catch the test fish on a lazy fishing spot (element)") - - ///For good measure, let's try it again, but with the component this time, and a human mob and gloves - run_loc_floor_bottom_left.RemoveElement(/datum/element/lazy_fishing_spot, /datum/fish_source/unit_test_profound_fisher) - var/datum/component/comp = run_loc_floor_bottom_left.AddComponent(/datum/component/fishing_spot, source) - var/mob/living/carbon/human/consistent/angler = allocate(/mob/living/carbon/human/consistent) - var/obj/item/clothing/gloves/noodling = allocate(/obj/item/clothing/gloves) - noodling.AddComponent(/datum/component/profound_fisher) - angler.equip_to_slot(noodling, ITEM_SLOT_GLOVES) - - angler.UnarmedAttack(run_loc_floor_bottom_left, proximity_flag = TRUE) - if(source.fish_counts[/obj/item/fish/testdummy]) - TEST_FAIL("The unit test profound fisher didn't catch the test fish on a fishing spot (component)") - qdel(comp) - - ///As a final test, let's see how it goes with a fish source containing every single fish subtype. - comp = run_loc_floor_bottom_left.AddComponent(/datum/component/fishing_spot, GLOB.preset_fish_sources[/datum/fish_source/unit_test_all_fish]) - fisher.melee_attack(run_loc_floor_bottom_left, ignore_cooldown = TRUE) - qdel(comp) - -/datum/fish_source/unit_test_explosive +/datum/fish_source/unit_test fish_table = list( /obj/item/wrench = 1, - /obj/item/screwdriver = INFINITY, //infinite weight, so if fish counts doesn't work as intended, this'll be always picked. + /obj/item/screwdriver = INFINITY, ) fish_counts = list( /obj/item/wrench = 1, - /obj/item/screwdriver = 0, //this should never be picked. + /obj/item/screwdriver = 0, ) -/datum/fish_source/unit_test_profound_fisher - fish_table = list(/obj/item/fish/testdummy = 1) - fish_counts = list(/obj/item/fish/testdummy = 2) - -/datum/fish_source/unit_test_all_fish - -/datum/fish_source/unit_test_all_fish/New() - for(var/fish_type as anything in subtypesof(/obj/item/fish)) - fish_table[fish_type] = 10 - return ..() - -/datum/unit_test/edible_fish - -/datum/unit_test/edible_fish/Run() - var/obj/item/fish/fish = allocate(/obj/item/fish/testdummy/food) - var/datum/component/edible/edible = fish.GetComponent(/datum/component/edible) - TEST_ASSERT(edible, "Fish is not edible") - edible.eat_time = 0 - TEST_ASSERT(fish.GetComponent(/datum/component/infective), "Fish doesn't have the infective component") - var/bite_size = edible.bite_consumption - - var/mob/living/carbon/human/consistent/gourmet = allocate(/mob/living/carbon/human/consistent) - - var/food_quality = edible.get_perceived_food_quality(gourmet) - TEST_ASSERT(food_quality < 0, "Humans don't seem to dislike raw, unprocessed fish when they should") - ADD_TRAIT(gourmet, TRAIT_FISH_EATER, TRAIT_FISH_TESTING) - food_quality = edible.get_perceived_food_quality(gourmet) - TEST_ASSERT(food_quality >= LIKED_FOOD_QUALITY_CHANGE, "mobs with the TRAIT_FISH_EATER traits don't seem to like fish when they should") - REMOVE_TRAIT(gourmet, TRAIT_FISH_EATER, TRAIT_FISH_TESTING) - - fish.attack(gourmet, gourmet) - TEST_ASSERT(gourmet.has_reagent(/datum/reagent/consumable/nutriment/protein), "Human doesn't have ingested protein after eating fish") - TEST_ASSERT(gourmet.has_reagent(/datum/reagent/blood), "Human doesn't have ingested blood after eating fish") - TEST_ASSERT(gourmet.has_reagent(/datum/reagent/fishdummy), "Human doesn't have the reagent from /datum/fish_trait/dummy after eating fish") - - TEST_ASSERT_EQUAL(fish.status, FISH_DEAD, "The fish is not dead, despite having sustained enough damage that it should. health: [fish.health]") - - var/obj/item/organ/internal/stomach/belly = gourmet.get_organ_slot(ORGAN_SLOT_STOMACH) - belly.reagents.clear_reagents() - - fish.set_status(FISH_ALIVE) - TEST_ASSERT(!fish.bites_amount, "bites_amount wasn't reset after the fish revived") - - fish.update_size_and_weight(fish.size, FISH_WEIGHT_BITE_DIVISOR) - fish.AddElement(/datum/element/fried_item, FISH_SAFE_COOKING_DURATION) - TEST_ASSERT_EQUAL(fish.status, FISH_DEAD, "The fish didn't die after being cooked") - TEST_ASSERT(bite_size < edible.bite_consumption, "The bite_consumption value hasn't increased after being cooked (it removes blood but doubles protein). Value: [bite_size]") - TEST_ASSERT(!(edible.foodtypes & (RAW|GORE)), "Fish still has the GORE and/or RAW foodtypes flags after being cooked") - TEST_ASSERT(!fish.GetComponent(/datum/component/infective), "Fish still has the infective component after being cooked for long enough") - - - food_quality = edible.get_perceived_food_quality(gourmet) - TEST_ASSERT(food_quality >= 0, "Humans still dislike fish, even when it's cooked") - fish.attack(gourmet, gourmet) - TEST_ASSERT(!gourmet.has_reagent(/datum/reagent/blood), "Human has ingested blood from eating a fish when it shouldn't since the fish has been cooked") - - TEST_ASSERT(QDELETED(fish), "The fish is not being deleted, despite having sustained enough bites. Reagents volume left: [fish.reagents.total_volume]") - -/obj/item/fish/testdummy/food - average_weight = FISH_WEIGHT_BITE_DIVISOR * 2 //One bite, it's death; the other, it's gone. - -#undef FISH_REAGENT_AMOUNT #undef TRAIT_FISH_TESTING diff --git a/code/modules/unit_tests/mob_damage.dm b/code/modules/unit_tests/mob_damage.dm index 7496eb644344c..64b12b8f477e8 100644 --- a/code/modules/unit_tests/mob_damage.dm +++ b/code/modules/unit_tests/mob_damage.dm @@ -289,8 +289,8 @@ /datum/unit_test/mob_damage/proc/test_godmode(mob/living/carbon/human/consistent/dummy) // Heal up, so that errors from the previous tests we won't cause this one to fail dummy.fully_heal(HEAL_DAMAGE) - // add godmode - ADD_TRAIT(dummy, TRAIT_GODMODE, TRAIT_GENERIC) + // flip godmode bit to 1 + dummy.status_flags ^= GODMODE // Apply 9 damage and then heal it if(!test_apply_damage(dummy, amount = 9, expected = 0)) @@ -306,8 +306,8 @@ if(!test_apply_damage(dummy, amount = -11, forced = TRUE)) TEST_FAIL("ABOVE FAILURE: failed test_godmode! godmode did not respect forced = TRUE") - // remove godmode - REMOVE_TRAIT(dummy, TRAIT_GODMODE, TRAIT_GENERIC) + // flip godmode bit back to 0 + dummy.status_flags ^= GODMODE /// Testing biotypes /datum/unit_test/mob_damage/proc/test_biotypes(mob/living/carbon/human/consistent/dummy) diff --git a/code/modules/unit_tests/security_officer_distribution.dm b/code/modules/unit_tests/security_officer_distribution.dm index 05d62eeab351c..e268aab709f38 100644 --- a/code/modules/unit_tests/security_officer_distribution.dm +++ b/code/modules/unit_tests/security_officer_distribution.dm @@ -68,7 +68,7 @@ var/mob/living/carbon/human/new_character = allocate(/mob/living/carbon/human/consistent) new_character.mind_initialize() - new_character.mind.set_assigned_role(SSjob.get_job_type(/datum/job/security_officer)) + new_character.mind.set_assigned_role(SSjob.GetJobType(/datum/job/security_officer)) new_player.new_character = new_character new_player.mock_client = mock_client diff --git a/code/modules/unit_tests/stack_singular_name.dm b/code/modules/unit_tests/stack_singular_name.dm index 0d043c588e6ee..739efb54d6a4b 100644 --- a/code/modules/unit_tests/stack_singular_name.dm +++ b/code/modules/unit_tests/stack_singular_name.dm @@ -1,12 +1,12 @@ /** * Goes through every subtype of /obj/item/stack to check for a singular name, var/singular_name. - * Everything within the blacklist does not need to be tested because it exists to be overridden. + * Everything within the blacklist does not need to be tested because it exists to be overriden. * This test will fail if a subtype of /obj/item/stack is missing a singular name. */ /datum/unit_test/stack_singular_name /datum/unit_test/stack_singular_name/Run() - var/list/blacklist = list( // all of these are generally parents that exist to be overridden; ex. /obj/item/stack/license_plates exists to branch into /filled and /empty + var/list/blacklist = list( // all of these are generally parents that exist to be overriden; ex. /obj/item/stack/license_plates exists to branch into /filled and /empty /obj/item/stack/sheet, /obj/item/stack/sheet/mineral, /obj/item/stack/license_plates, diff --git a/code/modules/unit_tests/strange_reagent.dm b/code/modules/unit_tests/strange_reagent.dm index bcdf89f0a9c8c..e5e385b86fd6d 100644 --- a/code/modules/unit_tests/strange_reagent.dm +++ b/code/modules/unit_tests/strange_reagent.dm @@ -24,7 +24,7 @@ var/is_basic = istype(target, /mob/living/basic) var/is_simple = istype(target, /mob/living/simple_animal) // check some basic stuff - if(HAS_TRAIT(target, TRAIT_GODMODE)) + if(target.status_flags & GODMODE) continue if(!(target.mob_biotypes & MOB_ORGANIC)) continue diff --git a/code/modules/unit_tests/traitor.dm b/code/modules/unit_tests/traitor.dm index 974888b3a0df4..012370d935643 100644 --- a/code/modules/unit_tests/traitor.dm +++ b/code/modules/unit_tests/traitor.dm @@ -11,7 +11,7 @@ possible_jobs += rank for(var/job_name in possible_jobs) - var/datum/job/job = SSjob.get_job(job_name) + var/datum/job/job = SSjob.GetJob(job_name) var/mob/living/player = allocate(job.spawn_type) player.mind_initialize() var/datum/mind/mind = player.mind diff --git a/code/modules/unit_tests/traitor_mail_content_check.dm b/code/modules/unit_tests/traitor_mail_content_check.dm index b2ecfe2ef24a2..6d14d9d1428d3 100644 --- a/code/modules/unit_tests/traitor_mail_content_check.dm +++ b/code/modules/unit_tests/traitor_mail_content_check.dm @@ -5,6 +5,6 @@ var/mob/living/carbon/human/person = allocate(/mob/living/carbon/human/consistent) person.mind_initialize() var/obj/item/mail/traitor/test_mail = allocate(/obj/item/mail/traitor) - person.mind.set_assigned_role(SSjob.get_job_type(/datum/job/captain)) + person.mind.set_assigned_role(SSjob.GetJobType(/datum/job/captain)) test_mail.initialize_for_recipient(person.mind) TEST_ASSERT_EQUAL(test_mail.contents.len, 0, "/obj/item/mail/traitor should not have items after initialize_for_recipient proc!") diff --git a/code/modules/uplink/uplink_items/job.dm b/code/modules/uplink/uplink_items/job.dm index c4cfd2410d261..be9d558687d8c 100644 --- a/code/modules/uplink/uplink_items/job.dm +++ b/code/modules/uplink/uplink_items/job.dm @@ -150,7 +150,7 @@ name = "Syndicate Rebar Crossbow" desc = "A much more professional version of the engineer's bootleg rebar crossbow. 3 shot mag, quicker loading, and better ammo. Owners manual included." item = /obj/item/storage/box/syndie_kit/rebarxbowsyndie - cost = 12 + cost = 10 restricted_roles = list(JOB_STATION_ENGINEER, JOB_CHIEF_ENGINEER, JOB_ATMOSPHERIC_TECHNICIAN) /datum/uplink_item/role_restricted/magillitis_serum @@ -364,7 +364,7 @@ Please note that these are free-range monkeys that don't react with Mutadone." item = /obj/item/antag_spawner/loadout/monkey_man cost = 6 - restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_GENETICIST, JOB_ASSISTANT, JOB_MIME, JOB_CLOWN, JOB_PUN_PUN) + restricted_roles = list(JOB_RESEARCH_DIRECTOR, JOB_SCIENTIST, JOB_GENETICIST, JOB_ASSISTANT, JOB_MIME, JOB_CLOWN) restricted = TRUE refundable = TRUE @@ -375,7 +375,7 @@ item = /obj/item/storage/toolbox/guncase/monkeycase cost = 4 limited_stock = 3 - restricted_roles = list(JOB_ASSISTANT, JOB_MIME, JOB_CLOWN, JOB_PUN_PUN) + restricted_roles = list(JOB_ASSISTANT, JOB_MIME, JOB_CLOWN) restricted = TRUE refundable = FALSE diff --git a/code/modules/uplink/uplink_items/suits.dm b/code/modules/uplink/uplink_items/suits.dm index 2839a6d2d1eff..b66cce4eaece7 100644 --- a/code/modules/uplink/uplink_items/suits.dm +++ b/code/modules/uplink/uplink_items/suits.dm @@ -80,9 +80,3 @@ progression_minimum = 90 MINUTES cost = 16 cant_discount = TRUE - -/datum/uplink_item/suits/modsuit/Wraith - name = "MODsuit wraith cloaking module" - desc = "A MODsuit module that grants to the user Optical camouflage and the ability to overload light sources to recharge suit power." - item = /obj/item/mod/module/stealth/wraith - cost = 3 diff --git a/code/modules/vehicles/_vehicle.dm b/code/modules/vehicles/_vehicle.dm index 77f56700e48ae..7da8fc0314b10 100644 --- a/code/modules/vehicles/_vehicle.dm +++ b/code/modules/vehicles/_vehicle.dm @@ -138,7 +138,6 @@ remove_control_flags(M, ALL) remove_passenger_actions(M) LAZYREMOVE(occupants, M) -// LAZYREMOVE(contents, M) cleanup_actions_for_mob(M) after_remove_occupant(M) return TRUE diff --git a/code/modules/vehicles/atv.dm b/code/modules/vehicles/atv.dm index 4aa28d6fe5a47..aa9a963a1013c 100644 --- a/code/modules/vehicles/atv.dm +++ b/code/modules/vehicles/atv.dm @@ -82,7 +82,7 @@ if(atom_integrity >= max_integrity) balloon_alert(user, "it's not damaged!") return - if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!W.tool_start_check(user, amount=1)) return user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]") audible_message(span_hear("You hear welding.")) diff --git a/code/modules/vehicles/bicycle.dm b/code/modules/vehicles/bicycle.dm index cc40b7d80ef06..cc0643be02601 100644 --- a/code/modules/vehicles/bicycle.dm +++ b/code/modules/vehicles/bicycle.dm @@ -33,7 +33,7 @@ if(atom_integrity >= max_integrity) balloon_alert(user, "it's not damaged!") return - if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!W.tool_start_check(user, amount=1)) return user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]") audible_message(span_hear("You hear welding.")) diff --git a/code/modules/vehicles/cars/vim.dm b/code/modules/vehicles/cars/vim.dm index 56e1da7528d95..dfcd604ef144d 100644 --- a/code/modules/vehicles/cars/vim.dm +++ b/code/modules/vehicles/cars/vim.dm @@ -68,7 +68,7 @@ if(atom_integrity >= max_integrity) balloon_alert(user, "it's not damaged!") return - if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!W.tool_start_check(user, amount=1)) return user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]") audible_message(span_hear("You hear welding.")) diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 4755631dfeb0a..846d6a6434b1e 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -229,6 +229,7 @@ ui_view.generate_view("mech_view_[REF(src)]") RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) RegisterSignal(src, COMSIG_LIGHT_EATER_ACT, PROC_REF(on_light_eater)) + RegisterSignal(src, COMSIG_HIT_BY_SABOTEUR, PROC_REF(on_saboteur)) spark_system = new spark_system.set_up(2, 0, src) @@ -339,12 +340,11 @@ ai.investigate_log("has been gibbed by having their mech destroyed.", INVESTIGATE_DEATHS) ai.gib(DROP_ALL_REMAINS) //No wreck, no AI to recover else - mob_exit(ai, silent = TRUE, forced = TRUE) // so we dont ghost the AI + mob_exit(ai,silent = TRUE, forced = TRUE) // so we dont ghost the AI continue - else - mob_exit(occupant, forced = TRUE) - if(!isbrain(occupant)) // who would win.. 1 brain vs 1 sleep proc.. - occupant.SetSleeping(destruction_sleep_duration) + mob_exit(occupant, forced = TRUE) + if(!isbrain(occupant)) // who would win.. 1 brain vs 1 sleep proc.. + occupant.SetSleeping(destruction_sleep_duration) if(wreckage) var/obj/structure/mecha_wreckage/WR = new wreckage(loc, unlucky_ai) @@ -832,11 +832,11 @@ remove_action_type_from_mob(/datum/action/vehicle/sealed/mecha/mech_toggle_lights, occupant) return COMPONENT_BLOCK_LIGHT_EATER -/obj/vehicle/sealed/mecha/on_saboteur(datum/source, disrupt_duration) - . = ..() +/obj/vehicle/sealed/mecha/proc/on_saboteur(datum/source, disrupt_duration) + SIGNAL_HANDLER if(mecha_flags &= HAS_LIGHTS && light_on) set_light_on(FALSE) - return TRUE + return COMSIG_SABOTEUR_SUCCESS /// Apply corresponding accesses /obj/vehicle/sealed/mecha/proc/update_access() diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm index f89ddb9e274c2..c19aede50d93b 100644 --- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -32,15 +32,6 @@ workmech = null return ..() -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/use_tool(atom/target, mob/living/user, delay, amount, volume, datum/callback/extra_checks) - return do_after_mecha(target, user, delay) - -/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/do_after_checks(atom/target) - // Gotta be close to the target - if(!loc.Adjacent(target)) - return FALSE - return ..() - /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(mob/living/source, atom/target, list/modifiers) if(!action_checks(target)) return @@ -180,7 +171,7 @@ /** - * Handles attempted refills of the extinguisher. + * Handles attemted refills of the extinguisher. * * The mech can only refill an extinguisher that is in front of it. * Only water tank objects can be used. @@ -319,7 +310,7 @@ if(!(mecha.mecha_flags & PANEL_OPEN)) //non-removable upgrade, so lets make sure the pilot or owner has their say. to_chat(user, span_warning("[mecha] panel must be open in order to allow this conversion kit.")) return FALSE - if(LAZYLEN(mecha.occupants)) //We're actually making a new mech and swapping things over, it might get weird if players are involved + if(LAZYLEN(mecha.occupants)) //We're actualy making a new mech and swapping things over, it might get weird if players are involved to_chat(user, span_warning("[mecha] must be unoccupied before this conversion kit can be applied.")) return FALSE if(!mecha.cell) //Turns out things break if the cell is missing diff --git a/code/modules/vehicles/mecha/mecha_ai_interaction.dm b/code/modules/vehicles/mecha/mecha_ai_interaction.dm index 4259dff5c3426..cec3d867e2b6a 100644 --- a/code/modules/vehicles/mecha/mecha_ai_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_ai_interaction.dm @@ -102,6 +102,7 @@ AI.eyeobj?.RegisterSignal(src, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/mob/camera/ai_eye, update_visibility)) AI.controlled_equipment = src AI.remote_control = src + AI.ShutOffDoomsdayDevice() add_occupant(AI) to_chat(AI, AI.can_dominate_mechs ? span_greenannounce("Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!") :\ span_notice("You have been uploaded to a mech's onboard computer.")) diff --git a/code/modules/vehicles/mecha/mecha_control_console.dm b/code/modules/vehicles/mecha/mecha_control_console.dm index a9dbca0e07db0..d31bd5a5bd290 100644 --- a/code/modules/vehicles/mecha/mecha_control_console.dm +++ b/code/modules/vehicles/mecha/mecha_control_console.dm @@ -55,7 +55,7 @@ var/obj/item/mecha_parts/mecha_tracking/MT = locate(params["tracker_ref"]) if(!istype(MT)) return - var/message = tgui_input_text(usr, "Input message", "Transmit message", max_length = MAX_MESSAGE_LEN) + var/message = tgui_input_text(usr, "Input message", "Transmit message") var/obj/vehicle/sealed/mecha/M = MT.chassis if(trim(message) && M) to_chat(M.occupants, message) diff --git a/code/modules/vehicles/mecha/mecha_defense.dm b/code/modules/vehicles/mecha/mecha_defense.dm index 8634ff88591e7..1237c931b33a5 100644 --- a/code/modules/vehicles/mecha/mecha_defense.dm +++ b/code/modules/vehicles/mecha/mecha_defense.dm @@ -406,7 +406,7 @@ if(atom_integrity >= max_integrity) balloon_alert(user, "it's not damaged!") return - if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!W.tool_start_check(user, amount=1)) return user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]") audible_message(span_hear("You hear welding.")) diff --git a/code/modules/vehicles/mecha/mecha_mob_interaction.dm b/code/modules/vehicles/mecha/mecha_mob_interaction.dm index 18f04c056e18e..a1e398f6f90cf 100644 --- a/code/modules/vehicles/mecha/mecha_mob_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_mob_interaction.dm @@ -115,13 +115,12 @@ mob_container = brain.container else if(isAI(M)) var/mob/living/silicon/ai/AI = M - mob_container = AI //stop listening to this signal, as the static update is now handled by the eyeobj's setLoc AI.eyeobj?.UnregisterSignal(src, COMSIG_MOVABLE_MOVED) AI.eyeobj?.forceMove(newloc) //kick the eye out as well - AI.controlled_equipment = null - AI.remote_control = null if(forced) + AI.controlled_equipment = null + AI.remote_control = null if(!AI.linked_core) //if the victim AI has no core if (!AI.can_shunt || !length(AI.hacked_apcs)) AI.investigate_log("has been gibbed by being forced out of their mech.", INVESTIGATE_DEATHS) @@ -131,30 +130,31 @@ AI.gib(DROP_ALL_REMAINS) AI = null mecha_flags &= ~SILICON_PILOT - return ..() + return else var/obj/machinery/power/apc/emergency_shunt_apc = pick(AI.hacked_apcs) emergency_shunt_apc.malfoccupy(AI) //get shunted into a random APC (you don't get to choose which) AI = null mecha_flags &= ~SILICON_PILOT - return ..() - if(!forced && !silent) - to_chat(AI, span_notice("Returning to core...")) - mecha_flags &= ~SILICON_PILOT - newloc = get_turf(AI.linked_core) - qdel(AI.linked_core) - AI.forceMove(newloc) - if(forced) - to_chat(AI, span_danger("ZZUZULU.ERR--ERRR-NEUROLOG-- PERCEP--- DIST-B**@")) - for(var/count in 1 to 5) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(do_sparks), rand(10, 20), FALSE, AI), count SECONDS) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(empulse), get_turf(AI), /*heavy_range = */10, /*light_range = */20), 10 SECONDS) - return ..() + return + newloc = get_turf(AI.linked_core) + qdel(AI.linked_core) + AI.forceMove(newloc) + else + if(!silent) + to_chat(AI, span_notice("Returning to core...")) + AI.controlled_equipment = null + AI.remote_control = null + mob_container = AI + newloc = get_turf(AI.linked_core) + qdel(AI.linked_core) + AI.forceMove(newloc) else if(isliving(M)) mob_container = M else return ..() var/mob/living/ejector = M + mecha_flags &= ~SILICON_PILOT mob_container.forceMove(newloc)//ejecting mob container log_message("[mob_container] moved out.", LOG_MECHA) SStgui.close_user_uis(M, src) diff --git a/code/modules/vehicles/sealed.dm b/code/modules/vehicles/sealed.dm index 1c96c90ae68ef..821a69d8f8269 100644 --- a/code/modules/vehicles/sealed.dm +++ b/code/modules/vehicles/sealed.dm @@ -92,10 +92,8 @@ if(!istype(M)) return FALSE remove_occupant(M) - if(!isAI(M))//This is the ONE mob we don't want to be moved to the vehicle that should be handled when used + if(!isAI(M))//This is the ONE mob we dont want to be moved to the vehicle that should be handeled when used M.forceMove(exit_location(M)) - else - return TRUE if(randomstep) var/turf/target_turf = get_step(exit_location(M), pick(GLOB.cardinals)) M.throw_at(target_turf, 5, 10) @@ -171,5 +169,4 @@ /obj/vehicle/sealed/proc/on_entered_supermatter(atom/movable/vehicle, atom/movable/supermatter) SIGNAL_HANDLER for (var/mob/passenger as anything in occupants) - if(!isAI(passenger)) - passenger.Bump(supermatter) + passenger.Bump(supermatter) diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm index 6726fb02ef150..c8cab1a7dc1cd 100644 --- a/code/modules/vehicles/secway.dm +++ b/code/modules/vehicles/secway.dm @@ -44,7 +44,7 @@ if(atom_integrity >= max_integrity) balloon_alert(user, "it's not damaged!") return - if(!W.tool_start_check(user, amount=1, heat_required = HIGH_TEMPERATURE_REQUIRED)) + if(!W.tool_start_check(user, amount=1)) return user.balloon_alert_to_viewers("started welding [src]", "started repairing [src]") audible_message(span_hear("You hear welding.")) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 1db108ffe1a41..9299c77347d8c 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -187,23 +187,16 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) /** * Is this item on station or not * - * if it doesn't originate from off-station during mapload, all_products_free gets automatically set to TRUE if it was unset previously. + * if it doesn't originate from off-station during mapload, everything is free * if it's off-station during mapload, it's also safe from the brand intelligence event */ var/onstation = TRUE /** - * DO NOT APPLY THIS GLOBALLY. For mapping var edits only. - * A variable to change on a per instance basis that allows the instance to avoid having onstation set for them during mapload. - * Setting this to TRUE means that the vending machine is treated as if it were still onstation if it spawns off-station during mapload. - * Useful to specify an off-station machine that will be affected by machine-brand intelligence for whatever reason. + * A variable to change on a per instance basis on the map that allows the instance + * to ignore whether it's on the station or not. + * Useful to force cost and ID requirements. DO NOT APPLY THIS GLOBALLY. */ var/onstation_override = FALSE - /** - * If this is set to TRUE, all products sold by the vending machine are free (cost nothing). - * If unset, this will get automatically set to TRUE during init if the machine originates from off-station during mapload. - * Defaults to null, set it to TRUE or FALSE explicitly on a per-machine basis if you want to force it to be a certain value. - */ - var/all_products_free ///Items that the players have loaded into the vendor var/list/vending_machine_input = list() @@ -267,10 +260,8 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(!is_station_level(z)) if(!onstation_override) onstation = FALSE - if(isnull(all_products_free)) // Only auto-set the free products var if we haven't explicitly assigned a value to it yet. - all_products_free = TRUE if(circuit) - circuit.all_products_free = all_products_free //sync up the circuit so the pricing schema is carried over if it's reconstructed. + circuit.onstation = onstation //sync up the circuit so the pricing schema is carried over if it's reconstructed. else if(HAS_TRAIT(SSstation, STATION_TRAIT_VENDING_SHORTAGE)) for (var/datum/data/vending_product/product_record as anything in product_records + coin_records + hidden_records) @@ -284,9 +275,9 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(tiltable && prob(6)) // 1 in 17 chance to start tilted (as an additional hint to the station trait behind it) INVOKE_ASYNC(src, PROC_REF(tilt), loc) credits_contained = 0 // If it's tilted, it's been looted, so no credits for you. - else if(circuit) - all_products_free = circuit.all_products_free //if it was constructed outside mapload, sync the vendor up with the circuit's var so you can't bypass price requirements by moving / reconstructing it off station. - if(!all_products_free) + else if(circuit && (circuit.onstation != onstation)) //check if they're not the same to minimize the amount of edited values. + onstation = circuit.onstation //if it was constructed outside mapload, sync the vendor up with the circuit's var so you can't bypass price requirements by moving / reconstructing it off station. + if(onstation && !onstation_override) AddComponent(/datum/component/payment, 0, SSeconomy.get_dep_account(payment_department), PAYMENT_VENDING) GLOB.vending_machines_to_restock += src //We need to keep track of the final onstation vending machines so we can keep them restocked. register_context() @@ -1227,7 +1218,6 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) /obj/machinery/vending/ui_static_data(mob/user) var/list/data = list() data["onstation"] = onstation - data["all_products_free"] = all_products_free data["department"] = payment_department data["jobDiscount"] = DEPARTMENT_DISCOUNT data["product_records"] = list() @@ -1804,9 +1794,9 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(compartmentLoadAccessCheck(user)) if(IS_WRITING_UTENSIL(attack_item)) - name = tgui_input_text(user, "Set name", "Name", name, max_length = 20) - desc = tgui_input_text(user, "Set description", "Description", desc, max_length = 60) - slogan_list += tgui_input_text(user, "Set slogan", "Slogan", "Epic", max_length = 60) + name = tgui_input_text(user, "Set name", "Name", name, 20) + desc = tgui_input_text(user, "Set description", "Description", desc, 60) + slogan_list += tgui_input_text(user, "Set slogan", "Slogan", "Epic", 60) last_slogan = world.time + rand(0, slogan_delay) return diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index e0e079b6e8cc6..8211b05553d8b 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -224,6 +224,7 @@ GLOBAL_VAR_INIT(all_autodrobe_items, (autodrobe_costumes_items +\ icon_state = "theater" icon_deny = "theater-deny" panel_type = "panel16" + req_access = list(ACCESS_THEATRE) product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!" vend_reply = "Thank you for using AutoDrobe!" @@ -235,7 +236,7 @@ GLOBAL_VAR_INIT(all_autodrobe_items, (autodrobe_costumes_items +\ default_price = PAYCHECK_CREW * 0.8 //Default of 40. extra_price = PAYCHECK_COMMAND payment_department = ACCOUNT_SRV - light_mask = "theater-light-mask" + light_mask="theater-light-mask" /obj/machinery/vending/autodrobe/Initialize(mapload) product_categories = list( @@ -280,6 +281,9 @@ GLOBAL_VAR_INIT(all_autodrobe_items, (autodrobe_costumes_items +\ . = ..() +/obj/machinery/vending/autodrobe/all_access + desc = "A vending machine for costumes. This model appears to have no access restrictions." + req_access = null /obj/item/vending_refill/autodrobe machine_name = "AutoDrobe" icon_state = "refill_costume" diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index f05dcb3e9f17f..791b1c6f71562 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -85,13 +85,19 @@ product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?" product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!" + req_access = list(ACCESS_BAR) refill_canister = /obj/item/vending_refill/boozeomat default_price = PAYCHECK_CREW * 0.9 extra_price = PAYCHECK_COMMAND payment_department = ACCOUNT_SRV light_mask = "boozeomat-light-mask" -/obj/machinery/vending/boozeomat/syndicate +/obj/machinery/vending/boozeomat/all_access + desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one. This model appears to have no access restrictions." + req_access = null + +/obj/machinery/vending/boozeomat/syndicate_access + req_access = list(ACCESS_SYNDICATE) age_restrictions = FALSE initial_language_holder = /datum/language_holder/syndicate diff --git a/code/modules/vending/cartridge.dm b/code/modules/vending/cartridge.dm index ccc13b7de720a..7c4a2c9578d70 100644 --- a/code/modules/vending/cartridge.dm +++ b/code/modules/vending/cartridge.dm @@ -19,7 +19,7 @@ default_price = PAYCHECK_COMMAND extra_price = PAYCHECK_COMMAND * 2.5 payment_department = ACCOUNT_SRV - light_mask = "cart-light-mask" + light_mask="cart-light-mask" /obj/item/vending_refill/cart machine_name = "PTech" diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm index 902e34e04f06c..61379e5635468 100644 --- a/code/modules/vending/cigarette.dm +++ b/code/modules/vending/cigarette.dm @@ -75,7 +75,7 @@ machine_name = "ShadyCigs Deluxe" icon_state = "refill_smoke" -/obj/machinery/vending/cigarette/pre_throw(obj/item/thrown_item) - if(istype(thrown_item, /obj/item/lighter)) - var/obj/item/lighter/thrown_lighter = thrown_item - thrown_lighter.set_lit(TRUE) +/obj/machinery/vending/cigarette/pre_throw(obj/item/I) + if(istype(I, /obj/item/lighter)) + var/obj/item/lighter/L = I + L.set_lit(TRUE) diff --git a/code/modules/vending/cola.dm b/code/modules/vending/cola.dm index d9fddd07f1731..dd4a4dd4b99b5 100644 --- a/code/modules/vending/cola.dm +++ b/code/modules/vending/cola.dm @@ -36,6 +36,7 @@ extra_price = PAYCHECK_CREW payment_department = ACCOUNT_SRV + /obj/item/vending_refill/cola machine_name = "Robust Softdrinks" icon_state = "refill_cola" diff --git a/code/modules/vending/engineering.dm b/code/modules/vending/engineering.dm index f360b89a07fae..48da7e27b1286 100644 --- a/code/modules/vending/engineering.dm +++ b/code/modules/vending/engineering.dm @@ -5,6 +5,7 @@ icon_state = "engi" icon_deny = "engi-deny" panel_type = "panel10" + req_access = list(ACCESS_ENGINE_EQUIP) products = list( /obj/item/clothing/under/rank/engineering/chief_engineer = 4, /obj/item/clothing/under/rank/engineering/engineer = 4, diff --git a/code/modules/vending/engivend.dm b/code/modules/vending/engivend.dm index f33f746b6b76f..1522d0047b098 100644 --- a/code/modules/vending/engivend.dm +++ b/code/modules/vending/engivend.dm @@ -4,6 +4,7 @@ icon_state = "engivend" icon_deny = "engivend-deny" panel_type = "panel10" + req_access = list(ACCESS_ENGINE_EQUIP) products = list( /obj/item/clothing/glasses/meson/engine = 2, /obj/item/clothing/glasses/welding = 3, diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index 98a77c7f40c3d..d1a237eaf640f 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -45,19 +45,6 @@ /obj/item/stack/pipe_cleaner_coil/random = 10, ), ), - list( - "name" = "Fishing", - "icon" = "fish", - "products" = list( - /obj/item/storage/toolbox/fishing = 2, - /obj/item/storage/box/fishing_hooks = 2, - /obj/item/storage/box/fishing_lines = 2, - /obj/item/storage/box/fishing_lures = 2, - /obj/item/book/manual/fish_catalog = 5, - /obj/item/fish_analyzer = 2, - /obj/item/fishing_rod/telescopic = 1, - ), - ), list( "name" = "Skillchips", "icon" = "floppy-disk", diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index be78e15847d13..2209f550fce28 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -5,6 +5,7 @@ icon_deny = "med-deny" panel_type = "panel11" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" + req_access = list(ACCESS_MEDICAL) products = list( /obj/item/stack/medical/gauze = 8, /obj/item/reagent_containers/syringe = 12, @@ -44,11 +45,13 @@ machine_name = "NanoMed Plus" icon_state = "refill_medical" -/obj/machinery/vending/medical/syndicate +/obj/machinery/vending/medical/syndicate_access name = "\improper SyndiMed Plus" + req_access = list(ACCESS_SYNDICATE) initial_language_holder = /datum/language_holder/syndicate /obj/machinery/vending/medical/infested_frigate + req_access = list("theatre") products = list( /obj/item/stack/medical/gauze = 0, /obj/item/reagent_containers/syringe = 7, @@ -72,6 +75,7 @@ icon_deny = "drug-deny" panel_type = "panel11" product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!" + req_access = list(ACCESS_MEDICAL) products = list( /obj/item/reagent_containers/pill/patch/libital = 5, /obj/item/reagent_containers/pill/patch/aiuri = 5, @@ -89,17 +93,17 @@ /obj/item/reagent_containers/medigel/libital = 2, /obj/item/reagent_containers/medigel/aiuri = 2, /obj/item/reagent_containers/medigel/sterilizine = 1, - ) + ) contraband = list( /obj/item/reagent_containers/pill/tox = 3, /obj/item/reagent_containers/pill/morphine = 4, /obj/item/reagent_containers/pill/multiver = 6, - ) + ) premium = list( /obj/item/reagent_containers/medigel/synthflesh = 2, /obj/item/storage/pill_bottle/psicodine = 2, /obj/item/storage/pill_bottle/sansufentanyl = 1, - ) + ) default_price = 50 extra_price = 100 payment_department = ACCOUNT_MED diff --git a/code/modules/vending/robotics.dm b/code/modules/vending/robotics.dm index 8496404195386..8796e8d756192 100644 --- a/code/modules/vending/robotics.dm +++ b/code/modules/vending/robotics.dm @@ -6,6 +6,7 @@ icon_deny = "robotics-deny" panel_type = "panel14" light_mask = "robotics-light-mask" + req_access = list(ACCESS_ROBOTICS) products = list( /obj/item/clothing/suit/toggle/labcoat = 4, /obj/item/clothing/under/rank/rnd/roboticist = 4, diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index a86f5562862d9..7bed3ccec0645 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -6,6 +6,7 @@ icon_deny = "sec-deny" panel_type = "panel6" light_mask = "sec-light-mask" + req_access = list(ACCESS_SECURITY) products = list( /obj/item/restraints/handcuffs = 8, /obj/item/restraints/handcuffs/cable/zipties = 10, @@ -37,14 +38,14 @@ extra_price = PAYCHECK_COMMAND * 1.5 payment_department = ACCOUNT_SEC -/obj/machinery/vending/security/pre_throw(obj/item/thrown_item) - if(isgrenade(thrown_item)) - var/obj/item/grenade/thrown_grenade = thrown_item - thrown_grenade.arm_grenade() - else if(istype(thrown_item, /obj/item/flashlight)) - var/obj/item/flashlight/thrown_flashlight = thrown_item - thrown_flashlight.set_light_on(TRUE) - thrown_flashlight.update_brightness() +/obj/machinery/vending/security/pre_throw(obj/item/I) + if(isgrenade(I)) + var/obj/item/grenade/G = I + G.arm_grenade() + else if(istype(I, /obj/item/flashlight)) + var/obj/item/flashlight/F = I + F.set_light_on(TRUE) + F.update_brightness() /obj/item/vending_refill/security machine_name = "SecTech" diff --git a/code/modules/vending/subtype.dm b/code/modules/vending/subtype.dm index 360eb46defd31..3a1a04ff6e764 100644 --- a/code/modules/vending/subtype.dm +++ b/code/modules/vending/subtype.dm @@ -10,7 +10,7 @@ circuit = null product_slogans = "Spawn \" too annoying? Too lazy to open game panel? This one's for you!;Subtype vendor, for all your debugging woes!" default_price = 0 - all_products_free = TRUE + onstation = FALSE /// Spawns coders by default var/type_to_vend = /obj/item/food/grown/citrus diff --git a/code/modules/vending/sustenance.dm b/code/modules/vending/sustenance.dm index 5b54b6bbca464..a1d11c307277e 100644 --- a/code/modules/vending/sustenance.dm +++ b/code/modules/vending/sustenance.dm @@ -36,7 +36,7 @@ desc = "A vending machine which vends food, as required by section 47-C of the NT's Prisoner Ethical Treatment Agreement. \ This one, however, processes labor points for its products if the user is incarcerated." icon_state = "sustenance_labor" - all_products_free = FALSE + onstation_override = TRUE displayed_currency_icon = "digging" displayed_currency_name = " LP" diff --git a/code/modules/wiremod/components/admin/input_request.dm b/code/modules/wiremod/components/admin/input_request.dm index 3961003d43ac5..13dfacba35784 100644 --- a/code/modules/wiremod/components/admin/input_request.dm +++ b/code/modules/wiremod/components/admin/input_request.dm @@ -59,7 +59,7 @@ var/new_option = input_options.value switch(new_option) if(COMP_INPUT_STRING) - var/player_input = tgui_input_text(player, "Input a value", "Input value", max_length = MAX_MESSAGE_LEN) + var/player_input = tgui_input_text(player, "Input a value", "Input value") if(isnull(player_input)) return input_response.set_output(player_input) diff --git a/code/modules/wiremod/components/atom/direction.dm b/code/modules/wiremod/components/atom/direction.dm index 1b14e6505a443..c2bbd5026c8c8 100644 --- a/code/modules/wiremod/components/atom/direction.dm +++ b/code/modules/wiremod/components/atom/direction.dm @@ -13,7 +13,6 @@ /// The result from the output var/datum/port/output/output - var/datum/port/output/distance // Directions outputs var/datum/port/output/north @@ -31,10 +30,9 @@ . += create_ui_notice("Maximum Range: [max_range] tiles", "orange", "info") /obj/item/circuit_component/direction/populate_ports() - input_port = add_input_port("Targeted Entity", PORT_TYPE_ATOM) + input_port = add_input_port("Organism", PORT_TYPE_ATOM) output = add_output_port("Direction", PORT_TYPE_STRING) - distance = add_output_port("Distance", PORT_TYPE_NUMBER) north = add_output_port("North", PORT_TYPE_SIGNAL) east = add_output_port("East", PORT_TYPE_SIGNAL) @@ -47,9 +45,8 @@ if(!object) return var/turf/location = get_location() - var/measured_distance = get_dist(location, object) - if(object.z != location.z || measured_distance > max_range) + if(object.z != location.z || get_dist(location, object) > max_range) output.set_output(null) return @@ -64,6 +61,3 @@ east.set_output(COMPONENT_SIGNAL) if(direction & WEST) west.set_output(COMPONENT_SIGNAL) - - distance.set_output(measured_distance) - diff --git a/code/modules/wiremod/components/bci/thought_listener.dm b/code/modules/wiremod/components/bci/thought_listener.dm index ed6226a4e491f..aa788b1a4be88 100644 --- a/code/modules/wiremod/components/bci/thought_listener.dm +++ b/code/modules/wiremod/components/bci/thought_listener.dm @@ -56,7 +56,7 @@ ready = FALSE /obj/item/circuit_component/thought_listener/proc/thought_listen(mob/living/owner) - var/message = tgui_input_text(owner, input_desc.value ? input_desc.value : "", input_name.value ? input_name.value : "Thought Listener", "", max_length = MAX_MESSAGE_LEN) + var/message = tgui_input_text(owner, input_desc.value ? input_desc.value : "", input_name.value ? input_name.value : "Thought Listener", "") if(QDELETED(owner) || owner.stat >= SOFT_CRIT) return output.set_output(message) diff --git a/code/modules/wiremod/components/math/binary_conversion.dm b/code/modules/wiremod/components/math/binary_conversion.dm index 8ef4067b955fe..8d90019b28c89 100644 --- a/code/modules/wiremod/components/math/binary_conversion.dm +++ b/code/modules/wiremod/components/math/binary_conversion.dm @@ -37,15 +37,6 @@ if(!length(bit_array)) return - var/to_convert = number.value - var/is_negative - if(number.value < 0) - is_negative = TRUE - to_convert = -to_convert - var/len = length(bit_array) - for(var/iteration in 1 to len) + for(var/iteration in 1 to length(bit_array)) var/datum/port/output/bit = bit_array[iteration] - if(iteration == 1 && is_negative) - bit.set_output(1) - continue - bit.set_output(!!(to_convert & (1<< (len - iteration)))) + bit.set_output(number.value & (2 ** (iteration - 1))) diff --git a/code/modules/wiremod/core/component.dm b/code/modules/wiremod/core/component.dm index 07f3a5b55a379..02e88e53c2381 100644 --- a/code/modules/wiremod/core/component.dm +++ b/code/modules/wiremod/core/component.dm @@ -15,7 +15,6 @@ lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' custom_materials = list(/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT) - w_class = WEIGHT_CLASS_TINY /// The name of the component shown on the UI var/display_name = "Generic" diff --git a/code/modules/wiremod/core/integrated_circuit.dm b/code/modules/wiremod/core/integrated_circuit.dm index 8afc963b5a321..db1fd8ac588c0 100644 --- a/code/modules/wiremod/core/integrated_circuit.dm +++ b/code/modules/wiremod/core/integrated_circuit.dm @@ -16,7 +16,6 @@ GLOBAL_LIST_EMPTY_TYPED(integrated_circuits, /obj/item/integrated_circuit) inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - w_class = WEIGHT_CLASS_TINY /// The name that appears on the shell. var/display_name = "" diff --git a/code/modules/wiremod/shell/compact_remote.dm b/code/modules/wiremod/shell/compact_remote.dm index 3bf216a4c326e..0697a449dbeba 100644 --- a/code/modules/wiremod/shell/compact_remote.dm +++ b/code/modules/wiremod/shell/compact_remote.dm @@ -13,7 +13,6 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE - w_class = WEIGHT_CLASS_TINY /obj/item/compact_remote/Initialize(mapload) . = ..() diff --git a/code/modules/wiremod/shell/controller.dm b/code/modules/wiremod/shell/controller.dm index f68dd0c50b200..ae0eb01b36763 100644 --- a/code/modules/wiremod/shell/controller.dm +++ b/code/modules/wiremod/shell/controller.dm @@ -14,7 +14,6 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE - w_class = WEIGHT_CLASS_SMALL /obj/item/controller/Initialize(mapload) . = ..() diff --git a/code/modules/wiremod/shell/keyboard.dm b/code/modules/wiremod/shell/keyboard.dm index 505c89e0dde54..0b28959aa9c69 100644 --- a/code/modules/wiremod/shell/keyboard.dm +++ b/code/modules/wiremod/shell/keyboard.dm @@ -8,7 +8,6 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE - w_class = WEIGHT_CLASS_SMALL /obj/item/keyboard_shell/Initialize(mapload) . = ..() @@ -49,7 +48,7 @@ to_chat(user, span_warning("You start mashing keys at random!")) return - var/message = tgui_input_text(user, "Input your text", "Keyboard", max_length = MAX_MESSAGE_LEN) + var/message = tgui_input_text(user, "Input your text", "Keyboard") entity.set_output(user) output.set_output(message) signal.set_output(COMPONENT_SIGNAL) diff --git a/code/modules/wiremod/shell/scanner.dm b/code/modules/wiremod/shell/scanner.dm index 29a061a535a28..f32f91fa76f2e 100644 --- a/code/modules/wiremod/shell/scanner.dm +++ b/code/modules/wiremod/shell/scanner.dm @@ -13,7 +13,6 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' light_system = OVERLAY_LIGHT_DIRECTIONAL light_on = FALSE - w_class = WEIGHT_CLASS_SMALL /obj/item/wiremod_scanner/Initialize(mapload) . = ..() diff --git a/code/modules/wiremod/shell/shell_items.dm b/code/modules/wiremod/shell/shell_items.dm index bad787033f967..06929e3a04c8e 100644 --- a/code/modules/wiremod/shell/shell_items.dm +++ b/code/modules/wiremod/shell/shell_items.dm @@ -39,7 +39,6 @@ name = "drone assembly" icon_state = "setup_medium_med-open" shell_to_spawn = /mob/living/circuit_drone - w_class = WEIGHT_CLASS_SMALL /obj/item/shell/server name = "server assembly" @@ -53,7 +52,6 @@ icon_state = "construction" shell_to_spawn = /obj/machinery/door/airlock/shell screw_delay = 10 SECONDS - w_class = WEIGHT_CLASS_BULKY /obj/item/shell/dispenser name = "circuit dispenser assembly" @@ -64,7 +62,6 @@ name = "brain-computer interface assembly" icon_state = "bci-open" shell_to_spawn = /obj/item/organ/internal/cyberimp/bci - w_class = WEIGHT_CLASS_TINY /obj/item/shell/scanner_gate name = "scanner gate assembly" diff --git a/config/config.txt b/config/config.txt index d676e0d045646..192f90a001b7a 100644 --- a/config/config.txt +++ b/config/config.txt @@ -270,7 +270,7 @@ NOTE_FRESH_DAYS 91.31055 ## Notes older then this will be completely faded out. NOTE_STALE_DAYS 365.2422 -## Uncomment to allow drastic performance enhancement measures to turn on automatically once there are equal or more clients than the configured amount (will also prompt admin for veto) +## Uncomment to allow drastic performence enhancemet measures to turn on automatically once there are equal or more clients than the configured amount (will also prompt admin for veto) #AUTO_LAG_SWITCH_POP 75 ##Note: all population caps can be used with each other if desired. @@ -297,7 +297,7 @@ EXTREME_POPCAP_MESSAGE The server is currently serving a high number of users, f BYOND_MEMBER_BYPASS_POPCAP ## Notify admins when a new player connects for the first x days a player's been around. (0 for first connection only, -1 for never) -## Requires database +## Requres database NOTIFY_NEW_PLAYER_AGE 0 ## Notify admins when a player connects if their byond account was created in the last X days @@ -305,7 +305,7 @@ NOTIFY_NEW_PLAYER_AGE 0 NOTIFY_NEW_PLAYER_ACCOUNT_AGE 1 ## Notify the irc channel when a new player makes their first connection -## Requires database +## Requres database #IRC_FIRST_CONNECTION_ALERT ## Discord ID of a role that should be pinged when a new player makes their first connection @@ -409,13 +409,13 @@ SECOND_CLICK_LIMIT 15 MINUTE_CLICK_LIMIT 400 ##Error handling related options -## The "cooldown" time for each occurrence of a unique error +## The "cooldown" time for each occurence of a unique error #ERROR_COOLDOWN 600 -## How many occurrences before the next will silence them +## How many occurences before the next will silence them #ERROR_LIMIT 90 ## How long a unique error will be silenced for #ERROR_SILENCE_TIME 6000 -##How long to wait between messaging admins about occurrences of a unique error +##How long to wait between messaging admins about occurences of a unique error #ERROR_MSG_DELAY 50 diff --git a/config/doppler/config_doppler.txt b/config/doppler/config_doppler.txt index e70481c4dcfd1..0da710789294f 100644 --- a/config/doppler/config_doppler.txt +++ b/config/doppler/config_doppler.txt @@ -4,3 +4,5 @@ COMBAT_INDICATOR ## How long until someone can be put in cryo if they are SSD, default is 9000 (15 minutes) CRYO_MIN_SSD_TIME 9000 +## Primitive demihumans +ROUNDSTART_RACES primitive_felinid diff --git a/config/game_options.txt b/config/game_options.txt index 3f7581c325413..c91249b198409 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -145,11 +145,11 @@ ALLOW_RANDOM_EVENTS #FORBID_STATION_TRAITS ## Multiplier for earliest start time of dangerous events. -## Set to 0 to make dangerous events available from round start. +## Set to 0 to make dangerous events avaliable from round start. EVENTS_MIN_TIME_MUL 1 ## Multiplier for minimal player count (players = alive non-AFK humans) for dangerous events to start. -## Set to 0 to make dangerous events available for all populations. +## Set to 0 to make dangerous events avaliable for all populations. EVENTS_MIN_PLAYERS_MUL 1 ## The lower bound, in deciseconds, for how soon another random event can be scheduled. @@ -195,7 +195,7 @@ CONFIG_GATEWAY_CHANCE 0 ## ACCESS ### ## If the number of players ready at round starts exceeds this threshold, JOBS_HAVE_MINIMAL_ACCESS will automatically be enabled. Otherwise, it will be disabled. -## This is useful for accommodating both low and high population rounds on the same server. +## This is useful for accomodating both low and high population rounds on the same server. ## Comment this out or set to 0 to disable this automatic toggle. MINIMAL_ACCESS_THRESHOLD 20 @@ -208,7 +208,7 @@ MINIMAL_ACCESS_THRESHOLD 20 ## Uncomment to give assistants maint access. #ASSISTANTS_HAVE_MAINT_ACCESS -## Uncoment to give security maint access. Note that if you deactivate JOBS_HAVE_MINIMAL_ACCESS security already gets maint from that. +## Uncoment to give security maint access. Note that if you dectivate JOBS_HAVE_MINIMAL_ACCESS security already gets maint from that. #SECURITY_HAS_MAINT_ACCESS ## Uncomment to give everyone maint access. @@ -242,7 +242,7 @@ NEAR_DEATH_EXPERIENCE ## Set to 0/commented out for "off", silicons will just start with Asimov. ## Set to 1 for "custom", silicons will start with the custom laws defined in silicon_laws.txt. (If silicon_laws.txt is empty, the AI will spawn with asimov and Custom boards will auto-delete.) ## Set to 2 for "random", silicons will start with a random lawset picked from random laws specified below. -## Set to 3 for "weighted random", using values in "silicon_weights.txt", a law will be selected, with weights specified in that file. +## Set to 3 for "weighted random", using values in "silicon_weights.txt", a law will be selected, with weights specifed in that file. ## Set to 4 for "specified", silicons will start with an existing lawset. (If no specified lawset is identified, the AI will spawn with asimov.) @@ -350,7 +350,7 @@ SILICON_MAX_LAW_AMOUNT 12 ## Roundstart Races ##------------------------------------------------------------------------------------------- -## Uncommenting races will allow them to be chosen at roundstart while join_with_muntant_race is on. You'll need at least one. +## Uncommenting races will allow them to be choosen at roundstart while join_with_muntant_race is on. You'll need at least one. ## See code/__DEFINES/DNA.dm for more options than the ones below. @@ -368,7 +368,6 @@ ROUNDSTART_RACES slugcat ROUNDSTART_RACES anthromorph ROUNDSTART_RACES aquatic ROUNDSTART_RACES insectoid -ROUNDSTART_RACES primitive_felinid ## Races that are better than humans in some ways, but worse in others ROUNDSTART_RACES ethereal @@ -468,7 +467,7 @@ ARRIVALS_SHUTTLE_DOCK_WINDOW 55 ## Uncomment to prevent late join players from spawning if the arrivals shuttle is depressurized #ARRIVALS_SHUTTLE_REQUIRE_SAFE_LATEJOIN -## How many wirechewing rodents you want to spawn on exposed maintenance wires at the start of the round. You may wish to set this to 0 if you're testing powernets. +## How many wirechewing rodents you want to spawn on exposed maintenane wires at the start of the round. You may wish to set this to 0 if you're testing powernets. MICE_ROUNDSTART 10 diff --git a/config/iceruinblacklist.txt b/config/iceruinblacklist.txt index bad7f15f9793b..420a9d79a28fc 100644 --- a/config/iceruinblacklist.txt +++ b/config/iceruinblacklist.txt @@ -5,40 +5,28 @@ ##RESPAWN #_maps/RandomRuins/AnywhereRuins/golem_ship.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_comms_agent.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_hermit.dmm -#_maps/RandomRuins/IceRuins/doppler/icemoon_underground_icewalker_upper.dmm -#_maps/RandomRuins/IceRuins/doppler/icemoon_underground_icewalker_lower.dmm ##MEGAFAUNA #_maps/RandomRuins/IceRuins/icemoon_surface_mining_site.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_mining_site.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_wendigo_cave.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_lavaland.dmm ##MISC -#_maps/RandomRuins/AnywhereRuins/fountain_hall.dmm -#_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm -#_maps/RandomRuins/IceRuins/icemoon_surface_bughabitat.dmm -#_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm #_maps/RandomRuins/IceRuins/icemoon_surface_gas.dmm #_maps/RandomRuins/IceRuins/icemoon_surface_lust.dmm +#_maps/RandomRuins/IceRuins/icemoon_surface_asteroid.dmm +#_maps/RandomRuins/IceRuins/icemoon_surface_engioutpost.dmm #_maps/RandomRuins/IceRuins/icemoon_surface_phonebooth.dmm #_maps/RandomRuins/IceRuins/icemoon_surface_pizza.dmm #_maps/RandomRuins/IceRuins/icemoon_surface_smoking_room.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_puzzle.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_bathhouse.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_hotsprings.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_library.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_mailroom.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_puzzle.dmm -#_maps/RandomRuins/IceRuins/icemoon_underground_syndielab.dmm #_maps/RandomRuins/IceRuins/icemoon_underground_wrath.dmm - -##DOPPLER -#_maps/RandomRuins/IceRuins/doppler/icemoon_underground_abandoned_icewalker_den.dmm -#_maps/RandomRuins/IceRuins/doppler/icemoon_underground_abandoned_sacred_temple.dmm -#_maps/RandomRuins/IceRuins/doppler/icemoon_underground_magical_hotsprings.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_bathhouse.dmm +#_maps/RandomRuins/AnywhereRuins/fountain_hall.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_hotsprings.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_homestead.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_plasma_facility.dmm +#_maps/RandomRuins/IceRuins/icemoon_underground_frozen_comms.dmm diff --git a/config/jukebox_music/LICENSE.txt b/config/jukebox_music/LICENSE.txt index b7335a9ba634c..8a9d5dd3739bc 100644 --- a/config/jukebox_music/LICENSE.txt +++ b/config/jukebox_music/LICENSE.txt @@ -19,10 +19,10 @@ Do not remove this notice. ---EXAMPLES (NOT PART OF ANY LICENSE)--- -These are examples of properly attributed and licensed sounds. +These are examples of properly attrubuted and licensed sounds. They are not an actual part of any license under any circumstance. -title5.ogg was created by Mya Quinn on February 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). +title5.ogg was created by Mya Quinn on Feburary 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). Unless otherwise noted all sounds were created by Cuban Pete on July 26, 2555. They are licensed under the RUMBABEAT Public License.(http://example.com/license/url/). diff --git a/config/policy.json b/config/policy.json index a21428f65182c..ade2a200f5c7c 100644 --- a/config/policy.json +++ b/config/policy.json @@ -1,5 +1,5 @@ { "How do I set policy?": "Policy is set in this file. It's simply setting the key to the text to show up.", - "Where is policy shown?": "Most, but not all policy text, is displayed when relevant, such as on gaining a role.", + "Where is policy shown?": "Most, but not all policy text, is displayed when releveant, such as on gaining a role.", "What can I all set policy of?": "Antagonist typepaths, mob typepaths, species typepaths, special roles, and some extra special policy keys are all valid. Consult the code." } diff --git a/config/resources.txt b/config/resources.txt index 318730caa55d1..6a053d8cbba57 100644 --- a/config/resources.txt +++ b/config/resources.txt @@ -1,6 +1,6 @@ # External resources # Set this to the location of a .zip with the server's .rsc inside of it. -# If you set this multiple times, the server will rotate between the links. +# If you set this mutiple times, the server will rotate between the links. # To use this, the compile option PRELOAD_RSC must be set to 0 to keep byond from preloading resources # Resource urls can not be encrypted (https://), as they are downloaded by byond, not IE, and byond can't into encryption diff --git a/config/title_music/LICENSE.txt b/config/title_music/LICENSE.txt index 9f331a4e72b23..3f1576d19dfbb 100644 --- a/config/title_music/LICENSE.txt +++ b/config/title_music/LICENSE.txt @@ -19,10 +19,10 @@ Do not remove this notice. ---EXAMPLES (NOT PART OF ANY LICENSE)--- -These are examples of properly attributed and licensed sounds. +These are examples of properly attrubuted and licensed sounds. They are not an actual part of any license under any circumstance. -title5.ogg was created by Mya Quinn on February 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). +title5.ogg was created by Mya Quinn on Feburary 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). Unless otherwise noted all sounds were created by Cuban Pete on July 26, 2555. They are licensed under the RUMBABEAT Public License.(http://example.com/license/url/). diff --git a/config/title_screens/LICENSE.txt b/config/title_screens/LICENSE.txt index 7b1ee62f7d3da..f137cde825a73 100644 --- a/config/title_screens/LICENSE.txt +++ b/config/title_screens/LICENSE.txt @@ -19,10 +19,10 @@ Do not remove this notice. ---EXAMPLES (NOT PART OF ANY LICENSE)--- -These are examples of properly attributed and licensed images. +These are examples of properly attrubuted and licensed images. They are not an actual part of any license under any circumstance. -rare+foobar.png was created by Mya Quinn on February 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). +rare+foobar.png was created by Mya Quinn on Feburary 28, 2557. It is licensed under a Combative Clowning 3.0 HO-NK license (http://example.com/license/url/). Unless otherwise noted all images were created by Cuban Pete on July 26, 2555. They are licensed under the RUMBABEAT Public License.(http://example.com/license/url/). diff --git a/html/changelogs/AutoChangeLog-pr-86117.yml b/html/changelogs/AutoChangeLog-pr-86117.yml new file mode 100644 index 0000000000000..67d1fa86818eb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86117.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "beams now take into account the pixel offsets of both origin and target more accurately.." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86351.yml b/html/changelogs/AutoChangeLog-pr-86351.yml new file mode 100644 index 0000000000000..09debea0e55a2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86351.yml @@ -0,0 +1,4 @@ +author: "lbnesquik" +delete-after: True +changes: + - rscadd: "Add a capacity upgrade for janitorial cyborg light replacers" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86494.yml b/html/changelogs/AutoChangeLog-pr-86494.yml new file mode 100644 index 0000000000000..67bef920b9281 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86494.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - bugfix: "Modifies the mapping around the icebox cliffside, guaranteeing a bit more openness." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-86568.yml b/html/changelogs/AutoChangeLog-pr-86568.yml new file mode 100644 index 0000000000000..e72dc3cc6ffd5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-86568.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - code_imp: "Fixed multiple minor logic issues with code found by OpenDream's new pragma" \ No newline at end of file diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml index 2dd9ac000774d..34998e0e1c1ab 100644 --- a/html/changelogs/archive/2024-09.yml +++ b/html/changelogs/archive/2024-09.yml @@ -238,448 +238,3 @@ properly when swapping character slots - bugfix: fixed a race condition that was causing carpotoxin to cause liver damage to felinids despite being immune -2024-09-10: - Ghommie: - - bugfix: beams now take into account the pixel offsets of both origin and target - more accurately.. - Rhials: - - bugfix: Modifies the mapping around the icebox cliffside, guaranteeing a bit more - openness. - SmArtKar: - - code_imp: Fixed multiple minor logic issues with code found by OpenDream's new - pragma - lbnesquik: - - rscadd: Add a capacity upgrade for janitorial cyborg light replacers -2024-09-11: - 00-Steven: - - bugfix: Fixed being buckled to medical/roller beds making you always use the headrest - as a footrest. - - bugfix: Fixed bedsheets/diskies/plushies/etc put on medical/roller beds facing - the wrong direction. - - bugfix: Fixed bedsheets/diskies/plushies/etc put on any bed facing the wrong direction - on some beds. - - image: Ian bedsheets actually have more than one direction, and so can be put - on beds properly. - Absolucy: - - rscadd: Tomato smudges on the floor are now considered valid to bloodcrawl into - and out of. - Ben10Omintrix: - - bugfix: deers now correctly emote with nearby friends - - bugfix: fixes being able to transform into polymorphed mobs by riding them - Bisar: - - balance: AIs piloting mechs no longer die if they hit the supermatter, nor do - they harmlessly snap back to their core. The shock now causes them to produce - a massive EMP. - - balance: Undid a balance change I did during the malf AI refactor. The doomsday - countdown will no longer stop if a malf AI dominates a mech. - - bugfix: Fixed a few bugs with AI shunting and AI mech death. - - bugfix: The binary conversion circuit component should work again. - - code_imp: The component also now supports representing negative numbers. - BumbertoEko: - - bugfix: Mimes french kisses now activate the sm - DaCoolBoss: - - bugfix: Added missing entries to server config file iceruinblacklist.txt - EnterTheJake: - - rscadd: New Heretic Side Knowledge, Void Prison. - - rscadd: New Void Spell Void Conduit has now replaced Void Blast. - - balance: Void Chill is now a stacking debuff, upon reaching the cap, makes the - target unable to heat up. - - balance: Aristocrat's way now grants immunity to ice and water slips on cold turfs. - - balance: ' Void Cloak now grants low pressure resistance when visible.' - - balance: Void Phase and Void pull have received a minor CD reduction. - - balance: Seeking Blade now applies a couple of stacks of void chill. - - balance: ' Void Heretic Ascension has been overhauled, it''s now protects the - heretic from projectiles, destroys windows and airlocks and applies void chills - to non heretics.' - - image: Void Blade and Void Chill have received some new sprites. - Ghommie: - - bugfix: Fixes mystery boxes breaking after a single use. - Melbert: - - qol: You can watch entertainment monitors from up to seven tiles away, though - you still need to be adjacent(or telekinetic, or a silicon) if you want to change - the channel. - - qol: The way examine looks has been updated. - - qol: A person's ID card no longer appears with a big icon on examine. You can - now click on their ID card (in the chat box) to get a bigger picture of it, - as well as information about them. - - refactor: Much of examine backend code has been refactored, report any odd looking - text. - - bugfix: Trash cannons can be filled with fuel and fired again - SmArtKar: - - bugfix: Fixed missing felinid ear preference - - bugfix: Fixed locker shoving closing and opening the locker thrice, sending its - victim to the backrooms - - bugfix: You no longer return to the station cuffed after being sacrificed by a - heretic - SuperNovaa41: - - bugfix: Fixes getting negative moodlet from fire while immune - SyncIt21: - - bugfix: Mediborg omnitool displays error message for wrong tool in surgery step - hack-wrench: - - rscadd: tape recorder now records speaker name - r3dj4ck0424: - - bugfix: The Syndicate have cleared up the static preventing them from sending - their battlecruisers to Birdshot Station. Watch out, crew! -2024-09-12: - LT3: - - qol: Quick repair suit sensors by hitting yourself with cable coil - - qol: Improved feedback for broken suit sensors - - bugfix: Ctrl+click on equipped uniforms enables suit sensors as expected - Melbert: - - bugfix: Med/sec hud examine - SmArtKar: - - bugfix: You can no longer pick up large parcels with evidence bags due to them - being normal-sized items - carlarctg: - - rscadd: Added an increasing chance for malfunction on repeated failed polling - for MM helmets -2024-09-13: - Bisar: - - bugfix: Fixed up a couple of Void Heretic rework descriptions. - EnterTheJake: - - rscadd: The Wraith Cloaking Module is now available in the uplink, costs 3 TC. - - code_imp: the saboteur handgun now uses a generic proc rather than a signal - Ghommie: - - balance: With enough preparation, good skills and equipment, you can manage to - skip the minigame phase of fishing by reducing the difficulty all the way down - to 0. - - balance: Fish electrogenesis now scales with size. - - rscadd: Pun Pun is a playable crewmember during Monkey Day (14 December). - - bugfix: Fixing fishing not caring whether a reward is limited or not. - Melbert: - - refactor: Storage and Tables are now a lower priority action, meaning some uses - of items on storage should work... better, now. Here's hoping at least, report - any oddities. - - refactor: 'Note: For an overwhelming majority of items, **combat mode** will attempt - to attack/insert into the target, while **non-combat-mode** will attempt to - use on a target. This means screwdrivering or emagging a MODsuit must be done - on non-combat-mode, as combat mode will simply put the screwdriver or emag into - its storage. Same applies to tables, though when in doubt, RMB may help (for - things which are also weapons, like mops).' - - refactor: Refactored escape pod storage, now they actually properly show as unlocked - on red alert and above. - Rhials: - - balance: Teleport blocker implants now prevent implantees from jaunting. - SmArtKar: - - bugfix: You no longer die from bloodloss after polymorphing back from an ahealed - simplemob - Xander3359: - - qol: Infiltrator mod hides your voice - - bugfix: Infiltrator suit now hides moth wings/antenna - - bugfix: hidden moth wings are no longer capable of flight -2024-09-14: - FlufflesTheDog: - - bugfix: Echolocation no longer breaks when witnessing a hologram - - bugfix: Echolocation no longer breaks when witnessing a fulton extraction - - bugfix: Humanoid NPCs are no longer invisible to echolocation users - JohnFulpWillard: - - rscadd: Lighters now use and require welding fuel to work, but can be used as - a welding tool for tasks that don't require much heat. - LT3: - - qol: Medical HUD and crew console can now detect broken (shorted out) suit sensors - needing repair - Oxotnak: - - rscadd: health analyzer now able to print scanned results via Ctrl-shift-click! - - qol: text from healthscan proc now use < br > - Rhials: - - bugfix: Removes some doubled-up railings on the wizard den/ragin' mages shuttle. - SmArtKar: - - code_imp: Minor obsession code cleanup - - admin: Admins can now see players who were previously obsessed but had been "cured" - from the trauma - TheBoondock: - - balance: double the melting point of hull and halves the thermal transfer so plasma - fire should lose less heat and harder to melt it - Timberpoes: - - bugfix: Having the Overflow Role set to On will properly ensure you get that role - at a High priority as intended by the game code. - - bugfix: Job selection is now a little bit more random. Fixes an unintentional - bias in random job assignment that could lead to feast-or-famine for roles where - everyone is assigned one job and nobody is assigned another job. - Vect0r2: - - qol: Adds an additional cable from birdshot SMES units - - qol: Adds two air pumps to birdshot science - - bugfix: bird engineering storage is now connected to the powernet - carlarctg: - - bugfix: The recharging relics now work on ethereal cells. - - balance: EMP now affects ethereal's hunger. - mc-oofert: - - rscadd: you may weld a crate - - code_imp: that one cool haunted donk outpost ruins tripwires and such use a subsystem - instead of globals. no real gameplay effect -2024-09-15: - Ben10Omintrix: - - bugfix: fixes basic AI that are supposed to pause during actions not pausing - Bisar: - - qol: The 'direction' circuit component now also returns the distance of its target. - - balance: Most circuit shells and the generic component and generic circuit have - had their size reduced. - - balance: The airlock circuit shell has had its size increased. - DaCoolBoss: - - rscadd: Adds the Syndicate Lab to the Icemoon ruin pool. - IndieanaJones: - - balance: Gorillas made from giving monkeys genetic damage are weaker than their - normal counterparts. - LT3: - - bugfix: Fixed a mislabelled corpse disposal in Icebox medbay, probably less dead - bodies showing up in cargo - - bugfix: Fixed certain clothing sending suit sensor data when it shouldn't be capable - SmArtKar: - - image: Updated glowing yellow extract sprite - - image: Tanks inside of tank holders have received new sprites - - image: Added a new sprite for mediborg surgical saws - - spellcheck: Fixed a typo in DeForest medical crates - - code_imp: Non-innate engraving blockers should work now (none as of now) - - balance: Humans that never had a player controlling them no longer count towards - changeling absorption counter - TheSmallBlue: - - qol: The z-level button got a refresh! It's now applied to more places and it - should be simpler to use. - Thunder12345: - - bugfix: 'Delta: The disposal unit in the curator''s office is now properly connected - to the disposals system.' - Zytolg: - - qol: The Birdshot Tool Storage has been resupplied. New tools are at the crews - displosal. -2024-09-16: - Ghommie: - - bugfix: Fishing with baits works again. - - bugfix: Water turfs from the crashed site ruin on lavaland are no longer named - "lavaland atmos". - - bugfix: Fixed morbid mobs (coroners) not enjoying room beauty and aquariums in - their own weird ways. - - rscadd: You an now release fish after catching it for a positive moodlet (or to - repopulate certain fishing spot with rare fish). - - bugfix: Bitrunning fishing spots no longer deplete limited loot from outside the - virtual reality. - - bugfix: The treasure chest from the beach is no longer anchored to the floor. - - bugfix: Fixed aquarium props not showing up inside the aquarium. - - admin: godmode is now a datum trait instead of a bitflag. This means the process - for toggling it is a little different now. - - rscadd: Whole, unprocessed fish is now edible. However it's pretty much reccomended - to grill or fry it for over 30 spess seconds before attempting to eat it. - - bugfix: germ-covered, dirty food no longer tries to infect you through contact. - - bugfix: Fixed the offsets of the chimp shotgun when held. - - qol: Add a screentip to shields and pillows' right-click function (shoving people). - - rscadd: Automated announcement systems now announce researched nodes to their - respective departments. You can stop this by either disabling the announcement - systems or by using a multitool on the circuitboard of the console you're researching - nodes from. - - bugfix: Fixed the force of swordfish and armored pikes - - rscadd: Gave the detective an ID that can flipped to look like an assistant ID. - - balance: The detective camera is now silent and doesn't flash. - Jewelry-x: - - spellcheck: fixed typos on heretic's "Lionhunter's Rifle" - vinylspiders: - - bugfix: fixes being able to use chuunibyou shouts while mute - - bugfix: fixed crafted donuts not getting any sprinkles, ever -2024-09-17: - Ghommie: - - bugfix: You once again need to right click to use tackling gloves. - Melbert: - - qol: You can dump bodybags (with people inside them) down disposals - MelokGleb: - - spellcheck: busser is now Busser (with big B) - Pickle-Coding: - - bugfix: Fixes high energy supermatter zaps arcing through an unusually high amount - of objects and ignoring grounding rods. - PowerfulBacon: - - rscadd: Implements the ability to lint for required neighbors in maplint. - - rscadd: Adds conditional linting rules in maplint, allowing a lint to apply only - if certain conditions are met (Variable is/isn't set, Variable is/isn't a value, - Variable matches a regex). - SmArtKar: - - refactor: Refactored how examines display item properties. A lot of them are now - displayed as tags that you can hover over to receive details about, like item - size, resistances and materials an object is made of. - - qol: Protection classes now better elaborate on thermal resistances of items, - displaying the exact temperatures they can protect you from. - - bugfix: You can now craft things on tiles with windoors and railings on them. - - qol: Added a small vertical margin to ID card image in new examine panel to ensure - that it doesn't collide with text - - bugfix: Your UI no longer breaks after being kidnapped by a contractor - - qol: Being kidnapped by a contractor no longer dumps all of your boxes and belts - - bugfix: Dismantling walls with plasma cutters works once more - Time-Green: - - bugfix: Fixes plasmamen having all external organ species preferences - vinylspiders: - - bugfix: smartfridges and drying racks will now display their examine text information - mutlilined -2024-09-18: - Bumtickley00: - - bugfix: Penlights can once again be used to look at people's eyes and mouth. - Ghommie: - - bugfix: examining fishing spots while wielding a rod (with sufficient skill) now - works. - - rscadd: Your current clothes and what chair you sit on can now influence the difficulty - of fishing minigames. Having a bare minimum of fishing skill will let you distinguish - which objects can help and which won't, so keep an eye out. Holding fishing - toolboxes, fish analyzers or fish catalogs can also help. - Jewelry-x: - - bugfix: fixes description for blob reagents - SmArtKar: - - bugfix: Changing ID card's trim now properly adjusts linked bank account's job, - allowing you to receive bounties for your new job - - bugfix: Fixed petrification not removing NOBLOOD trait after ending - - bugfix: Fixed veteran advisor not spawning on security officer landmarks - SyncIt21: - - bugfix: borgs can perform organ manipulation surgery again - deathrobotpunch: - - rscadd: Added new fishing category to games vendor -2024-09-19: - Bisar: - - bugfix: Xenomorph restrictions on items they can pick up have had their determining - logic made more _robust_. - - code_imp: The itempicky component (restricts what can be picked up via a whitelist) - can now, optionally, have a callback fed to it to determine cases of bypassing - that whitelist. - DaCoolBoss: - - spellcheck: Fixed typos in lead's description. - - spellcheck: Mice now love the taste of insulated electrical cables, not uninsulated - ones. - Ghommie: - - rscadd: You can now link fishing portal generators to other fishing spots with - a multitool. The number of fishing spots that can be linked at once and whether - the link can be activated from different z levels depends on the tier of the - stock parts it's built with. - - rscadd: You can pet fish while holding them. Be wary of petting aggressive fish. - Goat: - - bugfix: lockers and crates with no access requirements can now be renamed by anyone - Jewelry-x: - - bugfix: fixed a bug that allows autogrow to be turned on with no power. - - qol: made blob antag panel easier to read and more organized - - spellcheck: fixed a few typos in the blob panel - Kocma-san: - - bugfix: fixed disposal pipes on metastation, deltastation and icebox - SmArtKar: - - bugfix: Vore victims no longer get digested instantly when you evolve - - bugfix: Collars can no longer be used to null a pet's name - - bugfix: Snow bears are no longer impervious to all sources of damage - - bugfix: Cameras, living floors and ghost of poly no longer can be pushed around -2024-09-20: - EnterTheJake: - - balance: Security Flashbangs can no longer be primed for instant detonation. - Goat: - - balance: burn damage equal or under to ten will now damage your jumpsuit (does - not apply to internal temp damage) - - bugfix: radiation burns no longer damage your jumpsuit. - - code_imp: added a new var to applying damage to set if it should apply damage - to clothes. - Jewelry-x: - - bugfix: Lobby crew manifest has colour again - - qol: made it clearer that the expansion in space failed for blob instead of wildly - flailing at space. - LT3: - - bugfix: Fixed missing examine text for the yellow medical HUD border regarding - suit sensors - SmArtKar: - - spellcheck: Fixed broken text display in atmos devices in which you can insert - a tank - - admin: Atmos logging no longer lies about everyone swapping tanks in devices even - if they only inserted/removed one - SmArtKar, Kapu: - - bugfix: Agent ID cards no longer display broken text when you put non-letter symbols - as your name - SyncIt21: - - bugfix: apc breaker properly shuts off all power - Vect0r2: - - rscadd: Added the remote power AI disk - - code_imp: made it possible to easily add new AI upgrade disks - WebcomicArtist: - - rscadd: 'Added pipe-organ gun: a buildable object akin to trash cannon that takes - pipegun rounds, and shoots up to 8 off at once.' - - rscadd: Added The Canister Gatling, a rapid fire but non-destructive cannon for - skeleton pirates. Also Canister shot ammo. - - sound: Added sounds for the above guns. - - image: Added sprites for the guns as well. - - code_imp: Added a whole "mounted_gun" class that is basically cannons but you - aren't forced to use cannonballs as ammo and load them with gunpowder. - carlarctg: - - bugfix: Added a null check to mood, because it caused runtimes. Nonhumans have - mood, but they never initialize it, yet surgery mood assumes it is. - - bugfix: Removed unnecessary ishuman check in the organizer, allowing it to work - on xenomorphs and other theoretical carbons. - thegrb93: - - bugfix: Downstream species not getting internals they need when joining ERT -2024-09-21: - 00-Steven: - - bugfix: Changing a bank account's job to or from Curator actually changes whether - they get a cut from painting patronage. - - admin: VVediting a bank account's account_job actually updates what job the account - is associated with. Currently only matters for Curators. - - admin: VVediting a bank account's add_to_accounts actually removes it from or - adds it to the job to account associations. Currently only matters for Curators. - Bisar: - - balance: Meteor shielding is now purchasable at cargo even if it isn't the current - station goal. - DaCoolBoss: - - qol: '[Birdshot] Kitchen''s privacy shutters no longer cover parts of the cafeteria - table when open.' - - bugfix: '[Birdshot] Kitchen''s corridor windoor is now rotated correctly.' - Deadgebert: - - balance: Syndicate Rebar Bolt damage reduced to 45 from 55. - - balance: Hydrogen Bolt damage reduced to 35 from 55. - - balance: Syndicate Quiver reload is now interrupted by movement. - - balance: Syndicate Quiver reload increased to 1.2 seconds from 0.8 seconds. - - balance: Crossbow TC cost increased to 12 from 10. - - balance: Quiver size increased to normal from small. - FlufflesTheDog: - - bugfix: Icebox's virology airlock cycles properly again - Hardly3D: - - image: Resprited Short Bangs 2 & Double Buns - Iajret: - - bugfix: Mining mods can be charged with plasma once again - LT3: - - spellcheck: Fruit crate description now correctly warns that it contains lemons - Melbert: - - balance: Laser pointers have a 50% chance to fail when used on people wearing - eyepatches - - qol: Deceased and asleep humanoids will now close their eyes - MelokGleb: - - bugfix: doors in museum now work correctly - Rhials: - - bugfix: You can no longer backdoor security records using the Metastation Central - bitrunner domain. - SmArtKar: - - bugfix: Fixed wallmounts not being mountable by using a screwdriver on them - - bugfix: Fixed robotic revival surgery showing up for simplemobs - Xackii: - - bugfix: Gateway museum keycard now spawns in toilet properly. - carlarctg: - - bugfix: Legions borne from mimes can no longer talk - - spellcheck: Removes caps from many improper items - - qol: Adds shorthand alt-click for removing tanks from TTVs and adds context for - it - san7890: - - bugfix: A lot of instances where you could fill in 1024-character names (normal - limit is 42) have been patched out, along with too-long plaque names, too-long - descriptions, and more. -2024-09-22: - Ben10Omintrix: - - bugfix: botkeeper now displays bot's correct states! - Goat: - - bugfix: Virtual pirates were yelled at by the virtual syndicate and no longer - have virtual syndicate headsets. - GregariousJB: - - rscadd: 'Added three programs to cyborg PDAs: SiliConnect, AtmoZphere, and Crew - Manifest' - Kocma-san: - - bugfix: '"Visible to Network" in the fax interface is now displayed correctly' - LT3: - - bugfix: Fixed incomplete floodlights calling all light tubes broken - Likteer: - - bugfix: Plasmamen envirohelmets no longer erroneously apply a slowdown. - Rhials: - - bugfix: The Meta Central Virtual Domain now uses the proper ghost role spawner, - meaning you can't eavesdrop on syndie comms using their headset. - SyncIt21: - - bugfix: moving or rotating a mech will cancel its hydraulic clamp action - carlarctg: - - qol: Durathread vests now fit botany items as well as armor items - - code_imp: Botany suits now all inherit the same list - - rscadd: MetaStation's Drone Bay has been moved to be basically inside the normal - cargo bay. - - rscadd: 'To make room for it, the security cargo post was moved to the east of - the mailing room:' - - rscadd: The drone bay spot in maintenance has been cleared out by a gang of rowdy - assistants, and turned into a drug den. diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index d8b68c88d3812..7923b4e9f1ea9 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/hud/lobby/signup_button.dmi b/icons/hud/lobby/signup_button.dmi index e015fa71948a3..bc5f1f7f24ac0 100644 Binary files a/icons/hud/lobby/signup_button.dmi and b/icons/hud/lobby/signup_button.dmi differ diff --git a/icons/hud/radial_fishing.dmi b/icons/hud/radial_fishing.dmi index 6870698fbe689..65fd55176b7c8 100644 Binary files a/icons/hud/radial_fishing.dmi and b/icons/hud/radial_fishing.dmi differ diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 96a990090f518..10d0b741f0b7c 100644 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/hud/screen_alien.dmi b/icons/hud/screen_alien.dmi index 5f3806dc7bb57..21d7cde0b0383 100644 Binary files a/icons/hud/screen_alien.dmi and b/icons/hud/screen_alien.dmi differ diff --git a/icons/hud/screen_clockwork.dmi b/icons/hud/screen_clockwork.dmi index 809dfe8f1a833..17e0c92972e25 100644 Binary files a/icons/hud/screen_clockwork.dmi and b/icons/hud/screen_clockwork.dmi differ diff --git a/icons/hud/screen_cyborg.dmi b/icons/hud/screen_cyborg.dmi index 2c737ea115f3a..0b17f099607f9 100644 Binary files a/icons/hud/screen_cyborg.dmi and b/icons/hud/screen_cyborg.dmi differ diff --git a/icons/hud/screen_detective.dmi b/icons/hud/screen_detective.dmi index 818bbcfc78b6f..9704ca96f4c12 100644 Binary files a/icons/hud/screen_detective.dmi and b/icons/hud/screen_detective.dmi differ diff --git a/icons/hud/screen_glass.dmi b/icons/hud/screen_glass.dmi index 3cf16106cd868..6b6d9d515c5f0 100644 Binary files a/icons/hud/screen_glass.dmi and b/icons/hud/screen_glass.dmi differ diff --git a/icons/hud/screen_midnight.dmi b/icons/hud/screen_midnight.dmi index 5de157be030f4..8a6f2e1e8e06c 100644 Binary files a/icons/hud/screen_midnight.dmi and b/icons/hud/screen_midnight.dmi differ diff --git a/icons/hud/screen_operative.dmi b/icons/hud/screen_operative.dmi index 5fbaa7c5d5d24..73afee5b3ca40 100644 Binary files a/icons/hud/screen_operative.dmi and b/icons/hud/screen_operative.dmi differ diff --git a/icons/hud/screen_plasmafire.dmi b/icons/hud/screen_plasmafire.dmi index d8b669c96c805..b0b2c7999c92d 100644 Binary files a/icons/hud/screen_plasmafire.dmi and b/icons/hud/screen_plasmafire.dmi differ diff --git a/icons/hud/screen_retro.dmi b/icons/hud/screen_retro.dmi index f3621569d76d1..a0d5abf3be511 100644 Binary files a/icons/hud/screen_retro.dmi and b/icons/hud/screen_retro.dmi differ diff --git a/icons/hud/screen_slimecore.dmi b/icons/hud/screen_slimecore.dmi index a6160087ab889..84a7abec2be5f 100644 Binary files a/icons/hud/screen_slimecore.dmi and b/icons/hud/screen_slimecore.dmi differ diff --git a/icons/hud/screen_trasenknox.dmi b/icons/hud/screen_trasenknox.dmi index 4e17feb5211d0..00ad01258a36a 100644 Binary files a/icons/hud/screen_trasenknox.dmi and b/icons/hud/screen_trasenknox.dmi differ diff --git a/icons/mob/actions/actions_ecult.dmi b/icons/mob/actions/actions_ecult.dmi index d287622f898e5..3ce72ae54ffe7 100644 Binary files a/icons/mob/actions/actions_ecult.dmi and b/icons/mob/actions/actions_ecult.dmi differ diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index 3739113f824ae..086e886bab7b2 100644 Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ diff --git a/icons/mob/human/human_face.dmi b/icons/mob/human/human_face.dmi index 9c6c333f05b29..5b3b141c7edb0 100644 Binary files a/icons/mob/human/human_face.dmi and b/icons/mob/human/human_face.dmi differ diff --git a/icons/mob/inhands/64x64_lefthand.dmi b/icons/mob/inhands/64x64_lefthand.dmi index 4ef1c071abfa2..14f35aa9ef050 100644 Binary files a/icons/mob/inhands/64x64_lefthand.dmi and b/icons/mob/inhands/64x64_lefthand.dmi differ diff --git a/icons/mob/inhands/64x64_righthand.dmi b/icons/mob/inhands/64x64_righthand.dmi index 5d087c0b36f9c..102417e36f5b7 100644 Binary files a/icons/mob/inhands/64x64_righthand.dmi and b/icons/mob/inhands/64x64_righthand.dmi differ diff --git a/icons/mob/silicon/robot_items.dmi b/icons/mob/silicon/robot_items.dmi index bece0211ec8ef..2cb809fe2724b 100644 Binary files a/icons/mob/silicon/robot_items.dmi and b/icons/mob/silicon/robot_items.dmi differ diff --git a/icons/obj/bedsheets.dmi b/icons/obj/bedsheets.dmi index 46fb26ebb1863..daa0c3cdd7904 100644 Binary files a/icons/obj/bedsheets.dmi and b/icons/obj/bedsheets.dmi differ diff --git a/icons/obj/canisters.dmi b/icons/obj/canisters.dmi index 0b38b08f98cf1..1555cf0a4782e 100644 Binary files a/icons/obj/canisters.dmi and b/icons/obj/canisters.dmi differ diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index 738d3e51a3a93..dcfb7f482ae4c 100644 Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_modules.dmi b/icons/obj/clothing/modsuit/mod_modules.dmi index 9d5600dab8073..5cab83c56d5b2 100644 Binary files a/icons/obj/clothing/modsuit/mod_modules.dmi and b/icons/obj/clothing/modsuit/mod_modules.dmi differ diff --git a/icons/obj/fishing.dmi b/icons/obj/fishing.dmi index 9c6a535fd839e..2344d2b8ed9e6 100644 Binary files a/icons/obj/fishing.dmi and b/icons/obj/fishing.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index 0a953cff78272..2bda7341e518f 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/storage/box.dmi b/icons/obj/storage/box.dmi index 79f7eff2a678d..747fb5462c7df 100644 Binary files a/icons/obj/storage/box.dmi and b/icons/obj/storage/box.dmi differ diff --git a/icons/obj/storage/crates.dmi b/icons/obj/storage/crates.dmi index 5f8fecab7a0ff..a5a26c285a7d6 100644 Binary files a/icons/obj/storage/crates.dmi and b/icons/obj/storage/crates.dmi differ diff --git a/icons/obj/weapons/cannons.dmi b/icons/obj/weapons/cannons.dmi index 93b43b19239bd..b9735ba0aef9f 100644 Binary files a/icons/obj/weapons/cannons.dmi and b/icons/obj/weapons/cannons.dmi differ diff --git a/icons/obj/weapons/guns/ammo.dmi b/icons/obj/weapons/guns/ammo.dmi index 2dab0cb3d8d08..971bdaf4d2041 100644 Binary files a/icons/obj/weapons/guns/ammo.dmi and b/icons/obj/weapons/guns/ammo.dmi differ diff --git a/icons/obj/weapons/guns/ballistic.dmi b/icons/obj/weapons/guns/ballistic.dmi index ef61f1d24949d..4ebb17baec329 100644 Binary files a/icons/obj/weapons/guns/ballistic.dmi and b/icons/obj/weapons/guns/ballistic.dmi differ diff --git a/icons/obj/weapons/khopesh.dmi b/icons/obj/weapons/khopesh.dmi index 7c0d54a7140b9..6f4a040f6a410 100644 Binary files a/icons/obj/weapons/khopesh.dmi and b/icons/obj/weapons/khopesh.dmi differ diff --git a/icons/turf/overlays.dmi b/icons/turf/overlays.dmi index cfa61de424971..2b78f1ae40b41 100644 Binary files a/icons/turf/overlays.dmi and b/icons/turf/overlays.dmi differ diff --git a/modular_doppler/cryosleep/code/job.dm b/modular_doppler/cryosleep/code/job.dm index f7d9af2c6d07f..fcd218d473918 100644 --- a/modular_doppler/cryosleep/code/job.dm +++ b/modular_doppler/cryosleep/code/job.dm @@ -1,8 +1,8 @@ /datum/controller/subsystem/job/proc/FreeRole(rank) if(!rank) return - job_debug("Freeing role: [rank]") - var/datum/job/job = get_job(rank) + JobDebug("Freeing role: [rank]") + var/datum/job/job = GetJob(rank) if(!job) return FALSE job.current_positions = max(0, job.current_positions - 1) @@ -11,8 +11,8 @@ /datum/controller/subsystem/job/proc/OccupyRole(rank) if(!rank) return FALSE - job_debug("Occupying role: [rank]") - var/datum/job/job = get_job(rank) + JobDebug("Occupying role: [rank]") + var/datum/job/job = GetJob(rank) if(!job || job.current_positions >= job.total_positions) return FALSE job.current_positions = job.current_positions + 1 diff --git a/modular_doppler/enterprise_resource_planning/code/breasts.dm b/modular_doppler/enterprise_resource_planning/code/breasts.dm index 28263478d6471..cf2a8ea4772cc 100644 --- a/modular_doppler/enterprise_resource_planning/code/breasts.dm +++ b/modular_doppler/enterprise_resource_planning/code/breasts.dm @@ -261,93 +261,3 @@ /datum/sprite_accessory/breasts/pair/size12 name = "Pair 12" icon_state = "pair_12" - -/datum/sprite_accessory/breasts/pair/typeA - name = "Type A" - icon_state = "pair_type_a" - -/datum/sprite_accessory/breasts/pair/typeB - name = "Type B" - icon_state = "pair_type_b" - -/datum/sprite_accessory/breasts/pair/typeC - name = "Type C" - icon_state = "pair_type_c" - -/datum/sprite_accessory/breasts/pair/typeD - name = "Type D" - icon_state = "pair_type_d" - -/// SKINTONE VERSIONS -/datum/sprite_accessory/breasts/skintone - icon = 'modular_doppler/enterprise_resource_planning/icons/mob/breasts_skintone.dmi' - name = "Skintone Bare" - icon_state = "bare" - -/datum/sprite_accessory/breasts/skintone/pair - name = "Skintone Pair 0" - icon_state = "pair_0" - -/datum/sprite_accessory/breasts/skintone/pair/size1 - name = "Skintone Pair 1" - icon_state = "pair_1" - -/datum/sprite_accessory/breasts/skintone/pair/size2 - name = "Skintone Pair 2" - icon_state = "pair_2" - -/datum/sprite_accessory/breasts/skintone/pair/size3 - name = "Skintone Pair 3" - icon_state = "pair_3" - -/datum/sprite_accessory/breasts/skintone/pair/size4 - name = "Skintone Pair 4" - icon_state = "pair_4" - -/datum/sprite_accessory/breasts/skintone/pair/size5 - name = "Skintone Pair 5" - icon_state = "pair_5" - -/datum/sprite_accessory/breasts/skintone/pair/size6 - name = "Skintone Pair 6" - icon_state = "pair_6" - -/datum/sprite_accessory/breasts/skintone/pair/size7 - name = "Skintone Pair 7" - icon_state = "pair_7" - -/datum/sprite_accessory/breasts/skintone/pair/size8 - name = "Skintone Pair 8" - icon_state = "pair_8" - -/datum/sprite_accessory/breasts/skintone/pair/size9 - name = "Skintone Pair 9" - icon_state = "pair_9" - -/datum/sprite_accessory/breasts/skintone/pair/size10 - name = "Skintone Pair 10" - icon_state = "pair_10" - -/datum/sprite_accessory/breasts/skintone/pair/size11 - name = "Skintone Pair 11" - icon_state = "pair_11" - -/datum/sprite_accessory/breasts/skintone/pair/size12 - name = "Skintone Pair 12" - icon_state = "pair_12" - -/datum/sprite_accessory/breasts/skintone/pair/typeA - name = "Skintone Pair Type A" - icon_state = "pair_type_a" - -/datum/sprite_accessory/breasts/skintone/pair/typeB - name = "Skintone Pair Type B" - icon_state = "pair_type_b" - -/datum/sprite_accessory/breasts/skintone/pair/typeC - name = "Skintone Pair Type C" - icon_state = "pair_type_c" - -/datum/sprite_accessory/breasts/skintone/pair/typeD - name = "Skintone Pair Type D" - icon_state = "pair_type_d" diff --git a/modular_doppler/enterprise_resource_planning/icons/mob/breasts.dmi b/modular_doppler/enterprise_resource_planning/icons/mob/breasts.dmi index 13d51740359a3..b08334e0dbc98 100644 Binary files a/modular_doppler/enterprise_resource_planning/icons/mob/breasts.dmi and b/modular_doppler/enterprise_resource_planning/icons/mob/breasts.dmi differ diff --git a/modular_doppler/enterprise_resource_planning/icons/organs.dmi b/modular_doppler/enterprise_resource_planning/icons/organs.dmi index 0649e0705ac54..51dc172e8527c 100644 Binary files a/modular_doppler/enterprise_resource_planning/icons/organs.dmi and b/modular_doppler/enterprise_resource_planning/icons/organs.dmi differ diff --git a/modular_doppler/hearthkin/primitive_catgirls/code/clothing.dm b/modular_doppler/hearthkin/primitive_catgirls/code/clothing.dm index 7e48b3b337cc8..15e6e8a61451f 100644 --- a/modular_doppler/hearthkin/primitive_catgirls/code/clothing.dm +++ b/modular_doppler/hearthkin/primitive_catgirls/code/clothing.dm @@ -50,7 +50,7 @@ body_parts_covered = GROIN|CHEST greyscale_config = /datum/greyscale_config/primitive_catgirl_tunic greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_tunic/worn - greyscale_colors = "#ccd1db#dce0f2#594032" + greyscale_colors = "#cec8bf#faece4#594032" flags_1 = IS_PLAYER_COLORABLE_1 has_sensor = FALSE @@ -124,18 +124,15 @@ // Shoes /obj/item/clothing/shoes/winterboots/ice_boots/primitive_catgirl_boots - name = "primitive hiking boots" - desc = "A pair of heavy boots lined with fur and with soles special built to prevent slipping on ice." - icon_state = "boots" - icon = 'modular_doppler/hearthkin/primitive_catgirls/icons/clothing_greyscale.dmi' - worn_icon = 'modular_doppler/hearthkin/primitive_catgirls/icons/clothing_greyscale.dmi' - supports_variations_flags = CLOTHING_NO_VARIATION - supported_bodyshapes = null - bodyshape_icon_files = null - greyscale_config = /datum/greyscale_config/primitive_catgirl_boots - greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_boots/worn - greyscale_colors = "#594032#cec8bf" - flags_1 = IS_PLAYER_COLORABLE_1 + name = "primitive hiking boots" + desc = "A pair of heavy boots lined with fur and with soles special built to prevent slipping on ice." + icon_state = "boots" + icon = 'modular_doppler/hearthkin/primitive_catgirls/icons/clothing_greyscale.dmi' + worn_icon = 'modular_doppler/hearthkin/primitive_catgirls/icons/clothing_greyscale.dmi' + greyscale_config = /datum/greyscale_config/primitive_catgirl_boots + greyscale_config_worn = /datum/greyscale_config/primitive_catgirl_boots/worn + greyscale_colors = "#594032#cec8bf" + flags_1 = IS_PLAYER_COLORABLE_1 // Neck diff --git a/modular_doppler/hearthkin/primitive_catgirls/code/clothing_vendor.dm b/modular_doppler/hearthkin/primitive_catgirls/code/clothing_vendor.dm index 9ac3a81dfed89..04fe22a194a53 100644 --- a/modular_doppler/hearthkin/primitive_catgirls/code/clothing_vendor.dm +++ b/modular_doppler/hearthkin/primitive_catgirls/code/clothing_vendor.dm @@ -27,10 +27,10 @@ /obj/item/clothing/neck/large_scarf/primitive_catgirl_off_white = 5, /obj/item/clothing/neck/infinity_scarf/primitive_catgirl_blue = 5, // /obj/item/clothing/neck/mantle/recolorable/primitive_catgirl_off_white = 5, - /obj/item/clothing/neck/ranger_poncho/ = 5, - /obj/item/clothing/neck/wide_cape = 5, - /obj/item/clothing/neck/robe_cape = 5, - /obj/item/clothing/neck/long_cape = 5, + // /obj/item/clothing/neck/ranger_poncho/primitive_catgirl_leather = 5, + // /obj/item/clothing/neck/wide_cape = 5, + // /obj/item/clothing/neck/robe_cape = 5, + // /obj/item/clothing/neck/long_cape = 5, // /obj/item/clothing/glasses/eyepatch/wrap = 5, /obj/item/clothing/head/primitive_catgirl_ferroniere = 5, /obj/item/clothing/head/pelt/snow_tiger = 5, diff --git a/modular_doppler/hearthkin/primitive_catgirls/code/spawner.dm b/modular_doppler/hearthkin/primitive_catgirls/code/spawner.dm index 3b5e5170d0192..d10dfa45615c9 100644 --- a/modular_doppler/hearthkin/primitive_catgirls/code/spawner.dm +++ b/modular_doppler/hearthkin/primitive_catgirls/code/spawner.dm @@ -286,10 +286,6 @@ /datum/crafting_recipe/black_pelt_bed, /datum/crafting_recipe/white_pelt_bed, /datum/crafting_recipe/frozen_breath, - /datum/crafting_recipe/black_pelts_rug, - /datum/crafting_recipe/white_pelts_rug, - /datum/crafting_recipe/bronze_calling_horn, - /datum/crafting_recipe/hearthkin_rune_stone, ) /datum/antagonist/primitive_catgirl/Destroy() diff --git a/modular_doppler/hearthkin/primitive_catgirls/icons/clothing_greyscale.dmi b/modular_doppler/hearthkin/primitive_catgirls/icons/clothing_greyscale.dmi index bebaf23cfab2f..4599c4404da66 100644 Binary files a/modular_doppler/hearthkin/primitive_catgirls/icons/clothing_greyscale.dmi and b/modular_doppler/hearthkin/primitive_catgirls/icons/clothing_greyscale.dmi differ diff --git a/modular_doppler/hearthkin/primitive_production/code/ceramics.dm b/modular_doppler/hearthkin/primitive_production/code/ceramics.dm index 80c849bd2fb29..a7105a0ca4359 100644 --- a/modular_doppler/hearthkin/primitive_production/code/ceramics.dm +++ b/modular_doppler/hearthkin/primitive_production/code/ceramics.dm @@ -140,11 +140,6 @@ GLOBAL_LIST_INIT(clay_recipes, list ( \ icon_state = "clay_bowl" custom_materials = null -/obj/item/reagent_containers/cup/bowl/ceramic/update_icon_state() - if(!reagents.total_volume) - icon_state = "clay_bowl" - return ..() - /obj/item/ceramic/cup name = "ceramic cup" desc = "A piece of clay with high walls, in the shape of a cup. It can hold 120 units." diff --git a/modular_doppler/hearthkin/primitive_structures/code/furniture.dm b/modular_doppler/hearthkin/primitive_structures/code/furniture.dm index 96c4b9833472d..92333fc129b87 100644 --- a/modular_doppler/hearthkin/primitive_structures/code/furniture.dm +++ b/modular_doppler/hearthkin/primitive_structures/code/furniture.dm @@ -71,66 +71,3 @@ ) result = /obj/structure/bed/double/pelt/black - -// Hearthkin Exclusive Decorations -/obj/structure/rugs/pelt/ - name = "white pelts rug" - desc = "A luxurious rug, made from bear pelts." - icon_state = "fur_rug_white" - icon = 'modular_doppler/hearthkin/primitive_structures/icons/fur_rugs.dmi' - resistance_flags = FLAMMABLE - max_integrity = 100 - integrity_failure = 0.35 - bound_height = 64 - -//Deconstruct code -/obj/structure/rugs/pelt/attackby(obj/item/attacking_item, mob/user, params) - if(!istype(attacking_item, /obj/item/knife/)) - return ..() - balloon_alert_to_viewers("cutting...") - if(!do_after(user, 5 SECONDS, target = src)) - balloon_alert_to_viewers("stopped cutting") - return FALSE - deconstruct(TRUE) - -/obj/structure/rugs/pelt/atom_deconstruct(disassembled) - var/obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide/polar_bear_hide = new(drop_location(), 4) - transfer_fingerprints_to(polar_bear_hide) - return ..() - -//Anchor code -/obj/structure/rugs/pelt/click_ctrl(mob/user) - set_anchored(!anchored) - balloon_alert(user, "[anchored ? "secured" : "unsecured"]") - -//Crafting code - -/datum/crafting_recipe/white_pelts_rug - name = "White Pelts Rug" - category = CAT_FURNITURE - //recipe given to icecats as part of their spawner/team setting - crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED | CRAFT_ONE_PER_TURF - - reqs = list( - /obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 4, - ) - - result = /obj/structure/rugs/pelt/ - -/obj/structure/rugs/pelt/black - name = "black pelts rug" - desc = "A luxurious rug, made from bear pelts, and black dye." - icon_state = "fur_rug_black" - icon = 'modular_doppler/hearthkin/primitive_structures/icons/fur_rugs.dmi' - -/datum/crafting_recipe/black_pelts_rug - name = "Black Pelts Rug" - category = CAT_FURNITURE - //recipe given to icecats as part of their spawner/team setting - crafting_flags = CRAFT_CHECK_DENSITY | CRAFT_MUST_BE_LEARNED | CRAFT_ONE_PER_TURF - - reqs = list( - /obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 4, - ) - - result = /obj/structure/rugs/pelt/black diff --git a/modular_doppler/hearthkin/tribal_extended/code/crafting.dm b/modular_doppler/hearthkin/tribal_extended/code/crafting.dm index 7aa15b77916e1..b6705ad928954 100644 --- a/modular_doppler/hearthkin/tribal_extended/code/crafting.dm +++ b/modular_doppler/hearthkin/tribal_extended/code/crafting.dm @@ -19,7 +19,7 @@ fill_icon_state = "fullbowl" fill_icon = 'icons/obj/mining_zones/ash_flora.dmi' -/obj/item/reagent_containers/cup/bowl/wood_bowl/update_icon_state() +/obj/item/reagent_containers/cup/bowl/mushroom_bowl/update_icon_state() if(!reagents.total_volume) icon_state = "wood_bowl" return ..() diff --git a/modular_doppler/modular_antagonists/sapper_gang/sapper_event.dm b/modular_doppler/modular_antagonists/sapper_gang/sapper_event.dm index a2819bc00a325..1f07beb93e9a3 100644 --- a/modular_doppler/modular_antagonists/sapper_gang/sapper_event.dm +++ b/modular_doppler/modular_antagonists/sapper_gang/sapper_event.dm @@ -55,7 +55,7 @@ var/datum/team/sapper/gang = new new_character.forceMove(pick_n_take(spawn_locs)) - new_character.mind.set_assigned_role(SSjob.get_job_type(/datum/job/space_sapper)) + new_character.mind.set_assigned_role(SSjob.GetJobType(/datum/job/space_sapper)) new_character.mind.special_role = ROLE_SPACE_SAPPER new_character.mind.add_antag_datum(/datum/antagonist/sapper, gang) new_character.mind.active = TRUE @@ -122,7 +122,7 @@ var/list/mind_list = list(mind_one, mind_two) for(var/datum/mind/minds as anything in mind_list) - minds.set_assigned_role(SSjob.get_job_type(/datum/job/space_sapper)) + minds.set_assigned_role(SSjob.GetJobType(/datum/job/space_sapper)) minds.special_role = ROLE_SPACE_SAPPER minds.active = TRUE diff --git a/modular_doppler/modular_cosmetics/code/neck/collar.dm b/modular_doppler/modular_cosmetics/code/neck/collar.dm index b104efadfebdb..431c519d85bc7 100644 --- a/modular_doppler/modular_cosmetics/code/neck/collar.dm +++ b/modular_doppler/modular_cosmetics/code/neck/collar.dm @@ -21,6 +21,12 @@ if(treat_path) new treat_path(src) +// incompatible storage by default stops attack chain, but this does not, allows pen renaming +// Cherrypicking tgstation #85512 may have broken this and I cannot presently be bothered trying to debug it if it is broken +/* +/obj/item/clothing/neck/human_petcollar/storage_insert_on_interacted_with(datum/storage/storage, obj/item/inserted, mob/living/user) + return is_type_in_typecache(inserted, storage.can_hold)*/ + /obj/item/clothing/neck/human_petcollar/leather name = "leather pet collar" icon_state = "leather" diff --git a/modular_doppler/modular_crafting/code/sheet_types.dm b/modular_doppler/modular_crafting/code/sheet_types.dm index 2298df03d11cb..f9e2ef3710918 100644 --- a/modular_doppler/modular_crafting/code/sheet_types.dm +++ b/modular_doppler/modular_crafting/code/sheet_types.dm @@ -48,7 +48,6 @@ GLOBAL_LIST_INIT(doppler_plasteel_recipes, list( GLOBAL_LIST_INIT(doppler_rod_recipes, list( new/datum/stack_recipe("crutch", /obj/item/cane/crutch, 3, time = 1 SECONDS, category = CAT_TOOLS), new/datum/stack_recipe("torch mount", /obj/item/wallframe/torch_mount, 2, category = CAT_MISC), - new/datum/stack_recipe("towel bin", /obj/structure/towel_bin/empty, 2, time = 0.5 SECONDS, crafting_flags = CRAFT_CHECK_DENSITY, category = CAT_CONTAINERS), )) /obj/item/stack/rods/get_main_recipes() @@ -93,7 +92,6 @@ GLOBAL_LIST_INIT(doppler_cardboard_recipes, list( // Cloth GLOBAL_LIST_INIT(doppler_cloth_recipes, list( - new/datum/stack_recipe("towel", /obj/item/towel, 2, category = CAT_CLOTHING), new/datum/stack_recipe("eyepatch", /obj/item/clothing/glasses/eyepatch, 2, category = CAT_CLOTHING), new/datum/stack_recipe("xenoarch bag", /obj/item/storage/bag/xenoarch, 4, category = CAT_CONTAINERS), )) diff --git a/modular_doppler/modular_customization/accessories/code/non_species_specific/canine_accessories/canine_tail.dm b/modular_doppler/modular_customization/accessories/code/non_species_specific/canine_accessories/canine_tail.dm index c839611e43ae8..1067cde310ef0 100644 --- a/modular_doppler/modular_customization/accessories/code/non_species_specific/canine_accessories/canine_tail.dm +++ b/modular_doppler/modular_customization/accessories/code/non_species_specific/canine_accessories/canine_tail.dm @@ -13,10 +13,6 @@ name = "Straight" icon_state = "straighttail" -/datum/sprite_accessory/tails/dog/shortpup - name = "Short" - icon_state = "shortpup" - /datum/sprite_accessory/tails/fox icon = 'modular_doppler/modular_customization/accessories/icons/non_species_specific/canine/canine_tail.dmi' diff --git a/modular_doppler/modular_customization/accessories/icons/aquatic/aquatic_snouts.dmi b/modular_doppler/modular_customization/accessories/icons/aquatic/aquatic_snouts.dmi index a338cf5fe3674..658f4d7aa80fe 100644 Binary files a/modular_doppler/modular_customization/accessories/icons/aquatic/aquatic_snouts.dmi and b/modular_doppler/modular_customization/accessories/icons/aquatic/aquatic_snouts.dmi differ diff --git a/modular_doppler/modular_customization/accessories/icons/lizard/lizard_ears.dmi b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_ears.dmi index d67369f7e096e..a71281c70bd02 100644 Binary files a/modular_doppler/modular_customization/accessories/icons/lizard/lizard_ears.dmi and b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_ears.dmi differ diff --git a/modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail.dmi b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail.dmi index d156e0c34c105..ec96697b74a64 100644 Binary files a/modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail.dmi and b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail.dmi differ diff --git a/modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail_big.dmi b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail_big.dmi index 8746eaa276bc5..806881a8979a5 100644 Binary files a/modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail_big.dmi and b/modular_doppler/modular_customization/accessories/icons/lizard/lizard_tail_big.dmi differ diff --git a/modular_doppler/modular_customization/accessories/icons/non_species_specific/canine/canine_tail.dmi b/modular_doppler/modular_customization/accessories/icons/non_species_specific/canine/canine_tail.dmi index 4bbd8281b47a1..ffa8c0d0a88eb 100644 Binary files a/modular_doppler/modular_customization/accessories/icons/non_species_specific/canine/canine_tail.dmi and b/modular_doppler/modular_customization/accessories/icons/non_species_specific/canine/canine_tail.dmi differ diff --git a/modular_doppler/modular_customization/organs/external/tail.dm b/modular_doppler/modular_customization/organs/external/tail.dm index 61919ffa6298c..3b884cd900808 100644 --- a/modular_doppler/modular_customization/organs/external/tail.dm +++ b/modular_doppler/modular_customization/organs/external/tail.dm @@ -1,56 +1,8 @@ -/// Tail storage datum -/datum/storage/tail - insert_preposition = "on" - silent = FALSE - max_slots = 1 - max_specific_storage = WEIGHT_CLASS_SMALL - max_total_storage = 50 - do_rustle = FALSE - screen_start_x = 12 - screen_pixel_x = 22 - -/datum/storage/tail/New( - atom/parent, - max_slots, - max_specific_storage, - max_total_storage, -) - . = ..() - set_holdable(list( - /obj/item/, - )) - /// Monkey tail // now waggable! /obj/item/organ/external/tail/monkey - name = "monkey tail" wag_flags = WAG_ABLE -/obj/item/organ/external/tail/monkey/Initialize(mapload) - . = ..() - create_storage(storage_type = /datum/storage/tail) - AddComponent(/datum/component/accessable_storage/organ) - -/// Mouse tail -// Monkey and mouse tail get a (secret) additional inventory slot -/obj/item/organ/external/tail/mouse - name = "mouse tail" - preference = "feature_mouse_tail" - dna_block = null - wag_flags = WAG_ABLE - bodypart_overlay = /datum/bodypart_overlay/mutant/tail/mouse - -/obj/item/organ/external/tail/mouse/Initialize(mapload) - . = ..() - create_storage(storage_type = /datum/storage/tail) - AddComponent(/datum/component/accessable_storage/organ) - -/datum/bodypart_overlay/mutant/tail/mouse - feature_key = "tail_other" - -/datum/bodypart_overlay/mutant/tail/mouse/get_global_feature_list() - return SSaccessories.tails_list_mouse - /// Dog tail // Buffs people if they're closeby while you're wagging it! /obj/item/organ/external/tail/dog @@ -125,6 +77,20 @@ /datum/bodypart_overlay/mutant/tail/bunny/get_global_feature_list() return SSaccessories.tails_list_bunny +/// Mouse tail +// +/obj/item/organ/external/tail/mouse + preference = "feature_mouse_tail" + dna_block = null + wag_flags = WAG_ABLE + bodypart_overlay = /datum/bodypart_overlay/mutant/tail/mouse + +/datum/bodypart_overlay/mutant/tail/mouse + feature_key = "tail_other" + +/datum/bodypart_overlay/mutant/tail/mouse/get_global_feature_list() + return SSaccessories.tails_list_mouse + /// Bird tail // /obj/item/organ/external/tail/bird diff --git a/modular_doppler/modular_customization/preferences/antennae.dm b/modular_doppler/modular_customization/preferences/antennae.dm index 801dcff44a552..714e2c8f88695 100644 --- a/modular_doppler/modular_customization/preferences/antennae.dm +++ b/modular_doppler/modular_customization/preferences/antennae.dm @@ -37,32 +37,3 @@ /datum/preference/choiced/moth_antennae/create_default_value() return /datum/sprite_accessory/moth_antennae/none::name - - - -/// Overwrite lives here -// Moth antennae have their own bespoke RGB code. -/datum/bodypart_overlay/mutant/antennae/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - var/color_intended = COLOR_WHITE - - var/tcol_1 = limb.owner.dna.features["antennae_color_1"] - var/tcol_2 = limb.owner.dna.features["antennae_color_2"] - var/tcol_3 = limb.owner.dna.features["antennae_color_3"] - if(tcol_1 && tcol_2 && tcol_3) - //this is beyond ugly but it works - var/r1 = hex2num(copytext(tcol_1, 2, 4)) / 255.0 - var/g1 = hex2num(copytext(tcol_1, 4, 6)) / 255.0 - var/b1 = hex2num(copytext(tcol_1, 6, 8)) / 255.0 - var/r2 = hex2num(copytext(tcol_2, 2, 4)) / 255.0 - var/g2 = hex2num(copytext(tcol_2, 4, 6)) / 255.0 - var/b2 = hex2num(copytext(tcol_2, 6, 8)) / 255.0 - var/r3 = hex2num(copytext(tcol_3, 2, 4)) / 255.0 - var/g3 = hex2num(copytext(tcol_3, 4, 6)) / 255.0 - var/b3 = hex2num(copytext(tcol_3, 6, 8)) / 255.0 - color_intended = list(r1,g1,b1, r2,g2,b2, r3,g3,b3) - overlay.color = color_intended - return overlay diff --git a/modular_doppler/modular_customization/preferences/tail.dm b/modular_doppler/modular_customization/preferences/tail.dm index aead2b774c7b5..fceec22b81806 100644 --- a/modular_doppler/modular_customization/preferences/tail.dm +++ b/modular_doppler/modular_customization/preferences/tail.dm @@ -124,7 +124,7 @@ /datum/preference/choiced/lizard_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_lizard[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Cat /datum/preference/choiced/tail_human // it's a lie @@ -148,7 +148,7 @@ /datum/preference/choiced/tail_human/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_human[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Dog /datum/preference/choiced/dog_tail @@ -178,7 +178,7 @@ /datum/preference/choiced/dog_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_dog[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Fox /datum/preference/choiced/fox_tail @@ -208,7 +208,7 @@ /datum/preference/choiced/fox_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_fox[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Bunny /datum/preference/choiced/bunny_tail @@ -238,7 +238,7 @@ /datum/preference/choiced/bunny_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_bunny[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Mouse /datum/preference/choiced/mouse_tail @@ -268,7 +268,7 @@ /datum/preference/choiced/mouse_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_mouse[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Bird /datum/preference/choiced/bird_tail @@ -298,7 +298,7 @@ /datum/preference/choiced/bird_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_bird[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Monkey /datum/preference/choiced/monkey_tail @@ -322,7 +322,7 @@ /datum/preference/choiced/monkey_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_monkey[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Deer /datum/preference/choiced/deer_tail @@ -352,7 +352,7 @@ /datum/preference/choiced/deer_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_deer[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Fish /datum/preference/choiced/fish_tail @@ -382,7 +382,7 @@ /datum/preference/choiced/fish_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_fish[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Bug /datum/preference/choiced/bug_tail @@ -412,7 +412,7 @@ /datum/preference/choiced/bug_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_bug[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Synth /datum/preference/choiced/synth_tail @@ -442,7 +442,7 @@ /datum/preference/choiced/synth_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_synth[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) // Humanoid /datum/preference/choiced/humanoid_tail @@ -472,59 +472,32 @@ /datum/preference/choiced/humanoid_tail/icon_for(value) var/datum/sprite_accessory/chosen_tail = SSaccessories.tails_list_humanoid[value] - return generate_back_icon(chosen_tail, "tail") + return generate_tail_icon(chosen_tail) -#define WIDTH_WINGS_FILE 45 -#define HEIGHT_WINGS_FILE 34 -#define WIDTH_BIGTAILS_FILE 64 -#define HEIGHT_BIGTAILS_FILE 32 /// Proc to gen that icon // We don't wanna copy paste this -/datum/preference/choiced/proc/generate_back_icon(chosen_tail, key) +/datum/preference/choiced/proc/generate_tail_icon(chosen_tail) var/datum/sprite_accessory/sprite_accessory = chosen_tail var/icon/final_icon = icon('icons/mob/human/bodyparts_greyscale.dmi', "human_chest_m", NORTH) if (sprite_accessory.icon_state != "none") - var/icon/markings_icon_1 = icon(sprite_accessory.icon, "m_[key]_[sprite_accessory.icon_state]_BEHIND", NORTH) + var/icon/markings_icon_1 = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_BEHIND", NORTH) markings_icon_1.Blend(COLOR_RED, ICON_MULTIPLY) - var/icon/markings_icon_2 = icon(sprite_accessory.icon, "m_[key]_[sprite_accessory.icon_state]_BEHIND_2", NORTH) + var/icon/markings_icon_2 = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_BEHIND_2", NORTH) markings_icon_2.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY) - var/icon/markings_icon_3 = icon(sprite_accessory.icon, "m_[key]_[sprite_accessory.icon_state]_BEHIND_3", NORTH) + var/icon/markings_icon_3 = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_BEHIND_3", NORTH) markings_icon_3.Blend(COLOR_BLUE, ICON_MULTIPLY) - // A couple icon files use this plus-size setup; autocrop to generate better icons where possible - if(markings_icon_1.Width() == WIDTH_WINGS_FILE && markings_icon_1.Height() == HEIGHT_WINGS_FILE) - markings_icon_1.Crop(8, 2, 39, 33) - markings_icon_2.Crop(8, 2, 39, 33) - markings_icon_3.Crop(8, 2, 39, 33) - if(markings_icon_1.Width() == WIDTH_BIGTAILS_FILE && markings_icon_1.Height() == HEIGHT_BIGTAILS_FILE) // Plus-size tail files are simpler - markings_icon_1.Crop(17, 1, 48, 32) - markings_icon_2.Crop(17, 1, 48, 32) - markings_icon_3.Crop(17, 1, 48, 32) - // finally apply icons - markings_icon_1.Blend(final_icon, ICON_OVERLAY) - markings_icon_2.Blend(final_icon, ICON_OVERLAY) - markings_icon_3.Blend(final_icon, ICON_OVERLAY) final_icon.Blend(markings_icon_1, ICON_OVERLAY) final_icon.Blend(markings_icon_2, ICON_OVERLAY) final_icon.Blend(markings_icon_3, ICON_OVERLAY) - /// == front breaker == - var/icon/markings_icon_1_f = icon(sprite_accessory.icon, "m_[key]_[sprite_accessory.icon_state]_FRONT", NORTH) + // front breaker + var/icon/markings_icon_1_f = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_FRONT", NORTH) markings_icon_1_f.Blend(COLOR_RED, ICON_MULTIPLY) - var/icon/markings_icon_2_f = icon(sprite_accessory.icon, "m_[key]_[sprite_accessory.icon_state]_FRONT_2", NORTH) + var/icon/markings_icon_2_f = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_FRONT_2", NORTH) markings_icon_2_f.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY) - var/icon/markings_icon_3_f = icon(sprite_accessory.icon, "m_[key]_[sprite_accessory.icon_state]_FRONT_3", NORTH) + var/icon/markings_icon_3_f = icon(sprite_accessory.icon, "m_tail_[sprite_accessory.icon_state]_FRONT_3", NORTH) markings_icon_3_f.Blend(COLOR_BLUE, ICON_MULTIPLY) - // A couple icon files use this plus-size setup; autocrop to generate better icons where possible - if(markings_icon_1_f.Width() == WIDTH_WINGS_FILE && markings_icon_1_f.Height() == HEIGHT_WINGS_FILE) - markings_icon_1_f.Crop(8, 2, 39, 33) - markings_icon_2_f.Crop(8, 2, 39, 33) - markings_icon_3_f.Crop(8, 2, 39, 33) - else if(markings_icon_1_f.Width() == WIDTH_BIGTAILS_FILE && markings_icon_1_f.Height() == HEIGHT_BIGTAILS_FILE) // Plus-size tail files are simpler - markings_icon_1_f.Crop(17, 1, 48, 32) - markings_icon_2_f.Crop(17, 1, 48, 32) - markings_icon_3_f.Crop(17, 1, 48, 32) - // finally apply icons final_icon.Blend(markings_icon_1_f, ICON_OVERLAY) final_icon.Blend(markings_icon_2_f, ICON_OVERLAY) final_icon.Blend(markings_icon_3_f, ICON_OVERLAY) diff --git a/modular_doppler/modular_customization/preferences/wings.dm b/modular_doppler/modular_customization/preferences/wings.dm index 1b38e70719a88..ee7f9e00feaa2 100644 --- a/modular_doppler/modular_customization/preferences/wings.dm +++ b/modular_doppler/modular_customization/preferences/wings.dm @@ -87,7 +87,9 @@ /datum/preference/choiced/wings/icon_for(value) var/datum/sprite_accessory/wings = SSaccessories.wings_list_more[value] - return generate_back_icon(wings, "wings") + var/icon/final_icon = icon(wings.icon, "m_wings_[wings.icon_state]_BEHIND") + final_icon.Blend(icon(wings.icon, "m_wings_[wings.icon_state]_FRONT"), ICON_OVERLAY) + return final_icon // Moth Wings /datum/preference/choiced/moth_wings @@ -142,32 +144,3 @@ overlay.color = limb.owner.dna.features["wings_color_3"] return overlay return ..() - - - -/// Overwrite lives here -// Moth wings have their own bespoke RGB code. -/datum/bodypart_overlay/mutant/wings/moth/color_image(image/overlay, draw_layer, obj/item/bodypart/limb) - if(limb == null) - return ..() - if(limb.owner == null) - return ..() - var/color_intended = COLOR_WHITE - - var/tcol_1 = limb.owner.dna.features["wings_color_1"] - var/tcol_2 = limb.owner.dna.features["wings_color_2"] - var/tcol_3 = limb.owner.dna.features["wings_color_3"] - if(tcol_1 && tcol_2 && tcol_3) - //this is beyond ugly but it works - var/r1 = hex2num(copytext(tcol_1, 2, 4)) / 255.0 - var/g1 = hex2num(copytext(tcol_1, 4, 6)) / 255.0 - var/b1 = hex2num(copytext(tcol_1, 6, 8)) / 255.0 - var/r2 = hex2num(copytext(tcol_2, 2, 4)) / 255.0 - var/g2 = hex2num(copytext(tcol_2, 4, 6)) / 255.0 - var/b2 = hex2num(copytext(tcol_2, 6, 8)) / 255.0 - var/r3 = hex2num(copytext(tcol_3, 2, 4)) / 255.0 - var/g3 = hex2num(copytext(tcol_3, 4, 6)) / 255.0 - var/b3 = hex2num(copytext(tcol_3, 6, 8)) / 255.0 - color_intended = list(r1,g1,b1, r2,g2,b2, r3,g3,b3) - overlay.color = color_intended - return overlay diff --git a/modular_doppler/modular_customization/tri_color/wings.dm b/modular_doppler/modular_customization/tri_color/wings.dm index c30f75c2edbd4..5b622618db7bc 100644 --- a/modular_doppler/modular_customization/tri_color/wings.dm +++ b/modular_doppler/modular_customization/tri_color/wings.dm @@ -4,12 +4,6 @@ data[SUPPLEMENTAL_FEATURE_KEY] = /datum/preference/tri_color/wings_color::savefile_key return data -// Gotta add to the selector for moths too -/datum/preference/choiced/moth_wings/compile_constant_data() - var/list/data = ..() - data[SUPPLEMENTAL_FEATURE_KEY] = /datum/preference/tri_color/wings_color::savefile_key - return data - /// Wing colors! /datum/preference/tri_color/wings_color priority = PREFERENCE_PRIORITY_BODY_TYPE diff --git a/modular_doppler/modular_species/species_types/monkey/monkeys.dm b/modular_doppler/modular_species/species_types/monkey/monkeys.dm index 229240748a77c..ced89b5e92caa 100644 --- a/modular_doppler/modular_species/species_types/monkey/monkeys.dm +++ b/modular_doppler/modular_species/species_types/monkey/monkeys.dm @@ -2,7 +2,3 @@ var/list/features = ..() features["tail_monkey"] = /datum/sprite_accessory/tails/monkey/default::name return features - -/mob/living/carbon/human/species/monkey/punpun/Initialize(mapload) - . = ..() - add_quirk(/datum/quirk/excitable) diff --git a/modular_doppler/overwrites/huds/hud.dmi b/modular_doppler/overwrites/huds/hud.dmi index 4084f10c8acc8..740cda12a557f 100644 Binary files a/modular_doppler/overwrites/huds/hud.dmi and b/modular_doppler/overwrites/huds/hud.dmi differ diff --git a/modular_doppler/modular_quirks/paycheck_rations/code/quirk.dm b/modular_doppler/paycheck_rations/code/quirk.dm similarity index 100% rename from modular_doppler/modular_quirks/paycheck_rations/code/quirk.dm rename to modular_doppler/paycheck_rations/code/quirk.dm diff --git a/modular_doppler/modular_quirks/paycheck_rations/code/rationpacks.dm b/modular_doppler/paycheck_rations/code/rationpacks.dm similarity index 98% rename from modular_doppler/modular_quirks/paycheck_rations/code/rationpacks.dm rename to modular_doppler/paycheck_rations/code/rationpacks.dm index e8cea85c98349..fba4e2dc1fd70 100644 --- a/modular_doppler/modular_quirks/paycheck_rations/code/rationpacks.dm +++ b/modular_doppler/paycheck_rations/code/rationpacks.dm @@ -1,7 +1,7 @@ /obj/item/storage/box/spaceman_ration name = "unlabeled ration container" desc = "You get the feeling you sholdn't have been sent this one?" - icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' icon_state = "plants" illustration = null /// How many storage slots this has, yes I'm being lazy diff --git a/modular_doppler/modular_quirks/paycheck_rations/code/reagents.dm b/modular_doppler/paycheck_rations/code/reagents.dm similarity index 88% rename from modular_doppler/modular_quirks/paycheck_rations/code/reagents.dm rename to modular_doppler/paycheck_rations/code/reagents.dm index 46a40b9a4e51e..56322d87e07b7 100644 --- a/modular_doppler/modular_quirks/paycheck_rations/code/reagents.dm +++ b/modular_doppler/paycheck_rations/code/reagents.dm @@ -1,25 +1,25 @@ /obj/item/reagent_containers/condiment/flour/small_ration name = "small flour sack" desc = "A maritime ration-sized portion of flour, containing just enough to make a single good loaf of bread to fuel the day." - icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' list_reagents = list(/datum/reagent/consumable/flour = 15) /obj/item/reagent_containers/condiment/rice/small_ration name = "small rice sack" desc = "A maritime ration-sized portion of rice, containing just enough to make the universe's saddest rice dish." - icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' list_reagents = list(/datum/reagent/consumable/rice = 10) /obj/item/reagent_containers/condiment/sugar/small_ration name = "small sugar sack" desc = "A maritime ration-sized portion of sugar, containing just enough to make the day just a tiny bit sweeter." - icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' list_reagents = list(/datum/reagent/consumable/sugar = 10) /obj/item/reagent_containers/condiment/small_ration_korta_flour name = "small korta flour sack" desc = "A maritime ration-sized portion of korta flour, containing just enough to make a single good loaf of bread to fuel the day." - icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' icon_state = "flour_korta" inhand_icon_state = "carton" lefthand_file = 'icons/mob/inhands/items/drinks_lefthand.dmi' @@ -30,13 +30,13 @@ /obj/item/reagent_containers/condiment/soymilk/small_ration name = "small soy milk" desc = "It's soy milk. White and nutritious goodness! This one is significantly smaller than normal cartons; just enough to make some rootdough with." - icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' list_reagents = list(/datum/reagent/consumable/soymilk = 15) /obj/item/reagent_containers/condiment/milk/small_ration name = "small milk" desc = "It's milk. White and nutritious goodness! This one is significantly smaller than normal cartons; just enough to make some cheese with." - icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi' + icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi' list_reagents = list(/datum/reagent/consumable/milk = 15) /obj/item/reagent_containers/cup/glass/bottle/small/tiny diff --git a/modular_doppler/modular_quirks/paycheck_rations/code/ticket_book.dm b/modular_doppler/paycheck_rations/code/ticket_book.dm similarity index 86% rename from modular_doppler/modular_quirks/paycheck_rations/code/ticket_book.dm rename to modular_doppler/paycheck_rations/code/ticket_book.dm index a8bec74e5b59d..fff8b99c5419e 100644 --- a/modular_doppler/modular_quirks/paycheck_rations/code/ticket_book.dm +++ b/modular_doppler/paycheck_rations/code/ticket_book.dm @@ -1,7 +1,7 @@ /obj/item/storage/ration_ticket_book name = "ration ticket book" desc = "A small booklet able to hold all your ration tickets. More will be available here as your paychecks come in." - icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/tickets.dmi' + icon = 'modular_doppler/paycheck_rations/icons/tickets.dmi' icon_state = "ticket_book" w_class = WEIGHT_CLASS_SMALL diff --git a/modular_doppler/modular_quirks/paycheck_rations/code/tickets.dm b/modular_doppler/paycheck_rations/code/tickets.dm similarity index 86% rename from modular_doppler/modular_quirks/paycheck_rations/code/tickets.dm rename to modular_doppler/paycheck_rations/code/tickets.dm index f088e6d043688..0bc59df2f2a1c 100644 --- a/modular_doppler/modular_quirks/paycheck_rations/code/tickets.dm +++ b/modular_doppler/paycheck_rations/code/tickets.dm @@ -1,7 +1,7 @@ /obj/item/paper/paperslip/ration_ticket name = "ration ticket - standard" desc = "A little slip of paper that'll slot right into any cargo console and put your alotted food ration on the next shuttle to the station." - icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/tickets.dmi' + icon = 'modular_doppler/paycheck_rations/icons/tickets.dmi' icon_state = "ticket_food" default_raw_text = "Redeem this ticket in the nearest supply console to receive benefits." color = COLOR_OFF_WHITE @@ -24,9 +24,9 @@ // List of meat options we get var/list/radial_meat_options = list( - "Standard Meats" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "meats"), - "Seafood Meats" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_fish"), - "Tizirian Meats" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_lizard"), + "Standard Meats" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "meats"), + "Seafood Meats" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_fish"), + "Tizirian Meats" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "meats_lizard"), ) var/meats_choice = show_radial_menu(user, object_we_attack, radial_meat_options, require_near = TRUE) @@ -47,10 +47,10 @@ // List of produce options we get var/list/radial_produce_options = list( - "Standard Produce" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "plants"), - "Alternative Produce" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_alt"), - "Mothic Produce" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_moth"), - "Tizirian Produce" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_lizard"), + "Standard Produce" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "plants"), + "Alternative Produce" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_alt"), + "Mothic Produce" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_moth"), + "Tizirian Produce" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "plants_lizard"), ) var/produce_choice = show_radial_menu(user, object_we_attack, radial_produce_options, require_near = TRUE) @@ -77,8 +77,8 @@ // List of flour options we get var/list/radial_flour_options = list( - "Standard Flour" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "flour"), - "Korta Flour" = image(icon = 'modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi', icon_state = "flour_korta"), + "Standard Flour" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "flour"), + "Korta Flour" = image(icon = 'modular_doppler/paycheck_rations/icons/food_containers.dmi', icon_state = "flour_korta"), ) var/flour_choice = show_radial_menu(user, object_we_attack, radial_flour_options, require_near = TRUE) diff --git a/modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi b/modular_doppler/paycheck_rations/icons/food_containers.dmi similarity index 100% rename from modular_doppler/modular_quirks/paycheck_rations/icons/food_containers.dmi rename to modular_doppler/paycheck_rations/icons/food_containers.dmi diff --git a/modular_doppler/modular_quirks/paycheck_rations/icons/tickets.dmi b/modular_doppler/paycheck_rations/icons/tickets.dmi similarity index 100% rename from modular_doppler/modular_quirks/paycheck_rations/icons/tickets.dmi rename to modular_doppler/paycheck_rations/icons/tickets.dmi diff --git a/sound/attributions.txt b/sound/attributions.txt index aa3cd0bf37fae..3a2468205d027 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -94,8 +94,6 @@ https://www.zapsplat.com/sound-effect-category/sleigh-bells/ tada_fanfare.ogg is adapted from plasterbrain's "Tada Fanfare A", which is public domain (CC 0): https://freesound.org/people/plasterbrain/sounds/397355/ -mountedgun.ogg and mountedgunend.ogg are a combination of the cannon, cqc grab, and syndicate revolver sounds. - glockenspiel_ping.ogg is adapted from FunWithSound's "Short Success Sound Glockenspiel Treasure Video Game", which is public domain (CC 0): https://freesound.org/people/FunWithSound/sounds/456965/ @@ -214,4 +212,4 @@ place glass object.wav by milpower -- https://freesound.org/s/353105/ -- License glass_reverse.ogg is adapted from a combination of: https://freesound.org/people/C_Rogers/sounds/203368/ -- glass-shattering-hit_01.ogg by C_Rogers on freesound.org (CC0) -https://freesound.org/people/Czarcazas/sounds/330800/ -- Audio reversal/fading of Shattering Glass (Small) by Czarcazas -- https://freesound.org/s/330800/ -- License: Attribution 3.0 +https://freesound.org/people/Czarcazas/sounds/330800/ -- Audio reversal/fading of Shattering Glass (Small) by Czarcazas -- https://freesound.org/s/330800/ -- License: Attribution 3.0 \ No newline at end of file diff --git a/strings/fishing_tips.txt b/strings/fishing_tips.txt index 6b25cc5e5391c..eda70bb425286 100644 --- a/strings/fishing_tips.txt +++ b/strings/fishing_tips.txt @@ -15,8 +15,6 @@ You may find worms by digging through sand, ash and snow. You can revive fish by using a Lazarus Injector on them. However, using Strange Reagent would be a smarter option here. You can feed fish outside of an aquarium by tapping them with a can of fish feed. More fishing rods and fish cases can be printed at the autolathe. -You can link the fish portal generator to other fishing spots with a multitool. The maximum amount of fishing spots that can be linked and whether or not the link works on different z-levels depends on the quality of the machinery components. -The actual name of the fishing portal generator is 'fish-porter 3000'. They're totally the same thing however. Seeking alternative ways to catch fish without bothering to do it yourself? Explosives can be thrown at fishing spots to get several (dead) fishes in a pinch. You can raise lobstrosities from chasm chrabs. However, lobstrosities can only be tamed with spare limbs or lavaloop fish while still young. Lavaloop fish make for dangerous yet somewhat effective throwing weapons against big fauna. @@ -24,7 +22,7 @@ The fishing portal generator has different modules, all of which can be unlocked A fish's traits influence how you can catch them. Carnivore fish will ignore dough balls, and herbivore fish ignore anything that's not from botany. Telescopic fishing rods can be bought from cargo. Once grown from chrabs and tamed, lobstrosities can be heeded to fish on fishing spots for you. -Aquariums can be upgraded to bioelectricity generators with a specific kit. From there, you can add electric-generating fish like the anxious zip zap to generate power for the station. +Aquariums can be upgraded to bioelectricity generators can a specific kit. From there, you can add electric-generating fish like the anxious zip zap to generate power. Getting better at fishing will net you some small additional advantages, such as receiving more information when examining a fish or a fishing spot. The size and weight of a fish can influence the amount of reagents and fillets you can harvest from them, their force as a weapon and how easy it is to store them in containers. While most fish make for shoddy weapons, a few, like the swordfish and the chainsawfish, can be quite powerful. In general, the bigger they are, the more forceful they get. @@ -35,15 +33,12 @@ Some species of fish can be bred into new species under the right conditions. Most fish don't survive outside water, so get them somewhere safe like an aquarium or a fish case, or even a toilet or a moisture trap! No matter how you look at it, most people won't care about fishing. Don't let that stop you. They're just jealous. To fish on ice you have to puncture the ice layer with a pick or shovel first. -Depending on the kinds of fish inside it and whether they're alive or dead, an aquarium can improve the beauty of the room or worsen it. +Depending on the kind of fish inside it and whether they're alive or dead, an aquarium can improve the beauty of the room or worsen it. Almost all fish can be ground in an All-in-one-Grinder. Don't think too hard about how you're fitting a giant fish into a blender. Nanotrasen technology is weird like that. The sludgefish from the toilets can be used as a steady supply of cheap fish and fillets due to its self-reproducing behaviour. However it's quite fragile. In a jiffy, you can scoop tadpoles from ponds with your bare hands, place them inside aquariums and quickly raise them into frogs. The legendary fishing hat isn't just cosmetic. Space carps (as well as young lobstrosities and frogs) do truly fear those who wear it. Have you ever heard a lobster or crab talk? Well, neither have I, but they say they're quite the fishy punsters. -You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) to research. -Fish is, of course, edible. Is it safe to eat raw? Well, if you've strong stomach, otherwise your best option is to cook it for a at least half a spessman minute if you don't want to catch nasty diseases. -After researching the Advanced Fishing Technology Node, you can print special fishing gloves that let you fish without having to carry around a fishing rod. There's one pair that even trains athletics on top of fishing.You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) for research. +You can get an experiscanner from science to perform fish scanning experiments, which can unlock more modules for the fishing portal, as well as fishing technology nodes (better equipment) for research. If you have enough credits, you can buy a set of fishing lures from cargo. Each lure allows you to catch different species of fish and won't get consumed, however they need to be spun at intervals to work. -Various clothing and handheld items, as well as chairs you sit on, can make fishing easier (or sometimes harder). A trained fisherman can tell what can help and what won't, so keep an eye out. -This may sound silly, but (live) squids and their ink sacs can be used as weapons to temporarily blind foes. \ No newline at end of file +This may sound silly, but squids and their ink sacs can be used as weapons to temporarily blind people. \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index 239e8323ae23e..e16c312f32ab3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -397,11 +397,8 @@ #include "code\__DEFINES\traits\macros.dm" #include "code\__DEFINES\traits\sources.dm" #include "code\__DEFINES\~doppler_defines\access.dm" -#include "code\__DEFINES\~doppler_defines\admin.dm" #include "code\__DEFINES\~doppler_defines\armor_defines.dm" #include "code\__DEFINES\~doppler_defines\atom_hud.dm" -#include "code\__DEFINES\~doppler_defines\automapper.dm" -#include "code\__DEFINES\~doppler_defines\banning.dm" #include "code\__DEFINES\~doppler_defines\cells.dm" #include "code\__DEFINES\~doppler_defines\colony_fabricator_misc.dm" #include "code\__DEFINES\~doppler_defines\declarations.dm" @@ -413,7 +410,6 @@ #include "code\__DEFINES\~doppler_defines\keybindings.dm" #include "code\__DEFINES\~doppler_defines\living.dm" #include "code\__DEFINES\~doppler_defines\loadout.dm" -#include "code\__DEFINES\~doppler_defines\logging.dm" #include "code\__DEFINES\~doppler_defines\manufacturer_strings.dm" #include "code\__DEFINES\~doppler_defines\mobfactions.dm" #include "code\__DEFINES\~doppler_defines\mobs.dm" @@ -423,12 +419,10 @@ #include "code\__DEFINES\~doppler_defines\reagent_forging_tools.dm" #include "code\__DEFINES\~doppler_defines\reskin_defines.dm" #include "code\__DEFINES\~doppler_defines\role_preferences.dm" -#include "code\__DEFINES\~doppler_defines\say.dm" #include "code\__DEFINES\~doppler_defines\signals.dm" #include "code\__DEFINES\~doppler_defines\sound.dm" #include "code\__DEFINES\~doppler_defines\span.dm" #include "code\__DEFINES\~doppler_defines\species.dm" -#include "code\__DEFINES\~doppler_defines\speech_channels.dm" #include "code\__DEFINES\~doppler_defines\strippable.dm" #include "code\__DEFINES\~doppler_defines\techweb_nodes.dm" #include "code\__DEFINES\~doppler_defines\traits.dm" @@ -547,10 +541,7 @@ #include "code\__HELPERS\paths\sssp.dm" #include "code\__HELPERS\sorts\helpers.dm" #include "code\__HELPERS\sorts\sort_instance.dm" -#include "code\__HELPERS\~doppler_helpers\chat.dm" #include "code\__HELPERS\~doppler_helpers\global_lists.dm" -#include "code\__HELPERS\~doppler_helpers\logging.dm" -#include "code\__HELPERS\~doppler_helpers\verbs.dm" #include "code\_globalvars\_regexes.dm" #include "code\_globalvars\admin.dm" #include "code\_globalvars\arcade.dm" @@ -597,7 +588,6 @@ #include "code\_globalvars\traits\_traits.dm" #include "code\_globalvars\traits\admin_tooling.dm" #include "code\_globalvars\~doppler_globalvars\bitfields.dm" -#include "code\_globalvars\~doppler_globalvars\configuration.dm" #include "code\_globalvars\~doppler_globalvars\objective.dm" #include "code\_globalvars\~doppler_globalvars\religion.dm" #include "code\_js\byjax.dm" @@ -1071,7 +1061,6 @@ #include "code\datums\components\_component.dm" #include "code\datums\components\acid.dm" #include "code\datums\components\action_item_overlay.dm" -#include "code\datums\components\adjust_fishing_difficulty.dm" #include "code\datums\components\admin_popup.dm" #include "code\datums\components\aggro_emote.dm" #include "code\datums\components\ai_has_target_timer.dm" @@ -1761,7 +1750,6 @@ #include "code\datums\proximity_monitor\fields\gravity.dm" #include "code\datums\proximity_monitor\fields\projectile_dampener.dm" #include "code\datums\proximity_monitor\fields\timestop.dm" -#include "code\datums\proximity_monitor\fields\void_storm.dm" #include "code\datums\quirks\_quirk.dm" #include "code\datums\quirks\_quirk_constant_data.dm" #include "code\datums\quirks\negative_quirks\addict.dm" @@ -2378,7 +2366,7 @@ #include "code\game\objects\items\charter.dm" #include "code\game\objects\items\choice_beacon.dm" #include "code\game\objects\items\chromosome.dm" -#include "code\game\objects\items\cigarettes.dm" +#include "code\game\objects\items\cigs_lighters.dm" #include "code\game\objects\items\climbingrope.dm" #include "code\game\objects\items\clown_items.dm" #include "code\game\objects\items\control_wand.dm" @@ -2418,7 +2406,6 @@ #include "code\game\objects\items\kitchen.dm" #include "code\game\objects\items\knives.dm" #include "code\game\objects\items\latexballoon.dm" -#include "code\game\objects\items\lighter.dm" #include "code\game\objects\items\machine_wand.dm" #include "code\game\objects\items\mail.dm" #include "code\game\objects\items\maintenance_loot.dm" @@ -2793,7 +2780,6 @@ #include "code\game\objects\structures\cannons\cannon.dm" #include "code\game\objects\structures\cannons\cannon_instructions.dm" #include "code\game\objects\structures\cannons\cannonballs.dm" -#include "code\game\objects\structures\cannons\mounted_guns\mounted_gun.dm" #include "code\game\objects\structures\construction_console\construction_actions.dm" #include "code\game\objects\structures\construction_console\construction_console.dm" #include "code\game\objects\structures\construction_console\construction_console_aux.dm" @@ -3264,16 +3250,13 @@ #include "code\modules\antagonists\heretic\magic\star_blast.dm" #include "code\modules\antagonists\heretic\magic\star_touch.dm" #include "code\modules\antagonists\heretic\magic\void_cold_cone.dm" -#include "code\modules\antagonists\heretic\magic\void_conduit.dm" #include "code\modules\antagonists\heretic\magic\void_phase.dm" -#include "code\modules\antagonists\heretic\magic\void_prison.dm" #include "code\modules\antagonists\heretic\magic\void_pull.dm" #include "code\modules\antagonists\heretic\magic\wave_of_desperation.dm" #include "code\modules\antagonists\heretic\status_effects\buffs.dm" #include "code\modules\antagonists\heretic\status_effects\debuffs.dm" #include "code\modules\antagonists\heretic\status_effects\ghoul.dm" #include "code\modules\antagonists\heretic\status_effects\mark_effects.dm" -#include "code\modules\antagonists\heretic\status_effects\void_chill.dm" #include "code\modules\antagonists\heretic\structures\carving_knife.dm" #include "code\modules\antagonists\heretic\structures\lock_final.dm" #include "code\modules\antagonists\heretic\structures\mawed_crucible.dm" @@ -3568,7 +3551,6 @@ #include "code\modules\atmospherics\machinery\portable\scrubber.dm" #include "code\modules\autowiki\autowiki.dm" #include "code\modules\autowiki\pages\base.dm" -#include "code\modules\autowiki\pages\fishing.dm" #include "code\modules\autowiki\pages\soup.dm" #include "code\modules\autowiki\pages\stockparts.dm" #include "code\modules\autowiki\pages\techweb.dm" @@ -4499,7 +4481,6 @@ #include "code\modules\jobs\job_types\station_trait\bridge_assistant.dm" #include "code\modules\jobs\job_types\station_trait\cargo_gorilla.dm" #include "code\modules\jobs\job_types\station_trait\human_ai.dm" -#include "code\modules\jobs\job_types\station_trait\pun_pun.dm" #include "code\modules\jobs\job_types\station_trait\veteran_advisor.dm" #include "code\modules\keybindings\bindings_atom.dm" #include "code\modules\keybindings\bindings_client.dm" @@ -5192,7 +5173,6 @@ #include "code\modules\mob\living\carbon\human\death.dm" #include "code\modules\mob\living\carbon\human\dummy.dm" #include "code\modules\mob\living\carbon\human\emote.dm" -#include "code\modules\mob\living\carbon\human\examine.dm" #include "code\modules\mob\living\carbon\human\human.dm" #include "code\modules\mob\living\carbon\human\human_context.dm" #include "code\modules\mob\living\carbon\human\human_defense.dm" @@ -5255,7 +5235,6 @@ #include "code\modules\mob\living\silicon\ai\multicam.dm" #include "code\modules\mob\living\silicon\ai\robot_control.dm" #include "code\modules\mob\living\silicon\ai\vox_sounds.dm" -#include "code\modules\mob\living\silicon\ai\ai_actions\remote_power.dm" #include "code\modules\mob\living\silicon\ai\freelook\cameranet.dm" #include "code\modules\mob\living\silicon\ai\freelook\chunk.dm" #include "code\modules\mob\living\silicon\ai\freelook\eye.dm" @@ -6451,13 +6430,8 @@ #include "modular_doppler\accessable_storage\accessable_storage.dm" #include "modular_doppler\accessable_storage\item.dm" #include "modular_doppler\accessable_storage\strippable.dm" -#include "modular_doppler\administration\code\preferences.dm" #include "modular_doppler\administration\code\whitelisting.dm" #include "modular_doppler\advanced_reskin\code\advanced_reskin.dm" -#include "modular_doppler\automapper\code\area_spawn_entries.dm" -#include "modular_doppler\automapper\code\area_spawn_subsystem.dm" -#include "modular_doppler\automapper\code\automap_template.dm" -#include "modular_doppler\automapper\code\automapper_subsystem.dm" #include "modular_doppler\cell_component\code\cell_component.dm" #include "modular_doppler\colony_fabricator\code\cargo_packs.dm" #include "modular_doppler\colony_fabricator\code\colony_fabricator.dm" @@ -6477,11 +6451,6 @@ #include "modular_doppler\colony_fabricator\code\construction\manual_door.dm" #include "modular_doppler\colony_fabricator\code\construction\turfs.dm" #include "modular_doppler\colony_fabricator\code\construction\windows.dm" -#include "modular_doppler\colony_fabricator\code\design_datums\appliances.dm" -#include "modular_doppler\colony_fabricator\code\design_datums\construction.dm" -#include "modular_doppler\colony_fabricator\code\design_datums\equipment.dm" -#include "modular_doppler\colony_fabricator\code\design_datums\flatpack_machines.dm" -#include "modular_doppler\colony_fabricator\code\design_datums\tools.dm" #include "modular_doppler\colony_fabricator\code\design_datums\fabricator_flag_additions\computer_board.dm" #include "modular_doppler\colony_fabricator\code\design_datums\fabricator_flag_additions\construction.dm" #include "modular_doppler\colony_fabricator\code\design_datums\fabricator_flag_additions\equipment.dm" @@ -6511,7 +6480,6 @@ #include "modular_doppler\cryosleep\code\jobs.dm" #include "modular_doppler\cryosleep\code\mind.dm" #include "modular_doppler\cryosleep\code\mood.dm" -#include "modular_doppler\cryosleep\code\objective.dm" #include "modular_doppler\deforest_medical_items\code\cargo_packs.dm" #include "modular_doppler\deforest_medical_items\code\healing_stack_items.dm" #include "modular_doppler\deforest_medical_items\code\illegal_injectors.dm" @@ -6526,7 +6494,6 @@ #include "modular_doppler\deforest_medical_items\code\medstation_designs\blood.dm" #include "modular_doppler\deforest_medical_items\code\medstation_designs\medical.dm" #include "modular_doppler\emotes\code\emotes.dm" -#include "modular_doppler\emotes\code\hologram.dm" #include "modular_doppler\emotes\code\added_emotes\animal_sounds.dm" #include "modular_doppler\emotes\code\added_emotes\human_things.dm" #include "modular_doppler\emotes\code\added_emotes\robot_sounds.dm" @@ -6569,15 +6536,11 @@ #include "modular_doppler\hearthkin\primitive_production\code\farming.dm" #include "modular_doppler\hearthkin\primitive_production\code\glassblowing.dm" #include "modular_doppler\hearthkin\primitive_production\code\misc.dm" -#include "modular_doppler\hearthkin\primitive_production\code\primitive_surgery.dm" -#include "modular_doppler\hearthkin\primitive_production\code\primitive_tools.dm" #include "modular_doppler\hearthkin\primitive_production\code\production_skill.dm" #include "modular_doppler\hearthkin\primitive_production\code\wormfarm.dm" -#include "modular_doppler\hearthkin\primitive_structures\code\calling_horn.dm" #include "modular_doppler\hearthkin\primitive_structures\code\fencing.dm" #include "modular_doppler\hearthkin\primitive_structures\code\fuelwell.dm" #include "modular_doppler\hearthkin\primitive_structures\code\furniture.dm" -#include "modular_doppler\hearthkin\primitive_structures\code\hearthkin_rune_stone.dm" #include "modular_doppler\hearthkin\primitive_structures\code\railroad.dm" #include "modular_doppler\hearthkin\primitive_structures\code\storage_structures.dm" #include "modular_doppler\hearthkin\primitive_structures\code\totally_thatch_roof.dm" @@ -6606,9 +6569,6 @@ #include "modular_doppler\kahraman_equipment\code\clothing\clothing.dm" #include "modular_doppler\kahraman_equipment\code\clothing\mod.dm" #include "modular_doppler\kahraman_equipment\code\clothing\storage.dm" -#include "modular_doppler\kahraman_equipment\code\organic_printer_designs\clothing.dm" -#include "modular_doppler\kahraman_equipment\code\organic_printer_designs\equipment.dm" -#include "modular_doppler\kahraman_equipment\code\organic_printer_designs\resources.dm" #include "modular_doppler\languages\language_datums.dm" #include "modular_doppler\loadout_categories\loadout_checkers.dm" #include "modular_doppler\loadout_categories\categories\belts.dm" @@ -6633,7 +6593,6 @@ #include "modular_doppler\modular_antagonists\sapper_gang\code\paper_premade.dm" #include "modular_doppler\modular_antagonists\sapper_gang\code\sapperpad.dm" #include "modular_doppler\modular_cosmetics\code\jacket_pockets.dm" -#include "modular_doppler\modular_cosmetics\code\towels.dm" #include "modular_doppler\modular_cosmetics\code\uniform_overrides.dm" #include "modular_doppler\modular_cosmetics\code\face\basemasks.dm" #include "modular_doppler\modular_cosmetics\code\hands\rings.dm" @@ -6726,7 +6685,6 @@ #include "modular_doppler\modular_customization\preferences\snout.dm" #include "modular_doppler\modular_customization\preferences\tail.dm" #include "modular_doppler\modular_customization\preferences\wings.dm" -#include "modular_doppler\modular_customization\tri_color\antennae.dm" #include "modular_doppler\modular_customization\tri_color\body_marking_lizard.dm" #include "modular_doppler\modular_customization\tri_color\body_marking_moth.dm" #include "modular_doppler\modular_customization\tri_color\cap.dm" @@ -6745,11 +6703,7 @@ #include "modular_doppler\modular_food_drinks_and_chems\food_and_drinks\drink_reagents.dm" #include "modular_doppler\modular_food_drinks_and_chems\food_and_drinks\drinks.dm" #include "modular_doppler\modular_food_drinks_and_chems\food_and_drinks\drinks_recipes.dm" -#include "modular_doppler\modular_hydroponics\code\honeysuckle.dm" -#include "modular_doppler\modular_hydroponics\code\tea_coffee.dm" #include "modular_doppler\modular_items\invisible_gear.dm" -#include "modular_doppler\modular_mapping\areas\ruins.dm" -#include "modular_doppler\modular_mapping\ruins\icemoon.dm" #include "modular_doppler\modular_medical\code\carbon_update_icons.dm" #include "modular_doppler\modular_medical\medical_designs\medical_designs.dm" #include "modular_doppler\modular_medical\reagents\medicine.dm" @@ -6760,12 +6714,6 @@ #include "modular_doppler\modular_medical\wounds\muscle.dm" #include "modular_doppler\modular_medical\wounds\wound_effects.dm" #include "modular_doppler\modular_mob_spawn\code\mob_spawn.dm" -#include "modular_doppler\modular_quirks\excitable\quirk.dm" -#include "modular_doppler\modular_quirks\paycheck_rations\code\quirk.dm" -#include "modular_doppler\modular_quirks\paycheck_rations\code\rationpacks.dm" -#include "modular_doppler\modular_quirks\paycheck_rations\code\reagents.dm" -#include "modular_doppler\modular_quirks\paycheck_rations\code\ticket_book.dm" -#include "modular_doppler\modular_quirks\paycheck_rations\code\tickets.dm" #include "modular_doppler\modular_sounds\code\sounds.dm" #include "modular_doppler\modular_species\code\bloodsplatter.dm" #include "modular_doppler\modular_species\overwrites\code\species.dm" @@ -6795,10 +6743,11 @@ #include "modular_doppler\modular_weapons\manufacturer_examine\code\gun_company_additions.dm" #include "modular_doppler\modular_weapons\manufacturer_examine\code\manufacturer_element.dm" #include "modular_doppler\obj_flags_doppler\code\objs.dm" -#include "modular_doppler\objects_and_structures\code\icemoon_tiles.dm" -#include "modular_doppler\objects_and_structures\code\sauna_oven.dm" -#include "modular_doppler\objects_and_structures\code\towel_bins.dm" -#include "modular_doppler\objects_and_structures\code\watercloset.dm" +#include "modular_doppler\paycheck_rations\code\quirk.dm" +#include "modular_doppler\paycheck_rations\code\rationpacks.dm" +#include "modular_doppler\paycheck_rations\code\reagents.dm" +#include "modular_doppler\paycheck_rations\code\ticket_book.dm" +#include "modular_doppler\paycheck_rations\code\tickets.dm" #include "modular_doppler\pixel_shift\living.dm" #include "modular_doppler\pixel_shift\living_movement.dm" #include "modular_doppler\pixel_shift\code\pixel_shift_component.dm" @@ -6829,14 +6778,6 @@ #include "modular_doppler\vending_machines\code\vendor_food.dm" #include "modular_doppler\vending_machines\code\vendor_snacks.dm" #include "modular_doppler\vending_machines\code\vendors.dm" -#include "modular_doppler\verbs\code\communication.dm" -#include "modular_doppler\verbs\code\do_checks.dm" -#include "modular_doppler\verbs\code\do_verbs.dm" -#include "modular_doppler\verbs\code\log_category_game.dm" -#include "modular_doppler\verbs\code\looc.dm" -#include "modular_doppler\verbs\code\preferences.dm" -#include "modular_doppler\verbs\code\say.dm" -#include "modular_doppler\verbs\code\subtle.dm" #include "modular_doppler\wargaming\code\game_kit.dm" #include "modular_doppler\wargaming\code\holograms.dm" #include "modular_doppler\wargaming\code\projectors.dm" diff --git a/tgui/packages/tgui-panel/chat/constants.ts b/tgui/packages/tgui-panel/chat/constants.ts index 56378b8bc54b5..57ad525a9a9aa 100644 --- a/tgui/packages/tgui-panel/chat/constants.ts +++ b/tgui/packages/tgui-panel/chat/constants.ts @@ -53,7 +53,7 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_LOCALCHAT, name: 'Local', description: 'In-character local messages (say, emote, etc)', - selector: '.say, .emote, .looc', // DOPPLER EDIT ADDITION - LOOC + selector: '.say, .emote', }, { type: MESSAGE_TYPE_RADIO, @@ -86,7 +86,7 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_OOC, name: 'OOC', description: 'The bluewall of global OOC messages', - selector: '.ooc, .adminooc, .adminobserverooc, .oocplain, .looc, .rlooc', // DOPPLER EDIT ADDITION - LOOC AND RLOOC + selector: '.ooc, .adminooc, .adminobserverooc, .oocplain', }, { type: MESSAGE_TYPE_ADMINPM, diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index 78be30f5d4c9f..25f4eabd45d86 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -1012,7 +1012,6 @@ em { width: 3em; // a css guru can probably dehardcode this later height: auto; margin-right: 12px; - margin-top: 6px; } .img_by_text_container .img_text { @@ -1189,40 +1188,3 @@ $border-width-px: $border-width * 1px; background-color: darken(map.get($alert-stripe-colors, $color-name), 5); } } - -/* DOPPLER EDIT ADDITION START - DARK MODE CLASSES */ - -.looc { - color: #d8b555; -} - -.rlooc { - color: #b09448; -} - -.pink { - color: #ff00ff; - font-weight: bold; -} - -.brown { - color: #3d2009; - font-weight: bold; -} - -.cyan { - color: #0ea1e6; - font-weight: bold; -} - -.orange { - color: #b8761a; - font-weight: bold; -} - -.yellow { - color: #c7b72c; - font-weight: bold; -} - -// DOPPLER EDIT ADDITION END diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index 51ff6ac35b03f..b9caf24ddd81f 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -1030,7 +1030,6 @@ h2.alert { width: 2.5em; // a css guru can probably dehardcode this later height: auto; margin-right: 12px; - margin-top: 6px; } .img_by_text_container .img_text { @@ -1213,41 +1212,3 @@ $border-width-px: $border-width * 1px; ); } } - -/* DOPPLER EDIT ADDITION START - LIGHT MODE CLASSES */ - -.looc { - color: #6699cc; - font-weight: bold; -} - -.rlooc { - color: #507294; - font-weight: bold; -} - -.pink { - color: #ff00ff; - font-weight: bold; -} - -.brown { - color: #3d2009; - font-weight: bold; -} - -.cyan { - color: #0ea1e6; - font-weight: bold; -} - -.orange { - color: #b8761a; - font-weight: bold; -} - -.yellow { - color: #c7b72c; - font-weight: bold; -} -// DOPPLER EDIT ADDITION END diff --git a/tgui/packages/tgui-say/ChannelIterator.test.ts b/tgui/packages/tgui-say/ChannelIterator.test.ts index 93891ce5fc57a..15e9812e702ec 100644 --- a/tgui/packages/tgui-say/ChannelIterator.test.ts +++ b/tgui/packages/tgui-say/ChannelIterator.test.ts @@ -11,11 +11,6 @@ describe('ChannelIterator', () => { expect(channelIterator.current()).toBe('Say'); expect(channelIterator.next()).toBe('Radio'); expect(channelIterator.next()).toBe('Me'); - // DOPPLER EDIT ADDITION START - expect(channelIterator.next()).toBe('Whis'); - expect(channelIterator.next()).toBe('LOOC'); - expect(channelIterator.next()).toBe('Do'); - // DOPPLER EDIT ADDITION END expect(channelIterator.next()).toBe('OOC'); expect(channelIterator.next()).toBe('Say'); // Admin is blacklisted so it should be skipped }); diff --git a/tgui/packages/tgui-say/ChannelIterator.ts b/tgui/packages/tgui-say/ChannelIterator.ts index b30c36bacd8d9..136806927e95e 100644 --- a/tgui/packages/tgui-say/ChannelIterator.ts +++ b/tgui/packages/tgui-say/ChannelIterator.ts @@ -1,14 +1,4 @@ -export type Channel = - | 'Say' - | 'Radio' - | 'Me' - // DOPPLER EDIT ADDITION START - | 'Whis' - | 'LOOC' - | 'Do' - // DOPPLER EDIT ADDITION END - | 'OOC' - | 'Admin'; +export type Channel = 'Say' | 'Radio' | 'Me' | 'OOC' | 'Admin'; /** * ### ChannelIterator @@ -18,18 +8,7 @@ export type Channel = */ export class ChannelIterator { private index: number = 0; - private readonly channels: Channel[] = [ - 'Say', - 'Radio', - 'Me', - // DOPPLER EDIT ADDITION - 'Whis', - 'LOOC', - 'Do', - // DOPPLER EDIT ADDITION - 'OOC', - 'Admin', - ]; + private readonly channels: Channel[] = ['Say', 'Radio', 'Me', 'OOC', 'Admin']; private readonly blacklist: Channel[] = ['Admin']; private readonly quiet: Channel[] = ['OOC', 'Admin']; diff --git a/tgui/packages/tgui-say/styles/colors.scss b/tgui/packages/tgui-say/styles/colors.scss index aa53224b732ec..a6b492247187b 100644 --- a/tgui/packages/tgui-say/styles/colors.scss +++ b/tgui/packages/tgui-say/styles/colors.scss @@ -26,11 +26,6 @@ $_channel_map: ( 'Supp': #b88646, 'Svc': #6ca729, 'Synd': #8f4a4b, - // NOVA EDIT ADDITION START - 'Whis': #7c7fd9, - 'LOOC': #ffceb6, - 'Do': #59da7e, - // NOVA EDIT ADDITION END ); $channel_keys: map.keys($_channel_map) !default; diff --git a/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx b/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx index 725efb056e266..dfb2bd5bb2c89 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoBlob.tsx @@ -49,7 +49,7 @@ const Overview = (props) => { You haven't revealed your true form yet!
-
- If you are the blob infection, you can place the core where you are - standing by pressing the pop button on the top left corner of the - screen. + Place Blob Core button in the bottom right corner of the screen.
- Middle Mouse Click = Rally Spores
- Ctrl Click = Create Shield Blob
- Alt Click = Remove Blob
+ Click = Expand Blob | Middle Mouse Click = Rally Spores | Ctrl Click = + Create Shield Blob | Alt Click = Remove Blob