From eadf96ef0ac2c3220eb38ee94e5372f6d1c49a97 Mon Sep 17 00:00:00 2001 From: L0pz <55806451+L0pz@users.noreply.github.com> Date: Thu, 18 Jul 2024 07:39:32 +0300 Subject: [PATCH] Cyborg upgrade module sprites (#85024) ## About The Pull Request Adds unique sprites for each cyborg's upgrade modules ![image](https://github.com/user-attachments/assets/7c991f68-5b2c-429e-b1fa-afcb87563190) ![image](https://github.com/user-attachments/assets/4e6113e0-557e-4de6-a2a0-329227ecaa4b) ## Why It's Good For The Game Current upgrade modules just use the ancient circuit board sprites which are kinda boring and uninteresting on top of being shared by a lot of other things. These sprites look more like actual upgrade modules and allow you to identify upgrade modules and their type without having to check the item's name. ## Changelog :cl: image: Added new unique sprites for cyborg upgrade modules /:cl: --- .../objects/items/robot/robot_upgrades.dm | 71 +++++++++--------- icons/mob/silicon/robot_items.dmi | Bin 4251 -> 10830 bytes 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 9a3e45fac42..815bdeb2b60 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -2,10 +2,10 @@ // Contains various borg upgrades. /obj/item/borg/upgrade - name = "borg upgrade module." + name = "borg upgrade module" desc = "Protected by FRM." - icon = 'icons/obj/devices/circuitry_n_data.dmi' - icon_state = "cyborg_upgrade" + icon = 'icons/mob/silicon/robot_items.dmi' + icon_state = "module_general" w_class = WEIGHT_CLASS_SMALL var/locked = FALSE var/installed = FALSE @@ -73,6 +73,7 @@ /obj/item/borg/upgrade/rename name = "cyborg reclassification board" desc = "Used to rename a cyborg." + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "cyborg_upgrade1" var/heldname = "" one_use = TRUE @@ -99,7 +100,7 @@ /obj/item/borg/upgrade/disablercooler name = "cyborg rapid disabler cooling module" desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate." - icon_state = "cyborg_upgrade3" + icon_state = "module_security" require_model = TRUE model_type = list(/obj/item/robot_model/security) model_flags = BORG_MODEL_SECURITY @@ -134,7 +135,7 @@ /obj/item/borg/upgrade/thrusters name = "ion thruster upgrade" desc = "An energy-operated thruster system for cyborgs." - icon_state = "cyborg_upgrade3" + icon_state = "module_general" /obj/item/borg/upgrade/thrusters/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() @@ -156,7 +157,7 @@ /obj/item/borg/upgrade/diamond_drill name = "mining cyborg diamond drill" desc = "A diamond drill replacement for the mining model's standard drill." - icon_state = "cyborg_upgrade3" + icon_state = "module_miner" require_model = TRUE model_type = list(/obj/item/robot_model/miner) model_flags = BORG_MODEL_MINER @@ -167,7 +168,7 @@ /obj/item/borg/upgrade/soh name = "mining cyborg satchel of holding" desc = "A satchel of holding replacement for mining cyborg's ore satchel module." - icon_state = "cyborg_upgrade3" + icon_state = "module_miner" require_model = TRUE model_type = list(/obj/item/robot_model/miner) model_flags = BORG_MODEL_MINER @@ -178,7 +179,7 @@ /obj/item/borg/upgrade/tboh name = "janitor cyborg trash bag of holding" desc = "A trash bag of holding replacement for the janiborg's standard trash bag." - icon_state = "cyborg_upgrade3" + icon_state = "module_janitor" require_model = TRUE model_type = list(/obj/item/robot_model/janitor) model_flags = BORG_MODEL_JANITOR @@ -189,7 +190,7 @@ /obj/item/borg/upgrade/amop name = "janitor cyborg advanced mop" desc = "An advanced mop replacement for the janiborg's standard mop." - icon_state = "cyborg_upgrade3" + icon_state = "module_janitor" require_model = TRUE model_type = list(/obj/item/robot_model/janitor) model_flags = BORG_MODEL_JANITOR @@ -200,7 +201,7 @@ /obj/item/borg/upgrade/prt name = "janitor cyborg plating repair tool" desc = "A tiny heating device to repair burnt and damaged hull platings with." - icon_state = "cyborg_upgrade3" + icon_state = "module_janitor" require_model = TRUE model_type = list(/obj/item/robot_model/janitor) model_flags = BORG_MODEL_JANITOR @@ -210,7 +211,7 @@ /obj/item/borg/upgrade/syndicate name = "illegal equipment module" desc = "Unlocks the hidden, deadlier functions of a cyborg." - icon_state = "cyborg_upgrade3" + icon_state = "module_illegal" require_model = TRUE /obj/item/borg/upgrade/syndicate/Initialize(mapload) @@ -239,7 +240,7 @@ /obj/item/borg/upgrade/lavaproof name = "mining cyborg lavaproof chassis" desc = "An upgrade kit to apply specialized coolant systems and insulation layers to a mining cyborg's chassis, enabling them to withstand exposure to molten rock and liquid plasma." - icon_state = "cyborg_ash_tracks" + icon_state = "module_miner" resistance_flags = LAVA_PROOF | FIRE_PROOF | FREEZE_PROOF require_model = TRUE model_type = list(/obj/item/robot_model/miner) @@ -260,7 +261,7 @@ /obj/item/borg/upgrade/selfrepair name = "self-repair module" desc = "This module will repair the cyborg over time." - icon_state = "cyborg_upgrade5" + icon_state = "module_general" require_model = TRUE var/repair_amount = -1 /// world.time of next repair @@ -360,7 +361,7 @@ name = "medical cyborg hypospray advanced synthesiser" desc = "An upgrade to the Medical model cyborg's hypospray, allowing it \ to produce more advanced and complex medical reagents." - icon_state = "cyborg_upgrade3" + icon_state = "module_medical" require_model = TRUE model_type = list(/obj/item/robot_model/medical) model_flags = BORG_MODEL_MEDICAL @@ -389,7 +390,7 @@ name = "cyborg piercing hypospray" desc = "An upgrade to a cyborg's hypospray, allowing it to \ pierce armor and thick material." - icon_state = "cyborg_upgrade3" + icon_state = "module_medical" /obj/item/borg/upgrade/piercing_hypospray/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() @@ -420,7 +421,7 @@ name = "cyborg surgical omni-tool upgrade" desc = "An upgrade to the Medical model, upgrading the built-in \ surgical omnitool, to be on par with advanced surgical tools" - icon_state = "cyborg_upgrade3" + icon_state = "module_medical" require_model = TRUE model_type = list(/obj/item/robot_model/medical, /obj/item/robot_model/syndicate_medical) model_flags = BORG_MODEL_MEDICAL @@ -452,7 +453,7 @@ name = "cyborg engineering omni-tool upgrade" desc = "An upgrade to the Engineering model, upgrading the built-in \ engineering omnitool, to be on par with advanced engineering tools" - icon_state = "cyborg_upgrade3" + icon_state = "module_engineer" require_model = TRUE model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) model_flags = BORG_MODEL_ENGINEERING @@ -479,7 +480,7 @@ name = "medical cyborg defibrillator" desc = "An upgrade to the Medical model, installing a built-in \ defibrillator, for on the scene revival." - icon_state = "cyborg_upgrade3" + icon_state = "module_medical" require_model = TRUE model_type = list(/obj/item/robot_model/medical) model_flags = BORG_MODEL_MEDICAL @@ -530,7 +531,7 @@ desc = "An upgrade to the Medical model, installing a processor \ capable of scanning surgery disks and carrying \ out procedures" - icon_state = "cyborg_upgrade3" + icon_state = "module_medical" require_model = TRUE model_type = list(/obj/item/robot_model/medical, /obj/item/robot_model/syndicate_medical) model_flags = BORG_MODEL_MEDICAL @@ -540,6 +541,7 @@ /obj/item/borg/upgrade/ai name = "B.O.R.I.S. module" desc = "Bluespace Optimized Remote Intelligence Synchronization. An uplink device which takes the place of an MMI in cyborg endoskeletons, creating a robotic shell controlled by an AI." + icon = 'icons/obj/devices/circuitry_n_data.dmi' icon_state = "boris" /obj/item/borg/upgrade/ai/action(mob/living/silicon/robot/borg, mob/living/user = usr) @@ -563,7 +565,7 @@ /obj/item/borg/upgrade/expand name = "borg expander" desc = "A cyborg resizer, it makes a cyborg huge." - icon_state = "cyborg_upgrade3" + icon_state = "module_general" /obj/item/borg/upgrade/expand/action(mob/living/silicon/robot/borg, mob/living/user = usr) . = ..() @@ -603,8 +605,7 @@ /obj/item/borg/upgrade/rped name = "engineering cyborg RPED" desc = "A rapid part exchange device for the engineering cyborg." - icon = 'icons/obj/storage/storage.dmi' - icon_state = "borgrped" + icon_state = "module_engineer" require_model = TRUE model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) model_flags = BORG_MODEL_ENGINEERING @@ -614,6 +615,7 @@ /obj/item/borg/upgrade/inducer name = "engineering integrated power inducer" desc = "An integrated inducer that can charge a device's internal cell from power provided by the cyborg." + icon_state = "module_engineer" require_model = TRUE model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) model_flags = BORG_MODEL_ENGINEERING @@ -638,8 +640,7 @@ /obj/item/borg/upgrade/pinpointer name = "medical cyborg crew pinpointer" desc = "A crew pinpointer module for the medical cyborg. Permits remote access to the crew monitor." - icon = 'icons/obj/devices/tracker.dmi' - icon_state = "pinpointer_crew" + icon_state = "module_medical" require_model = TRUE model_type = list(/obj/item/robot_model/medical, /obj/item/robot_model/syndicate_medical) model_flags = BORG_MODEL_MEDICAL @@ -676,7 +677,7 @@ /obj/item/borg/upgrade/transform name = "borg model picker (Standard)" desc = "Allows you to to turn a cyborg into a standard cyborg." - icon_state = "cyborg_upgrade3" + icon_state = "module_general" var/obj/item/robot_model/new_model = null /obj/item/borg/upgrade/transform/action(mob/living/silicon/robot/borg, mob/living/user = usr) @@ -687,13 +688,13 @@ /obj/item/borg/upgrade/transform/clown name = "borg model picker (Clown)" desc = "Allows you to to turn a cyborg into a clown, honk." - icon_state = "cyborg_upgrade3" + icon_state = "module_honk" new_model = /obj/item/robot_model/clown /obj/item/borg/upgrade/circuit_app name = "circuit manipulation apparatus" desc = "An engineering cyborg upgrade allowing for manipulation of circuit boards." - icon_state = "cyborg_upgrade3" + icon_state = "module_engineer" require_model = TRUE model_type = list(/obj/item/robot_model/engineering, /obj/item/robot_model/saboteur) model_flags = BORG_MODEL_ENGINEERING @@ -703,7 +704,7 @@ /obj/item/borg/upgrade/beaker_app name = "beaker storage apparatus" desc = "A supplementary beaker storage apparatus for medical cyborgs." - icon_state = "cyborg_upgrade3" + icon_state = "module_medical" require_model = TRUE model_type = list(/obj/item/robot_model/medical) model_flags = BORG_MODEL_MEDICAL @@ -713,7 +714,7 @@ /obj/item/borg/upgrade/drink_app name = "glass storage apparatus" desc = "A supplementary drinking glass storage apparatus for service cyborgs." - icon_state = "cyborg_upgrade3" + icon_state = "module_service" require_model = TRUE model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE @@ -723,7 +724,7 @@ /obj/item/borg/upgrade/broomer name = "experimental push broom" desc = "An experimental push broom used for efficiently pushing refuse." - icon_state = "cyborg_upgrade3" + icon_state = "module_janitor" require_model = TRUE model_type = list(/obj/item/robot_model/janitor) model_flags = BORG_MODEL_JANITOR @@ -733,7 +734,7 @@ /obj/item/borg/upgrade/condiment_synthesizer name = "Service Cyborg Condiment Synthesiser" desc = "An upgrade to the service model cyborg, allowing it to produce solid condiments." - icon_state = "cyborg_upgrade3" + icon_state = "module_service" require_model = TRUE model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE @@ -743,7 +744,7 @@ /obj/item/borg/upgrade/silicon_knife name = "Service Cyborg Kitchen Toolset" desc = "An upgrade to the service model cyborg, to help process foods." - icon_state = "cyborg_upgrade3" + icon_state = "module_service" require_model = TRUE model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE @@ -753,7 +754,7 @@ /obj/item/borg/upgrade/service_apparatus name = "Service Cyborg Service Apparatus" desc = "An upgrade to the service model cyborg, to help handle foods and paper." - icon_state = "cyborg_upgrade3" + icon_state = "module_service" require_model = TRUE model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE @@ -763,7 +764,7 @@ /obj/item/borg/upgrade/rolling_table name = "Service Cyborg Rolling Table Dock" desc = "An upgrade to the service model cyborg, to help provide mobile service." - icon_state = "cyborg_upgrade3" + icon_state = "module_service" require_model = TRUE model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE @@ -773,7 +774,7 @@ /obj/item/borg/upgrade/service_cookbook name = "Service Cyborg Cookbook" desc = "An upgrade to the service model cyborg, that lets them create more foods." - icon_state = "cyborg_upgrade3" + icon_state = "module_service" require_model = TRUE model_type = list(/obj/item/robot_model/service) model_flags = BORG_MODEL_SERVICE diff --git a/icons/mob/silicon/robot_items.dmi b/icons/mob/silicon/robot_items.dmi index 00c813ace7f48cceb06133a309f81f036dc778ca..2cb809fe2724b1560da59300ab4c6a452edadf5b 100644 GIT binary patch literal 10830 zcmbVyRahKB)9xTa5-dP)CrAhy2<{F+gS)#sVPSFC;0{3&g1fuBySpy#{%^kLoU8MH zH|Jt^=Gm?3s;;hj>z(QjRgjZFeM|5b002}eNzw1n>-xVB5(4y_fWdMD0ARvBl+~R@ zO`MDzE$p2w>}&zRJv~3ZLavJ$BWQ2?lUzB4=sUP?ILZOs<7(xlH#1y^^AiidHjnWM z!puVr{lBRHY#n?HJ(|MbKL zDdrvxd;l@HkW=gEw{w`MN*Hk15Bk>51M0L+(Bku$ZS3oZ zJ^?M$7~0hj%{lu7ravF5*rxu<$Wl$h75F3=h-Lfa|Nb4i!$2>F$>hSR3Y++&*;q4$ zMnagEiY~)%i^7l0HwTt3%%l4LnPs?K&DG7-)yyF4_Nd3o%*|}~GQ)uX(vzubO`@lg z9?4H32o%o<2-SZv7W7lV_(CQ`i-aFTh8=(+iSbq#;Um%;ayZNYzj@>KpD0}eDj1VA zUTV`x*6rVeHb@R%y(@8ouB6sxuBh z7(J+L$N*nZYAQj6;8*&hSak&GNJ%qEs|d@@_&Ym001@bx+-uTK`XLr2IlWmkA^yq@ z5R^G#`Dif{NDOlj2UeP>`-@v$U5(vmI$Umo%P#bgw>E#BworLKk=wTL(e^V`SEP;} z)y}QY#Dr7B`uaKT=dCpm2u{zt1$|(kh*-0981(kv_y1_8I$q3y@q z32h;d2Tj2@0dgvmSy5|$qrA8K>*~9L1sp?=ceue)?=jX-VMT)ZVSUhhq8cA#S{K$BWK@FzbK_L4^XfJfaqUB22)S7z|@bD1T40m)y%0DdK2y9Oy5`oat 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 G{r(4;a~FXC literal 4251 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 x*6#4@Yi*9GueCd(zSj1L`da%V>T80Q