diff --git a/code/datums/helper_datums/tension.dm b/code/datums/helper_datums/tension.dm index 0a5a7a153c6..a10682869d7 100644 --- a/code/datums/helper_datums/tension.dm +++ b/code/datums/helper_datums/tension.dm @@ -228,6 +228,9 @@ var/global/datum/tension/tension_master spawn(6000) supress = 0 + else if (href_list["ToggleStatus"]) + config.Tensioner_Active = !config.Tensioner_Active + proc/makeMalfAImode() @@ -235,7 +238,7 @@ var/global/datum/tension/tension_master var/mob/living/silicon/malfAI = null var/datum/mind/themind = null - for(var/mob/living/silicon/ai in world) + for(var/mob/living/silicon/ai/ai in world) if(ai.client) AIs += ai diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index f39138fd25c..e7ffe922c50 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -187,7 +187,7 @@ Malf AIs/silicons aren't added. Monkeys aren't added. Messes with objective comp if(sent_strike_team&&side=="heel"&&antagonist_list.len)//If a strike team was sent, murder them all like a champ. for(current_mind in antagonist_list)//Search and destroy. Since we already have an antagonist list, they should appear there. - if(current_mind.special_role=="Death Commando") + if(current_mind && current_mind.special_role=="Death Commando") commando_list += current_mind if(commando_list.len)//If there are living commandos still in play. for(var/mob/living/carbon/human/commando in commando_list) @@ -232,10 +232,14 @@ In either case, it's a good idea to spawn the ninja with a semi-random set of ob if(1)//kill current_mind = pick(hostile_targets) - var/datum/objective/assassinate/ninja_objective = new - ninja_objective.owner = ninja_mind - ninja_objective.find_target_by_role((current_mind.special_role ? current_mind.special_role : current_mind.assigned_role),(current_mind.special_role?1:0))//If they have a special role, use that instead to find em. - ninja_mind.objectives += ninja_objective + if(current_mind) + var/datum/objective/assassinate/ninja_objective = new + ninja_objective.owner = ninja_mind + ninja_objective.find_target_by_role((current_mind.special_role ? current_mind.special_role : current_mind.assigned_role),(current_mind.special_role?1:0))//If they have a special role, use that instead to find em. + ninja_mind.objectives += ninja_objective + + else + i++ hostile_targets -= current_mind//Remove them from the list. if(2)//Steal @@ -248,19 +252,29 @@ In either case, it's a good idea to spawn the ninja with a semi-random set of ob if(3)//Protect. Keeping people alive can be pretty difficult. current_mind = pick(friendly_targets) - var/datum/objective/protect/ninja_objective = new - ninja_objective.owner = ninja_mind - ninja_objective.find_target_by_role((current_mind.special_role ? current_mind.special_role : current_mind.assigned_role),(current_mind.special_role?1:0)) - ninja_mind.objectives += ninja_objective + if(current_mind) + + var/datum/objective/protect/ninja_objective = new + ninja_objective.owner = ninja_mind + ninja_objective.find_target_by_role((current_mind.special_role ? current_mind.special_role : current_mind.assigned_role),(current_mind.special_role?1:0)) + ninja_mind.objectives += ninja_objective + + else + i++ friendly_targets -= current_mind if(4)//Debrain current_mind = pick(hostile_targets) - var/datum/objective/debrain/ninja_objective = new - ninja_objective.owner = ninja_mind - ninja_objective.find_target_by_role((current_mind.special_role ? current_mind.special_role : current_mind.assigned_role),(current_mind.special_role?1:0)) - ninja_mind.objectives += ninja_objective + if(current_mind) + + var/datum/objective/debrain/ninja_objective = new + ninja_objective.owner = ninja_mind + ninja_objective.find_target_by_role((current_mind.special_role ? current_mind.special_role : current_mind.assigned_role),(current_mind.special_role?1:0)) + ninja_mind.objectives += ninja_objective + + else + i++ hostile_targets -= current_mind//Remove them from the list. if(5)//Download research diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index e6880eb09a7..a4492b2b3d7 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -112,7 +112,7 @@ if (href_list["time"]) var/time = text2num(href_list["time"]) src.timeleft += time - src.timeleft = min(max(round(src.timeleft), 5), 600) + src.timeleft = min(max(round(src.timeleft), 60), 600) if (href_list["timer"]) if (src.timing == -1.0) return @@ -217,9 +217,9 @@ /obj/item/weapon/disk/nuclear/Del() - if (ticker.mode && ticker.mode.name == "nuclear emergency") - if(blobstart.len > 0) - var/obj/D = new /obj/item/weapon/disk/nuclear(pick(blobstart)) - message_admins("[src] has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).") - log_game("[src] has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).") - ..() +// if (ticker.mode && ticker.mode.name == "nuclear emergency") + if(blobstart.len > 0) + var/obj/D = new /obj/item/weapon/disk/nuclear(pick(blobstart)) + message_admins("[src] has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).") + log_game("[src] has been destroyed. Spawning [D] at ([D.x], [D.y], [D.z]).") +..() diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 47fb555059e..e0dd9ed0544 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -41,6 +41,12 @@ icon_state = "pinonfar" spawn(5) .() + examine() + ..() + for(var/obj/machinery/nuclearbomb/bomb in world) + if(bomb.timing) + usr << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]" + /obj/item/weapon/pinpointer/advpinpointer name = "Advanced Pinpointer" diff --git a/code/game/turf.dm b/code/game/turf.dm index 7aa015542db..a5c9b66c80e 100644 --- a/code/game/turf.dm +++ b/code/game/turf.dm @@ -1269,18 +1269,8 @@ turf/simulated/floor/return_siding_icon_state() // Okay, so let's make it so that people can travel z levels but not nuke disks! // if(ticker.mode.name == "nuclear emergency") return - - if(istype(A, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks travel Z levels - return - - if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear))) - if(istype(A, /mob/living)) - var/mob/living/MM = A - if(MM.client) - MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is." - return - - else if(ticker.mode.name == "extended"||ticker.mode.name == "sandbox") Sandbox_Spacemove(A) + if(ticker.mode.name == "extended"||ticker.mode.name == "sandbox") + Sandbox_Spacemove(A) else if (src.x <= 2 || A.x >= (world.maxx - 1) || src.y <= 2 || A.y >= (world.maxy - 1)) @@ -1288,6 +1278,18 @@ turf/simulated/floor/return_siding_icon_state() del(A) return + if(istype(A, /obj/item/weapon/disk/nuclear)) // Don't let nuke disks travel Z levels ... And moving this shit down here so it only fires when they're actually trying to change z-level. + return + + if(!isemptylist(A.search_contents_for(/obj/item/weapon/disk/nuclear))) + if(istype(A, /mob/living)) + var/mob/living/MM = A + if(MM.client) + MM << "\red Something you are carrying is preventing you from leaving. Don't play stupid; you know exactly what it is." + return + + + var/move_to_z_str = pickweight(accessable_z_levels) var/move_to_z = text2num(move_to_z_str) @@ -1295,8 +1297,11 @@ turf/simulated/floor/return_siding_icon_state() if(!move_to_z) return + + A.z = move_to_z + if(src.x <= 2) A.x = world.maxx - 2 diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index c8ab5664db1..8868bd5da51 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -205,6 +205,7 @@ verbs += /client/proc/tension_report verbs += /client/proc/jumptocoord verbs += /client/proc/deadmin_self + verbs += /client/proc/startSinglo if (holder.level >= 3)//Trial Admin******************************************************************** verbs += /obj/admins/proc/toggleaban //abandon mob @@ -414,6 +415,7 @@ verbs -= /client/proc/toggle_gravity_off verbs -= /client/proc/toggle_random_events verbs -= /client/proc/deadmin_self + verbs -= /client/proc/startSinglo verbs -= /client/proc/jumptocoord verbs -= /client/proc/everyone_random verbs -= /client/proc/cmd_switch_radio @@ -701,6 +703,38 @@ admins.Remove(src.ckey) usr << "You are now a normal player." +/client/proc/startSinglo() + set name = "Singlo Starter" + set category = "Debug" + set desc = "Starts a self-sustaining, stable singlo. This artifical singlo does not have a gravitational pull." + + for(var/obj/machinery/emitter/E in world) + if(E.anchored) + E.active = 1 + + for(var/obj/machinery/field_generator/F in world) + if(F.anchored) + F.Varedit_start = 1 + spawn(30) + for(var/obj/machinery/the_singularitygen/G in world) + if(G.anchored) + var/obj/machinery/singularity/S = new /obj/machinery/singularity(get_turf(G), 50) + spawn(0) + del(G) + S.energy = 1750 + S.current_size = 7 + S.icon = '224x224.dmi' + S.icon_state = "singularity_s7" + S.pixel_x = -96 + S.pixel_y = -96 + S.grav_pull = 0 + //S.consume_range = 3 + S.dissipate = 0 + //S.dissipate_delay = 10 + //S.dissipate_track = 0 + //S.dissipate_strength = 10 + + /client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs set name = "Toggle most admin verb visibility" set category = "Admin" diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index e2285de931b..f585110bf6c 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -227,6 +227,7 @@ Increase Tension by 50000
Tension per player: [tension_master.score/tension_master.get_num_players()]
Tensioner Debug Data: R1:[tension_master.round1] R2:[tension_master.round2] R3:[tension_master.round3] R4:[tension_master.round4] ES: [tension_master.eversupressed] CD: [tension_master.cooldown]
+Current Tensioner Status: [config.Tensioner_Active]. Toggle?
" Recommendations: All the modes. All of them. Press all of them.