mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 11:36:24 +01:00
Species types sources refactor (#42523)
There is now a bitflag that controls all the ways a species can be selected from the different methods of changing species, xeno spawn, pride mirror, magic mirror etc. The soviet and capitalist golems are no longer selectable from the pride or magic mirrors (just the badmin one) interesting thing I found, androids and synths (including military synth) are acheivable via xeno extracts!
This commit is contained in:
@@ -290,3 +290,19 @@
|
||||
#define GRAB_PIXEL_SHIFT_PASSIVE 6
|
||||
#define GRAB_PIXEL_SHIFT_AGGRESSIVE 12
|
||||
#define GRAB_PIXEL_SHIFT_NECK 16
|
||||
|
||||
//Flags that control what things can spawn species (whitelist)
|
||||
//Badmin magic mirror
|
||||
#define MIRROR_BADMIN (1<<0)
|
||||
//Standard magic mirror (wizard)
|
||||
#define MIRROR_MAGIC (1<<1)
|
||||
//Pride ruin mirror
|
||||
#define MIRROR_PRIDE (1<<2)
|
||||
//Race swap wizard event
|
||||
#define RACE_SWAP (1<<3)
|
||||
//ERT spawn template (avoid races that don't function without correct gear)
|
||||
#define ERT_SPAWN (1<<4)
|
||||
//xenobio black crossbreed
|
||||
#define SLIME_EXTRACT (1<<5)
|
||||
//Wabbacjack staff projectiles
|
||||
#define WABBAJACK (1<<6)
|
||||
|
||||
@@ -97,15 +97,14 @@
|
||||
name = "magic mirror"
|
||||
desc = "Turn and face the strange... face."
|
||||
icon_state = "magic_mirror"
|
||||
var/list/races_blacklist = list("skeleton", "agent", "angel", "military_synth", "memezombies", "clockwork golem servant", "android", "synth", "mush", "zombie")
|
||||
var/list/choosable_races = list()
|
||||
|
||||
/obj/structure/mirror/magic/New()
|
||||
if(!choosable_races.len)
|
||||
for(var/speciestype in subtypesof(/datum/species))
|
||||
var/datum/species/S = new speciestype()
|
||||
if(!(S.id in races_blacklist))
|
||||
choosable_races += S.id
|
||||
var/datum/species/S = speciestype
|
||||
if(initial(S.changesource_flags) & MIRROR_MAGIC)
|
||||
choosable_races += initial(S.id)
|
||||
..()
|
||||
|
||||
/obj/structure/mirror/magic/lesser/New()
|
||||
@@ -114,8 +113,9 @@
|
||||
|
||||
/obj/structure/mirror/magic/badmin/New()
|
||||
for(var/speciestype in subtypesof(/datum/species))
|
||||
var/datum/species/S = new speciestype()
|
||||
choosable_races += S.id
|
||||
var/datum/species/S = speciestype
|
||||
if(initial(S.changesource_flags) & MIRROR_BADMIN)
|
||||
choosable_races += initial(S.id)
|
||||
..()
|
||||
|
||||
/obj/structure/mirror/magic/attack_hand(mob/user)
|
||||
|
||||
@@ -414,7 +414,7 @@
|
||||
chosen_candidate.client.prefs.copy_to(ERTOperative)
|
||||
ERTOperative.key = chosen_candidate.key
|
||||
|
||||
if(ertemplate.enforce_human || ERTOperative.dna.species.dangerous_existence) // Don't want any exploding plasmemes
|
||||
if(ertemplate.enforce_human || !ERTOperative.dna.species.changesource_flags & ERT_SPAWN) // Don't want any exploding plasmemes
|
||||
ERTOperative.set_species(/datum/species/human)
|
||||
|
||||
//Give antag datum
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
var/all_the_same = 0
|
||||
var/all_species = list()
|
||||
|
||||
for(var/speciestype in subtypesof(/datum/species))
|
||||
var/datum/species/S = new speciestype()
|
||||
if(!S.dangerous_existence && !S.blacklisted)
|
||||
all_species += speciestype
|
||||
for(var/stype in subtypesof(/datum/species))
|
||||
var/datum/species/S = stype
|
||||
if(initial(S.changesource_flags) & RACE_SWAP)
|
||||
all_species += stype
|
||||
|
||||
var/datum/species/new_species = pick(all_species)
|
||||
|
||||
|
||||
@@ -25,8 +25,6 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/toxic_food = TOXIC
|
||||
var/list/no_equip = list() // slots the race can't equip stuff to
|
||||
var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids
|
||||
var/blacklisted = 0 //Flag to exclude from green slime core species.
|
||||
var/dangerous_existence //A flag for transformation spells that tells them "hey if you turn a person into one of these without preperation, they'll probably die!"
|
||||
var/say_mod = "says" // affects the speech message
|
||||
var/list/default_features = list() // Default mutant bodyparts for this species. Don't forget to set one for every mutant bodypart you allow this species to have.
|
||||
var/list/mutant_bodyparts = list() // Visible CURRENT bodyparts that are unique to a species. DO NOT USE THIS AS A LIST OF ALL POSSIBLE BODYPARTS AS IT WILL FUCK SHIT UP! Changes to this list for non-species specific bodyparts (ie cat ears and tails) should be assigned at organ level if possible. Layer hiding is handled by handle_mutant_bodyparts() below.
|
||||
@@ -76,6 +74,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
var/obj/item/organ/liver/mutantliver
|
||||
var/obj/item/organ/stomach/mutantstomach
|
||||
var/override_float = FALSE
|
||||
|
||||
//Bitflag that controls what in game ways can select this species as a spawnable source
|
||||
//Think magic mirror and pride mirror, slime extract, ERT etc, see defines
|
||||
//in __DEFINES/mobs.dm, defaults to NONE, so people actually have to think about it
|
||||
var/changesource_flags = NONE
|
||||
///////////
|
||||
// PROCS //
|
||||
///////////
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
species_traits = list(NOBLOOD,NOEYES)
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NOGUNS,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
mutanttongue = /obj/item/organ/tongue/abductor
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
|
||||
/datum/species/abductor/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
damage_overlay_type = "synth"
|
||||
mutanttongue = /obj/item/organ/tongue/robot
|
||||
limbs_id = "synth"
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
|
||||
/datum/species/android/on_species_gain(mob/living/carbon/C)
|
||||
. = ..()
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "Angel")
|
||||
use_skintones = 1
|
||||
no_equip = list(SLOT_BACK)
|
||||
blacklisted = 1
|
||||
limbs_id = "human"
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
|
||||
|
||||
var/datum/action/innate/flight/fly
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@
|
||||
punchstunthreshold = 25
|
||||
attack_verb = "smash"
|
||||
attack_sound = 'sound/weapons/resonator_blast.ogg'
|
||||
blacklisted = 1
|
||||
use_skintones = 0
|
||||
species_traits = list(NOBLOOD,EYECOLOR)
|
||||
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER)
|
||||
sexes = 0
|
||||
sexes = 0
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
mutanteyes = /obj/item/organ/eyes/dullahan
|
||||
mutanttongue = /obj/item/organ/tongue/dullahan
|
||||
mutantears = /obj/item/organ/ears/dullahan
|
||||
blacklisted = TRUE
|
||||
limbs_id = "human"
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN
|
||||
|
||||
var/obj/item/dullahan_relay/myhead
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
attack_type = BURN //burn bish
|
||||
damage_overlay_type = "" //We are too cool for regular damage overlays
|
||||
species_traits = list(DYNCOLORS, NOSTOMACH, AGENDER, NO_UNDERWEAR)
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
inherent_traits = list(TRAIT_NOHUNGER)
|
||||
sexes = FALSE //no fetish content allowed
|
||||
toxic_food = NONE
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
mutantears = /obj/item/organ/ears/cat
|
||||
mutanttail = /obj/item/organ/tail/cat
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
|
||||
/datum/species/human/felinid/qualifies_for_rank(rank, list/features)
|
||||
return TRUE
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/fly
|
||||
disliked_food = null
|
||||
liked_food = GROSS
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
|
||||
/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
|
||||
if(chem.id == "pestkiller")
|
||||
|
||||
@@ -14,13 +14,12 @@
|
||||
punchstunthreshold = 11 //about 40% chance to stun
|
||||
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
|
||||
nojumpsuit = 1
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC
|
||||
sexes = 1
|
||||
damage_overlay_type = ""
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/golem
|
||||
// To prevent golem subtypes from overwhelming the odds when random species
|
||||
// changes, only the Random Golem type can be chosen
|
||||
blacklisted = TRUE
|
||||
dangerous_existence = TRUE
|
||||
limbs_id = "golem"
|
||||
fixed_mut_color = "aaa"
|
||||
var/info_text = "As an <span class='danger'>Iron Golem</span>, you don't have any special traits."
|
||||
@@ -46,8 +45,7 @@
|
||||
|
||||
/datum/species/golem/random
|
||||
name = "Random Golem"
|
||||
blacklisted = FALSE
|
||||
dangerous_existence = FALSE
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN
|
||||
var/static/list/random_golem_types
|
||||
|
||||
/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
@@ -638,6 +636,7 @@
|
||||
attack_sound = 'sound/magic/clockwork/anima_fragment_attack.ogg'
|
||||
sexes = FALSE
|
||||
speedmod = 0
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK
|
||||
damage_overlay_type = "synth"
|
||||
prefix = "Clockwork"
|
||||
special_names = list("Remnant", "Relic", "Scrap", "Vestige") //RIP Ratvar
|
||||
@@ -673,8 +672,6 @@
|
||||
no_equip = list()
|
||||
nojumpsuit = FALSE
|
||||
has_corpse = TRUE
|
||||
blacklisted = TRUE
|
||||
dangerous_existence = TRUE
|
||||
random_eligible = FALSE
|
||||
info_text = "<span class='bold alloy'>As a </span><span class='bold brass'>Clockwork Golem Servant</span><span class='bold alloy'>, you are faster than other types of golems.</span>" //warcult golems leave a corpse
|
||||
|
||||
@@ -1017,12 +1014,12 @@
|
||||
prefix = "Capitalist"
|
||||
attack_verb = "monopoliz"
|
||||
limbs_id = "ca_golem"
|
||||
blacklisted = TRUE
|
||||
special_names = list("John D. Rockefeller","Rich Uncle Pennybags","Commodore Vanderbilt","Entrepreneur","Mr Moneybags", "Adam Smith")
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES)
|
||||
fixed_mut_color = null
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
info_text = "As a <span class='danger'>Capitalist Golem</span>, your fist spreads the powerful industrializing light of capitalism."
|
||||
changesource_flags = MIRROR_BADMIN
|
||||
|
||||
var/last_cash = 0
|
||||
var/cash_cooldown = 100
|
||||
@@ -1060,12 +1057,12 @@
|
||||
prefix = "Comrade"
|
||||
attack_verb = "nationalis"
|
||||
limbs_id = "s_golem"
|
||||
blacklisted = TRUE
|
||||
special_names = list("Stalin","Lenin","Trotsky","Marx","Comrade") //comrade comrade
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES)
|
||||
fixed_mut_color = null
|
||||
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
|
||||
info_text = "As a <span class='danger'>Soviet Golem</span>, your fist spreads the bright soviet light of communism."
|
||||
changesource_flags = MIRROR_BADMIN
|
||||
|
||||
/datum/species/golem/soviet/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
disliked_food = GROSS | RAW
|
||||
liked_food = JUNKFOOD | FRIED
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
|
||||
|
||||
/datum/species/human/qualifies_for_rank(rank, list/features)
|
||||
return TRUE //Pure humans are always allowed in all roles.
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
coldmod = 6 // = 3x cold damage
|
||||
heatmod = 0.5 // = 1/4x heat damage
|
||||
burnmod = 0.5 // = 1/2x generic burn damage
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
|
||||
/datum/species/jelly/on_species_loss(mob/living/carbon/C)
|
||||
if(regenerate_limbs)
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
coldmod = 1.5
|
||||
heatmod = 0.67
|
||||
default_features = list("mcolor" = "0F0", "tail_lizard" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs")
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
attack_verb = "slash"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
disliked_food = FRUIT | GROSS
|
||||
toxic_food = MEAT | RAW
|
||||
mutanteyes = /obj/item/organ/eyes/moth
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
|
||||
|
||||
/datum/species/moth/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE)
|
||||
. = ..()
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
id = "mush"
|
||||
mutant_bodyparts = list("caps")
|
||||
default_features = list("caps" = "Round")
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
|
||||
|
||||
fixed_mut_color = "DBBF92"
|
||||
hair_color = "FF4B19" //cap color, spot color uses eye color
|
||||
@@ -25,7 +26,6 @@
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision/mushroom
|
||||
use_skintones = FALSE
|
||||
var/datum/martial_art/mushpunch/mush
|
||||
blacklisted = TRUE //See comment below about locking it out of roundstart. The species is not intended to be available to players yet - and this means wizards, too.
|
||||
|
||||
/datum/species/mush/check_roundstart_eligible()
|
||||
return FALSE //hard locked out of roundstart on the order of design lead kor, this can be removed in the future when planetstation is here OR SOMETHING but right now we have a problem with races.
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
mutanttongue = /obj/item/organ/tongue/bone/plasmaman
|
||||
mutantliver = /obj/item/organ/liver/plasmaman
|
||||
mutantstomach = /obj/item/organ/stomach/plasmaman
|
||||
dangerous_existence = 1 //So so much
|
||||
blacklisted = 1 //See above
|
||||
burnmod = 1.5
|
||||
heatmod = 1.5
|
||||
breathid = "tox"
|
||||
@@ -20,6 +18,7 @@
|
||||
var/internal_fire = FALSE //If the bones themselves are burning clothes won't help you much
|
||||
disliked_food = FRUIT
|
||||
liked_food = VEGETABLES
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC
|
||||
|
||||
/datum/species/plasmaman/spec_life(mob/living/carbon/human/H)
|
||||
var/datum/gas_mixture/environment = H.loc.return_air()
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/plant
|
||||
disliked_food = MEAT | DAIRY
|
||||
liked_food = VEGETABLES | FRUIT | GRAIN
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
|
||||
|
||||
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
|
||||
@@ -6,13 +6,12 @@
|
||||
name = "???"
|
||||
id = "shadow"
|
||||
sexes = 0
|
||||
blacklisted = 1
|
||||
ignored_by = list(/mob/living/simple_animal/hostile/faithless)
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/shadow
|
||||
species_traits = list(NOBLOOD,NOEYES)
|
||||
inherent_traits = list(TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH)
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC
|
||||
|
||||
dangerous_existence = 1
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision
|
||||
|
||||
|
||||
@@ -36,7 +35,6 @@
|
||||
id = "nightmare"
|
||||
limbs_id = "shadow"
|
||||
burnmod = 1.5
|
||||
blacklisted = TRUE
|
||||
no_equip = list(SLOT_WEAR_MASK, SLOT_WEAR_SUIT, SLOT_GLOVES, SLOT_SHOES, SLOT_W_UNIFORM, SLOT_S_STORE)
|
||||
species_traits = list(NOBLOOD,NO_UNDERWEAR,NO_DNA_COPY,NOTRANSSTING,NOEYES)
|
||||
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOGUNS,TRAIT_RADIMMUNE,TRAIT_VIRUSIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOHUNGER)
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
name = "Spooky Scary Skeleton"
|
||||
id = "skeleton"
|
||||
say_mod = "rattles"
|
||||
blacklisted = 1
|
||||
sexes = 0
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton
|
||||
species_traits = list(NOBLOOD)
|
||||
@@ -13,6 +12,8 @@
|
||||
damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
|
||||
disliked_food = NONE
|
||||
liked_food = GROSS | MEAT | RAW
|
||||
//They can technically be in an ERT
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
|
||||
|
||||
/datum/species/skeleton/check_roundstart_eligible()
|
||||
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
species_traits = list(NOTRANSSTING) //all of these + whatever we inherit from the real species
|
||||
inherent_traits = list(TRAIT_VIRUSIMMUNE,TRAIT_NODISMEMBER,TRAIT_NOLIMBDISABLE,TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
|
||||
dangerous_existence = 1
|
||||
blacklisted = 1
|
||||
meat = null
|
||||
damage_overlay_type = "synth"
|
||||
limbs_id = "synth"
|
||||
@@ -15,6 +13,7 @@
|
||||
var/datum/species/fake_species //a species to do most of our work for us, unless we're damaged
|
||||
var/list/initial_species_traits //for getting these values back for assume_disguise()
|
||||
var/list/initial_inherent_traits
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK
|
||||
|
||||
/datum/species/synth/New()
|
||||
initial_species_traits = species_traits.Copy()
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
inherent_traits = list(TRAIT_NOHUNGER,TRAIT_NOBREATH)
|
||||
inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
|
||||
default_features = list("mcolor" = "FFF", "tail_human" = "None", "ears" = "None", "wings" = "None")
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN
|
||||
exotic_bloodtype = "U"
|
||||
use_skintones = TRUE
|
||||
mutant_heart = /obj/item/organ/heart/vampire
|
||||
mutanttongue = /obj/item/organ/tongue/vampire
|
||||
blacklisted = TRUE
|
||||
limbs_id = "human"
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/human
|
||||
var/info_text = "You are a <span class='danger'>Vampire</span>. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability."
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
id = "zombie"
|
||||
say_mod = "moans"
|
||||
sexes = 0
|
||||
blacklisted = 1
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
|
||||
species_traits = list(NOBLOOD,NOZOMBIE,NOTRANSSTING)
|
||||
inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_EASYDISMEMBER,TRAIT_LIMBATTACHMENT,TRAIT_NOBREATH,TRAIT_NODEATH,TRAIT_FAKEDEATH)
|
||||
@@ -15,6 +14,7 @@
|
||||
var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg')
|
||||
disliked_food = NONE
|
||||
liked_food = GROSS | MEAT | RAW
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN
|
||||
|
||||
/datum/species/zombie/check_roundstart_eligible()
|
||||
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
|
||||
@@ -31,6 +31,7 @@
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision/zombie
|
||||
var/heal_rate = 1
|
||||
var/regen_cooldown = 0
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
|
||||
|
||||
/datum/species/zombie/infectious/check_roundstart_eligible()
|
||||
return FALSE
|
||||
@@ -88,5 +89,6 @@
|
||||
sexes = 0
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
|
||||
mutanttongue = /obj/item/organ/tongue/zombie
|
||||
changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN
|
||||
|
||||
#undef REGENERATION_DELAY
|
||||
|
||||
@@ -244,7 +244,13 @@
|
||||
if(prob(50))
|
||||
new_mob = new /mob/living/carbon/human(M.loc)
|
||||
else
|
||||
var/hooman = pick(subtypesof(/mob/living/carbon/human/species))
|
||||
var/chooseable_races = list()
|
||||
for(var/speciestype in subtypesof(/datum/species))
|
||||
var/datum/species/S = speciestype
|
||||
if(initial(S.changesource_flags) & WABBAJACK)
|
||||
chooseable_races += speciestype
|
||||
|
||||
var/hooman = pick(chooseable_races)
|
||||
new_mob =new hooman(M.loc)
|
||||
|
||||
var/datum/preferences/A = new() //Randomize appearance for the human
|
||||
|
||||
@@ -217,10 +217,11 @@ Charged extracts:
|
||||
to_chat(user, "<span class='warning'>You have to be able to have a species to get your species changed.</span>")
|
||||
return
|
||||
var/list/allowed_species = list()
|
||||
for(var/X in subtypesof(/datum/species))
|
||||
var/datum/species/temp = X
|
||||
if(!initial(temp.blacklisted))
|
||||
allowed_species += X
|
||||
for(var/stype in subtypesof(/datum/species))
|
||||
var/datum/species/X = stype
|
||||
if(initial(X.changesource_flags) & SLIME_EXTRACT)
|
||||
allowed_species += stype
|
||||
|
||||
var/datum/species/changed = pick(allowed_species)
|
||||
if(changed)
|
||||
H.set_species(changed, icon_update = 1)
|
||||
|
||||
@@ -98,6 +98,13 @@
|
||||
desc = "Pride cometh before the..."
|
||||
icon_state = "magic_mirror"
|
||||
|
||||
/obj/structure/mirror/magic/pride/New()
|
||||
for(var/speciestype in subtypesof(/datum/species))
|
||||
var/datum/species/S = speciestype
|
||||
if(initial(S.changesource_flags) & MIRROR_PRIDE)
|
||||
choosable_races += initial(S.id)
|
||||
..()
|
||||
|
||||
/obj/structure/mirror/magic/pride/curse(mob/user)
|
||||
user.visible_message("<span class='danger'><B>The ground splits beneath [user] as [user.p_their()] hand leaves the mirror!</B></span>", \
|
||||
"<span class='notice'>Perfect. Much better! Now <i>nobody</i> will be able to resist yo-</span>")
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "reagent_id_typos.dm"
|
||||
#include "reagent_recipe_collisions.dm"
|
||||
#include "spawn_humans.dm"
|
||||
#include "species_whitelists.dm"
|
||||
#include "subsystem_init.dm"
|
||||
#include "timer_sanity.dm"
|
||||
#include "unit_test.dm"
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
/datum/unit_test/species_whitelist_check/Run()
|
||||
for(var/typepath in subtypesof(/datum/species))
|
||||
var/datum/species/S = typepath
|
||||
if(initial(S.changesource_flags) == NONE)
|
||||
Fail("A species type was detected with no changesource flags: [S]")
|
||||
Reference in New Issue
Block a user