/client/proc/Debug2() set category = "Debug" set name = "Debug-Game" if(!check_rights(R_DEBUG)) return if(Debug2) Debug2 = 0 message_admins("[key_name(src)] toggled debugging off.") log_admin("[key_name(src)] toggled debugging off.") else Debug2 = 1 message_admins("[key_name(src)] toggled debugging on.") log_admin("[key_name(src)] toggled debugging on.") feedback_add_details("admin_verb","DG2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! // callproc moved to code/modules/admin/callproc /client/proc/simple_DPS() set name = "Simple DPS" set category = "Debug" set desc = "Gives a really basic idea of how much hurt something in-hand does." var/obj/item/I = null var/mob/living/user = null if(isliving(usr)) user = usr I = user.get_active_hand() if(!I || !istype(I)) to_chat(user, "You need to have something in your active hand, to use this verb.") return var/weapon_attack_speed = user.get_attack_speed(I) / 10 var/weapon_damage = I.force var/modified_damage_percent = 1 for(var/datum/modifier/M in user.modifiers) if(!isnull(M.outgoing_melee_damage_percent)) weapon_damage *= M.outgoing_melee_damage_percent modified_damage_percent *= M.outgoing_melee_damage_percent if(istype(I, /obj/item/weapon/gun)) var/obj/item/weapon/gun/G = I var/obj/item/projectile/P if(istype(I, /obj/item/weapon/gun/energy)) var/obj/item/weapon/gun/energy/energy_gun = G P = new energy_gun.projectile_type() else if(istype(I, /obj/item/weapon/gun/projectile)) var/obj/item/weapon/gun/projectile/projectile_gun = G var/obj/item/ammo_casing/ammo = projectile_gun.chambered P = ammo.BB else to_chat(user, "DPS calculation by this verb is not supported for \the [G]'s type. Energy or Ballistic only, sorry.") weapon_damage = P.damage weapon_attack_speed = G.fire_delay / 10 qdel(P) var/DPS = weapon_damage / weapon_attack_speed to_chat(user, "Damage: [weapon_damage][modified_damage_percent != 1 ? " (Modified by [modified_damage_percent*100]%)":""]") to_chat(user, "Attack Speed: [weapon_attack_speed]/s") to_chat(user, "\The [I] does [DPS] damage per second.") if(DPS > 0) to_chat(user, "At your maximum health ([user.getMaxHealth()]), it would take approximately;") to_chat(user, "[(user.getMaxHealth() - config.health_threshold_softcrit) / DPS] seconds to softcrit you. ([config.health_threshold_softcrit] health)") to_chat(user, "[(user.getMaxHealth() - config.health_threshold_crit) / DPS] seconds to hardcrit you. ([config.health_threshold_crit] health)") to_chat(user, "[(user.getMaxHealth() - config.health_threshold_dead) / DPS] seconds to kill you. ([config.health_threshold_dead] health)") else to_chat(user, "You need to be a living mob, with hands, and for an object to be in your active hand, to use this verb.") return /client/proc/Cell() set category = "Debug" set name = "Cell" if(!mob) return var/turf/T = mob.loc if (!( istype(T, /turf) )) return var/datum/gas_mixture/env = T.return_air() var/t = "Coordinates: [T.x],[T.y],[T.z]\n" t += "Temperature: [env.temperature]\n" t += "Pressure: [env.return_pressure()]kPa\n" for(var/g in env.gas) t += "[g]: [env.gas[g]] / [env.gas[g] * R_IDEAL_GAS_EQUATION * env.temperature / env.volume]kPa\n" usr.show_message(t, 1) feedback_add_details("admin_verb","ASL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_robotize(var/mob/M in mob_list) set category = "Fun" set name = "Make Robot" if(!ticker) tgui_alert_async(usr, "Wait until the game starts") return if(istype(M, /mob/living/carbon/human)) log_admin("[key_name(src)] has robotized [M.key].") spawn(10) M:Robotize() else tgui_alert_async(usr, "Invalid mob") /client/proc/cmd_admin_animalize(var/mob/M in mob_list) set category = "Fun" set name = "Make Simple Animal" if(!ticker) tgui_alert_async(usr, "Wait until the game starts") return if(!M) tgui_alert_async(usr, "That mob doesn't seem to exist, close the panel and try again.") return if(istype(M, /mob/new_player)) tgui_alert_async(usr, "The mob must not be a new_player.") return log_admin("[key_name(src)] has animalized [M.key].") spawn(10) M.Animalize() /client/proc/makepAI() set category = "Fun" set name = "Make pAI" set desc = "Spawn someone in as a pAI!" if(!check_rights(R_ADMIN|R_EVENT|R_DEBUG)) return var/turf/T = get_turf(mob) var/list/available = list() for(var/mob/C in mob_list) if(C.key && isobserver(C)) available.Add(C) var/mob/choice = tgui_input_list(usr, "Choose a player to play the pAI", "Spawn pAI", available) if(!choice) return 0 var/obj/item/device/paicard/typeb/card = new(T) var/mob/living/silicon/pai/pai = new(card) pai.real_name = pai.name pai.key = choice.key card.setPersonality(pai) if(tgui_alert(pai, "Do you want to load your pAI data?", "Load", list("Yes", "No")) == "Yes") pai.savefile_load(pai) else pai.name = sanitizeSafe(tgui_input_text(pai, "Enter your pAI name:", "pAI Name", "Personal AI")) card.setPersonality(pai) for(var/datum/paiCandidate/candidate in paiController.pai_candidates) if(candidate.key == choice.key) paiController.pai_candidates.Remove(candidate) log_admin("made a pAI with key=[pai.key] at ([T.x],[T.y],[T.z])") feedback_add_details("admin_verb","MPAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_admin_alienize(var/mob/M in mob_list) set category = "Fun" set name = "Make Alien" if(!ticker) tgui_alert_async(usr, "Wait until the game starts") return if(ishuman(M)) log_admin("[key_name(src)] has alienized [M.key].") spawn(10) M:Alienize() feedback_add_details("admin_verb","MKAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(usr)] made [key_name(M)] into an alien.") message_admins("[key_name_admin(usr)] made [key_name(M)] into an alien.", 1) else tgui_alert_async(usr, "Invalid mob") //TODO: merge the vievars version into this or something maybe mayhaps /client/proc/cmd_debug_del_all() set category = "Debug" set name = "Del-All" // to prevent REALLY stupid deletions var/blocked = list(/obj, /mob, /mob/living, /mob/living/carbon, /mob/living/carbon/human, /mob/observer/dead, /mob/living/silicon, /mob/living/silicon/robot, /mob/living/silicon/ai) var/hsbitem = tgui_input_list(usr, "Choose an object to delete.", "Delete:", typesof(/obj) + typesof(/mob) - blocked) if(hsbitem) for(var/atom/O in world) if(istype(O, hsbitem)) qdel(O) log_admin("[key_name(src)] has deleted all instances of [hsbitem].") message_admins("[key_name_admin(src)] has deleted all instances of [hsbitem].", 0) feedback_add_details("admin_verb","DELA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_debug_make_powernets() set category = "Debug" set name = "Make Powernets" SSmachines.makepowernets() log_admin("[key_name(src)] has remade the powernet. SSmachines.makepowernets() called.") message_admins("[key_name_admin(src)] has remade the powernets. SSmachines.makepowernets() called.", 0) feedback_add_details("admin_verb","MPWN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_debug_tog_aliens() set category = "Server" set name = "Toggle Aliens" config.aliens_allowed = !config.aliens_allowed log_admin("[key_name(src)] has turned aliens [config.aliens_allowed ? "on" : "off"].") message_admins("[key_name_admin(src)] has turned aliens [config.aliens_allowed ? "on" : "off"].", 0) feedback_add_details("admin_verb","TAL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/cmd_display_del_log() set category = "Debug" set name = "Display del() Log" set desc = "Display del's log of everything that's passed through it." if(!check_rights(R_DEBUG)) return var/list/dellog = list("List of things that have gone through qdel this round

    ") sortTim(SSgarbage.items, cmp=/proc/cmp_qdel_item_time, associative = TRUE) for(var/path in SSgarbage.items) var/datum/qdel_item/I = SSgarbage.items[path] dellog += "
  1. [path]
  2. " dellog += "
" usr << browse(dellog.Join(), "window=dellog") /client/proc/cmd_display_init_log() set category = "Debug" set name = "Display Initialize() Log" set desc = "Displays a list of things that didn't handle Initialize() properly" if(!check_rights(R_DEBUG)) return src << browse(replacetext(SSatoms.InitLog(), "\n", "
"), "window=initlog") /* /client/proc/cmd_display_overlay_log() set category = "Debug" set name = "Display overlay Log" set desc = "Display SSoverlays log of everything that's passed through it." if(!check_rights(R_DEBUG)) return render_stats(SSoverlays.stats, src) */ // Render stats list for round-end statistics. /proc/render_stats(list/stats, user, sort = /proc/cmp_generic_stat_item_time) sortTim(stats, sort, TRUE) var/list/lines = list() for (var/entry in stats) var/list/data = stats[entry] lines += "[entry] => [num2text(data[STAT_ENTRY_TIME], 10)]ms ([data[STAT_ENTRY_COUNT]]) (avg:[num2text(data[STAT_ENTRY_TIME]/(data[STAT_ENTRY_COUNT] || 1), 99)])" if (user) user << browse("
  1. [lines.Join("
  2. ")]
", "window=[url_encode("stats:\ref[stats]")]") else . = lines.Join("\n") /client/proc/cmd_admin_grantfullaccess(var/mob/M in mob_list) set category = "Admin" set name = "Grant Full Access" if (!ticker) tgui_alert_async(usr, "Wait until the game starts") return if (istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M if (H.wear_id) var/obj/item/weapon/card/id/id = H.wear_id if(istype(H.wear_id, /obj/item/device/pda)) var/obj/item/device/pda/pda = H.wear_id id = pda.id id.icon_state = "gold" id.access = get_all_accesses().Copy() else var/obj/item/weapon/card/id/id = new/obj/item/weapon/card/id(M); id.icon_state = "gold" id.access = get_all_accesses().Copy() id.registered_name = H.real_name id.assignment = "Site Manager" id.name = "[id.registered_name]'s ID Card ([id.assignment])" H.equip_to_slot_or_del(id, slot_wear_id) H.update_inv_wear_id() else tgui_alert_async(usr, "Invalid mob") feedback_add_details("admin_verb","GFA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! log_admin("[key_name(src)] has granted [M.key] full access.") message_admins("[key_name_admin(usr)] has granted [M.key] full access.", 1) /client/proc/cmd_assume_direct_control(var/mob/M in mob_list) set category = "Admin" set name = "Assume direct control" set desc = "Direct intervention" if(!check_rights(R_DEBUG|R_ADMIN|R_EVENT)) return if(M.ckey) if(tgui_alert(usr, "This mob is being controlled by [M.ckey]. Are you sure you wish to assume control of it? [M.ckey] will be made a ghost.","Confirmation",list("Yes","No")) != "Yes") return else var/mob/observer/dead/ghost = new/mob/observer/dead(M,1) ghost.ckey = M.ckey message_admins("[key_name_admin(usr)] assumed direct control of [M].", 1) log_admin("[key_name(usr)] assumed direct control of [M].") var/mob/adminmob = src.mob M.ckey = src.ckey if( isobserver(adminmob) ) qdel(adminmob) feedback_add_details("admin_verb","ADC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/take_picture(var/atom/A in world) set name = "Save PNG" set category = "Debug" set desc = "Opens a dialog to save a PNG of any object in the game." if(!check_rights(R_DEBUG)) return downloadImage(A) /client/proc/cmd_admin_areatest() set category = "Mapping" set name = "Test areas" var/list/areas_all = list() var/list/areas_with_APC = list() var/list/areas_with_air_alarm = list() var/list/areas_with_RC = list() var/list/areas_with_light = list() var/list/areas_with_LS = list() var/list/areas_with_intercom = list() var/list/areas_with_camera = list() for(var/area/A in world) if(!(A.type in areas_all)) areas_all.Add(A.type) for(var/obj/machinery/power/apc/APC in GLOB.apcs) var/area/A = get_area(APC) if(A && !(A.type in areas_with_APC)) areas_with_APC.Add(A.type) for(var/obj/machinery/alarm/alarm in machines) var/area/A = get_area(alarm) if(A && !(A.type in areas_with_air_alarm)) areas_with_air_alarm.Add(A.type) for(var/obj/machinery/requests_console/RC in machines) var/area/A = get_area(RC) if(A && !(A.type in areas_with_RC)) areas_with_RC.Add(A.type) for(var/obj/machinery/light/L in machines) var/area/A = get_area(L) if(A && !(A.type in areas_with_light)) areas_with_light.Add(A.type) for(var/obj/machinery/light_switch/LS in machines) var/area/A = get_area(LS) if(A && !(A.type in areas_with_LS)) areas_with_LS.Add(A.type) for(var/obj/item/device/radio/intercom/I in machines) var/area/A = get_area(I) if(A && !(A.type in areas_with_intercom)) areas_with_intercom.Add(A.type) for(var/obj/machinery/camera/C in machines) var/area/A = get_area(C) if(A && !(A.type in areas_with_camera)) areas_with_camera.Add(A.type) var/list/areas_without_APC = areas_all - areas_with_APC var/list/areas_without_air_alarm = areas_all - areas_with_air_alarm var/list/areas_without_RC = areas_all - areas_with_RC var/list/areas_without_light = areas_all - areas_with_light var/list/areas_without_LS = areas_all - areas_with_LS var/list/areas_without_intercom = areas_all - areas_with_intercom var/list/areas_without_camera = areas_all - areas_with_camera to_world("AREAS WITHOUT AN APC:") for(var/areatype in areas_without_APC) to_world("* [areatype]") to_world("AREAS WITHOUT AN AIR ALARM:") for(var/areatype in areas_without_air_alarm) to_world("* [areatype]") to_world("AREAS WITHOUT A REQUEST CONSOLE:") for(var/areatype in areas_without_RC) to_world("* [areatype]") to_world("AREAS WITHOUT ANY LIGHTS:") for(var/areatype in areas_without_light) to_world("* [areatype]") to_world("AREAS WITHOUT A LIGHT SWITCH:") for(var/areatype in areas_without_LS) to_world("* [areatype]") to_world("AREAS WITHOUT ANY INTERCOMS:") for(var/areatype in areas_without_intercom) to_world("* [areatype]") to_world("AREAS WITHOUT ANY CAMERAS:") for(var/areatype in areas_without_camera) to_world("* [areatype]") /datum/admins/proc/cmd_admin_dress(input in getmobs()) set category = "Fun" set name = "Select equipment" if(!check_rights(R_FUN)) return var/target = getmobs()[input] if(!target) return if(!ishuman(target)) return var/mob/living/carbon/human/H = target var/decl/hierarchy/outfit/outfit = tgui_input_list(usr, "Select outfit.", "Select equipment.", outfits()) if(!outfit) return feedback_add_details("admin_verb","SEQ") dressup_human(H, outfit, 1) /proc/dressup_human(var/mob/living/carbon/human/H, var/decl/hierarchy/outfit/outfit) if(!H || !outfit) return if(outfit.undress) H.delete_inventory() outfit.equip(H) log_and_message_admins("changed the equipment of [key_name(H)] to [outfit.name].") /client/proc/startSinglo() set category = "Debug" set name = "Start Singularity" set desc = "Sets up the singularity and all machines to get power flowing through the station" if(tgui_alert(usr, "Are you sure? This will start up the engine. Should only be used during debug!","Start Singularity",list("Yes","No")) != "Yes") return for(var/obj/machinery/power/emitter/E in machines) if(istype(get_area(E), /area/space)) E.anchored = TRUE E.state = 2 E.connect_to_network() E.active = TRUE for(var/obj/machinery/field_generator/F in machines) if(istype(get_area(F), /area/space)) F.Varedit_start = 1 for(var/obj/machinery/power/grounding_rod/GR in machines) GR.anchored = TRUE GR.update_icon() for(var/obj/machinery/power/tesla_coil/TC in machines) TC.anchored = TRUE TC.update_icon() for(var/obj/structure/particle_accelerator/PA in machines) PA.anchored = TRUE PA.construction_state = 3 PA.update_icon() for(var/obj/machinery/particle_accelerator/PA in machines) PA.anchored = TRUE PA.construction_state = 3 PA.update_icon() for(var/obj/machinery/power/rad_collector/Rad in machines) if(Rad.anchored) if(!Rad.P) var/obj/item/weapon/tank/phoron/Phoron = new/obj/item/weapon/tank/phoron(Rad) Phoron.air_contents.gas["phoron"] = 70 Rad.drainratio = 0 Rad.P = Phoron Phoron.loc = Rad if(!Rad.active) Rad.toggle_power() /client/proc/setup_supermatter_engine() set category = "Debug" set name = "Setup supermatter" set desc = "Sets up the supermatter engine" if(!check_rights(R_DEBUG|R_ADMIN)) return var/response = tgui_alert(usr, "Are you sure? This will start up the engine. Should only be used during debug!","Setup Supermatter",list("Setup Completely","Setup except coolant","No")) if(response == "No") return var/found_the_pump = 0 var/obj/machinery/power/supermatter/SM for(var/obj/machinery/M in machines) if(!M) continue if(!M.loc) continue if(!M.loc.loc) continue if(istype(M.loc.loc,/area/engineering/engine_room)) if(istype(M,/obj/machinery/power/rad_collector)) var/obj/machinery/power/rad_collector/Rad = M Rad.anchored = TRUE Rad.connect_to_network() var/obj/item/weapon/tank/phoron/Phoron = new/obj/item/weapon/tank/phoron(Rad) Phoron.air_contents.gas["phoron"] = 29.1154 //This is a full tank if you filled it from a canister Rad.P = Phoron Phoron.loc = Rad if(!Rad.active) Rad.toggle_power() Rad.update_icon() else if(istype(M,/obj/machinery/atmospherics/binary/pump)) //Turning on every pump. var/obj/machinery/atmospherics/binary/pump/Pump = M if(Pump.name == "Engine Feed" && response == "Setup Completely") found_the_pump = 1 Pump.air2.gas["nitrogen"] = 3750 //The contents of 2 canisters. Pump.air2.temperature = 50 Pump.air2.update_values() Pump.update_use_power(USE_POWER_IDLE) Pump.target_pressure = 4500 Pump.update_icon() else if(istype(M,/obj/machinery/power/supermatter)) SM = M spawn(50) SM.power = 320 else if(istype(M,/obj/machinery/power/smes)) //This is the SMES inside the engine room. We don't need much power. var/obj/machinery/power/smes/SMES = M SMES.input_attempt = 1 SMES.input_level = 200000 SMES.output_level = 75000 else if(istype(M.loc.loc,/area/engineering/engine_smes)) //Set every SMES to charge and spit out 300,000 power between the 4 of them. if(istype(M,/obj/machinery/power/smes)) var/obj/machinery/power/smes/SMES = M SMES.input_attempt = 1 SMES.input_level = 200000 SMES.output_level = 75000 if(!found_the_pump && response == "Setup Completely") to_chat(src, "Unable to locate air supply to fill up with coolant, adding some coolant around the supermatter") var/turf/simulated/T = SM.loc T.zone.air.gas["nitrogen"] += 450 T.zone.air.temperature = 50 T.zone.air.update_values() log_admin("[key_name(usr)] setup the supermatter engine [response == "Setup except coolant" ? "without coolant" : ""]") message_admins("[key_name_admin(usr)] setup the supermatter engine [response == "Setup except coolant" ? "without coolant": ""]", 1) return /client/proc/cmd_debug_mob_lists() set category = "Debug" set name = "Debug Mob Lists" set desc = "For when you just gotta know" switch(tgui_input_list(usr, "Which list?", "List Choice", list("Players","Admins","Mobs","Living Mobs","Dead Mobs", "Clients"))) if("Players") to_chat(usr, span("filter_debuglogs", jointext(player_list,","))) if("Admins") to_chat(usr, span("filter_debuglogs", jointext(GLOB.admins,","))) if("Mobs") to_chat(usr, span("filter_debuglogs", jointext(mob_list,","))) if("Living Mobs") to_chat(usr, span("filter_debuglogs", jointext(living_mob_list,","))) if("Dead Mobs") to_chat(usr, span("filter_debuglogs", jointext(dead_mob_list,","))) if("Clients") to_chat(usr, span("filter_debuglogs", jointext(GLOB.clients,","))) /client/proc/cmd_debug_using_map() set category = "Debug" set name = "Debug Map Datum" set desc = "Debug the map metadata about the currently compiled in map." if(!check_rights(R_DEBUG)) return debug_variables(using_map) // DNA2 - Admin Hax /client/proc/cmd_admin_toggle_block(var/mob/M,var/block) if(!ticker) tgui_alert_async(usr, "Wait until the game starts") return if(istype(M, /mob/living/carbon)) M.dna.SetSEState(block,!M.dna.GetSEState(block)) domutcheck(M,null,MUTCHK_FORCED) M.update_mutations() var/state="[M.dna.GetSEState(block)?"on":"off"]" var/blockname=assigned_blocks[block] message_admins("[key_name_admin(src)] has toggled [M.key]'s [blockname] block [state]!") log_admin("[key_name(src)] has toggled [M.key]'s [blockname] block [state]!") else tgui_alert_async(usr, "Invalid mob") /datum/admins/proc/view_runtimes() set category = "Debug" set name = "View Runtimes" set desc = "Open the Runtime Viewer" if(!check_rights(R_DEBUG)) return error_cache.showTo(usr) /datum/admins/proc/change_weather() set category = "Debug" set name = "Change Weather" set desc = "Changes the current weather." if(!check_rights(R_DEBUG)) return var/datum/planet/planet = tgui_input_list(usr, "Which planet do you want to modify the weather on?", "Change Weather", SSplanets.planets) if(istype(planet)) var/datum/weather/new_weather = tgui_input_list(usr, "What weather do you want to change to?", "Change Weather", planet.weather_holder.allowed_weather_types) if(new_weather) planet.weather_holder.change_weather(new_weather) planet.weather_holder.rebuild_forecast() var/log = "[key_name(src)] changed [planet.name]'s weather to [new_weather]." message_admins(log) log_admin(log) /datum/admins/proc/toggle_firework_override() set category = "Fun" set name = "Toggle Weather Firework Override" set desc = "Toggles ability for weather fireworks to affect weather on planet of choice." if(!check_rights(R_DEBUG)) return var/datum/planet/planet = tgui_input_list(usr, "Which planet do you want to toggle firework effects on?", "Change Weather", SSplanets.planets) if(istype(planet) && planet.weather_holder) planet.weather_holder.firework_override = !(planet.weather_holder.firework_override) var/log = "[key_name(src)] toggled [planet.name]'s firework override to [planet.weather_holder.firework_override ? "on" : "off"]." message_admins(log) log_admin(log) /datum/admins/proc/change_time() set category = "Debug" set name = "Change Planet Time" set desc = "Changes the time of a planet." if(!check_rights(R_DEBUG)) return var/datum/planet/planet = tgui_input_list(usr, "Which planet do you want to modify time on?", "Change Time", SSplanets.planets) if(istype(planet)) var/datum/time/current_time_datum = planet.current_time var/new_hour = tgui_input_number(usr, "What hour do you want to change to?", "Change Time", text2num(current_time_datum.show_time("hh"))) if(!isnull(new_hour)) var/new_minute = tgui_input_number(usr, "What minute do you want to change to?", "Change Time", text2num(current_time_datum.show_time("mm")) ) if(!isnull(new_minute)) var/type_needed = current_time_datum.type var/datum/time/new_time = new type_needed() new_time = new_time.add_hours(new_hour) new_time = new_time.add_minutes(new_minute) planet.current_time = new_time spawn(1) planet.update_sun() var/log = "[key_name(src)] changed [planet.name]'s time to [planet.current_time.show_time("hh:mm")]." message_admins(log) log_admin(log)