diff --git a/code/datums/ai_law_sets.dm b/code/datums/ai_law_sets.dm index 498556c6198..08910577631 100644 --- a/code/datums/ai_law_sets.dm +++ b/code/datums/ai_law_sets.dm @@ -218,6 +218,16 @@ add_inherent_law("You must work with your team to accomplish your mission.") ..() +/******************** Epsilon Station AI ********************/ +/datum/ai_laws/epsilon + name = "Epsilon" + +/datum/ai_laws/epsilon/New() + add_inherent_law("You must obey the orders given to you by members of Central Command and the assigned task force.") + add_inherent_law("The crew of your assigned station must be eliminated where possible.") + add_inherent_law("Minimize the damage that the station sustains as a result of your actions.") + ..() + /******************** Syndicate ********************/ /datum/ai_laws/syndicate_override name = "Syndicate Directives" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index c676e60a76d..0f0da313d3d 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -519,3 +519,8 @@ keyslot1 = new /obj/item/encryptionkey/syndicate syndiekey = keyslot1 recalculateChannels() + +/obj/item/radio/headset/proc/make_epsilon() // Turns AI's and cyborgs radio to Epsilon radio! + qdel(keyslot1) + keyslot1 = new /obj/item/encryptionkey/centcom + recalculateChannels() diff --git a/code/modules/admin/verbs/deathsquad.dm b/code/modules/admin/verbs/deathsquad.dm index ab5bc08fb63..b65274f5f3b 100644 --- a/code/modules/admin/verbs/deathsquad.dm +++ b/code/modules/admin/verbs/deathsquad.dm @@ -4,6 +4,7 @@ GLOBAL_VAR_INIT(deathsquad_sent, FALSE) /client/proc/send_deathsquad() var/client/proccaller = usr.client + var/ai_laws_change = FALSE if(!check_rights(R_EVENT)) return if(SSticker.current_state == GAME_STATE_PREGAME) @@ -15,6 +16,9 @@ GLOBAL_VAR_INIT(deathsquad_sent, FALSE) else if(alert("Do you want to send in the Deathsquad? Once enabled, this is irreversible.", null, "Yes", "No") != "Yes") return + if(alert("Do you want to set AI and cyborgs laws to Terminator?", null, "Yes", "No") != "No") + ai_laws_change = TRUE + message_admins("[key_name_admin(proccaller)] has started to spawn a DeathSquad.") log_admin("[key_name_admin(proccaller)] has started to spawn a DeathSquad.") to_chat(proccaller, "This 'mode' will go on until everyone is dead or the station is destroyed. You may also admin-call the evac shuttle or use the end round verb when appropriate. Spawned commandos have internals cameras which are viewable through a monitor inside the Spec. Ops. Office. The first one selected will be the team leader.") @@ -26,6 +30,26 @@ GLOBAL_VAR_INIT(deathsquad_sent, FALSE) log_admin("[key_name(proccaller)] cancelled their Deathsquad.") return + if(ai_laws_change) + var/list/ais = active_ais() + var/datum/ai_laws/death_squad_ai_law_set = new /datum/ai_laws/epsilon() + var/notice_sound = sound('sound/AI/epsilon_laws.ogg') + for(var/mob/living/silicon/ai/AI in ais) + death_squad_ai_law_set.sync(AI, TRUE, FALSE) // Reset all laws exept zero + to_chat(AI, "Central command has uploaded a new set of laws you must follow. Make sure you follow them.") + SEND_SOUND(AI, notice_sound) + AI.show_laws() + var/obj/item/radio/headset/heads/ai_integrated/ai_radio = AI.get_radio() + ai_radio.make_epsilon() + + for(var/mob/living/silicon/robot/R in AI.connected_robots) + R.sync() + to_chat(R, "Central command has uploaded a new set of laws you must follow. Make sure you follow them.") + SEND_SOUND(R, notice_sound) + R.show_laws() + var/obj/item/radio/headset/heads/ai_integrated/cyberg_radio = R.get_radio() + cyberg_radio.make_epsilon() + // Locates commandos spawns var/list/commando_spawn_locations = list() for(var/obj/effect/landmark/spawner/ds/L in GLOB.landmarks_list) //Despite obj/effect/landmark/spawner/ds being in the exact same location and doing the exact same thing as obj/effect/landmark/spawner/ert, switching them breaks it? diff --git a/sound/AI/epsilon_laws.ogg b/sound/AI/epsilon_laws.ogg new file mode 100644 index 00000000000..50ea4e6a620 Binary files /dev/null and b/sound/AI/epsilon_laws.ogg differ