Unifying MMI creation on robot subtypes.

This commit is contained in:
MistakeNot4892
2023-09-02 21:51:57 +10:00
parent b0f2f4921d
commit 1cafe9ee21
13 changed files with 43 additions and 38 deletions

View File

@@ -117,11 +117,10 @@
if(!user.unEquip(W)) if(!user.unEquip(W))
return return
var/mob/living/silicon/robot/O = new product(get_turf(loc)) var/mob/living/silicon/robot/O = new product(get_turf(loc), FALSE, W)
if(!O) if(!O)
return return
O.mmi = W
O.invisibility = 0 O.invisibility = 0
O.custom_name = created_name O.custom_name = created_name
O.updatename("Default") O.updatename("Default")

View File

@@ -91,7 +91,7 @@ var/global/list/mob_hat_cache = list()
hat_y_offset = -12 hat_y_offset = -12
can_pull_mobs = MOB_PULL_SAME can_pull_mobs = MOB_PULL_SAME
/mob/living/silicon/robot/drone/Initialize() /mob/living/silicon/robot/drone/Initialize(var/ml, var/unfinished = 0, var/supplied_mmi)
. = ..() . = ..()
verbs += /mob/living/proc/ventcrawl verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide verbs += /mob/living/proc/hide

View File

@@ -56,11 +56,9 @@
/spell/aoe_turf/conjure/swarmer/melee /spell/aoe_turf/conjure/swarmer/melee
) )
/mob/living/silicon/robot/drone/swarm/Initialize() /mob/living/silicon/robot/drone/swarm/Initialize(var/ml, var/unfinished = 0, var/supplied_mmi)
. = ..() . = ..()
add_language(LANGUAGE_SWARMBOT, 1) add_language(LANGUAGE_SWARMBOT, 1)
for(var/spell in spell_setup) for(var/spell in spell_setup)
src.add_spell(new spell, "nano_spell_ready", /obj/screen/movable/spell_master/swarm) src.add_spell(new spell, "nano_spell_ready", /obj/screen/movable/spell_master/swarm)
@@ -110,4 +108,3 @@
/spell/aoe_turf/conjure/forcewall/swarm, /spell/aoe_turf/conjure/forcewall/swarm,
/spell/aoe_turf/blink/swarm /spell/aoe_turf/blink/swarm
) )

View File

@@ -100,7 +100,13 @@
/mob/living/silicon/robot/proc/robot_checklaws /mob/living/silicon/robot/proc/robot_checklaws
) )
/mob/living/silicon/robot/Initialize(var/ml, var/unfinished = 0) /mob/living/silicon/robot/Initialize(var/ml, var/unfinished = 0, var/obj/item/mmi/supplied_mmi)
if(istype(supplied_mmi))
supplied_mmi.forceMove(src)
mmi = supplied_mmi
post_mmi_setup()
spark_system = new /datum/effect_system/spark_spread() spark_system = new /datum/effect_system/spark_spread()
spark_system.set_up(5, 0, src) spark_system.set_up(5, 0, src)
spark_system.attach(src) spark_system.attach(src)

View File

