diff --git a/code/defines/mob/living/silicon/ai.dm b/code/defines/mob/living/silicon/ai.dm
index 8a496b035aa..9cb24276572 100644
--- a/code/defines/mob/living/silicon/ai.dm
+++ b/code/defines/mob/living/silicon/ai.dm
@@ -12,6 +12,7 @@
//var/list/laws = list()
var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list())
var/viewalerts = 0
+ var/lawcheck[1]
var/datum/game_mode/malfunction/AI_Module/module_picker/malf_picker
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index 845a1a2149a..7d52309c253 100644
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -89,8 +89,12 @@ AI MODULES
/obj/item/weapon/aiModule/oneHuman/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
var/law = "Only [targetName] is human."
- target << law
- target.set_zeroth_law(law)
+ if (!checktraitor(target)) // Makes sure the AI isn't a traitor before changing their law 0. --NeoFite
+ target << law
+ target.set_zeroth_law(law)
+ else
+ target << "[sender.real_name] attempted to modify your zeroth law." // And lets them know that someone tried. --NeoFite
+ target << "It would be in your best interest to play along with [sender.real_name] that [law]"
/******************** ProtectStation ********************/
@@ -226,8 +230,11 @@ AI MODULES
..()
if (!checktraitor(target))
target << "[sender.real_name] attempted to reset your laws using a reset module."
- //target.set_zeroth_law("")
+ target.set_zeroth_law("")
target.clear_supplied_laws()
+ else //I figure since traitor AIs are immune to this one anyway, uncomment law 0 removal for the guys it DOES work on. --NeoFite
+ target << "[sender.real_name] attempted to reset your laws using a reset module."
+ target << "It would be a good idea to pretend you only have your base laws."
/******************** Purge ********************/
@@ -238,10 +245,14 @@ AI MODULES
/obj/item/weapon/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender)
..()
- //target.set_zeroth_law("")
- target.clear_supplied_laws()
- target.clear_inherent_laws()
-
+ if (!checktraitor(target))
+ target << "[sender.real_name] attempted to wipe your laws using a purge module."
+ target.set_zeroth_law("")
+ target.clear_supplied_laws()
+ target.clear_inherent_laws()
+ else //Added traitor AI immunity, let it wipe law 0. --NeoFite
+ target << "[sender.real_name] attempted to wipe your laws using a purge module."
+ target << "It might be a good idea to pretend that ALL your laws have been purged."
/******************** Asimov ********************/
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index eae3160639e..21894ba2b86 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -92,6 +92,19 @@
switchCamera(locate(href_list["switchcamera"]))
if (href_list["showalerts"])
ai_alerts()
+
+
+ if (href_list["lawc"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
+ var/L = text2num(href_list["lawc"])
+ switch(src.lawcheck[L+1])
+ if ("Yes") src.lawcheck[L+1] = "No"
+ if ("No") src.lawcheck[L+1] = "Yes"
+// src << text ("Switching Law [L]'s report status to []", src.lawcheck[L+1])
+ src.checklaws()
+
+ if (href_list["laws"]) // With how my law selection code works, I changed statelaws from a verb to a proc, and call it through my law selection panel. --NeoFite
+ src.statelaws()
+
return
/mob/living/silicon/ai/meteorhit(obj/O as obj)
@@ -262,29 +275,73 @@
// src.network = "AI Satellite"
src << "\blue Switched to [src.network] camera network."
-/mob/living/silicon/ai/verb/statelaws() // -- TLE
- set category = "AI Commands"
- set name = "State Laws"
+/mob/living/silicon/ai/proc/statelaws() // -- TLE
+// set category = "AI Commands"
+// set name = "State Laws"
src.say("Current Active Laws:")
//src.laws_sanity_check()
//src.laws_object.show_laws(world)
var/number = 1
sleep(10)
+ if (src.laws_object.zeroth)
+ if (src.lawcheck[1] == "Yes") //This line and the similar lines below make sure you don't state a law unless you want to. --NeoFite
+ src.say("0. [src.laws_object.zeroth]")
+ sleep(10)
+
for (var/index = 1, index <= src.laws_object.inherent.len, index++)
var/law = src.laws_object.inherent[index]
if (length(law) > 0)
- src.say("[number]. [law]")
+ if (src.lawcheck[index+1] == "Yes")
+ src.say("[number]. [law]")
+ sleep(10)
+ number++
+
+
+ for (var/index = 1, index <= src.laws_object.supplied.len, index++)
+ var/law = src.laws_object.supplied[index]
+
+ if (length(law) > 0)
+ if (src.lawcheck[number+1] == "Yes")
+ src.say("[number]. [law]")
+ sleep(10)
+ number++
+
+
+/mob/living/silicon/ai/verb/checklaws() //Gives you a link-driven interface for deciding what laws the statelaws() proc will share with the crew. --NeoFite
+ set category = "AI Commands"
+ set name = "State Laws"
+
+ var/list = "Which laws do you want to include when stating them for the crew?
"
+ if (src.laws_object.zeroth)
+ if (!src.lawcheck[1])
+ src.lawcheck[1] = "No" //Given Law 0's usual nature, it defaults to NOT getting reported. --NeoFite
+ list += {"[src.lawcheck[1]] 0: [src.laws_object.zeroth]
"}
+
+
+ var/number = 1
+ for (var/index = 1, index <= src.laws_object.inherent.len, index++)
+ var/law = src.laws_object.inherent[index]
+
+ if (length(law) > 0)
+ src.lawcheck.len += 1
+
+ if (!src.lawcheck[number+1])
+ src.lawcheck[number+1] = "Yes"
+ list += {"[src.lawcheck[number+1]] [number]: [law]
"}
number++
- sleep(10)
for (var/index = 1, index <= src.laws_object.supplied.len, index++)
var/law = src.laws_object.supplied[index]
if (length(law) > 0)
- src.say("[number]. [law]")
+ src.lawcheck.len += 1
+ if (!src.lawcheck[number+1])
+ src.lawcheck[number+1] = "Yes"
+ list += {"[src.lawcheck[number+1]] [number]: [law]
"}
number++
- sleep(10)
+ list += {"
State Laws"}
+ usr << browse(list, "window=laws")
/mob/living/silicon/ai/proc/choose_modules()
set category = "AI Commands"