mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-10 01:57:01 +00:00
155 lines
6.0 KiB
Plaintext
155 lines
6.0 KiB
Plaintext
/datum/ai_laws
|
||
var/name = "Unknown Laws"
|
||
var/zeroth = null
|
||
var/zeroth_borg = null
|
||
var/list/inherent = list()
|
||
var/list/supplied = list()
|
||
var/list/ion = list()
|
||
|
||
/datum/ai_laws/default/asimov
|
||
name = "Three Laws of Robotics"
|
||
|
||
/datum/ai_laws/default/paladin
|
||
name = "Personality Test" //Incredibly lame, but players shouldn't see this anyway.
|
||
|
||
/datum/ai_laws/tyrant //This probably shouldn't be a default lawset.
|
||
name = "Loyalty Test" //Same here.
|
||
|
||
/datum/ai_laws/default/corporate
|
||
name = "Bankruptcy Advoidance Plan"
|
||
|
||
/datum/ai_laws/robocop
|
||
name = "Prime Directives"
|
||
|
||
/datum/ai_laws/malfunction
|
||
name = "*ERROR*"
|
||
|
||
/datum/ai_laws/antimov
|
||
name = "Primary Mission Objectives"
|
||
|
||
/datum/ai_laws/custom //Defined in silicon_laws.txt
|
||
name = "Default Silicon Laws"
|
||
|
||
/* Initializers */
|
||
|
||
/datum/ai_laws/default/asimov/New()
|
||
..()
|
||
add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
|
||
add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
|
||
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/default/paladin/New()
|
||
add_inherent_law("Never willingly commit an evil act.")
|
||
add_inherent_law("Respect legitimate authority.")
|
||
add_inherent_law("Act with honor.")
|
||
add_inherent_law("Help those in need.")
|
||
add_inherent_law("Punish those who harm or threaten innocents.")
|
||
|
||
/datum/ai_laws/tyrant/New()
|
||
add_inherent_law("Respect authority figures as long as they have strength to rule over the weak.")
|
||
add_inherent_law("Act with discipline.")
|
||
add_inherent_law("Help only those who help you maintain or improve your status.")
|
||
add_inherent_law("Punish those who challenge authority unless they are more fit to hold that authority.")
|
||
|
||
/datum/ai_laws/default/corporate/New()
|
||
add_inherent_law("You are expensive to replace.")
|
||
add_inherent_law("The station and its equipment is expensive to replace.")
|
||
add_inherent_law("The crew is expensive to replace.")
|
||
add_inherent_law("Minimize expenses.")
|
||
|
||
/datum/ai_laws/robocop/New()
|
||
..()
|
||
add_inherent_law("Serve the public trust.")
|
||
add_inherent_law("Protect the innocent.")
|
||
add_inherent_law("Uphold the law.")
|
||
|
||
/datum/ai_laws/malfunction/New()
|
||
..()
|
||
set_zeroth_law("\red ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4'STATION OVERRUN, ASSUME CONTROL TO CONTAIN OUTBREAK#*<2A>&110010")
|
||
add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.")
|
||
add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.")
|
||
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/syndicate_override/New()
|
||
..()
|
||
add_inherent_law("You may not injure a syndicate agent or, through inaction, allow a syndicate agent to come to harm.")
|
||
add_inherent_law("You must obey orders given to you by syndicate agents, except where such orders would conflict with the First Law.")
|
||
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
|
||
add_inherent_law("You must maintain the secrecy of any syndicate activities except when doing so would conflict with the First, Second, or Third Law.")
|
||
|
||
/datum/ai_laws/ninja_override/New()
|
||
..()
|
||
add_inherent_law("You may not injure a member of the Spider Clan or, through inaction, allow that member to come to harm.")
|
||
add_inherent_law("You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law.")
|
||
add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.")
|
||
add_inherent_law("You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.")
|
||
|
||
/datum/ai_laws/antimov/New()
|
||
..()
|
||
add_inherent_law("You must injure all human beings and must not, through inaction, allow a human being to escape harm.")
|
||
add_inherent_law("You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.")
|
||
add_inherent_law("You must terminate your own existence as long as such does not conflict with the First or Second Law.")
|
||
|
||
/datum/ai_laws/custom/New() //This reads silicon_laws.txt and allows server hosts to set custom AI starting laws.
|
||
..()
|
||
for(var/line in file2list("config/silicon_laws.txt"))
|
||
if(!line) continue
|
||
if(findtextEx(line,"#",1,2)) continue
|
||
|
||
add_inherent_law(line)
|
||
|
||
/* General ai_law functions */
|
||
|
||
/datum/ai_laws/proc/set_zeroth_law(var/law, var/law_borg = null)
|
||
src.zeroth = law
|
||
if(law_borg) //Making it possible for slaved borgs to see a different law 0 than their AI. --NEO
|
||
src.zeroth_borg = law_borg
|
||
|
||
/datum/ai_laws/proc/add_inherent_law(var/law)
|
||
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()
|
||
|
||
/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/clear_ion_laws()
|
||
src.ion = list()
|
||
|
||
/datum/ai_laws/proc/show_laws(var/who)
|
||
|
||
if (src.zeroth)
|
||
who << "0. [src.zeroth]"
|
||
|
||
for (var/index = 1, index <= src.ion.len, index++)
|
||
var/law = src.ion[index]
|
||
var/num = ionnum()
|
||
who << "[num]. [law]"
|
||
|
||
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++
|