@@ -8,14 +8,14 @@ GLOBAL_LIST_EMPTY(available_ai_shells)
var/mob/living/silicon/ai/mainframe = null var/mob/living/silicon/ai/mainframe = null
// Premade AI shells, for roundstart landmark spawn. // Premade AI shells, for roundstart landmark spawn.
/mob/living/silicon/robot/ai_shell/Initialize() /mob/living/silicon/robot/ai_shell/Initialize(var/ml, var/unfinished = 0, var/supplied_mmi)
mmi = new /obj/item/mmi/inert/ai_remote(src) if(!supplied_mmi)
post_mmi_setup() supplied_mmi = new /obj/item/mmi/inert/ai_remote(src)
return ..() return ..()
/mob/living/silicon/robot/flying/ai_shell/Initialize() /mob/living/silicon/robot/flying/ai_shell/Initialize(var/ml, var/unfinished = 0, var/supplied_mmi)
mmi = new /obj/item/mmi/inert/ai_remote(src) if(!supplied_mmi)
post_mmi_setup() supplied_mmi = new /obj/item/mmi/inert/ai_remote(src)
return ..() return ..()
// Call after inserting or instantiating an MMI. // Call after inserting or instantiating an MMI.
@@ -25,7 +25,6 @@ GLOBAL_LIST_EMPTY(available_ai_shells)
playsound(src, 'sound/machines/twobeep.ogg', 50, 0) playsound(src, 'sound/machines/twobeep.ogg', 50, 0)
else else
playsound(src, 'sound/voice/liveagain.ogg', 75, 1) playsound(src, 'sound/voice/liveagain.ogg', 75, 1)
return
/mob/living/silicon/robot/proc/make_shell() /mob/living/silicon/robot/proc/make_shell()
shell = TRUE shell = TRUE

View File

@@ -9,9 +9,13 @@
icon_selected = FALSE icon_selected = FALSE
can_be_antagged = FALSE can_be_antagged = FALSE
/mob/living/silicon/robot/gravekeeper/Initialize(ml, unfinished, supplied_mmi)
if(!supplied_mmi)
supplied_mmi = new /obj/item/mmi/digital/robot(src)
. = ..()
/mob/living/silicon/robot/gravekeeper/init() /mob/living/silicon/robot/gravekeeper/init()
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src) aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
mmi = new /obj/item/mmi/digital/robot(src)
module = new /obj/item/robot_module/robot/gravekeeper(src) module = new /obj/item/robot_module/robot/gravekeeper(src)
cut_overlays() cut_overlays()
init_id() init_id()

View File

@@ -8,10 +8,13 @@
idcard_type = /obj/item/card/id idcard_type = /obj/item/card/id
icon_selected = FALSE icon_selected = FALSE
/mob/living/silicon/robot/flying/lost/Initialize(ml, unfinished, supplied_mmi)
if(!supplied_mmi)
supplied_mmi = new /obj/item/mmi/digital/robot(src)
. = ..()
/mob/living/silicon/robot/flying/lost/init() /mob/living/silicon/robot/flying/lost/init()
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src) aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
mmi = new /obj/item/mmi/digital/robot(src)
module = new /obj/item/robot_module/robot/lost(src) module = new /obj/item/robot_module/robot/lost(src)
cut_overlays() cut_overlays()
init_id() init_id()

View File

@@ -8,10 +8,13 @@
idcard_type = /obj/item/card/id/syndicate idcard_type = /obj/item/card/id/syndicate
icon_selected = FALSE icon_selected = FALSE
/mob/living/silicon/robot/syndicate/Initialize(ml, unfinished, supplied_mmi)
if(!supplied_mmi)
supplied_mmi = new /obj/item/mmi/digital/robot(src)
. = ..()
/mob/living/silicon/robot/syndicate/init() /mob/living/silicon/robot/syndicate/init()
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src) aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
mmi = new /obj/item/mmi/digital/robot(src)
cut_overlays() cut_overlays()
init_id() init_id()

View File

@@ -39,12 +39,12 @@
if(mind) if(mind)
mind.name = real_name mind.name = real_name
/mob/living/silicon/robot/platform/Initialize(var/mapload) /mob/living/silicon/robot/platform/Initialize(var/ml, var/unfinished = 0, var/supplied_mmi)
. = ..()
if(mapped) if(mapped)
if(!mmi) if(!supplied_mmi)
mmi = new /obj/item/mmi/digital/robot(src) supplied_mmi = new /obj/item/mmi/digital/robot(src)
SetName("inactive [initial(name)]") SetName("inactive [initial(name)]")
. = ..()
updateicon() updateicon()
// Copypasting from root proc to avoid calling ..() and accidentally creating duplicate armour etc. // Copypasting from root proc to avoid calling ..() and accidentally creating duplicate armour etc.

