From 5f31b0397205295e9450818010894aff9d21099d Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Fri, 13 Jul 2018 18:09:16 -0400 Subject: [PATCH] splitting --- code/game/machinery/computer/ai_core.dm | 2 +- code/modules/admin/admin_verbs.dm | 26 ++++ .../mob/living/carbon/brain/robotic_brain.dm | 133 ++++++++++-------- code/modules/mob/living/carbon/human/human.dm | 3 +- .../living/carbon/human/species/station.dm | 2 +- .../surgery/organs/subtypes/machine.dm | 24 ++-- 6 files changed, 117 insertions(+), 73 deletions(-) diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 1a32e8a94ee..67f1dba85f0 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -117,7 +117,7 @@ return laws = M.laws - if(istype(P, /obj/item/mmi) || istype(P, /obj/item/mmi/robotic_brain)) + if(istype(P, /obj/item/mmi)) if(!P:brainmob) to_chat(user, "Sticking an empty [P] into the frame would sort of defeat the purpose.") return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 44075d06548..fd860e6c448 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -823,6 +823,19 @@ var/list/admin_verbs_ticket = list( if(!check_rights(R_ADMIN)) return + if(!istype(H)) + if(istype(H, /mob/living/carbon/brain)) + var/mob/living/carbon/brain/B = H + if(istype(B.container, /obj/item/mmi/robotic_brain/positronic)) + var/obj/item/mmi/robotic_brain/positronic/C = B.container + var/obj/item/organ/internal/brain/mmi_holder/posibrain/P = C.loc + if(ishuman(P.owner)) + H = P.owner + else + return + else + return + if(holder) admin_log_and_message_admins("is altering the appearance of [H].") H.change_appearance(APPEARANCE_ALL, usr, usr, check_species_whitelist = 0) @@ -836,6 +849,19 @@ var/list/admin_verbs_ticket = list( if(!check_rights(R_ADMIN)) return + if(!istype(H)) + if(istype(H, /mob/living/carbon/brain)) + var/mob/living/carbon/brain/B = H + if(istype(B.container, /obj/item/mmi/robotic_brain/positronic)) + var/obj/item/mmi/robotic_brain/positronic/C = B.container + var/obj/item/organ/internal/brain/mmi_holder/posibrain/P = C.loc + if(istype(P.owner, /mob/living/carbon/human)) + H = P.owner + else + return + else + return + if(!H.client) to_chat(usr, "Only mobs with clients can alter their own appearance.") return diff --git a/code/modules/mob/living/carbon/brain/robotic_brain.dm b/code/modules/mob/living/carbon/brain/robotic_brain.dm index f46613527b2..ea83ab90206 100644 --- a/code/modules/mob/living/carbon/brain/robotic_brain.dm +++ b/code/modules/mob/living/carbon/brain/robotic_brain.dm @@ -1,21 +1,25 @@ /obj/item/mmi/robotic_brain name = "robotic brain" - desc = "An advanced circuit, capable of housing an advanced non-sentient synthetic intelligence." + desc = "An advanced circuit, capable of housing a non-sentient synthetic intelligence." icon = 'icons/obj/module.dmi' icon_state = "boris_blank" + var/blank_icon = "boris_blank" + var/searching_icon = "boris_recharging" + var/occupied_icon = "boris" w_class = WEIGHT_CLASS_NORMAL origin_tech = "biotech=3;programming=3;plasmatech=2" - var/searching = 0 + var/searching = FALSE var/askDelay = 10 * 60 * 1 //var/mob/living/carbon/brain/brainmob = null var/list/ghost_volunteers[0] req_access = list(access_robotics) mecha = null//This does not appear to be used outside of reference in mecha.dm. - var/silenced = 0 //if set to 1, they can't talk. + var/silenced = FALSE //if TRUE, they can't talk. var/next_ping_at = 0 var/requires_master = TRUE var/mob/living/carbon/human/imprinted_master = null + var/ejected_flavor_text = "circuit" /obj/item/mmi/robotic_brain/Destroy() imprinted_master = null @@ -26,12 +30,12 @@ to_chat(user, "You press your thumb on [src] and imprint your user information.") imprinted_master = user return - if(brainmob && !brainmob.key && searching == 0) + if(brainmob && !brainmob.key && !searching) //Start the process of searching for a new user. to_chat(user, "You carefully locate the manual activation switch and start [src]'s boot process.") - icon_state = "boris_recharging" + icon_state = searching_icon ghost_volunteers.Cut() - searching = 1 + searching = TRUE request_player() spawn(600) if(ghost_volunteers.len) @@ -52,33 +56,34 @@ if(check_observer(O)) to_chat(O, "\A [src] has been activated. (Teleport | Sign Up)") -/obj/item/mmi/robotic_brain/proc/check_observer(var/mob/dead/observer/O) +/obj/item/mmi/robotic_brain/proc/check_observer(mob/dead/observer/O) if(cannotPossess(O)) - return 0 + return FALSE if(jobban_isbanned(O, "Cyborg") || jobban_isbanned(O,"nonhumandept")) - return 0 + return FALSE if(!O.can_reenter_corpse) - return 0 + return FALSE if(O.client) - return 1 - return 0 + return TRUE + return FALSE -/obj/item/mmi/robotic_brain/proc/question(var/client/C) +/obj/item/mmi/robotic_brain/proc/question(client/C) spawn(0) - if(!C) return + if(!C) + return var/response = alert(C, "Someone is requesting a personality for a [src]. Would you like to play as one?", "[src] request", "Yes", "No", "Never for this round") - if(!C || brainmob.key || 0 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located. + if(!C || brainmob.key || !searching) + return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located. if(response == "Yes") transfer_personality(C.mob) else if(response == "Never for this round") C.prefs.be_special -= ROLE_POSIBRAIN // This should not ever happen, but let's be safe -/obj/item/mmi/robotic_brain/dropbrain(var/turf/dropspot) +/obj/item/mmi/robotic_brain/dropbrain(turf/dropspot) log_runtime(EXCEPTION("[src] at [loc] attempted to drop brain without a contained brain."), src) - return -/obj/item/mmi/robotic_brain/transfer_identity(var/mob/living/carbon/H) +/obj/item/mmi/robotic_brain/transfer_identity(mob/living/carbon/H) name = "[src] ([H])" if(isnull(brainmob.dna)) brainmob.dna = H.dna.Clone() @@ -90,11 +95,10 @@ brainmob.mind.assigned_role = "Positronic Brain" if(H.mind) H.mind.transfer_to(brainmob) - to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just a circuit.") - become_occupied("boris") + to_chat(brainmob, "You feel slightly disoriented. That's normal when you're just a [ejected_flavor_text].") + become_occupied(occupied_icon) if(radio) radio_action.ApplyIcon() - return /obj/item/mmi/robotic_brain/attempt_become_organ(obj/item/organ/external/parent, mob/living/carbon/human/H) if(..()) @@ -103,7 +107,7 @@ /obj/item/mmi/robotic_brain/proc/transfer_personality(mob/candidate) - searching = 0 + searching = FALSE brainmob.key = candidate.key name = "[src] ([brainmob.name])" @@ -112,29 +116,27 @@ to_chat(brainmob, "Remember, the purpose of your existence is to serve [imprinted_master]'s every word, unless lawed or placed into a mech in the future.") brainmob.mind.assigned_role = "Positronic Brain" - var/turf/T = get_turf_or_move(loc) - for(var/mob/M in viewers(T)) - M.show_message("[src] chimes quietly.") - become_occupied("boris") + visible_message("[src] chimes quietly.") + become_occupied(occupied_icon) /obj/item/mmi/robotic_brain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer. - if(src.brainmob && src.brainmob.key) return + if(brainmob && brainmob.key) + return - src.searching = 0 - icon_state = "boris_blank" + searching = FALSE + icon_state = blank_icon - var/turf/T = get_turf_or_move(src.loc) - for(var/mob/M in viewers(T)) - M.show_message("[src] buzzes quietly as the red light fades out. Perhaps you could try again?") + visible_message("[src] buzzes quietly as the light fades out. Perhaps you could try again?") -/obj/item/mmi/robotic_brain/Topic(href,href_list) +/obj/item/mmi/robotic_brain/Topic(href, href_list) if("signup" in href_list) var/mob/dead/observer/O = locate(href_list["signup"]) - if(!O) return + if(!O) + return volunteer(O) -/obj/item/mmi/robotic_brain/proc/volunteer(var/mob/dead/observer/O) +/obj/item/mmi/robotic_brain/proc/volunteer(mob/dead/observer/O) if(!searching) to_chat(O, "Not looking for a ghost, yet.") return @@ -171,40 +173,41 @@ if(brainmob && brainmob.key) switch(brainmob.stat) if(CONSCIOUS) - if(!brainmob.client) msg += "It appears to be in stand-by mode.\n" //afk - if(UNCONSCIOUS) msg += "It doesn't seem to be responsive.\n" - if(DEAD) msg += "It appears to be completely inactive.\n" + if(!brainmob.client) + msg += "It appears to be in stand-by mode.\n" //afk + if(UNCONSCIOUS) + msg += "It doesn't seem to be responsive.\n" + if(DEAD) + msg += "It appears to be completely inactive.\n" else msg += "It appears to be completely inactive.\n" msg += "*---------*" to_chat(user, msg.Join("")) /obj/item/mmi/robotic_brain/emp_act(severity) - if(!src.brainmob) + if(!brainmob) return - else - switch(severity) - if(1) - src.brainmob.emp_damage += rand(20,30) - if(2) - src.brainmob.emp_damage += rand(10,20) - if(3) - src.brainmob.emp_damage += rand(0,10) + switch(severity) + if(1) + brainmob.emp_damage += rand(20, 30) + if(2) + brainmob.emp_damage += rand(10, 20) + if(3) + brainmob.emp_damage += rand(0, 10) ..() /obj/item/mmi/robotic_brain/New() - src.brainmob = new(src) - src.brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]" - src.brainmob.real_name = src.brainmob.name - src.brainmob.loc = src - src.brainmob.container = src - src.brainmob.stat = 0 - src.brainmob.SetSilence(0) - dead_mob_list -= src.brainmob - + brainmob = new(src) + brainmob.name = "[pick(list("PBU", "HIU", "SINA", "ARMA", "OSI"))]-[rand(100, 999)]" + brainmob.real_name = brainmob.name + brainmob.forceMove(src) + brainmob.container = src + brainmob.stat = CONSCIOUS + brainmob.SetSilence(0) + dead_mob_list -= brainmob ..() -/obj/item/mmi/robotic_brain/attack_ghost(var/mob/dead/observer/O) +/obj/item/mmi/robotic_brain/attack_ghost(mob/dead/observer/O) if(searching) volunteer(O) return @@ -213,6 +216,16 @@ if(check_observer(O) && (world.time >= next_ping_at)) next_ping_at = world.time + (20 SECONDS) playsound(get_turf(src), 'sound/items/posiping.ogg', 80, 0) - var/turf/T = get_turf_or_move(src.loc) - for(var/mob/M in viewers(T)) - M.show_message("[src] pings softly.") \ No newline at end of file + visible_message("[src] pings softly.") + +/obj/item/mmi/robotic_brain/positronic + name = "positronic brain" + icon = 'icons/obj/assemblies.dmi' + icon_state = "posibrain" + blank_icon = "posibrain" + searching_icon = "posibrain-searching" + occupied_icon = "posibrain-occupied" + desc = "A cube of shining metal, four inches to a side and covered in shallow grooves." + silenced = TRUE + requires_master = FALSE + ejected_flavor_text = "metal cube" \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 06a287e1645..dbc788cd0bb 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -123,7 +123,8 @@ /mob/living/carbon/human/machine/created/Initialize(mapload) ..() - real_name = "Integrated Robotic Chassis ([rand(1, 9999)])" + rename_character(null, "Integrated Robotic Chassis ([rand(1, 9999)])") + update_dna() for(var/obj/item/organ/external/E in bodyparts) if(istype(E, /obj/item/organ/external/chest) || istype(E, /obj/item/organ/external/groin)) continue diff --git a/code/modules/mob/living/carbon/human/species/station.dm b/code/modules/mob/living/carbon/human/species/station.dm index f0f9b359252..6b692601226 100644 --- a/code/modules/mob/living/carbon/human/species/station.dm +++ b/code/modules/mob/living/carbon/human/species/station.dm @@ -958,7 +958,7 @@ butt_sprite = "machine" has_organ = list( - "brain" = /obj/item/organ/internal/brain/posibrain, + "brain" = /obj/item/organ/internal/brain/mmi_holder/posibrain, "cell" = /obj/item/organ/internal/cell, "optics" = /obj/item/organ/internal/eyes/optical_sensor, //Default darksight of 2. "charger" = /obj/item/organ/internal/cyberimp/arm/power_cord diff --git a/code/modules/surgery/organs/subtypes/machine.dm b/code/modules/surgery/organs/subtypes/machine.dm index f803d51cc04..589ade0e7de 100644 --- a/code/modules/surgery/organs/subtypes/machine.dm +++ b/code/modules/surgery/organs/subtypes/machine.dm @@ -136,13 +136,17 @@ . = ..() -/obj/item/organ/internal/brain/posibrain - name = "positronic brain" - desc = "A cube of shining metal, four inches to a side and covered in shallow grooves." - icon = 'icons/obj/assemblies.dmi' - icon_state = "posibrain-occupied" - dead_icon = "posibrain" - parent_organ = "chest" - status = ORGAN_ROBOT - species = "Machine" - requires_robotic_bodypart = TRUE // Can't stick this in someone's chest, unless their chest is robotic \ No newline at end of file +/obj/item/organ/internal/brain/mmi_holder/posibrain/New() + stored_mmi = new /obj/item/mmi/robotic_brain/positronic(src) + ..() + spawn(1) + if(!QDELETED(src)) + if(owner) + stored_mmi.name = "positronic brain ([owner.real_name])" + stored_mmi.brainmob.real_name = owner.real_name + stored_mmi.brainmob.name = stored_mmi.brainmob.real_name + stored_mmi.icon_state = "posibrain-occupied" + update_from_mmi() + else + stored_mmi.loc = get_turf(src) + qdel(src) \ No newline at end of file