diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index d07cc90122a..de39a60b37a 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -155,7 +155,7 @@ var/datum/controller/subsystem/ticker/SSticker pregame_timeleft = 1 SECOND to_world("Reattempting gamemode selection.") -/datum/controller/subsystem/ticker/proc/game_tick() +/datum/controller/subsystem/ticker/proc/game_tick(var/force_end = FALSE) if(current_state != GAME_STATE_PLAYING) return 0 @@ -163,7 +163,10 @@ var/datum/controller/subsystem/ticker/SSticker var/game_finished = 0 var/mode_finished = 0 - if (config.continous_rounds) + if(force_end) + game_finished = TRUE + mode_finished = TRUE + else if(config.continous_rounds) game_finished = (emergency_shuttle.returned() || mode.station_was_nuked) mode_finished = (!post_game && mode.check_finished()) else diff --git a/code/game/antagonist/antagonist_create.dm b/code/game/antagonist/antagonist_create.dm index bbe78c33df4..4bcfd645feb 100644 --- a/code/game/antagonist/antagonist_create.dm +++ b/code/game/antagonist/antagonist_create.dm @@ -18,6 +18,7 @@ greet(target) if(!gag_announcement) announce_antagonist_spawn() + LAZYDISTINCTADD(SSticker.mode.antag_templates, src) /datum/antagonist/proc/create_default(var/mob/source) var/mob/living/M diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm index c7ddf3519fd..8b73541a59c 100644 --- a/code/game/antagonist/antagonist_print.dm +++ b/code/game/antagonist/antagonist_print.dm @@ -6,6 +6,7 @@ var/text = "

The [current_antagonists.len == 1 ? "[role_text] was" : "[role_text_plural] were"]:" for(var/datum/mind/P in current_antagonists) text += print_player_full(P) + text += print_special_role_report(P) text += get_special_objective_text(P) if(P.ambitions) text += "
Their goals for today were:" @@ -48,6 +49,17 @@ text += "Fail." return text +/datum/antagonist/proc/print_special_role_report(var/datum/mind/ply) + var/text = "" + if(length(ply.learned_spells)) + text += "