View File

@@ -6,7 +6,7 @@
lawchannel = "State" lawchannel = "State"
idcard_type = /obj/item/card/id/syndicate idcard_type = /obj/item/card/id/syndicate
/mob/living/silicon/robot/syndicate/Initialize() /mob/living/silicon/robot/syndicate/Initialize(var/ml, var/unfinished = 0, var/supplied_mmi)
if(!cell) if(!cell)
cell = new /obj/item/cell(src) cell = new /obj/item/cell(src)
cell.maxcharge = 25000 cell.maxcharge = 25000

View File

@@ -278,7 +278,7 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
return return
M.shakecamera = 1 M.shakecamera = 1
spawn(1) spawn(1)
if(!M.client) if(QDELETED(M) || !M.client)
return return
var/atom/oldeye=M.client.eye var/atom/oldeye=M.client.eye

View File

@@ -149,14 +149,13 @@
for(var/t in organs) for(var/t in organs)
qdel(t) qdel(t)
var/mob/living/silicon/robot/O = new supplied_robot_type( loc ) var/mmi_type = SSrobots.get_mmi_type_by_title(mind?.role_alt_title ? mind.role_alt_title : mind?.assigned_role)
var/mob/living/silicon/robot/O = new supplied_robot_type(loc, FALSE, (mmi_type ? new mmi_type : null))
// cyborgs produced by Robotize get an automatic power cell // cyborgs produced by Robotize get an automatic power cell
O.cell = new(O) O.cell = new(O)
O.cell.maxcharge = 7500 O.cell.maxcharge = 7500
O.cell.charge = 7500 O.cell.charge = 7500
O.gender = gender O.gender = gender
O.invisibility = 0 O.invisibility = 0
@@ -171,12 +170,8 @@
O.loc = loc O.loc = loc
O.job = "Cyborg" O.job = "Cyborg"
if(istype(O.mmi))
if(O.mind.assigned_role == "Cyborg") O.mmi.transfer_identity(src)
var/mmi_type = SSrobots.get_mmi_type_by_title(O.mind.role_alt_title ? O.mind.role_alt_title : O.mind.assigned_role)
if(mmi_type)
O.mmi = new mmi_type(O)
O.mmi.transfer_identity(src)
if(O.client && O.client.prefs) if(O.client && O.client.prefs)
var/datum/preferences/B = O.client.prefs var/datum/preferences/B = O.client.prefs

View File

@@ -46,12 +46,11 @@
var/randomize = pick(options) var/randomize = pick(options)
switch(randomize) switch(randomize)
if("robot") if("robot")
new_mob = new /mob/living/silicon/robot(M.loc) new_mob = new /mob/living/silicon/robot(M.loc, FALSE, new /obj/item/mmi)
new_mob.gender = M.gender new_mob.gender = M.gender
new_mob.invisibility = 0 new_mob.invisibility = 0
new_mob.job = "Cyborg" new_mob.job = "Cyborg"
var/mob/living/silicon/robot/Robot = new_mob var/mob/living/silicon/robot/Robot = new_mob
Robot.mmi = new /obj/item/mmi(new_mob)
Robot.mmi.transfer_identity(M) //Does not transfer key/client. Robot.mmi.transfer_identity(M) //Does not transfer key/client.
if("slime") if("slime")
new_mob = new /mob/living/simple_mob/slime/xenobio(M.loc) new_mob = new /mob/living/simple_mob/slime/xenobio(M.loc)
@@ -98,4 +97,4 @@
return return
else else
to_chat(M, "<span class='warning'>Your form morphs into that of \a [lowertext(randomize)].</span>") to_chat(M, "<span class='warning'>Your form morphs into that of \a [lowertext(randomize)].</span>")
return return