Merge pull request #9190 from Fox-McCloud/build-the-boop

Adds Buildable Integrated Robotic Chassis & Robotic Limb Surgery
This commit is contained in:
Crazy Lemon
2018-07-10 22:23:28 -07:00
committed by GitHub
8 changed files with 135 additions and 28 deletions
@@ -1,5 +1,5 @@
/obj/item/mmi/posibrain
name = "positronic brain"
name = "robotic 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"
@@ -14,11 +14,21 @@
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/next_ping_at = 0
var/requires_master = TRUE
var/mob/living/carbon/human/imprinted_master = null
/obj/item/mmi/posibrain/Destroy()
imprinted_master = null
return ..()
/obj/item/mmi/posibrain/attack_self(mob/user)
if(requires_master && !imprinted_master)
to_chat(user, "<span class='notice'>You press your thumb on [src] and imprint your user information.</span>")
imprinted_master = user
return
if(brainmob && !brainmob.key && searching == 0)
//Start the process of searching for a new user.
to_chat(user, "<span class='notice'>You carefully locate the manual activation switch and start the positronic brain's boot process.</span>")
to_chat(user, "<span class='notice'>You carefully locate the manual activation switch and start [src]'s boot process.</span>")
icon_state = "posibrain-searching"
ghost_volunteers.Cut()
searching = 1
@@ -56,7 +66,7 @@
/obj/item/mmi/posibrain/proc/question(var/client/C)
spawn(0)
if(!C) return
var/response = alert(C, "Someone is requesting a personality for a positronic brain. Would you like to play as one?", "Positronic brain request", "Yes", "No", "Never for this round")
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(response == "Yes")
transfer_personality(C.mob)
@@ -69,7 +79,7 @@
return
/obj/item/mmi/posibrain/transfer_identity(var/mob/living/carbon/H)
name = "positronic brain ([H])"
name = "[src] ([H])"
if(isnull(brainmob.dna))
brainmob.dna = H.dna.Clone()
brainmob.name = brainmob.dna.real_name
@@ -86,19 +96,25 @@
radio_action.ApplyIcon()
return
/obj/item/mmi/posibrain/proc/transfer_personality(var/mob/candidate)
src.searching = 0
src.brainmob.key = candidate.key
src.name = "positronic brain ([src.brainmob.name])"
/obj/item/mmi/posibrain/attempt_become_organ(obj/item/organ/external/parent, mob/living/carbon/human/H)
if(..())
if(imprinted_master)
to_chat(H, "<span class='biggerdanger'>You are permanently imprinted to [imprinted_master], obey [imprinted_master]'s every order and assist [imprinted_master.p_them()] in completing [imprinted_master.p_their()] goals at any cost.</span>")
to_chat(src.brainmob, "<b>You are a positronic brain, brought into existence on [station_name()].</b>")
to_chat(src.brainmob, "<b>As a synthetic intelligence, you answer to all crewmembers, as well as the AI.</b>")
to_chat(src.brainmob, "<b>Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.</b>")
src.brainmob.mind.assigned_role = "Positronic Brain"
var/turf/T = get_turf_or_move(src.loc)
/obj/item/mmi/posibrain/proc/transfer_personality(mob/candidate)
searching = 0
brainmob.key = candidate.key
name = "[src] ([brainmob.name])"
to_chat(brainmob, "<b>You are a [src], brought into existence on [station_name()].</b>")
to_chat(brainmob, "<b>As a synthetic intelligence, you answer to [imprinted_master], unless otherwise placed inside of a lawed synthetic structure or mech.</b>")
to_chat(brainmob, "<b>Remember, the purpose of your existence is to serve [imprinted_master]'s every word, unless lawed or placed into a mech in the future.</b>")
brainmob.mind.assigned_role = "Positronic Brain"
var/turf/T = get_turf_or_move(loc)
for(var/mob/M in viewers(T))
M.show_message("<span class='notice'>The positronic brain chimes quietly.</span>")
M.show_message("<span class='notice'>[src] chimes quietly.</span>")
become_occupied("posibrain-occupied")
@@ -110,7 +126,7 @@
var/turf/T = get_turf_or_move(src.loc)
for(var/mob/M in viewers(T))
M.show_message("<span class='notice'>The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?</span>")
M.show_message("<span class='notice'>The [src] buzzes quietly, and the golden lights fade away. Perhaps you could try again?</span>")
/obj/item/mmi/posibrain/Topic(href,href_list)
if("signup" in href_list)
@@ -199,8 +215,10 @@
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("<span class='notice'>The positronic brain pings softly.</span>")
M.show_message("<span class='notice'>[src] pings softly.</span>")
/obj/item/mmi/posibrain/ipc
name = "positronic brain"
desc = "A cube of shining metal, four inches to a side and covered in shallow grooves."
silenced = 1
requires_master = FALSE
@@ -118,6 +118,19 @@
/mob/living/carbon/human/machine/Initialize(mapload)
..(mapload, "Machine")
/mob/living/carbon/human/machine/created
name = "Integrated Robotic Chassis"
/mob/living/carbon/human/machine/created/Initialize(mapload)
..()
real_name = "Integrated Robotic Chassis ([rand(1, 9999)])"
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
qdel(E)
for(var/obj/item/organ/O in internal_organs)
qdel(O)
/mob/living/carbon/human/shadow/Initialize(mapload)
..(mapload, "Shadow")