diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 5797e36f5ce..3ec883325e6 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -17,7 +17,13 @@ GLOBAL_VAR(church_name) GLOBAL_VAR(command_name) /proc/command_name() - return SSmapping.map_datum.dock_name + return GLOB.command_name? GLOB.command_name : SSmapping.map_datum.dock_name + +/proc/change_command_name(name) + + GLOB.command_name = name + + return name GLOBAL_VAR(religion_name) /proc/religion_name() @@ -34,8 +40,19 @@ GLOBAL_VAR(religion_name) /proc/system_name() return SSmapping.map_datum.starsys_name +GLOBAL_VAR(station_name) /proc/station_name() - return SSmapping.map_datum.station_name + return GLOB.station_name? GLOB.station_name : SSmapping.map_datum.station_name + +/proc/change_station_name(designation) + GLOB.station_name = designation + update_world_name() + +/proc/update_world_name() + if(config && CONFIG_GET(string/servername)) + world.name = "[CONFIG_GET(string/servername)] — [station_name()]" + else + world.name = station_name() /proc/new_station_name() var/random = rand(1,5) diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index d91584ba51a..50ac31c5c6a 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -215,13 +215,12 @@ SUBSYSTEM_DEF(mapping) existing_station_areas += AR // World name - if(config && CONFIG_GET(string/servername)) - world.name = "[CONFIG_GET(string/servername)] — [station_name()]" - else - world.name = station_name() + GLOB.station_name = station_name() + update_world_name() return SS_INIT_SUCCESS + /datum/controller/subsystem/mapping/fire(resumed) // Cache for sonic speed var/list/unused_turfs = src.unused_turfs diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 4b2d6b9d206..a4b91cbcec2 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -367,6 +367,8 @@ GLOBAL_VAR_INIT(nologevent, 0) dat += "

Quick Create Object

" dat += "

Create Turf

" dat += "

Create Mob

" + if(marked_datum && istype(marked_datum, /atom)) + dat += "Duplicate Marked Datum
" var/datum/browser/popup = new(usr, "game_panel", "
Game Panel
", 210, 280) popup.set_content(dat.Join("")) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 22d6f7a2d3a..629a8a4a81e 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -110,6 +110,7 @@ GLOBAL_LIST_INIT(admin_verbs_event, list( /client/proc/response_team, // Response Teams admin verb /client/proc/cmd_admin_create_centcom_report, /client/proc/event_manager_panel, + /client/proc/forceEvent, /client/proc/modify_goals, /client/proc/outfit_manager, /client/proc/cmd_admin_headset_message, diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 36a707950a6..c31df525893 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -374,6 +374,39 @@ dat += span_danger("Emergency shuttle lockdowned") dat += "
Stop lockdown
" dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]
" + var/connected_players = GLOB.clients.len + var/lobby_players = 0 + var/observers = 0 + var/observers_connected = 0 + var/living_players = 0 + var/living_players_connected = 0 + var/living_players_antagonist = 0 + var/other_players = 0 + for(var/mob/M in GLOB.mob_list) + if(M.ckey) + if(isnewplayer(M)) + lobby_players++ + continue + else if(M.stat != DEAD && M.mind && !isbrain(M)) + living_players++ + if(M.mind.special_role) + living_players_antagonist++ + if(M.client) + living_players_connected++ + else if((M.stat == DEAD )||(isobserver(M))) + observers++ + if(M.client) + observers_connected++ + else + other_players += M + dat += "
Players:|[connected_players - lobby_players] ingame|[connected_players] connected|[lobby_players] lobby|" + dat += "
Living Players:|[living_players_connected] active|[living_players - living_players_connected] disconnected|[living_players_antagonist] antagonists|" + dat += "
Dead/Observing players:|[observers_connected] active|[observers - observers_connected] disconnected|" + if(other_players) + dat += "
[other_players] players in invalid state or the statistics code is bugged!" + dat += "
" + dat +="Code Phrases: [GLOB.syndicate_code_phrase]" + dat +="Code Responses: [GLOB.syndicate_code_response]" dat += "
Antagonist Teams
" dat += "View Teams
" if(SSticker.mode.syndicates.len) diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index bb279036bb7..324731de564 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -20,9 +20,7 @@

