diff --git a/code/datums/mind.dm b/code/datums/mind.dm index bee722f1b4..fb5a2e754c 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -109,6 +109,8 @@ output += "Objective #[obj_count]: [objective.explanation_text]" obj_count++ + if(ambitions) + output += "
Ambitions: [ambitions]
" recipient << browse(output,"window=memory") /datum/mind/proc/edit_memory() @@ -142,7 +144,8 @@ else out += "None." - out += "
\[add\]" + out += "
\[add\]

" + out += "Ambitions: [ambitions ? ambitions : "None"] \[edit\]
" usr << browse(out, "window=edit_memory[src]") /datum/mind/Topic(href, href_list) @@ -182,6 +185,18 @@ if (isnull(new_memo)) return memory = new_memo + else if (href_list["amb_edit"]) + var/datum/mind/mind = locate(href_list["amb_edit"]) + if(!mind) + return + var/new_ambition = input("Enter a new ambition", "Memory", mind.ambitions) as null|message + if(isnull(new_ambition)) + return + if(mind) + mind.ambitions = sanitize(new_ambition) + mind.current << "Your ambitions have been changed by higher powers, they are now: [mind.ambitions]" + log_and_message_admins("made [key_name(mind.current)]'s ambitions be '[mind.ambitions]'.") + else if (href_list["obj_edit"] || href_list["obj_add"]) var/datum/objective/objective var/objective_pos diff --git a/code/game/antagonist/antagonist_add.dm b/code/game/antagonist/antagonist_add.dm index 9f594f9b63..e42888737f 100644 --- a/code/game/antagonist/antagonist_add.dm +++ b/code/game/antagonist/antagonist_add.dm @@ -30,6 +30,12 @@ if(faction_verb && player.current) player.current.verbs |= faction_verb + spawn(1 SECOND) //Added a delay so that this should pop up at the bottom and not the top of the text flood the new antag gets. + player.current << "Once you decide on a goal to pursue, you can optionally display it to \ + everyone at the end of the shift with the Set Ambition verb, located in the IC tab. You can change this at any time, \ + and it otherwise has no bearing on your round." + player.current.verbs |= /mob/living/proc/write_ambition + // Handle only adding a mind and not bothering with gear etc. if(nonstandard_role_type) faction_members |= player @@ -50,5 +56,8 @@ player.special_role = null update_icons_removed(player) BITSET(player.current.hud_updateflag, SPECIALROLE_HUD) + if(!is_special_character(player)) + player.current.verbs -= /mob/living/proc/write_ambition + player.ambitions = "" return 1 return 0 \ No newline at end of file diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index 5d1663b8dd..24cca9d640 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -104,17 +104,6 @@ create_nuke() show_objectives(player) - - player.current << "Once you decide on a goal to pursue, you can optionally display it to \ - everyone at the end of the shift with the Set Ambition verb, located in the IC tab. You can change this at any time, \ - and it otherwise has no bearing on your round." - player.current.verbs |= /mob/living/proc/write_ambition - - // Clown clumsiness check, I guess downstream might use it. - if (player.current.mind) - if (player.current.mind.assigned_role == "Clown") - player.current << "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself." - player.current.mutations.Remove(CLUMSY) return 1 /datum/antagonist/proc/set_antag_name(var/mob/living/player) diff --git a/code/game/antagonist/antagonist_objectives.dm b/code/game/antagonist/antagonist_objectives.dm index 21884dd58d..6359710378 100644 --- a/code/game/antagonist/antagonist_objectives.dm +++ b/code/game/antagonist/antagonist_objectives.dm @@ -37,14 +37,19 @@ if(!mind) return - if(!src.mind.special_role) + if(!is_special_character(mind)) src << "While you may perhaps have goals, this verb's meant to only be visible \ to antagonists. Please make a bug report!" return var/new_ambitions = input(src, "Write a short sentence of what your character hopes to accomplish \ today as an antagonist. Remember that this is purely optional. It will be shown at the end of the \ round for everybody else.", "Ambitions", mind.ambitions) as null|message + if(isnull(new_ambitions)) + return + mind.ambitions = new_ambitions new_ambitions = sanitize(new_ambitions) if(new_ambitions) - mind.ambitions = new_ambitions src << "You've set your goal to be '[new_ambitions]'." + else + src << "You leave your ambitions behind." + log_and_message_admins("has set their ambitions to now be: [new_ambitions].") diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm index 62f9eabbd1..d862239a9f 100644 --- a/code/game/antagonist/antagonist_print.dm +++ b/code/game/antagonist/antagonist_print.dm @@ -9,7 +9,7 @@ text += get_special_objective_text(P) if(P.ambitions) text += "
Their goals for today were..." - text += "
[P.ambitions]" + text += "
[P.ambitions]" if(!global_objectives.len && P.objectives && P.objectives.len) var/failed var/num = 1 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 84dcc11d6b..23c5961b66 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -895,22 +895,26 @@ proc/admin_notice(var/message, var/rights) ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS -/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode +/proc/is_special_character(var/character) // returns 1 for special characters and 2 for heroes of gamemode if(!ticker || !ticker.mode) return 0 - if (!istype(M)) - return 0 + var/datum/mind/M + if (ismob(character)) + var/mob/C = character + M = C.mind + else if(istype(character, /datum/mind)) + M = character - if(M.mind) + if(M) if(ticker.mode.antag_templates && ticker.mode.antag_templates.len) for(var/datum/antagonist/antag in ticker.mode.antag_templates) - if(antag.is_antagonist(M.mind)) + if(antag.is_antagonist(M)) return 2 - else if(M.mind.special_role) + else if(M.special_role) return 1 - if(isrobot(M)) - var/mob/living/silicon/robot/R = M + if(isrobot(character)) + var/mob/living/silicon/robot/R = character if(R.emagged) return 1