mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 21:18:37 +01:00
334 lines
11 KiB
Plaintext
334 lines
11 KiB
Plaintext
/// Use this file to add UPGRADES to borgs, the standard items will go in the modular robot_items.dm
|
|
|
|
/*
|
|
* 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."
|
|
icon_state = "module_medical"
|
|
require_model = TRUE
|
|
model_type = list(/obj/item/robot_model/medical)
|
|
model_flags = BORG_MODEL_MEDICAL
|
|
|
|
items_to_add = list(/obj/item/scalpel/advanced,
|
|
/obj/item/retractor/advanced,
|
|
/obj/item/cautery/advanced,
|
|
/obj/item/blood_filter/advanced,
|
|
/obj/item/healthanalyzer/advanced,
|
|
)
|
|
items_to_remove = list(
|
|
/obj/item/borg/cyborg_omnitool/medical,
|
|
/obj/item/borg/cyborg_omnitool/medical, // Twice because you get two
|
|
/obj/item/blood_filter,
|
|
/obj/item/healthanalyzer,
|
|
)
|
|
|
|
/*
|
|
* ADVANCED ENGINEERING CYBORG UPGRADES
|
|
*/
|
|
|
|
/// Advanced Materials
|
|
#define ENGINEERING_CYBORG_CHARGE_PER_STACK 1000
|
|
|
|
/datum/robot_energy_storage/plasteel
|
|
name = "Plasteel Processor"
|
|
recharge_rate = 0
|
|
max_energy = ENGINEERING_CYBORG_CHARGE_PER_STACK * 50
|
|
|
|
/datum/robot_energy_storage/titanium
|
|
name = "Titanium Processor"
|
|
recharge_rate = 0
|
|
max_energy = ENGINEERING_CYBORG_CHARGE_PER_STACK * 50
|
|
|
|
/obj/item/stack/sheet/plasteel/cyborg
|
|
cost = ENGINEERING_CYBORG_CHARGE_PER_STACK
|
|
is_cyborg = TRUE
|
|
source = /datum/robot_energy_storage/plasteel
|
|
|
|
/obj/item/stack/sheet/titaniumglass/cyborg
|
|
cost = ENGINEERING_CYBORG_CHARGE_PER_STACK
|
|
is_cyborg = TRUE
|
|
source = /datum/robot_energy_storage/titanium
|
|
|
|
#undef ENGINEERING_CYBORG_CHARGE_PER_STACK
|
|
|
|
/obj/item/borg/upgrade/advanced_materials
|
|
name = "engineering advanced materials processor"
|
|
desc = "allows a cyborg to synthesize and store advanced materials"
|
|
icon_state = "module_engineer"
|
|
model_type = list(/obj/item/robot_model/engineering)
|
|
model_flags = BORG_MODEL_ENGINEERING
|
|
|
|
items_to_add = list(/obj/item/stack/sheet/plasteel/cyborg,
|
|
/obj/item/stack/sheet/titaniumglass/cyborg,
|
|
)
|
|
|
|
/obj/item/borg/upgrade/advanced_materials/deactivate(mob/living/silicon/robot/borg, mob/living/user)
|
|
. = ..()
|
|
for(var/datum/robot_energy_storage/plasteel/plasteel_energy in borg.model.storages)
|
|
qdel(plasteel_energy)
|
|
for(var/datum/robot_energy_storage/titanium/titanium_energy in borg.model.storages)
|
|
qdel(titanium_energy)
|
|
|
|
/*
|
|
* 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 = "module_miner"
|
|
require_model = TRUE
|
|
model_type = list(/obj/item/robot_model/miner)
|
|
model_flags = BORG_MODEL_MINER
|
|
|
|
items_to_add = list(/obj/item/weldingtool/largetank/cyborg)
|
|
|
|
/*
|
|
* ADVANCED CARGO CYBORG UPGRADES
|
|
*/
|
|
/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,
|
|
)
|
|
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 = 'modular_skyrat/modules/borgs/icons/robot_items.dmi'
|
|
icon_state = "module_cargo"
|
|
require_model = TRUE
|
|
model_type = list(/obj/item/robot_model/cargo)
|
|
model_flags = BORG_MODEL_CARGO
|
|
|
|
items_to_add = list(/obj/item/borg/hydraulic_clamp/better)
|
|
|
|
/datum/design/borg_upgrade_cargo_tele
|
|
name = "Cargo teleporter module"
|
|
id = "borg_upgrade_cargo_tele"
|
|
build_type = MECHFAB
|
|
build_path = /obj/item/borg/upgrade/cargo_tele
|
|
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/plastic = SMALL_MATERIAL_AMOUNT * 5, /datum/material/uranium = 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/cargo_tele
|
|
name = "cargo teleporter module"
|
|
desc = "Allows you to upgrade a cargo cyborg with the cargo teleporter"
|
|
icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi'
|
|
icon_state = "module_cargo"
|
|
require_model = TRUE
|
|
model_type = list(/obj/item/robot_model/cargo)
|
|
model_flags = BORG_MODEL_CARGO
|
|
|
|
items_to_add = list(/obj/item/cargo_teleporter)
|
|
|
|
/datum/design/borg_upgrade_forging
|
|
name = "Forging module"
|
|
id = "borg_upgrade_forging"
|
|
build_type = MECHFAB
|
|
build_path = /obj/item/borg/upgrade/forging
|
|
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/uranium = 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/forging
|
|
name = "cyborg forging module"
|
|
desc = "Allows you to upgrade a cargo cyborg with forging gear"
|
|
icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi'
|
|
icon_state = "module_cargo"
|
|
require_model = TRUE
|
|
model_type = list(/obj/item/robot_model/cargo)
|
|
model_flags = BORG_MODEL_CARGO
|
|
|
|
items_to_add = list(/obj/item/forging/hammer,
|
|
/obj/item/forging/billow,
|
|
/obj/item/forging/tongs,
|
|
/obj/item/borg/forging_setup,
|
|
)
|
|
|
|
/*
|
|
* SERVICE CYBORG UPGRADES
|
|
*/
|
|
|
|
/datum/design/borg_upgrade_artistic
|
|
name = "Artistic module"
|
|
id = "borg_upgrade_artistic"
|
|
build_type = MECHFAB
|
|
build_path = /obj/item/borg/upgrade/artistic
|
|
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,
|
|
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 2)
|
|
construction_time = 10 SECONDS
|
|
category = list(
|
|
RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SERVICE
|
|
)
|
|
|
|
/obj/item/borg/upgrade/artistic
|
|
name = "borg artistic module"
|
|
desc = "Allows you to upgrade a cyborg with tools for creating art."
|
|
icon_state = "module_general"
|
|
items_to_add = list(
|
|
/obj/item/pen,
|
|
/obj/item/toy/crayon/spraycan/borg,
|
|
/obj/item/instrument/guitar,
|
|
/obj/item/instrument/piano_synth,
|
|
/obj/item/stack/pipe_cleaner_coil/cyborg,
|
|
/obj/item/chisel,
|
|
)
|
|
|
|
/*
|
|
* 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 = "module_general"
|
|
|
|
items_to_add = list(/obj/item/borg_shapeshifter)
|
|
|
|
/// 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 = "module_peace"
|
|
|
|
items_to_add = list(/obj/item/quadborg_tongue,
|
|
/obj/item/quadborg_nose)
|
|
|
|
/obj/item/quadborg_tongue/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
|
|
var/mob/living/silicon/robot/borg = user
|
|
var/mob/living/mob = interacting_with
|
|
if(!istype(mob))
|
|
return ITEM_INTERACT_BLOCKING
|
|
if(HAS_TRAIT(interacting_with, TRAIT_AFFECTION_AVERSION)) // Checks for Affection Aversion trait
|
|
to_chat(user, span_warning("ERROR: [interacting_with] is on the Do Not Lick registry!"))
|
|
return ITEM_INTERACT_BLOCKING
|
|
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!"))
|
|
else
|
|
borg.visible_message(span_warning("\the [borg] affectionally licks \the [mob]!"), span_notice("You affectionally lick \the [mob]!"))
|
|
playsound(borg, 'sound/effects/blob/attackblob.ogg', 50, 1)
|
|
return ITEM_INTERACT_SUCCESS
|
|
|
|
/obj/item/quadborg_nose/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
|
|
if(HAS_TRAIT(interacting_with, TRAIT_AFFECTION_AVERSION)) // Checks for Affection Aversion trait
|
|
to_chat(user, span_warning("ERROR: [interacting_with] is on the No Nosing registry!"))
|
|
return ITEM_INTERACT_BLOCKING
|
|
|
|
do_attack_animation(interacting_with, null, src)
|
|
user.visible_message(span_notice("[user] [pick("nuzzles", "pushes", "boops")] \the [interacting_with.name] with their nose!"))
|
|
return ITEM_INTERACT_SUCCESS
|
|
|
|
/// The Shrinkening
|
|
/mob/living/silicon/robot
|
|
var/hasShrunk = FALSE
|
|
|
|
// Added checks for borg models who come from the Zoolander Center for Borgs Who Can't Upgrade Good
|
|
/obj/item/borg/upgrade/expand/action(mob/living/silicon/robot/borg, mob/living/user = usr)
|
|
if(TRAIT_R_EXPANDER_BLOCKED in borg.model.model_features)
|
|
to_chat(usr, span_warning("This unit is unable to equip an expand module!"))
|
|
return FALSE
|
|
|
|
if(borg.model.type == /obj/item/robot_model)
|
|
to_chat(usr, span_warning("This unit is still in factory default configuration!"))
|
|
return FALSE
|
|
|
|
return ..()
|
|
|
|
/obj/item/borg/upgrade/shrink
|
|
name = "borg shrinker"
|
|
desc = "A cyborg resizer, it makes a cyborg small."
|
|
icon_state = "module_general"
|
|
|
|
/obj/item/borg/upgrade/shrink/action(mob/living/silicon/robot/borg, user = usr)
|
|
. = ..()
|
|
if(!. || HAS_TRAIT(borg, TRAIT_NO_TRANSFORM))
|
|
return FALSE
|
|
|
|
if(borg.model.type == /obj/item/robot_model)
|
|
to_chat(usr, span_warning("This unit is still in factory default configuration!"))
|
|
return FALSE
|
|
|
|
if(borg.hasShrunk)
|
|
to_chat(usr, span_warning("This unit already has a shrink module installed!"))
|
|
return FALSE
|
|
|
|
if(TRAIT_R_SMALL in borg.model.model_features)
|
|
to_chat(usr, span_warning("This unit's chassis cannot be shrunk any further."))
|
|
return FALSE
|
|
|
|
ADD_TRAIT(borg, TRAIT_NO_TRANSFORM, REF(src))
|
|
var/prev_lockcharge = borg.lockcharge
|
|
borg.SetLockdown(TRUE)
|
|
borg.set_anchored(TRUE)
|
|
do_smoke(4, src, loc, smoke_type = /datum/effect_system/fluid_spread/smoke)
|
|
sleep(0.2 SECONDS)
|
|
for(var/i in 1 to 4)
|
|
playsound(borg, pick(
|
|
'sound/items/tools/drill_use.ogg',
|
|
'sound/items/tools/jaws_cut.ogg',
|
|
'sound/items/tools/jaws_pry.ogg',
|
|
'sound/items/tools/welder.ogg',
|
|
'sound/items/tools/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.hasShrunk = TRUE
|
|
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 = "module_illegal"
|
|
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 ..()
|
|
|
|
/// Dominatrix time
|
|
/obj/item/borg/upgrade/dominatrixmodule
|
|
name = "borg dominatrix module"
|
|
desc = "A module that greatly upgrades the ability of borgs to display affection."
|
|
icon = 'modular_skyrat/modules/borgs/icons/robot_items.dmi'
|
|
icon_state = "module_lust"
|
|
custom_price = 0
|
|
|
|
items_to_add = list(/obj/item/kinky_shocker,
|
|
/obj/item/clothing/mask/leatherwhip,
|
|
/obj/item/spanking_pad,
|
|
/obj/item/tickle_feather,
|
|
/obj/item/clothing/erp_leash,
|
|
/obj/item/clicker
|
|
)
|