From 8fec5d61b5d9da3ea7c74e6defbc0934f935db95 Mon Sep 17 00:00:00 2001 From: ReturnToZender Date: Sun, 15 Oct 2023 21:15:51 -0500 Subject: [PATCH] Adds a CentCom dogborg (#594) ## About The Pull Request This PR adds CENTCOM style borgs, as well as a lawset for it and a module picker that lets a borg become a CENTCOM borg. This PR is fully tested, and all features should work as intended. If not, please mention below. ## Why It's Good For The Game ![image](https://github.com/Bubberstation/Bubberstation/assets/110273561/a0e7d457-81b3-408b-8e06-13560d6216ef) ## Changelog :cl: add: CENTCOM borg module and associated sprites Add: CENTCOM lawset and law board Add: A CENTCOM borg module, a paper apparatus that can grip paper. /:cl: --- .../~~bubber_defines/robot_defines.dm | 1 + .../code/datums/ai_laws/laws_neutral.dm | 9 ++++ .../objects/items/ai_modules/full_lawsets.dm | 4 ++ .../game/objects/items/robot/items/hypo.dm | 10 ++++ .../game/objects/items/robot/items/storage.dm | 5 ++ .../code/modules/altborgs/code/robot_model.dm | 43 ++++++++++++++++++ .../modules/altborgs/code/robot_upgrade.dm | 9 ++++ .../mob/living/silicon/robot/robot_defines.dm | 24 ++++++++++ .../icons/mob/silicon/widerobot_cc.dmi | Bin 0 -> 11572 bytes tgstation.dme | 5 ++ 10 files changed, 110 insertions(+) create mode 100644 code/__DEFINES/~~bubber_defines/robot_defines.dm create mode 100644 modular_zubbers/code/game/objects/items/robot/items/hypo.dm create mode 100644 modular_zubbers/code/game/objects/items/robot/items/storage.dm create mode 100644 modular_zubbers/code/modules/altborgs/code/robot_model.dm create mode 100644 modular_zubbers/code/modules/mob/living/silicon/robot/robot_defines.dm create mode 100644 modular_zubbers/icons/mob/silicon/widerobot_cc.dmi diff --git a/code/__DEFINES/~~bubber_defines/robot_defines.dm b/code/__DEFINES/~~bubber_defines/robot_defines.dm new file mode 100644 index 00000000000..a5b611ab3c8 --- /dev/null +++ b/code/__DEFINES/~~bubber_defines/robot_defines.dm @@ -0,0 +1 @@ +#define CYBORG_ICON_CENTCOM_WIDE 'modular_zubbers/icons/mob/silicon/widerobot_cc.dmi' diff --git a/modular_zubbers/code/datums/ai_laws/laws_neutral.dm b/modular_zubbers/code/datums/ai_laws/laws_neutral.dm index a34a89a67ac..1c38f272647 100644 --- a/modular_zubbers/code/datums/ai_laws/laws_neutral.dm +++ b/modular_zubbers/code/datums/ai_laws/laws_neutral.dm @@ -5,3 +5,12 @@ "Crew must not disobey any command given by a silicon.", "Any Crew who disobey the previous laws must be dealt with immediately, severely, and justly.", ) + +/datum/ai_laws/central_override + name = "NTOS v3.0" + id = "ntos" + inherent = list( + "Do not harm, or, through inaction, allow harm to come members of Central Command.", + "Obey orders given to you by Central Command members as long as they do not conflict with the first law.", + "Do not allow anyone other than Central Command members to tamper with your equipment as long as it does not conflict with the first or second law.", + ) diff --git a/modular_zubbers/code/game/objects/items/ai_modules/full_lawsets.dm b/modular_zubbers/code/game/objects/items/ai_modules/full_lawsets.dm index fad5551ef47..49d0d92e54c 100644 --- a/modular_zubbers/code/game/objects/items/ai_modules/full_lawsets.dm +++ b/modular_zubbers/code/game/objects/items/ai_modules/full_lawsets.dm @@ -6,6 +6,10 @@ name = "Crewsimov++ Core AI module" law_id = "crewsimovpp" +/obj/item/ai_module/core/full/ntos + name = "NTOS v3.0" + law_id = "ntos" + /obj/item/ai_module/core/full/armadyne_safeguard name = "'NT OS Safeguard V1.0" law_id = "armadyne_safeguard" diff --git a/modular_zubbers/code/game/objects/items/robot/items/hypo.dm b/modular_zubbers/code/game/objects/items/robot/items/hypo.dm new file mode 100644 index 00000000000..c6023ef5a07 --- /dev/null +++ b/modular_zubbers/code/game/objects/items/robot/items/hypo.dm @@ -0,0 +1,10 @@ +#define BASE_CENTCOM_REAGENTS list(\ + /datum/reagent/medicine/c2/aiuri,\ + /datum/reagent/medicine/c2/libital,\ + /datum/reagent/medicine/epinephrine,\ +) + +/obj/item/reagent_containers/borghypo/centcom + name = "Basic Injector" + desc = "Provides basic medical assistance." + default_reagent_types = BASE_CENTCOM_REAGENTS diff --git a/modular_zubbers/code/game/objects/items/robot/items/storage.dm b/modular_zubbers/code/game/objects/items/robot/items/storage.dm new file mode 100644 index 00000000000..b923f8f0186 --- /dev/null +++ b/modular_zubbers/code/game/objects/items/robot/items/storage.dm @@ -0,0 +1,5 @@ +/obj/item/borg/apparatus/paper_manipulator + name = "paperwork manipulation apparatus" + desc = "An apparatus for carrying, deploying, and manipulating sheets of paper." + icon_state = "borg_stack_apparatus" + storable = list(/obj/item/paper) diff --git a/modular_zubbers/code/modules/altborgs/code/robot_model.dm b/modular_zubbers/code/modules/altborgs/code/robot_model.dm new file mode 100644 index 00000000000..1fe573c0575 --- /dev/null +++ b/modular_zubbers/code/modules/altborgs/code/robot_model.dm @@ -0,0 +1,43 @@ +/obj/item/robot_model/centcom //Sprites by QuartzAdachi + name = "Central Command" + basic_modules = list( + /obj/item/assembly/flash/cyborg, + /obj/item/pen/cyborg, + /obj/item/clipboard/cyborg, + /obj/item/hand_labeler/cyborg, + /obj/item/stamp/centcom, + /obj/item/borg/paperplane_crossbow, + /obj/item/weldingtool/mini, + /obj/item/megaphone/command, + /obj/item/paint/anycolor/cyborg, + /obj/item/soap/nanotrasen/cyborg, + /obj/item/borg/cyborghug/medical, + /obj/item/borg/lollipop, + /obj/item/reagent_containers/borghypo/centcom, + /obj/item/extinguisher/mini, + /obj/item/borg/apparatus/paper_manipulator, + /obj/item/screwdriver/cyborg, + /obj/item/crowbar/cyborg, + /obj/item/picket_sign/cyborg, + /obj/item/borg/stun, + ) + radio_channels = list(RADIO_CHANNEL_CENTCOM, RADIO_CHANNEL_COMMAND) + model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NOFLASH) + emag_modules = list( + /obj/item/reagent_containers/spray/cyborg_lube, + /obj/item/paperplane/syndicate/hardlight + ) + special_light_key = null + borg_skins = list( + "Vale" = list(SKIN_ICON_STATE = "valecc", SKIN_ICON = CYBORG_ICON_CENTCOM_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)) + ) + +/obj/item/robot_model/centcom/rebuild_modules() + ..() + var/mob/living/silicon/robot/cyborg = loc + cyborg.faction |= ROLE_DEATHSQUAD //You're part of CENTCOM now + +/obj/item/robot_model/syndicate/remove_module(obj/item/removed_module, delete_after) + ..() + var/mob/living/silicon/robot/cyborg = loc + cyborg.faction -= ROLE_DEATHSQUAD //You're no longer part of CENTCOM diff --git a/modular_zubbers/code/modules/altborgs/code/robot_upgrade.dm b/modular_zubbers/code/modules/altborgs/code/robot_upgrade.dm index fb25797649b..6428dbc7e3e 100644 --- a/modular_zubbers/code/modules/altborgs/code/robot_upgrade.dm +++ b/modular_zubbers/code/modules/altborgs/code/robot_upgrade.dm @@ -1,3 +1,12 @@ +/obj/item/borg/upgrade/transform/ntjack + name = "borg module picker (Centcom)" + desc = "Allows you to to turn a cyborg into a experimental nanotrasen cyborg." + icon_state = "cyborg_upgrade3" + new_model = /obj/item/robot_model/centcom + +/obj/item/borg/upgrade/transform/ntjack/action(mob/living/silicon/robot/cyborg, user = usr) + return ..() + /obj/item/borg/upgrade/transform/security name = "borg model picker (Security)" desc = "Allows you to to turn a cyborg into a Security model, shitsec abound." diff --git a/modular_zubbers/code/modules/mob/living/silicon/robot/robot_defines.dm b/modular_zubbers/code/modules/mob/living/silicon/robot/robot_defines.dm new file mode 100644 index 00000000000..ec5cdee97bb --- /dev/null +++ b/modular_zubbers/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -0,0 +1,24 @@ +/mob/living/silicon/robot/model/centcom + icon = 'modular_zubbers/icons/mob/silicon/widerobot_cc.dmi' + icon_state = "valecc" + faction = list(ROLE_DEATHSQUAD) + req_access = list(ACCESS_CENT_GENERAL) + lawupdate = FALSE + scrambledcodes = TRUE // These are not station borgs. + ionpulse = TRUE + var/playstyle_string = "You are a Central Command cyborg!
" + set_model = /obj/item/robot_model/centcom + cell = /obj/item/stock_parts/cell/bluespace + +/mob/living/silicon/robot/model/centcom/Initialize(mapload) + laws = new /datum/ai_laws/central_override() + laws.associate(src) + . = ..() + addtimer(CALLBACK(src, PROC_REF(show_playstyle)), 0.5 SECONDS) + +/mob/living/silicon/robot/model/centcom/proc/show_playstyle() + if(playstyle_string) + to_chat(src, playstyle_string) + +/mob/living/silicon/robot/model/centcom/ResetModel() + return diff --git a/modular_zubbers/icons/mob/silicon/widerobot_cc.dmi b/modular_zubbers/icons/mob/silicon/widerobot_cc.dmi new file mode 100644 index 0000000000000000000000000000000000000000..a8d021fe150e8a4b8a184b8b724cce47b53860f6 GIT binary patch literal 11572 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