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 09a915f58ed..00000000000
Binary files a/modular_skyrat/modules/altborgs/icons/robot_items.dmi and /dev/null differ
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 00000000000..dfac00b0d1c
Binary files /dev/null and b/modular_skyrat/modules/borgs/icons/robot_items.dmi differ
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 5fdfb02d16d..00000000000
Binary files a/modular_skyrat/modules/cyborg/icons/items_cyborg.dmi and /dev/null differ
diff --git a/modular_skyrat/modules/ghostcafe/code/robot_ghostcafe.dm b/modular_skyrat/modules/ghostcafe/code/robot_ghostcafe.dm
index 9a6f4c84532..760ec0fd526 100644
--- a/modular_skyrat/modules/ghostcafe/code/robot_ghostcafe.dm
+++ b/modular_skyrat/modules/ghostcafe/code/robot_ghostcafe.dm
@@ -15,7 +15,7 @@
/mob/living/silicon/robot/model/roleplay/binarycheck()
return FALSE //Roleplay borgs aren't truly borgs
-/obj/item/modular_computer/pda/silicon/cyborg/roleplay
+/obj/item/modular_computer/pda/silicon/cyborg/roleplay
starting_programs = list( //Imaginary cyborgs do not get a PDA
/datum/computer_file/program/filemanager,
/datum/computer_file/program/robotact,
@@ -39,10 +39,8 @@
/obj/item/assembly/flash/cyborg,
/obj/item/extinguisher/mini,
/obj/item/weldingtool/largetank/cyborg,
- /obj/item/screwdriver/cyborg,
- /obj/item/wrench/cyborg,
- /obj/item/crowbar/cyborg,
- /obj/item/wirecutters/cyborg,
+ /obj/item/screwdriver/cyborg/power, // Combines Screwdriver and Wrench into one
+ /obj/item/crowbar/cyborg/power, // Combines Crowbar and Wirecutters into one
/obj/item/multitool/cyborg,
/obj/item/stack/sheet/iron,
/obj/item/stack/sheet/glass,
@@ -56,14 +54,15 @@
/obj/item/reagent_containers/borghypo/borgshaker/specific/soda,
/obj/item/reagent_containers/borghypo/borgshaker/specific/alcohol,
/obj/item/reagent_containers/borghypo/borgshaker/specific/misc,
- /obj/item/reagent_containers/cup/glass/drinkingglass,
+ /obj/item/borg/apparatus/beaker,
+ /obj/item/borg/apparatus/beaker,
/obj/item/soap/nanotrasen,
/obj/item/mop/cyborg, // Soap's good and all, but a mop is good, too
- /obj/item/lightreplacer, // Lights go out sometimes, or get broken, let the Borg help fix them
+ /obj/item/lightreplacer,
/obj/item/borg/cyborghug,
- /obj/item/dogborg_nose,
- /obj/item/dogborg_tongue,
- /obj/item/reagent_containers/borghypo, // Let Roleplay Borgs heal visitors
+ /obj/item/quadborg_nose,
+ /obj/item/quadborg_tongue,
+ /obj/item/reagent_containers/borghypo,
/obj/item/borg_shapeshifter/stable)
hat_offset = -3
diff --git a/modular_skyrat/modules/shapeshifting_module/code/all_nodes.dm b/modular_skyrat/modules/shapeshifting_module/code/all_nodes.dm
deleted file mode 100644
index 64ad4a213cd..00000000000
--- a/modular_skyrat/modules/shapeshifting_module/code/all_nodes.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/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)
diff --git a/modular_skyrat/modules/shapeshifting_module/code/borg_shapeshifter.dm b/modular_skyrat/modules/shapeshifting_module/code/borg_shapeshifter.dm
deleted file mode 100644
index c47ebd4d40d..00000000000
--- a/modular_skyrat/modules/shapeshifting_module/code/borg_shapeshifter.dm
+++ /dev/null
@@ -1,246 +0,0 @@
-/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\altborgs\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/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"