Merge pull request #3524 from Citadel-Station-13/upstream-merge-31877
[MIRROR] Allows species to be blocked from ever being roundstart, can now choose your Halloween species
This commit is contained in:
@@ -46,8 +46,8 @@
|
||||
#define INIT_ORDER_DBCORE 18
|
||||
#define INIT_ORDER_BLACKBOX 17
|
||||
#define INIT_ORDER_SERVER_MAINT 16
|
||||
#define INIT_ORDER_JOBS 15
|
||||
#define INIT_ORDER_EVENTS 14
|
||||
#define INIT_ORDER_EVENTS 15
|
||||
#define INIT_ORDER_JOBS 14
|
||||
#define INIT_ORDER_TICKER 13
|
||||
#define INIT_ORDER_MAPPING 12
|
||||
#define INIT_ORDER_ATOMS 11
|
||||
|
||||
@@ -26,7 +26,7 @@ proc/get_racelist(var/mob/user)//This proc returns a list of species that 'user'
|
||||
var/list/wlist = S.whitelist
|
||||
if(S.whitelisted && (wlist.Find(user.ckey) || wlist.Find(user.key) || user.client.holder)) //If your ckey is on the species whitelist or you're an admin:
|
||||
GLOB.whitelisted_species_list[S.id] = S.type //Add the species to their available species list.
|
||||
else if(!S.whitelisted && S.roundstart) //Normal roundstart species will be handled here.
|
||||
else if(!S.whitelisted) //Normal roundstart species will be handled here.
|
||||
GLOB.whitelisted_species_list[S.id] = S.type
|
||||
|
||||
return GLOB.whitelisted_species_list
|
||||
|
||||
@@ -112,27 +112,7 @@ CONFIG_DEF(flag/show_game_type_odds) //if set this allows players to see the odd
|
||||
|
||||
CONFIG_DEF(flag/join_with_mutant_race) //players can choose their mutant race before joining the game
|
||||
|
||||
CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go. If left undefined the game's roundstart var for species is used
|
||||
var/first_edit = TRUE
|
||||
|
||||
/datum/config_entry/keyed_flag_list/roundstart_races/New()
|
||||
for(var/I in subtypesof(/datum/species))
|
||||
var/datum/species/S = I
|
||||
if(initial(S.roundstart))
|
||||
value[initial(S.id)] = TRUE
|
||||
..()
|
||||
|
||||
/datum/config_entry/keyed_flag_list/roundstart_races/ValidateAndSet(str_val)
|
||||
var/list/old_val
|
||||
if(first_edit)
|
||||
old_val = value
|
||||
old_val = old_val.Copy()
|
||||
. = ..()
|
||||
if(first_edit)
|
||||
if(!.)
|
||||
value = old_val
|
||||
else
|
||||
first_edit = FALSE
|
||||
CONFIG_DEF(keyed_flag_list/roundstart_races) //races you can play as from the get go.
|
||||
|
||||
CONFIG_DEF(flag/join_with_mutant_humans) //players can pick mutant bodyparts for humans before joining the game
|
||||
|
||||
@@ -188,7 +168,7 @@ CONFIG_DEF(number/run_delay) //Used for modifying movement speed for mobs.
|
||||
|
||||
CONFIG_DEF(number/walk_delay)
|
||||
|
||||
|
||||
|
||||
CONFIG_DEF(number/human_delay) //Mob specific modifiers. NOTE: These will affect different mob types in different ways
|
||||
CONFIG_DEF(number/robot_delay)
|
||||
CONFIG_DEF(number/monkey_delay)
|
||||
|
||||
@@ -18,6 +18,7 @@ SUBSYSTEM_DEF(job)
|
||||
SetupOccupations()
|
||||
if(CONFIG_GET(flag/load_jobs_from_txt))
|
||||
LoadJobs()
|
||||
generate_selectable_species()
|
||||
..()
|
||||
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
var/force_ending = 0 //Round was ended by admin intervention
|
||||
// If true, there is no lobby phase, the game starts immediately.
|
||||
var/start_immediately = FALSE
|
||||
var/setup_done = FALSE //All game setup done including mode post setup and
|
||||
var/setup_done = FALSE //All game setup done including mode post setup and
|
||||
|
||||
var/hide_mode = 0
|
||||
var/datum/game_mode/mode = null
|
||||
@@ -127,7 +127,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
login_music = pick(music)
|
||||
else
|
||||
login_music = "config/title_music/sounds/[pick(music)]"
|
||||
|
||||
|
||||
|
||||
crewobjlist = typesof(/datum/objective/crew)
|
||||
miscreantobjlist = (typesof(/datum/objective/miscreant) - /datum/objective/miscreant)
|
||||
@@ -141,6 +141,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
GLOB.syndicate_code_phrase = generate_code_phrase()
|
||||
if(!GLOB.syndicate_code_response)
|
||||
GLOB.syndicate_code_response = generate_code_phrase()
|
||||
|
||||
..()
|
||||
start_at = world.time + (CONFIG_GET(number/lobby_countdown) * 10)
|
||||
|
||||
|
||||
+1
-1
@@ -263,7 +263,7 @@
|
||||
/mob/living/carbon/proc/create_dna()
|
||||
dna = new /datum/dna(src)
|
||||
if(!dna.species)
|
||||
var/rando_race = pick(CONFIG_GET(keyed_flag_list/roundstart_races))
|
||||
var/rando_race = pick(GLOB.roundstart_races)
|
||||
dna.species = new rando_race()
|
||||
|
||||
//proc used to update the mob's appearance after its dna UI has been changed
|
||||
|
||||
@@ -470,7 +470,7 @@
|
||||
// species datums
|
||||
R.fields["mrace"] = dna.species
|
||||
else
|
||||
var/datum/species/rando_race = pick(CONFIG_GET(keyed_flag_list/roundstart_races))
|
||||
var/datum/species/rando_race = pick(GLOB.roundstart_races)
|
||||
R.fields["mrace"] = rando_race.type
|
||||
|
||||
R.fields["ckey"] = mob_occupant.ckey
|
||||
|
||||
@@ -598,7 +598,7 @@ What a mess.*/
|
||||
active1.fields["age"] = t1
|
||||
if("species")
|
||||
if(istype(active1, /datum/data/record))
|
||||
var/t1 = input("Select a species", "Species Selection") as null|anything in CONFIG_GET(keyed_flag_list/roundstart_races)
|
||||
var/t1 = input("Select a species", "Species Selection") as null|anything in GLOB.roundstart_races
|
||||
if(!canUseSecurityRecordsConsole(usr, t1, a1))
|
||||
return
|
||||
active1.fields["species"] = t1
|
||||
@@ -766,7 +766,7 @@ What a mess.*/
|
||||
if(6)
|
||||
R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable")
|
||||
if(7)
|
||||
R.fields["species"] = pick(CONFIG_GET(keyed_flag_list/roundstart_races))
|
||||
R.fields["species"] = pick(GLOB.roundstart_races)
|
||||
if(8)
|
||||
var/datum/data/record/G = pick(GLOB.data_core.general)
|
||||
R.fields["photo_front"] = G.fields["photo_front"]
|
||||
|
||||
@@ -101,8 +101,7 @@
|
||||
..()
|
||||
|
||||
/obj/structure/mirror/magic/lesser/New()
|
||||
var/list/L = CONFIG_GET(keyed_flag_list/roundstart_races)
|
||||
choosable_races = L.Copy()
|
||||
choosable_races = GLOB.roundstart_races.Copy()
|
||||
..()
|
||||
|
||||
/obj/structure/mirror/magic/badmin/New()
|
||||
|
||||
@@ -45,7 +45,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/allow_midround_antag = 1
|
||||
var/preferred_map = null
|
||||
var/pda_style = MONO
|
||||
|
||||
|
||||
var/uses_glasses_colour = 0
|
||||
|
||||
var/screenshake = 100
|
||||
@@ -1188,7 +1188,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
if("species")
|
||||
|
||||
var/result = input(user, "Select a species", "Species Selection") as null|anything in CONFIG_GET(keyed_flag_list/roundstart_races)
|
||||
var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_races
|
||||
|
||||
if(result)
|
||||
var/newtype = GLOB.species_list[result]
|
||||
|
||||
@@ -294,12 +294,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
//Species
|
||||
var/species_id
|
||||
S["species"] >> species_id
|
||||
var/list/roundstart_races = CONFIG_GET(keyed_flag_list/roundstart_races)
|
||||
if(species_id && (species_id in roundstart_races) && CONFIG_GET(flag/join_with_mutant_race))
|
||||
if(species_id && (species_id in GLOB.roundstart_races) && CONFIG_GET(flag/join_with_mutant_race))
|
||||
var/newtype = GLOB.species_list[species_id]
|
||||
pref_species = new newtype()
|
||||
else if (roundstart_races.len)
|
||||
var/rando_race = pick(roundstart_races)
|
||||
else if (GLOB.roundstart_races.len)
|
||||
var/rando_race = pick(GLOB.roundstart_races)
|
||||
if (rando_race)
|
||||
pref_species = new rando_race()
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
facial_hair_color = hair_color
|
||||
eye_color = random_eye_color()
|
||||
if(!pref_species)
|
||||
var/rando_race = pick(CONFIG_GET(keyed_flag_list/roundstart_races))
|
||||
var/rando_race = pick(GLOB.roundstart_races)
|
||||
pref_species = new rando_race()
|
||||
features = random_features()
|
||||
age = rand(AGE_MIN,AGE_MAX)
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/mob/living/brain/proc/create_dna()
|
||||
stored_dna = new /datum/dna/stored(src)
|
||||
if(!stored_dna.species)
|
||||
var/rando_race = pick(CONFIG_GET(keyed_flag_list/roundstart_races))
|
||||
var/rando_race = pick(GLOB.roundstart_races)
|
||||
stored_dna.species = new rando_race()
|
||||
|
||||
/mob/living/brain/Destroy()
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
// This code handles different species in the game.
|
||||
|
||||
GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
#define HEAT_DAMAGE_LEVEL_1 2
|
||||
#define HEAT_DAMAGE_LEVEL_2 3
|
||||
#define HEAT_DAMAGE_LEVEL_3 8
|
||||
@@ -12,7 +14,6 @@
|
||||
var/id // if the game needs to manually check your race to do something not included in a proc here, it will use this
|
||||
var/limbs_id //this is used if you want to use a different species limb sprites. Mainly used for angels as they look like humans.
|
||||
var/name // this is the fluff name. these will be left generic (such as 'Lizardperson' for the lizard race) so servers can change them to whatever
|
||||
var/roundstart = 0 // can this mob be chosen at roundstart? (assuming the config option is checked?)
|
||||
var/default_color = "#FFF" // if alien colors are disabled, this is the color that will be used by that race
|
||||
|
||||
var/sexes = 1 // whether or not the race has sexual characteristics. at the moment this is only 0 for skeletons and shadows
|
||||
@@ -92,6 +93,20 @@
|
||||
..()
|
||||
|
||||
|
||||
/proc/generate_selectable_species()
|
||||
for(var/I in subtypesof(/datum/species))
|
||||
var/datum/species/S = new I
|
||||
if(S.check_roundstart_eligible())
|
||||
GLOB.roundstart_races += S.id
|
||||
qdel(S)
|
||||
if(!GLOB.roundstart_races.len)
|
||||
GLOB.roundstart_races += "human"
|
||||
|
||||
/datum/species/proc/check_roundstart_eligible()
|
||||
if(id in (CONFIG_GET(keyed_flag_list/roundstart_races)))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/species/proc/random_name(gender,unique,lastname)
|
||||
if(unique)
|
||||
return random_unique_name(gender)
|
||||
@@ -1152,7 +1167,7 @@
|
||||
|
||||
if(radiation > RAD_MOB_VOMIT && prob(RAD_MOB_VOMIT_PROB))
|
||||
H.vomit(10, TRUE)
|
||||
|
||||
|
||||
if(radiation > RAD_MOB_MUTATE)
|
||||
if(prob(1))
|
||||
to_chat(H, "<span class='danger'>You mutate!</span>")
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
attack_verb = "claw"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
roundstart = 1
|
||||
liked_food = MEAT | FRIED
|
||||
disliked_food = TOXIC
|
||||
|
||||
@@ -31,7 +30,6 @@
|
||||
attack_verb = "peck"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
roundstart = 1
|
||||
liked_food = MEAT | FRUIT
|
||||
disliked_food = TOXIC
|
||||
|
||||
@@ -53,7 +51,6 @@
|
||||
attack_verb = "bite"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
roundstart = 1
|
||||
liked_food = MEAT
|
||||
disliked_food = TOXIC
|
||||
|
||||
@@ -75,7 +72,6 @@
|
||||
attack_verb = "flutter" //wat?
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
roundstart = 1
|
||||
liked_food = MEAT | FRUIT
|
||||
disliked_food = TOXIC
|
||||
|
||||
@@ -105,7 +101,6 @@
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/xeno
|
||||
exotic_bloodtype = "L"
|
||||
damage_overlay_type = "xeno"
|
||||
roundstart = 1
|
||||
liked_food = MEAT
|
||||
|
||||
//Praise the Omnissiah, A challange worthy of my skills - HS
|
||||
@@ -138,7 +133,6 @@
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno
|
||||
skinned_type = /obj/item/stack/sheet/animalhide/xeno
|
||||
// safe_toxins_max = 32 //Too much of anything is bad.
|
||||
roundstart = 0
|
||||
// whitelisted = 1
|
||||
// whitelist = list("talkingcactus") //testing whitelisting
|
||||
|
||||
@@ -182,7 +176,6 @@
|
||||
punchdamagehigh = 14
|
||||
punchstunthreshold = 13
|
||||
blacklisted = 1
|
||||
roundstart = 0
|
||||
whitelist = 1
|
||||
whitelist = list("talkingcactus")
|
||||
|
||||
@@ -233,7 +226,6 @@
|
||||
attack_verb = "bite"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
// roundstart = 1
|
||||
whitelisted = 1
|
||||
whitelist = list("rubyflamewing")
|
||||
blacklisted = 0
|
||||
@@ -248,4 +240,4 @@
|
||||
attack_verb = "claw"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
miss_sound = 'sound/weapons/slashmiss.ogg'
|
||||
roundstart = 1
|
||||
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
disliked_food = NONE
|
||||
liked_food = NONE
|
||||
toxic_food = NONE
|
||||
roundstart = TRUE
|
||||
|
||||
|
||||
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
|
||||
@@ -25,6 +25,10 @@
|
||||
else if (light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) //heal in the dark
|
||||
H.heal_overall_damage(1,1)
|
||||
|
||||
/datum/species/shadow/check_roundstart_eligible()
|
||||
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/datum/species/shadow/nightmare
|
||||
name = "Nightmare"
|
||||
@@ -61,7 +65,8 @@
|
||||
return -1
|
||||
return 0
|
||||
|
||||
|
||||
/datum/species/shadow/nightmare/check_roundstart_eligible()
|
||||
return FALSE
|
||||
|
||||
//Organs
|
||||
|
||||
|
||||
@@ -11,3 +11,8 @@
|
||||
damage_overlay_type = ""//let's not show bloody wounds or burns over bones.
|
||||
disliked_food = NONE
|
||||
liked_food = NONE
|
||||
|
||||
/datum/species/skeleton/check_roundstart_eligible()
|
||||
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
@@ -118,4 +118,4 @@
|
||||
else
|
||||
return ..()
|
||||
else
|
||||
return ..()
|
||||
return ..()
|
||||
@@ -14,6 +14,11 @@
|
||||
disliked_food = NONE
|
||||
liked_food = NONE
|
||||
|
||||
/datum/species/zombie/check_roundstart_eligible()
|
||||
if(SSevents.holidays && SSevents.holidays[HALLOWEEN])
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/datum/species/zombie/infectious
|
||||
name = "Infectious Zombie"
|
||||
id = "memezombies"
|
||||
@@ -24,6 +29,10 @@
|
||||
mutanteyes = /obj/item/organ/eyes/night_vision/zombie
|
||||
var/regen_cooldown = 0
|
||||
|
||||
/datum/species/zombie/infectious/check_roundstart_eligible()
|
||||
return FALSE
|
||||
|
||||
|
||||
/datum/species/zombie/infectious/spec_stun(mob/living/carbon/human/H,amount)
|
||||
. = min(2, amount)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user