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