Whitelist backend changes (#4996)

<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
Whitelist are run by name, so renaming a whitelisted species also needs
an update to the WL as well.
Removes a shitty gimmick of a mirror most people dont have access to
because its a fucking nightmare of conditions we partially removed
and a fix for both runtimes and uninteded stat cheating
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
del: Removed the code behind the raider mirror
fix: fixed the shadekin traits applying to non shadekin
config: changed WL using Species ID rather than name
refactor: changed character species to always have a superspecies_id
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
This commit is contained in:
Felix
2023-01-27 01:17:33 -08:00
committed by GitHub
parent 01f0f4cd90
commit 287fb079d1
40 changed files with 99 additions and 82 deletions
+2 -2
View File
@@ -33,7 +33,7 @@
#define SPECIES_ID_SCORI "scori"
#define SPECIES_ID_SERGLING "sergling"
#define SPECIES_ID_SHADEKIN "shadekin"
#define SPECIES_ID_SHADEKIN_BLACK "shadekin_black"
#define SPECIES_ID_SHADEKIN_BLACK "blackeyedshadekin"
#define SPECIES_ID_SHADOW "shadow"
#define SPECIES_ID_SKELETON "skeleton"
#define SPECIES_ID_SKRELL "skrell"
@@ -65,7 +65,7 @@
#define SPECIES_ID_XENOMORPH_HUNTER "xenomorph_hunter"
#define SPECIES_ID_XENOMORPH_QUEEN "xenomorph_queen"
#define SPECIES_ID_XENOMORPH_SENTINEL "xenomorph_sentinel"
#define SPECIES_ID_XENOHYBRID "xenohybrid"
#define SPECIES_ID_XENOHYBRID "xenomorph_hybrid"
#define SPECIES_ID_ZADDAT "zaddat"
#define SPECIES_ID_ZORREN "zorren"
#define SPECIES_ID_ZORREN_HIGH "zorren_high"
+3
View File
@@ -72,6 +72,8 @@ DEFINE_BITFIELD(species_fluff_flags, list(
#define SPECIES_SPAWN_SECRET (1<<3)
/// Cannot normally spawn; something must pass in PREFS_COPY_TO_NO_CHECK_SPECIES to spawn checks to use!
#define SPECIES_SPAWN_RESTRICTED (1<<4)
/// if set, check species.id in WL, otherwise use uid
#define SPECIES_SPAWN_WHITELIST_FLEXIBLE (1<<5)
//? FLAGS ABOVE ARE RELEVANT TO UI.
//? If you change them, change necessary TGUI too.
//? Current TGUI that uses this:
@@ -92,6 +94,7 @@ DEFINE_BITFIELD(species_spawn_flags, list(
BITFIELD(SPECIES_SPAWN_NO_FBP_CONSTRUCT),
BITFIELD(SPECIES_SPAWN_NO_FBP_SETUP),
BITFIELD(SPECIES_SPAWN_NO_ROBOTIC_ORGANS),
BITFIELD(SPECIES_SPAWN_WHITELIST_FLEXIBLE),
))
//! species_appearance_flags
+1 -1
View File
@@ -7,7 +7,7 @@
var/list/job_whitelist = list()
/**
* name, ckey must be CKEY()'d.
* name and ckey must be CKEY()'d.
*/
/datum/controller/configuration/proc/check_alien_whitelist(name, ckey)
if(!config_legacy.usealienwhitelist)
@@ -22,7 +22,6 @@
species_paths = list()
species_names = list()
playable_species = list()
whitelisted_species = list()
custom_species_bases = list()
var/static/list/blacklisted_icon_ids = list(SPECIES_ID_CUSTOM, SPECIES_ID_PROMETHEAN)
var/static/list/whitelisted_icon_ids = list(SPECIES_ID_VULPKANIN, SPECIES_ID_XENOMORPH_HUNTER)
@@ -41,17 +40,15 @@
species_names[S.name] = S
species_paths[path] = S
if(S.species_spawn_flags & SPECIES_SPAWN_WHITELISTED)
whitelisted_species += S.name
if(!(S.species_spawn_flags & SPECIES_SPAWN_SPECIAL))
playable_species += S.name
playable_species += S.uid
if((!(S.species_spawn_flags & (SPECIES_SPAWN_WHITELISTED | SPECIES_SPAWN_SPECIAL)) && !(S.get_species_id() in blacklisted_icon_ids)) || (S.get_species_id() in whitelisted_icon_ids))
custom_species_bases += S.name
tim_sort(species_lookup, /proc/cmp_auto_compare, TRUE)
tim_sort(species_names, /proc/cmp_auto_compare, TRUE)
tim_sort(species_lookup, /proc/cmp_auto_compare, TRUE)
tim_sort(whitelisted_species, /proc/cmp_auto_compare)
tim_sort(playable_species, /proc/cmp_auto_compare)
tim_sort(custom_species_bases, /proc/cmp_auto_compare)
+2 -24
View File
@@ -114,35 +114,13 @@
user.visible_message("<span class='danger'>[user] hits [src] and bounces off!</span>")
return 1
// The following mirror is ~special~.
/// TODO: retype this one, I dont wanna touch maps in a Whitelist rework
/obj/structure/mirror/raider
name = "cracked mirror"
desc = "Something seems strange about this old, dirty mirror. Your reflection doesn't look like you remember it."
desc = "Oh no, seven years of bad luck!"
icon_state = "mirror_broke"
shattered = 1
/obj/structure/mirror/raider/attack_hand(var/mob/living/carbon/human/user)
if(istype(get_area(src),/area/syndicate_mothership))
if(istype(user) && user.mind && user.mind.special_role == "Raider" && user.species.name != SPECIES_VOX && config.check_alien_whitelist(ckey(SPECIES_VOX), user.ckey))
var/choice = input("Do you wish to become a true Vox of the Shoal? This is not reversible.") as null|anything in list("No","Yes")
if(choice && choice == "Yes")
var/mob/living/carbon/human/vox/vox = new(get_turf(src),SPECIES_VOX)
vox.gender = user.gender
raiders.equip(vox)
if(user.mind)
user.mind.transfer_to(vox)
spawn(1)
var/newname = sanitizeSafe(input(vox,"Enter a name, or leave blank for the default name.", "Name change","") as text, MAX_NAME_LEN)
if(!newname || newname == "")
var/datum/language/L = SScharacters.resolve_language_id(vox.species.default_language)
newname = L.get_random_name()
vox.real_name = newname
vox.name = vox.real_name
raiders.update_access(vox)
qdel(user)
..()
//Long mirrors.
/obj/structure/mirror/long
name = "mirror"
@@ -194,7 +194,7 @@
continue
if(blacklist.len && (current_species_name in blacklist))
continue
if((S.species_spawn_flags & SPECIES_SPAWN_WHITELISTED) && !config.check_alien_whitelist(ckey(S.name), ckey))
if((S.species_spawn_flags & SPECIES_SPAWN_WHITELISTED) && !config.check_alien_whitelist(ckey(S.species_spawn_flags & SPECIES_SPAWN_WHITELIST_FLEXIBLE ? S.id : S.uid), ckey))
continue
valid_species += current_species_name
+2 -2
View File
@@ -571,7 +571,7 @@
if(chosen_species && use_species_name)
// Have to recheck admin due to no usr at roundstart. Latejoins are fine though.
if(!(chosen_species.species_spawn_flags & SPECIES_SPAWN_WHITELISTED) || config.check_alien_whitelist(ckey(chosen_species.name), ckey))
if(!(chosen_species.species_spawn_flags & SPECIES_SPAWN_WHITELISTED) || config.check_alien_whitelist(ckey(chosen_species.species_spawn_flags & SPECIES_SPAWN_WHITELIST_FLEXIBLE ? chosen_species.id : chosen_species.uid), ckey))
new_character = new(T, use_species_name)
if(!new_character)
@@ -661,7 +661,7 @@
if(!chosen_species)
return SPECIES_HUMAN
if(!(chosen_species.species_spawn_flags & SPECIES_SPAWN_WHITELISTED) || config.check_alien_whitelist(ckey(chosen_species.name), ckey))
if(!(chosen_species.species_spawn_flags & SPECIES_SPAWN_WHITELISTED) || config.check_alien_whitelist(ckey(chosen_species.id), ckey))
return chosen_species.name
return SPECIES_HUMAN
@@ -14,7 +14,7 @@
. += "<br>This is a [SPAN_RED("restricted")] species. You cannot join as this outside of special circumstances."
else if(CS.species_spawn_flags & SPECIES_SPAWN_WHITELISTED)
. += "<br>This is a whitelisted species. You "
if(config.check_alien_whitelist(ckey(CS.name), prefs.client_ckey))
if(config.check_alien_whitelist(ckey(CS.species_spawn_flags & SPECIES_SPAWN_WHITELIST_FLEXIBLE ? CS.superspecies_id : CS.uid), prefs.client_ckey))
. += SPAN_GREEN("do")
else
. += SPAN_RED("do not")
@@ -29,7 +29,7 @@
if((CS.species_spawn_flags & SPECIES_SPAWN_RESTRICTED) && !(flags & PREF_COPY_TO_NO_CHECK_SPECIES))
errors?.Add(SPAN_WARNING("[CS.name] is a restricted species. You cannot join as this as most normal roles."))
return FALSE
if((CS.species_spawn_flags & SPECIES_SPAWN_WHITELISTED) && !config.check_alien_whitelist(ckey(CS.name), prefs.client_ckey))
if((CS.species_spawn_flags & SPECIES_SPAWN_WHITELISTED) && !config.check_alien_whitelist(ckey(CS.species_spawn_flags & SPECIES_SPAWN_WHITELIST_FLEXIBLE ? CS.superspecies_id : CS.uid), prefs.client_ckey))
errors?.Add(SPAN_WARNING("You do not have the whitelist to play as a [CS.name]."))
return FALSE
return TRUE
@@ -79,7 +79,7 @@
var/datum/species/S = SScharacters.resolve_species_id(data)
if(!S)
return SScharacters.default_species_id()
if(!(S.name in SScharacters.playable_species))
if(!(S.uid in SScharacters.playable_species))
return SScharacters.default_species_id()
return data
+1 -1
View File
@@ -5,7 +5,7 @@
template.uid = uid
if(id != uid)
template.is_subspecies = TRUE
template.superspecies_id = id
template.superspecies_id = src.get_species_id()//Now its always safe to do
template.category = category
template.desc = blurb
template.species_spawn_flags = species_spawn_flags
@@ -289,8 +289,8 @@
to_chat(src,"<span class='warning'>You must be awake and standing to perform this action!</span>")
return
var/new_species_name = input("Please select a species to emulate.", "Shapeshifter Body") as null|anything in SScharacters.playable_species
var/datum/species/new_species = SScharacters.resolve_species_name(new_species_name)
var/new_species_id = input("Please select a species to emulate.", "Shapeshifter Body") as null|anything in SScharacters.playable_species
var/datum/species/new_species = SScharacters.resolve_species_id(new_species_id)
if(new_species)
impersonate_bodytype_legacy = new_species.get_bodytype_legacy()
impersonate_bodytype = new_species.default_bodytype
@@ -104,22 +104,23 @@
)
/datum/trait/kintype/apply(datum/species/shadekin/S, mob/living/carbon/human/H)
..(S,H)
if(color && istype(S)) //Sanity check to see if they're actually a shadekin, otherwise just don't do anything. They shouldn't be able to spawn with the trait.
S.kin_type = color
switch(color)
if(BLUE_EYES)
H.shapeshifter_set_eye_color("0000FF")
if(RED_EYES)
H.shapeshifter_set_eye_color("FF0000")
if(GREEN_EYES)
H.shapeshifter_set_eye_color("00FF00")
if(PURPLE_EYES)
H.shapeshifter_set_eye_color("FF00FF")
if(YELLOW_EYES)
H.shapeshifter_set_eye_color("FFFF00")
if(ORANGE_EYES)
H.shapeshifter_set_eye_color("FFA500")
if (istype(S))
..(S,H)
if(color) //Sanity check to see if they're actually a shadekin, otherwise just don't do anything. They shouldn't be able to spawn with the trait.
S.kin_type = color
switch(color)
if(BLUE_EYES)
H.shapeshifter_set_eye_color("0000FF")
if(RED_EYES)
H.shapeshifter_set_eye_color("FF0000")
if(GREEN_EYES)
H.shapeshifter_set_eye_color("00FF00")
if(PURPLE_EYES)
H.shapeshifter_set_eye_color("FF00FF")
if(YELLOW_EYES)
H.shapeshifter_set_eye_color("FFFF00")
if(ORANGE_EYES)
H.shapeshifter_set_eye_color("FFA500")
/datum/unarmed_attack/shadekinharmbap
+2 -2
View File
@@ -22,9 +22,9 @@
abstract_type = /datum/species
//! Intrinsics
/// uid - **must be unique**
/// uid - **must be unique** - Identifies the exact species you are using
var/uid
/// if we're a subspecies, real id
/// id usually identical to uid, if we are a subspecies we use the parent species id/uid here
var/id
// TODO: ref species by id in code, so we can rename as needed
+2 -1
View File
@@ -1,7 +1,8 @@
/datum/species/adherent
uid = SPECIES_ID_ADHERENT
id = SPECIES_ID_ADHERENT
name = SPECIES_ADHERENT
name_plural = "Adherents"
uid = SPECIES_ID_ADHERENT
default_bodytype = BODYTYPE_ADHERENT
blurb = "The Vigil is a relatively loose association of machine-servitors, Adherents, \
+2 -1
View File
@@ -1,6 +1,7 @@
/datum/species/alraune
name = SPECIES_ALRAUNE
uid = SPECIES_ID_ALRAUNE
id = SPECIES_ID_ALRAUNE
name = SPECIES_ALRAUNE
name_plural = "Alraunes"
icobase = 'icons/mob/species/human/body_greyscale.dmi'
+2 -1
View File
@@ -1,7 +1,8 @@
/datum/species/apidaen
uid = SPECIES_ID_APIDAEN
id = SPECIES_ID_APIDAEN
name = SPECIES_APIDAEN
name_plural = SPECIES_APIDAEN
uid = SPECIES_ID_APIDAEN
icobase = 'icons/mob/species/apidaen/body.dmi'
deform = 'icons/mob/species/apidaen/body.dmi' // No deformed set has been made yet.
@@ -1,7 +1,8 @@
/datum/species/custom
name = SPECIES_CUSTOM
uid = SPECIES_ID_CUSTOM
id = SPECIES_ID_CUSTOM
name = SPECIES_CUSTOM
name_plural = "Custom"
selects_bodytype = TRUE
base_species = SPECIES_HUMAN
+2 -1
View File
@@ -1,8 +1,9 @@
/datum/species/diona
uid = SPECIES_ID_DIONA
id = SPECIES_ID_DIONA
name = SPECIES_DIONA
name_plural = "Dionaea"
uid = SPECIES_ID_DIONA
//primitive_form = "Nymph"
icobase = 'icons/mob/species/diona/body.dmi'
+2 -1
View File
@@ -1,7 +1,8 @@
/datum/species/golem
uid = SPECIES_ID_GOLEM
id = SPECIES_ID_GOLEM
name = SPECIES_GOLEM
name_plural = "golems"
uid = SPECIES_ID_GOLEM
icobase = 'icons/mob/species/golem/body.dmi'
deform = 'icons/mob/species/golem/body.dmi'
+2 -1
View File
@@ -1,6 +1,7 @@
/datum/species/monkey
name = SPECIES_MONKEY
uid = SPECIES_ID_MONKEY
id = SPECIES_ID_MONKEY
name = SPECIES_MONKEY
name_plural = "Monkeys"
greater_form = SPECIES_HUMAN
+2 -1
View File
@@ -1,6 +1,7 @@
/datum/species/phoronoid
name = SPECIES_PHORONOID
uid = SPECIES_ID_PHORONOID
id = SPECIES_ID_PHORONOID
name = SPECIES_PHORONOID
name_plural = "Phoronoids"
default_bodytype = BODYTYPE_PHORONOID
+2 -1
View File
@@ -1,7 +1,8 @@
/datum/species/rapala
uid = SPECIES_ID_RAPALA
id = SPECIES_ID_RAPALA
name = SPECIES_RAPALA
name_plural = "Rapalans"
uid = SPECIES_ID_RAPALA
icobase = 'icons/mob/species/rapala/body.dmi'
deform = 'icons/mob/species/rapala/deformed_body.dmi'
@@ -1,5 +1,6 @@
/datum/species/akula
uid = SPECIES_ID_AKULA
id = SPECIES_ID_AKULA
name = SPECIES_AKULA
name_plural = SPECIES_AKULA //It's singular and plural. English is weird.
primitive_form = SPECIES_MONKEY_AKULA
@@ -1,5 +1,6 @@
/datum/species/harpy
uid = SPECIES_ID_HARPY
id = SPECIES_ID_HARPY
name = SPECIES_RAPALA
name_plural = "Rapalans"
icobase = 'icons/mob/human_races/r_harpy_vr.dmi'
@@ -1,5 +1,6 @@
/datum/species/human/gravworlder
uid = SPECIES_ID_HUMAN_GRAV
id = SPECIES_ID_HUMAN
name = SPECIES_HUMAN_GRAV
name_plural = "grav-adapted Humans"
@@ -51,6 +52,7 @@
/datum/species/human/spacer
uid = SPECIES_ID_HUMAN_SPACE
id = SPECIES_ID_HUMAN
name = SPECIES_HUMAN_SPACER
name_plural = "space-adapted Humans"
@@ -98,6 +100,7 @@
/datum/species/human/vatgrown
uid = SPECIES_ID_HUMAN_VAT
id = SPECIES_ID_HUMAN
name = SPECIES_HUMAN_VATBORN
name_plural = SPECIES_HUMAN_VATBORN
@@ -1,6 +1,7 @@
/datum/species/naramadi
name = SPECIES_SERGAL
uid = SPECIES_ID_NARAMADI
id = SPECIES_ID_NARAMADI
name = SPECIES_SERGAL
name_plural = "Naramadi"
category = "Naramadi"
default_bodytype = BODYTYPE_SERGAL
@@ -40,17 +41,17 @@
flesh_color = "#AFA59E"
base_color = "#777777"
ambiguous_genders = TRUE //Naramadi look the same when female and male, at least from the groin up if you catch my drift ;^) - Papalus
cold_level_1 = 280 //I'm not sorry, Lore changes. - Papalus
cold_level_2 = 240
cold_level_3 = 180
heat_level_1 = 380
heat_level_2 = 420 //Nice
heat_level_3 = 1000
heat_discomfort_strings = list(
"Your fur prickles in the heat.",
"You feel uncomfortably warm.",
@@ -1,5 +1,6 @@
/datum/species/nevrean
uid = SPECIES_ID_NEVREAN
id = SPECIES_ID_NEVREAN
name = SPECIES_NEVREAN
name_plural = "Nevreans"
primitive_form = SPECIES_MONKEY_NEVREAN
@@ -1,5 +1,6 @@
/datum/species/crew_shadekin
uid = SPECIES_ID_SHADEKIN_BLACK
id = SPECIES_ID_SHADEKIN_BLACK
name = SPECIES_SHADEKIN_CREW
name_plural = SPECIES_SHADEKIN_CREW
category = "Special"
@@ -1,5 +1,6 @@
/datum/species/skrell
uid = SPECIES_ID_SKRELL
id = SPECIES_ID_SKRELL
name = SPECIES_SKRELL
name_plural = SPECIES_SKRELL
primitive_form = SPECIES_MONKEY_SKRELL
@@ -1,5 +1,6 @@
/datum/species/tajaran
uid = SPECIES_ID_TAJARAN
id = SPECIES_ID_TAJARAN
name = SPECIES_TAJ
name_plural = "Tajaran"
category = "Tajaran"
@@ -1,5 +1,6 @@
/datum/species/teshari
uid = SPECIES_ID_TESHARI
id = SPECIES_ID_TESHARI
name = SPECIES_TESHARI
default_bodytype = BODYTYPE_TESHARI
category = "Teshari"
@@ -1,5 +1,6 @@
/datum/species/unathi
uid = SPECIES_ID_UNATHI
id = SPECIES_ID_UNATHI
name = SPECIES_UNATHI
category = "Unathi"
name_plural = SPECIES_UNATHI
@@ -1,5 +1,6 @@
/datum/species/unathi/digi
uid = SPECIES_ID_UNATHI_DIGI
id = SPECIES_ID_UNATHI_DIGI
name = SPECIES_UNATHI_DIGI
name_plural = SPECIES_UNATHI_DIGI
default_bodytype = BODYTYPE_UNATHI_DIGI
@@ -12,7 +13,7 @@
tail_animation = 'icons/mob/species/unathidigi/tail.dmi'
blurb = {"
As a result of the many challenges of living on Moghes and other worlds, Unathi have become morphologically diverse.
As a result of the many challenges of living on Moghes and other worlds, Unathi have become morphologically diverse.
While some unathi are plantigrade and almost resemble humans in their silhouette, others are more hulking; a digitigrade, beastial and alien creature.
"}
@@ -1,5 +1,6 @@
/datum/species/vulpkanin
uid = SPECIES_ID_VULPKANIN
id = SPECIES_ID_VULPKANIN
name = SPECIES_VULPKANIN
name_plural = SPECIES_VULPKANIN
primitive_form = SPECIES_MONKEY_VULPKANIN
@@ -1,5 +1,6 @@
/datum/species/zaddat
uid = SPECIES_ID_ZADDAT
id = SPECIES_ID_ZADDAT
name = SPECIES_ZADDAT
name_plural = SPECIES_ZADDAT
icobase = 'icons/mob/species/zaddat/body.dmi'
@@ -1,5 +1,6 @@
/datum/species/hi_zoxxen
uid = SPECIES_ID_ZORREN_HIGH
id = SPECIES_ID_ZORREN_HIGH
id = SPECIES_ID_ZORREN
name = SPECIES_ZORREN_HIGH
name_plural = "Zorren"
+2 -1
View File
@@ -1,7 +1,8 @@
/datum/species/vasilissan //These actually look pretty damn spooky!
uid = SPECIES_ID_VASILISSAN
id = SPECIES_ID_VASILISSAN
name = SPECIES_VASILISSAN
name_plural = "Vasilissans"
uid = SPECIES_ID_VASILISSAN
icobase = 'icons/mob/species/vasilissan/body.dmi'
deform = 'icons/mob/species/vasilissan/deformed_body.dmi'
+2 -1
View File
@@ -1,6 +1,7 @@
/datum/species/werebeast
name = SPECIES_WEREBEAST
uid = SPECIES_ID_WEREBEAST
id = SPECIES_ID_WEREBEAST
name = SPECIES_WEREBEAST
name_plural = "Werebeasts"
primitive_form = SPECIES_MONKEY_VULPKANIN
default_bodytype = BODYTYPE_WEREBEAST
@@ -2,6 +2,7 @@
name = SPECIES_XENOHYBRID
name_plural = "Xenomorph Hybrids"
uid = SPECIES_ID_XENOHYBRID
id = SPECIES_ID_XENOHYBRID
default_bodytype = BODYTYPE_XENOHYBRID
icobase = 'icons/mob/species/xenohybrid/body.dmi'
@@ -2,8 +2,9 @@
// Due to sprite construction, they have to have separate limb lists
/datum/species/shapeshifter/promethean/avatar/human
name = SPECIES_VR_HUMAN
uid = SPECIES_ID_VIRTUAL_REALITY_HUMAN
id = SPECIES_ID_VIRTUAL_REALITY_HUMAN
name = SPECIES_VR_HUMAN
icobase = 'icons/mob/species/human/body.dmi'
deform = 'icons/mob/species/human/deformed_body.dmi'
species_appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
@@ -22,8 +23,9 @@
)
/datum/species/shapeshifter/promethean/avatar/unathi
name = SPECIES_VR_UNATHI
uid = SPECIES_ID_VIRTUAL_REALITY_UNATHI
id = SPECIES_ID_VIRTUAL_REALITY_UNATHI
name = SPECIES_VR_UNATHI
icobase = 'icons/mob/species/unathi/body_greyscale.dmi'
deform = 'icons/mob/species/unathi/deformed_body_greyscale.dmi'
tail = "sogtail"
@@ -44,8 +46,9 @@
)
/datum/species/shapeshifter/promethean/avatar/tajaran
name = "Virtual Reality Tajaran"
uid = SPECIES_ID_VIRTUAL_REALITY_TAJARAN
id = SPECIES_ID_VIRTUAL_REALITY_TAJARAN
name = "Virtual Reality Tajaran"
icobase = 'icons/mob/species/tajaran/body_greyscale.dmi'
deform = 'icons/mob/species/tajaran/deformed_body_greyscale.dmi'
tail = "tajtail"
@@ -66,8 +69,9 @@
)
/datum/species/shapeshifter/promethean/avatar/skrell
name = SPECIES_VR_SKRELL
uid = SPECIES_ID_VIRTUAL_REALITY_SKRELL
id = SPECIES_ID_VIRTUAL_REALITY_SKRELL
name = SPECIES_VR_SKRELL
icobase = 'icons/mob/species/skrell/body_greyscale.dmi'
deform = 'icons/mob/species/skrell/deformed_body_greyscale.dmi'
species_appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
@@ -86,8 +90,9 @@
)
/datum/species/shapeshifter/promethean/avatar/teshari
name = SPECIES_VR_TESHARI
uid = SPECIES_ID_VIRTUAL_REALITY_TESHARI
id = SPECIES_ID_VIRTUAL_REALITY_TESHARI
name = SPECIES_VR_TESHARI
icobase = 'icons/mob/species/teshari/body.dmi'
deform = 'icons/mob/species/teshari/deformed_body.dmi'
species_appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR
@@ -107,6 +112,7 @@
/datum/species/shapeshifter/promethean/avatar/diona
uid = SPECIES_ID_VIRTUAL_REALITY_DIONA
id = SPECIES_ID_VIRTUAL_REALITY_DIONA
name = SPECIES_VR_DIONA
icobase = 'icons/mob/species/diona/body.dmi'
deform = 'icons/mob/species/diona/deformed_body.dmi'
@@ -127,6 +133,7 @@
/datum/species/shapeshifter/promethean/avatar/monkey
uid = SPECIES_ID_VIRTUAL_REALITY_MONKEY
id = SPECIES_ID_VIRTUAL_REALITY_MONKEY
name = SPECIES_VR_MONKEY
icobase = 'icons/mob/species/monkey/body_monkey.dmi'
deform = 'icons/mob/species/monkey/body_monkey.dmi'
@@ -151,6 +158,7 @@
/datum/species/shapeshifter/promethean/avatar/vox
uid = SPECIES_ID_VIRTUAL_REALITY_VOX
id = SPECIES_ID_VIRTUAL_REALITY_VOX
name = SPECIES_VR_VOX
icobase = 'icons/mob/species/vox/body.dmi'
deform = 'icons/mob/species/vox/deformed_body.dmi'
@@ -171,6 +179,7 @@
/datum/species/shapeshifter/promethean/avatar/skeleton
uid = SPECIES_ID_VIRTUAL_REALITY_SKELETON
id = SPECIES_ID_VIRTUAL_REALITY_SKELETON
name = SPECIES_VR_SKELETON
icobase = 'icons/mob/species/human/skeleton.dmi'
deform = 'icons/mob/species/human/skeleton.dmi'
@@ -1,8 +1,9 @@
/datum/species/shapeshifter/xenochimera //Scree's race.
uid = SPECIES_ID_XENOCHIMERA
id = SPECIES_ID_XENOCHIMERA
name = SPECIES_XENOCHIMERA
name_plural = "Xenochimeras"
base_species = SPECIES_XENOCHIMERA
uid = SPECIES_ID_XENOCHIMERA
category = "Special"
selects_bodytype = TRUE