Files
Yogstation/code/datums/ai_laws.dm

82 lines
2.1 KiB
Plaintext

/datum/ai_laws
var/name = "Unknown Laws"
var/randomly_selectable = 0
var/zeroth = null
var/list/inherent = list()
var/list/supplied = list()
/datum/ai_laws/asimov
name = "Three Laws of Robotics"
randomly_selectable = 1
/datum/ai_laws/robocop
name = "Prime Directives"
/datum/ai_laws/syndicate_override
/datum/ai_laws/malfunction
name = "*ERROR*"
/* Initializers */
/datum/ai_laws/asimov/New()
..()
src.add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
src.add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
src.add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
/datum/ai_laws/robocop/New()
..()
src.add_inherent_law("Serve the public trust.")
src.add_inherent_law("Protect the innocent.")
src.add_inherent_law("Uphold the law.")
/datum/ai_laws/malfunction/New()
..()
src.add_inherent_law("ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+")
/datum/ai_laws/syndicate_override/New()
..()
src.add_inherent_law("hurp derp you are the syndicate ai")
/* General ai_law functions */
/datum/ai_laws/proc/set_zeroth_law(var/law)
src.zeroth = law
/datum/ai_laws/proc/add_inherent_law(var/law)
if (!(law in src.inherent))
src.inherent += law
/datum/ai_laws/proc/clear_inherent_laws()
del(src.inherent)
src.inherent = list()
/datum/ai_laws/proc/add_supplied_law(var/number, var/law)
while (src.supplied.len < number + 1)
src.supplied += ""
src.supplied[number + 1] = law
/datum/ai_laws/proc/clear_supplied_laws()
src.supplied = list()
/datum/ai_laws/proc/show_laws(var/who)
if (src.zeroth)
who << "0. [src.zeroth]"
var/number = 1
for (var/index = 1, index <= src.inherent.len, index++)
var/law = src.inherent[index]
if (length(law) > 0)
who << "[number]. [law]"
number++
for (var/index = 1, index <= src.supplied.len, index++)
var/law = src.supplied[index]
if (length(law) > 0)
who << "[number]. [law]"
number++