From bb8d8f968abdddc1dcf86ceda8d47001d531e321 Mon Sep 17 00:00:00 2001 From: Zergspower Date: Wed, 25 Oct 2023 10:24:37 -0500 Subject: [PATCH] [Mostly-Modular] Major refactor of most modular borg code with some QOL adjustments (#24542) * The great BORG * godamn my head * how did that even compile * Why do you keep reverting * ah ticked * Delete tallrobot_effects.dmi * removes 'dogborg' language and cargo tweaks * lol silly dog you dont have a custom panel yet * that typo tho * Forgot about that borg building * Apply suggestions from code review Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> * local edit * Godamnit Hemlock * re-deletes altborgs * Update mechfabricator_designs.dm * Revert "Update mechfabricator_designs.dm" This reverts commit 569912fa2fadda9fbcdc83646e995405f33dfb24. --------- Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> --- .../~skyrat_defines/robot_defines.dm | 72 +-- .../modules/mob/living/silicon/robot/robot.dm | 2 +- .../mob/living/silicon/robot/robot_model.dm | 10 +- .../guns/energy/kinetic_accelerator.dm | 2 +- .../designs/mechfabricator_designs.dm | 7 +- .../code/modules/mob/living/sillicon/robot.dm | 2 +- .../modules/research/techweb/all_nodes.dm | 15 + .../modules/altborgs/code/cyborg_items.dm | 33 -- .../modules/altborgs/code/robot_items.dm | 38 -- .../modules/altborgs/code/robot_upgrade.dm | 9 - .../modules/altborgs/icons/robot_items.dmi | Bin 6619 -> 0 bytes modular_skyrat/modules/altborgs/readme.md | 30 -- .../{altborgs => borgs}/code/inventory.dm | 0 .../code/mechafabricator_designs.dm | 89 ++++ .../modules/{altborgs => borgs}/code/robot.dm | 0 .../{altborgs => borgs}/code/robot_defines.dm | 0 .../{cargoborg => borgs}/code/robot_items.dm | 417 ++++++++++++++---- .../{altborgs => borgs}/code/robot_model.dm | 267 +++++++---- .../code/robot_upgrade.dm} | 353 +++++++++++---- .../{altborgs => borgs}/code/update_icons.dm | 9 + .../icons}/misc/tallrobot_effects.dmi | Bin .../icons/tallborg => borgs/icons}/readme.md | 0 .../modules/borgs/icons/robot_items.dmi | Bin 0 -> 7560 bytes .../{altborgs => borgs}/icons/robots.dmi | Bin .../icons/robots_cargo.dmi | Bin .../icons/robots_clown.dmi | Bin .../{altborgs => borgs}/icons/robots_eng.dmi | Bin .../{altborgs => borgs}/icons/robots_jani.dmi | Bin .../{altborgs => borgs}/icons/robots_med.dmi | Bin .../{altborgs => borgs}/icons/robots_mine.dmi | Bin .../icons/robots_ninja.dmi | Bin .../{altborgs => borgs}/icons/robots_pk.dmi | Bin .../{altborgs => borgs}/icons/robots_sec.dmi | Bin .../{altborgs => borgs}/icons/robots_serv.dmi | Bin .../icons/robots_syndi.dmi | Bin .../icons/screen_cyborg.dmi | Bin .../icons}/tallrobot_cargo.dmi | Bin .../icons}/tallrobot_clown.dmi | Bin .../icons}/tallrobot_eng.dmi | Bin .../icons}/tallrobot_jani.dmi | Bin .../icons}/tallrobot_med.dmi | Bin .../icons}/tallrobot_mine.dmi | Bin .../icons}/tallrobot_ninja.dmi | Bin .../tallborg => borgs/icons}/tallrobot_pk.dmi | Bin .../icons}/tallrobot_sec.dmi | Bin .../icons}/tallrobot_serv.dmi | Bin .../icons}/tallrobot_syndi.dmi | Bin .../icons/widerobot_eng.dmi | Bin .../icons/widerobot_jani.dmi | Bin .../icons/widerobot_med.dmi | Bin .../icons/widerobot_mine.dmi | Bin .../icons/widerobot_pk.dmi | Bin .../icons/widerobot_sec.dmi | Bin .../icons/widerobot_serv.dmi | Bin .../icons/widerobots_cargo.dmi | Bin .../modules/{cyborg => borgs}/readme.md | 15 +- .../modules/cargoborg/code/robot_modules.dm | 45 -- .../modules/cyborg/code/borgpowertools.dm | 50 --- .../modules/cyborg/icons/items_cyborg.dmi | Bin 731 -> 0 bytes .../modules/ghostcafe/code/robot_ghostcafe.dm | 19 +- .../shapeshifting_module/code/all_nodes.dm | 7 - .../code/borg_shapeshifter.dm | 246 ----------- .../code/robot_upgrades.dm | 17 - .../modules/shapeshifting_module/readme.md | 34 -- tgstation.dme | 24 +- 65 files changed, 972 insertions(+), 840 deletions(-) delete mode 100644 modular_skyrat/modules/altborgs/code/cyborg_items.dm delete mode 100644 modular_skyrat/modules/altborgs/code/robot_items.dm delete mode 100644 modular_skyrat/modules/altborgs/code/robot_upgrade.dm delete mode 100644 modular_skyrat/modules/altborgs/icons/robot_items.dmi delete mode 100644 modular_skyrat/modules/altborgs/readme.md rename modular_skyrat/modules/{altborgs => borgs}/code/inventory.dm (100%) rename modular_skyrat/modules/{cyborg => borgs}/code/mechafabricator_designs.dm (52%) rename modular_skyrat/modules/{altborgs => borgs}/code/robot.dm (100%) rename modular_skyrat/modules/{altborgs => borgs}/code/robot_defines.dm (100%) rename modular_skyrat/modules/{cargoborg => borgs}/code/robot_items.dm (56%) rename modular_skyrat/modules/{altborgs => borgs}/code/robot_model.dm (87%) rename modular_skyrat/modules/{cyborg/code/robot_upgrades.dm => borgs/code/robot_upgrade.dm} (52%) rename modular_skyrat/modules/{altborgs => borgs}/code/update_icons.dm (84%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/misc/tallrobot_effects.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/readme.md (100%) create mode 100644 modular_skyrat/modules/borgs/icons/robot_items.dmi rename modular_skyrat/modules/{altborgs => borgs}/icons/robots.dmi (100%) rename modular_skyrat/modules/{cargoborg => borgs}/icons/robots_cargo.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/robots_clown.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/robots_eng.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/robots_jani.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/robots_med.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/robots_mine.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/robots_ninja.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/robots_pk.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/robots_sec.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/robots_serv.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/robots_syndi.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/screen_cyborg.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_cargo.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_clown.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_eng.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_jani.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_med.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_mine.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_ninja.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_pk.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_sec.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_serv.dmi (100%) rename modular_skyrat/modules/{altborgs/icons/tallborg => borgs/icons}/tallrobot_syndi.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/widerobot_eng.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/widerobot_jani.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/widerobot_med.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/widerobot_mine.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/widerobot_pk.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/widerobot_sec.dmi (100%) rename modular_skyrat/modules/{altborgs => borgs}/icons/widerobot_serv.dmi (100%) rename modular_skyrat/modules/{cargoborg => borgs}/icons/widerobots_cargo.dmi (100%) rename modular_skyrat/modules/{cyborg => borgs}/readme.md (53%) delete mode 100644 modular_skyrat/modules/cargoborg/code/robot_modules.dm delete mode 100644 modular_skyrat/modules/cyborg/code/borgpowertools.dm delete mode 100644 modular_skyrat/modules/cyborg/icons/items_cyborg.dmi delete mode 100644 modular_skyrat/modules/shapeshifting_module/code/all_nodes.dm delete mode 100644 modular_skyrat/modules/shapeshifting_module/code/borg_shapeshifter.dm delete mode 100644 modular_skyrat/modules/shapeshifting_module/code/robot_upgrades.dm delete mode 100644 modular_skyrat/modules/shapeshifting_module/readme.md diff --git a/code/__DEFINES/~skyrat_defines/robot_defines.dm b/code/__DEFINES/~skyrat_defines/robot_defines.dm index 064cebd615e..8dde8079fb6 100644 --- a/code/__DEFINES/~skyrat_defines/robot_defines.dm +++ b/code/__DEFINES/~skyrat_defines/robot_defines.dm @@ -1,4 +1,4 @@ -//Module - altborgs +//Module - borgs //Defines for dogborgs and stuff #define ROBOT_REST_NORMAL 1 #define ROBOT_REST_SITTING 2 @@ -11,58 +11,60 @@ #define R_TRAIT_UNIQUEWRECK "unique_wreck" /// Or when tipped over. #define R_TRAIT_UNIQUETIP "unique_tip" -/// Represents wide/quadruped/dogborg type models. +/// 64x32 skins #define R_TRAIT_WIDE "wide_borg" /// 32x64 skins #define R_TRAIT_TALL "tall_borg" /// Any model small enough to reject the shrinker upgrade. #define R_TRAIT_SMALL "small_chassis" +/// Any model that has a custom front panel +#define R_TRAIT_UNIQUEPANEL "unique_openpanel" // Icon file locations for modular borg icons -#define CYBORG_ICON_STANDARD 'modular_skyrat/modules/altborgs/icons/robots.dmi' +#define CYBORG_ICON_STANDARD 'modular_skyrat/modules/borgs/icons/robots.dmi' -#define CYBORG_ICON_MED 'modular_skyrat/modules/altborgs/icons/robots_med.dmi' -#define CYBORG_ICON_MED_WIDE 'modular_skyrat/modules/altborgs/icons/widerobot_med.dmi' -#define CYBORG_ICON_MED_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_med.dmi' +#define CYBORG_ICON_MED 'modular_skyrat/modules/borgs/icons/robots_med.dmi' +#define CYBORG_ICON_MED_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_med.dmi' +#define CYBORG_ICON_MED_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_med.dmi' -#define CYBORG_ICON_CARGO 'modular_skyrat/modules/cargoborg/icons/robots_cargo.dmi' -#define CYBORG_ICON_CARGO_WIDE 'modular_skyrat/modules/cargoborg/icons/widerobots_cargo.dmi' -#define CYBORG_ICON_CARGO_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_cargo.dmi' +#define CYBORG_ICON_CARGO 'modular_skyrat/modules/borgs/icons/robots_cargo.dmi' +#define CYBORG_ICON_CARGO_WIDE 'modular_skyrat/modules/borgs/icons/widerobots_cargo.dmi' +#define CYBORG_ICON_CARGO_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_cargo.dmi' -#define CYBORG_ICON_SEC 'modular_skyrat/modules/altborgs/icons/robots_sec.dmi' -#define CYBORG_ICON_SEC_WIDE 'modular_skyrat/modules/altborgs/icons/widerobot_sec.dmi' -#define CYBORG_ICON_SEC_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_sec.dmi' +#define CYBORG_ICON_SEC 'modular_skyrat/modules/borgs/icons/robots_sec.dmi' +#define CYBORG_ICON_SEC_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_sec.dmi' +#define CYBORG_ICON_SEC_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_sec.dmi' -#define CYBORG_ICON_ENG 'modular_skyrat/modules/altborgs/icons/robots_eng.dmi' -#define CYBORG_ICON_ENG_WIDE 'modular_skyrat/modules/altborgs/icons/widerobot_eng.dmi' -#define CYBORG_ICON_ENG_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_eng.dmi' +#define CYBORG_ICON_ENG 'modular_skyrat/modules/borgs/icons/robots_eng.dmi' +#define CYBORG_ICON_ENG_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_eng.dmi' +#define CYBORG_ICON_ENG_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_eng.dmi' -#define CYBORG_ICON_PEACEKEEPER 'modular_skyrat/modules/altborgs/icons/robots_pk.dmi' -#define CYBORG_ICON_PEACEKEEPER_WIDE 'modular_skyrat/modules/altborgs/icons/widerobot_pk.dmi' -#define CYBORG_ICON_PEACEKEEPER_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_pk.dmi' +#define CYBORG_ICON_PEACEKEEPER 'modular_skyrat/modules/borgs/icons/robots_pk.dmi' +#define CYBORG_ICON_PEACEKEEPER_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_pk.dmi' +#define CYBORG_ICON_PEACEKEEPER_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_pk.dmi' -#define CYBORG_ICON_SERVICE 'modular_skyrat/modules/altborgs/icons/robots_serv.dmi' -#define CYBORG_ICON_SERVICE_WIDE 'modular_skyrat/modules/altborgs/icons/widerobot_serv.dmi' -#define CYBORG_ICON_SERVICE_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_serv.dmi' +#define CYBORG_ICON_SERVICE 'modular_skyrat/modules/borgs/icons/robots_serv.dmi' +#define CYBORG_ICON_SERVICE_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_serv.dmi' +#define CYBORG_ICON_SERVICE_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_serv.dmi' -#define CYBORG_ICON_MINING 'modular_skyrat/modules/altborgs/icons/robots_mine.dmi' -#define CYBORG_ICON_MINING_WIDE 'modular_skyrat/modules/altborgs/icons/widerobot_mine.dmi' -#define CYBORG_ICON_MINING_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_mine.dmi' +#define CYBORG_ICON_MINING 'modular_skyrat/modules/borgs/icons/robots_mine.dmi' +#define CYBORG_ICON_MINING_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_mine.dmi' +#define CYBORG_ICON_MINING_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_mine.dmi' -#define CYBORG_ICON_JANI 'modular_skyrat/modules/altborgs/icons/robots_jani.dmi' -#define CYBORG_ICON_JANI_WIDE 'modular_skyrat/modules/altborgs/icons/widerobot_jani.dmi' -#define CYBORG_ICON_JANI_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_jani.dmi' +#define CYBORG_ICON_JANI 'modular_skyrat/modules/borgs/icons/robots_jani.dmi' +#define CYBORG_ICON_JANI_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_jani.dmi' +#define CYBORG_ICON_JANI_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_jani.dmi' -#define CYBORG_ICON_SYNDIE 'modular_skyrat/modules/altborgs/icons/robots_syndi.dmi' -#define CYBORG_ICON_SYNDIE_WIDE 'modular_skyrat/modules/altborgs/icons/widerobot_syndi.dmi' -#define CYBORG_ICON_SYNDIE_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_syndi.dmi' +#define CYBORG_ICON_SYNDIE 'modular_skyrat/modules/borgs/icons/robots_syndi.dmi' +#define CYBORG_ICON_SYNDIE_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_syndi.dmi' +#define CYBORG_ICON_SYNDIE_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_syndi.dmi' -#define CYBORG_ICON_CLOWN 'modular_skyrat/modules/altborgs/icons/robots_clown.dmi' -#define CYBORG_ICON_CLOWN_WIDE 'modular_skyrat/modules/altborgs/icons/widerobot_clown.dmi' -#define CYBORG_ICON_CLOWN_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_clown.dmi' +#define CYBORG_ICON_CLOWN 'modular_skyrat/modules/borgs/icons/robots_clown.dmi' +#define CYBORG_ICON_CLOWN_WIDE 'modular_skyrat/modules/borgs/icons/widerobot_clown.dmi' +#define CYBORG_ICON_CLOWN_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_clown.dmi' -#define CYBORG_ICON_NINJA 'modular_skyrat/modules/altborgs/icons/robots_ninja.dmi' -#define CYBORG_ICON_NINJA_TALL 'modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_ninja.dmi' +#define CYBORG_ICON_NINJA 'modular_skyrat/modules/borgs/icons/robots_ninja.dmi' +#define CYBORG_ICON_NINJA_TALL 'modular_skyrat/modules/borgs/icons/tallrobot_ninja.dmi' /// Module is compatible with Cargo Cyborg model #define BORG_MODEL_CARGO (BORG_MODEL_ENGINEERING<<1) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3d26ea466af..c9b72ec8a92 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -349,7 +349,7 @@ eye_lights.icon = icon add_overlay(eye_lights) - if(opened) + if(opened && !(R_TRAIT_UNIQUEPANEL in model.model_features)) if(wiresexposed) add_overlay("ov-opencover +w") else if(cell) diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm index 9e0018e2d1b..100d5c3da65 100644 --- a/code/modules/mob/living/silicon/robot/robot_model.dm +++ b/code/modules/mob/living/silicon/robot/robot_model.dm @@ -808,11 +808,12 @@ /obj/item/borg/apparatus/beaker/service, /obj/item/reagent_containers/cup/beaker/large, //I know a shaker is more appropiate but this is for ease of identification //Skyrat Edit Start: Borg Buff - //obj/item/reagent_containers/condiment/enzyme, //edit - /obj/item/reagent_containers/condiment/enzyme, + //obj/item/reagent_containers/condiment/enzyme, //edit - Borg shaker has it + /obj/item/borg/apparatus/beaker, // SKYRAT EDIT: allows the pickup of different beakers for easier drink mixing /obj/item/reagent_containers/dropper, /obj/item/rsf, /obj/item/storage/bag/tray, + /obj/item/storage/bag/tray, // SKYRAT EDIT: Moves the second tray up to be near the default one /obj/item/pen, /obj/item/toy/crayon/spraycan/borg, /obj/item/extinguisher/mini, @@ -820,15 +821,10 @@ /obj/item/razor, /obj/item/instrument/guitar, /obj/item/instrument/piano_synth, - /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/borghypo/borgshaker/specific/juice, //edit /obj/item/reagent_containers/borghypo/borgshaker/specific/soda, //edit /obj/item/reagent_containers/borghypo/borgshaker/specific/alcohol, //edit /obj/item/reagent_containers/borghypo/borgshaker/specific/misc, //edit - /obj/item/reagent_containers/dropper, - /obj/item/lighter, - /obj/item/storage/bag/tray, - //obj/item/reagent_containers/borghypo/borgshaker, //edit /obj/item/reagent_containers/syringe, //edit /obj/item/cooking/cyborg/power, //edit /obj/item/lighter, diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index c643092f8b8..455032f17d8 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -153,7 +153,7 @@ icon_state = "kineticgun" // SKYRAT EDIT CHANGE holds_charge = TRUE unique_frequency = TRUE - max_mod_capacity = 80 + max_mod_capacity = 100 // SKYRAT EDIT CHANGE FROM 80 - Balance due to fauna changes and no level perks applying /obj/item/gun/energy/recharge/kinetic_accelerator/minebot trigger_guard = TRIGGER_GUARD_ALLOW_ALL diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 0c1e3498dc1..9a79ec0db75 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1,4 +1,6 @@ //Cyborg + +/* //SKYRAT EDIT REMOVAL BEGIN - Costs lowered and time reduced - /datum/design/borg_suit name = "Cyborg Endoskeleton" id = "borg_suit" @@ -75,6 +77,7 @@ category = list( RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS ) +*///SKYRAT EDIT REMOVAL END //Ripley /datum/design/ripley_chassis @@ -1183,7 +1186,7 @@ category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SERVICE ) - + /datum/design/borg_upgrade_service_apparatus name = "Service Apparatus" id = "borg_upgrade_service_apparatus" @@ -1262,7 +1265,6 @@ RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL ) -/* //SKYRAT REMOVAL START /datum/design/borg_upgrade_pinpointer name = "Crew Pinpointer" id = "borg_upgrade_pinpointer" @@ -1273,7 +1275,6 @@ category = list( RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL ) -*/ //SKYRAT REMOVAL END /datum/design/borg_upgrade_broomer name = "Experimental Push Broom" diff --git a/modular_skyrat/master_files/code/modules/mob/living/sillicon/robot.dm b/modular_skyrat/master_files/code/modules/mob/living/sillicon/robot.dm index 1af9fd8a2e7..d81b457549b 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/sillicon/robot.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/sillicon/robot.dm @@ -85,7 +85,7 @@ // Another smoke effect /obj/effect/temp_visual/mook_dust/robot - icon = 'modular_skyrat/modules/altborgs/icons/tallborg/misc/tallrobot_effects.dmi' + icon = 'modular_skyrat/modules/borgs/icons/misc/tallrobot_effects.dmi' icon_state = "impact_cloud" color = "#a9a9a93c" diff --git a/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm b/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm index b09de049865..de61febc086 100644 --- a/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm +++ b/modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm @@ -14,6 +14,15 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000) +/datum/techweb_node/borg_shapeshifter + id = "borg_shapeshifter" + display_name = "Illegal Cyborg Addition" + description = "Some sort of experimental tool that was once used by an rival company." + prereq_ids = list("syndicate_basic") + design_ids = list("borg_shapeshifter_module") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + + // MODULAR ADDITIONS AND REMOVALS //Base Nodes @@ -239,3 +248,9 @@ design_ids -= list( "borg_upgrade_pinpointer", ) + +/datum/techweb_node/basic_mining/New() + . = ..() + design_ids += list( + "borg_upgrade_welding", + ) diff --git a/modular_skyrat/modules/altborgs/code/cyborg_items.dm b/modular_skyrat/modules/altborgs/code/cyborg_items.dm deleted file mode 100644 index ad60d11b14e..00000000000 --- a/modular_skyrat/modules/altborgs/code/cyborg_items.dm +++ /dev/null @@ -1,33 +0,0 @@ -#define BASE_NINJA_REAGENTS list(\ - /datum/reagent/medicine/inacusiate,\ - /datum/reagent/medicine/morphine,\ - /datum/reagent/medicine/potass_iodide,\ - /datum/reagent/medicine/syndicate_nanites,\ - /datum/reagent/consumable/nutriment\ - ) - - -/obj/item/katana/ninja_blade - name = "energy katana" - desc = "A katana infused with strong energy." - force = 30 - icon_state = "energy_katana" - inhand_icon_state = "energy_katana" - worn_icon_state = "energy_katana" - -/obj/item/shockpaddles/syndicate/cyborg/ninja - name = "modified defibrillator paddles" - icon = 'modular_skyrat/modules/altborgs/icons/robot_items.dmi' - icon_state = "ninjapaddles0" - base_icon_state = "ninjapaddles" - -/obj/item/reagent_containers/borghypo/syndicate/ninja - name = "modified cyborg hypospray" - desc = "An experimental piece of technology used to produce powerful restorative nanites used to very quickly restore injuries of all types. metabolizes potassium iodide for radiation poisoning, inacusiate for ear damage and morphine for offense and nutriment for the operative in the field." - icon = 'modular_skyrat/modules/altborgs/icons/robot_items.dmi' - icon_state = "borghypo_n" - charge_cost = 20 - recharge_time = 2 - default_reagent_types = BASE_NINJA_REAGENTS //That is for Ninja - bypass_protection = TRUE //They still wearing suits, don't they? - diff --git a/modular_skyrat/modules/altborgs/code/robot_items.dm b/modular_skyrat/modules/altborgs/code/robot_items.dm deleted file mode 100644 index e016439bfe1..00000000000 --- a/modular_skyrat/modules/altborgs/code/robot_items.dm +++ /dev/null @@ -1,38 +0,0 @@ -/obj/item/dogborg_tongue - name = "synthetic tongue" - desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face." - icon = 'modular_skyrat/modules/altborgs/icons/robot_items.dmi' - icon_state = "synthtongue" - hitsound = 'sound/effects/attackblob.ogg' - desc = "For giving affectionate kisses." - item_flags = NOBLUDGEON - -/obj/item/dogborg_tongue/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || !isliving(target)) - return - var/mob/living/silicon/robot/borg = user - var/mob/living/mob = target - - if(check_zone(borg.zone_selected) == "head") - borg.visible_message(span_warning("\the [borg] affectionally licks \the [mob]'s face!"), span_notice("You affectionally lick \the [mob]'s face!")) - playsound(borg, 'sound/effects/attackblob.ogg', 50, 1) - else - borg.visible_message(span_warning("\the [borg] affectionally licks \the [mob]!"), span_notice("You affectionally lick \the [mob]!")) - playsound(borg, 'sound/effects/attackblob.ogg', 50, 1) - -/obj/item/dogborg_nose - name = "boop module" - desc = "The BOOP module" - icon = 'modular_skyrat/modules/altborgs/icons/robot_items.dmi' - icon_state = "nose" - flags_1 = CONDUCT_1 - item_flags = NOBLUDGEON - force = 0 - -/obj/item/dogborg_nose/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - return - do_attack_animation(target, null, src) - user.visible_message(span_notice("[user] [pick("nuzzles", "pushes", "boops")] \the [target.name] with their nose!")) diff --git a/modular_skyrat/modules/altborgs/code/robot_upgrade.dm b/modular_skyrat/modules/altborgs/code/robot_upgrade.dm deleted file mode 100644 index a35f4b82c0b..00000000000 --- a/modular_skyrat/modules/altborgs/code/robot_upgrade.dm +++ /dev/null @@ -1,9 +0,0 @@ -/obj/item/borg/upgrade/transform/syndicatejack - name = "borg module picker (Syndicate)" - desc = "Allows you to to turn a cyborg into a experimental syndicate cyborg." - icon_state = "cyborg_upgrade3" - new_model = /obj/item/robot_model/syndicatejack - -/obj/item/borg/upgrade/transform/syndicatejack/action(mob/living/silicon/robot/cyborg, user = usr) // Only usable on emagged cyborgs. In exchange. makes you unable to get locked down or detonated. - if(cyborg.emagged) - return ..() diff --git a/modular_skyrat/modules/altborgs/icons/robot_items.dmi b/modular_skyrat/modules/altborgs/icons/robot_items.dmi deleted file mode 100644 index 09a915f58edcaeb989fa8569c0f350e19b76249a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6619 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 be?Xa7#_2+I5u|`WZ2$!s73oq*qtE{b%3ZGX diff --git a/modular_skyrat/modules/altborgs/readme.md b/modular_skyrat/modules/altborgs/readme.md deleted file mode 100644 index 526d3916ba4..00000000000 --- a/modular_skyrat/modules/altborgs/readme.md +++ /dev/null @@ -1,30 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/127 - -## Title: Alternate Borgs - -MODULE ID: ALTBORGS - -### Description: - -Adds all alternate borg presets to the game, ported from Skyrat. - -### TG Proc Changes: -- APPEND: modular_skyrat/modules/altborgs/code/modules/mob/living/silicon/robot/robot.dm > /mob/living/silicon/robot/doMove() -- ADDITION: code\modules\mob\living\silicon\robot\robot_modules.dm > /obj/item/robot_module/proc/transform_to(new_module_type) - -### Defines: - -- #define JOB_DISPLAY_ORDER_BLUESHIELD 34 -- #define ACCESS_BLUESHIELD 71 - -### Master file additions - -- N/A - -### Included files that are not contained in this module: - -- N/A - -### Credits: - -Gandalf2k15 - Porting & refactoring diff --git a/modular_skyrat/modules/altborgs/code/inventory.dm b/modular_skyrat/modules/borgs/code/inventory.dm similarity index 100% rename from modular_skyrat/modules/altborgs/code/inventory.dm rename to modular_skyrat/modules/borgs/code/inventory.dm diff --git a/modular_skyrat/modules/cyborg/code/mechafabricator_designs.dm b/modular_skyrat/modules/borgs/code/mechafabricator_designs.dm similarity index 52% rename from modular_skyrat/modules/cyborg/code/mechafabricator_designs.dm rename to modular_skyrat/modules/borgs/code/mechafabricator_designs.dm index c7942759f37..a8d8c0046ff 100644 --- a/modular_skyrat/modules/cyborg/code/mechafabricator_designs.dm +++ b/modular_skyrat/modules/borgs/code/mechafabricator_designs.dm @@ -61,3 +61,92 @@ construction_time = 120 category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL) +/datum/design/borg_upgrade_welding + name = "Welding Module" + id = "borg_upgrade_welding" + construction_time = 6 SECONDS + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/welder + materials = list( + /datum/material/iron=SHEET_MATERIAL_AMOUNT * 5, + /datum/material/plasma=SHEET_MATERIAL_AMOUNT * 1, + ) + category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING) + +//Cyborg Skyrat overrides +/datum/design/borg_suit + name = "Cyborg Endoskeleton" + id = "borg_suit" + build_type = MECHFAB + build_path = /obj/item/robot_suit + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 3) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS + ) + +/datum/design/borg_chest + name = "Cyborg Torso" + id = "borg_chest" + build_type = MECHFAB + build_path = /obj/item/bodypart/chest/robot + materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 8) + construction_time = 12 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS + ) + +/datum/design/borg_head + name = "Cyborg Head" + id = "borg_head" + build_type = MECHFAB + build_path = /obj/item/bodypart/head/robot + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT) + construction_time = 4 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS + ) + +/datum/design/borg_l_arm + name = "Cyborg Left Arm" + id = "borg_l_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/left/robot + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS + ) + +/datum/design/borg_r_arm + name = "Cyborg Right Arm" + id = "borg_r_arm" + build_type = MECHFAB + build_path = /obj/item/bodypart/arm/right/robot + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS + ) + +/datum/design/borg_l_leg + name = "Cyborg Left Leg" + id = "borg_l_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/left/robot + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS + ) + +/datum/design/borg_r_leg + name = "Cyborg Right Leg" + id = "borg_r_leg" + build_type = MECHFAB + build_path = /obj/item/bodypart/leg/right/robot + materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT * 2) + construction_time = 8 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS + ) diff --git a/modular_skyrat/modules/altborgs/code/robot.dm b/modular_skyrat/modules/borgs/code/robot.dm similarity index 100% rename from modular_skyrat/modules/altborgs/code/robot.dm rename to modular_skyrat/modules/borgs/code/robot.dm diff --git a/modular_skyrat/modules/altborgs/code/robot_defines.dm b/modular_skyrat/modules/borgs/code/robot_defines.dm similarity index 100% rename from modular_skyrat/modules/altborgs/code/robot_defines.dm rename to modular_skyrat/modules/borgs/code/robot_defines.dm diff --git a/modular_skyrat/modules/cargoborg/code/robot_items.dm b/modular_skyrat/modules/borgs/code/robot_items.dm similarity index 56% rename from modular_skyrat/modules/cargoborg/code/robot_items.dm rename to modular_skyrat/modules/borgs/code/robot_items.dm index 69247a1405c..96a03b2e38d 100644 --- a/modular_skyrat/modules/cargoborg/code/robot_items.dm +++ b/modular_skyrat/modules/borgs/code/robot_items.dm @@ -1,4 +1,9 @@ -/// CARGO BORGS /// +/// Use this file to add STANDARD ITEMS to borgs, the upgrade items will go in the modular robot_upgrade.dm + +/* +* CARGO BORGS +*/ + #define CYBORG_FONT "Consolas" #define MAX_PAPER_INTEGRATED_CLIPBOARD 10 @@ -67,7 +72,7 @@ labels_left = 9000 // I don't want to bother forcing them to recharge, honestly, that's a lot of code for a very niche functionality -/// The clamps +/// THE CLAMPS!! /obj/item/borg/hydraulic_clamp name = "integrated hydraulic clamp" desc = "A neat way to lift and move around few small packages for quick and painless deliveries!" @@ -279,81 +284,6 @@ visible_message(span_notice("[src.loc] loads [lifting_up] into [src]'s cargo hold.")) in_use = FALSE - -/obj/item/borg/hydraulic_clamp/better - name = "improved integrated hydraulic clamp" - desc = "A neat way to lift and move around wrapped crates for quick and painless deliveries!" - storage_capacity = 2 - whitelisted_item_types = list(/obj/item/delivery, /obj/item/bounty_cube) // If they want to carry a small package or a bounty cube instead, so be it, honestly. - whitelisted_item_description = "wrapped packages" - item_weight_limit = NONE - clamp_sound_volume = 50 - -/obj/item/borg/hydraulic_clamp/better/examine(mob/user) - . = ..() - var/crate_count = contents.len - . += "There is currently [crate_count > 0 ? crate_count : "no"] crate[crate_count > 1 ? "s" : ""] stored in the clamp's internal storage." - -/obj/item/borg/hydraulic_clamp/mail - name = "integrated rapid mail delivery device" - desc = "Allows you to carry around a lot of mail, to distribute it around the station like the good little mailbot you are!" - icon = 'icons/obj/service/library.dmi' - icon_state = "bookbag" - storage_capacity = 100 - loading_time = 0.25 SECONDS - unloading_time = 0.25 SECONDS - cooldown_duration = 0.25 SECONDS - whitelisted_item_types = list(/obj/item/mail) - whitelisted_item_description = "enveloppes" - item_weight_limit = WEIGHT_CLASS_NORMAL - clamp_sound_volume = 25 - clamp_sound = 'sound/items/pshoom.ogg' - - - -/datum/design/borg_upgrade_clamp - name = "Improved Integrated Hydraulic Clamp Module" - id = "borg_upgrade_clamp" - build_type = MECHFAB - build_path = /obj/item/borg/upgrade/better_clamp - materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 5) - construction_time = 12 SECONDS - category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_CARGO) - - -/obj/item/borg/upgrade/better_clamp - name = "improved integrated hydraulic clamp" - desc = "An improved hydraulic clamp that trades its storage quantity to allow for bigger packages to be picked up instead!" - icon_state = "cyborg_upgrade3" - require_model = TRUE - model_type = list(/obj/item/robot_model/cargo) - model_flags = BORG_MODEL_CARGO - - -/obj/item/borg/upgrade/better_clamp/action(mob/living/silicon/robot/cyborg, user = usr) - . = ..() - if(!.) - return - var/obj/item/borg/hydraulic_clamp/better/big_clamp = locate() in cyborg.model.modules - if(big_clamp) - to_chat(user, span_warning("This cyborg is already equipped with an improved integrated hydraulic clamp!")) - return FALSE - - big_clamp = new(cyborg.model) - cyborg.model.basic_modules += big_clamp - cyborg.model.add_module(big_clamp, FALSE, TRUE) - - -/obj/item/borg/upgrade/better_clamp/deactivate(mob/living/silicon/robot/cyborg, user = usr) - . = ..() - if(!.) - return - var/obj/item/borg/hydraulic_clamp/better/big_clamp = locate() in cyborg.model.modules - if(big_clamp) - cyborg.model.remove_module(big_clamp, TRUE) - - - /// The fabled paper plane crossbow and its hardlight paper planes. /obj/item/paperplane/syndicate/hardlight name = "hardlight paper plane" @@ -490,3 +420,336 @@ // I did this out of sanity, I didn't want to make the clamp code more complex than necessary, and honestly I'm considering taking this upstream, it just feels awkward to PR just that. /obj/item/bounty_cube w_class = WEIGHT_CLASS_SMALL + +#define BASE_NINJA_REAGENTS list(\ + /datum/reagent/medicine/inacusiate,\ + /datum/reagent/medicine/morphine,\ + /datum/reagent/medicine/potass_iodide,\ + /datum/reagent/medicine/syndicate_nanites,\ + /datum/reagent/consumable/nutriment\ + ) + + +/obj/item/katana/ninja_blade + name = "energy katana" + desc = "A katana infused with strong energy." + force = 30 + icon_state = "energy_katana" + inhand_icon_state = "energy_katana" + worn_icon_state = "energy_katana" + +/obj/item/shockpaddles/syndicate/cyborg/ninja + name = "modified defibrillator paddles" + icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon_state = "ninjapaddles0" + base_icon_state = "ninjapaddles" + +/obj/item/reagent_containers/borghypo/syndicate/ninja + name = "modified cyborg hypospray" + desc = "An experimental piece of technology used to produce powerful restorative nanites used to very quickly restore injuries of all types. metabolizes potassium iodide for radiation poisoning, inacusiate for ear damage and morphine for offense and nutriment for the operative in the field." + icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon_state = "borghypo_n" + charge_cost = 20 + recharge_time = 2 + default_reagent_types = BASE_NINJA_REAGENTS //That is for Ninja + bypass_protection = TRUE //They still wearing suits, don't they? + +/// Engineering Modules /// +/obj/item/crowbar/cyborg/power + name = "modular crowbar" + desc = "A cyborg fitted module resembling the jaws of life." + icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon_state = "jaws_pry_cyborg" + usesound = 'sound/items/jaws_pry.ogg' + force = 10 + toolspeed = 0.5 + +/obj/item/crowbar/cyborg/power/examine() + . = ..() + . += " It's fitted with a [tool_behaviour == TOOL_CROWBAR ? "prying" : "cutting"] head." + +/obj/item/crowbar/cyborg/power/attack_self(mob/user) + playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, TRUE) + if(tool_behaviour == TOOL_CROWBAR) + tool_behaviour = TOOL_WIRECUTTER + to_chat(user, span_notice("You attach the cutting jaws to [src].")) + icon_state = "jaws_cutter_cyborg" + usesound = 'sound/items/jaws_cut.ogg' + else + tool_behaviour = TOOL_CROWBAR + to_chat(user, span_notice("You attach the prying jaws to [src].")) + icon_state = "jaws_pry_cyborg" + usesound = 'sound/items/jaws_pry.ogg' + +/obj/item/screwdriver/cyborg/power + name = "automated drill" + desc = "A cyborg fitted module resembling the hand drill" + icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon_state = "drill_screw_cyborg" + hitsound = 'sound/items/drill_hit.ogg' + usesound = 'sound/items/drill_use.ogg' + toolspeed = 0.5 + random_color = FALSE + +/obj/item/screwdriver/cyborg/power/examine() + . = ..() + . += " It's fitted with a [tool_behaviour == TOOL_SCREWDRIVER ? "screw" : "bolt"] head." + +/obj/item/screwdriver/cyborg/power/attack_self(mob/user) + playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE) + if(tool_behaviour == TOOL_SCREWDRIVER) + tool_behaviour = TOOL_WRENCH + to_chat(user, span_notice("You attach the bolt bit to [src].")) + icon_state = "drill_bolt_cyborg" + else + tool_behaviour = TOOL_SCREWDRIVER + to_chat(user, span_notice("You attach the screw bit to [src].")) + icon_state = "drill_screw_cyborg" + +/// Shapeshifter +/obj/item/borg_shapeshifter + name = "cyborg chameleon projector" + icon = 'icons/obj/device.dmi' + icon_state = "shield0" + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON + inhand_icon_state = "electronic" + lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + w_class = WEIGHT_CLASS_SMALL + var/saved_icon + var/saved_bubble_icon + var/saved_icon_override + var/saved_name + var/saved_model_features + var/saved_special_light_key + var/saved_hat_offset + var/active = FALSE + var/activationCost = 100 + var/activationUpkeep = 5 + var/disguise_model_name + var/disguise + var/disguise_icon_override + var/disguise_pixel_offset = 0 + var/disguise_hat_offset = 0 + /// Traits unique to this model (deadsprite, wide/dogborginess, etc.). Mirrors the definition in modular_skyrat\modules\borgs\code\modules\mob\living\silicon\robot\robot_model.dm + var/list/disguise_model_features = list() + var/disguise_special_light_key + var/mob/listeningTo + var/list/signalCache = list( // list here all signals that should break the camouflage + COMSIG_ATOM_ATTACKBY, + COMSIG_ATOM_ATTACK_HAND, + COMSIG_MOVABLE_IMPACT_ZONE, + COMSIG_ATOM_BULLET_ACT, + COMSIG_ATOM_EX_ACT, + COMSIG_ATOM_FIRE_ACT, + COMSIG_ATOM_EMP_ACT, + ) + var/mob/living/silicon/robot/user // needed for process() + var/animation_playing = FALSE + +/obj/item/borg_shapeshifter/Initialize(mapload) + . = ..() + +/obj/item/borg_shapeshifter/Destroy() + listeningTo = null + return ..() + +/obj/item/borg_shapeshifter/dropped(mob/user) + . = ..() + disrupt(user) + +/obj/item/borg_shapeshifter/equipped(mob/user) + . = ..() + disrupt(user) + +/** + * check_menu: Checks if we are allowed to interact with a radial menu + * + * Arguments: + * * user The mob interacting with a menu + */ +/obj/item/borg_shapeshifter/proc/check_menu(mob/user) + if(!istype(user)) + return FALSE + if(user.incapacitated() || !user.Adjacent(src)) + return FALSE + return TRUE + +/obj/item/borg_shapeshifter/attack_self(mob/living/silicon/robot/user) + if (user && user.cell && user.cell.charge > activationCost) + if (isturf(user.loc)) + toggle(user) + else + to_chat(user, span_warning("You can't use [src] while inside something!")) + else + to_chat(user, span_warning("You need at least [activationCost] charge in your cell to use [src]!")) + +/obj/item/borg_shapeshifter/proc/toggle(mob/living/silicon/robot/user) + if(active) + playsound(src, 'sound/effects/pop.ogg', 100, TRUE, -6) + to_chat(user, span_notice("You deactivate \the [src].")) + deactivate(user) + else + if(animation_playing) + to_chat(user, span_notice("\the [src] is recharging.")) + return + var/static/list/model_icons = sort_list(list( + "Standard" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "robot"), + "Medical" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "medical"), + "Cargo" = image(icon = CYBORG_ICON_CARGO, icon_state = "cargoborg"), + "Engineer" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "engineer"), + "Security" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "sec"), + "Service" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "service_f"), + "Janitor" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "janitor"), + "Miner" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "miner"), + "Peacekeeper" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "peace"), + "Clown" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "clown"), + "Syndicate" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "synd_sec"), + "Spider Clan" = image(icon = CYBORG_ICON_NINJA, icon_state = "ninja_engi") + )) + var/model_selection = show_radial_menu(user, user, model_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 42, require_near = TRUE) + if(!model_selection) + return FALSE + + var/obj/item/robot_model/model + switch(model_selection) + if("Standard") + model = new /obj/item/robot_model/standard + if("Medical") + model = new /obj/item/robot_model/medical + if("Cargo") + model = new /obj/item/robot_model/cargo + if("Engineer") + model = new /obj/item/robot_model/engineering + if("Security") + model = new /obj/item/robot_model/security + if("Service") + model = new /obj/item/robot_model/service + if("Janitor") + model = new /obj/item/robot_model/janitor + if("Miner") + model = new /obj/item/robot_model/miner + if("Peacekeeper") + model = new /obj/item/robot_model/peacekeeper + if("Clown") + model = new /obj/item/robot_model/clown + if("Syndicate") + model = new /obj/item/robot_model/syndicatejack + if("Spider Clan") + model = new /obj/item/robot_model/ninja + else + return FALSE + if (!set_disguise_vars(model, user)) + qdel(model) + return FALSE + qdel(model) + animation_playing = TRUE + to_chat(user, span_notice("You activate \the [src].")) + playsound(src, 'sound/effects/seedling_chargeup.ogg', 100, TRUE, -6) + var/start = user.filters.len + var/X,Y,rsq,i,f + for(i=1, i<=7, ++i) + do + X = 60*rand() - 30 + Y = 60*rand() - 30 + rsq = X*X + Y*Y + while(rsq<100 || rsq>900) + user.filters += filter(type="wave", x=X, y=Y, size=rand()*2.5+0.5, offset=rand()) + for(i=1, i<=7, ++i) + f = user.filters[start+i] + animate(f, offset=f:offset, time=0, loop=3, flags=ANIMATION_PARALLEL) + animate(offset=f:offset-1, time=rand()*20+10) + if (do_after(user, 50, target=user) && user.cell.use(activationCost)) + playsound(src, 'sound/effects/bamf.ogg', 100, TRUE, -6) + to_chat(user, span_notice("You are now disguised.")) + activate(user) + else + to_chat(user, span_warning("The chameleon field fizzles.")) + do_sparks(3, FALSE, user) + for(i=1, i<=min(7, user.filters.len), ++i) // removing filters that are animating does nothing, we gotta stop the animations first + f = user.filters[start+i] + animate(f) + user.filters = null + animation_playing = FALSE + +/obj/item/borg_shapeshifter/proc/set_disguise_vars(obj/item/robot_model/disguise_model, mob/living/silicon/robot/cyborg) + if (!disguise_model || !cyborg) + return FALSE + var/list/reskin_icons = list() + for(var/skin in disguise_model.borg_skins) + var/list/details = disguise_model.borg_skins[skin] + var/image/reskin = image(icon = details[SKIN_ICON] || 'icons/mob/silicon/robots.dmi', icon_state = details[SKIN_ICON_STATE]) + if (!isnull(details[SKIN_FEATURES])) + if (R_TRAIT_WIDE in details[SKIN_FEATURES]) + reskin.pixel_x -= 16 + reskin_icons[skin] = reskin + var/borg_skin = show_radial_menu(cyborg, cyborg, reskin_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), cyborg), radius = 38, require_near = TRUE) + if(!borg_skin) + return FALSE + disguise_model_name = disguise_model.name + var/list/details = disguise_model.borg_skins[borg_skin] + disguise = details[SKIN_ICON_STATE] + disguise_icon_override = details[SKIN_ICON] + disguise_special_light_key = details[SKIN_LIGHT_KEY] + disguise_hat_offset = 0 || details[SKIN_HAT_OFFSET] + disguise_model_features = details[SKIN_FEATURES] + return TRUE + +/obj/item/borg_shapeshifter/process() + if (user && !user.cell?.use(activationUpkeep)) + disrupt(user) + else + return PROCESS_KILL + +/obj/item/borg_shapeshifter/proc/activate(mob/living/silicon/robot/user) + src.user = user + START_PROCESSING(SSobj, src) + saved_icon = user.model.cyborg_base_icon + saved_bubble_icon = user.bubble_icon + saved_icon_override = user.model.cyborg_icon_override + saved_name = user.model.name + saved_model_features = user.model.model_features + saved_special_light_key = user.model.special_light_key + saved_hat_offset = user.model.hat_offset + user.model.name = disguise_model_name + user.model.cyborg_base_icon = disguise + user.model.cyborg_icon_override = disguise_icon_override + user.model.model_features = disguise_model_features + user.model.special_light_key = disguise_special_light_key + user.bubble_icon = "robot" + active = TRUE + user.update_icons() + user.model.update_dogborg() + user.model.update_tallborg() + + if(listeningTo == user) + return + if(listeningTo) + UnregisterSignal(listeningTo, signalCache) + RegisterSignal(user, signalCache, PROC_REF(disrupt)) + listeningTo = user + +/obj/item/borg_shapeshifter/proc/deactivate(mob/living/silicon/robot/user) + STOP_PROCESSING(SSobj, src) + if(listeningTo) + UnregisterSignal(listeningTo, signalCache) + listeningTo = null + do_sparks(5, FALSE, user) + user.model.name = saved_name + user.model.cyborg_base_icon = saved_icon + user.model.cyborg_icon_override = saved_icon_override + user.icon = saved_icon_override + user.model.model_features = saved_model_features + user.model.special_light_key = saved_special_light_key + user.bubble_icon = saved_bubble_icon + active = FALSE + user.update_icons() + user.model.update_dogborg() + user.model.update_tallborg() + +/obj/item/borg_shapeshifter/proc/disrupt(mob/living/silicon/robot/user) + SIGNAL_HANDLER + if(active) + to_chat(user, span_danger("Your chameleon field deactivates.")) + deactivate(user) diff --git a/modular_skyrat/modules/altborgs/code/robot_model.dm b/modular_skyrat/modules/borgs/code/robot_model.dm similarity index 87% rename from modular_skyrat/modules/altborgs/code/robot_model.dm rename to modular_skyrat/modules/borgs/code/robot_model.dm index 02537882e26..ffdd2d5e684 100644 --- a/modular_skyrat/modules/altborgs/code/robot_model.dm +++ b/modular_skyrat/modules/borgs/code/robot_model.dm @@ -4,6 +4,7 @@ var/cyborg_pixel_offset var/model_select_alternate_icon /// Traits unique to this model, i.e. having a unique dead sprite, being wide or being small enough to reject shrinker modules. Leverages defines in code\__DEFINES\~skyrat_defines\robot_defines.dm + /// If a sprite overlaps above the standard height, ensure it is not overlapping icons in the selector wheel. var/list/model_features = list() /obj/item/robot_model/proc/update_tallborg() @@ -46,7 +47,7 @@ /obj/item/robot_model/standard name = "Standard" borg_skins = list( - "Default" = list(SKIN_ICON_STATE = "robot", SKIN_FEATURES = list(R_TRAIT_SMALL)), + "Default" = list(SKIN_ICON_STATE = "robot", SKIN_FEATURES = list(R_TRAIT_SMALL)), "Marina" = list(SKIN_ICON_STATE = "marinasd", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), "Heavy" = list(SKIN_ICON_STATE = "heavysd", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), "Eyebot" = list(SKIN_ICON_STATE = "eyebotsd", SKIN_ICON = CYBORG_ICON_STANDARD, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL)), @@ -62,50 +63,51 @@ /obj/item/robot_model/service special_light_key = null borg_skins = list( + /// 32x32 Skins "Waitress" = list(SKIN_ICON_STATE = "service_f", SKIN_LIGHT_KEY = "service"), "Butler" = list(SKIN_ICON_STATE = "service_m", SKIN_LIGHT_KEY = "service"), - "Meka" = list(SKIN_ICON_STATE = "mekaserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "Meka (Alt)" = list(SKIN_ICON_STATE = "mekaserve_alt", SKIN_LIGHT_KEY = "mekaserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Barista)" = list(SKIN_ICON_STATE = "k4tserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (80s)" = list(SKIN_ICON_STATE = "k4tserve_alt1", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Dispenser)" = list(SKIN_ICON_STATE = "k4tserve_alt2", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekaserv", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekaserv", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "ARACHNE" = list(SKIN_ICON_STATE = "arachne_service", SKIN_ICON = CYBORG_ICON_SERVICE), - "Slipper" = list(SKIN_ICON_STATE = "slipper_service", SKIN_ICON = CYBORG_ICON_SERVICE), "Bro" = list(SKIN_ICON_STATE = "brobot", SKIN_LIGHT_KEY = "service"), - "Kent" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = 3), - "Can" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = 3), "Tophat" = list(SKIN_ICON_STATE = "tophat", SKIN_HAT_OFFSET = INFINITY), "Sleek" = list(SKIN_ICON_STATE = "sleekserv", SKIN_ICON = CYBORG_ICON_SERVICE), "Heavy" = list(SKIN_ICON_STATE = "heavyserv", SKIN_ICON = CYBORG_ICON_SERVICE), + "Kent" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = 3), + "Can" = list(SKIN_ICON_STATE = "kent", SKIN_LIGHT_KEY = "medical", SKIN_HAT_OFFSET = 3), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_green", SKIN_ICON = CYBORG_ICON_SERVICE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), + "ARACHNE" = list(SKIN_ICON_STATE = "arachne_service", SKIN_ICON = CYBORG_ICON_SERVICE), + "Slipper" = list(SKIN_ICON_STATE = "slipper_service", SKIN_ICON = CYBORG_ICON_SERVICE), "Bootyborg" = list(SKIN_ICON_STATE = "bootyservice", SKIN_ICON = CYBORG_ICON_SERVICE), - "Birdborg" = list(SKIN_ICON_STATE = "bird_serv", SKIN_ICON = CYBORG_ICON_SERVICE), "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyservice", SKIN_ICON = CYBORG_ICON_SERVICE), + "Birdborg" = list(SKIN_ICON_STATE = "bird_serv", SKIN_ICON = CYBORG_ICON_SERVICE), "Protectron" = list(SKIN_ICON_STATE = "protectron_service", SKIN_ICON = CYBORG_ICON_SERVICE), "Miss M" = list(SKIN_ICON_STATE = "missm_service", SKIN_ICON = CYBORG_ICON_SERVICE), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_green", SKIN_ICON = CYBORG_ICON_SERVICE, SKIN_FEATURES = list(model_features = R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), "Mech" = list(SKIN_ICON_STATE = "lloyd", SKIN_ICON = CYBORG_ICON_SERVICE), "Handy" = list(SKIN_ICON_STATE = "handy-service", SKIN_ICON = CYBORG_ICON_SERVICE), - "Darkhound" = list(SKIN_ICON_STATE = "k50", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Vale" = list(SKIN_ICON_STATE = "valeserv", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "ValeDark" = list(SKIN_ICON_STATE = "valeservdark", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Partyhound" = list(SKIN_ICON_STATE = "k69", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + /// 64x32 skins "Borgi" = list(SKIN_ICON_STATE = "borgi-serv", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), "Drake" = list(SKIN_ICON_STATE = "drakeserv", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + "Vale" = list(SKIN_ICON_STATE = "valeserv", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + "ValeDark" = list(SKIN_ICON_STATE = "valeservdark", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + "Darkhound" = list(SKIN_ICON_STATE = "k50", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + "Partyhound" = list(SKIN_ICON_STATE = "k69", SKIN_ICON = CYBORG_ICON_SERVICE_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + /// 32x64 skins + "Meka" = list(SKIN_ICON_STATE = "mekaserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "Meka (Alt)" = list(SKIN_ICON_STATE = "mekaserve_alt", SKIN_LIGHT_KEY = "mekaserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekaserv", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekaserv", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Barista)" = list(SKIN_ICON_STATE = "k4tserve", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (80s)" = list(SKIN_ICON_STATE = "k4tserve_alt1", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Dispenser)" = list(SKIN_ICON_STATE = "k4tserve_alt2", SKIN_ICON = CYBORG_ICON_SERVICE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) //MINING /obj/item/robot_model/miner special_light_key = null borg_skins = list( + /// 32x32 Skins "Lavaland" = list(SKIN_ICON_STATE = "miner", SKIN_LIGHT_KEY = "miner"), "Asteroid" = list(SKIN_ICON_STATE = "minerOLD", SKIN_LIGHT_KEY = "miner"), - "Meka" = list(SKIN_ICON_STATE = "mekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Rookie)" = list(SKIN_ICON_STATE = "k4tmine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Veteran)" = list(SKIN_ICON_STATE = "k4tmine_alt1", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "Drone" = list(SKIN_ICON_STATE = "miningdrone", SKIN_ICON = CYBORG_ICON_MINING, SKIN_FEATURES = list(R_TRAIT_SMALL)), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_miner", SKIN_ICON = CYBORG_ICON_MINING, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), "Slipper" = list(SKIN_ICON_STATE = "slipper_mine", SKIN_ICON = CYBORG_ICON_MINING), "Spider Miner" = list(SKIN_ICON_STATE = "spidermin", SKIN_LIGHT_KEY = "miner"), "Droid" = list(SKIN_ICON_STATE = "miner", SKIN_ICON = CYBORG_ICON_MINING, SKIN_HAT_OFFSET = 4), @@ -115,47 +117,47 @@ "Spider" = list(SKIN_ICON_STATE = "spidermin", SKIN_ICON = CYBORG_ICON_MINING), "Heavy" = list(SKIN_ICON_STATE = "heavymin", SKIN_ICON = CYBORG_ICON_MINING), "Bootyborg" = list(SKIN_ICON_STATE = "bootyminer", SKIN_ICON = CYBORG_ICON_MINING), - "Birdborg" = list(SKIN_ICON_STATE = "bird_mine", SKIN_ICON = CYBORG_ICON_MINING), "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyminer", SKIN_ICON = CYBORG_ICON_MINING), + "Birdborg" = list(SKIN_ICON_STATE = "bird_mine", SKIN_ICON = CYBORG_ICON_MINING), "Protectron" = list(SKIN_ICON_STATE = "protectron_miner", SKIN_ICON = CYBORG_ICON_MINING), "Miss M" = list(SKIN_ICON_STATE = "missm_miner", SKIN_ICON = CYBORG_ICON_MINING), "Mech" = list(SKIN_ICON_STATE = "ishimura", SKIN_ICON = CYBORG_ICON_MINING), - "Drone" = list(SKIN_ICON_STATE = "miningdrone", SKIN_ICON = CYBORG_ICON_MINING, SKIN_FEATURES = list(R_TRAIT_SMALL)), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_miner", SKIN_ICON = CYBORG_ICON_MINING, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), + /// 64x32 skins "Blade" = list(SKIN_ICON_STATE = "blade", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Vale" = list(SKIN_ICON_STATE = "valemine", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Drake" = list(SKIN_ICON_STATE = "drakemine", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Hound" = list(SKIN_ICON_STATE = "cargohound", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Darkhound" = list(SKIN_ICON_STATE = "cargohounddark", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Otie" = list(SKIN_ICON_STATE = "otiec", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)) + "Otie" = list(SKIN_ICON_STATE = "otiec", SKIN_ICON = CYBORG_ICON_MINING_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + /// 32x64 skins + "Meka" = list(SKIN_ICON_STATE = "mekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Rookie)" = list(SKIN_ICON_STATE = "k4tmine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Veteran)" = list(SKIN_ICON_STATE = "k4tmine_alt1", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekamine", SKIN_ICON = CYBORG_ICON_MINING_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) //CLOWN /obj/item/robot_model/clown borg_skins = list( "Default" = list(SKIN_ICON_STATE = "clown"), - "Bootyborg" = list(SKIN_ICON_STATE = "bootyclown", SKIN_ICON = 'modular_skyrat/modules/altborgs/icons/robots_clown.dmi'), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyclown", SKIN_ICON = 'modular_skyrat/modules/altborgs/icons/robots_clown.dmi'), - "K4T" = list(SKIN_ICON_STATE = "k4tclown", SKIN_ICON = CYBORG_ICON_CLOWN_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "ARACHNE" = list(SKIN_ICON_STATE = "arachne_clown", SKIN_ICON = 'modular_skyrat/modules/altborgs/icons/robots_clown.dmi'), - "Slipper" = list(SKIN_ICON_STATE = "slipper_clown", SKIN_ICON = 'modular_skyrat/modules/altborgs/icons/robots_clown.dmi'), - "Marina" = list(SKIN_ICON_STATE = "marina_mommy", SKIN_ICON = 'modular_skyrat/modules/altborgs/icons/robots_clown.dmi', SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), - "Garish" = list(SKIN_ICON_STATE = "garish", SKIN_ICON = 'modular_skyrat/modules/altborgs/icons/robots_clown.dmi'), - "Robot" = list(SKIN_ICON_STATE = "clownbot", SKIN_ICON = 'modular_skyrat/modules/altborgs/icons/robots_clown.dmi'), - "Sleek" = list(SKIN_ICON_STATE = "clownman", SKIN_ICON = 'modular_skyrat/modules/altborgs/icons/robots_clown.dmi', SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)) + "Bootyborg" = list(SKIN_ICON_STATE = "bootyclown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyclown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), + "ARACHNE" = list(SKIN_ICON_STATE = "arachne_clown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), + "Slipper" = list(SKIN_ICON_STATE = "slipper_clown", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), + "Marina" = list(SKIN_ICON_STATE = "marina_mommy", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi', SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), + "Garish" = list(SKIN_ICON_STATE = "garish", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), + "Robot" = list(SKIN_ICON_STATE = "clownbot", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi'), + "Sleek" = list(SKIN_ICON_STATE = "clownman", SKIN_ICON = 'modular_skyrat/modules/borgs/icons/robots_clown.dmi', SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), + /// 32x64 skins + "K4T" = list(SKIN_ICON_STATE = "k4tclown", SKIN_ICON = CYBORG_ICON_CLOWN_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) //ENGINEERING /obj/item/robot_model/engineering borg_skins = list( + /// 32x32 Skins "Default" = list(SKIN_ICON_STATE = "engineer", SKIN_FEATURES = list(R_TRAIT_SMALL)), - "Meka" = list(SKIN_ICON_STATE = "mekaengi", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Technician)" = list(SKIN_ICON_STATE = "k4tengi", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Hazard)" = list(SKIN_ICON_STATE = "k4tengi_alt1", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "ARACHNE" = list(SKIN_ICON_STATE = "arachne_engi", SKIN_ICON = CYBORG_ICON_ENG), - "Slipper" = list(SKIN_ICON_STATE = "slipper_engi", SKIN_ICON = CYBORG_ICON_ENG), "Zoomba" = list(SKIN_ICON_STATE = "zoomba_engi", SKIN_ICON = CYBORG_ICON_ENG, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), "Default - Treads" = list(SKIN_ICON_STATE = "engi-tread", SKIN_LIGHT_KEY = "engineer", SKIN_ICON = CYBORG_ICON_ENG), "Loader" = list(SKIN_ICON_STATE = "loaderborg", SKIN_ICON = CYBORG_ICON_ENG, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), @@ -166,31 +168,36 @@ "Spider" = list(SKIN_ICON_STATE = "spidereng", SKIN_ICON = CYBORG_ICON_ENG), "Heavy" = list(SKIN_ICON_STATE = "heavyeng", SKIN_ICON = CYBORG_ICON_ENG), "Bootyborg" = list(SKIN_ICON_STATE = "bootyeng", SKIN_ICON = CYBORG_ICON_ENG), - "Birdborg" = list(SKIN_ICON_STATE = "bird_eng", SKIN_ICON = CYBORG_ICON_ENG), "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyeng", SKIN_ICON = CYBORG_ICON_ENG), + "Birdborg" = list(SKIN_ICON_STATE = "bird_eng", SKIN_ICON = CYBORG_ICON_ENG), "Protectron" = list(SKIN_ICON_STATE = "protectron_eng", SKIN_ICON = CYBORG_ICON_ENG), "Miss M" = list(SKIN_ICON_STATE = "missm_eng", SKIN_ICON = CYBORG_ICON_ENG), "Mech" = list(SKIN_ICON_STATE = "conagher", SKIN_ICON = CYBORG_ICON_ENG), "Wide" = list(SKIN_ICON_STATE = "wide-engi", SKIN_ICON = CYBORG_ICON_ENG), + "ARACHNE" = list(SKIN_ICON_STATE = "arachne_engi", SKIN_ICON = CYBORG_ICON_ENG), + "Slipper" = list(SKIN_ICON_STATE = "slipper_engi", SKIN_ICON = CYBORG_ICON_ENG), + "Alina" = list(SKIN_ICON_STATE = "alina-eng", SKIN_LIGHT_KEY = "alina", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Eyebot" = list(SKIN_ICON_STATE = "eyeboteng", SKIN_ICON = CYBORG_ICON_ENG, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL)), + /// 64x32 Skins + "Borgi" = list(SKIN_ICON_STATE = "borgi-eng", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), + "Otie" = list(SKIN_ICON_STATE = "otiee", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Pup Dozer" = list(SKIN_ICON_STATE = "pupdozer", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Vale" = list(SKIN_ICON_STATE = "valeeng", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Hound" = list(SKIN_ICON_STATE = "engihound", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Darkhound" = list(SKIN_ICON_STATE = "engihounddark", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Alina" = list(SKIN_ICON_STATE = "alina-eng", SKIN_LIGHT_KEY = "alina", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Drake" = list(SKIN_ICON_STATE = "drakeeng", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Borgi" = list(SKIN_ICON_STATE = "borgi-eng", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), - "Otie" = list(SKIN_ICON_STATE = "otiee", SKIN_ICON = CYBORG_ICON_ENG_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)) + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekaengi", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Technician)" = list(SKIN_ICON_STATE = "k4tengi", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Hazard)" = list(SKIN_ICON_STATE = "k4tengi_alt1", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekaeng", SKIN_ICON = CYBORG_ICON_ENG_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) /obj/item/robot_model/janitor borg_skins = list( + /// 32x32 Skins "Default" = list(SKIN_ICON_STATE = "janitor"), - "Meka" = list(SKIN_ICON_STATE = "mekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Viscera)" = list(SKIN_ICON_STATE = "k4tjani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Domestic)" = list(SKIN_ICON_STATE = "k4tjani_alt1", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), "ARACHNE" = list(SKIN_ICON_STATE = "arachne_jani", SKIN_ICON = CYBORG_ICON_JANI), "Slipper" = list(SKIN_ICON_STATE = "slipper_janitor", SKIN_ICON = CYBORG_ICON_JANI), "Zoomba" = list(SKIN_ICON_STATE = "zoomba_jani", SKIN_ICON = CYBORG_ICON_JANI, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), @@ -199,8 +206,8 @@ "Can" = list(SKIN_ICON_STATE = "canjan", SKIN_ICON = CYBORG_ICON_JANI), "Heavy" = list(SKIN_ICON_STATE = "heavyres", SKIN_ICON = CYBORG_ICON_JANI), "Bootyborg" = list(SKIN_ICON_STATE = "bootyjanitor", SKIN_ICON = CYBORG_ICON_JANI), - "Birdborg" = list(SKIN_ICON_STATE = "bird_jani", SKIN_ICON = CYBORG_ICON_JANI), "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyjanitor", SKIN_ICON = CYBORG_ICON_JANI), + "Birdborg" = list(SKIN_ICON_STATE = "bird_jani", SKIN_ICON = CYBORG_ICON_JANI), "Protectron" = list(SKIN_ICON_STATE = "protectron_janitor", SKIN_ICON = CYBORG_ICON_JANI), "Miss M" = list(SKIN_ICON_STATE = "missm_janitor", SKIN_ICON = CYBORG_ICON_JANI), "Mech" = list(SKIN_ICON_STATE = "flynn", SKIN_ICON = CYBORG_ICON_JANI), @@ -208,23 +215,26 @@ "Insekt" = list(SKIN_ICON_STATE = "insekt-Sci", SKIN_ICON = CYBORG_ICON_JANI), "Wide" = list(SKIN_ICON_STATE = "wide-jani", SKIN_ICON = CYBORG_ICON_JANI), "Spider" = list(SKIN_ICON_STATE = "spidersci", SKIN_ICON = CYBORG_ICON_JANI), + /// 64x32 Skins + "Borgi" = list(SKIN_ICON_STATE = "borgi-jani", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), "Scrubpuppy" = list(SKIN_ICON_STATE = "scrubpup", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Otie" = list(SKIN_ICON_STATE = "otiej", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Drake" = list(SKIN_ICON_STATE = "drakejanit", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Vale" = list(SKIN_ICON_STATE = "J9", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Borgi" = list(SKIN_ICON_STATE = "borgi-jani", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)) + "Otie" = list(SKIN_ICON_STATE = "otiej", SKIN_ICON = CYBORG_ICON_JANI_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Viscera)" = list(SKIN_ICON_STATE = "k4tjani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Domestic)" = list(SKIN_ICON_STATE = "k4tjani_alt1", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekajani", SKIN_ICON = CYBORG_ICON_JANI_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) //MEDICAL /obj/item/robot_model/medical borg_skins = list( + /// 32x32 Skins "Machinified Doctor" = list(SKIN_ICON_STATE = "medical", SKIN_TRAITS = list(R_TRAIT_SMALL)), "Qualified Doctor" = list(SKIN_ICON_STATE = "qualified_doctor"), - "Meka" = list(SKIN_ICON_STATE = "mekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Doc)" = list(SKIN_ICON_STATE = "k4tmed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Field Medic)" = list(SKIN_ICON_STATE = "k4tmed_alt1", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), "ARACHNE" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "arachne_med"), "Slipper" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "slipper_med"), "Zoomba" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "zoomba_med", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), @@ -236,51 +246,57 @@ "Bootyborg" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "bootymedical"), "Birdborg" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "bird_med"), "Male Bootyborg" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "male_bootymedical"), - // PLEASE ASSUME THE POSITION "Protectron" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "protectron_medical"), "Miss M" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "missm_med"), "Insekt" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "insekt-Med"), "Mech" = list(SKIN_ICON = CYBORG_ICON_MED, SKIN_ICON_STATE = "gibbs"), + /// 64x32 Skins + "Borgi" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "borgi-medi", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + "Drake" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "drakemed", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Hound" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "medihound", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "DarkHound" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "medihounddark", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Vale" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "valemed", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Alina" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "alina-med", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Drake" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "drakemed", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Borgi" = list(SKIN_ICON = CYBORG_ICON_MED_WIDE, SKIN_ICON_STATE = "borgi-medi", SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)) + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Doc)" = list(SKIN_ICON_STATE = "k4tmed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Field Medic)" = list(SKIN_ICON_STATE = "k4tmed_alt1", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekamed", SKIN_ICON = CYBORG_ICON_MED_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) //PEACEKEEPER /obj/item/robot_model/peacekeeper borg_skins = list( + /// 32x32 Skins "Default" = list(SKIN_ICON_STATE = "peace"), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_peace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(model_features = R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "Meka" = list(SKIN_ICON_STATE = "mekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T" = list(SKIN_ICON_STATE = "k4tpeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_peace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), "ARACHNE" = list(SKIN_ICON_STATE = "arachne_peacekeeper", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), "Sleek" = list(SKIN_ICON_STATE = "sleekpeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), "Spider" = list(SKIN_ICON_STATE = "whitespider", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(R_TRAIT_SMALL)), "Marina" = list(SKIN_ICON_STATE = "marinapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK)), "Bootyborg" = list(SKIN_ICON_STATE = "bootypeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), - "Birdborg" = list(SKIN_ICON_STATE = "bird_pk", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootypeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), + "Birdborg" = list(SKIN_ICON_STATE = "bird_pk", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), "Protectron" = list(SKIN_ICON_STATE = "protectron_peacekeeper", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), "Insekt" = list(SKIN_ICON_STATE = "insekt-Default", SKIN_ICON = CYBORG_ICON_PEACEKEEPER), "Omni" = list(SKIN_ICON_STATE = "omoikane", SKIN_ICON = CYBORG_ICON_PEACEKEEPER, SKIN_FEATURES = list(R_TRAIT_SMALL)), + /// 64x32 Skins "Drake" = list(SKIN_ICON_STATE = "drakepeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Borgi" = list(SKIN_ICON_STATE = "borgi", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), - "Vale" = list(SKIN_ICON_STATE = "valepeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)) + "Vale" = list(SKIN_ICON_STATE = "valepeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T" = list(SKIN_ICON_STATE = "k4tpeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekapeace", SKIN_ICON = CYBORG_ICON_PEACEKEEPER_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) /obj/item/robot_model/security borg_skins = list( + /// 32x32 Skins "Default" = list(SKIN_ICON_STATE = "sec"), "Zoomba" = list(SKIN_ICON_STATE = "zoomba_sec", SKIN_ICON = CYBORG_ICON_SEC, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "Meka" = list(SKIN_ICON_STATE = "mekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T" = list(SKIN_ICON_STATE = "k4tsec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), "Default - Treads" = list(SKIN_ICON_STATE = "sec-tread", SKIN_LIGHT_KEY = "sec", SKIN_ICON = CYBORG_ICON_SEC), "Sleek" = list(SKIN_ICON_STATE = "sleeksec", SKIN_ICON = CYBORG_ICON_SEC), "Marina" = list(SKIN_ICON_STATE = "marinasec", SKIN_ICON = CYBORG_ICON_SEC), @@ -294,15 +310,71 @@ "Eyebot" = list(SKIN_ICON_STATE = "eyebotsec", SKIN_ICON = CYBORG_ICON_SEC, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL)), "Insekt" = list(SKIN_ICON_STATE = "insekt-Sec", SKIN_ICON = CYBORG_ICON_SEC), "Mech" = list(SKIN_ICON_STATE = "woody", SKIN_ICON = CYBORG_ICON_SEC), + /// 64x32 Skins + "Borgi" = list(SKIN_ICON_STATE = "borgi-sec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), "Hound" = list(SKIN_ICON_STATE = "k9", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + "Darkhound" = list(SKIN_ICON_STATE = "k9dark", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + "Drake" = list(SKIN_ICON_STATE = "drakesec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Otie" = list(SKIN_ICON_STATE = "oties", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Alina" = list(SKIN_ICON_STATE = "alina-sec", SKIN_LIGHT_KEY = "alina", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Darkhound" = list(SKIN_ICON_STATE = "k9dark", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), "Vale" = list(SKIN_ICON_STATE = "valesec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Drake" = list(SKIN_ICON_STATE = "drakesec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Borgi" = list(SKIN_ICON_STATE = "borgi-sec", SKIN_ICON = CYBORG_ICON_SEC_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)) + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T" = list(SKIN_ICON_STATE = "k4tsec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekasec", SKIN_ICON = CYBORG_ICON_SEC_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) +// CARGO +/obj/item/robot_model/cargo + name = "Cargo" + basic_modules = list( + /obj/item/stamp, + /obj/item/stamp/denied, + /obj/item/pen/cyborg, + /obj/item/clipboard/cyborg, + /obj/item/boxcutter, + /obj/item/stack/package_wrap/cyborg, + /obj/item/stack/wrapping_paper/xmas/cyborg, + /obj/item/assembly/flash/cyborg, + /obj/item/borg/hydraulic_clamp, + /obj/item/borg/hydraulic_clamp/mail, + /obj/item/hand_labeler/cyborg, + /obj/item/dest_tagger, + /obj/item/crowbar/cyborg, + /obj/item/extinguisher, + /obj/item/universal_scanner, + ) + radio_channels = list(RADIO_CHANNEL_SUPPLY) + emag_modules = list( + /obj/item/stamp/chameleon, + /obj/item/borg/paperplane_crossbow, + ) + hat_offset = 0 + cyborg_base_icon = "cargo" + model_select_icon = "cargo" + canDispose = TRUE + borg_skins = list( + /// 32x32 Skins + "Technician" = list(SKIN_ICON_STATE = "cargoborg", SKIN_ICON = CYBORG_ICON_CARGO), + "Miss M" = list(SKIN_ICON_STATE = "missm_cargo", SKIN_ICON = CYBORG_ICON_CARGO), + "Zoomba" = list(SKIN_ICON_STATE = "zoomba_cargo", SKIN_ICON = CYBORG_ICON_CARGO, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), + "Birdborg" = list(SKIN_ICON_STATE = "bird_cargo", SKIN_ICON = CYBORG_ICON_CARGO), + /// 64x32 Skins + "Borgi" = list(SKIN_ICON_STATE = "borgi-cargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)), + "Drake" = list(SKIN_ICON_STATE = "drakecargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + "Hound" = list(SKIN_ICON_STATE = "cargohound", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + "Darkhound" = list(SKIN_ICON_STATE = "cargohounddark", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + "Vale" = list(SKIN_ICON_STATE = "valecargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Loader)" = list(SKIN_ICON_STATE = "k4tcargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T (Turtleneck)" = list(SKIN_ICON_STATE = "k4tcargo_alt1", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) + ) + + //SYNDICATE /obj/item/robot_model/syndicatejack name = "Syndicate" @@ -343,13 +415,10 @@ hat_offset = INFINITY canDispose = TRUE borg_skins = list( + /// 32x32 Skins "Saboteur" = list(SKIN_ICON_STATE = "synd_engi", SKIN_ICON = 'icons/mob/silicon/robots.dmi'), "Medical" = list(SKIN_ICON_STATE = "synd_medical", SKIN_ICON = 'icons/mob/silicon/robots.dmi'), "Assault" = list(SKIN_ICON_STATE = "synd_sec", SKIN_ICON = 'icons/mob/silicon/robots.dmi'), - "Meka" = list(SKIN_ICON_STATE = "mekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T" = list(SKIN_ICON_STATE = "k4tsyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), "ARACHNE" = list(SKIN_ICON_STATE = "arachne_syndie", SKIN_ICON = CYBORG_ICON_SYNDIE), "Heavy" = list(SKIN_ICON_STATE = "syndieheavy", SKIN_ICON = CYBORG_ICON_SYNDIE), "Miss M" = list(SKIN_ICON_STATE = "missm_syndie", SKIN_ICON = CYBORG_ICON_SYNDIE), @@ -359,7 +428,12 @@ "Bird Syndicate" = list(SKIN_ICON_STATE = "bird_synd", SKIN_ICON = CYBORG_ICON_SYNDIE), "Male Booty Striker" = list(SKIN_ICON_STATE = "male_bootynukie", SKIN_ICON = CYBORG_ICON_SYNDIE), "Male Booty Syndicate" = list(SKIN_ICON_STATE = "male_bootysyndie", SKIN_ICON = CYBORG_ICON_SYNDIE), - "Mech" = list(SKIN_ICON_STATE = "chesty", SKIN_ICON = CYBORG_ICON_SYNDIE) + "Mech" = list(SKIN_ICON_STATE = "chesty", SKIN_ICON = CYBORG_ICON_SYNDIE), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T" = list(SKIN_ICON_STATE = "k4tsyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekasyndi", SKIN_ICON = CYBORG_ICON_SYNDIE_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) /obj/item/robot_model/syndicatejack/rebuild_modules() @@ -387,22 +461,24 @@ cyborg_base_icon = "ninja_sec" cyborg_icon_override = CYBORG_ICON_NINJA model_select_icon = "ninjaborg" - model_select_alternate_icon = 'modular_skyrat/modules/altborgs/icons/screen_cyborg.dmi' + model_select_alternate_icon = 'modular_skyrat/modules/borgs/icons/screen_cyborg.dmi' model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NOFLASH) //No more charging them with a flash and thinking it is a good idea hat_offset = 3 borg_skins = list( + /// 32x32 Skins "Saboteur" = list(SKIN_ICON_STATE = "ninja_engi", SKIN_ICON = CYBORG_ICON_NINJA), "Medical" = list(SKIN_ICON_STATE = "ninja_medical", SKIN_ICON = CYBORG_ICON_NINJA), "Assault" = list(SKIN_ICON_STATE = "ninja_sec", SKIN_ICON = CYBORG_ICON_NINJA), "Heavy" = list(SKIN_ICON_STATE = "ninjaheavy", SKIN_ICON = CYBORG_ICON_NINJA), - "Meka" = list(SKIN_ICON_STATE = "mekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T" = list(SKIN_ICON_STATE = "k4tninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), "Miss M" = list(SKIN_ICON_STATE = "missm_ninja", SKIN_ICON = CYBORG_ICON_NINJA), "Spider" = list(SKIN_ICON_STATE = "ninjaspider", SKIN_ICON = CYBORG_ICON_NINJA), "BootyBorg" = list(SKIN_ICON_STATE = "bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyninja", SKIN_ICON = CYBORG_ICON_NINJA) + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T" = list(SKIN_ICON_STATE = "k4tninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) /obj/item/robot_model/ninja/rebuild_modules() @@ -439,7 +515,7 @@ cyborg_base_icon = "ninja_medical" cyborg_icon_override = CYBORG_ICON_NINJA model_select_icon = "ninjaborg" - model_select_alternate_icon = 'modular_skyrat/modules/altborgs/icons/screen_cyborg.dmi' + model_select_alternate_icon = 'modular_skyrat/modules/borgs/icons/screen_cyborg.dmi' /obj/item/robot_model/ninja_saboteur name = "Spider Clan Saboteur" @@ -468,7 +544,7 @@ cyborg_base_icon = "ninja_engi" cyborg_icon_override = CYBORG_ICON_NINJA model_select_icon = "ninjaborg" - model_select_alternate_icon = 'modular_skyrat/modules/altborgs/icons/screen_cyborg.dmi' + model_select_alternate_icon = 'modular_skyrat/modules/borgs/icons/screen_cyborg.dmi' model_traits = list(TRAIT_PUSHIMMUNE, TRAIT_NOFLASH) model_traits = list(TRAIT_NEGATES_GRAVITY) hat_offset = -4 @@ -478,14 +554,15 @@ "Medical" = list(SKIN_ICON_STATE = "ninja_medical", SKIN_ICON = CYBORG_ICON_NINJA), "Assault" = list(SKIN_ICON_STATE = "ninja_sec", SKIN_ICON = CYBORG_ICON_NINJA), "Heavy" = list(SKIN_ICON_STATE = "ninjaheavy", SKIN_ICON = CYBORG_ICON_NINJA), - "Meka" = list(SKIN_ICON_STATE = "mekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T" = list(SKIN_ICON_STATE = "k4tninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), "Miss M" = list(SKIN_ICON_STATE = "missm_ninja", SKIN_ICON = CYBORG_ICON_NINJA), "Spider" = list(SKIN_ICON_STATE = "ninjaspider", SKIN_ICON = CYBORG_ICON_NINJA), "BootyBorg" = list(SKIN_ICON_STATE = "bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), - "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyninja", SKIN_ICON = CYBORG_ICON_NINJA) + "Male Bootyborg" = list(SKIN_ICON_STATE = "male_bootyninja", SKIN_ICON = CYBORG_ICON_NINJA), + /// 32x64 Skins + "Meka" = list(SKIN_ICON_STATE = "mekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "K4T" = list(SKIN_ICON_STATE = "k4tninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKA" = list(SKIN_ICON_STATE = "fmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), + "NiKO" = list(SKIN_ICON_STATE = "mmekaninja", SKIN_ICON = CYBORG_ICON_NINJA_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15) ) /obj/item/robot_model/ninja_saboteur/do_transform_animation() diff --git a/modular_skyrat/modules/cyborg/code/robot_upgrades.dm b/modular_skyrat/modules/borgs/code/robot_upgrade.dm similarity index 52% rename from modular_skyrat/modules/cyborg/code/robot_upgrades.dm rename to modular_skyrat/modules/borgs/code/robot_upgrade.dm index fcf0f705eb6..2d0cb42c6c2 100644 --- a/modular_skyrat/modules/cyborg/code/robot_upgrades.dm +++ b/modular_skyrat/modules/borgs/code/robot_upgrade.dm @@ -1,49 +1,10 @@ -/mob/living/silicon/robot - var/hasShrunk = FALSE - var/hasAffection = FALSE - var/hasAdvanced = FALSE +/// Use this file to add UPGRADES to borgs, the standard items will go in the modular robot_items.dm -/obj/item/borg/upgrade/shrink - name = "borg shrinker" - desc = "A cyborg resizer, it makes a cyborg small." - icon_state = "cyborg_upgrade3" - -/obj/item/borg/upgrade/shrink/action(mob/living/silicon/robot/borg, user = usr) - . = ..() - if(.) - - if(borg.hasShrunk) - to_chat(usr, span_warning("This unit already has a shrink module installed!")) - return FALSE - if(R_TRAIT_SMALL in borg.model.model_features) - to_chat(usr, span_warning("This unit's chassis cannot be shrunk any further.")) - return FALSE - - borg.hasShrunk = TRUE - ADD_TRAIT(borg, TRAIT_NO_TRANSFORM, REF(src)) - var/prev_lockcharge = borg.lockcharge - borg.SetLockdown(1) - borg.set_anchored(TRUE) - var/datum/effect_system/fluid_spread/smoke/smoke = new - smoke.set_up(1, location = get_turf(borg)) - smoke.start() - sleep(0.2 SECONDS) - for(var/i in 1 to 4) - playsound(borg, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, TRUE, -1) - sleep(1.2 SECONDS) - if(!prev_lockcharge) - borg.SetLockdown(0) - borg.set_anchored(FALSE) - REMOVE_TRAIT(borg, TRAIT_NO_TRANSFORM, REF(src)) - borg.update_transform(0.75) - -/obj/item/borg/upgrade/shrink/deactivate(mob/living/silicon/robot/borg, user = usr) - . = ..() - if (.) - if (borg.hasShrunk) - borg.hasShrunk = FALSE - borg.update_transform(4/3) +/* +* ADVANCED MEDICAL CYBORG UPGRADES +*/ +/// Advanced Surgery Tools /obj/item/borg/upgrade/surgerytools name = "medical cyborg advanced surgery tools" desc = "An upgrade to the Medical model cyborg's surgery loadout, replacing non-advanced tools with their advanced counterpart." @@ -117,44 +78,11 @@ borg.model.basic_modules += HA borg.model.add_module(HA, FALSE, TRUE) -/obj/item/borg/upgrade/affectionmodule - name = "borg affection module" - desc = "A module that upgrades the ability of borgs to display affection." - icon_state = "cyborg_upgrade3" - -/obj/item/borg/upgrade/affectionmodule/action(mob/living/silicon/robot/borg) - . = ..() - if(!.) - return - if(borg.hasAffection) - to_chat(usr, span_warning("This unit already has a affection module installed!")) - return FALSE - if(!(R_TRAIT_WIDE in borg.model.model_features)) - to_chat(usr, span_warning("This unit's chassis does not support this module.")) - return FALSE - - var/obj/item/dogborg_tongue/dogtongue = new /obj/item/dogborg_tongue(borg.model) - borg.model.basic_modules += dogtongue - borg.model.add_module(dogtongue, FALSE, TRUE) - var/obj/item/dogborg_nose/dognose = new /obj/item/dogborg_nose(borg.model) - borg.model.basic_modules += dognose - borg.model.add_module(dognose, FALSE, TRUE) - borg.hasAffection = TRUE - -/obj/item/borg/upgrade/affectionmodule/deactivate(mob/living/silicon/robot/borg, user = usr) - . = ..() - if(.) - return - borg.hasAffection = FALSE - for(var/obj/item/dogborg_tongue/dogtongue in borg.model.modules) - borg.model.remove_module(dogtongue, TRUE) - for(var/obj/item/dogborg_nose/dognose in borg.model.modules) - borg.model.remove_module(dognose, TRUE) - /* -* ADVANCED ENGINEERING CYBORG MATERIALS +* ADVANCED ENGINEERING CYBORG UPGRADES */ +/// Advanced Materials #define ENGINEERING_CYBORG_CHARGE_PER_STACK 1000 /datum/robot_energy_storage/plasteel @@ -214,7 +142,7 @@ for(var/datum/robot_energy_storage/titanium/titanium_energy in borgo.model.storages) qdel(titanium_energy) -// funny borg inducer upgrade +/// funny borg inducer upgrade /obj/item/borg/upgrade/inducer name = "engineering cyborg inducer upgrade" desc = "An inducer device for the engineering cyborg." @@ -242,3 +170,268 @@ var/obj/item/inducer/cyborg/inducer = locate() in target_robot.model if (inducer) target_robot.model.remove_module(inducer, TRUE) + +/* +* ADVANCED MINING CYBORG UPGRADES +*/ + +/// Welder +/obj/item/borg/upgrade/welder + name = "mining cyborg welder upgrade" + desc = "A normal welder with a larger tank for cyborgs." + icon_state = "cyborg_upgrade3" + require_model = TRUE + model_type = list(/obj/item/robot_model/miner) + model_flags = BORG_MODEL_MINER + +/obj/item/borg/upgrade/welder/action(mob/living/silicon/robot/R, user = usr) + . = ..() + if(.) + for(var/obj/item/weldingtool/mini/W in R.model) + R.model.remove_module(W, TRUE) + + var/obj/item/weldingtool/largetank/cyborg/WW = new /obj/item/weldingtool/largetank/cyborg(R.model) + R.model.basic_modules += WW + R.model.add_module(WW, FALSE, TRUE) + +/obj/item/borg/upgrade/welder/deactivate(mob/living/silicon/robot/R, user = usr) + . = ..() + if (.) + for(var/obj/item/weldingtool/largetank/cyborg/WW in R.model) + R.model.remove_module(WW, TRUE) + + var/obj/item/weldingtool/mini/W = new (R.model) + R.model.basic_modules += W + R.model.add_module(W, FALSE, TRUE) + +/* +* ADVANCED CARGO CYBORG UPGRADES +*/ + +/// Better Clamp +/obj/item/borg/hydraulic_clamp/better + name = "improved integrated hydraulic clamp" + desc = "A neat way to lift and move around crates for quick and painless deliveries!" + storage_capacity = 4 + whitelisted_item_types = list(/obj/structure/closet/crate, /obj/item/delivery/big, /obj/item/delivery, /obj/item/bounty_cube) // If they want to carry a small package or a bounty cube instead, so be it, honestly. + whitelisted_item_description = "wrapped packages" + item_weight_limit = NONE + clamp_sound_volume = 50 + +/obj/item/borg/hydraulic_clamp/better/examine(mob/user) + . = ..() + var/crate_count = contents.len + . += "There is currently [crate_count > 0 ? crate_count : "no"] crate[crate_count > 1 ? "s" : ""] stored in the clamp's internal storage." + +/obj/item/borg/hydraulic_clamp/mail + name = "integrated rapid mail delivery device" + desc = "Allows you to carry around a lot of mail, to distribute it around the station like the good little mailbot you are!" + icon = 'icons/obj/service/library.dmi' + icon_state = "bookbag" + storage_capacity = 100 + loading_time = 0.25 SECONDS + unloading_time = 0.25 SECONDS + cooldown_duration = 0.25 SECONDS + whitelisted_item_types = list(/obj/item/mail) + whitelisted_item_description = "envelopes" + item_weight_limit = WEIGHT_CLASS_NORMAL + clamp_sound_volume = 25 + clamp_sound = 'sound/items/pshoom.ogg' + +/datum/design/borg_upgrade_clamp + name = "improved Integrated Hydraulic Clamp Module" + id = "borg_upgrade_clamp" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/better_clamp + materials = list(/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2, /datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 5) + construction_time = 12 SECONDS + category = list(RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_CARGO) + + +/obj/item/borg/upgrade/better_clamp + name = "improved integrated hydraulic clamp" + desc = "An improved hydraulic clamp to allow for bigger packages to be picked up as well!" + icon_state = "cyborg_upgrade3" + require_model = TRUE + model_type = list(/obj/item/robot_model/cargo) + model_flags = BORG_MODEL_CARGO + + +/obj/item/borg/upgrade/better_clamp/action(mob/living/silicon/robot/cyborg, user = usr) + . = ..() + if(!.) + return + var/obj/item/borg/hydraulic_clamp/better/big_clamp = locate() in cyborg.model.modules + if(big_clamp) + to_chat(user, span_warning("This cyborg is already equipped with an improved integrated hydraulic clamp!")) + return FALSE + + big_clamp = new(cyborg.model) + cyborg.model.basic_modules += big_clamp + cyborg.model.add_module(big_clamp, FALSE, TRUE) + + +/obj/item/borg/upgrade/better_clamp/deactivate(mob/living/silicon/robot/cyborg, user = usr) + . = ..() + if(!.) + return + var/obj/item/borg/hydraulic_clamp/better/big_clamp = locate() in cyborg.model.modules + if(big_clamp) + cyborg.model.remove_module(big_clamp, TRUE) + +/* +* UNIVERSAL CYBORG UPGRADES +*/ + +/// ShapeShifter +/obj/item/borg/upgrade/borg_shapeshifter + name = "Cyborg Shapeshifter Module" + desc = "An experimental device which allows a cyborg to disguise themself into another type of cyborg." + icon_state = "cyborg_upgrade3" + +/obj/item/borg/upgrade/borg_shapeshifter/action(mob/living/silicon/robot/R, user = usr) + . = ..() + if(.) + var/obj/item/borg_shapeshifter/BS = new /obj/item/borg_shapeshifter(R.model) + R.model.basic_modules += BS + R.model.add_module(BS, FALSE, TRUE) + +/obj/item/borg/upgrade/borg_shapeshifter/deactivate(mob/living/silicon/robot/R, user = usr) + . = ..() + if (.) + for(var/obj/item/borg_shapeshifter/BS in R.model) + R.model.remove_module(BS, TRUE) + +/// Quadborg time +/obj/item/borg/upgrade/affectionmodule + name = "borg affection module" + desc = "A module that upgrades the ability of borgs to display affection." + icon_state = "cyborg_upgrade3" + +/obj/item/borg/upgrade/affectionmodule/action(mob/living/silicon/robot/borg) + . = ..() + if(!.) + return + if(borg.hasAffection) + to_chat(usr, span_warning("This unit already has a affection module installed!")) + return FALSE + if(!(R_TRAIT_WIDE in borg.model.model_features)) + to_chat(usr, span_warning("This unit's chassis does not support this module.")) + return FALSE + + var/obj/item/quadborg_tongue/quadtongue = new /obj/item/quadborg_tongue(borg.model) + borg.model.basic_modules += quadtongue + borg.model.add_module(quadtongue, FALSE, TRUE) + var/obj/item/quadborg_nose/quadnose = new /obj/item/quadborg_nose(borg.model) + borg.model.basic_modules += quadnose + borg.model.add_module(quadnose, FALSE, TRUE) + borg.hasAffection = TRUE + +/obj/item/borg/upgrade/affectionmodule/deactivate(mob/living/silicon/robot/borg, user = usr) + . = ..() + if(.) + return + borg.hasAffection = FALSE + for(var/obj/item/quadborg_tongue/quadtongue in borg.model.modules) + borg.model.remove_module(quadtongue, TRUE) + for(var/obj/item/quadborg_nose/quadnose in borg.model.modules) + borg.model.remove_module(quadnose, TRUE) + +// Quadruped tongue - lick lick +/obj/item/quadborg_tongue + name = "synthetic tongue" + desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face." + icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon_state = "synthtongue" + hitsound = 'sound/effects/attackblob.ogg' + desc = "For giving affectionate kisses." + item_flags = NOBLUDGEON + +/obj/item/quadborg_tongue/afterattack(atom/target, mob/user, proximity) + . = ..() + if(!proximity || !isliving(target)) + return + var/mob/living/silicon/robot/borg = user + var/mob/living/mob = target + + if(check_zone(borg.zone_selected) == "head") + borg.visible_message(span_warning("\the [borg] affectionally licks \the [mob]'s face!"), span_notice("You affectionally lick \the [mob]'s face!")) + playsound(borg, 'sound/effects/attackblob.ogg', 50, 1) + else + borg.visible_message(span_warning("\the [borg] affectionally licks \the [mob]!"), span_notice("You affectionally lick \the [mob]!")) + playsound(borg, 'sound/effects/attackblob.ogg', 50, 1) + +// Quadruped nose - Boop +/obj/item/quadborg_nose + name = "boop module" + desc = "The BOOP module" + icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi' + icon_state = "nose" + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON + force = 0 + +/obj/item/quadborg_nose/afterattack(atom/target, mob/user, proximity) + . = ..() + if(!proximity) + return + do_attack_animation(target, null, src) + user.visible_message(span_notice("[user] [pick("nuzzles", "pushes", "boops")] \the [target.name] with their nose!")) + +/// The Shrinkening +/mob/living/silicon/robot + var/hasShrunk = FALSE + var/hasAffection = FALSE + var/hasAdvanced = FALSE + +/obj/item/borg/upgrade/shrink + name = "borg shrinker" + desc = "A cyborg resizer, it makes a cyborg small." + icon_state = "cyborg_upgrade3" + +/obj/item/borg/upgrade/shrink/action(mob/living/silicon/robot/borg, user = usr) + . = ..() + if(.) + + if(borg.hasShrunk) + to_chat(usr, span_warning("This unit already has a shrink module installed!")) + return FALSE + if(R_TRAIT_SMALL in borg.model.model_features) + to_chat(usr, span_warning("This unit's chassis cannot be shrunk any further.")) + return FALSE + + borg.hasShrunk = TRUE + ADD_TRAIT(borg, TRAIT_NO_TRANSFORM, REF(src)) + var/prev_lockcharge = borg.lockcharge + borg.SetLockdown(TRUE) + borg.set_anchored(TRUE) + var/datum/effect_system/fluid_spread/smoke/smoke = new + smoke.set_up(1, location = get_turf(borg)) + smoke.start() + sleep(0.2 SECONDS) + for(var/i in 1 to 4) + playsound(borg, pick('sound/items/drill_use.ogg', 'sound/items/jaws_cut.ogg', 'sound/items/jaws_pry.ogg', 'sound/items/welder.ogg', 'sound/items/ratchet.ogg'), 80, TRUE, -1) + sleep(1.2 SECONDS) + if(!prev_lockcharge) + borg.SetLockdown(FALSE) + borg.set_anchored(FALSE) + REMOVE_TRAIT(borg, TRAIT_NO_TRANSFORM, REF(src)) + borg.update_transform(0.75) + +/obj/item/borg/upgrade/shrink/deactivate(mob/living/silicon/robot/borg, user = usr) + . = ..() + if (.) + if (borg.hasShrunk) + borg.hasShrunk = FALSE + borg.update_transform(4/3) + +/// Syndijack +/obj/item/borg/upgrade/transform/syndicatejack + name = "borg module picker (Syndicate)" + desc = "Allows you to to turn a cyborg into a experimental syndicate cyborg." + icon_state = "cyborg_upgrade3" + new_model = /obj/item/robot_model/syndicatejack + +/obj/item/borg/upgrade/transform/syndicatejack/action(mob/living/silicon/robot/cyborg, user = usr) // Only usable on emagged cyborgs. In exchange. makes you unable to get locked down or detonated. + if(cyborg.emagged) + return ..() diff --git a/modular_skyrat/modules/altborgs/code/update_icons.dm b/modular_skyrat/modules/borgs/code/update_icons.dm similarity index 84% rename from modular_skyrat/modules/altborgs/code/update_icons.dm rename to modular_skyrat/modules/borgs/code/update_icons.dm index 8057cdaa6bd..a9c3ffefb04 100644 --- a/modular_skyrat/modules/altborgs/code/update_icons.dm +++ b/modular_skyrat/modules/borgs/code/update_icons.dm @@ -1,6 +1,14 @@ /mob/living/silicon/robot/update_icons() icon = (model.cyborg_icon_override ? model.cyborg_icon_override : initial(icon)) . = ..() + /// Let's give custom borgs the ability to have flavor panels for their model + if(opened && (R_TRAIT_UNIQUEPANEL in model.model_features)) + if(wiresexposed) + add_overlay("[model.cyborg_base_icon]_w") + else if(cell) + add_overlay("[model.cyborg_base_icon]_c") + else + add_overlay("[model.cyborg_base_icon]_cl") update_altborg_icons() /mob/living/silicon/robot/proc/update_altborg_icons() @@ -53,4 +61,5 @@ if(stat == DEAD && (R_TRAIT_UNIQUEWRECK in model.model_features)) icon_state = "[model.cyborg_base_icon]-wreck" + update_fire() diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/misc/tallrobot_effects.dmi b/modular_skyrat/modules/borgs/icons/misc/tallrobot_effects.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/misc/tallrobot_effects.dmi rename to modular_skyrat/modules/borgs/icons/misc/tallrobot_effects.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/readme.md b/modular_skyrat/modules/borgs/icons/readme.md similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/readme.md rename to modular_skyrat/modules/borgs/icons/readme.md diff --git a/modular_skyrat/modules/borgs/icons/robot_items.dmi b/modular_skyrat/modules/borgs/icons/robot_items.dmi new file mode 100644 index 0000000000000000000000000000000000000000..dfac00b0d1c460db863c6aa2199ed2ef27ee4a26 GIT binary patch literal 7560 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

d5J>A(cvFH*d4k&B%jmrxT+%MWgjEAh*2 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 Nbro&pN=2)P{{>jNsrUc@ literal 0 HcmV?d00001 diff --git a/modular_skyrat/modules/altborgs/icons/robots.dmi b/modular_skyrat/modules/borgs/icons/robots.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots.dmi rename to modular_skyrat/modules/borgs/icons/robots.dmi diff --git a/modular_skyrat/modules/cargoborg/icons/robots_cargo.dmi b/modular_skyrat/modules/borgs/icons/robots_cargo.dmi similarity index 100% rename from modular_skyrat/modules/cargoborg/icons/robots_cargo.dmi rename to modular_skyrat/modules/borgs/icons/robots_cargo.dmi diff --git a/modular_skyrat/modules/altborgs/icons/robots_clown.dmi b/modular_skyrat/modules/borgs/icons/robots_clown.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots_clown.dmi rename to modular_skyrat/modules/borgs/icons/robots_clown.dmi diff --git a/modular_skyrat/modules/altborgs/icons/robots_eng.dmi b/modular_skyrat/modules/borgs/icons/robots_eng.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots_eng.dmi rename to modular_skyrat/modules/borgs/icons/robots_eng.dmi diff --git a/modular_skyrat/modules/altborgs/icons/robots_jani.dmi b/modular_skyrat/modules/borgs/icons/robots_jani.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots_jani.dmi rename to modular_skyrat/modules/borgs/icons/robots_jani.dmi diff --git a/modular_skyrat/modules/altborgs/icons/robots_med.dmi b/modular_skyrat/modules/borgs/icons/robots_med.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots_med.dmi rename to modular_skyrat/modules/borgs/icons/robots_med.dmi diff --git a/modular_skyrat/modules/altborgs/icons/robots_mine.dmi b/modular_skyrat/modules/borgs/icons/robots_mine.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots_mine.dmi rename to modular_skyrat/modules/borgs/icons/robots_mine.dmi diff --git a/modular_skyrat/modules/altborgs/icons/robots_ninja.dmi b/modular_skyrat/modules/borgs/icons/robots_ninja.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots_ninja.dmi rename to modular_skyrat/modules/borgs/icons/robots_ninja.dmi diff --git a/modular_skyrat/modules/altborgs/icons/robots_pk.dmi b/modular_skyrat/modules/borgs/icons/robots_pk.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots_pk.dmi rename to modular_skyrat/modules/borgs/icons/robots_pk.dmi diff --git a/modular_skyrat/modules/altborgs/icons/robots_sec.dmi b/modular_skyrat/modules/borgs/icons/robots_sec.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots_sec.dmi rename to modular_skyrat/modules/borgs/icons/robots_sec.dmi diff --git a/modular_skyrat/modules/altborgs/icons/robots_serv.dmi b/modular_skyrat/modules/borgs/icons/robots_serv.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots_serv.dmi rename to modular_skyrat/modules/borgs/icons/robots_serv.dmi diff --git a/modular_skyrat/modules/altborgs/icons/robots_syndi.dmi b/modular_skyrat/modules/borgs/icons/robots_syndi.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/robots_syndi.dmi rename to modular_skyrat/modules/borgs/icons/robots_syndi.dmi diff --git a/modular_skyrat/modules/altborgs/icons/screen_cyborg.dmi b/modular_skyrat/modules/borgs/icons/screen_cyborg.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/screen_cyborg.dmi rename to modular_skyrat/modules/borgs/icons/screen_cyborg.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_cargo.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_cargo.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_cargo.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_cargo.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_clown.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_clown.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_clown.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_clown.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_eng.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_eng.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_eng.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_eng.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_jani.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_jani.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_jani.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_jani.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_med.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_med.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_med.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_med.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_mine.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_mine.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_mine.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_mine.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_ninja.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_ninja.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_ninja.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_ninja.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_pk.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_pk.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_pk.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_pk.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_sec.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_sec.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_sec.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_sec.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_serv.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_serv.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_serv.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_serv.dmi diff --git a/modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_syndi.dmi b/modular_skyrat/modules/borgs/icons/tallrobot_syndi.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/tallborg/tallrobot_syndi.dmi rename to modular_skyrat/modules/borgs/icons/tallrobot_syndi.dmi diff --git a/modular_skyrat/modules/altborgs/icons/widerobot_eng.dmi b/modular_skyrat/modules/borgs/icons/widerobot_eng.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/widerobot_eng.dmi rename to modular_skyrat/modules/borgs/icons/widerobot_eng.dmi diff --git a/modular_skyrat/modules/altborgs/icons/widerobot_jani.dmi b/modular_skyrat/modules/borgs/icons/widerobot_jani.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/widerobot_jani.dmi rename to modular_skyrat/modules/borgs/icons/widerobot_jani.dmi diff --git a/modular_skyrat/modules/altborgs/icons/widerobot_med.dmi b/modular_skyrat/modules/borgs/icons/widerobot_med.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/widerobot_med.dmi rename to modular_skyrat/modules/borgs/icons/widerobot_med.dmi diff --git a/modular_skyrat/modules/altborgs/icons/widerobot_mine.dmi b/modular_skyrat/modules/borgs/icons/widerobot_mine.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/widerobot_mine.dmi rename to modular_skyrat/modules/borgs/icons/widerobot_mine.dmi diff --git a/modular_skyrat/modules/altborgs/icons/widerobot_pk.dmi b/modular_skyrat/modules/borgs/icons/widerobot_pk.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/widerobot_pk.dmi rename to modular_skyrat/modules/borgs/icons/widerobot_pk.dmi diff --git a/modular_skyrat/modules/altborgs/icons/widerobot_sec.dmi b/modular_skyrat/modules/borgs/icons/widerobot_sec.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/widerobot_sec.dmi rename to modular_skyrat/modules/borgs/icons/widerobot_sec.dmi diff --git a/modular_skyrat/modules/altborgs/icons/widerobot_serv.dmi b/modular_skyrat/modules/borgs/icons/widerobot_serv.dmi similarity index 100% rename from modular_skyrat/modules/altborgs/icons/widerobot_serv.dmi rename to modular_skyrat/modules/borgs/icons/widerobot_serv.dmi diff --git a/modular_skyrat/modules/cargoborg/icons/widerobots_cargo.dmi b/modular_skyrat/modules/borgs/icons/widerobots_cargo.dmi similarity index 100% rename from modular_skyrat/modules/cargoborg/icons/widerobots_cargo.dmi rename to modular_skyrat/modules/borgs/icons/widerobots_cargo.dmi diff --git a/modular_skyrat/modules/cyborg/readme.md b/modular_skyrat/modules/borgs/readme.md similarity index 53% rename from modular_skyrat/modules/cyborg/readme.md rename to modular_skyrat/modules/borgs/readme.md index 52f0f0142b2..104786b9df1 100644 --- a/modular_skyrat/modules/cyborg/readme.md +++ b/modular_skyrat/modules/borgs/readme.md @@ -1,13 +1,16 @@ -## Title: Cyborg +https://github.com/Skyrat-SS13/Skyrat-tg/pull/127 + +## Title: borgs + +MODULE ID: BORGS -MODULE ID: CYBORG ### Description: -Most new content relating to cyborgs goes here. Borg skins are in Altborgs currently +Condenses modular borg skins, items, upgrades and buffs to one folder for sanity's sake ### TG Proc Changes: - +- APPEND: modular_skyrat/modules/altborgs > modular_skyrat/modules/borgs - /code/modules/mob/living/silicon/robot/robot_modules.dm - /code/modules/research/techweb/all_nodes.dm @@ -25,5 +28,7 @@ Most new content relating to cyborgs goes here. Borg skins are in Altborgs curre ### Credits: +Gandalf2k15 - Porting & refactoring Azarak - porting -DuffCreeper - Code, Spriting \ No newline at end of file +DuffCreeper - Code, Spriting +Zergspower - Refactoring diff --git a/modular_skyrat/modules/cargoborg/code/robot_modules.dm b/modular_skyrat/modules/cargoborg/code/robot_modules.dm deleted file mode 100644 index d7ba4cae0b6..00000000000 --- a/modular_skyrat/modules/cargoborg/code/robot_modules.dm +++ /dev/null @@ -1,45 +0,0 @@ -// CARGO -/obj/item/robot_model/cargo - name = "Cargo" - basic_modules = list( - /obj/item/stamp, - /obj/item/stamp/denied, - /obj/item/pen/cyborg, - /obj/item/clipboard/cyborg, - /obj/item/stack/package_wrap/cyborg, - /obj/item/stack/wrapping_paper/xmas/cyborg, - /obj/item/assembly/flash/cyborg, - /obj/item/borg/hydraulic_clamp, - /obj/item/borg/hydraulic_clamp/mail, - /obj/item/hand_labeler/cyborg, - /obj/item/dest_tagger, - /obj/item/crowbar/cyborg, - /obj/item/extinguisher, - /obj/item/universal_scanner, - ) - radio_channels = list(RADIO_CHANNEL_SUPPLY) - emag_modules = list( - /obj/item/stamp/chameleon, - /obj/item/borg/paperplane_crossbow, - ) - hat_offset = 0 - cyborg_base_icon = "cargo" - model_select_icon = "cargo" - canDispose = TRUE - borg_skins = list( - "Technician" = list(SKIN_ICON_STATE = "cargoborg", SKIN_ICON = CYBORG_ICON_CARGO), - "Miss M" = list(SKIN_ICON_STATE = "missm_cargo", SKIN_ICON = CYBORG_ICON_CARGO), - "Zoomba" = list(SKIN_ICON_STATE = "zoomba_cargo", SKIN_ICON = CYBORG_ICON_CARGO, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_SMALL), SKIN_HAT_OFFSET = -13), - "Meka" = list(SKIN_ICON_STATE = "mekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Loader)" = list(SKIN_ICON_STATE = "k4tcargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "K4T (Turtleneck)" = list(SKIN_ICON_STATE = "k4tcargo_alt1", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKA" = list(SKIN_ICON_STATE = "fmekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "NiKO" = list(SKIN_ICON_STATE = "mmekacargo", SKIN_ICON = CYBORG_ICON_CARGO_TALL, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_UNIQUETIP, R_TRAIT_TALL), SKIN_HAT_OFFSET = 15), - "Drake" = list(SKIN_ICON_STATE = "drakecargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Birdborg" = list(SKIN_ICON_STATE = "bird_cargo", SKIN_ICON = CYBORG_ICON_CARGO), - "Vale" = list(SKIN_ICON_STATE = "valecargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Hound" = list(SKIN_ICON_STATE = "cargohound", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Darkhound" = list(SKIN_ICON_STATE = "cargohounddark", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE)), - "Borgi" = list(SKIN_ICON_STATE = "borgi-cargo", SKIN_ICON = CYBORG_ICON_CARGO_WIDE, SKIN_FEATURES = list(R_TRAIT_UNIQUEWRECK, R_TRAIT_WIDE, R_TRAIT_SMALL)) - ) - diff --git a/modular_skyrat/modules/cyborg/code/borgpowertools.dm b/modular_skyrat/modules/cyborg/code/borgpowertools.dm deleted file mode 100644 index d45be282dd7..00000000000 --- a/modular_skyrat/modules/cyborg/code/borgpowertools.dm +++ /dev/null @@ -1,50 +0,0 @@ -/obj/item/crowbar/cyborg/power - name = "modular crowbar" - desc = "A cyborg fitted module resembling the jaws of life." - icon = 'modular_skyrat/modules/cyborg/icons/items_cyborg.dmi' - icon_state = "jaws_pry_cyborg" - usesound = 'sound/items/jaws_pry.ogg' - force = 10 - toolspeed = 0.5 - -/obj/item/crowbar/cyborg/power/examine() - . = ..() - . += " It's fitted with a [tool_behaviour == TOOL_CROWBAR ? "prying" : "cutting"] head." - -/obj/item/crowbar/cyborg/power/attack_self(mob/user) - playsound(get_turf(user), 'sound/items/change_jaws.ogg', 50, TRUE) - if(tool_behaviour == TOOL_CROWBAR) - tool_behaviour = TOOL_WIRECUTTER - to_chat(user, span_notice("You attach the cutting jaws to [src].")) - icon_state = "jaws_cutter_cyborg" - usesound = 'sound/items/jaws_cut.ogg' - else - tool_behaviour = TOOL_CROWBAR - to_chat(user, span_notice("You attach the prying jaws to [src].")) - icon_state = "jaws_pry_cyborg" - usesound = 'sound/items/jaws_pry.ogg' - -/obj/item/screwdriver/cyborg/power - name = "automated drill" - desc = "A cyborg fitted module resembling the hand drill" - icon = 'modular_skyrat/modules/cyborg/icons/items_cyborg.dmi' - icon_state = "drill_screw_cyborg" - hitsound = 'sound/items/drill_hit.ogg' - usesound = 'sound/items/drill_use.ogg' - toolspeed = 0.5 - random_color = FALSE - -/obj/item/screwdriver/cyborg/power/examine() - . = ..() - . += " It's fitted with a [tool_behaviour == TOOL_SCREWDRIVER ? "screw" : "bolt"] head." - -/obj/item/screwdriver/cyborg/power/attack_self(mob/user) - playsound(get_turf(user), 'sound/items/change_drill.ogg', 50, TRUE) - if(tool_behaviour == TOOL_SCREWDRIVER) - tool_behaviour = TOOL_WRENCH - to_chat(user, span_notice("You attach the bolt bit to [src].")) - icon_state = "drill_bolt_cyborg" - else - tool_behaviour = TOOL_SCREWDRIVER - to_chat(user, span_notice("You attach the screw bit to [src].")) - icon_state = "drill_screw_cyborg" diff --git a/modular_skyrat/modules/cyborg/icons/items_cyborg.dmi b/modular_skyrat/modules/cyborg/icons/items_cyborg.dmi deleted file mode 100644 index 5fdfb02d16dc382c1963d0cec2e6df8a7e26eae4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 731 zcmV<10wn#3P)Mo@D{M@Ik^jw&fBR8&+_I)61cKJ>%~BO@bAOH2FWZHtSGr>CbeF)@-h zy|25*U0r1IxCUWiVZ+1202vuoQ&T1;CNncL@Tvxgh=@KuK5A-em6eqsG(c~Ek0&ZF z?w$p6a&k2_HFtM+D=I3}fduT61m%qc<&Ff5jEw4x1G{PifPjD(`kV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r z;NmRLOex6#a*U0*I5Sc+(=$pSoZ^zil2jm5DJ!wOI6k?wq$IT{KDja}zbIXai!&v& zs2C_|$i5>T(K;OgfB_Ba41 z=1x>FapBJZ00CD?L_t(oh3%GEZ-X!lfMMZknha8|Laz}DlwIZj|GF7EjgWCXRNAH~ zA1{ax8#_X>HBF)Td*}~$d0k%!pZ7>N7W{mAWFpJD%bOK1%_ATrGz`Nijv_A-UtrrUgCY|XLA-C^ z07DAdr)j#|6S{}%Kxs@5$J3K1e!)zV1ZA9OS&nmzbGd>Ya0cj^7PKtNs!!1M$QV>` z;l9r^ID=e>zxlMSpswrZm)G*GBo&cPSz`=(yksr;Fue1qgAn)qdX=LU3WY*3#&7Qj z^Wls8!++Qhx;t_HM}Xk_{b3}2bpAI@6A8ZGAKKy1#Wdsd{}{({CHQ`SXotVgzf~a5 z|D#kvzdy9k1{F-q|Dq^p@5TKAS{PI?G5;y> activationCost) - if (isturf(user.loc)) - toggle(user) - else - to_chat(user, span_warning("You can't use [src] while inside something!")) - else - to_chat(user, span_warning("You need at least [activationCost] charge in your cell to use [src]!")) - -/obj/item/borg_shapeshifter/proc/toggle(mob/living/silicon/robot/user) - if(active) - playsound(src, 'sound/effects/pop.ogg', 100, TRUE, -6) - to_chat(user, span_notice("You deactivate \the [src].")) - deactivate(user) - else - if(animation_playing) - to_chat(user, span_notice("\the [src] is recharging.")) - return - var/static/list/model_icons = sort_list(list( - "Standard" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "robot"), - "Medical" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "medical"), - "Cargo" = image(icon = CYBORG_ICON_CARGO, icon_state = "cargoborg"), - "Engineer" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "engineer"), - "Security" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "sec"), - "Service" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "service_f"), - "Janitor" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "janitor"), - "Miner" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "miner"), - "Peacekeeper" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "peace"), - "Clown" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "clown"), - "Syndicate" = image(icon = 'icons/mob/silicon/robots.dmi', icon_state = "synd_sec"), - "Spider Clan" = image(icon = CYBORG_ICON_NINJA, icon_state = "ninja_engi") - )) - var/model_selection = show_radial_menu(user, user, model_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), user), radius = 42, require_near = TRUE) - if(!model_selection) - return FALSE - - var/obj/item/robot_model/model - switch(model_selection) - if("Standard") - model = new /obj/item/robot_model/standard - if("Medical") - model = new /obj/item/robot_model/medical - if("Cargo") - model = new /obj/item/robot_model/cargo - if("Engineer") - model = new /obj/item/robot_model/engineering - if("Security") - model = new /obj/item/robot_model/security - if("Service") - model = new /obj/item/robot_model/service - if("Janitor") - model = new /obj/item/robot_model/janitor - if("Miner") - model = new /obj/item/robot_model/miner - if("Peacekeeper") - model = new /obj/item/robot_model/peacekeeper - if("Clown") - model = new /obj/item/robot_model/clown - if("Syndicate") - model = new /obj/item/robot_model/syndicatejack - if("Spider Clan") - model = new /obj/item/robot_model/ninja - else - return FALSE - if (!set_disguise_vars(model, user)) - qdel(model) - return FALSE - qdel(model) - animation_playing = TRUE - to_chat(user, span_notice("You activate \the [src].")) - playsound(src, 'sound/effects/seedling_chargeup.ogg', 100, TRUE, -6) - var/start = user.filters.len - var/X,Y,rsq,i,f - for(i=1, i<=7, ++i) - do - X = 60*rand() - 30 - Y = 60*rand() - 30 - rsq = X*X + Y*Y - while(rsq<100 || rsq>900) - user.filters += filter(type="wave", x=X, y=Y, size=rand()*2.5+0.5, offset=rand()) - for(i=1, i<=7, ++i) - f = user.filters[start+i] - animate(f, offset=f:offset, time=0, loop=3, flags=ANIMATION_PARALLEL) - animate(offset=f:offset-1, time=rand()*20+10) - if (do_after(user, 50, target=user) && user.cell.use(activationCost)) - playsound(src, 'sound/effects/bamf.ogg', 100, TRUE, -6) - to_chat(user, span_notice("You are now disguised.")) - activate(user) - else - to_chat(user, span_warning("The chameleon field fizzles.")) - do_sparks(3, FALSE, user) - for(i=1, i<=min(7, user.filters.len), ++i) // removing filters that are animating does nothing, we gotta stop the animations first - f = user.filters[start+i] - animate(f) - user.filters = null - animation_playing = FALSE - -/obj/item/borg_shapeshifter/proc/set_disguise_vars(obj/item/robot_model/disguise_model, mob/living/silicon/robot/cyborg) - if (!disguise_model || !cyborg) - return FALSE - var/list/reskin_icons = list() - for(var/skin in disguise_model.borg_skins) - var/list/details = disguise_model.borg_skins[skin] - var/image/reskin = image(icon = details[SKIN_ICON] || 'icons/mob/silicon/robots.dmi', icon_state = details[SKIN_ICON_STATE]) - if (!isnull(details[SKIN_FEATURES])) - if (R_TRAIT_WIDE in details[SKIN_FEATURES]) - reskin.pixel_x -= 16 - reskin_icons[skin] = reskin - var/borg_skin = show_radial_menu(cyborg, cyborg, reskin_icons, custom_check = CALLBACK(src, PROC_REF(check_menu), cyborg), radius = 38, require_near = TRUE) - if(!borg_skin) - return FALSE - disguise_model_name = disguise_model.name - var/list/details = disguise_model.borg_skins[borg_skin] - disguise = details[SKIN_ICON_STATE] - disguise_icon_override = details[SKIN_ICON] - disguise_special_light_key = details[SKIN_LIGHT_KEY] - disguise_hat_offset = 0 || details[SKIN_HAT_OFFSET] - disguise_model_features = details[SKIN_FEATURES] - return TRUE - -/obj/item/borg_shapeshifter/process() - if (user && !user.cell?.use(activationUpkeep)) - disrupt(user) - else - return PROCESS_KILL - -/obj/item/borg_shapeshifter/proc/activate(mob/living/silicon/robot/user) - src.user = user - START_PROCESSING(SSobj, src) - saved_icon = user.model.cyborg_base_icon - saved_bubble_icon = user.bubble_icon - saved_icon_override = user.model.cyborg_icon_override - saved_name = user.model.name - saved_model_features = user.model.model_features - saved_special_light_key = user.model.special_light_key - saved_hat_offset = user.model.hat_offset - user.model.name = disguise_model_name - user.model.cyborg_base_icon = disguise - user.model.cyborg_icon_override = disguise_icon_override - user.model.model_features = disguise_model_features - user.model.special_light_key = disguise_special_light_key - user.bubble_icon = "robot" - active = TRUE - user.update_icons() - user.model.update_dogborg() - user.model.update_tallborg() - - if(listeningTo == user) - return - if(listeningTo) - UnregisterSignal(listeningTo, signalCache) - RegisterSignal(user, signalCache, PROC_REF(disrupt)) - listeningTo = user - -/obj/item/borg_shapeshifter/proc/deactivate(mob/living/silicon/robot/user) - STOP_PROCESSING(SSobj, src) - if(listeningTo) - UnregisterSignal(listeningTo, signalCache) - listeningTo = null - do_sparks(5, FALSE, user) - user.model.name = saved_name - user.model.cyborg_base_icon = saved_icon - user.model.cyborg_icon_override = saved_icon_override - user.icon = saved_icon_override - user.model.model_features = saved_model_features - user.model.special_light_key = saved_special_light_key - user.bubble_icon = saved_bubble_icon - active = FALSE - user.update_icons() - user.model.update_dogborg() - user.model.update_tallborg() - -/obj/item/borg_shapeshifter/proc/disrupt(mob/living/silicon/robot/user) - SIGNAL_HANDLER - if(active) - to_chat(user, span_danger("Your chameleon field deactivates.")) - deactivate(user) diff --git a/modular_skyrat/modules/shapeshifting_module/code/robot_upgrades.dm b/modular_skyrat/modules/shapeshifting_module/code/robot_upgrades.dm deleted file mode 100644 index 75fe8dae12a..00000000000 --- a/modular_skyrat/modules/shapeshifting_module/code/robot_upgrades.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/borg/upgrade/borg_shapeshifter - name = "Cyborg Shapeshifter Module" - desc = "An experimental device which allows a cyborg to disguise themself into another type of cyborg." - icon_state = "cyborg_upgrade3" - -/obj/item/borg/upgrade/borg_shapeshifter/action(mob/living/silicon/robot/R, user = usr) - . = ..() - if(.) - var/obj/item/borg_shapeshifter/BS = new /obj/item/borg_shapeshifter(R.model) - R.model.basic_modules += BS - R.model.add_module(BS, FALSE, TRUE) - -/obj/item/borg/upgrade/borg_shapeshifter/deactivate(mob/living/silicon/robot/R, user = usr) - . = ..() - if (.) - for(var/obj/item/borg_shapeshifter/BS in R.model) - R.model.remove_module(BS, TRUE) diff --git a/modular_skyrat/modules/shapeshifting_module/readme.md b/modular_skyrat/modules/shapeshifting_module/readme.md deleted file mode 100644 index 4523eadc69a..00000000000 --- a/modular_skyrat/modules/shapeshifting_module/readme.md +++ /dev/null @@ -1,34 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/ - -## Title: Borg Shapeshifter - -MODULE ID: SHAPESHIFTING_MODULE - -### Description: - -Add a new cyborg module, The Cyborg Shapeshifter. Basically allows a cyborg to disguise into a different borg - -### TG Proc/File Changes: - -- CHANGE: altborgs/code/modules/mob/living/silicon/robot/update_icons.dm > if(module.cyborg_pixel_offset != null) - - -### Defines: - -- N/A - - -### Master file additions - -- N/A - - -### Included files that are not contained in this module: - -- N/A - - -### Credits: -Funce#7321 - Funce -Tyger#8082 - SarmentiCampbell - \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index de3b1c92197..6c75d83be93 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6359,14 +6359,6 @@ #include "modular_skyrat\modules\alt_vox\code\vox_procs.dm" #include "modular_skyrat\modules\alt_vox\code\vox_sounds_bms.dm" #include "modular_skyrat\modules\alt_vox\code\vox_sounds_hl1.dm" -#include "modular_skyrat\modules\altborgs\code\cyborg_items.dm" -#include "modular_skyrat\modules\altborgs\code\inventory.dm" -#include "modular_skyrat\modules\altborgs\code\robot.dm" -#include "modular_skyrat\modules\altborgs\code\robot_defines.dm" -#include "modular_skyrat\modules\altborgs\code\robot_items.dm" -#include "modular_skyrat\modules\altborgs\code\robot_model.dm" -#include "modular_skyrat\modules\altborgs\code\robot_upgrade.dm" -#include "modular_skyrat\modules\altborgs\code\update_icons.dm" #include "modular_skyrat\modules\alternative_job_titles\code\alt_job_titles.dm" #include "modular_skyrat\modules\alternative_job_titles\code\job.dm" #include "modular_skyrat\modules\ammo_workbench\code\ammo_workbench.dm" @@ -6532,6 +6524,14 @@ #include "modular_skyrat\modules\bongs\code\bong.dm" #include "modular_skyrat\modules\borg_buffs\code\robot.dm" #include "modular_skyrat\modules\borg_buffs\code\snack_dispensor.dm" +#include "modular_skyrat\modules\borgs\code\inventory.dm" +#include "modular_skyrat\modules\borgs\code\mechafabricator_designs.dm" +#include "modular_skyrat\modules\borgs\code\robot.dm" +#include "modular_skyrat\modules\borgs\code\robot_defines.dm" +#include "modular_skyrat\modules\borgs\code\robot_items.dm" +#include "modular_skyrat\modules\borgs\code\robot_model.dm" +#include "modular_skyrat\modules\borgs\code\robot_upgrade.dm" +#include "modular_skyrat\modules\borgs\code\update_icons.dm" #include "modular_skyrat\modules\bsa_overhaul\code\admin_verb.dm" #include "modular_skyrat\modules\bsa_overhaul\code\bsa_cannon.dm" #include "modular_skyrat\modules\bsa_overhaul\code\bsa_computer.dm" @@ -6542,8 +6542,6 @@ #include "modular_skyrat\modules\cargo\code\items\AFAD.dm" #include "modular_skyrat\modules\cargo\code\items\improvedRCD.dm" #include "modular_skyrat\modules\cargo_teleporter\code\cargo_teleporter.dm" -#include "modular_skyrat\modules\cargoborg\code\robot_items.dm" -#include "modular_skyrat\modules\cargoborg\code\robot_modules.dm" #include "modular_skyrat\modules\cell_component\code\cell_component.dm" #include "modular_skyrat\modules\cellguns\code\cellgun_cells.dm" #include "modular_skyrat\modules\cellguns\code\cellguns.dm" @@ -6940,9 +6938,6 @@ #include "modular_skyrat\modules\customization\modules\surgery\organs\wings.dm" #include "modular_skyrat\modules\customization\modules\surgery\organs\xenodorsal.dm" #include "modular_skyrat\modules\customization\modules\surgery\organs\xenohead.dm" -#include "modular_skyrat\modules\cyborg\code\borgpowertools.dm" -#include "modular_skyrat\modules\cyborg\code\mechafabricator_designs.dm" -#include "modular_skyrat\modules\cyborg\code\robot_upgrades.dm" #include "modular_skyrat\modules\decay_subsystem\code\decay_turf_handling.dm" #include "modular_skyrat\modules\decay_subsystem\code\decaySS.dm" #include "modular_skyrat\modules\decay_subsystem\code\nests.dm" @@ -7697,9 +7692,6 @@ #include "modular_skyrat\modules\server_overflow\code\server_connect_panel.dm" #include "modular_skyrat\modules\SEVA_suit\code\seva_obj.dm" #include "modular_skyrat\modules\SEVA_suit\code\suit_voucher.dm" -#include "modular_skyrat\modules\shapeshifting_module\code\all_nodes.dm" -#include "modular_skyrat\modules\shapeshifting_module\code\borg_shapeshifter.dm" -#include "modular_skyrat\modules\shapeshifting_module\code\robot_upgrades.dm" #include "modular_skyrat\modules\shotgunrebalance\code\ammobox.dm" #include "modular_skyrat\modules\shotgunrebalance\code\autolathe_design.dm" #include "modular_skyrat\modules\shotgunrebalance\code\shotgun.dm"