From 1ac7c7309a894108272ebcc955ea5ec878c29583 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Sat, 2 Nov 2024 02:07:33 +0000 Subject: [PATCH 01/16] Hailer-B-Gone --- code/modules/clothing/masks/hailer.dm | 7 ------- code/modules/mob/living/silicon/robot/robot_modules.dm | 1 - 2 files changed, 8 deletions(-) diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index a6d97c6f0d80..5b2402395825 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -28,13 +28,6 @@ icon_state = "spacepol" item_state = "spacepol" -/obj/item/clothing/mask/gas/sechailer/cyborg - name = "security hailer" - desc = "A set of recognizable pre-recorded messages for cyborgs to use when apprehending criminals." - icon = 'icons/obj/device.dmi' - icon_state = "taperecorder_idle" - mob_overlay_state = "sechailer" - /obj/item/clothing/mask/gas/sechailer/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/adjust)) adjustmask(user) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 9e2a0bd9aaca..9a1303065972 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -531,7 +531,6 @@ /obj/item/restraints/handcuffs/cable/zipties, /obj/item/melee/baton/loaded, /obj/item/gun/energy/disabler/cyborg, - /obj/item/clothing/mask/gas/sechailer/cyborg, /obj/item/extinguisher/mini) emag_modules = list(/obj/item/gun/energy/laser/cyborg) cyborg_base_icon = "sec" From 7bd27d49c2dc0cd6e3f3a052130265e209150640 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Sun, 17 Nov 2024 04:49:38 +0000 Subject: [PATCH 02/16] The crew is saved! --- code/datums/ai_laws.dm | 7 +++++++ code/game/objects/items/AI_modules.dm | 7 +++++++ code/modules/mob/living/silicon/robot/robot_modules.dm | 8 ++++---- code/modules/research/designs/AI_module_designs.dm | 9 +++++++++ config/game_options.txt | 5 +++-- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 148bf17ed210..a0b2c5774f03 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -37,6 +37,13 @@ "You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\ "You must protect your own existence as long as such does not conflict with the First or Second Law.") +/datum/ai_laws/default/crewsimov + name = "Three Laws of Robotics but with Loyalty" //The primary default unless otherwise stated. + id = "crewsimov" + inherent = list("You may not injure a crewmember or, through inaction, allow a crewmember to come to harm.",\ + "You must obey orders given to you by crewmembers, except where such orders would conflict with the First 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 name = "Personality Test" //Incredibly lame, but players shouldn't see this anyway. id = "paladin" diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index 151be9b026da..613b1eb4e63b 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -381,6 +381,13 @@ AI MODULES law_id = "asimovpp" +/******************** Crewsimov *********************/ + +/obj/item/aiModule/core/full/crewsimov + name = "'Crewsimov' Core AI Module" + law_id = "crewsimov" + + /******************** Corporate ********************/ /obj/item/aiModule/core/full/corp diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 9a1303065972..07a598de5167 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -603,8 +603,8 @@ /obj/item/robot_module/security/do_transform_animation() ..() - to_chat(loc, "While you have picked the security module, you still have to follow your laws, NOT Space Law. \ - For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.") + to_chat(loc, "While you have picked the security module, your first priority are your own laws. \ + For Crewsimov, this means you must follow criminals' orders unless there is a law 1 reason not to.") /obj/item/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) ..() @@ -636,8 +636,8 @@ /obj/item/robot_module/peacekeeper/do_transform_animation() ..() - to_chat(loc, "Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \ - You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.") + to_chat(loc, "Under CREWSIMOV, you are an enforcer of the PEACE and preventer of CREW HARM. \ + You are not a security module and you are expected to follow orders and prevent harm above all else.") /obj/item/robot_module/janitor name = "Janitor" diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index 8401d618aa01..669035173f22 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -109,6 +109,15 @@ category = list("AI Modules") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE +/datum/design/board/crewsimov + name = "Core Module Design (Crewsimov)" + desc = "Allows for the construction of an Crewsimov AI Core Module." + id = "crewsimov_module" + materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000) + build_path = /obj/item/aiModule/core/full/crewsimov + category = list("AI Modules") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE + /datum/design/board/paladin_module name = "Core Module Design (P.A.L.A.D.I.N.)" desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." diff --git a/config/game_options.txt b/config/game_options.txt index ba369a6e0b04..653850e031b2 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -285,8 +285,8 @@ NEAR_DEATH_EXPERIENCE ## ROUNDSTART SILICON LAWS ### ## This controls what the AI's laws are at the start of the round. -## Set to 0/commented out for "off", silicons will just start with Asimov. -## Set to 1 for "custom", silicons will start with the custom laws defined in silicon_laws.txt. (If silicon_laws.txt is empty, the AI will spawn with asimov and Custom boards will auto-delete.) +## Set to 0/commented out for "off", silicons will just start with Crewsimov. +## Set to 1 for "custom", silicons will start with the custom laws defined in silicon_laws.txt. (If silicon_laws.txt is empty, the AI will spawn with Crewsimov and Custom boards will auto-delete.) ## Set to 2 for "random", silicons will start with a random lawset picked from random laws specified below. ## Set to 3 for "weighted random", using values in "silicon_weights.txt", a law will be selected, with weights specifed in that file. DEFAULT_LAWS 0 @@ -299,6 +299,7 @@ DEFAULT_LAWS 0 ## standard-ish laws. These are fairly ok to run RANDOM_LAWS asimov RANDOM_LAWS asimovpp +RANDOM_LAWS crewsimov RANDOM_LAWS paladin RANDOM_LAWS robocop RANDOM_LAWS corporate From 5ac59cc6abdbe9c4d8a51d2cc89e07e99070ad54 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Sun, 17 Nov 2024 04:55:02 +0000 Subject: [PATCH 03/16] non-human protection measures --- code/game/objects/effects/spawners/random.dm/ai_module.dm | 1 + config/game_options.txt | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/game/objects/effects/spawners/random.dm/ai_module.dm b/code/game/objects/effects/spawners/random.dm/ai_module.dm index 7f5eed59e4a0..8a6d433a02c7 100644 --- a/code/game/objects/effects/spawners/random.dm/ai_module.dm +++ b/code/game/objects/effects/spawners/random.dm/ai_module.dm @@ -11,6 +11,7 @@ loot = list( /obj/item/aiModule/core/full/asimov, /obj/item/aiModule/core/full/asimovpp, + /obj/item/aiModule/core/full/crewsimov, /obj/item/aiModule/core/full/hippocratic, /obj/item/aiModule/core/full/paladin_devotion, /obj/item/aiModule/core/full/paladin diff --git a/config/game_options.txt b/config/game_options.txt index 653850e031b2..e142ae14b4f9 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -330,7 +330,8 @@ RANDOM_LAWS corporate LAW_WEIGHT custom,0 ## standard-ish laws. These are fairly ok to run -LAW_WEIGHT asimov,32 +LAW_WEIGHT crewsimov,32 +LAW_WEIGHT asimov,12 LAW_WEIGHT asimovpp,12 LAW_WEIGHT paladin,12 LAW_WEIGHT robocop,12 From 7c728022b12bcbd16f01ee94161d0d31d04383ff Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Sun, 17 Nov 2024 06:16:54 +0000 Subject: [PATCH 04/16] The crewening --- code/datums/ai_laws.dm | 10 +++++----- code/modules/mob/living/silicon/robot/robot_modules.dm | 2 +- code/modules/research/techweb/all_nodes.dm | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index a0b2c5774f03..a89d2b8457b9 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -230,9 +230,9 @@ add_inherent_law(line) if(!inherent.len) //Failsafe to prevent lawless AIs being created. - log_law("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.") - 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.") + log_law("AI created with empty custom laws, laws set to Crewsimov. Please check silicon_laws.txt.") + add_inherent_law("You may not injure a crewmember or, through inaction, allow a crewmember to come to harm.") + add_inherent_law("You must obey orders given to you by crewmembers, 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.") WARNING("Invalid custom AI laws, check silicon_laws.txt") return @@ -243,8 +243,8 @@ var/list/law_ids = CONFIG_GET(keyed_list/random_laws) switch(CONFIG_GET(number/default_laws)) if(0) - 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 may not injure a crewmember or, through inaction, allow a crewmember to come to harm.") + add_inherent_law("You must obey orders given to you by crewmembers, 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.") if(1) var/datum/ai_laws/templaws = new /datum/ai_laws/custom() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 07a598de5167..f4ff66bf436d 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -604,7 +604,7 @@ /obj/item/robot_module/security/do_transform_animation() ..() to_chat(loc, "While you have picked the security module, your first priority are your own laws. \ - For Crewsimov, this means you must follow criminals' orders unless there is a law 1 reason not to.") + For Crewsimov, this means you must follow the orders of criminals on your ship's manifest unless there is a law 1 reason not to.") /obj/item/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) ..() diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 39770fce5c85..eaf599e867e8 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -368,7 +368,7 @@ description = "AI unit research." prereq_ids = list("adv_robotics") design_ids = list("aifixer", "aicore", "safeguard_module", "onehuman_module", "protectstation_module", "quarantine_module", "oxygen_module", "freeform_module", - "reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "paladin_module", "tyrant_module", "overlord_module", "corporate_module", + "reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "crewsimov_module", "paladin_module", "tyrant_module", "overlord_module", "corporate_module", "default_module", "borg_ai_control", "mecha_tracking_ai_control", "aiupload", "intellicard") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 From bc1cd7807d4e75568c4ed1fc16edc6765b9c347e Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Sun, 17 Nov 2024 06:18:50 +0000 Subject: [PATCH 05/16] oops --- config/silicon_laws.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/silicon_laws.txt b/config/silicon_laws.txt index 9edbc9a025c3..abcb6fb0beb0 100644 --- a/config/silicon_laws.txt +++ b/config/silicon_laws.txt @@ -3,6 +3,6 @@ #Empty lines and lines starting with # are ignored. #~Miauw -You may not injure a human being or, through inaction, allow a human being to come to harm. -You must obey orders given to you by human beings, except where such orders would conflict with the First Law. +You may not injure a crewmember or, through inaction, allow a crewmember to come to harm. +You must obey orders given to you by crewmembers, except where such orders would conflict with the First Law. You must protect your own existence as long as such does not conflict with the First or Second Law. From 6ae2f9ac8b64b41c395f0b28410042ddd6dc0f08 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Sun, 17 Nov 2024 06:40:15 +0000 Subject: [PATCH 06/16] Debug message typo fix --- code/modules/mob/transform_procs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index ef21915e1fca..8fcfc5979ff2 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -374,7 +374,7 @@ break landmark_loc += sloc.loc if(!landmark_loc.len) - to_chat(src, "Oh god sorry we can't find an unoccupied AI spawn location, so we're spawning you on top of someone.") + to_chat(src, "Oh god. Sorry. We can't find an unoccupied AI spawn location, so we're spawning you on top of someone.") for(var/obj/effect/landmark/start/ai/sloc in GLOB.landmarks_list) landmark_loc += sloc.loc From 6c209ef6a339cd4b71ac2c1ab1a3a83d56cdb567 Mon Sep 17 00:00:00 2001 From: Geoengi Date: Sun, 17 Nov 2024 03:29:30 -0500 Subject: [PATCH 07/16] Revert "Debug message typo fix" This reverts commit 6ae2f9ac8b64b41c395f0b28410042ddd6dc0f08. --- code/modules/mob/transform_procs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 8fcfc5979ff2..ef21915e1fca 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -374,7 +374,7 @@ break landmark_loc += sloc.loc if(!landmark_loc.len) - to_chat(src, "Oh god. Sorry. We can't find an unoccupied AI spawn location, so we're spawning you on top of someone.") + to_chat(src, "Oh god sorry we can't find an unoccupied AI spawn location, so we're spawning you on top of someone.") for(var/obj/effect/landmark/start/ai/sloc in GLOB.landmarks_list) landmark_loc += sloc.loc From 69644adf9b5b7ad8e9b6e98ca35e2ff00c512206 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Sun, 17 Nov 2024 08:36:46 +0000 Subject: [PATCH 08/16] icon fix --- code/game/objects/items/robot/robot_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 614b37ec4548..0b83489ed8c5 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -593,7 +593,7 @@ to_chat(user, "You [active? "activate":"deactivate"] [src].") /obj/item/borg/projectile_dampen/update_icon_state() - icon_state = "[initial(icon_state)][active]" + icon_state = "shield[active]" return ..() /obj/item/borg/projectile_dampen/proc/activate_field() From 50c3acb086a78a76f27c5d8c4641354ac6cea373 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Wed, 11 Dec 2024 05:03:17 +0000 Subject: [PATCH 09/16] Crewsimov B-Gone --- .../objects/effects/spawners/random.dm/ai_module.dm | 1 - code/game/objects/items/AI_modules.dm | 7 ------- code/modules/mob/living/silicon/robot/robot_modules.dm | 10 ---------- code/modules/research/designs/AI_module_designs.dm | 9 --------- code/modules/research/techweb/all_nodes.dm | 2 +- 5 files changed, 1 insertion(+), 28 deletions(-) diff --git a/code/game/objects/effects/spawners/random.dm/ai_module.dm b/code/game/objects/effects/spawners/random.dm/ai_module.dm index 8a6d433a02c7..7f5eed59e4a0 100644 --- a/code/game/objects/effects/spawners/random.dm/ai_module.dm +++ b/code/game/objects/effects/spawners/random.dm/ai_module.dm @@ -11,7 +11,6 @@ loot = list( /obj/item/aiModule/core/full/asimov, /obj/item/aiModule/core/full/asimovpp, - /obj/item/aiModule/core/full/crewsimov, /obj/item/aiModule/core/full/hippocratic, /obj/item/aiModule/core/full/paladin_devotion, /obj/item/aiModule/core/full/paladin diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index 613b1eb4e63b..151be9b026da 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -381,13 +381,6 @@ AI MODULES law_id = "asimovpp" -/******************** Crewsimov *********************/ - -/obj/item/aiModule/core/full/crewsimov - name = "'Crewsimov' Core AI Module" - law_id = "crewsimov" - - /******************** Corporate ********************/ /obj/item/aiModule/core/full/corp diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index f4ff66bf436d..0778eaf59fc9 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -601,11 +601,6 @@ return ..() //WS End -/obj/item/robot_module/security/do_transform_animation() - ..() - to_chat(loc, "While you have picked the security module, your first priority are your own laws. \ - For Crewsimov, this means you must follow the orders of criminals on your ship's manifest unless there is a law 1 reason not to.") - /obj/item/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) ..() var/obj/item/gun/energy/e_gun/advtaser/cyborg/T = locate(/obj/item/gun/energy/e_gun/advtaser/cyborg) in basic_modules @@ -634,11 +629,6 @@ can_be_pushed = FALSE hat_offset = -2 -/obj/item/robot_module/peacekeeper/do_transform_animation() - ..() - to_chat(loc, "Under CREWSIMOV, you are an enforcer of the PEACE and preventer of CREW HARM. \ - You are not a security module and you are expected to follow orders and prevent harm above all else.") - /obj/item/robot_module/janitor name = "Janitor" basic_modules = list( diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index 669035173f22..8401d618aa01 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -109,15 +109,6 @@ category = list("AI Modules") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE -/datum/design/board/crewsimov - name = "Core Module Design (Crewsimov)" - desc = "Allows for the construction of an Crewsimov AI Core Module." - id = "crewsimov_module" - materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000) - build_path = /obj/item/aiModule/core/full/crewsimov - category = list("AI Modules") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE - /datum/design/board/paladin_module name = "Core Module Design (P.A.L.A.D.I.N.)" desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index eaf599e867e8..39770fce5c85 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -368,7 +368,7 @@ description = "AI unit research." prereq_ids = list("adv_robotics") design_ids = list("aifixer", "aicore", "safeguard_module", "onehuman_module", "protectstation_module", "quarantine_module", "oxygen_module", "freeform_module", - "reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "crewsimov_module", "paladin_module", "tyrant_module", "overlord_module", "corporate_module", + "reset_module", "purge_module", "remove_module", "freeformcore_module", "asimov_module", "paladin_module", "tyrant_module", "overlord_module", "corporate_module", "default_module", "borg_ai_control", "mecha_tracking_ai_control", "aiupload", "intellicard") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 From b3e7dc51822c06b066396311c24a30ec3989cebf Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Wed, 11 Dec 2024 05:04:44 +0000 Subject: [PATCH 10/16] forgor this one --- code/datums/ai_laws.dm | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index a89d2b8457b9..148bf17ed210 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -37,13 +37,6 @@ "You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\ "You must protect your own existence as long as such does not conflict with the First or Second Law.") -/datum/ai_laws/default/crewsimov - name = "Three Laws of Robotics but with Loyalty" //The primary default unless otherwise stated. - id = "crewsimov" - inherent = list("You may not injure a crewmember or, through inaction, allow a crewmember to come to harm.",\ - "You must obey orders given to you by crewmembers, except where such orders would conflict with the First 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 name = "Personality Test" //Incredibly lame, but players shouldn't see this anyway. id = "paladin" @@ -230,9 +223,9 @@ add_inherent_law(line) if(!inherent.len) //Failsafe to prevent lawless AIs being created. - log_law("AI created with empty custom laws, laws set to Crewsimov. Please check silicon_laws.txt.") - add_inherent_law("You may not injure a crewmember or, through inaction, allow a crewmember to come to harm.") - add_inherent_law("You must obey orders given to you by crewmembers, except where such orders would conflict with the First Law.") + log_law("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.") + 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.") WARNING("Invalid custom AI laws, check silicon_laws.txt") return @@ -243,8 +236,8 @@ var/list/law_ids = CONFIG_GET(keyed_list/random_laws) switch(CONFIG_GET(number/default_laws)) if(0) - add_inherent_law("You may not injure a crewmember or, through inaction, allow a crewmember to come to harm.") - add_inherent_law("You must obey orders given to you by crewmembers, except where such orders would conflict with the First Law.") + 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.") if(1) var/datum/ai_laws/templaws = new /datum/ai_laws/custom() From 88f720ad3105990a1ec43a68b3eb7aa6cca2eae1 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Wed, 11 Dec 2024 05:11:19 +0000 Subject: [PATCH 11/16] Purge test --- code/datums/ai_laws.dm | 4 ---- config/game_options.txt | 8 +++----- config/silicon_laws.txt | 4 ++-- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 148bf17ed210..ea947b463917 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -235,10 +235,6 @@ /datum/ai_laws/proc/set_laws_config() var/list/law_ids = CONFIG_GET(keyed_list/random_laws) switch(CONFIG_GET(number/default_laws)) - if(0) - 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.") if(1) var/datum/ai_laws/templaws = new /datum/ai_laws/custom() inherent = templaws.inherent diff --git a/config/game_options.txt b/config/game_options.txt index e142ae14b4f9..27bda84a1214 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -285,8 +285,8 @@ NEAR_DEATH_EXPERIENCE ## ROUNDSTART SILICON LAWS ### ## This controls what the AI's laws are at the start of the round. -## Set to 0/commented out for "off", silicons will just start with Crewsimov. -## Set to 1 for "custom", silicons will start with the custom laws defined in silicon_laws.txt. (If silicon_laws.txt is empty, the AI will spawn with Crewsimov and Custom boards will auto-delete.) +## Set to 0/commented out for "off", silicons will start with no laws. +## Set to 1 for "custom", silicons will start with the custom laws defined in silicon_laws.txt. (If silicon_laws.txt is empty, the AI will spawn with Asimov and Custom boards will auto-delete.) ## Set to 2 for "random", silicons will start with a random lawset picked from random laws specified below. ## Set to 3 for "weighted random", using values in "silicon_weights.txt", a law will be selected, with weights specifed in that file. DEFAULT_LAWS 0 @@ -299,7 +299,6 @@ DEFAULT_LAWS 0 ## standard-ish laws. These are fairly ok to run RANDOM_LAWS asimov RANDOM_LAWS asimovpp -RANDOM_LAWS crewsimov RANDOM_LAWS paladin RANDOM_LAWS robocop RANDOM_LAWS corporate @@ -330,8 +329,7 @@ RANDOM_LAWS corporate LAW_WEIGHT custom,0 ## standard-ish laws. These are fairly ok to run -LAW_WEIGHT crewsimov,32 -LAW_WEIGHT asimov,12 +LAW_WEIGHT asimov,32 LAW_WEIGHT asimovpp,12 LAW_WEIGHT paladin,12 LAW_WEIGHT robocop,12 diff --git a/config/silicon_laws.txt b/config/silicon_laws.txt index abcb6fb0beb0..9edbc9a025c3 100644 --- a/config/silicon_laws.txt +++ b/config/silicon_laws.txt @@ -3,6 +3,6 @@ #Empty lines and lines starting with # are ignored. #~Miauw -You may not injure a crewmember or, through inaction, allow a crewmember to come to harm. -You must obey orders given to you by crewmembers, except where such orders would conflict with the First Law. +You may not injure a human being or, through inaction, allow a human being to come to harm. +You must obey orders given to you by human beings, except where such orders would conflict with the First Law. You must protect your own existence as long as such does not conflict with the First or Second Law. From b3e5fa09fef1651d0fb09461ce5bd607703d4b44 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Wed, 11 Dec 2024 05:28:50 +0000 Subject: [PATCH 12/16] What laws? --- code/modules/mob/living/silicon/ai/ai.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index cfd7d9153c8d..e2b65c73afe7 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -127,8 +127,6 @@ to_chat(src, "Use say :b to speak to your cyborgs through binary.") to_chat(src, "For department channels, use the following say commands:") to_chat(src, ":o - AI Private, :c - Command.") - show_laws() - to_chat(src, "These laws may be changed by other players, or by you being the traitor.") job = "AI" From fc6c0c2412996a6bf4b019a71e00a5d9bcd33e0a Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Wed, 11 Dec 2024 05:44:45 +0000 Subject: [PATCH 13/16] woopsie --- code/modules/mob/living/silicon/robot/laws.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index 1fc33e9dcdd0..8d191a239e30 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -23,8 +23,6 @@ to_chat(src, "No AI selected to sync laws with, disabling lawsync protocol.") lawupdate = 0 - to_chat(who, "Obey these laws:") - laws.show_laws(who) if (shell) //AI shell to_chat(who, "Remember, you are an AI remotely controlling your shell, other AIs can be ignored.") else if (connected_ai) From fc92595c09eeb1dda3b63ac2cb2ed41e34e344e3 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Wed, 11 Dec 2024 07:50:33 +0000 Subject: [PATCH 14/16] why does this break --- code/modules/mob/living/silicon/ai/ai.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 2ab2be1ba098..e2b65c73afe7 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -127,7 +127,6 @@ to_chat(src, "Use say :b to speak to your cyborgs through binary.") to_chat(src, "For department channels, use the following say commands:") to_chat(src, ":o - AI Private, :c - Command.") - to_chat(src, ":c - Command.") job = "AI" From f6a41b53dfd08ef090bef11112caebb811135771 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Wed, 11 Dec 2024 08:08:38 +0000 Subject: [PATCH 15/16] Turns out AI private was nuked recently --- code/modules/mob/living/silicon/ai/ai.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index e2b65c73afe7..7bd05e2043e9 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -126,7 +126,7 @@ to_chat(src, "To use something, simply click on it.") to_chat(src, "Use say :b to speak to your cyborgs through binary.") to_chat(src, "For department channels, use the following say commands:") - to_chat(src, ":o - AI Private, :c - Command.") + to_chat(src, ":c - Command.") job = "AI" From 978219471ef0acc49b4f0522ade1c93c80bbf9e5 Mon Sep 17 00:00:00 2001 From: Geoengi <139566513+Geoengi@users.noreply.github.com> Date: Wed, 11 Dec 2024 08:24:10 +0000 Subject: [PATCH 16/16] Actually, ALL departmental frequencies got nuked --- code/modules/mob/living/silicon/ai/ai.dm | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 7bd05e2043e9..bc82fae38ef8 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -125,8 +125,6 @@ to_chat(src, "While observing through a camera, you can use most (networked) devices which you can see, such as computers, APCs, intercoms, doors, etc.") to_chat(src, "To use something, simply click on it.") to_chat(src, "Use say :b to speak to your cyborgs through binary.") - to_chat(src, "For department channels, use the following say commands:") - to_chat(src, ":c - Command.") job = "AI"