Admin Secrets

Game
Show AI Laws   - Show Game Mode   Show Crew Manifest
- Show current traitors and objectives
Show code phrases and responses
Set Night Shift Mode
Bombs
@@ -87,8 +85,11 @@ Reinforce Station
Move the Gamma Armory  
+ Renames
+ Rename Station Name
+ Reset Station Name
+ Rename Central Comand
"} - if(2) if(check_rights((R_SERVER|R_EVENT),0)) dat += {" @@ -117,6 +118,7 @@ The floor is lava! (DANGEROUS: extremely lame)
The floor is fake-lava! (non-harmful)
Turn all humans into monkeys
+ Polymorph All Make all items look like guns
Warp all Players to Prison
Make all players stupid
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 84629024c7a..46826ce6fba 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2390,38 +2390,7 @@ if(!check_rights(R_ADMIN|R_EVENT)) return var/mob/living/M = locateUID(href_list["BlueSpaceArtillery"]) - if(!isliving(M)) - to_chat(usr, "This can only be used on instances of type /mob/living", confidential=TRUE) - return - - if(alert(owner, "Are you sure you wish to hit [key_name(M)] with Bluespace Artillery?", "Confirm Firing?" , "Yes" , "No") != "Yes") - return - - if(GLOB.BSACooldown) - to_chat(owner, "Standby. Reload cycle in progress. Gunnery crews ready in five seconds!") - return - - GLOB.BSACooldown = 1 - spawn(50) - GLOB.BSACooldown = 0 - - to_chat(M, "You've been hit by bluespace artillery!") - log_admin("[key_name(M)] has been hit by Bluespace Artillery fired by [key_name(owner)]") - message_admins("[key_name_admin(M)] has been hit by Bluespace Artillery fired by [key_name_admin(owner)]") - - var/turf/simulated/floor/T = get_turf(M) - if(istype(T)) - if(prob(80)) - T.break_tile_to_plating() - else - T.break_tile() - - if(M.health <= 1) - M.gib() - else - M.adjustBruteLoss(min(99,(M.health - 1))) - M.Weaken(40 SECONDS) - M.Stuttering(40 SECONDS) + usr.client.bluespace_artillery(M) else if(href_list["CentcommReply"]) if(!check_rights(R_ADMIN)) @@ -2892,6 +2861,10 @@ if(!check_rights(R_SPAWN)) return return create_mob(usr) + else if(href_list["dupe_marked_datum"]) + if(!check_rights(R_SPAWN)) return + return DuplicateObject(marked_datum, perfectcopy=1, newloc=get_turf(usr)) + else if(href_list["object_list"]) //this is the laggiest thing ever if(!check_rights(R_SPAWN)) return @@ -3100,6 +3073,35 @@ if("tripleAI") usr.client.triple_ai() SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Triple AI") + if("set_station_name") + if(!check_rights(R_ADMIN | R_EVENT)) + return + + if(!you_realy_want_do_this()) + return + + var/new_name = tgui_input_text(usr, "Пожалуйста, введите новое название станции.", "Что?", "") + if(!new_name) + return + change_station_name(new_name) + log_and_message_admins("renamed the station to: [new_name].") + GLOB.event_announcement.Announce("Решением [command_name()] станция переименована в \"[new_name]\".") + + if("set_centcomm_name") + if(!check_rights(R_ADMIN | R_EVENT)) + return + if(!you_realy_want_do_this()) + return + usr.client.cmd_change_command_name() + + if("reset_station_name") + if(!check_rights(R_ADMIN)) + return + var/new_name = new_station_name() + change_station_name(new_name) + log_and_message_admins("reset the station name.") + GLOB.event_announcement.Announce("Решением [command_name()] станция переименована в \"[new_name]\".") + if("gravity") if(!(SSticker && SSticker.mode)) to_chat(usr, "Please wait until the game starts! Not sure how it will work otherwise.", confidential=TRUE) @@ -3306,6 +3308,8 @@ SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Weather Ash Storm") SSweather.run_weather(/datum/weather/ash_storm) message_admins("[key_name_admin(usr)] spawned an ash storm on the mining level") + if("polymorph") + usr.client.polymorph_all() if("stupify") if(!you_realy_want_do_this()) return @@ -3326,15 +3330,33 @@ W.item_state = "gun" message_admins("[key_name_admin(usr)] made every item look like a gun") if("schoolgirl") // nyaa~ How much are you paying attention in reviews? + if(!check_rights(R_EVENT)) + return + if(!you_realy_want_do_this()) return + SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Chinese Cartoons") - for(var/obj/item/clothing/under/W in world) - W.icon_state = "schoolgirl" - W.item_state = "w_suit" - W.item_color = "schoolgirl" - message_admins("[key_name_admin(usr)] activated Japanese Animes mode") - world << sound('sound/AI/animes.ogg') + log_and_message_admins("made everything kawaii.") + for(var/mob/living/carbon/human/human in GLOB.mob_list) + SEND_SOUND(human, 'sound/AI/animes.ogg') + if(!human.dna.species.nojumpsuit && !isvox(human) && !isplasmaman(human) \ + && !isshadowling(human) && !isvoxarmalis(human) && !is_space_or_openspace(get_turf(human))) + var/obj/item/clothing/head/kitty/hat = new + var/seifuku = pick(typesof(/obj/item/clothing/under/schoolgirl)) + var/obj/item/clothing/under/schoolgirl/uniform = new seifuku + human.drop_item_ground(human.w_uniform, TRUE) + human.equip_to_slot_or_del(uniform, uniform.slot_flags) + human.drop_item_ground(human.head, TRUE) + human.equip_to_slot_or_del(hat, hat.slot_flags) + ADD_TRAIT(uniform, TRAIT_NODROP, INNATE_TRAIT) + ADD_TRAIT(hat, TRAIT_NODROP, INNATE_TRAIT) + var/list/honorifics = list(MALE = list("кун"), FEMALE = list("чан","тан"), NEUTER = list("сан")) //John Robust -> Robust-kun + var/list/names = splittext(human.real_name," ") + var/newname = "[names[names.len]]-[pick(honorifics[human.gender])]" + human.name = newname + human.real_name = newname + if("eagles")// if(!you_realy_want_do_this()) return @@ -3577,12 +3599,6 @@ usr << browse(dat, "window=jobdebug;size=600x500") if("showailaws") output_ai_laws() - if("showgm") - if(!SSticker) - alert("The game hasn't started yet!") - else if(SSticker.mode) - alert("The game mode is [SSticker.mode.name]") - else alert("For some reason there's a ticker, but not a game mode") if("manifest") var/dat = {"Showing Crew Manifest.
"} dat += "" @@ -3592,11 +3608,6 @@ dat += text("", H.name, H.get_assignment()) dat += "
NamePosition
[][]
" usr << browse(dat, "window=manifest;size=440x410") - if("check_antagonist") - check_antagonists() - if("view_codewords") - to_chat(usr, "Code Phrases: [GLOB.syndicate_code_phrase]", confidential=TRUE) - to_chat(usr, "Code Responses: [GLOB.syndicate_code_response]", confidential=TRUE) if("DNA") var/dat = {"Showing DNA from blood.
"} dat += "" diff --git a/code/modules/admin/verbs/bluespacearty.dm b/code/modules/admin/verbs/bluespacearty.dm new file mode 100644 index 00000000000..3fa36d625e1 --- /dev/null +++ b/code/modules/admin/verbs/bluespacearty.dm @@ -0,0 +1,40 @@ +/client/proc/bluespace_artillery(mob/living/target in GLOB.mob_list) + set name = "Bluespace Artillery" + set category = "Event" + + if(!check_rights(R_ADMIN|R_EVENT)) + return + + if(!isliving(target)) + to_chat(usr, span_warning("Это можно использовать только на объектах типа /mob/living"), confidential = TRUE) + return + + if(tgui_alert(usr, "Вы уверены, что хотите выстрелить по [key_name(target)] из Блюспейс Артиллерии?", "Подтверждение выстрела?" , list("Да" , "Нет")) != "Да") + return + + if(GLOB.BSACooldown) + to_chat(usr, "Подождите. Идет цикл перезарядки. Артиллерийские расчеты будут готовы через пять секунд!") + return + + GLOB.BSACooldown = 1 + spawn(50) + GLOB.BSACooldown = 0 + + to_chat(target, "По вам попала блюспейс артиллерия!") + log_admin("[key_name(target)] has been hit by Bluespace Artillery fired by [key_name(usr)]") + message_admins("[key_name_admin(target)] has been hit by Bluespace Artillery fired by [key_name_admin(usr)]") + + var/turf/simulated/floor/T = get_turf(target) + if(istype(T)) + if(prob(80)) + T.break_tile_to_plating() + else + T.break_tile() + + if(target.health <= 1) + target.gib() + else + target.adjustBruteLoss(min(99,(target.health - 1))) + target.Weaken(40 SECONDS) + target.Stuttering(40 SECONDS) + diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 359a324496e..f529c7da1af 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1231,3 +1231,53 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!source) return REMOVE_TRAIT(D, chosen_trait, source) + +/client/proc/cmd_change_command_name() + set category = "Admin.Event" + set name = "Change Command Name" + + if(!check_rights(R_ADMIN | R_EVENT)) + return + + var/input = tgui_input_text(usr, "Введите имя для Центрального Командования.", "Что?", "") + if(!input) + return + change_command_name(input) + log_and_message_admins("has changed Central Command's name to [input]") + + +/client/proc/polymorph_all() + set category = "Event" + set name = "Polymorph All" + set desc = "Applies the effects of the bolt of change to every single mob." + + if(!holder) + return + + var/confirm = tgui_alert(src, "Пожалуйста, подтвердите, что вы хотите полиморфировать всех?", "Подтверждение", list("Да", "Нет")) + if(confirm != "Да") + return + + var/keep_name = tgui_alert(src, "Вы хотите, чтобы существа сохранили свои имена?", "Сохранить имена?", list("Да", "Нет")) + + var/list/mobs = shuffle(GLOB.alive_player_list.Copy()) // might change while iterating + + log_and_message_admins("polymorphed ALL living mobs.") + + for(var/mob/living/M in mobs) + CHECK_TICK + + if(!M || !M.name || !M.real_name) + continue + + M.audible_message(span_italics("...ваббаджек...ваббаджек...")) + playsound(M.loc, 'sound/magic/Staff_Change.ogg', 50, 1, -1) + var/name = M.name + var/real_name = M.real_name + + var/mob/living/new_mob = wabbajack(M) + if(keep_name == "Да" && new_mob) + new_mob.name = name + new_mob.real_name = real_name + + diff --git a/code/modules/admin/verbs/toggledebugverbs.dm b/code/modules/admin/verbs/toggledebugverbs.dm index 65e5c00465f..de1eb40f6d3 100644 --- a/code/modules/admin/verbs/toggledebugverbs.dm +++ b/code/modules/admin/verbs/toggledebugverbs.dm @@ -16,7 +16,6 @@ GLOBAL_LIST_INIT(admin_verbs_show_debug_verbs, list( /datum/admins/proc/show_traitor_panel, /client/proc/print_jobban_old, /client/proc/print_jobban_old_filter, - /client/proc/forceEvent, /client/proc/admin_redo_space_transitions, /client/proc/make_turf_space_map, /client/proc/vv_by_ref @@ -25,11 +24,17 @@ GLOBAL_LIST_INIT(admin_verbs_show_debug_verbs, list( // Would be nice to make this a permanent admin pref so we don't need to click it each time /client/proc/enable_debug_verbs() set category = "Debug" - set name = "Debug verbs" + set name = "Debug verbs - Enable" if(!check_rights(R_DEBUG)) return - add_verb(src, GLOB.admin_verbs_show_debug_verbs) + verbs -= /client/proc/enable_debug_verbs + verbs.Add(/client/proc/disable_debug_verbs, GLOB.admin_verbs_show_debug_verbs) + +/client/proc/disable_debug_verbs() + set category = "Debug" + set name = "Debug verbs - Disable" - SSblackbox.record_feedback("tally", "admin_verb", 1, "Debug Verbs") //If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! + verbs.Remove(/client/proc/disable_debug_verbs, GLOB.admin_verbs_show_debug_verbs) + verbs += /client/proc/enable_debug_verbs diff --git a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm index 5a933251872..e436b0f1fe2 100644 --- a/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm +++ b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm @@ -41,3 +41,14 @@ continue return 1 return 0 + +/datum/mapGeneratorModule/bottomLayer/massdelete + spawnableAtoms = list() + spawnableTurfs = list() + +/datum/mapGeneratorModule/bottomLayer/massdelete/generate() + if(!mother) + return + for(var/V in mother.map) + var/turf/T = V + T.empty() diff --git a/code/modules/procedural_mapping/mapGenerators/cult.dm b/code/modules/procedural_mapping/mapGenerators/cult.dm new file mode 100644 index 00000000000..1a823d599ec --- /dev/null +++ b/code/modules/procedural_mapping/mapGenerators/cult.dm @@ -0,0 +1,31 @@ +/datum/mapGeneratorModule/bottomLayer/cultFloor + spawnableTurfs = list(/turf/simulated/floor/engine/cult = 100) + +/datum/mapGeneratorModule/border/cultWalls + spawnableTurfs = list(/turf/simulated/wall/cult = 100) + + +/datum/mapGeneratorModule/bottomLayer/clockFloor + spawnableTurfs = list(/turf/simulated/floor/clockwork = 100) + +/datum/mapGeneratorModule/border/clockWalls + spawnableTurfs = list(/turf/simulated/wall/clockwork = 100) + + +/datum/mapGenerator/cult //walls and floor only + modules = list(/datum/mapGeneratorModule/bottomLayer/cultFloor, \ + /datum/mapGeneratorModule/border/cultWalls, \ + /datum/mapGeneratorModule/bottomLayer/repressurize) + +/datum/mapGenerator/clock //walls and floor only + modules = list(/datum/mapGeneratorModule/bottomLayer/clockFloor, \ + /datum/mapGeneratorModule/border/clockWalls, \ + /datum/mapGeneratorModule/bottomLayer/repressurize) + +/datum/mapGenerator/cult/floor //floors only + modules = list(/datum/mapGeneratorModule/bottomLayer/cultFloor, \ + /datum/mapGeneratorModule/bottomLayer/repressurize) + +/datum/mapGenerator/clock/floor //floor only + modules = list(/datum/mapGeneratorModule/bottomLayer/clockFloor, \ + /datum/mapGeneratorModule/bottomLayer/repressurize) diff --git a/paradise.dme b/paradise.dme index 22bad91982d..80da0e922d1 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1584,6 +1584,7 @@ #include "code\modules\admin\verbs\antagonist_menu.dm" #include "code\modules\admin\verbs\asays.dm" #include "code\modules\admin\verbs\atmosdebug.dm" +#include "code\modules\admin\verbs\bluespacearty.dm" #include "code\modules\admin\verbs\borgpanel.dm" #include "code\modules\admin\verbs\BrokenInhands.dm" #include "code\modules\admin\verbs\cantcomm_cargo.dm" @@ -2955,6 +2956,7 @@ #include "code\modules\procedural_mapping\mapGeneratorModules\helpers.dm" #include "code\modules\procedural_mapping\mapGeneratorModules\nature.dm" #include "code\modules\procedural_mapping\mapGenerators\asteroid.dm" +#include "code\modules\procedural_mapping\mapGenerators\cult.dm" #include "code\modules\procedural_mapping\mapGenerators\nature.dm" #include "code\modules\procedural_mapping\mapGenerators\syndicate.dm" #include "code\modules\projectiles\ammunition.dm"
NameDNABlood TypeRace Blood Type