Merge remote-tracking branch 'VOREStation/master' into upstream-merge-7697

This commit is contained in:
Unknown
2021-02-28 14:29:46 -05:00
810 changed files with 581259 additions and 89158 deletions
@@ -259,6 +259,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
character.r_wing2 = pref.r_wing2
character.b_wing2 = pref.b_wing2
character.g_wing2 = pref.g_wing2
character.set_gender( pref.biological_gender)
// Destroy/cyborgize organs and limbs.
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
@@ -15,6 +15,26 @@
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/eyes/blindfold
display_name = "blindfold"
path = /obj/item/clothing/glasses/sunglasses/blindfold
/datum/gear/eyes/whiteblindfold //I may have lost my sight, but at least these folks can see my RAINBOW BLINDFOLD
display_name = "blindfold, white (recolorable)"
path = /obj/item/clothing/glasses/sunglasses/blindfold/whiteblindfold
/datum/gear/eyes/whiteblindfold/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/eyes/thinblindfold
display_name = "blindfold, thin white (recolorable)"
path = /obj/item/clothing/glasses/sunglasses/thinblindfold
/datum/gear/eyes/thinblindfold/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/eyes/glasses
display_name = "Glasses, prescription"
path = /obj/item/clothing/glasses/regular
@@ -57,4 +57,4 @@
/datum/gear/eyes/medical/medpatch
display_name = "Health HUDpatch"
path = /obj/item/clothing/glasses/hud/health/eyepatch
path = /obj/item/clothing/glasses/hud/health/eyepatch
@@ -88,6 +88,13 @@
ckeywhitelist = list("arokha")
character_name = list("Aronai Sieyes")
/datum/gear/fluff/astra_ritualknife
path = /obj/item/weapon/material/knife/ritual/fluff/astra
display_name = "Polished Ritual Knife"
description = "A well kept strange ritual knife, There is a small tag with the name 'Astra Ether' on it. They are probably looking for this."
ckeywhitelist = list("astraether")
character_name = list("Astra Ether")
/datum/gear/fluff/collar/azura
path = /obj/item/clothing/accessory/collar/azura
display_name = "collar, Azura"
@@ -745,6 +752,12 @@
character_name = list("Clara Mali")
cost = 1
/datum/gear/fluff/nikki_dorky_outfit
path = /obj/item/weapon/storage/box/fluff
display_name = "Nikki's Witchy Outfit"
ckeywhitelist = list("ryumi")
character_name = list("Nikki Yumeno")
// S CKEYS
/datum/gear/fluff/brynhild_medal
path = /obj/item/clothing/accessory/medal/silver/valor
@@ -946,6 +959,25 @@
// U CKEYS
// V CKEYS
/datum/gear/fluff/verie_suit
path = /obj/item/clothing/under/fluff/verie
display_name = "Verie's Salacious Suit"
ckeywhitelist = list("vitoras")
character_name = list("Verie")
/datum/gear/fluff/verie_hoodie
path = /obj/item/clothing/suit/storage/hooded/fluff/verie
display_name = "Verie's Helluva Hoodie"
ckeywhitelist = list("vitoras")
character_name = list("Verie")
/datum/gear/fluff/verie_comb
path = /obj/item/weapon/fluff/verie
display_name = "Verie's Crazy Comb"
description = "(Note: The highlights this gives you will be placed above EVERYTHING... including mobs!)"
ckeywhitelist = list("vitoras")
character_name = list("Verie")
/datum/gear/fluff/cameron_glasses
path = /obj/item/clothing/glasses/fluff/science_proper
display_name = "Cameron's Science Glasses"
@@ -1046,6 +1078,12 @@
ckeywhitelist = list("vitoras")
character_name = list("Roanna Ti'Rox")
/datum/gear/fluff/harmony_id
path = /obj/item/weapon/card/id/fluff/harmony
display_name = "Harmony's ITG-ID card"
ckeywhitelist = list("verysoft")
character_name = list("Harmony")
// W CKEYS
/datum/gear/fluff/sthasha_bracer
path = /obj/item/clothing/accessory/bracer/fluff/xander_sthasha
@@ -88,6 +88,11 @@
display_name = "cap, grey"
path = /obj/item/clothing/head/soft/grey
/datum/gear/head/cap/med
display_name = "cap, medical (Medical)"
path = /obj/item/clothing/head/soft/med
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic","Search and Rescue")
/datum/gear/head/cap/orange
display_name = "cap, orange"
path = /obj/item/clothing/head/soft/orange
@@ -330,7 +335,7 @@
path = /obj/item/clothing/head/welding/engie
/datum/gear/head/beret/solgov
display_name = "beret sol, selection"
display_name = "beret government, selection"
path = /obj/item/clothing/head/beret/solgov
/datum/gear/head/beret/solgov/New()
@@ -18,4 +18,28 @@
/datum/gear/head/detective_alt
display_name = "cyberscope headgear, detective"
path = /obj/item/clothing/head/helmet/detective_alt
allowed_roles = list("Head of Security", "Detective")
allowed_roles = list("Head of Security", "Detective")
/datum/gear/head/bearpelt
display_name = "brown bear pelt"
path = /obj/item/clothing/head/pelt
/datum/gear/head/wolfpelt
display_name = "brown wolf pelt"
path = /obj/item/clothing/head/pelt/wolfpelt
/datum/gear/head/wolfpeltblack
display_name = "black wolf pelt"
path = /obj/item/clothing/head/pelt/wolfpeltblack
/datum/gear/head/tigerpelt
display_name = "shiny tiger pelt"
path = /obj/item/clothing/head/pelt/tigerpelt
/datum/gear/head/tigerpeltsnow
display_name = "snow tiger pelt"
path = /obj/item/clothing/head/pelt/tigerpeltsnow
/datum/gear/head/tigerpeltpink
display_name = "pink tiger pelt"
path = /obj/item/clothing/head/pelt/tigerpeltpink
@@ -66,4 +66,9 @@
/datum/gear/suit/roles/medical/paramedic_vest
display_name = "paramedic vest"
path = /obj/item/clothing/suit/storage/toggle/paramedic
allowed_roles = list("Chief Medical Officer","Paramedic","Medical Doctor")
allowed_roles = list("Chief Medical Officer","Paramedic","Medical Doctor")
//greek thing
/datum/gear/suit/chiton
display_name = "chiton"
path = /obj/item/clothing/suit/chiton
@@ -65,7 +65,7 @@
..()
var/list/skirts = list()
for(var/skirt in (typesof(/obj/item/clothing/under/skirt)))
if(skirt in typesof(/obj/item/clothing/under/skirt/fluff)) //VOREStation addition
if((skirt in typesof(/obj/item/clothing/under/skirt/fluff)) || (skirt in typesof(/obj/item/clothing/under/skirt/outfit/fluff))) //VOREStation addition
continue //VOREStation addition
var/obj/item/clothing/under/skirt/skirt_type = skirt
skirts[initial(skirt_type.name)] = skirt_type
@@ -40,6 +40,15 @@
path = /obj/item/clothing/under/rank/khi/sci
allowed_roles = list("Research Director", "Scientist", "Roboticist", "Xenobiologist", "Xenobotanist", "Pathfinder", "Explorer")
/datum/gear/uniform/job_khi/crg
display_name = "khi uniform, cargo"
path = /obj/item/clothing/under/rank/khi/crg
allowed_roles = list("Quartermaster", "Cargo Technician", "Shaft Miner")
/datum/gear/uniform/job_khi/civ
display_name = "khi uniform, civ"
path = /obj/item/clothing/under/rank/khi/civ
//Federation jackets
/datum/gear/suit/job_fed/sec
display_name = "fed uniform, sec"
@@ -166,36 +166,41 @@
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/uniform/dept/undercoat/cap
display_name = "facility director undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/cap
allowed_roles = list("Facility Director")
/datum/gear/uniform/dept/undercoat/hop
display_name = "head of personnel undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/hop
allowed_roles = list("Head of Personnel")
/datum/gear/uniform/dept/undercoat/rd
display_name = "research director undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/rd
allowed_roles = list("Research Director")
/datum/gear/uniform/dept/undercoat/hos
display_name = "head of security undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/hos
allowed_roles = list("Head of Security")
/datum/gear/uniform/dept/undercoat/ce
display_name = "chief engineer undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/ce
allowed_roles = list("Chief Engineer")
/datum/gear/uniform/dept/undercoat/ce_w
display_name = "chief engineer undercoat - white (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/ce_w
allowed_roles = list("Chief Engineer")
/datum/gear/uniform/dept/undercoat/cmo
display_name = "chief medical officer undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/cmo
allowed_roles = list("Chief Medical Officer")
/datum/gear/uniform/dept/undercoat/qm
display_name = "quartermaster undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/qm
allowed_roles = list("Quartermaster")
/datum/gear/uniform/dept/undercoat/command
display_name = "command undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/command
allowed_roles = list("Site Manager","Head of Personnel","Head of Security","Chief Engineer","Chief Medical Officer","Research Director")
/datum/gear/uniform/dept/undercoat/command_g
display_name = "command undercoat - gold buttons (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/command_g
allowed_roles = list("Site Manager","Head of Personnel","Head of Security","Chief Engineer","Chief Medical Officer","Research Director")
/datum/gear/uniform/dept/undercoat/cmo
display_name = "chief medical officer undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/cmo
allowed_roles = list("Chief Medical Officer")
/datum/gear/uniform/dept/undercoat/cargo
display_name = "cargo undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/cargo
@@ -214,7 +219,7 @@
/datum/gear/uniform/dept/undercoat/service
display_name = "service undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/service
allowed_roles = list("Head of Personnel","Bartender","Botanist","Janitor","Chef","Librarian")
allowed_roles = list("Head of Personnel","Bartender","Botanist","Janitor","Chef","Librarian","Chaplain")
/datum/gear/uniform/dept/undercoat/engineer
display_name = "engineering undercoat (Teshari)"
@@ -234,122 +239,283 @@
/datum/gear/uniform/dept/undercoat/robo
display_name = "roboticist undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/robo
allowed_roles = list("Roboticist")
allowed_roles = list("Research Director","Roboticist")
/datum/gear/uniform/dept/undercoat/medical
display_name = "medical undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/medical
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Paramedic","Geneticist","Psychiatrist")
/datum/gear/uniform/dept/undercoat/chemistry
display_name = "chemist undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/chemistry
allowed_roles = list("Chemist")
allowed_roles = list("Chief Medical Officer","Chemist")
/datum/gear/uniform/dept/undercoat/virology
display_name = "virologist undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/viro
allowed_roles = list("Medical Doctor")
allowed_roles = list("Chief Medical Officer","Medical Doctor")
/datum/gear/uniform/dept/undercoat/psych
display_name = "psychiatrist undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/psych
allowed_roles = list("Chief Medical Officer","Psychiatrist")
/datum/gear/uniform/dept/undercoat/paramedic
display_name = "paramedic undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/para
allowed_roles = list("Paramedic")
allowed_roles = list("Chief Medical Officer","Paramedic")
/datum/gear/uniform/dept/undercoat/iaa
display_name = "internal affairs undercoat (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/jobs/iaa
allowed_roles = list("Internal Affairs Agent")
/datum/gear/suit/dept/cloak/
/datum/gear/suit/dept/cloak
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/suit/dept/cloak/cap
display_name = "facility director cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs
allowed_roles = list("Facility Director")
/datum/gear/suit/dept/cloak/hop
display_name = "head of personnel cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/hop
allowed_roles = list("Head of Personnel")
/datum/gear/suit/dept/cloak/rd
display_name = "research director cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/rd
allowed_roles = list("Research Director")
/datum/gear/suit/dept/cloak/hos
display_name = "head of security cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/hos
allowed_roles = list("Head of Security")
/datum/gear/suit/dept/cloak/hos/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/hos,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/hos))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/cloak/dept/ce
display_name = "chief engineer cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/ce
allowed_roles = list("Chief Engineer")
/datum/gear/suit/dept/cloak/qm
display_name = "quartermaster cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/qm
allowed_roles = list("Quartermaster")
/datum/gear/suit/dept/cloak/command
display_name = "command cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/command
allowed_roles = list("Site Manager","Head of Personnel","Head of Security","Chief Engineer","Chief Medical Officer","Research Director")
/datum/gear/suit/dept/cloak/ce/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/ce,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/ce))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/cmo
display_name = "chief medical officer cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/cmo
allowed_roles = list("Chief Medical Officer")
/datum/gear/suit/dept/cloak/cmo/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/cmo,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cmo))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/qm
display_name = "quartermaster cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/qm
allowed_roles = list("Chief Medical Officer")
/datum/gear/suit/dept/cloak/qm/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/qm,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/qm))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/cargo
display_name = "cargo cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/cargo
allowed_roles = list("Cargo Technician","Quartermaster","Shaft Miner")
allowed_roles = list("Quartermaster","Shaft Miner","Cargo Technician")
/datum/gear/suit/dept/cloak/cargo/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/cargo,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cargo))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/mining
display_name = "mining cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/mining
allowed_roles = list("Quartermaster","Shaft Miner")
/datum/gear/suit/dept/cloak/mining/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/mining,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/mining))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/security
display_name = "security cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/sec
allowed_roles = list("Head of Security","Detective","Warden","Security Officer",)
allowed_roles = list("Head of Security","Detective","Warden","Security Officer")
/datum/gear/suit/dept/cloak/security/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/sec,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/sec))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/service
display_name = "service cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/service
allowed_roles = list("Head of Personnel","Bartender","Botanist","Janitor","Chef","Librarian")
allowed_roles = list("Head of Personnel","Bartender","Botanist","Janitor","Chef","Librarian","Chaplain")
/datum/gear/suit/dept/cloak/service/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/service,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/service))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/engineer
display_name = "engineering cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/eningeer
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/engineer
allowed_roles = list("Chief Engineer","Station Engineer")
/datum/gear/suit/dept/cloak/engineer/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/engineer,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/engineer))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/atmos
display_name = "atmospherics cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/atmos
allowed_roles = list("Chief Engineer","Atmospheric Technician")
/datum/gear/suit/dept/cloak/atmos/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/atmos,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/atmos))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/research
display_name = "scientist cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/sci
allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist")
allowed_roles = list("Research Director","Scientist","Roboticist","Xenobiologist")
/datum/gear/suit/dept/cloak/research/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/sci,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/sci))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/robo
display_name = "roboticist cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/robo
allowed_roles = list("Roboticist")
allowed_roles = list("Research Director","Roboticist")
/datum/gear/suit/dept/cloak/robo/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/robo,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/robo))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/medical
display_name = "medical cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/medical
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist")
allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Paramedic","Geneticist", "Psychiatrist")
/datum/gear/suit/dept/cloak/medical/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/medical,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/medical))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/chemistry
display_name = "chemist cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/chemistry
allowed_roles = list("Chemist")
/datum/gear/suit/dept/cloak/chemistry/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/chemistry,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/chemistry))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/virology
display_name = "virologist cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/viro
allowed_roles = list("Medical Doctor")
/datum/gear/suit/dept/cloak/virology/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/viro,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/viro))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/psych
display_name = "psychiatrist cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/psych
allowed_roles = list("Chief Medical Officer","Psychiatrist")
/datum/gear/suit/dept/cloak/paramedic
display_name = "paramedic cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/para
allowed_roles = list("Paramedic")
allowed_roles = list("Chief Medical Officer","Paramedic")
/datum/gear/suit/dept/cloak/paramedic/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/para,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/para))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/dept/cloak/iaa
display_name = "internal affairs cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/cloak/jobs/iaa
allowed_roles = list("Internal Affairs Agent")
/datum/gear/suit/dept/cloak/iaa/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/cloak/jobs/iaa,/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/iaa))
var/obj/item/clothing/suit/storage/seromi/beltcloak/jobs/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/uniform/smockcolor
display_name = "smock, recolorable (Teshari)"
path = /obj/item/clothing/under/seromi/smock/white
@@ -360,6 +526,73 @@
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/beltcloak
display_name = "belted cloak selection (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/beltcloak/standard
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/suit/beltcloak/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/seromi/beltcloak/standard))
var/obj/item/clothing/suit/storage/seromi/beltcloak/standard/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/suit/beltcloak_color
display_name = "belted cloak, recolorable (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/beltcloak/standard/white_grey
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/suit/beltcloak_color/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/dept/beltcloak/wrdn
display_name = "warden belted cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/beltcloak/jobs/wrdn
allowed_roles = list("Head of Security","Warden")
/datum/gear/suit/dept/beltcloak/jani
display_name = "janitor belted cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/beltcloak/jobs/jani
allowed_roles = list("Janitor")
/datum/gear/suit/dept/beltcloak/cmd
display_name = "command belted cloak (Teshari)"
path = /obj/item/clothing/suit/storage/seromi/beltcloak/jobs/command
allowed_roles = list("Site Manager","Head of Personnel","Head of Security","Chief Engineer","Chief Medical Officer","Research Director")
/datum/gear/suit/cloak_hood
display_name = "hooded cloak selection (Teshari)"
path = /obj/item/clothing/suit/storage/hooded/teshari/standard
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/suit/cloak_hood/New()
..()
var/list/cloaks = list()
for(var/cloak in typesof(/obj/item/clothing/suit/storage/hooded/teshari/standard))
var/obj/item/clothing/suit/storage/seromi/cloak/cloak_type = cloak
cloaks[initial(cloak_type.name)] = cloak_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cloaks))
/datum/gear/uniform/worksuit
display_name = "worksuit selection (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/standard/worksuit
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
/datum/gear/uniform/worksuit/New()
..()
var/list/worksuits = list()
for(var/worksuit in typesof(/obj/item/clothing/under/seromi/undercoat/standard/worksuit))
var/obj/item/clothing/under/seromi/undercoat/standard/worksuit/worksuit_type = worksuit
worksuits[initial(worksuit_type.name)] = worksuit_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(worksuits))
/datum/gear/uniform/undercoatcolor
display_name = "undercoat, recolorable (Teshari)"
path = /obj/item/clothing/under/seromi/undercoat/standard/white_grey
@@ -379,6 +612,7 @@
/datum/gear/suit/cloakcolor/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/labcoat_tesh
display_name = "labcoat, colorable (Teshari)"
path = /obj/item/clothing/suit/storage/toggle/labcoat/teshari
@@ -397,7 +631,6 @@
/datum/gear/suit/teshcoat/New()
..()
gear_tweaks += gear_tweak_free_color_choice
/datum/gear/suit/teshcoatwhite
@@ -424,11 +657,16 @@
display_name = "toe-less jackboots"
path = /obj/item/clothing/shoes/boots/jackboots/toeless
/datum/gear/shoes/toelessknee
display_name = "toe-less jackboots, knee-length"
path = /obj/item/clothing/shoes/boots/jackboots/toeless/knee
/datum/gear/shoes/toelessthigh
display_name = "toe-less jackboots, thigh-length"
path = /obj/item/clothing/shoes/boots/jackboots/toeless/thigh
path = /obj/item/clothing/shoes/boots/jackboots/toeless/thigh
/datum/gear/eyes/aerogelgoggles
display_name = "airtight orange goggles (Teshari)"
path = /obj/item/clothing/glasses/aerogelgoggles
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
@@ -23,7 +23,12 @@
// 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
@@ -194,6 +199,7 @@
// 'Mental' traits are just those that only sapients can have, for now, and generally involves fears.
// So far, all of them are just for fluff/don't have mechanical effects.
/datum/trait/modifier/mental
name = "Mental"
category = "Mental"
/datum/trait/modifier/mental/test_for_invalidity(var/datum/category_item/player_setup_item/traits/setup)
@@ -13,6 +13,9 @@
var/r_ears2 = 30 // Ear extra color.
var/g_ears2 = 30 // Ear extra color
var/b_ears2 = 30 // Ear extra color
var/r_ears3 = 30 // Ear tertiary color.
var/g_ears3 = 30 // Ear tertiary color
var/b_ears3 = 30 // Ear tertiary color
var/tail_style // Type of selected tail style
var/r_tail = 30 // Tail/Taur color
var/g_tail = 30 // Tail/Taur color
@@ -20,6 +23,9 @@
var/r_tail2 = 30 // For extra overlay.
var/g_tail2 = 30 // For extra overlay.
var/b_tail2 = 30 // For extra overlay.
var/r_tail3 = 30 // For tertiary overlay.
var/g_tail3 = 30 // For tertiary overlay.
var/b_tail3 = 30 // For tertiary overlay.
var/wing_style // Type of selected wing style
var/r_wing = 30 // Wing color
var/g_wing = 30 // Wing color
@@ -27,6 +33,9 @@
var/r_wing2 = 30 // Wing extra color
var/g_wing2 = 30 // Wing extra color
var/b_wing2 = 30 // Wing extra color
var/r_wing3 = 30 // Wing tertiary color
var/g_wing3 = 30 // Wing tertiary color
var/b_wing3 = 30 // Wing tertiary color
// Definition of the stuff for Ears
/datum/category_item/player_setup_item/vore/ears
@@ -41,6 +50,9 @@
S["r_ears2"] >> pref.r_ears2
S["g_ears2"] >> pref.g_ears2
S["b_ears2"] >> pref.b_ears2
S["r_ears3"] >> pref.r_ears3
S["g_ears3"] >> pref.g_ears3
S["b_ears3"] >> pref.b_ears3
S["tail_style"] >> pref.tail_style
S["r_tail"] >> pref.r_tail
S["g_tail"] >> pref.g_tail
@@ -48,6 +60,9 @@
S["r_tail2"] >> pref.r_tail2
S["g_tail2"] >> pref.g_tail2
S["b_tail2"] >> pref.b_tail2
S["r_tail3"] >> pref.r_tail3
S["g_tail3"] >> pref.g_tail3
S["b_tail3"] >> pref.b_tail3
S["wing_style"] >> pref.wing_style
S["r_wing"] >> pref.r_wing
S["g_wing"] >> pref.g_wing
@@ -55,6 +70,9 @@
S["r_wing2"] >> pref.r_wing2
S["g_wing2"] >> pref.g_wing2
S["b_wing2"] >> pref.b_wing2
S["r_wing3"] >> pref.r_wing3
S["g_wing3"] >> pref.g_wing3
S["b_wing3"] >> pref.b_wing3
/datum/category_item/player_setup_item/vore/ears/save_character(var/savefile/S)
S["ear_style"] << pref.ear_style
@@ -64,6 +82,9 @@
S["r_ears2"] << pref.r_ears2
S["g_ears2"] << pref.g_ears2
S["b_ears2"] << pref.b_ears2
S["r_ears3"] << pref.r_ears3
S["g_ears3"] << pref.g_ears3
S["b_ears3"] << pref.b_ears3
S["tail_style"] << pref.tail_style
S["r_tail"] << pref.r_tail
S["g_tail"] << pref.g_tail
@@ -71,6 +92,9 @@
S["r_tail2"] << pref.r_tail2
S["g_tail2"] << pref.g_tail2
S["b_tail2"] << pref.b_tail2
S["r_tail3"] << pref.r_tail3
S["g_tail3"] << pref.g_tail3
S["b_tail3"] << pref.b_tail3
S["wing_style"] << pref.wing_style
S["r_wing"] << pref.r_wing
S["g_wing"] << pref.g_wing
@@ -78,6 +102,9 @@
S["r_wing2"] << pref.r_wing2
S["g_wing2"] << pref.g_wing2
S["b_wing2"] << pref.b_wing2
S["r_wing3"] << pref.r_wing3
S["g_wing3"] << pref.g_wing3
S["b_wing3"] << pref.b_wing3
/datum/category_item/player_setup_item/vore/ears/sanitize_character()
pref.r_ears = sanitize_integer(pref.r_ears, 0, 255, initial(pref.r_ears))
@@ -86,18 +113,28 @@
pref.r_ears2 = sanitize_integer(pref.r_ears2, 0, 255, initial(pref.r_ears2))
pref.g_ears2 = sanitize_integer(pref.g_ears2, 0, 255, initial(pref.g_ears2))
pref.b_ears2 = sanitize_integer(pref.b_ears2, 0, 255, initial(pref.b_ears2))
pref.r_ears3 = sanitize_integer(pref.r_ears3, 0, 255, initial(pref.r_ears3))
pref.g_ears3 = sanitize_integer(pref.g_ears3, 0, 255, initial(pref.g_ears3))
pref.b_ears3 = sanitize_integer(pref.b_ears3, 0, 255, initial(pref.b_ears3))
pref.r_tail = sanitize_integer(pref.r_tail, 0, 255, initial(pref.r_tail))
pref.g_tail = sanitize_integer(pref.g_tail, 0, 255, initial(pref.g_tail))
pref.b_tail = sanitize_integer(pref.b_tail, 0, 255, initial(pref.b_tail))
pref.r_tail2 = sanitize_integer(pref.r_tail2, 0, 255, initial(pref.r_tail2))
pref.g_tail2 = sanitize_integer(pref.g_tail2, 0, 255, initial(pref.g_tail2))
pref.b_tail2 = sanitize_integer(pref.b_tail2, 0, 255, initial(pref.b_tail2))
pref.r_tail3 = sanitize_integer(pref.r_tail3, 0, 255, initial(pref.r_tail3))
pref.g_tail3 = sanitize_integer(pref.g_tail3, 0, 255, initial(pref.g_tail3))
pref.b_tail3 = sanitize_integer(pref.b_tail3, 0, 255, initial(pref.b_tail3))
pref.r_wing = sanitize_integer(pref.r_wing, 0, 255, initial(pref.r_wing))
pref.g_wing = sanitize_integer(pref.g_wing, 0, 255, initial(pref.g_wing))
pref.b_wing = sanitize_integer(pref.b_wing, 0, 255, initial(pref.b_wing))
pref.r_wing2 = sanitize_integer(pref.r_wing2, 0, 255, initial(pref.r_wing2))
pref.g_wing2 = sanitize_integer(pref.g_wing2, 0, 255, initial(pref.g_wing2))
pref.b_wing2 = sanitize_integer(pref.b_wing2, 0, 255, initial(pref.b_wing2))
pref.r_wing3 = sanitize_integer(pref.r_wing3, 0, 255, initial(pref.r_wing3))
pref.g_wing3 = sanitize_integer(pref.g_wing3, 0, 255, initial(pref.g_wing3))
pref.b_wing3 = sanitize_integer(pref.b_wing3, 0, 255, initial(pref.b_wing3))
if(pref.ear_style)
pref.ear_style = sanitize_inlist(pref.ear_style, ear_styles_list, initial(pref.ear_style))
var/datum/sprite_accessory/temp_ear_style = ear_styles_list[pref.ear_style]
@@ -122,6 +159,9 @@
character.r_ears2 = pref.r_ears2
character.b_ears2 = pref.b_ears2
character.g_ears2 = pref.g_ears2
character.r_ears3 = pref.r_ears3
character.b_ears3 = pref.b_ears3
character.g_ears3 = pref.g_ears3
character.tail_style = tail_styles_list[pref.tail_style]
character.r_tail = pref.r_tail
character.b_tail = pref.b_tail
@@ -129,6 +169,9 @@
character.r_tail2 = pref.r_tail2
character.b_tail2 = pref.b_tail2
character.g_tail2 = pref.g_tail2
character.r_tail3 = pref.r_tail3
character.b_tail3 = pref.b_tail3
character.g_tail3 = pref.g_tail3
character.wing_style = wing_styles_list[pref.wing_style]
character.r_wing = pref.r_wing
character.b_wing = pref.b_wing
@@ -136,6 +179,9 @@
character.r_wing2 = pref.r_wing2
character.b_wing2 = pref.b_wing2
character.g_wing2 = pref.g_wing2
character.r_wing3 = pref.r_wing3
character.b_wing3 = pref.b_wing3
character.g_wing3 = pref.g_wing3
@@ -153,10 +199,12 @@
. += " Style: <a href='?src=\ref[src];ear_style=1'>[ear_display]</a><br>"
if(ear_styles_list[pref.ear_style])
var/datum/sprite_accessory/ears/ear = ear_styles_list[pref.ear_style]
if (ear.do_colouration)
if(ear.do_colouration)
. += "<a href='?src=\ref[src];ear_color=1'>Change Color</a> [color_square(pref.r_ears, pref.g_ears, pref.b_ears)]<br>"
if (ear.extra_overlay)
if(ear.extra_overlay)
. += "<a href='?src=\ref[src];ear_color2=1'>Change Secondary Color</a> [color_square(pref.r_ears2, pref.g_ears2, pref.b_ears2)]<br>"
if(ear.extra_overlay2)
. += "<a href='?src=\ref[src];ear_color3=1'>Change Tertiary Color</a> [color_square(pref.r_ears3, pref.g_ears3, pref.b_ears3)]<br>"
var/tail_display = "Normal"
if(pref.tail_style && (pref.tail_style in tail_styles_list))
@@ -169,10 +217,12 @@
if(tail_styles_list[pref.tail_style])
var/datum/sprite_accessory/tail/T = tail_styles_list[pref.tail_style]
if (T.do_colouration)
if(T.do_colouration)
. += "<a href='?src=\ref[src];tail_color=1'>Change Color</a> [color_square(pref.r_tail, pref.g_tail, pref.b_tail)]<br>"
if (T.extra_overlay)
if(T.extra_overlay)
. += "<a href='?src=\ref[src];tail_color2=1'>Change Secondary Color</a> [color_square(pref.r_tail2, pref.g_tail2, pref.b_tail2)]<br>"
if(T.extra_overlay2)
. += "<a href='?src=\ref[src];tail_color3=1'>Change Tertiary Color</a> [color_square(pref.r_tail3, pref.g_tail3, pref.b_tail3)]<br>"
var/wing_display = "Normal"
if(pref.wing_style && (pref.wing_style in wing_styles_list))
@@ -189,6 +239,8 @@
. += "<a href='?src=\ref[src];wing_color=1'>Change Color</a> [color_square(pref.r_wing, pref.g_wing, pref.b_wing)]<br>"
if (W.extra_overlay)
. += "<a href='?src=\ref[src];wing_color2=1'>Change Secondary Color</a> [color_square(pref.r_wing2, pref.g_wing2, pref.b_wing2)]<br>"
if (W.extra_overlay2)
. += "<a href='?src=\ref[src];wing_color3=1'>Change Secondary Color</a> [color_square(pref.r_wing3, pref.g_wing3, pref.b_wing3)]<br>"
/datum/category_item/player_setup_item/vore/ears/OnTopic(var/href,var/list/href_list, var/mob/user)
if(!CanUseTopic(user))
@@ -219,7 +271,7 @@
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["ear_color2"])
var/new_earc2 = input(user, "Choose your character's ear colour:", "Character Preference",
var/new_earc2 = input(user, "Choose your character's secondary ear colour:", "Character Preference",
rgb(pref.r_ears2, pref.g_ears2, pref.b_ears2)) as color|null
if(new_earc2)
pref.r_ears2 = hex2num(copytext(new_earc2, 2, 4))
@@ -227,6 +279,15 @@
pref.b_ears2 = hex2num(copytext(new_earc2, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["ear_color3"])
var/new_earc3 = input(user, "Choose your character's tertiary ear colour:", "Character Preference",
rgb(pref.r_ears3, pref.g_ears3, pref.b_ears3)) as color|null
if(new_earc3)
pref.r_ears3 = hex2num(copytext(new_earc3, 2, 4))
pref.g_ears3 = hex2num(copytext(new_earc3, 4, 6))
pref.b_ears3 = hex2num(copytext(new_earc3, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["tail_style"])
// Construct the list of names allowed for this user.
var/list/pretty_tail_styles = list("Normal" = null)
@@ -260,6 +321,15 @@
pref.b_tail2 = hex2num(copytext(new_tailc2, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["tail_color3"])
var/new_tailc3 = input(user, "Choose your character's tertiary tail/taur colour:", "Character Preference",
rgb(pref.r_tail3, pref.g_tail3, pref.b_tail3)) as color|null
if(new_tailc3)
pref.r_tail3 = hex2num(copytext(new_tailc3, 2, 4))
pref.g_tail3 = hex2num(copytext(new_tailc3, 4, 6))
pref.b_tail3 = hex2num(copytext(new_tailc3, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["wing_style"])
// Construct the list of names allowed for this user.
var/list/pretty_wing_styles = list("Normal" = null)
@@ -293,4 +363,13 @@
pref.b_wing2 = hex2num(copytext(new_wingc2, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["wing_color3"])
var/new_wingc3 = input(user, "Choose your character's tertiary wing colour:", "Character Preference",
rgb(pref.r_wing3, pref.g_wing3, pref.b_wing3)) as color|null
if(new_wingc3)
pref.r_wing3 = hex2num(copytext(new_wingc3, 2, 4))
pref.g_wing3 = hex2num(copytext(new_wingc3, 4, 6))
pref.b_wing3 = hex2num(copytext(new_wingc3, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
return ..()
@@ -45,7 +45,6 @@
character.weight_gain = pref.weight_gain
character.weight_loss = pref.weight_loss
character.fuzzy = pref.fuzzy
character.appearance_flags -= pref.fuzzy*PIXEL_SCALE
character.resize(pref.size_multiplier, animate = FALSE)
/datum/category_item/player_setup_item/vore/size/content(var/mob/user)
@@ -70,7 +69,7 @@
else if(href_list["toggle_fuzzy"])
pref.fuzzy = pref.fuzzy ? 0 : 1;
return TOPIC_REFRESH
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["weight"])
var/new_weight = input(user, "Choose your character's relative body weight.\n\
@@ -1,15 +1,3 @@
var/UNATHI_EGG = "Unathi"
var/TAJARAN_EGG = "Tajaran"
var/AKULA_EGG = "Akula"
var/SKRELL_EGG = "Skrell"
var/SERGAL_EGG = "Sergal"
var/HUMAN_EGG = "Human"
var/NEVREAN_EGG = "nevrean"
var/SLIME_EGG = "Slime"
var/EGG_EGG = "Egg"
var/XENOCHIMERA_EGG = "Xenochimera"
var/XENOMORPH_EGG = "Xenomorph"
// Define a place to save appearance in character setup
/datum/preferences
var/vore_egg_type = "Egg" //The egg type they have.
@@ -26,8 +14,7 @@ var/XENOMORPH_EGG = "Xenomorph"
S["vore_egg_type"] << pref.vore_egg_type
/datum/category_item/player_setup_item/vore/egg/sanitize_character()
var/valid_vore_egg_types = global_vore_egg_types
pref.vore_egg_type = sanitize_inlist(pref.vore_egg_type, valid_vore_egg_types, initial(pref.vore_egg_type))
pref.vore_egg_type = sanitize_inlist(pref.vore_egg_type, global_vore_egg_types, initial(pref.vore_egg_type))
/datum/category_item/player_setup_item/vore/egg/copy_to_mob(var/mob/living/carbon/human/character)
character.vore_egg_type = pref.vore_egg_type
@@ -44,7 +31,7 @@ var/XENOMORPH_EGG = "Xenomorph"
var/list/vore_egg_types = global_vore_egg_types
var/selection = input(user, "Choose your character's egg type:", "Character Preference", pref.vore_egg_type) as null|anything in vore_egg_types
if(selection)
pref.vore_egg_type = vore_egg_types[selection]
pref.vore_egg_type = selection
return TOPIC_REFRESH
else
return
@@ -2,6 +2,9 @@
#define NEUTRAL_MODE 2
#define NEGATIVE_MODE 3
#define ORGANICS 1
#define SYNTHETICS 2
/datum/preferences
var/custom_species // Custom species name, can't be changed due to it having been used in savefiles already.
var/custom_base // What to base the custom species on
@@ -15,6 +18,7 @@
var/starting_trait_points = STARTING_SPECIES_POINTS
var/max_traits = MAX_SPECIES_TRAITS
var/dirty_synth = 0 //Are you a synth
var/gross_meatbag = 0 //Where'd I leave my Voight-Kampff test kit?
// Definition of the stuff for Ears
/datum/category_item/player_setup_item/vore/traits
@@ -58,21 +62,21 @@
if(pref.species != SPECIES_CUSTOM)
pref.pos_traits.Cut()
pref.neu_traits.Cut()
pref.neg_traits.Cut()
else
// Clean up positive traits
for(var/path in pref.pos_traits)
if(!(path in positive_traits))
pref.pos_traits -= path
//Neutral traits
for(var/path in pref.neu_traits)
if(!(path in neutral_traits))
pref.neu_traits -= path
//Negative traits
for(var/path in pref.neg_traits)
if(!(path in negative_traits))
pref.neg_traits -= path
// Clean up positive traits
for(var/path in pref.pos_traits)
if(!(path in positive_traits))
pref.pos_traits -= path
//Neutral traits
for(var/path in pref.neu_traits)
if(!(path in neutral_traits))
pref.neu_traits -= path
if(!(pref.species == SPECIES_CUSTOM) && !(path in everyone_traits))
pref.neu_traits -= path
//Negative traits
for(var/path in pref.neg_traits)
if(!(path in negative_traits))
pref.neg_traits -= path
var/datum/species/selected_species = GLOB.all_species[pref.species]
if(selected_species.selects_bodytype)
@@ -82,23 +86,31 @@
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
character.custom_species = pref.custom_species
var/datum/species/selected_species = GLOB.all_species[pref.species]
if(character.isSynthetic()) //Checking if we have a synth on our hands, boys.
pref.dirty_synth = 1
pref.gross_meatbag = 0
else
pref.gross_meatbag = 1
pref.dirty_synth = 0
if(selected_species.selects_bodytype)
var/datum/species/custom/CS = character.species
var/S = pref.custom_base ? pref.custom_base : "Human"
var/datum/species/custom/new_CS = CS.produceCopy(S, pref.pos_traits + pref.neu_traits + pref.neg_traits, character)
var/datum/species/S = character.species
var/SB
if(S.selects_bodytype)
SB = pref.custom_base ? pref.custom_base : "Human"
else
SB = S.name
var/datum/species/new_S = S.produceCopy(SB, pref.pos_traits + pref.neu_traits + pref.neg_traits, character)
//Any additional non-trait settings can be applied here
new_CS.blood_color = pref.blood_color
//Any additional non-trait settings can be applied here
new_S.blood_color = pref.blood_color
if(pref.species == SPECIES_CUSTOM)
//Statistics for this would be nice
var/english_traits = english_list(new_S.traits, and_text = ";", comma_text = ";")
log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet
else
if(pref.species == SPECIES_CUSTOM)
//Statistics for this would be nice
var/english_traits = english_list(new_CS.traits, and_text = ";", comma_text = ";")
log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet
/datum/category_item/player_setup_item/vore/traits/content(var/mob/user)
. += "<b>Custom Species Name:</b> "
@@ -109,15 +121,16 @@
. += "<b>Icon Base: </b> "
. += "<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
var/traits_left = pref.max_traits
for(var/T in pref.pos_traits + pref.neg_traits)
points_left -= traits_costs[T]
traits_left--
. += "<b>Points Left:</b> [points_left]<br>"
. += "<b>Traits Left:</b> [traits_left]<br>"
if(points_left < 0 || traits_left < 0 || !pref.custom_species)
. += "<span style='color:red;'><b>^ Fix things! ^</b></span><br>"
@@ -128,19 +141,18 @@
. += "<li>- <a href='?src=\ref[src];clicked_pos_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "</ul>"
. += "<a href='?src=\ref[src];add_trait=[NEUTRAL_MODE]'>Neutral Trait +</a><br>"
. += "<ul>"
for(var/T in pref.neu_traits)
var/datum/trait/trait = neutral_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_neu_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "</ul>"
. += "<a href='?src=\ref[src];add_trait=[NEGATIVE_MODE]'>Negative Trait +</a><br>"
. += "<ul>"
for(var/T in pref.neg_traits)
var/datum/trait/trait = negative_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_neg_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "</ul>"
. += "<a href='?src=\ref[src];add_trait=[NEUTRAL_MODE]'>Neutral Trait +</a><br>"
. += "<ul>"
for(var/T in pref.neu_traits)
var/datum/trait/trait = neutral_traits[T]
. += "<li>- <a href='?src=\ref[src];clicked_neu_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
. += "</ul>"
. += "<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>"
@@ -213,8 +225,12 @@
picklist = positive_traits.Copy() - pref.pos_traits
mylist = pref.pos_traits
if(NEUTRAL_MODE)
picklist = neutral_traits.Copy() - pref.neu_traits
mylist = pref.neu_traits
if(pref.species == SPECIES_CUSTOM)
picklist = neutral_traits.Copy() - pref.neu_traits
mylist = pref.neu_traits
else
picklist = everyone_traits.Copy() - pref.neu_traits
mylist = pref.neu_traits
if(NEGATIVE_MODE)
picklist = negative_traits.Copy() - pref.neg_traits
mylist = pref.neg_traits
@@ -260,13 +276,19 @@
var/conflict = FALSE
user.isSynthetic() //Recheck just to be sure
if(pref.dirty_synth && instance.not_for_synths)//if you are a synth you can't take this trait.
alert("You cannot take this trait as a SYNTH.\
Please remove that trait, or pick another trait to add.","Error")
if(pref.dirty_synth && !(instance.can_take & SYNTHETICS))
alert("The trait you've selected can only be taken by organic characters!","Error")
pref.dirty_synth = 0 //Just to be sure
return TOPIC_REFRESH
if(pref.gross_meatbag && !(instance.can_take & ORGANICS))
alert("The trait you've selected can only be taken by synthetic characters!","Error")
pref.gross_meatbag = 0 //Just to be sure
return TOPIC_REFRESH
if(pref.species in instance.banned_species)
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
@@ -6,10 +6,16 @@
/datum/category_item/player_setup_item/vore/misc/load_character(var/savefile/S)
S["show_in_directory"] >> pref.show_in_directory
S["directory_tag"] >> pref.directory_tag
S["directory_erptag"] >> pref.directory_erptag
S["directory_ad"] >> pref.directory_ad
S["sensorpref"] >> pref.sensorpref //TFF 5/8/19 - add sensor pref setting to load after saved
/datum/category_item/player_setup_item/vore/misc/save_character(var/savefile/S)
S["show_in_directory"] << pref.show_in_directory
S["directory_tag"] << pref.directory_tag
S["directory_erptag"] << pref.directory_erptag
S["directory_ad"] << pref.directory_ad
S["sensorpref"] << pref.sensorpref //TFF 5/8/19 - add sensor pref setting to be saveable
//TFF 5/8/19 - add new datum category to allow for setting multiple settings when this is selected in the loadout.
@@ -20,17 +26,38 @@
/datum/category_item/player_setup_item/vore/misc/sanitize_character()
pref.show_in_directory = sanitize_integer(pref.show_in_directory, 0, 1, initial(pref.show_in_directory))
pref.directory_tag = sanitize_inlist(pref.directory_tag, GLOB.char_directory_tags, initial(pref.directory_tag))
pref.directory_erptag = sanitize_inlist(pref.directory_erptag, GLOB.char_directory_erptags, initial(pref.directory_erptag))
pref.sensorpref = sanitize_integer(pref.sensorpref, 1, sensorpreflist.len, initial(pref.sensorpref)) //TFF - 5/8/19 - add santisation for sensor prefs
/datum/category_item/player_setup_item/vore/misc/content(var/mob/user)
. += "<br>"
. += "<b>Appear in Character Directory:</b> <a [pref.show_in_directory ? "class='linkOn'" : ""] href='?src=\ref[src];toggle_show_in_directory=1'><b>[pref.show_in_directory ? "Yes" : "No"]</b></a><br>"
. += "<b>Character Directory Vore Tag:</b> <a href='?src=\ref[src];directory_tag=1'><b>[pref.directory_tag]</b></a><br>"
. += "<b>Character Directory ERP Tag:</b> <a href='?src=\ref[src];directory_erptag=1'><b>[pref.directory_erptag]</b></a><br>"
. += "<b>Character Directory Advertisement:</b> <a href='?src=\ref[src];directory_ad=1'><b>Set Directory Ad</b></a><br>"
. += "<b>Suit Sensors Preference:</b> <a [pref.sensorpref ? "" : ""] href='?src=\ref[src];toggle_sensor_setting=1'><b>[sensorpreflist[pref.sensorpref]]</b></a><br>" //TFF 5/8/19 - Allow selection of sensor settings from off, binary, vitals, tracking, or random
/datum/category_item/player_setup_item/vore/misc/OnTopic(var/href, var/list/href_list, var/mob/user)
if(href_list["toggle_show_in_directory"])
pref.show_in_directory = pref.show_in_directory ? 0 : 1;
return TOPIC_REFRESH
else if(href_list["directory_tag"])
var/new_tag = input(user, "Pick a new Vore tag for the character directory", "Character Vore Tag", pref.directory_tag) as null|anything in GLOB.char_directory_tags
if(!new_tag)
return
pref.directory_tag = new_tag
return TOPIC_REFRESH
else if(href_list["directory_erptag"])
var/new_erptag = input(user, "Pick a new ERP tag for the character directory", "Character ERP Tag", pref.directory_erptag) as null|anything in GLOB.char_directory_erptags
if(!new_erptag)
return
pref.directory_erptag = new_erptag
return TOPIC_REFRESH
else if(href_list["directory_ad"])
var/msg = sanitize(input(user,"Write your advertisement here!", "Flavor Text", html_decode(pref.directory_ad)) as message, extra = 0) //VOREStation Edit: separating out OOC notes
pref.directory_ad = msg
return TOPIC_REFRESH
//TFF 5/8/19 - add new thing so you can choose the sensor setting your character can get.
else if(href_list["toggle_sensor_setting"])
var/new_sensorpref = input(user, "Choose your character's sensor preferences:", "Character Preferences", sensorpreflist[pref.sensorpref]) as null|anything in sensorpreflist