mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-08-22 11:38:12 +01:00
Merge remote-tracking branch 'VOREStation/master' into upstream-merge-7697
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
#define LOADOUT_BAN_STRING "Custom loadout"
|
||||
|
||||
/datum/gear_tweak/proc/get_contents(var/metadata)
|
||||
return
|
||||
|
||||
@@ -165,7 +167,7 @@ var/datum/gear_tweak/custom_name/gear_tweak_free_name = new()
|
||||
return ""
|
||||
|
||||
/datum/gear_tweak/custom_name/get_metadata(var/user, var/metadata)
|
||||
if(jobban_isbanned(user, "Custom loadout"))
|
||||
if(jobban_isbanned(user, LOADOUT_BAN_STRING))
|
||||
to_chat(user, SPAN_WARNING("You are banned from using custom loadout names/descriptions."))
|
||||
return
|
||||
if(valid_custom_names)
|
||||
@@ -196,7 +198,7 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
|
||||
return ""
|
||||
|
||||
/datum/gear_tweak/custom_desc/get_metadata(var/user, var/metadata)
|
||||
if(jobban_isbanned(user, "Custom loadout"))
|
||||
if(jobban_isbanned(user, LOADOUT_BAN_STRING))
|
||||
to_chat(user, SPAN_WARNING("You are banned from using custom loadout names/descriptions."))
|
||||
return
|
||||
if(valid_custom_desc)
|
||||
@@ -507,3 +509,46 @@ var/datum/gear_tweak/custom_desc/gear_tweak_free_desc = new()
|
||||
var/t = ValidTeslaLinks[metadata[7]]
|
||||
I.tesla_link = new t(I)
|
||||
I.update_verbs()
|
||||
|
||||
/datum/gear_tweak/implant_location
|
||||
var/static/list/bodypart_names_to_tokens = list(
|
||||
"head" = BP_HEAD,
|
||||
"upper body" = BP_TORSO,
|
||||
"lower body" = BP_GROIN,
|
||||
"left hand" = BP_L_HAND,
|
||||
"left arm" = BP_L_ARM,
|
||||
"right hand" = BP_R_HAND,
|
||||
"right arm" = BP_R_ARM,
|
||||
"left foot" = BP_L_FOOT,
|
||||
"left leg" = BP_L_LEG,
|
||||
"right foot" = BP_R_FOOT,
|
||||
"right leg" = BP_R_LEG
|
||||
)
|
||||
var/static/list/bodypart_tokens_to_names = list(
|
||||
BP_HEAD = "head",
|
||||
BP_TORSO = "upper body",
|
||||
BP_GROIN = "lower body",
|
||||
BP_LEFT_HAND = "left hand",
|
||||
BP_LEFT_ARM = "left arm",
|
||||
BP_RIGHT_HAND = "right hand",
|
||||
BP_RIGHT_ARM = "right arm",
|
||||
BP_LEFT_FOOT = "left foot",
|
||||
BP_LEFT_LEG = "left leg",
|
||||
BP_RIGHT_FOOT = "right foot",
|
||||
BP_RIGHT_LEG = "right leg"
|
||||
)
|
||||
|
||||
/datum/gear_tweak/implant_location/get_default()
|
||||
return bodypart_names_to_tokens[1]
|
||||
|
||||
/datum/gear_tweak/implant_location/tweak_item(var/obj/item/weapon/implant/I, var/metadata)
|
||||
if(istype(I))
|
||||
I.initialize_loc = bodypart_names_to_tokens[metadata] || BP_TORSO
|
||||
|
||||
/datum/gear_tweak/implant_location/get_contents(var/metadata)
|
||||
return "Location: [metadata]"
|
||||
|
||||
/datum/gear_tweak/implant_location/get_metadata(var/user, var/metadata)
|
||||
return (input(user, "Select a bodypart for the implant to be implanted inside.", "Implant Location", metadata || "upper body") as null|anything in bodypart_names_to_tokens) || bodypart_tokens_to_names[BP_TORSO]
|
||||
|
||||
#undef LOADOUT_BAN_STRING
|
||||
@@ -77,6 +77,12 @@
|
||||
display_name = "drop pouches, white (Medical)"
|
||||
allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic")
|
||||
|
||||
/datum/gear/accessory/bluespace
|
||||
display_name = "bluespace badge (Eng, Sec, Med, Exploration, Miner)"
|
||||
path = /obj/item/clothing/accessory/storage/bluespace
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner")
|
||||
cost = 2
|
||||
|
||||
/datum/gear/accessory/webbing
|
||||
cost = 1
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
/datum/gear/utility/implant
|
||||
display_name = "implant, neural assistance web"
|
||||
description = "A complex web implanted into the subject, medically in order to compensate for neurological disease."
|
||||
path = /obj/item/weapon/implant/neural
|
||||
slot = "implant"
|
||||
exploitable = 1
|
||||
sort_category = "Cyberware"
|
||||
cost = 6
|
||||
|
||||
/datum/gear/utility/implant/tracking
|
||||
display_name = "implant, tracking"
|
||||
path = /obj/item/weapon/implant/tracking/weak
|
||||
cost = 10
|
||||
|
||||
// Remove these after generic implant has been in for awhile and everyone has had a reasonable period to copy their old descs.
|
||||
/datum/gear/utility/implant/dud1
|
||||
display_name = "implant, head"
|
||||
description = "An implant with no obvious purpose (DEPRECATED, USE GENERIC IMPLANT)."
|
||||
path = /obj/item/weapon/implant/dud
|
||||
cost = 1
|
||||
/datum/gear/utility/implant/dud2
|
||||
display_name = "implant, torso"
|
||||
description = "An implant with no obvious purpose (DEPRECATED, USE GENERIC IMPLANT)."
|
||||
path = /obj/item/weapon/implant/dud/torso
|
||||
cost = 1
|
||||
// End removal marker.
|
||||
|
||||
/datum/gear/utility/implant/generic
|
||||
display_name = "implant, generic, primary"
|
||||
description = "An implant with no obvious purpose."
|
||||
path = /obj/item/weapon/implant
|
||||
cost = 1
|
||||
|
||||
/datum/gear/utility/implant/generic/second
|
||||
display_name = "implant, generic, secondary"
|
||||
|
||||
/datum/gear/utility/implant/generic/third
|
||||
display_name = "implant, generic, tertiary"
|
||||
|
||||
/datum/gear/utility/implant/generic/New()
|
||||
..()
|
||||
gear_tweaks += global.gear_tweak_implant_location
|
||||
|
||||
/datum/gear/utility/implant/language
|
||||
cost = 2
|
||||
exploitable = 0
|
||||
|
||||
/datum/gear/utility/implant/language/eal
|
||||
display_name = "vocal synthesizer, EAL"
|
||||
description = "A surgically implanted vocal synthesizer which allows the owner to speak EAL, if they know it."
|
||||
path = /obj/item/weapon/implant/language/eal
|
||||
|
||||
/datum/gear/utility/implant/language/skrellian
|
||||
display_name = "vocal synthesizer, Skrellian"
|
||||
description = "A surgically implanted vocal synthesizer which allows the owner to speak Common Skrellian, if they know it."
|
||||
path = /obj/item/weapon/implant/language/skrellian
|
||||
@@ -391,4 +391,8 @@
|
||||
|
||||
/datum/gear/head/blackngoldheaddress
|
||||
display_name = "black and gold headdress"
|
||||
path = /obj/item/clothing/head/blackngoldheaddress
|
||||
path = /obj/item/clothing/head/blackngoldheaddress
|
||||
|
||||
/datum/gear/head/plaguedoctor2
|
||||
display_name = "golden plague doctor's hat"
|
||||
path = /obj/item/clothing/head/plaguedoctorhat/gold
|
||||
@@ -24,4 +24,9 @@
|
||||
|
||||
/datum/gear/mask/veil
|
||||
display_name = "black veil"
|
||||
path = /obj/item/clothing/mask/veil
|
||||
path = /obj/item/clothing/mask/veil
|
||||
|
||||
/datum/gear/mask/plaguedoctor2
|
||||
display_name = "golden plague doctor's mask"
|
||||
path = /obj/item/clothing/mask/gas/plaguedoctor/gold
|
||||
cost = 3 ///Because it functions as a gas mask, and therefore has a mechanical advantage.
|
||||
@@ -173,6 +173,10 @@ datum/gear/suit/duster
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/emt
|
||||
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
|
||||
|
||||
/datum/gear/suit/miscellaneous/labcoat
|
||||
display_name = "plague doctor's coat"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/plaguedoctor
|
||||
|
||||
/datum/gear/suit/roles/surgical_apron
|
||||
display_name = "surgical apron"
|
||||
path = /obj/item/clothing/suit/surgicalapron
|
||||
|
||||
@@ -644,4 +644,16 @@
|
||||
|
||||
/datum/gear/uniform/gothic2
|
||||
display_name = "lacey gothic dress"
|
||||
path = /obj/item/clothing/under/dress/gothic2
|
||||
path = /obj/item/clothing/under/dress/gothic2
|
||||
|
||||
/datum/gear/uniform/flowerskirt
|
||||
display_name = "flower skirt"
|
||||
path = /obj/item/clothing/under/flower_skirt
|
||||
|
||||
/datum/gear/uniform/flowerskirt/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/uniform/countess
|
||||
display_name = "countess dress"
|
||||
path = /obj/item/clothing/under/dress/countess
|
||||
@@ -204,3 +204,11 @@ Qipao
|
||||
/datum/gear/uniform/qipao_white
|
||||
display_name = "qipao, white"
|
||||
path = /obj/item/clothing/under/dress/qipao/white
|
||||
|
||||
/*
|
||||
Bluespace jumpsuit
|
||||
*/
|
||||
/datum/gear/uniform/hfjumpsuit
|
||||
display_name = "HYPER jumpsuit"
|
||||
path = /obj/item/clothing/under/hyperfiber
|
||||
cost = 2
|
||||
@@ -115,60 +115,10 @@
|
||||
display_name = "cell, device"
|
||||
path = /obj/item/weapon/cell/device
|
||||
|
||||
/datum/gear/utility/implant
|
||||
slot = "implant"
|
||||
exploitable = 1
|
||||
|
||||
/datum/gear/utility/implant/tracking
|
||||
display_name = "implant, tracking"
|
||||
path = /obj/item/weapon/implant/tracking/weak
|
||||
cost = 0 //VOREStation Edit. Changed cost to 0
|
||||
|
||||
/datum/gear/utility/implant/neural
|
||||
display_name = "implant, neural assistance web"
|
||||
description = "A complex web implanted into the subject, medically in order to compensate for neurological disease."
|
||||
path = /obj/item/weapon/implant/neural
|
||||
cost = 6
|
||||
|
||||
/datum/gear/utility/implant/dud1
|
||||
display_name = "implant, head"
|
||||
description = "An implant with no obvious purpose."
|
||||
path = /obj/item/weapon/implant/dud
|
||||
cost = 1
|
||||
|
||||
/datum/gear/utility/implant/dud2
|
||||
display_name = "implant, torso"
|
||||
description = "An implant with no obvious purpose."
|
||||
path = /obj/item/weapon/implant/dud/torso
|
||||
cost = 1
|
||||
|
||||
/datum/gear/utility/implant/language
|
||||
cost = 2
|
||||
exploitable = 0
|
||||
|
||||
/datum/gear/utility/implant/language/eal
|
||||
display_name = "vocal synthesizer, EAL"
|
||||
description = "A surgically implanted vocal synthesizer which allows the owner to speak EAL, if they know it."
|
||||
path = /obj/item/weapon/implant/language/eal
|
||||
|
||||
/datum/gear/utility/implant/language/skrellian
|
||||
display_name = "vocal synthesizer, Skrellian"
|
||||
description = "A surgically implanted vocal synthesizer which allows the owner to speak Common Skrellian, if they know it."
|
||||
path = /obj/item/weapon/implant/language/skrellian
|
||||
|
||||
/datum/gear/utility/pen
|
||||
display_name = "Fountain Pen"
|
||||
path = /obj/item/weapon/pen/fountain
|
||||
|
||||
/datum/gear/utility/wheelchair/color
|
||||
display_name = "wheelchair"
|
||||
path = /obj/item/wheelchair
|
||||
cost = 4
|
||||
|
||||
/datum/gear/utility/wheelchair/color/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/utility/umbrella
|
||||
display_name = "Umbrella"
|
||||
path = /obj/item/weapon/melee/umbrella
|
||||
@@ -178,6 +128,20 @@
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/utility/wheelchair
|
||||
display_name = "wheelchair selection"
|
||||
path = /obj/item/wheelchair
|
||||
cost = 4
|
||||
|
||||
/datum/gear/utility/wheelchair/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
var/list/wheelchairs = list(
|
||||
"wheelchair" = /obj/item/wheelchair,
|
||||
"motorized wheelchair" = /obj/item/wheelchair/motor
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(wheelchairs)
|
||||
|
||||
/****************
|
||||
modular computers
|
||||
****************/
|
||||
|
||||
@@ -670,3 +670,10 @@
|
||||
path = /obj/item/clothing/glasses/aerogelgoggles
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/utility/teshchair
|
||||
display_name = "small electric wheelchair (Teshari)"
|
||||
path = /obj/item/wheelchair/motor/small
|
||||
whitelisted = SPECIES_TESHARI
|
||||
sort_category = "Xenowear"
|
||||
cost = 4
|
||||
|
||||
@@ -149,6 +149,9 @@
|
||||
var/available_in_hours = job.available_in_playhours(user.client)
|
||||
. += "<del>[rank]</del></td></a><td> \[IN [round(available_in_hours, 0.1)] DEPTHOURS]</td></tr>"
|
||||
continue
|
||||
if(!is_job_whitelisted(user,rank))
|
||||
. += "<del>[rank]</del></td></a><td><b> \[WHITELIST ONLY]</b></td></tr>"
|
||||
continue
|
||||
//VOREStation Add End
|
||||
if(job.minimum_character_age && user.client && (user.client.prefs.age < job.minimum_character_age))
|
||||
. += "<del>[rank]</del></td></a><td> \[MINIMUM CHARACTER AGE: [job.minimum_character_age]]</td></tr>"
|
||||
|
||||
@@ -299,7 +299,3 @@
|
||||
if(PREF_FBP_SOFTWARE)
|
||||
return 150
|
||||
return S.max_age // welp
|
||||
|
||||
/datum/category_item/player_setup_item/proc/color_square(red, green, blue, hex)
|
||||
var/color = hex ? hex : "#[num2hex(red, 2)][num2hex(green, 2)][num2hex(blue, 2)]"
|
||||
return "<span style='font-face: fixedsys; font-size: 14px; background-color: [color]; color: [color]'>___</span>"
|
||||
@@ -23,12 +23,8 @@
|
||||
|
||||
// Physical traits are what they sound like, and involve the character's physical body, as opposed to their mental state.
|
||||
/datum/trait/modifier/physical
|
||||
<<<<<<< HEAD
|
||||
category = "Physical Quirks" //VOREStation Edit
|
||||
=======
|
||||
name = "Physical"
|
||||
category = "Physical"
|
||||
>>>>>>> b22a056... Sideports a couple of init unit tests from Neb. (#7893)
|
||||
|
||||
|
||||
/datum/trait/modifier/physical/flimsy
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
var/custom_base // What to base the custom species on
|
||||
var/blood_color = "#A10808"
|
||||
|
||||
var/custom_say = null
|
||||
var/custom_whisper = null
|
||||
var/custom_ask = null
|
||||
var/custom_exclaim = null
|
||||
|
||||
var/list/pos_traits = list() // What traits they've selected for their custom species
|
||||
var/list/neu_traits = list()
|
||||
var/list/neg_traits = list()
|
||||
@@ -33,10 +38,15 @@
|
||||
S["neg_traits"] >> pref.neg_traits
|
||||
S["blood_color"] >> pref.blood_color
|
||||
|
||||
S["traits_cheating"]>> pref.traits_cheating
|
||||
S["traits_cheating"] >> pref.traits_cheating
|
||||
S["max_traits"] >> pref.max_traits
|
||||
S["trait_points"] >> pref.starting_trait_points
|
||||
|
||||
S["custom_say"] >> pref.custom_say
|
||||
S["custom_whisper"] >> pref.custom_whisper
|
||||
S["custom_ask"] >> pref.custom_ask
|
||||
S["custom_exclaim"] >> pref.custom_exclaim
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/save_character(var/savefile/S)
|
||||
S["custom_species"] << pref.custom_species
|
||||
S["custom_base"] << pref.custom_base
|
||||
@@ -45,10 +55,15 @@
|
||||
S["neg_traits"] << pref.neg_traits
|
||||
S["blood_color"] << pref.blood_color
|
||||
|
||||
S["traits_cheating"]<< pref.traits_cheating
|
||||
S["traits_cheating"] << pref.traits_cheating
|
||||
S["max_traits"] << pref.max_traits
|
||||
S["trait_points"] << pref.starting_trait_points
|
||||
|
||||
S["custom_say"] << pref.custom_say
|
||||
S["custom_whisper"] << pref.custom_whisper
|
||||
S["custom_ask"] << pref.custom_ask
|
||||
S["custom_exclaim"] << pref.custom_exclaim
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/sanitize_character()
|
||||
if(!pref.pos_traits) pref.pos_traits = list()
|
||||
if(!pref.neu_traits) pref.neu_traits = list()
|
||||
@@ -86,6 +101,10 @@
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.custom_species = pref.custom_species
|
||||
character.custom_say = pref.custom_say
|
||||
character.custom_ask = pref.custom_ask
|
||||
character.custom_whisper = pref.custom_whisper
|
||||
character.custom_exclaim = pref.custom_exclaim
|
||||
|
||||
if(character.isSynthetic()) //Checking if we have a synth on our hands, boys.
|
||||
pref.dirty_synth = 1
|
||||
@@ -122,14 +141,14 @@
|
||||
. += "<a href='?src=\ref[src];custom_base=1'>[pref.custom_base ? pref.custom_base : "Human"]</a><br>"
|
||||
|
||||
var/traits_left = pref.max_traits
|
||||
. += "<b>Traits Left:</b> [traits_left]<br>"
|
||||
|
||||
if(pref.species == SPECIES_CUSTOM)
|
||||
var/points_left = pref.starting_trait_points
|
||||
|
||||
for(var/T in pref.pos_traits + pref.neg_traits)
|
||||
points_left -= traits_costs[T]
|
||||
traits_left--
|
||||
|
||||
. += "<b>Traits Left:</b> [traits_left]<br>"
|
||||
. += "<b>Points Left:</b> [points_left]<br>"
|
||||
if(points_left < 0 || traits_left < 0 || !pref.custom_species)
|
||||
. += "<span style='color:red;'><b>^ Fix things! ^</b></span><br>"
|
||||
@@ -156,6 +175,16 @@
|
||||
. += "<b>Blood Color: </b>" //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color.
|
||||
. += "<a href='?src=\ref[src];blood_color=1'>Set Color</a>"
|
||||
. += "<a href='?src=\ref[src];blood_reset=1'>R</a><br>"
|
||||
. += "<br>"
|
||||
|
||||
. += "<b>Custom Say: </b>"
|
||||
. += "<a href='?src=\ref[src];custom_say=1'>Set Say Verb</a><br>"
|
||||
. += "<b>Custom Whisper: </b>"
|
||||
. += "<a href='?src=\ref[src];custom_whisper=1'>Set Whisper Verb</a><br>"
|
||||
. += "<b>Custom Ask: </b>"
|
||||
. += "<a href='?src=\ref[src];custom_ask=1'>Set Ask Verb</a><br>"
|
||||
. += "<b>Custom Exclaim: </b>"
|
||||
. += "<a href='?src=\ref[src];custom_exclaim=1'>Set Exclaim Verb</a><br>"
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||
if(!CanUseTopic(user))
|
||||
@@ -216,6 +245,30 @@
|
||||
pref.neg_traits -= trait
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["custom_say"])
|
||||
var/say_choice = sanitize(input(usr, "This word or phrase will appear instead of 'says': [pref.real_name] says, \"Hi.\"", "Custom Say", pref.custom_say) as null|text, 12)
|
||||
if(say_choice)
|
||||
pref.custom_say = say_choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["custom_whisper"])
|
||||
var/whisper_choice = sanitize(input(usr, "This word or phrase will appear instead of 'whispers': [pref.real_name] whispers, \"Hi...\"", "Custom Whisper", pref.custom_whisper) as null|text, 12)
|
||||
if(whisper_choice)
|
||||
pref.custom_whisper = whisper_choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["custom_ask"])
|
||||
var/ask_choice = sanitize(input(usr, "This word or phrase will appear instead of 'asks': [pref.real_name] asks, \"Hi?\"", "Custom Ask", pref.custom_ask) as null|text, 12)
|
||||
if(ask_choice)
|
||||
pref.custom_ask = ask_choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["custom_exclaim"])
|
||||
var/exclaim_choice = sanitize(input(usr, "This word or phrase will appear instead of 'exclaims', 'shouts' or 'yells': [pref.real_name] exclaims, \"Hi!\"", "Custom Exclaim", pref.custom_exclaim) as null|text, 12)
|
||||
if(exclaim_choice)
|
||||
pref.custom_exclaim = exclaim_choice
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["add_trait"])
|
||||
var/mode = text2num(href_list["add_trait"])
|
||||
var/list/picklist
|
||||
@@ -290,6 +343,10 @@
|
||||
alert("The trait you've selected cannot be taken by the species you've chosen!","Error")
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if( LAZYLEN(instance.allowed_species) && !(pref.species in instance.allowed_species)) //Adding white list handling -shark
|
||||
alert("The trait you've selected cannot be taken by the species you've chosen!","Error")
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(trait_choice in pref.pos_traits + pref.neu_traits + pref.neg_traits)
|
||||
conflict = instance.name
|
||||
|
||||
|
||||
Reference in New Issue
Block a user