[Mostly-Modular] Major refactor of most modular borg code with some QOL adjustments (#24542)
* The great BORG * godamn my head * how did that even compile * Why do you keep reverting * ah ticked * Delete tallrobot_effects.dmi * removes 'dogborg' language and cargo tweaks * lol silly dog you dont have a custom panel yet * that typo tho * Forgot about that borg building * Apply suggestions from code review Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> * local edit * Godamnit Hemlock * re-deletes altborgs * Update mechfabricator_designs.dm * Revert "Update mechfabricator_designs.dm" This reverts commit 569912fa2fadda9fbcdc83646e995405f33dfb24. --------- Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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",
|
||||
)
|
||||
|
||||
@@ -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?
|
||||
|
||||
@@ -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!"))
|
||||
@@ -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 ..()
|
||||
|
Before Width: | Height: | Size: 6.5 KiB |
@@ -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
|
||||
@@ -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
|
||||
)
|
||||
@@ -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 <b>[crate_count > 0 ? crate_count : "no"]</b> 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)
|
||||
@@ -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()
|
||||
@@ -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 <b>[crate_count > 0 ? crate_count : "no"]</b> 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 ..()
|
||||
@@ -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()
|
||||
|
Before Width: | Height: | Size: 477 B After Width: | Height: | Size: 477 B |
|
After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 70 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 68 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 412 KiB After Width: | Height: | Size: 412 KiB |
|
Before Width: | Height: | Size: 280 KiB After Width: | Height: | Size: 280 KiB |
|
Before Width: | Height: | Size: 327 KiB After Width: | Height: | Size: 327 KiB |
|
Before Width: | Height: | Size: 325 KiB After Width: | Height: | Size: 325 KiB |
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 344 KiB After Width: | Height: | Size: 344 KiB |
|
Before Width: | Height: | Size: 286 KiB After Width: | Height: | Size: 286 KiB |
|
Before Width: | Height: | Size: 275 KiB After Width: | Height: | Size: 275 KiB |
@@ -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
|
||||
DuffCreeper - Code, Spriting
|
||||
Zergspower - Refactoring
|
||||
@@ -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))
|
||||
)
|
||||
|
||||
@@ -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"
|
||||
|
Before Width: | Height: | Size: 731 B |
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
<!-- If you had to edit, or append to any core procs in the process of making this PR, list them here. APPEND: Also, please include any files that you've changed. .DM files that is. -->
|
||||
|
||||
### Defines:
|
||||
|
||||
- N/A
|
||||
<!-- If you needed to add any defines, mention the files you added those defines in -->
|
||||
|
||||
### Master file additions
|
||||
|
||||
- N/A
|
||||
<!-- Any master file changes you've made to existing master files or if you've added a new master file. Please mark either as #NEW or #CHANGE -->
|
||||
|
||||
### Included files that are not contained in this module:
|
||||
|
||||
- N/A
|
||||
<!-- Likewise, be it a non-modular file or a modular one that's not contained within the folder belonging to this specific module, it should be mentioned here -->
|
||||
|
||||
### Credits:
|
||||
Funce#7321 - Funce
|
||||
Tyger#8082 - SarmentiCampbell
|
||||
<!-- Here go the credits to you, dear coder, and in case of collaborative work or ports, credits to the original source of the code -->
|
||||
@@ -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"
|
||||
|
||||