diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm index c9d5a94a88c..b59ce7cf246 100644 --- a/code/game/jobs/job/silicon.dm +++ b/code/game/jobs/job/silicon.dm @@ -57,6 +57,7 @@ assignable = FALSE mob_type = JOB_SILICON_ROBOT outfit_type = /decl/hierarchy/outfit/job/silicon/cyborg + substitute_announce_title = "Stationbound Synthetic" job_description = "A Cyborg is a mobile station synthetic, piloted by a cybernetically preserved brain. It is considered a person, but is still required \ to follow its Laws." alt_titles = list( diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 0f4777401d0..a9065fb7455 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -267,6 +267,9 @@ var/is_crisis_mode = crisis_override || (security_level == SEC_LEVEL_RED) var/list/robot_modules = SSrobots.get_available_modules(module_category, is_crisis_mode, override) + if(!length(robot_modules)) + to_chat(src, SPAN_WARNING("For some reason, no modules are available to you. Please report this on the issue tracker!")) + return if(!override) if(is_crisis_mode) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/_module.dm b/code/modules/mob/living/silicon/robot/robot_modules/_module.dm index c903bdb15be..7a7bb22d274 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/_module.dm @@ -129,15 +129,16 @@ /obj/item/robot_module/proc/build_synths() SHOULD_CALL_PARENT(TRUE) for(var/thing in synths) - if(ispath(thing, /datum/matter_synth)) - if(!isnull(synths[thing])) - synths += new thing(synths[thing]) - else - synths += new thing - else if(istype(thing, /datum/matter_synth)) - synths |= thing - else + if(istype(thing, /datum/matter_synth)) + continue + if(!ispath(thing, /datum/matter_synth)) log_debug("Invalid var type in [type] synth creation - [thing]") + continue + if(isnull(synths[thing])) + synths += new thing + else + synths += new thing(synths[thing]) + synths -= thing /obj/item/robot_module/proc/finalize_synths() SHOULD_CALL_PARENT(TRUE) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 61c76ab6127..fe677f863d2 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -273,7 +273,7 @@ var/obj/item/matter_decompiler/MD = locate() in modules MD.metal = metal MD.glass = glass - var/obj/item/stack/material/cyborg/steel/M =locate() in modules + var/obj/item/stack/material/cyborg/steel/M = locate() in modules M.synths = list(metal) var/obj/item/stack/material/cyborg/glass/G = locate() in modules G.synths = list(glass) diff --git a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm index ff3410f91f2..d966d0b59ba 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/thinktank/thinktank_module.dm @@ -49,6 +49,7 @@ /obj/item/robot_module/robot/platform/explorer name = "recon platform module" + display_name = "Recon" unavailable_by_default = FALSE armor_color = "#528052" eye_color = "#7b7b46" @@ -94,6 +95,7 @@ /obj/item/robot_module/robot/platform/cargo name = "logistics platform module" + display_name = "Logistics" unavailable_by_default = FALSE armor_color = "#d5b222" eye_color = "#686846" diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index ea7022a0604..b7b33494ac0 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -419,6 +419,13 @@ var/datum/job/J = SSjob.get_job(rank) + // Get the appropriate announcement title. + var/announce_rank = rank + if(J?.substitute_announce_title) + announce_rank = J.substitute_announce_title + else if(character.mind.role_alt_title) + announce_rank = character.mind.role_alt_title + // AIs don't need a spawnpoint, they must spawn at an empty core if(J.mob_type & JOB_SILICON_AI) @@ -431,7 +438,7 @@ // AIize the character, but don't move them yet character = character.AIize(move = FALSE) // Dupe of code in /datum/controller/subsystem/ticker/proc/create_characters() for non-latespawn, unify? - AnnounceCyborg(character, rank, "has been transferred to the empty core in \the [character.loc.loc]") + AnnounceCyborg(character, announce_rank, "has been transferred to the empty core in \the [character.loc.loc]") ticker.mode.latespawn(character) qdel(C) //Deletes empty core (really?) @@ -453,10 +460,10 @@ var/do_announce = join_props["announce"] && join_message && announce_channel if(J.mob_type & JOB_SILICON) if(do_announce) - AnnounceCyborg(character, rank, join_message, announce_channel, character.z) + AnnounceCyborg(character, announce_rank, join_message, announce_channel, character.z) else if(do_announce) - AnnounceArrival(character, J?.substitute_announce_title || rank, join_message, announce_channel, character.z) + AnnounceArrival(character, announce_rank, join_message, announce_channel, character.z) data_core.manifest_inject(character) ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn @@ -465,8 +472,6 @@ /mob/new_player/proc/AnnounceCyborg(var/mob/living/character, var/rank, var/join_message, var/channel, var/zlevel) if (ticker.current_state == GAME_STATE_PLAYING) var/list/zlevels = zlevel ? using_map.get_map_levels(zlevel, TRUE, om_range = DEFAULT_OVERMAP_RANGE) : null - if(character.mind.role_alt_title) - rank = character.mind.role_alt_title // can't use their name here, since cyborg namepicking is done post-spawn, so we'll just say "A new Cyborg has arrived"/"A new Android has arrived"/etc. global_announcer.autosay("A new[rank ? " [rank]" : " visitor" ] [join_message ? join_message : "has arrived on the station"].", "Arrivals Announcement Computer", channel, zlevels)