[ply.name]'s spells were:
" + for(var/s in ply.learned_spells) + var/spell/spell = s + text += "[spell.name] - " + text += "Speed: [spell.spell_levels["speed"]] Power: [spell.spell_levels["power"]]" + text += "
" + return text + /datum/antagonist/proc/print_player_lite(var/datum/mind/ply) var/role = ply.assigned_role ? "\improper[ply.assigned_role]" : "\improper[ply.special_role]" var/text = "
[ply.name] as \a [role] (" diff --git a/code/game/antagonist/outsider/wizard.dm b/code/game/antagonist/outsider/wizard.dm index 71f9b24ffa9..973a1c4c6f8 100644 --- a/code/game/antagonist/outsider/wizard.dm +++ b/code/game/antagonist/outsider/wizard.dm @@ -100,24 +100,6 @@ var/datum/antagonist/wizard/wizards feedback_set_details("round_end_result","loss - wizard killed") to_world("The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!") -/datum/antagonist/wizard/print_player_summary() - ..() - for(var/p in current_antagonists) - var/datum/mind/player = p - var/text = "[player.name]'s spells were:" - if(!player.learned_spells || !player.learned_spells.len) - text += "
None!" - else - for(var/s in player.learned_spells) - var/spell/spell = s - text += "
[spell.name] - " - text += "Speed: [spell.spell_levels["speed"]] Power: [spell.spell_levels["power"]]" - if(player.ambitions) - text += "
Their goals for today were:" - text += "
'[player.ambitions]'" - text += "
" - to_world(text) - //To batch-remove wizard spells. Linked to mind.dm. /mob/proc/spellremove() diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 10a75164874..213bd8c8bc1 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -80,6 +80,7 @@ var/list/admin_verbs_admin = list( /client/proc/toggle_antagHUD_restrictions, /client/proc/allow_character_respawn, // Allows a ghost to respawn , /client/proc/allow_stationbound_reset, + /client/proc/end_round, /client/proc/event_manager_panel, /client/proc/empty_ai_core_toggle_latejoin, /client/proc/aooc, @@ -312,6 +313,7 @@ var/list/admin_verbs_hideable = list( /datum/admins/proc/toggleaban, /client/proc/create_poll, /client/proc/allow_stationbound_reset, + /client/proc/end_round, /client/proc/toggle_log_hrefs, /datum/admins/proc/immreboot, /client/proc/cmd_dev_bst, @@ -1166,6 +1168,20 @@ var/list/admin_verbs_cciaa = list( log_and_message_admins("admin-wiped [key_name_admin(target)]'s core.") target.do_wipe_core() +/client/proc/end_round() + set name = "End Round" + set desc = "This button will end the round." + set category = "Server" + + if(!check_rights(R_ADMIN)) + return + + if(alert(usr, "Are you sure you want to end the round?", "Confirm Round End", "No", "Yes") != "Yes") + return + + log_and_message_admins("has ended the round with the End Round button.") + SSticker.game_tick(TRUE) + /client/proc/restart_sql() set category = "Debug" set name = "Reconnect SQL" diff --git a/code/modules/spell_system/artifacts/items/apprentice_pebble.dm b/code/modules/spell_system/artifacts/items/apprentice_pebble.dm index 470bb7e69af..79a1ac2c580 100644 --- a/code/modules/spell_system/artifacts/items/apprentice_pebble.dm +++ b/code/modules/spell_system/artifacts/items/apprentice_pebble.dm @@ -13,7 +13,7 @@ SSghostroles.add_spawn_atom("apprentice", src) var/area/A = get_area(src) if(A) - say_dead_direct("An artificer pebble has been created in [A.name]! Spawn at it by using the ghost spawner menu in the ghost tab.") + say_dead_direct("A wizard apprentice pebble has been created in [A.name]! Spawn at it by using the ghost spawner menu in the ghost tab.") /obj/item/apprentice_pebble/Destroy() if(contract) diff --git a/code/modules/spell_system/spells/spells.dm b/code/modules/spell_system/spells/spells.dm index e02e44efecc..231ce1818a7 100644 --- a/code/modules/spell_system/spells/spells.dm +++ b/code/modules/spell_system/spells/spells.dm @@ -44,7 +44,9 @@ if(spell_master.type == master_type) LAZYADD(spell_list, spell_to_add) spell_master.add_spell(spell_to_add) - return 1 + if(mind) + LAZYDISTINCTADD(mind.learned_spells, spell_to_add) + return TRUE var/obj/screen/movable/spell_master/new_spell_master = new master_type //we're here because either we didn't find our type, or we have no spell masters to attach to if(client) @@ -56,11 +58,8 @@ spell_masters.Add(new_spell_master) LAZYADD(spell_list, spell_to_add) if(mind) - if(!mind.learned_spells) - mind.learned_spells = list() - mind.learned_spells += spell_to_add - - return 1 + LAZYDISTINCTADD(mind.learned_spells, spell_to_add) + return TRUE /mob/proc/remove_spell(var/spell/spell_to_remove) if(!spell_to_remove || !istype(spell_to_remove)) diff --git a/html/changelogs/geeves-wizard_roundend_report.yml b/html/changelogs/geeves-wizard_roundend_report.yml new file mode 100644 index 00000000000..3a54d54203c --- /dev/null +++ b/html/changelogs/geeves-wizard_roundend_report.yml @@ -0,0 +1,9 @@ +author: Geeves + +delete-after: True + +changes: + - admin: "Added an admin verb that ends the round smoothly, displaying the end round card." + - bugfix: "Wizard learned spells are now properly displayed at round." + - bugfix: "Antags added to gamemodes they don't belong in, now properly update the gamemode's antag template, allowing their things to be displayed at round end." + - bugfix: "Fixed a typo in the apprentice pebble spawn-in calling it an 'artificer pebble' in deadchat." \ No newline at end of file