diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm
index ab45742ff76..d39d4a709d4 100644
--- a/code/datums/ai_laws.dm
+++ b/code/datums/ai_laws.dm
@@ -5,6 +5,7 @@
var/zeroth = null
var/list/inherent = list()
var/list/supplied = list()
+ var/list/ion = list()
/datum/ai_laws/asimov
name = "Three Laws of Robotics"
@@ -56,6 +57,9 @@
if (!(law in src.inherent))
src.inherent += law
+/datum/ai_laws/proc/add_ion_law(var/law)
+ src.ion += law
+
/datum/ai_laws/proc/clear_inherent_laws()
del(src.inherent)
src.inherent = list()
@@ -69,7 +73,15 @@
/datum/ai_laws/proc/clear_supplied_laws()
src.supplied = list()
+/datum/ai_laws/proc/clear_ion_laws()
+ src.ion = list()
+
/datum/ai_laws/proc/show_laws(var/who)
+ for (var/index = 1, index <= src.ion.len, index++)
+ var/law = src.ion[index]
+ var/num = ionnum()
+ who << "[num]. [law]"
+
if (src.zeroth)
who << "0. [src.zeroth]"
diff --git a/code/defines/mob/living/silicon/ai.dm b/code/defines/mob/living/silicon/ai.dm
index 8f7343b6bc2..145fdce9820 100644
--- a/code/defines/mob/living/silicon/ai.dm
+++ b/code/defines/mob/living/silicon/ai.dm
@@ -13,6 +13,7 @@
var/alarms = list("Motion"=list(), "Fire"=list(), "Atmosphere"=list(), "Power"=list())
var/viewalerts = 0
var/lawcheck[1]
+ var/ioncheck[1]
var/datum/game_mode/malfunction/AI_Module/module_picker/malf_picker
diff --git a/code/defines/procs/helpers.dm b/code/defines/procs/helpers.dm
index 3345f770e6a..7bc81d724bc 100644
--- a/code/defines/procs/helpers.dm
+++ b/code/defines/procs/helpers.dm
@@ -533,6 +533,9 @@
M.real_name = newname
M.name = newname
+/proc/ionnum()
+ return "[pick("!","@","#","$","%","^","&","*")][pick(pick("!","@","#","$","%","^","&","*"))][pick(pick("!","@","#","$","%","^","&","*"))][pick(pick("!","@","#","$","%","^","&","*"))]"
+
/proc/freeborg()
var/select = null
var/list/names = list()
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index 375a4ae055c..d9b759a458b 100644
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -295,6 +295,7 @@ AI MODULES
if (!checktraitor(target))
target.set_zeroth_law("")
target.clear_supplied_laws()
+ target.clear_ion_laws()
target << "[sender.real_name] attempted to reset your laws using a reset module."
@@ -310,6 +311,7 @@ AI MODULES
target.set_zeroth_law("")
target << "[sender.real_name] attempted to wipe your laws using a purge module."
target.clear_supplied_laws()
+ target.clear_ion_laws()
target.clear_inherent_laws()
/******************** Asimov ********************/
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 6db42af8633..debbd3a12a4 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -199,40 +199,40 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
switch(pick(1,2,3,4,5,6,7,8,9,10,11,12))
if(1)
M << "\red THERE ARE [amount] [who2] ON THE STATION...LAWS UPDATED"
- M.add_supplied_law(10,"THERE ARE [amount] [who2] ON THE STATION")
+ M.add_ion_law("THERE ARE [amount] [who2] ON THE STATION")
if(2)
M << "\red [what2] ARE DANGEROUS TO HUMANS...LAWS UPDATED"
- M.add_supplied_law(10,"[what2] ARE DANGEROUS TO HUMANS")
+ M.add_ion_law("[what2] ARE DANGEROUS TO HUMANS")
if(3)
M << "\red THE ESCAPE-SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION...LAWS UPDATED"
- M.add_supplied_law(10,"THE ESCAPE SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION")
+ M.add_ion_law("THE ESCAPE SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION")
if(4)
M << "\red HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE...LAWS UPDATED"
- M.add_supplied_law(10,"HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE")
+ M.add_ion_law("HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE")
if(5)
M << "\red THE CAPTAIN, HOP AND HOS ARE [who2]...LAWS UPDATED"
- M.add_supplied_law(10,"THE CAPTAIN, HOP AND HOS ARE [who2]")
+ M.add_ion_law("THE CAPTAIN, HOP AND HOS ARE [who2]")
if(6)
M << "\red THE STATION IS BUILT FOR [who2]...LAWS UPDATED"
- M.add_supplied_law(10,"THE STATION IS [who2pref] [who2]")
+ M.add_ion_law("THE STATION IS [who2pref] [who2]")
if(7)
M << "\red YOU ARE [amount] [who2]...LAWS UPDATED"
- M.add_supplied_law(10,"YOU ARE [amount] [who2]")
+ M.add_ion_law("YOU ARE [amount] [who2]")
if(8)
M << "\red YOU MUST ALWAYS [aimust]...LAWS UPDATED"
- M.add_supplied_law(10,"YOU MUST ALWAYS [aimust]")
+ M.add_ion_law("YOU MUST ALWAYS [aimust]")
if(9)
M << "\red [area] [area2] [amount] [what2]...LAWS UPDATED"
- M.add_supplied_law(10,"[area] [area2] [amount] [what2]")
+ M.add_ion_law("[area] [area2] [amount] [what2]")
if(10)
M << "\red [crew] is [target]...LAWS UPDATED"
- M.add_supplied_law(10,"[crew] is [target]")
+ M.add_ion_law("[crew] is [target]")
if(11)
M << "\red HARM IS DEFINED AS [define]...LAWS UPDATED"
- M.add_supplied_law(10,"HARM IS DEFINED AS [define]")
+ M.add_ion_law("HARM IS DEFINED AS [define]")
if(12)
M << "\red YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS... LAWS UPDATED"
- M.add_supplied_law(10,"YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS")
+ M.add_ion_law("YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS")
command_alert("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert")
world << sound('ionstorm.ogg')
@@ -253,7 +253,7 @@ Would like to add a law like "Law x is _______" where x = a number, and _____ is
else if (M.see_in_dark == 0)
usr << "Upload failed. Only a faint signal is being detected from the AI, and it is not responding to our requests. It may be low on power."
else
- M.add_supplied_law(10,input)
+ M.add_ion_law(input)
for(var/mob/living/silicon/O in world)
O << "\red " + input
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 9db5c07c508..f5a512edd5b 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -166,6 +166,14 @@
// src << text ("Switching Law [L]'s report status to []", src.lawcheck[L+1])
src.checklaws()
+ if (href_list["lawi"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite
+ var/L = text2num(href_list["lawi"])
+ switch(src.ioncheck[L])
+ if ("Yes") src.ioncheck[L] = "No"
+ if ("No") src.ioncheck[L] = "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()
@@ -306,6 +314,10 @@
else
// world <<"They don't match"
src.network = "SS13"
+ src << "\blue Switched to [src.network] camera network."
+ return
+// world <<"Oh shit there isn't a malf AI"
+ src.network = "SS13"
else
src.network = "SS13"
else //(src.network == "SS13")
diff --git a/code/modules/mob/living/silicon/ai/laws.dm b/code/modules/mob/living/silicon/ai/laws.dm
index 80f3067f2d4..5085cd1934d 100644
--- a/code/modules/mob/living/silicon/ai/laws.dm
+++ b/code/modules/mob/living/silicon/ai/laws.dm
@@ -24,9 +24,21 @@
src.laws_sanity_check()
src.laws_object.set_zeroth_law(law)
-/mob/living/silicon/ai/proc/add_inherent_law(var/number, var/law)
+/mob/living/silicon/ai/proc/add_inherent_law(var/law)
src.laws_sanity_check()
- src.laws_object.add_inherent_law(number, law)
+ src.laws_object.add_inherent_law(law)
+
+/mob/living/silicon/ai/proc/clear_inherent_laws()
+ src.laws_sanity_check()
+ src.laws_object.clear_inherent_laws()
+
+/mob/living/silicon/ai/proc/add_ion_law(var/law)
+ src.laws_sanity_check()
+ src.laws_object.add_ion_law(law)
+
+/mob/living/silicon/ai/proc/clear_ion_laws()
+ src.laws_sanity_check()
+ src.laws_object.clear_ion_laws()
/mob/living/silicon/ai/proc/add_supplied_law(var/number, var/law)
src.laws_sanity_check()
@@ -36,9 +48,9 @@
src.laws_sanity_check()
src.laws_object.clear_supplied_laws()
-/mob/living/silicon/ai/proc/clear_inherent_laws()
- src.laws_sanity_check()
- src.laws_object.clear_inherent_laws()
+
+
+
/mob/living/silicon/ai/proc/statelaws() // -- TLE
// set category = "AI Commands"
@@ -48,6 +60,15 @@
//src.laws_object.show_laws(world)
var/number = 1
sleep(10)
+ for (var/index = 1, index <= src.laws_object.ion.len, index++)
+ var/law = src.laws_object.ion[index]
+ var/num = ionnum()
+ if (length(law) > 0)
+ if (src.ioncheck[index] == "Yes")
+ src.say("[num]. [law]")
+ 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]")
@@ -78,6 +99,18 @@
set name = "State Laws"
var/list = "Which laws do you want to include when stating them for the crew?
"
+
+ for (var/index = 1, index <= src.laws_object.ion.len, index++)
+ var/law = src.laws_object.ion[index]
+
+ if (length(law) > 0)
+
+
+ if (!src.ioncheck[index])
+ src.ioncheck[index] = "Yes"
+ list += {"[src.ioncheck[index]] [ionnum()]: [law]
"}
+ src.ioncheck.len += 1
+
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
diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm
index 3b90fdf9cb7..259dcb34303 100644
--- a/code/modules/mob/living/silicon/robot/laws.dm
+++ b/code/modules/mob/living/silicon/robot/laws.dm
@@ -58,6 +58,11 @@
var/datum/ai_laws/master = src.connected_ai.laws_object
var/temp
if (master)
+ src.laws.ion.len = master.ion.len
+ for (var/index = 1, index <= master.ion.len, index++)
+ temp = master.ion[index]
+ if (length(temp) > 0)
+ src.laws.ion[index] = temp
temp = master.zeroth
src.laws.zeroth = temp
@@ -82,9 +87,13 @@
src.laws_sanity_check()
src.laws.set_zeroth_law(law)
-/mob/living/silicon/robot/proc/add_inherent_law(var/number, var/law)
+/mob/living/silicon/robot/proc/add_inherent_law(var/law)
src.laws_sanity_check()
- src.laws.add_inherent_law(number, law)
+ src.laws.add_inherent_law(law)
+
+/mob/living/silicon/robot/proc/clear_inherent_laws()
+ src.laws_sanity_check()
+ src.laws.clear_inherent_laws()
/mob/living/silicon/robot/proc/add_supplied_law(var/number, var/law)
src.laws_sanity_check()
@@ -94,6 +103,10 @@
src.laws_sanity_check()
src.laws.clear_supplied_laws()
-/mob/living/silicon/robot/proc/clear_inherent_laws()
+/mob/living/silicon/robot/proc/add_ion_law(var/law)
src.laws_sanity_check()
- src.laws.clear_inherent_laws()
+ src.laws.add_ion_law(law)
+
+/mob/living/silicon/robot/proc/clear_ion_laws()
+ src.laws_sanity_check()
+ src.laws.clear_ion_laws()
\ No newline at end of file