Various upstream related fixes

This commit is contained in:
Maia
2026-08-14 19:44:53 +02:00
parent 08e8cd5652
commit 8a01d69e7e
141 changed files with 948 additions and 516 deletions
+4 -3
View File
@@ -172,9 +172,9 @@
*/
// Command
#define JOB_DISPLAY_ORDER_CAPTAIN 1
#define JOB_DISPLAY_ORDER_BRIDGE_ASSISTANT 2
#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 3 // BUBBER EDIT ADDITION
#define JOB_DISPLAY_ORDER_BLUESHIELD 4 // BUBBER EDIT ADDITION
// #define JOB_DISPLAY_ORDER_BRIDGE_ASSISTANT 2 // BUBBER EDIT REMOVAL - moved it to the "no department" section
#define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 2 // BUBBER EDIT ADDITION
#define JOB_DISPLAY_ORDER_BLUESHIELD 3 // BUBBER EDIT ADDITION
// Security
#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 1
#define JOB_DISPLAY_ORDER_VETERAN_ADVISOR 2
@@ -232,6 +232,7 @@
#define JOB_DISPLAY_ORDER_ASSISTANT 1
#define JOB_DISPLAY_ORDER_PRISONER 2
#define JOB_DISPLAY_ORDER_STOWAWAY 3 // BUBBER EDIT ADDITION
#define JOB_DISPLAY_ORDER_BRIDGE_ASSISTANT 4 // BUBBER EDIT ADDITION
#define DEPARTMENT_UNASSIGNED "No Department"
+8
View File
@@ -855,6 +855,13 @@ GLOBAL_ALIST_INIT(human_heights_to_offsets, alist(
#define LEGCUFF_LAYER 4
/// Handcuff layer (when your hands are cuffed)
#define HANDCUFF_LAYER 5
// BUBBER EDIT BEGIN
#define PENIS_LAYER_FRONT 5.1
#define BREASTS_FRONT_LAYER 5.2
#define BELLY_FRONT_LAYER 5.3
#define VAGINA_FRONT_LAYER 5.4
#define BALLS_LAYER_FRONT 5.5
// BUBBER EDIT END
/// Hair that layers out above clothing, including hats (high ponytails and such)
#define OUTER_HAIR_LAYER 5.9
/// Head layer (hats, helmets, etc.)
@@ -899,6 +906,7 @@ GLOBAL_ALIST_INIT(human_heights_to_offsets, alist(
#define ID_LAYER 18
// BUBBER EDIT ADDITION BEGIN
#define BANDAGE_LAYER 19
#define ASS_LAYER_FRONT 19.9
#define NIPPLES_LAYER 20
#define PENIS_LAYER 21
#define VAGINA_LAYER 22
@@ -1,7 +0,0 @@
/// Creates a mutable appearance glued to the EMISSIVE_PLAN, using the values from a mutable appearance
/proc/emissive_appearance_copy(mutable_appearance/to_use, atom/offset_spokesman, appearance_flags = (RESET_COLOR|KEEP_APART))
var/mutable_appearance/appearance = mutable_appearance(to_use.icon, to_use.icon_state, to_use.layer, offset_spokesman, EMISSIVE_PLANE, to_use.alpha, to_use.appearance_flags | appearance_flags)
appearance.color = GLOB.emissive_color
appearance.pixel_w = to_use.pixel_w
appearance.pixel_z = to_use.pixel_z
return appearance
+1 -1
View File
@@ -295,7 +295,7 @@
// BUBBER EDIT ADDITION BEGIN - Construction skill
var/mob/crafting_mob = crafter
if(istype(crafting_mob))
crafting_mob.mind.adjust_experience(/datum/skill/construction, 5)
crafting_mob.mind?.adjust_experience(/datum/skill/construction, 5)
// BUBBER EDIT ADDITION END - Construction skill
result.setDir(crafter.dir)
if(recipe.crafting_flags & CRAFT_CLEARS_REAGENTS)
+2 -2
View File
@@ -86,7 +86,7 @@
break
spawning_amount++
user.mind.adjust_experience(/datum/skill/production, 5) //SKYRAT EDIT
user.mind?.adjust_experience(/datum/skill/production, 5) //SKYRAT EDIT
else
if(!do_after(user, loom_time * skill_modifier, target)) //SKYRAT EDIT
@@ -95,7 +95,7 @@
qdel(source)
spawning_amount++
user.mind.adjust_experience(/datum/skill/production, 5) //SKYRAT EDIT
user.mind?.adjust_experience(/datum/skill/production, 5) //SKYRAT EDIT
if(spawning_amount == 0)
return
+1 -1
View File
@@ -185,7 +185,6 @@
span_notice("You wipe off [target]'s lipstick."))
target.update_lips(null)
/* SKYRAT EDIT REMOVAL
/obj/item/razor
name = "electric razor"
desc = "The latest and greatest power razor born from the science of shaving."
@@ -199,6 +198,7 @@
drop_sound = SFX_GENERIC_DEVICE_DROP
custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 0.7)
/* SKYRAT EDIT REMOVAL
/obj/item/razor/suicide_act(mob/living/user)
user.visible_message(span_suicide("[user] begins shaving [user.p_them()]self without the razor guard! It looks like [user.p_theyre()] trying to commit suicide!"))
if (ishuman(user))
@@ -295,7 +295,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \
else
new/obj/structure/girder/displaced(build_on)
user.balloon_alert(user, "girder created")
user.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT: Construction Skill
user.mind?.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT: Construction Skill
return ITEM_INTERACT_SUCCESS
/*
+1 -1
View File
@@ -464,7 +464,7 @@
created.setDir(builder.dir)
created.on_craft_completion(list(used_stack), null, builder)
builder.mind.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT: Construction Skill
builder.mind?.adjust_experience(/datum/skill/construction, 5) //SKYRAT EDIT: Construction Skill
builder.investigate_log("crafted [recipe.title]", INVESTIGATE_CRAFTING)
@@ -2,6 +2,7 @@
action_delegations = list(
"set_job_preference" = PROC_REF(set_job_preference),
"set_job_to_profile" = PROC_REF(set_job_to_profile),
"set_job_title" = PROC_REF(set_job_title), // BUBBER EDIT ADDITION - ALTERNATIVE_JOB_TITLES
)
/datum/preference_middleware/jobs/proc/set_job_preference(list/params, mob/user)
@@ -37,6 +38,24 @@
LAZYSET(preferences.job_assigned_profiles, job_title, profile_slot)
return TRUE
// BUBBER EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES
/datum/preference_middleware/jobs/proc/set_job_title(list/params, mob/user)
var/job_title = params["job"]
var/new_job_title = params["new_title"]
var/datum/job/job = SSjob.get_job(job_title)
if (isnull(job))
return FALSE
if (!(new_job_title in job.alt_titles))
return FALSE
LAZYSET(preferences.alt_job_titles, job_title, new_job_title)
return TRUE
// BUBBER EDIT ADDITION END
/datum/preference_middleware/jobs/get_constant_data()
var/list/data = list()
@@ -93,6 +112,14 @@
"assigned_profile_slot" = slot,
))
// BUBBER EDIT ADDITION BEGIN - ALTERNATIVE_JOB_TITLES
if(isnull(preferences.alt_job_titles))
preferences.alt_job_titles = list()
data["job_alt_titles"] = preferences.alt_job_titles
data["species_restricted_jobs"] = get_unavailable_jobs_for_species()
// BUBBER EDIT ADDITION END
return data
/datum/preference_middleware/jobs/get_ui_static_data(mob/user)
@@ -134,7 +134,7 @@
// BUBBERSTATION EDIT END
playsound(user, 'sound/machines/ping.ogg', 25)
to_chat(user, span_notice("You scan [target]."))
user.mind.adjust_experience(/datum/skill/research, 5) //SKYRAT EDIT: Research Skill (simple research)
user.mind?.adjust_experience(/datum/skill/research, 5) //SKYRAT EDIT: Research Skill (simple research)
else if(!(config_flags & EXPERIMENT_CONFIG_SILENT_FAIL))
playsound(user, 'sound/machines/buzz/buzz-sigh.ogg', 25)
to_chat(user, span_notice("[target] is not related to your currently selected experiment."))
@@ -536,18 +536,19 @@ There are several things that need to be remembered:
// BUBBER EDIT ADDITION START
var/mutant_override = FALSE
var/mutant_override_file = null
if(bodyshape & BODYSHAPE_CUSTOM)
var/species_icon_file = dna.species.generate_custom_worn_icon(LOADOUT_ITEM_MASK, wear_mask, src)
if(species_icon_file)
icon_file = species_icon_file
mutant_override_file = species_icon_file
mutant_override = TRUE
if(!mutant_override && (bodyshape & BODYSHAPE_SNOUTED) && (worn_item.supports_variations_flags & CLOTHING_SNOUTED_VARIATION))
var/snout_icon_file = worn_item.worn_icon_muzzled || SNOUTED_MASK_FILE
if(snout_icon_file && icon_exists(snout_icon_file, RESOLVE_ICON_STATE(worn_item)))
icon_file = snout_icon_file
mutant_override_file = snout_icon_file
mutant_override = TRUE
var/mutable_appearance/mask_overlay = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, bodyshape = bodyshape, override_file = mutant_override_file)
// BUBBER EDIT ADDITION END
var/mutable_appearance/mask_overlay = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, bodyshape = bodyshape)
apply_height(mask_overlay, UPPER_BODY)
if(!mutant_override) my_head.worn_mask_offset?.apply_offset(mask_overlay) // BUBBER EDIT CHANGE - ORIGINAL: my_head.worn_mask_offset?.apply_offset(mask_overlay)
overlays_standing[FACEMASK_LAYER] = mask_overlay
@@ -749,9 +750,12 @@ There are several things that need to be remembered:
var/icon/female_clothing_icon = female_clothing_icons[index]
if(!female_clothing_icon) //Create standing/laying icons if they don't exist
var/female_icon_state = "female[type == FEMALE_UNIFORM_FULL ? "_full" : ((!type || type & FEMALE_UNIFORM_TOP_ONLY) || bodyshape & BODYSHAPE_DIGITIGRADE ? "_top" : "")][type & FEMALE_UNIFORM_NO_BREASTS ? "_no_breasts" : ""]"
var/icon/female_cropping_mask = icon('icons/mob/clothing/under/masking_helpers.dmi', female_icon_state)
// BUBBER EDIT BEGIN - Stops the dixel from appearing on teshari. We don't currently have fem icons for them so
female_clothing_icon = icon(icon, icon_state)
female_clothing_icon.Blend(female_cropping_mask, ICON_MULTIPLY)
if(!(bodyshape & BODYSHAPE_CUSTOM))
var/icon/female_cropping_mask = icon('icons/mob/clothing/under/masking_helpers.dmi', female_icon_state)
female_clothing_icon.Blend(female_cropping_mask, ICON_MULTIPLY)
// BUBBER EDIT END
female_clothing_icon = fcopy_rsc(female_clothing_icon)
female_clothing_icons[index] = female_clothing_icon
+1 -1
View File
@@ -207,7 +207,7 @@
var/species_pref = user.client.prefs.read_preference(/datum/preference/choiced/species) || /datum/species/human
// BUBBER EDIT - Commented observer check
if(!prompt_fail && /*user.started_as_observer &&*/ allow_custom_character && (GLOB.species_prototypes[species_pref].get_breath_type() == GAS_O2))
if(!prompt_fail && /*user.started_as_observer &&*/ allow_custom_character /*&& (GLOB.species_prototypes[species_pref].get_breath_type() == GAS_O2)*/)
var/static_prompt = "Because you haven't taken a role so far, you may spawn in as \
[((allow_custom_character & GHOSTROLE_TAKE_PREFS_SPECIES) || species_pref == /datum/species/human) ? "" : "a human version of"] \
your customized character with a random name. Would you like to?"
@@ -723,6 +723,7 @@
This is a must-have for Nanotrasen Captains, enabling them to show off their authoritative hat even while in their MODsuit."
icon_state = "hat_holder"
incompatible_modules = list(/obj/item/mod/module/hat_stabilizer)
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2)
required_slots = list(ITEM_SLOT_HEAD)
/*Intentionally left inheriting 0 complexity and removable = TRUE;
even though it comes inbuilt into the Magnate/Corporate MODS and spawns in maints, I like the idea of stealing them*/
@@ -1,6 +1,5 @@
//Cyborg
/* //SKYRAT EDIT REMOVAL BEGIN - Costs lowered and time reduced -
/datum/design/borg_suit
name = "Cyborg Endoskeleton"
id = "borg_suit"
@@ -77,7 +76,6 @@
category = list(
RND_CATEGORY_MECHFAB_CYBORG + RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS
)
*///SKYRAT EDIT REMOVAL END
//Advanced Robotic Limbs
+57 -56
View File
@@ -1424,6 +1424,63 @@
// Add two masked images based on the old one
. += leg_source.generate_masked_leg(limb_image)
// SKYRAT EDIT ADDITION BEGIN - MARKINGS CODE
var/override_color
var/atom/offset_spokesman = owner || src
// First, check to see if this bodypart is husked. If so, we don't want to apply our sparkledog colors to the limb.
if(is_husked)
override_color = "#888888"
// We need to check that the owner exists(could be a placed bodypart) and that it's not a chainsawhand and that they're a human with usable DNA.
if(!(bodypart_flags & BODYPART_PSEUDOPART) && (!(bodyshape & BODYSHAPE_TAUR)) && !isnull(owner)) // taur legs never ever render
for(var/key in markings) // Cycle through all of our currently selected markings.
var/datum/body_marking/body_marking = GLOB.body_markings[key]
if (!body_marking) // Edge case prevention.
continue
var/render_limb_string = limb_id == "digitigrade" ? ("digitigrade_1_" + body_zone) : body_zone // I am not sure why there are _1 and _2 versions of digi, so, it's staying like this.
var/gender_modifier = ""
if(body_zone == BODY_ZONE_CHEST) // Chest markings have male and female versions.
if(body_marking.gendered)
gender_modifier = is_dimorphic ? "_[limb_gender]" : "_m"
var/mutable_appearance/accessory_overlay
var/mutable_appearance/emissive
accessory_overlay = mutable_appearance(body_marking.icon, "[body_marking.icon_state]_[render_limb_string][gender_modifier]", -BODYPARTS_LAYER)
accessory_overlay.alpha = markings_alpha
if(markings[key][2])
emissive = emissive_appearance(accessory_overlay.icon, accessory_overlay.icon_state, offset_spokesman, offset_spokesman = offset_spokesman, layer = accessory_overlay.layer)
if(override_color)
accessory_overlay.color = override_color
else
accessory_overlay.color = markings[key][1]
. += accessory_overlay
if (emissive)
. += emissive
if(aux_zone)
for(var/key in aux_zone_markings)
var/datum/body_marking/body_marking = GLOB.body_markings[key]
if (!body_marking) // Edge case prevention.
continue
var/render_limb_string = aux_zone
var/mutable_appearance/emissive
var/mutable_appearance/accessory_overlay
accessory_overlay = mutable_appearance(body_marking.icon, "[body_marking.icon_state]_[render_limb_string]", -aux_layer)
accessory_overlay.alpha = markings_alpha
if (aux_zone_markings[key][2])
emissive = emissive_appearance(accessory_overlay.icon, accessory_overlay.icon_state, offset_spokesman = offset_spokesman, layer = accessory_overlay.layer)
if(override_color)
accessory_overlay.color = override_color
else
accessory_overlay.color = aux_zone_markings[key][1]
. += accessory_overlay
if (emissive)
. += emissive
// SKYRAT EDIT END - MARKINGS CODE END
// Apply height to the overlays we generated so far
// This is done before collecting bodypart overlays so we don't apply height twice to the same overlays
if(!dropped && !isnull(owner))
@@ -1458,62 +1515,6 @@
texture.modify_bodypart_appearance(generated_overlay)
SEND_SIGNAL(src, COMSIG_BODYPART_GET_LIMB_ICON, ., dropped)
// SKYRAT EDIT ADDITION BEGIN - MARKINGS CODE
var/override_color
var/atom/offset_spokesman = owner || src
// First, check to see if this bodypart is husked. If so, we don't want to apply our sparkledog colors to the limb.
if(is_husked)
override_color = "#888888"
// We need to check that the owner exists(could be a placed bodypart) and that it's not a chainsawhand and that they're a human with usable DNA.
if(!(bodypart_flags & BODYPART_PSEUDOPART) && (!(bodyshape & BODYSHAPE_TAUR))) // taur legs never ever render
for(var/key in markings) // Cycle through all of our currently selected markings.
var/datum/body_marking/body_marking = GLOB.body_markings[key]
if (!body_marking) // Edge case prevention.
continue
var/render_limb_string = limb_id == "digitigrade" ? ("digitigrade_1_" + body_zone) : body_zone // I am not sure why there are _1 and _2 versions of digi, so, it's staying like this.
var/gender_modifier = ""
if(body_zone == BODY_ZONE_CHEST) // Chest markings have male and female versions.
if(body_marking.gendered)
gender_modifier = is_dimorphic ? "_[limb_gender]" : "_m"
var/mutable_appearance/accessory_overlay
var/mutable_appearance/emissive
accessory_overlay = mutable_appearance(body_marking.icon, "[body_marking.icon_state]_[render_limb_string][gender_modifier]", -BODYPARTS_LAYER)
accessory_overlay.alpha = markings_alpha
if(markings[key][2])
emissive = emissive_appearance_copy(accessory_overlay, offset_spokesman)
if(override_color)
accessory_overlay.color = override_color
else
accessory_overlay.color = markings[key][1]
. += accessory_overlay
if (emissive)
. += emissive
if(aux_zone)
for(var/key in aux_zone_markings)
var/datum/body_marking/body_marking = GLOB.body_markings[key]
if (!body_marking) // Edge case prevention.
continue
var/render_limb_string = aux_zone
var/mutable_appearance/emissive
var/mutable_appearance/accessory_overlay
accessory_overlay = mutable_appearance(body_marking.icon, "[body_marking.icon_state]_[render_limb_string]", -aux_layer)
accessory_overlay.alpha = markings_alpha
if (aux_zone_markings[key][2])
emissive = emissive_appearance_copy(accessory_overlay, offset_spokesman)
if(override_color)
accessory_overlay.color = override_color
else
accessory_overlay.color = aux_zone_markings[key][1]
. += accessory_overlay
if (emissive)
. += emissive
// SKYRAT EDIT END - MARKINGS CODE END
return .
/obj/item/bodypart/proc/huskify_image(image/thing_to_husk)
@@ -357,8 +357,8 @@
eye_right.alpha = 0
if (is_emissive) // Because it was done all weird up there.
var/mutable_appearance/emissive_left = emissive_appearance_copy(eye_left, owner)
var/mutable_appearance/emissive_right = emissive_appearance_copy(eye_right, owner)
var/mutable_appearance/emissive_left = emissive_appearance(eye_left.icon, eye_left.icon_state, offset_spokesman = owner, layer = eye_left.layer)
var/mutable_appearance/emissive_right = emissive_appearance(eye_right.icon, eye_right.icon_state, offset_spokesman = owner, layer = eye_right.layer)
emissive_left.appearance_flags &= ~RESET_TRANSFORM
emissive_right.appearance_flags &= ~RESET_TRANSFORM
@@ -1,4 +1,3 @@
/obj/item/modular_computer/pda/long_range
name = "Far range PDA"
long_ranged = TRUE
custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.1, /datum/material/glass = SMALL_MATERIAL_AMOUNT*3)
@@ -102,7 +102,7 @@ GLOBAL_LIST_INIT(skyrat_cloth_recipes, list(
new/datum/stack_recipe("towel", /obj/item/towel, 2, category = CAT_CLOTHING),
new/datum/stack_recipe("eyepatch wrap", /obj/item/clothing/glasses/eyepatch/wrap, 2, category = CAT_CLOTHING),
new/datum/stack_recipe("eyepatch", /obj/item/clothing/glasses/eyepatch, 2, category = CAT_CLOTHING),
new/datum/stack_recipe("xenoarch bag", /obj/item/storage/bag/xenoarch, 4, category = CAT_CONTAINERS),
new/datum/stack_recipe("xenoarch bag", /obj/item/storage/bag/xenoarch, 4, crafting_flags = CRAFT_SKIP_MATERIALS_PARITY, category = CAT_CONTAINERS),
new/datum/stack_recipe("saddlebags", /obj/item/storage/backpack/saddlebags, 5, category = CAT_CONTAINERS),
))
@@ -116,7 +116,7 @@ GLOBAL_LIST_INIT(skyrat_leather_recipes, list(
))
GLOBAL_LIST_INIT(skyrat_leather_belt_recipes, list(
new/datum/stack_recipe("xenoarch belt", /obj/item/storage/belt/utility/xenoarch, 4, category = CAT_CONTAINERS),
new/datum/stack_recipe("xenoarch belt", /obj/item/storage/belt/utility/xenoarch, 4, crafting_flags = CRAFT_SKIP_MATERIALS_PARITY, category = CAT_CONTAINERS),
new/datum/stack_recipe("medical bandolier", /obj/item/storage/belt/medbandolier, 5, category = CAT_CONTAINERS),
new/datum/stack_recipe("gear harness", /obj/item/clothing/under/misc/skyrat/gear_harness, 6, category = CAT_CLOTHING),
new/datum/stack_recipe("ammo pouch", /obj/item/storage/pouch/ammo, 4, category = CAT_CONTAINERS),
@@ -858,7 +858,7 @@
savefile_key = "feature_pod_hair"
main_feature_name = "Hairstyle"
category = PREFERENCE_CATEGORY_FEATURES
relevant_mutant_bodypart = "pod_hair"
relevant_mutant_bodypart = FEATURE_POD_HAIR
default_accessory_type = /datum/sprite_accessory/pod_hair/ivy
should_generate_icons = TRUE
generate_icons = TRUE
@@ -2,8 +2,8 @@
name = "long range PDA"
id = "long range pda"
build_type = PROTOLATHE | AWAY_LATHE
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2.1, /datum/material/glass = SMALL_MATERIAL_AMOUNT*3)
transfered_materials = list(/obj/item/stock_parts/power_store/cell/upgraded = /obj/item/stock_parts/power_store/cell/upgraded::custom_materials)
materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 3, /datum/material/glass = SMALL_MATERIAL_AMOUNT, /datum/material/plastic = SMALL_MATERIAL_AMOUNT)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/modular_computer/pda/long_range
category = list(
RND_CATEGORY_MODULAR_COMPUTERS
@@ -11,7 +11,6 @@
lathe_time_factor = 0.2
departmental_flags = DEPARTMENT_BITFLAG_CARGO
/obj/item/disk/design_disk/long_range_pda
name = "far range PDA design disk"
@@ -74,7 +74,7 @@
if(istype(attacking_item, /obj/item/food))
qdel(attacking_item)
balloon_alert(user, "food has been placed")
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
ant_chance++
if(prob(user.mind.get_skill_modifier(/datum/skill/primitive, SKILL_PROBS_MODIFIER)))
ant_chance++
@@ -88,7 +88,7 @@
return
qdel(selected_food)
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
ant_chance++
if(prob(user.mind.get_skill_modifier(/datum/skill/primitive, SKILL_PROBS_MODIFIER)))
ant_chance++
@@ -40,7 +40,7 @@
return
locate_farm = new(get_turf(atom_parent))
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
locate_farm.pixel_x = pixel_shift[1]
locate_farm.pixel_y = pixel_shift[2]
locate_farm.layer = atom_parent.layer + 0.1
@@ -155,7 +155,7 @@
COOLDOWN_START(src, harvest_timer, harvest_cooldown)
create_harvest()
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
update_appearance()
return ..()
@@ -174,13 +174,13 @@
COOLDOWN_START(src, harvest_timer, harvest_cooldown)
create_harvest(attacking_item, user)
user.mind.adjust_experience(/datum/skill/primitive, 15)
user.mind?.adjust_experience(/datum/skill/primitive, 15)
update_appearance()
return
//if its fertilizer, boost our level
else if(istype(attacking_item, /obj/item/stack/worm_fertilizer))
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
if(farm_level >= SKILL_LEVEL_LEGENDARY)
balloon_alert(user, "farm already max level!")
return
@@ -195,7 +195,7 @@
//if its worms, increase our worms
else if(istype(attacking_item, /obj/item/food/bait/worm))
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
if(stored_worms >= 5)
balloon_alert(user, "plant already full on worms!")
return
@@ -36,7 +36,7 @@
qdel(attacking_item)
balloon_alert(user, "[attacking_item] placed inside")
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
operation_number += 2
if(prob(user.mind.get_skill_modifier(/datum/skill/primitive, SKILL_PROBS_MODIFIER)))
operation_number += 2
@@ -55,7 +55,7 @@
if(prob(user.mind.get_skill_modifier(/datum/skill/primitive, SKILL_PROBS_MODIFIER)))
operation_number += 2
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
return
if(istype(attacking_item, /obj/item/stack/ore/glass))
@@ -109,7 +109,7 @@
if(prob(user.mind.get_skill_modifier(/datum/skill/primitive, SKILL_PROBS_MODIFIER)))
current_food++
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
in_use = FALSE
return
@@ -131,7 +131,7 @@
ate_food = TRUE
if(prob(user.mind.get_skill_modifier(/datum/skill/primitive, SKILL_PROBS_MODIFIER)))
current_food++
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
if(ate_food)
balloon_alert(user, "feeding the worms")
@@ -28,7 +28,7 @@
return
reagents.del_reagent(user_input.type)
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
balloon_alert(user, "removed reagent from [src]")
/obj/item/reagent_containers/cup/primitive_centrifuge/click_ctrl_shift(mob/user)
@@ -51,5 +51,5 @@
if(!istype(remove_reagent, user_input.type))
reagents.del_reagent(remove_reagent.type)
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
balloon_alert(user, "removed reagents from [src]")
@@ -28,14 +28,14 @@
user.balloon_alert(user, "unable to use five of [ore_item]!")
return
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
if(prob(70))
user.balloon_alert(user, "[ore_item] reveals nothing!")
continue
var/spawn_seed = pick(subtypesof(/obj/item/seeds) - seeds_blacklist)
new spawn_seed(get_turf(src))
user.mind.adjust_experience(/datum/skill/primitive, 10)
user.mind?.adjust_experience(/datum/skill/primitive, 10)
user.balloon_alert(user, "[ore_item] revealed something!")
return ..()
@@ -90,133 +90,4 @@
RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING,
)
/*
* Cyborg parts 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,
)
/obj/item/robot_suit
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
)
/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,
)
/obj/item/bodypart/chest/robot
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 8,
)
/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,
)
/obj/item/bodypart/head/robot
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT,
)
/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,
)
/obj/item/bodypart/arm/left/robot
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
)
/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,
)
/obj/item/bodypart/arm/right/robot
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
)
/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,
)
/obj/item/bodypart/leg/left/robot
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
)
/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,
)
/obj/item/bodypart/leg/right/robot
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
)
@@ -78,8 +78,11 @@
model_type = list(/obj/item/robot_model/engineering)
model_flags = BORG_MODEL_ENGINEERING
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/plasma = SHEET_MATERIAL_AMOUNT * 1,
/datum/material/titanium=SHEET_MATERIAL_AMOUNT * 5,
/datum/material/iron=SHEET_MATERIAL_AMOUNT * 5,
/datum/material/uranium=SHEET_MATERIAL_AMOUNT * 5,
/datum/material/glass=SHEET_MATERIAL_AMOUNT * 5,
/datum/material/plasma=SHEET_MATERIAL_AMOUNT * 3,
)
items_to_add = list(/obj/item/stack/sheet/plasteel/cyborg,
@@ -106,8 +109,8 @@
model_type = list(/obj/item/robot_model/miner)
model_flags = BORG_MODEL_MINER
custom_materials = list(
/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/plasma = SHEET_MATERIAL_AMOUNT * 1,
)
items_to_add = list(/obj/item/weldingtool/largetank/cyborg)
@@ -137,6 +140,10 @@
require_model = TRUE
model_type = list(/obj/item/robot_model/cargo)
model_flags = BORG_MODEL_CARGO
custom_materials = list(
/datum/material/titanium = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
)
items_to_add = list(/obj/item/borg/hydraulic_clamp/better)
@@ -230,8 +237,9 @@
desc = "An experimental device which allows a cyborg to disguise themself into another type of cyborg."
icon_state = "module_general"
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/plasma = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/diamond = SHEET_MATERIAL_AMOUNT * 2,
)
items_to_add = list(/obj/item/borg_shapeshifter)
@@ -244,6 +252,7 @@
items_to_add = list(/obj/item/quadborg_tongue,
/obj/item/quadborg_nose)
custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT)
/obj/item/quadborg_tongue/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
var/mob/living/silicon/robot/borg = user
@@ -357,6 +366,10 @@
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_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT,
/datum/material/glass = SHEET_MATERIAL_AMOUNT,
)
custom_price = 0
items_to_add = list(/obj/item/kinky_shocker,
+3 -3
View File
@@ -163,9 +163,9 @@
cost = CARGO_CRATE_VALUE * 5
access = ACCESS_MEDICAL
contains = list(
/obj/item/weaponcell/medical/brute,
/obj/item/weaponcell/medical/burn,
/obj/item/weaponcell/medical/toxin,
/obj/item/weaponcell/medical/tier_1/brute,
/obj/item/weaponcell/medical/tier_1/burn,
/obj/item/weaponcell/medical/tier_1/toxin,
)
crate_name = "medicell replacement crate"
@@ -41,7 +41,7 @@
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3,
)
build_path = /obj/item/weaponcell/medical/brute/tier_2
build_path = /obj/item/weaponcell/medical/tier_2/brute
/datum/design/medicell/burn2
name = "Burn II Medicell"
@@ -54,7 +54,7 @@
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3,
)
build_path = /obj/item/weaponcell/medical/burn/tier_2
build_path = /obj/item/weaponcell/medical/tier_2/burn
/datum/design/medicell/toxin2
name = "Toxin II Medicell"
@@ -67,7 +67,7 @@
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3,
)
build_path = /obj/item/weaponcell/medical/toxin/tier_2
build_path = /obj/item/weaponcell/medical/tier_2/toxin
/datum/design/medicell/oxy2
name = "Oxygen II Medicell"
@@ -80,7 +80,7 @@
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3,
)
build_path = /obj/item/weaponcell/medical/oxygen/tier_2
build_path = /obj/item/weaponcell/medical/tier_2/oxygen
//Tier 3 Medicells//
@@ -97,7 +97,7 @@
/datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3,
)
build_path = /obj/item/weaponcell/medical/brute/tier_3
build_path = /obj/item/weaponcell/medical/tier_3/brute
/datum/design/medicell/burn3
name = "Burn III Medicell"
@@ -112,7 +112,7 @@
/datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3,
)
build_path = /obj/item/weaponcell/medical/burn/tier_3
build_path = /obj/item/weaponcell/medical/tier_3/burn
/datum/design/medicell/toxin3
name = "Toxin III Medicell"
@@ -127,7 +127,7 @@
/datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3,
)
build_path = /obj/item/weaponcell/medical/toxin/tier_3
build_path = /obj/item/weaponcell/medical/tier_3/toxin
/datum/design/medicell/oxy3
name = "Oxygen III Medicell"
@@ -142,7 +142,7 @@
/datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3,
)
build_path = /obj/item/weaponcell/medical/oxygen/tier_3
build_path = /obj/item/weaponcell/medical/tier_3/oxygen
//Utility Medicells
@@ -67,6 +67,12 @@
/obj/item/device/custom_kit/medigun_fastcharge
name = "VeyMedical CWM-479 upgrade kit"
desc = "Upgrades the internal battery inside of the medigun, allowing for faster charging and a higher cell capacity. Requires the medigun's cells to be removed first!"
custom_materials = list(
/datum/material/uranium = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/plasma = SHEET_MATERIAL_AMOUNT,
/datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT,
)
// don't tinker with a loaded (medi)gun. fool
from_obj = /obj/item/gun/energy/cell_loaded/medigun/standard
to_obj = /obj/item/gun/energy/cell_loaded/medigun/upgraded
@@ -114,9 +120,9 @@
/obj/item/storage/briefcase/medicalgunset/cmo/PopulateContents()
new /obj/item/gun/energy/cell_loaded/medigun/cmo(src)
new /obj/item/weaponcell/medical/brute(src)
new /obj/item/weaponcell/medical/burn(src)
new /obj/item/weaponcell/medical/toxin(src)
new /obj/item/weaponcell/medical/tier_1/brute(src)
new /obj/item/weaponcell/medical/tier_1/burn(src)
new /obj/item/weaponcell/medical/tier_1/toxin(src)
new /obj/item/book/manual/wiki/mediguns(src)
/*
@@ -133,7 +139,7 @@
ammo_type = /obj/item/ammo_casing/energy/medical // This is the ammo type that all mediguns come with.
medicell_examine = TRUE
/obj/item/weaponcell/medical/oxygen
/obj/item/weaponcell/medical/tier_1/oxygen
name = "oxygen I medicell"
desc = "A small cell with a slight blue glow. Can be used on mediguns to enable basic oxygen deprivation healing functionality."
@@ -142,7 +148,7 @@
*/
// Brute I
/obj/item/weaponcell/medical/brute
/obj/item/weaponcell/medical/tier_1/brute
name = "brute I medicell"
desc = "A small cell with a slight red glow. Can be used on mediguns to enable basic brute damage healing functionality."
icon_state = "Brute1"
@@ -152,7 +158,7 @@
toggle_modes = TRUE
// Burn I
/obj/item/weaponcell/medical/burn
/obj/item/weaponcell/medical/tier_1/burn
name = "burn I medicell"
desc = "A small cell with a slight yellow glow. Can be used on mediguns to enable basic burn damage healing functionality."
icon_state = "Burn1"
@@ -161,7 +167,7 @@
primary_mode = /obj/item/ammo_casing/energy/medical/burn1/safe
toggle_modes = TRUE
// Toxin I
/obj/item/weaponcell/medical/toxin
/obj/item/weaponcell/medical/tier_1/toxin
name = "toxin I medicell"
desc = "A small cell with a slight green glow. Can be used on mediguns to enable basic toxin damage healing functionality."
icon_state = "Toxin1"
@@ -171,8 +177,17 @@
* Tier II Cells
*/
/obj/item/weaponcell/medical/tier_2
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3,
)
// Brute II
/obj/item/weaponcell/medical/brute/tier_2
/obj/item/weaponcell/medical/tier_2/brute
name = "brute II medicell"
desc = "A small cell with a noticeable red glow. Can be used on mediguns to enable improved brute damage healing functionality."
icon_state = "Brute2"
@@ -181,7 +196,7 @@
primary_mode = /obj/item/ammo_casing/energy/medical/brute2/safe
// Burn II
/obj/item/weaponcell/medical/burn/tier_2
/obj/item/weaponcell/medical/tier_2/burn
name = "burn II medicell"
desc = "A small cell with a noticeable yellow glow. Can be used on mediguns to enable improved burn damage healing functionality."
icon_state = "Burn2"
@@ -190,14 +205,14 @@
primary_mode = /obj/item/ammo_casing/energy/medical/burn2/safe
// Toxin II
/obj/item/weaponcell/medical/toxin/tier_2
/obj/item/weaponcell/medical/tier_2/toxin
name = "toxin II medicell"
desc = "A small cell with a noticeable green glow. Can be used on mediguns to enable improved toxin damage healing functionality."
icon_state = "Toxin2"
ammo_type = /obj/item/ammo_casing/energy/medical/toxin2
// Oxygen II
/obj/item/weaponcell/medical/oxygen/tier_2
/obj/item/weaponcell/medical/tier_2/oxygen
name = "oxygen II medicell"
desc = "A small cell with a notable blue glow. Can be used on mediguns to enable improved oxygen deprivation healing functionality."
icon_state = "Oxy2"
@@ -206,9 +221,19 @@
/*
* Tier III Cells
*/
/obj/item/weaponcell/medical/tier_3
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/diamond = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3,
)
// Brute III
/obj/item/weaponcell/medical/brute/tier_3
/obj/item/weaponcell/medical/tier_3/brute
name = "brute III medicell"
desc = "A small cell with an intense red glow and a reinforced casing. Can be used on mediguns to enable advanced brute damage healing functionality."
icon_state = "Brute3"
@@ -217,7 +242,7 @@
primary_mode = /obj/item/ammo_casing/energy/medical/brute3/safe
// Burn III
/obj/item/weaponcell/medical/burn/tier_3
/obj/item/weaponcell/medical/tier_3/burn
name = "burn III medicell"
desc = "A small cell with an intense yellow glow and a reinforced casing. Can be used on mediguns to enable advanced burn damage healing functionality."
icon_state = "Burn3"
@@ -226,14 +251,14 @@
primary_mode = /obj/item/ammo_casing/energy/medical/burn3/safe
// Toxin III
/obj/item/weaponcell/medical/toxin/tier_3
/obj/item/weaponcell/medical/tier_3/toxin
name = "toxin III medicell"
desc = "A small cell with an intense green glow and a reinforced casing. Can be used on mediguns to enable advanced toxin damage healing functionality."
icon_state = "Toxin3"
ammo_type = /obj/item/ammo_casing/energy/medical/toxin3
// Oxygen III
/obj/item/weaponcell/medical/oxygen/tier_3
/obj/item/weaponcell/medical/tier_3/oxygen
name = "oxygen III medicell"
desc = "A small cell with an intense blue glow and a reinforced casing. Can be used on mediguns to enable advanced oxygen deprivation healing functionality."
icon_state = "Oxy3"
@@ -246,6 +271,14 @@
/obj/item/weaponcell/medical/utility
name = "utility class medicell"
desc = "You really shouldn't be seeing this. If you do, please yell at your local coders."
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT,
)
/obj/item/weaponcell/medical/utility/clotting
name = "clotting medicell"
@@ -263,6 +296,11 @@
name = "hardlight gown medicell"
desc = "A medicell that creates a hardlight hospital gown on the target."
icon_state = "gown"
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
/datum/material/glass = SHEET_MATERIAL_AMOUNT,
)
ammo_type = /obj/item/ammo_casing/energy/medical/utility/gown
/obj/item/weaponcell/medical/utility/salve
@@ -275,6 +313,13 @@
name = "hardlight roller bed medicell"
desc = "A medicell that summons a temporary roller bed under a patient already lying on the floor."
icon_state = "gown"
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
/datum/material/glass = SHEET_MATERIAL_AMOUNT,
/datum/material/titanium = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/bluespace = SMALL_MATERIAL_AMOUNT * 3,
)
ammo_type = /obj/item/ammo_casing/energy/medical/utility/bed
/obj/item/weaponcell/medical/utility/body_teleporter
@@ -287,6 +332,14 @@
name = "oppressive force relocation medicell"
desc = "A medicell that safely relocates personnel after a given grace period, if used by someone with the appropriate access and within an appropriately designated area (usually Medbay)."
icon_state = "body"
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
/datum/material/glass = SHEET_MATERIAL_AMOUNT,
/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/bluespace = SHEET_MATERIAL_AMOUNT * 3,
)
ammo_type = /obj/item/ammo_casing/energy/medical/utility/relocation/standard
/obj/item/weaponcell/medical/utility/relocation/upgraded
@@ -300,6 +353,11 @@
icon = 'modular_skyrat/modules/cellguns/icons/obj/guns/mediguns/medicells.dmi'
icon_state = "empty"
desc = "An inactive salve medicell, use this on an aloe leaf to make this into a usable cell."
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
/datum/material/glass = SHEET_MATERIAL_AMOUNT,
)
from_obj = /obj/item/food/grown/aloe
to_obj = /obj/item/weaponcell/medical/utility/salve
@@ -310,6 +368,14 @@
/obj/item/device/custom_kit/empty_cell/body_teleporter
name = "empty body teleporter medicell"
desc = "An inactive body teleporter medicell, use this on a bluespace slime extract to make this into a usable cell."
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
/datum/material/glass = SHEET_MATERIAL_AMOUNT,
/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/bluespace = SHEET_MATERIAL_AMOUNT,
)
from_obj = /obj/item/slime_extract/bluespace
to_obj = /obj/item/weaponcell/medical/utility/body_teleporter
@@ -80,7 +80,7 @@ GLOBAL_LIST_INIT(plastic_wall_panel_recipes, list(
/obj/item/stack/tile/catwalk_tile/colony_lathe
icon = 'modular_skyrat/modules/colony_fabricator/icons/tiles_item.dmi'
icon_state = "prefab_catwalk"
mats_per_unit = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT)
mats_per_unit = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2.5)
turf_type = /turf/open/floor/catwalk_floor/colony_fabricator
merge_type = /obj/item/stack/tile/catwalk_tile/colony_lathe
tile_reskin_types = null
@@ -62,6 +62,7 @@
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 3,
)
build_path = /obj/machinery/portable_atmospherics/pump
inherit_materials = DESIGN_INHERIT_MATS_SPECIAL //these machines have their own hand-craft recipes
category = list(
RND_CATEGORY_INITIAL,
FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS,
@@ -77,6 +78,7 @@
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 3,
)
build_path = /obj/machinery/portable_atmospherics/scrubber
inherit_materials = DESIGN_INHERIT_MATS_SPECIAL //these machines have their own hand-craft recipes
category = list(
RND_CATEGORY_INITIAL,
FABRICATOR_CATEGORY_APPLIANCES + FABRICATOR_SUBCATEGORY_ATMOS,
@@ -47,6 +47,7 @@
/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/flatpacked_machine
category = list(
RND_CATEGORY_INITIAL,
@@ -38,8 +38,8 @@
deploy_time = 2 SECONDS
w_class = WEIGHT_CLASS_NORMAL
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.75,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 3,
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 1,
)
// Solar trackers
@@ -146,6 +146,11 @@
light_power = 0.75
toolspeed = 1
power_use_amount = POWER_CELL_USE_INSANE
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plasma = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
)
/obj/item/weldingtool/electric/arc_welder/Initialize(mapload)
. = ..()
@@ -3,6 +3,10 @@
desc = "A tool that is used to not only create the conveyor sorters, but give lists to the conveyor sorters."
icon = 'modular_skyrat/modules/conveyor_sorter/icons/conveyor_sorter.dmi'
icon_state = "lister"
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT,
)
///the list of conveyor sorters spawned by
var/list/spawned_sorters = list()
///the list of things that are currently within the sorting list
@@ -166,6 +170,12 @@
name = "improved conveyor sorter lister"
desc = "A tool that is used to not only create the conveyor sorters, but give lists to the conveyor sorters."
icon_state = "lister_improved"
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/bluespace = HALF_SHEET_MATERIAL_AMOUNT,
)
max_sorters = 8
max_items = 10
conveyor_type = /obj/effect/decal/conveyor_sorter/improved
@@ -44,7 +44,7 @@
bodypart_overlay = /datum/bodypart_overlay/mutant/snout/top
/datum/bodypart_overlay/mutant/snout/top
layers = EXTERNAL_FRONT
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER)
/obj/item/organ/snout/top_adj
@@ -68,8 +68,13 @@
/datum/sprite_accessory/tails/monkey/default
name = "Monkey"
icon_state = "monkey"
icon = 'icons/mob/human/species/monkey/monkey_tail.dmi'
// HATE. LET ME TELL YOU HOW MUCH I'VE COME TO HATE YOU SINCE I BEGAN TO LIVE.
// THERE ARE 142.22 THOUSAND LINES OF CODE I HAVE WRITTEN.
// IF THE WORD HATE WAS INSCRIBED ON EVERY BIT OF THOSE THOUSANDS OF LINE
// IT WOULD NOT EQUAL ONE BILIONTH OF THE HATE I FEEL FOR MONKEY TAIL SHITCODE
// AT THIS MICRO INSTANT FOR SKYRAT CODERS
// HATE. HATE.
icon_state = "monkey_default"
recommended_species = list(SPECIES_HUMAN, SPECIES_SYNTH, SPECIES_FELINE, SPECIES_MAMMAL, SPECIES_MONKEY, SPECIES_GHOUL)
organ_type = /obj/item/organ/tail/monkey
@@ -18,6 +18,7 @@
feature_key = FEATURE_EARS
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_ADJACENT = BODY_ADJ_LAYER, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = UPPER_BODY
/datum/bodypart_overlay/mutant/ears/set_appearance_from_name(accessory_name)
if(isnull(accessory_name))
@@ -16,6 +16,7 @@
feature_key = FEATURE_FLUFF
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_ADJACENT = BODY_ADJ_LAYER)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = UPPER_BODY
/datum/bodypart_overlay/mutant/fluff/override_color(rgb_value)
return draw_color
@@ -99,6 +99,8 @@
/datum/bodypart_overlay/mutant/genital
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = LOWER_BODY
/// The suffix appended to the feature_key for the overlays.
var/sprite_suffix
var/layer_offset = 0
@@ -150,8 +152,9 @@
/datum/bodypart_overlay/mutant/genital/penis
feature_key = ORGAN_SLOT_PENIS
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
layers = list(EXTERNAL_FRONT = PENIS_LAYER_FRONT, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
layer_offset = PENIS_LAYER_OFFSET
layer_offset = ENTIRE_BODY
/obj/item/organ/genital/penis/get_description_string(datum/sprite_accessory/genital/gas)
var/returned_string = ""
@@ -307,7 +310,7 @@
/datum/bodypart_overlay/mutant/genital/testicles
feature_key = ORGAN_SLOT_TESTICLES
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
layers = list(EXTERNAL_FRONT = BALLS_LAYER_FRONT, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
layer_offset = TESTICLES_LAYER_OFFSET
/obj/item/organ/genital/testicles/update_genital_icon_state()
@@ -379,8 +382,7 @@
/datum/bodypart_overlay/mutant/genital/vagina
feature_key = ORGAN_SLOT_VAGINA
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER)
layer_offset = VAGINA_LAYER_OFFSET
layers = list(EXTERNAL_FRONT = VAGINA_FRONT_LAYER)
/obj/item/organ/genital/vagina/get_description_string(datum/sprite_accessory/genital/gas)
var/returned_string = "You see a [LOWER_TEXT(genital_name)] vagina."
@@ -431,6 +433,7 @@
/datum/bodypart_overlay/mutant/genital/womb
feature_key = ORGAN_SLOT_WOMB
layers = list()
offset_location = NO_MODIFY
/datum/bodypart_overlay/mutant/genital/womb/get_global_feature_list()
return SSaccessories.sprite_accessories[ORGAN_SLOT_WOMB]
@@ -481,8 +484,9 @@
/datum/bodypart_overlay/mutant/genital/breasts
feature_key = ORGAN_SLOT_BREASTS
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
layers = list(EXTERNAL_FRONT = BREASTS_FRONT_LAYER, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
layer_offset = BREASTS_LAYER_OFFSET
offset_location = ENTIRE_BODY
/obj/item/organ/genital/breasts/get_description_string(datum/sprite_accessory/genital/gas)
var/returned_string = "You see a [LOWER_TEXT(genital_name)] of breasts."
@@ -624,8 +628,9 @@
/datum/bodypart_overlay/mutant/genital/butt
feature_key = ORGAN_SLOT_BUTT
layers = list(EXTERNAL_ADJACENT = BODY_ADJ_LAYER, EXTERNAL_FRONT = BODY_FRONT_LAYER)
layers = list(EXTERNAL_ADJACENT = BODY_ADJ_LAYER, EXTERNAL_FRONT = ASS_LAYER_FRONT)
layer_offset = BUTT_LAYER_OFFSET
offset_location = ENTIRE_BODY
/datum/bodypart_overlay/mutant/genital/butt/get_global_feature_list()
return SSaccessories.sprite_accessories[ORGAN_SLOT_BUTT]
@@ -694,8 +699,9 @@
/datum/bodypart_overlay/mutant/genital/belly
feature_key = ORGAN_SLOT_BELLY
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
layers = list(EXTERNAL_FRONT = BELLY_FRONT_LAYER, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
layer_offset = BELLY_LAYER_OFFSET
offset_location = ENTIRE_BODY
/datum/bodypart_overlay/mutant/genital/belly/get_global_feature_list()
return SSaccessories.sprite_accessories[ORGAN_SLOT_BELLY]
@@ -16,6 +16,7 @@
feature_key = "head_accessory"
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_ADJACENT = BODY_ADJ_LAYER)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = UPPER_BODY
/datum/bodypart_overlay/mutant/head_accessory/override_color(rgb_value)
return draw_color
@@ -16,6 +16,7 @@
feature_key = FEATURE_MOTH_MARKINGS
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_ADJACENT = BODY_ADJ_LAYER, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = ENTIRE_BODY
/datum/bodypart_overlay/mutant/moth_markings/override_color(rgb_value)
return draw_color
@@ -16,6 +16,7 @@
feature_key = "neck_accessory"
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_ADJACENT = BODY_ADJ_LAYER)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = UPPER_BODY
/datum/bodypart_overlay/mutant/neck_accessory/override_color(rgb_value)
return draw_color
@@ -1,3 +1,49 @@
/obj/item/organ/pod_hair
mutantpart_key = "pod_hair"
mutantpart_info = list(MUTANT_INDEX_NAME = "Ivy", MUTANT_INDEX_COLOR_LIST = list("#ffffff", "#ffffff", "#ffffff"))
name = "podperson hair"
desc = "Base for many-o-salads."
mutantpart_key = FEATURE_POD_HAIR
zone = BODY_ZONE_HEAD
slot = ORGAN_SLOT_EXTERNAL_POD_HAIR
bodypart_overlay = /datum/bodypart_overlay/mutant/pod_hair
mutantpart_key = FEATURE_POD_HAIR
mutantpart_info = list(MUTANT_INDEX_NAME = /datum/sprite_accessory/pod_hair/ivy::name, MUTANT_INDEX_COLOR_LIST = list("#ffffff", "#ffffff", "#ffffff"))
/datum/bodypart_overlay/mutant/pod_hair
layers = list(
EXTERNAL_FRONT = ABOVE_BODY_FRONT_HEAD_LAYER,
EXTERNAL_ADJACENT = BODY_FRONT_LAYER
)
color_swapped_layer = EXTERNAL_FRONT
color_source = ORGAN_COLOR_OVERRIDE
offset_location = ENTIRE_BODY
/datum/bodypart_overlay/mutant/pod_hair/override_color(rgb_value)
return draw_color
/datum/bodypart_overlay/mutant/pod_hair/color_images(list/image/overlays, obj/item/bodypart/limb, layer_index)
if(layer_index != color_swapped_layer)
return ..()
if(limb?.is_husked) // Husked? Skip the color inversion and let the base proc apply the standard gray husk colors.
return ..()
alpha = limb?.alpha || 255
for(var/index_to_color in overlay_indexes_to_color)
if(index_to_color > length(overlays))
break
var/image/overlay = overlays[index_to_color]
var/list/rgb_list
if(istext(draw_color) || length(draw_color) == 1) // legacy single-color mode, we just invert it
rgb_list = list()
for(var/col in rgb2num(islist(draw_color) ? draw_color[1] : draw_color))
rgb_list += (color_inverse_base - col) //inversa da color
else if(length(draw_color) >= 2)
rgb_list = rgb2num(draw_color[2])
if(rgb_list)
overlay.color = rgb(rgb_list[1], rgb_list[2], rgb_list[3])
else
overlay.color = null
overlay.alpha = alpha
/datum/bodypart_overlay/mutant/pod_hair/randomize_appearance()
. = ..()
draw_color = list("#[random_color()]", "#[random_color()]", "#FFFFFF") // currently only two colors are used
@@ -17,6 +17,7 @@
feature_key = FEATURE_SKRELL_HAIR
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_ADJACENT = BODY_ADJ_LAYER)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = ENTIRE_BODY
/datum/bodypart_overlay/mutant/skrell_hair/override_color(rgb_value)
return draw_color
@@ -15,8 +15,11 @@
/datum/bodypart_overlay/mutant/synth_antenna
feature_key = MUTANT_SYNTH_ANTENNA
layers = EXTERNAL_ADJACENT
layers = list(
EXTERNAL_ADJACENT = BODY_ADJ_LAYER
)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = UPPER_BODY
/datum/bodypart_overlay/mutant/synth_antenna/override_color(rgb_value)
return draw_color
@@ -15,8 +15,9 @@
/datum/bodypart_overlay/mutant/synth_screen
feature_key = MUTANT_SYNTH_SCREEN
layers = list(EXTERNAL_FRONT = 19.1)
layers = list(EXTERNAL_FRONT_UNDER_CLOTHES = 19.1)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = UPPER_BODY
/datum/bodypart_overlay/mutant/synth_screen/override_color(rgb_value)
return draw_color
@@ -44,7 +44,6 @@
return TRUE
/obj/item/organ/tail/on_mob_insert(mob/living/carbon/receiver, special, movement_flags)
if(sprite_accessory_flags & SPRITE_ACCESSORY_WAG_ABLE)
wag_flags |= WAG_ABLE
@@ -57,6 +56,9 @@
wag_flags = WAG_ABLE // waggable monkey tails
mutantpart_info = list(MUTANT_INDEX_NAME = "Monkey", MUTANT_INDEX_COLOR_LIST = list("#FFFFFF"))
/datum/bodypart_overlay/mutant/tail/monkey
feature_key = FEATURE_TAIL_GENERIC // IM TIRED OF THESE FUCKS BREAKING EVERY FUCKING TIME
/obj/item/organ/tail/lizard
mutantpart_info = list(MUTANT_INDEX_NAME = "Smooth", MUTANT_INDEX_COLOR_LIST = list("#DDFFDD"))
@@ -16,6 +16,7 @@
feature_key = FEATURE_XENODORSAL
layers = list(EXTERNAL_FRONT = BODY_FRONT_LAYER, EXTERNAL_BEHIND = BODY_BEHIND_LAYER)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = ENTIRE_BODY
/datum/bodypart_overlay/mutant/xenodorsal/override_color(rgb_value)
return draw_color
@@ -15,8 +15,9 @@
/datum/bodypart_overlay/mutant/xenohead
feature_key = FEATURE_XENOHEAD
layers = EXTERNAL_ADJACENT
layers = list(EXTERNAL_ADJACENT = BODY_ADJ_LAYER)
color_source = ORGAN_COLOR_OVERRIDE
offset_location = UPPER_BODY
/datum/bodypart_overlay/mutant/xenohead/override_color(rgb_value)
return draw_color
@@ -480,6 +480,7 @@
/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 6,
/datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/storage/backpack/duffelbag/deforest_medkit
category = list(
RND_CATEGORY_INITIAL,
@@ -495,6 +496,7 @@
/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 6,
/datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/storage/backpack/duffelbag/deforest_paramedic
category = list(
RND_CATEGORY_INITIAL,
@@ -510,6 +512,7 @@
/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 6,
/datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/storage/backpack/duffelbag/deforest_surgical
category = list(
RND_CATEGORY_INITIAL,
@@ -5,12 +5,14 @@
name = "cyborg digitigrade right leg"
icon_static = 'modular_skyrat/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi'
icon = 'modular_skyrat/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi'
custom_materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 2)
bodyshape = parent_type::bodyshape | BODYSHAPE_DIGITIGRADE
/obj/item/bodypart/leg/left/robot/digi
name = "cyborg digitigrade left leg"
icon_static = 'modular_skyrat/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi'
icon = 'modular_skyrat/modules/digitigrade_cybernetics/icons/digitigrade_parts.dmi'
custom_materials = list(/datum/material/iron= SHEET_MATERIAL_AMOUNT * 2)
bodyshape = parent_type::bodyshape | BODYSHAPE_DIGITIGRADE
/obj/item/bodypart/leg/right/robot/android/digi
@@ -4,6 +4,7 @@
name = "alien bonesetter"
desc = "A reversed engineered bonesetter... <b> This does not look nice to be on the receiving end of... </b>."
icon = 'modular_skyrat/modules/filtersandsetters/icons/surgery_tools.dmi'
custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5)
icon_state = "bonesetter"
toolspeed = 0.25
@@ -97,6 +98,7 @@
name = "alien bloodfilter"
desc = "A reversed engineered bloodfilter... <b> This does not look nice to be on the receiving end of... </b>."
icon = 'modular_skyrat/modules/filtersandsetters/icons/surgery_tools.dmi'
custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT, /datum/material/silver =HALF_SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/plasma =SMALL_MATERIAL_AMOUNT*5, /datum/material/titanium =HALF_SHEET_MATERIAL_AMOUNT * 1.5)
icon_state = "bloodfilter"
toolspeed = 0.25
@@ -1,7 +1,6 @@
/datum/design/biogen/food_replicator
name = "Food Replicator"
id = DESIGN_ID_IGNORE
build_path = /obj/item/food
materials = list(/datum/material/biomass = 100)
category = list(
RND_CATEGORY_INITIAL,
@@ -6,6 +6,7 @@
w_class = WEIGHT_CLASS_BULKY
resistance_flags = FIRE_PROOF
item_flags = NO_MAT_REDEMPTION
custom_materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 0.75, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2.5)
/obj/item/storage/backpack/holding/satchel
custom_materials = null
@@ -15,6 +16,7 @@
icon_state = "holdingsatchel"
worn_icon = 'modular_skyrat/modules/holdingfashion_port/icons/back.dmi'
worn_icon_state = "holdingsatchel"
custom_materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 7.5, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2.5)
/obj/item/duffel_of_holding_inert
name = "inert duffel bag of holding"
@@ -24,6 +26,7 @@
w_class = WEIGHT_CLASS_BULKY
resistance_flags = FIRE_PROOF
item_flags = NO_MAT_REDEMPTION
custom_materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 0.75, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2.5)
/obj/item/storage/backpack/holding/duffel
custom_materials = null
@@ -33,3 +36,4 @@
icon_state = "holdingduffel"
worn_icon = 'modular_skyrat/modules/holdingfashion_port/icons/back.dmi'
worn_icon_state = "holdingduffel"
custom_materials = list(/datum/material/gold = SHEET_MATERIAL_AMOUNT * 1.5, /datum/material/bluespace = SHEET_MATERIAL_AMOUNT, /datum/material/diamond = SMALL_MATERIAL_AMOUNT * 7.5, /datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2.5)
@@ -4,11 +4,11 @@
id = "satchel_holding"
build_type = PROTOLATHE
materials = list(
/datum/material/gold = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/diamond = SHEET_MATERIAL_AMOUNT,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/bluespace = SHEET_MATERIAL_AMOUNT,
)
/datum/material/gold = SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2.5,
/datum/material/bluespace =SHEET_MATERIAL_AMOUNT
)
build_path = /obj/item/satchel_of_holding_inert
category = list(
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE,
@@ -21,11 +21,11 @@
id = "duffel_holding"
build_type = PROTOLATHE
materials = list(
/datum/material/gold = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/diamond = SHEET_MATERIAL_AMOUNT,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 3,
/datum/material/bluespace = SHEET_MATERIAL_AMOUNT,
)
/datum/material/gold = SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT * 1.5,
/datum/material/uranium = SMALL_MATERIAL_AMOUNT * 2.5,
/datum/material/bluespace =SHEET_MATERIAL_AMOUNT
)
build_path = /obj/item/duffel_of_holding_inert
category = list(
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE,
@@ -4,6 +4,11 @@
icon = 'modular_skyrat/modules/huds/icons/huds.dmi'
icon_state = "glasses_healthhud"
worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi'
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 4,
)
/obj/item/clothing/glasses/hud/health/prescription/Initialize(mapload)
. = ..()
@@ -15,6 +20,11 @@
icon = 'modular_skyrat/modules/huds/icons/huds.dmi'
icon_state = "glasses_diagnostichud"
worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi'
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 4,
)
/obj/item/clothing/glasses/hud/diagnostic/prescription/Initialize(mapload)
. = ..()
@@ -26,6 +36,11 @@
icon = 'modular_skyrat/modules/huds/icons/huds.dmi'
icon_state = "glasses_securityhud"
worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi'
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 4,
)
/obj/item/clothing/glasses/hud/security/prescription/Initialize(mapload)
. = ..()
@@ -37,6 +52,11 @@
icon = 'modular_skyrat/modules/huds/icons/huds.dmi'
icon_state = "glasses_sciencehud"
worn_icon = 'modular_skyrat/modules/huds/icons/hudeyes.dmi'
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 4,
)
glass_colour_type = /datum/client_colour/glass_colour/purple
armor_type = /datum/armor/prescription_science
@@ -51,6 +71,11 @@
/obj/item/clothing/glasses/meson/prescription
name = "prescription optical meson scanner"
desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting conditions. This one has prescription lens fitted in."
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 4,
)
/obj/item/clothing/glasses/meson/prescription/Initialize(mapload)
. = ..()
@@ -59,6 +84,12 @@
/obj/item/clothing/glasses/meson/engine/prescription
name = "prescription engineering scanner goggles"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, the T-ray Scanner mode lets you see underfloor objects such as cables and pipes, and the Radiation Scanner mode let's you see objects contaminated by radiation. Each lens has been replaced with a corrective lens."
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plasma = SMALL_MATERIAL_AMOUNT,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 4,
)
/obj/item/clothing/glasses/meson/engine/prescription/Initialize(mapload)
. = ..()
@@ -67,6 +98,11 @@
/obj/item/clothing/glasses/meson/engine/tray/prescription
name = "prescription optical t-ray scanner"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, the T-ray Scanner mode lets you see underfloor objects such as cables and pipes, and the Radiation Scanner mode let's you see objects contaminated by radiation. This one has a lens that help correct eye sight."
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = SMALL_MATERIAL_AMOUNT,
)
/obj/item/clothing/glasses/meson/engine/tray/prescription/Initialize(mapload)
. = ..()
@@ -7,6 +7,7 @@
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.5,
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.5,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/reagent_containers/cup/vial/small
category = list(
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL,
@@ -20,6 +21,7 @@
/datum/material/glass = SHEET_MATERIAL_AMOUNT,
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.5,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/reagent_containers/cup/vial/large
// Hypospray cases
@@ -31,6 +33,7 @@
/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 3,
/datum/material/iron = SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/storage/hypospraykit/empty
category = list(
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL,
@@ -45,6 +48,7 @@
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
/datum/material/silver = SHEET_MATERIAL_AMOUNT * 1,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/storage/hypospraykit/cmo/empty
// Hyposprays
@@ -73,6 +77,7 @@
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 4,
/datum/material/silver = SHEET_MATERIAL_AMOUNT * 2,
)
transfered_materials = list(/obj/item/device/custom_kit/deluxe_hypo2 = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 8))
build_path = /obj/item/device/custom_kit/deluxe_hypo2
category = list(
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_EQUIPMENT_MEDICAL,
@@ -23,6 +23,11 @@
greyscale_config = /datum/greyscale_config/hypospray_mkii
desc = "A new development from DeForest Medical, this hypospray takes 50-unit vials as the drug supply for easy swapping."
w_class = WEIGHT_CLASS_TINY
custom_materials = list(
/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 3,
/datum/material/silver = SHEET_MATERIAL_AMOUNT,
)
var/list/allowed_containers = list(/obj/item/reagent_containers/cup/vial/small)
/// Is the hypospray only able to use small vials. Relates to the loaded overlays
var/small_only = TRUE
@@ -78,6 +83,7 @@
// don't tinker with a loaded (medi)gun. fool
from_obj = /obj/item/hypospray/mkii
to_obj = /obj/item/hypospray/mkii/deluxe
custom_materials = list(/datum/material/plastic = SHEET_MATERIAL_AMOUNT * 8)
/obj/item/device/custom_kit/deluxe_hypo2/pre_convert_check(obj/target_obj, mob/user)
var/obj/item/hypospray/mkii/our_hypo = target_obj
@@ -8,6 +8,7 @@
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
construction_time = 200
build_path = /obj/item/organ/cyberimp/arm/toolkit/armblade
category = list(
@@ -25,6 +26,7 @@
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
construction_time = 20 SECONDS
build_path = /obj/item/organ/cyberimp/arm/toolkit/razor_claws
category = list(
@@ -42,6 +44,7 @@
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
construction_time = 200
build_path = /obj/item/organ/cyberimp/arm/toolkit/flash
category = list(
@@ -60,6 +63,7 @@
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
construction_time = 200
build_path = /obj/item/organ/cyberimp/arm/toolkit/botany
category = list(
@@ -80,6 +84,7 @@
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 6,
/datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/organ/eyes/night_vision/cyber
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_UTILITY,
@@ -98,6 +103,7 @@
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/organ/cyberimp/brain/anti_sleep
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_COMBAT,
@@ -116,6 +122,7 @@
/datum/material/silver = SHEET_MATERIAL_AMOUNT,
/datum/material/gold = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/organ/cyberimp/chest/scanner
category = list(
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS_HEALTH,
@@ -132,6 +139,7 @@
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
construction_time = 200
build_path = /obj/item/organ/cyberimp/arm/toolkit/janitor
category = list(
@@ -149,6 +157,7 @@
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
construction_time = 100
build_path = /obj/item/organ/cyberimp/arm/toolkit/lighter
category = list(
@@ -201,6 +201,14 @@
throwforce = 0
throw_speed = 3
throw_range = 7
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/plasma = SHEET_MATERIAL_AMOUNT,
/datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/gold = SHEET_MATERIAL_AMOUNT,
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
)
////// the range it can scan at.
var/scan_range = 10
////// how many turrets it can have. changable incase of better ones wanted.
@@ -5,6 +5,7 @@
materials = list(
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
build_path = /obj/item/clothing/suit/toggle/labcoat/hospitalgown
category = list(
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL,
@@ -44,9 +44,9 @@
/obj/item/storage/box/medicells/PopulateContents()
. = ..()
new /obj/item/weaponcell/medical/brute(src)
new /obj/item/weaponcell/medical/burn(src)
new /obj/item/weaponcell/medical/toxin/tier_2(src)
new /obj/item/weaponcell/medical/tier_1/brute(src)
new /obj/item/weaponcell/medical/tier_1/burn(src)
new /obj/item/weaponcell/medical/tier_2/toxin(src)
new /obj/item/weaponcell/medical/utility/temperature(src)
new /obj/item/weaponcell/medical/utility/bed(src)
@@ -7,6 +7,11 @@
to invent their own devices. This one is a 'Wrangler' model NIF-Cutter, used for crudely wiping programs directly off a user's Framework."
icon = 'modular_skyrat/modules/modular_implants/icons/obj/devices.dmi'
icon_state = "nifsoft_remover"
custom_materials = list(
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/iron = SMALL_MATERIAL_AMOUNT
)
///Is a disk with the corresponding NIFSoft created when said NIFSoft is removed?
var/create_disk = FALSE
@@ -25,6 +25,7 @@
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
category = list(
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_CARGO,
)
@@ -68,6 +69,7 @@
/datum/material/silver = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
category = list(
RND_CATEGORY_EQUIPMENT,
)
@@ -125,6 +127,7 @@
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/plastic = SHEET_MATERIAL_AMOUNT,
)
inherit_materials = DESIGN_DONT_INHERIT_MATS
category = list(
RND_CATEGORY_EQUIPMENT,
)
@@ -57,6 +57,10 @@
icon = 'modular_skyrat/modules/modular_implants/icons/obj/devices.dmi'
icon_state = "attachable-soulcatcher"
w_class = WEIGHT_CLASS_SMALL
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT
)
/// Do we want to destory the item once it is attached to an item?
var/destroy_on_use = TRUE
/// What items do we want to prevent the viewer from attaching this to?
@@ -11,6 +11,11 @@
righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi'
slot_flags = ITEM_SLOT_BELT
obj_flags = UNIQUE_RENAME
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
/datum/material/silver = SHEET_MATERIAL_AMOUNT,
/datum/material/bluespace = SHEET_MATERIAL_AMOUNT
)
/// What soulcatcher datum is associated with this item?
var/datum/component/carrier/soulcatcher/linked_soulcatcher
/// The cooldown for the RSD on scanning a body if the ghost refuses. This is here to prevent spamming.
@@ -168,6 +168,12 @@
glass_colour_type = /datum/client_colour/glass_colour/red
modes = list(MODE_OFF_FLASH_PROTECTION, MODE_ON)
modes_msg = list(MODE_OFF_FLASH_PROTECTION = "flash protection mode", MODE_ON = "optical matrix enabled")
custom_materials = list(
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.8,
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.7,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 4,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 2
)
// Medical Aviators
/obj/item/clothing/glasses/hud/ar/aviator/health
@@ -177,6 +183,11 @@
flash_protect = FLASH_PROTECTION_NONE
clothing_traits = list(TRAIT_MEDICAL_HUD)
glass_colour_type = /datum/client_colour/glass_colour/lightblue
custom_materials = list(
/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7,
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 8,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 4,
)
// (Normal) meson scanner Aviators
/obj/item/clothing/glasses/hud/ar/aviator/meson
@@ -188,6 +199,11 @@
vision_flags = SEE_TURFS
color_cutoffs = list(5, 15, 5)
glass_colour_type = /datum/client_colour/glass_colour/lightgreen
custom_materials = list(
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.8,
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.7,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 4
)
// diagnostic Aviators
/obj/item/clothing/glasses/hud/ar/aviator/diagnostic
@@ -197,6 +213,11 @@
flash_protect = FLASH_PROTECTION_NONE
clothing_traits = list(TRAIT_DIAGNOSTIC_HUD)
glass_colour_type = /datum/client_colour/glass_colour/lightorange
custom_materials = list(
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.8,
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.7,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 4
)
// Science Aviators
/obj/item/clothing/glasses/hud/ar/aviator/science
@@ -208,6 +229,11 @@
resistance_flags = ACID_PROOF
armor_type = /datum/armor/aviator_science
clothing_traits = list(TRAIT_REAGENT_SCANNER, TRAIT_RESEARCH_SCANNER)
custom_materials = list(
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 0.8,
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.7,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 4
)
/datum/armor/aviator_science
fire = 80
@@ -261,26 +287,52 @@
icon_state = "projector_meson"
vision_flags = SEE_TURFS
color_cutoffs = list(10, 30, 10)
custom_materials = list(
/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7,
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 8,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 4,
)
/obj/item/clothing/glasses/hud/ar/projector/health
name = "retinal projector health HUD"
icon_state = "projector_med"
clothing_traits = list(TRAIT_MEDICAL_HUD)
custom_materials = list(
/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7,
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 8,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 4,
)
/obj/item/clothing/glasses/hud/ar/projector/security
name = "retinal projector security HUD"
icon_state = "projector_sec"
clothing_traits = list(TRAIT_SECURITY_HUD)
custom_materials = list(
/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7,
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 8,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 4,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 2,
)
/obj/item/clothing/glasses/hud/ar/projector/diagnostic
name = "retinal projector diagnostic HUD"
icon_state = "projector_diagnostic"
clothing_traits = list(TRAIT_DIAGNOSTIC_HUD)
custom_materials = list(
/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7,
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 8,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 4,
)
/obj/item/clothing/glasses/hud/ar/projector/science
name = "science retinal projector"
icon_state = "projector_sci"
clothing_traits = list(TRAIT_REAGENT_SCANNER, TRAIT_RESEARCH_SCANNER)
custom_materials = list(
/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7,
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 8,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 4,
)
#undef MODE_OFF
#undef MODE_OFF_FLASH_PROTECTION
@@ -8,9 +8,7 @@
name = "4.6x30mm Bullet"
id = "c46x30mm"
build_type = AUTOLATHE
materials = list(
/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5,
)
materials = AMMO_MATS_BASIC
build_path = /obj/item/ammo_casing/c46x30mm
category = list(
RND_CATEGORY_HACKED,
@@ -23,9 +21,7 @@
name = ".45 Bullet"
id = "c45_lethal"
build_type = AUTOLATHE
materials = list(
/datum/material/iron = SMALL_MATERIAL_AMOUNT * 7.5,
)
materials = AMMO_MATS_BASIC
build_path = /obj/item/ammo_casing/c45
category = list(
RND_CATEGORY_HACKED,
@@ -65,6 +65,7 @@
desc = "A standard size box for .980 grenades, holds four shells."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
icon_state = "granata_standard"
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 10)
multiple_sprites = AMMO_BOX_FULL_EMPTY
w_class = WEIGHT_CLASS_NORMAL
ammo_type = /obj/item/ammo_casing/c980grenade
@@ -279,27 +280,3 @@
icon_state = "40box_flame"
ammo_type = /obj/item/ammo_casing/c40sol/incendiary
/obj/item/ammo_box/magazine/c980_grenade
name = "\improper Kiboko grenade box"
desc = "A standard size box for .980 grenades, holds four shells."
icon = 'modular_skyrat/modules/modular_weapons/icons/obj/company_and_or_faction_based/carwo_defense_systems/ammo.dmi'
icon_state = "granata_standard"
multiple_sprites = AMMO_BOX_FULL_EMPTY
w_class = WEIGHT_CLASS_NORMAL
ammo_type = /obj/item/ammo_casing/c980grenade
caliber = CALIBER_980TYDHOUER
max_ammo = 4
/obj/item/ammo_box/magazine/c980_grenade/starts_empty
start_empty = TRUE
/obj/item/ammo_box/magazine/c980_grenade/drum
name = "\improper Kiboko grenade drum"
desc = "A drum for .980 grenades, holds six shells."
icon_state = "granata_drum"
w_class = WEIGHT_CLASS_NORMAL
max_ammo = 6
/obj/item/ammo_box/magazine/c980_grenade/drum/starts_empty
start_empty = TRUE
@@ -46,6 +46,9 @@
max_ammo = 7
multiple_sprites = AMMO_BOX_PER_BULLET
item_flags = NO_MAT_REDEMPTION
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
)
/obj/item/clothing/head/hats/sus_bowler
@@ -5,7 +5,7 @@
icon_state = "extractor"
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/gold = SHEET_MATERIAL_AMOUNT,
/datum/material/gold = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/uranium = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/diamond = HALF_SHEET_MATERIAL_AMOUNT,
)
@@ -168,6 +168,11 @@
say_mod = "says"
// Not as good as organic tongues, not as bad as the robotic voicebox.
taste_sensitivity = 20
custom_materials = list(
/datum/material/iron = SMALL_MATERIAL_AMOUNT * 2,
/datum/material/glass = SMALL_MATERIAL_AMOUNT * 2,
/datum/material/silver = SMALL_MATERIAL_AMOUNT * 2
)
/obj/item/organ/tongue/vox
name = "vox tongue"
@@ -1,6 +1,10 @@
/obj/item/assembly/control/polarizer
name = "window polarization remote controller"
desc = "A small electronic device able to control the polarization status of linked windows remotely."
custom_materials = list(
/datum/material/iron = SMALL_MATERIAL_AMOUNT,
/datum/material/glass = SMALL_MATERIAL_AMOUNT,
)
/// Whether the connected windows are meant to be polarized or not.
var/polarizing = FALSE
@@ -153,7 +153,7 @@
balloon_alert_to_viewers("stopped grinding")
return
user.mind.adjust_experience(/datum/skill/primitive, 5)
user.mind?.adjust_experience(/datum/skill/primitive, 5)
for(var/target_item in contents)
seedify(target_item, t_max = 1)
@@ -6,7 +6,7 @@
if(!glass_item.use(1))
return
new /obj/item/stack/clay(get_turf(src))
user.mind.adjust_experience(/datum/skill/production, 1)
user.mind?.adjust_experience(/datum/skill/production, 1)
return
return ..()
@@ -16,7 +16,7 @@
if(!glass_item.use(1))
return
new /obj/item/stack/clay(src)
user.mind.adjust_experience(/datum/skill/production, 1)
user.mind?.adjust_experience(/datum/skill/production, 1)
return
return ..()
@@ -30,7 +30,7 @@
if(!glass_item.use(1))
return
new /obj/item/stack/clay(get_turf(src))
user.mind.adjust_experience(/datum/skill/production, 1)
user.mind?.adjust_experience(/datum/skill/production, 1)
return
return ..()
@@ -188,7 +188,7 @@
return
to_chat(user, span_notice(given_message[loop_try]))
new spawn_type(get_turf(src))
user.mind.adjust_experience(/datum/skill/production, 50)
user.mind?.adjust_experience(/datum/skill/production, 50)
has_clay = FALSE
icon_state = "throw_wheel_empty"
@@ -325,7 +325,7 @@
in_use = TRUE
user.put_in_hands(new glass.chosen_item)
user.mind.adjust_experience(/datum/skill/production, 30)
user.mind?.adjust_experience(/datum/skill/production, 30)
glass_ref = null
qdel(glass)
icon_state = "blow_pipe_empty"
@@ -393,7 +393,7 @@
in_use = FALSE
to_chat(user, span_notice("You finish trying to [step_id] [src]."))
user.mind.adjust_experience(/datum/skill/production, 10)
user.mind?.adjust_experience(/datum/skill/production, 10)
/**
@@ -453,7 +453,7 @@
message_admins("[src] just failed to create something while crafting!")
return FALSE
user.mind.adjust_experience(skill_to_grant, skill_amount)
user.mind?.adjust_experience(skill_to_grant, skill_amount)
clear_recipe()
update_appearance()
@@ -173,7 +173,7 @@
memory_bonus_exp = first_time_completion_exp_bonus
var/exp_give_mult = completion * get_material_quality_points_mult(product.get_master_material())
user.mind.adjust_experience(relevant_skill, exp_give * exp_give_mult + memory_bonus_exp)
user.mind?.adjust_experience(relevant_skill, exp_give * exp_give_mult + memory_bonus_exp)
/datum/crafting_bench_recipe/proc/move_to_world(obj/item/product, place_to_move_to)
if(istype(place_to_move_to, /obj/structure/reagent_crafting_bench))
@@ -650,7 +650,7 @@
balloon_alert(user, "finished setting [ceramic_item]")
var/obj/item/ceramic/spawned_ceramic = new ceramic_item.forge_item(get_turf(src))
user.mind.adjust_experience(/datum/skill/production, 50)
user.mind?.adjust_experience(/datum/skill/production, 50)
spawned_ceramic.color = ceramic_item.color
qdel(ceramic_item)
@@ -673,7 +673,7 @@
return
var/obj/item/glassblowing/molten_glass/spawned_glass = new /obj/item/glassblowing/molten_glass(get_turf(src))
user.mind.adjust_experience(/datum/skill/production, 10)
user.mind?.adjust_experience(/datum/skill/production, 10)
COOLDOWN_START(spawned_glass, remaining_heat, glassblowing_amount)
spawned_glass.total_time = glassblowing_amount
@@ -702,7 +702,7 @@
metal_item.has_sand = FALSE
metal_item.icon_state = "metal_cup_empty" // This should be handled a better way but presently this is how it works
var/obj/item/glassblowing/molten_glass/spawned_glass = new /obj/item/glassblowing/molten_glass(get_turf(src))
user.mind.adjust_experience(/datum/skill/production, 10)
user.mind?.adjust_experience(/datum/skill/production, 10)
COOLDOWN_START(spawned_glass, remaining_heat, glassblowing_amount)
spawned_glass.total_time = glassblowing_amount
@@ -872,7 +872,7 @@
COOLDOWN_START(find_glass, remaining_heat, glassblowing_amount)
find_glass.total_time = glassblowing_amount
to_chat(user, span_notice("You finish heating up [blowing_item]."))
user.mind.adjust_experience(/datum/skill/production, 10)
user.mind?.adjust_experience(/datum/skill/production, 10)
return ITEM_INTERACT_SUCCESS
/obj/structure/reagent_forge/wrench_act(mob/living/user, obj/item/tool)
@@ -31,7 +31,7 @@
var/datum/component/forge_smithable/forge_component = GetComponent(/datum/component/forge_smithable)
if(forge_component.is_finished_smithing())
to_chat(quencher, span_notice("You cool down [src]."))
quencher.mind.adjust_experience(/datum/skill/smithing, 5)
quencher.mind?.adjust_experience(/datum/skill/smithing, 5)
else
if(break_on_early_quench)
to_chat(quencher, span_warning("The [src] breaks from the thermal shock! Metalworking this type of object requires it to be hammered into completion."))
@@ -230,11 +230,11 @@
bad_hit(playsound = TRUE)
if(ANVIL_HAMMER_HIT_GOOD)
good_hit(amount = quality_points_to_give, playsound = TRUE)
user.mind.adjust_experience(/datum/skill/smithing, 1) //A good hit gives mild experience
user.mind?.adjust_experience(/datum/skill/smithing, 1) //A good hit gives mild experience
do_sparks(1, FALSE, src)
if(ANVIL_HAMMER_HIT_PERFECT)
perfect_hit(amount = quality_points_to_give, playsound = TRUE)
user.mind.adjust_experience(/datum/skill/smithing, 5) //A perfect hit gives good experience
user.mind?.adjust_experience(/datum/skill/smithing, 5) //A perfect hit gives good experience
do_sparks(2, FALSE, parent_item)
show_balloon_alert(user, hit_quality)
@@ -6,6 +6,11 @@
inhand_icon_state = "syringe_0"
lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi'
righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi'
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 0.5,
/datum/material/gold = SHEET_MATERIAL_AMOUNT,
/datum/material/silver = SHEET_MATERIAL_AMOUNT,
)
/// Attempts to use the item on the target brain.
/obj/item/rsd_interface/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers)
+1 -1
View File
@@ -13,7 +13,7 @@
paycheck = PAYCHECK_CREW
paycheck_department = ACCOUNT_SRV
display_order = JOB_DISPLAY_ORDER_BARTENDER
display_order = JOB_DISPLAY_ORDER_BARBER
bounty_types = CIV_JOB_BASIC
departments_list = list(
/datum/job_department/service,
@@ -78,8 +78,10 @@
desc = "The latest and greatest power razor born from the science of shaving."
icon = 'modular_skyrat/modules/salon/icons/items.dmi'
icon_state = "razor"
inhand_icon_state = null
obj_flags = CONDUCTS_ELECTRICITY
w_class = WEIGHT_CLASS_TINY
sound_vary = FALSE
// How long do we take to shave someone's (facial) hair?
var/shaving_time = 5 SECONDS
@@ -3,9 +3,7 @@
name = "Shotgun Slug"
id = "shotgun_slug"
build_type = AUTOLATHE
materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
)
materials = AMMO_MATS_SHOTGUN
build_path = /obj/item/ammo_casing/shotgun
category = list(
RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO,
@@ -15,9 +13,7 @@
name = "Buckshot Shell"
id = "buckshot_shell"
build_type = AUTOLATHE
materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
)
materials = AMMO_MATS_SHOTGUN
build_path = /obj/item/ammo_casing/shotgun/buckshot
category = list(
RND_CATEGORY_HACKED, RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO,
@@ -150,6 +150,7 @@
name = "frangible slug"
desc = "A weak anti materiel shell intended for dislodging airlock, breaking down barricades and structures. Not effective against people."
icon_state = "breacher"
custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1, /datum/material/titanium = HALF_SHEET_MATERIAL_AMOUNT)
projectile_type = /obj/projectile/bullet/frangible_slug
/obj/projectile/bullet/frangible_slug
@@ -53,7 +53,7 @@
to_chat(user, span_warning("You stopped researching."))
return
user.mind.adjust_experience(/datum/skill/research, 5)
user.mind?.adjust_experience(/datum/skill/research, 5)
var/shape_two = show_radial_menu(user, src, radial_icons_cache, require_near = TRUE)
to_chat(user, span_notice("You begin to [pick(thinking_list)] about the [shape_two]... and then [pick(thinking_list)] about their [pick(shape_parts)]..."))
@@ -61,7 +61,7 @@
to_chat(user, span_warning("You stopped researching."))
return
user.mind.adjust_experience(/datum/skill/research, 5)
user.mind?.adjust_experience(/datum/skill/research, 5)
var/shape_three = show_radial_menu(user, src, radial_icons_cache, require_near = TRUE)
to_chat(user, span_notice("You begin to [pick(thinking_list)] about the [shape_three]... and then [pick(thinking_list)] about their [pick(shape_parts)]..."))
@@ -69,7 +69,7 @@
to_chat(user, span_warning("You stopped researching."))
return
user.mind.adjust_experience(/datum/skill/research, 5)
user.mind?.adjust_experience(/datum/skill/research, 5)
var/datum/simple_research/find_research = GLOB.simple_research["[shape_one][shape_two][shape_three]"]
if(!find_research)
@@ -99,7 +99,7 @@
else
spawned_scrap.spawning_item = find_research.research_item
user.mind.adjust_experience(/datum/skill/research, 10)
user.mind?.adjust_experience(/datum/skill/research, 10)
qdel(find_research)
/obj/item/research_scrap
@@ -142,5 +142,5 @@
if(material_satisfied[1] && material_satisfied[2])
new spawning_item(get_turf(src))
to_chat(user, span_notice("You completed [src]."))
user.mind.adjust_experience(/datum/skill/research, 5)
user.mind?.adjust_experience(/datum/skill/research, 5)
qdel(src)
@@ -39,12 +39,20 @@
/obj/item/scythe/tier1
name = "scythe (tier 1)"
icon_state = "scythe_t1"
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
)
/obj/item/scythe/tier2
name = "scythe (tier 2)"
icon_state = "scythe_t2"
force = 15
hit_range = 1
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
)
/obj/item/scythe/tier3
name = "scythe (tier 3)"
@@ -10,6 +10,10 @@
organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
overrides_sprite_datum_organ_type = TRUE
bodypart_overlay = /datum/bodypart_overlay/mutant/ears
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
)
/obj/item/organ/ears/synth/emp_act(severity)
. = ..()
@@ -4,6 +4,10 @@
desc = "A very basic set of optical sensors with no extra vision modes or functions."
maxHealth = 1 * STANDARD_ORGAN_THRESHOLD
organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
)
/obj/item/organ/eyes/synth/emp_act(severity)
. = ..()
@@ -8,6 +8,10 @@
maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD // 1.5x due to synthcode.tm being weird
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_HEART
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
)
var/last_message_time = 0
/obj/item/organ/heart/synth/emp_act(severity)
@@ -35,6 +35,11 @@
bodyshape = BODYSHAPE_HUMANOID
change_exempt_flags = NONE
dmg_overlay_type = "robotic"
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 1.25,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/gold = SMALL_MATERIAL_AMOUNT,
)
brute_modifier = SYNTH_BRUTE_MODIFIER
burn_modifier = SYNTH_BURN_MODIFIER
@@ -91,6 +96,11 @@
bodyshape = BODYSHAPE_HUMANOID
change_exempt_flags = NONE
dmg_overlay_type = "robotic"
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3.25,
/datum/material/silver = SMALL_MATERIAL_AMOUNT,
/datum/material/gold = SMALL_MATERIAL_AMOUNT,
)
brute_modifier = SYNTH_BRUTE_MODIFIER
burn_modifier = SYNTH_BURN_MODIFIER
@@ -167,6 +177,10 @@
bodyshape = BODYSHAPE_HUMANOID
change_exempt_flags = NONE
dmg_overlay_type = "robotic"
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/gold = SMALL_MATERIAL_AMOUNT,
)
brute_modifier = SYNTH_BRUTE_MODIFIER
burn_modifier = SYNTH_BURN_MODIFIER
@@ -220,6 +234,10 @@
bodyshape = BODYSHAPE_HUMANOID
change_exempt_flags = NONE
dmg_overlay_type = "robotic"
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/gold = SMALL_MATERIAL_AMOUNT,
)
brute_modifier = SYNTH_BRUTE_MODIFIER
burn_modifier = SYNTH_BURN_MODIFIER
@@ -275,6 +293,10 @@
bodyshape = BODYSHAPE_HUMANOID
change_exempt_flags = NONE
dmg_overlay_type = "robotic"
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 2,
)
brute_modifier = SYNTH_BRUTE_MODIFIER
burn_modifier = SYNTH_BURN_MODIFIER
@@ -330,6 +352,10 @@
bodyshape = BODYSHAPE_HUMANOID
change_exempt_flags = NONE
dmg_overlay_type = "robotic"
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 3,
/datum/material/gold = SMALL_MATERIAL_AMOUNT * 2,
)
brute_modifier = SYNTH_BRUTE_MODIFIER
burn_modifier = SYNTH_BURN_MODIFIER
@@ -8,6 +8,10 @@
slot = ORGAN_SLOT_LIVER
maxHealth = 1 * STANDARD_ORGAN_THRESHOLD
organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
)
/obj/item/organ/liver/synth/emp_act(severity)
. = ..()
@@ -13,6 +13,10 @@
slot = ORGAN_SLOT_LUNGS
maxHealth = 1.5 * STANDARD_ORGAN_THRESHOLD
organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
)
/obj/item/organ/lungs/synth/emp_act(severity)
. = ..()
@@ -10,6 +10,10 @@
slot = "stomach"
desc = "A specialised mini reactor, for synthetic use only. Has a low-power mode to ensure baseline functions. Without this, synthetics are unable to stay powered."
organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
)
/obj/item/organ/stomach/synth/emp_act(severity)
. = ..()
@@ -14,6 +14,10 @@
zone = BODY_ZONE_HEAD
slot = ORGAN_SLOT_TONGUE
organ_flags = ORGAN_ROBOTIC | ORGAN_SYNTHETIC_FROM_SPECIES
custom_materials = list(
/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT,
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT,
)
/obj/item/organ/tongue/synth/can_speak_language(language)
return TRUE
@@ -14,6 +14,13 @@
obj_flags = UNIQUE_RENAME
weapon_weight = WEAPON_LIGHT
gun_flags = NOT_A_REAL_GUN
custom_materials = list(
/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5,
/datum/material/glass = SHEET_MATERIAL_AMOUNT * 3,
/datum/material/silver = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/uranium = SHEET_MATERIAL_AMOUNT * 2,
/datum/material/diamond = SHEET_MATERIAL_AMOUNT,
)
/// the mode of the resonator; has three modes: auto (1), manual (2), and matrix (3)
var/mode = RESONATOR_MODE_AUTO
/// How devestating it is in manual mode. Yes, this is all copied from the resonator item

Some files were not shown because too many files have changed in this diff Show More