/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#*´&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++