mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-28 14:37:04 +01:00
human: move organ generation into a species proc
New proc: /datum/species/create_organs Called in set_species when no organs exist or it's forced. Also shuffled set_species around a bit, adding a var to human/new to specify a species to start as. Should fix the adminspawn vox organ runtime. Signed-off-by: Mloc-Argent <colmohici@gmail.com> Conflicts: code/game/machinery/cloning.dm code/modules/mob/living/carbon/human/human.dm code/modules/mob/new_player/new_player.dm code/modules/organs/organ.dm
This commit is contained in:
@@ -492,7 +492,7 @@ client/proc/one_click_antag()
|
||||
|
||||
/datum/admins/proc/create_vox_raider(obj/spawn_location, leader_chosen = 0)
|
||||
|
||||
var/mob/living/carbon/human/new_vox = new(spawn_location.loc)
|
||||
var/mob/living/carbon/human/new_vox = new(spawn_location.loc, "Vox")
|
||||
|
||||
new_vox.gender = pick(MALE, FEMALE)
|
||||
new_vox.h_style = "Short Vox Quills"
|
||||
@@ -512,8 +512,6 @@ client/proc/one_click_antag()
|
||||
|
||||
new_vox.dna.ready_dna(new_vox) // Creates DNA.
|
||||
new_vox.dna.mutantrace = "vox"
|
||||
new_vox.set_species("Vox") // Actually makes the vox! How about that.
|
||||
new_vox.add_language("Vox-pidgin")
|
||||
new_vox.mind_initialize()
|
||||
new_vox.mind.assigned_role = "MODE"
|
||||
new_vox.mind.special_role = "Vox Raider"
|
||||
|
||||
@@ -13,62 +13,57 @@
|
||||
real_name = "Test Dummy"
|
||||
status_flags = GODMODE|CANPUSH
|
||||
|
||||
/mob/living/carbon/human/skrell/New()
|
||||
/mob/living/carbon/human/skrell/New(var/new_loc)
|
||||
h_style = "Skrell Male Tentacles"
|
||||
set_species("Skrell")
|
||||
..()
|
||||
..(new_loc, "Skrell")
|
||||
|
||||
/mob/living/carbon/human/tajaran/New()
|
||||
/mob/living/carbon/human/tajaran/New(var/new_loc)
|
||||
h_style = "Tajaran Ears"
|
||||
set_species("Tajaran")
|
||||
..()
|
||||
..(new_loc, "Tajaran")
|
||||
|
||||
/mob/living/carbon/human/unathi/New()
|
||||
/mob/living/carbon/human/unathi/New(var/new_loc)
|
||||
h_style = "Unathi Horns"
|
||||
set_species("Unathi")
|
||||
..()
|
||||
..(new_loc, "Unathi")
|
||||
|
||||
/mob/living/carbon/human/vox/New()
|
||||
/mob/living/carbon/human/vox/New(var/new_loc)
|
||||
h_style = "Short Vox Quills"
|
||||
set_species("Vox")
|
||||
..()
|
||||
..(new_loc, "Vox")
|
||||
|
||||
/mob/living/carbon/human/skellington/New()
|
||||
/mob/living/carbon/human/skellington/New(var/new_loc)
|
||||
h_style = "Bald"
|
||||
set_species("Skellington")
|
||||
..()
|
||||
..(new_loc, "Skellington")
|
||||
|
||||
/mob/living/carbon/human/diona/New()
|
||||
species = new /datum/species/diona(src)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/kidan/New()
|
||||
species = new /datum/species/kidan(src)
|
||||
..()
|
||||
/mob/living/carbon/human/kidan/New(var/new_loc)
|
||||
..(new_loc, "Kidan")
|
||||
|
||||
/mob/living/carbon/human/slime/New()
|
||||
species = new /datum/species/slime(src)
|
||||
/mob/living/carbon/human/slime/New(var/new_loc)
|
||||
..(new_loc, "Slime People")
|
||||
dna = new /datum/dna(null)
|
||||
dna.mutantrace = "slime"
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/machine/New()
|
||||
species = new /datum/species/machine(src)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/grey/New()
|
||||
set_species("Grey")
|
||||
/mob/living/carbon/human/grey/New(var/new_loc)
|
||||
..(new_loc, "Grey")
|
||||
mutations.Add(M_REMOTE_TALK)
|
||||
verbs += /mob/living/carbon/human/proc/remotesay
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/human/New()
|
||||
species = new /datum/species/human(src)
|
||||
..()
|
||||
/mob/living/carbon/human/human/New(var/new_loc)
|
||||
..(new_loc, "Human")
|
||||
|
||||
/mob/living/carbon/human/New()
|
||||
/mob/living/carbon/human/diona/New(var/new_loc)
|
||||
..(new_loc, "Diona")
|
||||
|
||||
/mob/living/carbon/human/machine/New(var/new_loc)
|
||||
h_style = "blue IPC screen"
|
||||
..(new_loc, "Machine")
|
||||
|
||||
/mob/living/carbon/human/New(var/new_loc, var/new_species = null)
|
||||
if(!species)
|
||||
set_species()
|
||||
if(new_species)
|
||||
set_species(new_species)
|
||||
else
|
||||
set_species()
|
||||
|
||||
if(species.language)
|
||||
var/datum/language/L = all_languages[species.language]
|
||||
@@ -92,7 +87,7 @@
|
||||
hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
|
||||
hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy")
|
||||
|
||||
|
||||
|
||||
..()
|
||||
|
||||
@@ -100,7 +95,6 @@
|
||||
dna.real_name = real_name
|
||||
|
||||
prev_gender = gender // Debug for plural genders
|
||||
make_organs()
|
||||
make_blood()
|
||||
|
||||
|
||||
@@ -1296,7 +1290,8 @@
|
||||
else
|
||||
usr << "\blue [self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)]."
|
||||
|
||||
/mob/living/carbon/human/proc/set_species(var/new_species,var/on_spawn=0)
|
||||
|
||||
/mob/living/carbon/human/proc/set_species(var/new_species, var/force_organs)
|
||||
|
||||
if(!dna)
|
||||
if(!new_species)
|
||||
@@ -1315,6 +1310,9 @@
|
||||
|
||||
species = all_species[new_species]
|
||||
|
||||
if(force_organs || !organs || !organs.len)
|
||||
species.create_organs(src)
|
||||
|
||||
if(species.language)
|
||||
add_language(species.language)
|
||||
|
||||
|
||||
@@ -46,14 +46,46 @@
|
||||
|
||||
var/list/abilities = list() // For species-derived or admin-given powers
|
||||
|
||||
/datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment.
|
||||
/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs.
|
||||
//This is a basic humanoid limb setup.
|
||||
H.organs = list()
|
||||
H.organs_by_name["chest"] = new/datum/organ/external/chest()
|
||||
H.organs_by_name["groin"] = new/datum/organ/external/groin(H.organs_by_name["chest"])
|
||||
H.organs_by_name["head"] = new/datum/organ/external/head(H.organs_by_name["chest"])
|
||||
H.organs_by_name["l_arm"] = new/datum/organ/external/l_arm(H.organs_by_name["chest"])
|
||||
H.organs_by_name["r_arm"] = new/datum/organ/external/r_arm(H.organs_by_name["chest"])
|
||||
H.organs_by_name["r_leg"] = new/datum/organ/external/r_leg(H.organs_by_name["groin"])
|
||||
H.organs_by_name["l_leg"] = new/datum/organ/external/l_leg(H.organs_by_name["groin"])
|
||||
H.organs_by_name["l_hand"] = new/datum/organ/external/l_hand(H.organs_by_name["l_arm"])
|
||||
H.organs_by_name["r_hand"] = new/datum/organ/external/r_hand(H.organs_by_name["r_arm"])
|
||||
H.organs_by_name["l_foot"] = new/datum/organ/external/l_foot(H.organs_by_name["l_leg"])
|
||||
H.organs_by_name["r_foot"] = new/datum/organ/external/r_foot(H.organs_by_name["r_leg"])
|
||||
|
||||
if (name!="Slime People")
|
||||
H.internal_organs = list()
|
||||
H.internal_organs_by_name["heart"] = new/datum/organ/internal/heart(H)
|
||||
H.internal_organs_by_name["lungs"] = new/datum/organ/internal/lungs(H)
|
||||
H.internal_organs_by_name["liver"] = new/datum/organ/internal/liver(H)
|
||||
H.internal_organs_by_name["kidney"] = new/datum/organ/internal/kidney(H)
|
||||
H.internal_organs_by_name["brain"] = new/datum/organ/internal/brain(H)
|
||||
H.internal_organs_by_name["eyes"] = new/datum/organ/internal/eyes(H)
|
||||
|
||||
for(var/name in H.organs_by_name)
|
||||
H.organs += H.organs_by_name[name]
|
||||
|
||||
for(var/datum/organ/external/O in H.organs)
|
||||
O.owner = H
|
||||
|
||||
if(flags & IS_SYNTHETIC)
|
||||
for(var/datum/organ/external/E in H.organs)
|
||||
if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue
|
||||
E.status |= ORGAN_ROBOT
|
||||
for(var/datum/organ/internal/I in H.internal_organs)
|
||||
I.robotic = 2
|
||||
I.mechanize()
|
||||
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_post_spawn(var/mob/living/carbon/human/H) //Handles anything not already covered by basic species assignment.
|
||||
return
|
||||
|
||||
/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns).
|
||||
@@ -143,7 +175,6 @@
|
||||
flags = NO_SCAN | IS_WHITELISTED | NO_BLOOD
|
||||
|
||||
/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
|
||||
var/datum/organ/external/affected = H.get_organ("head")
|
||||
|
||||
//To avoid duplicates.
|
||||
@@ -235,9 +266,10 @@
|
||||
flags = NO_BREATHE | REQUIRE_LIGHT | NO_SCAN | IS_PLANT | RAD_ABSORB | NO_BLOOD | IS_SLOW | NO_PAIN
|
||||
|
||||
/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
|
||||
|
||||
H.gender = NEUTER
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/species/diona/handle_death(var/mob/living/carbon/human/H)
|
||||
|
||||
var/mob/living/carbon/monkey/diona/S = new(get_turf(H))
|
||||
|
||||
@@ -369,40 +369,21 @@
|
||||
proc/create_character()
|
||||
spawning = 1
|
||||
close_spawn_windows()
|
||||
|
||||
|
||||
var/mob/living/carbon/human/new_character
|
||||
|
||||
var/datum/species/chosen_species
|
||||
if(client.prefs.species)
|
||||
chosen_species = all_species[client.prefs.species]
|
||||
if(chosen_species)
|
||||
if(is_alien_whitelisted(src, client.prefs.species) || !config.usealienwhitelist || !(chosen_species.flags & IS_WHITELISTED) || (client.holder.rights & R_ADMIN) )// Have to recheck admin due to no usr at roundstart. Latejoins are fine though.
|
||||
switch(chosen_species.name)
|
||||
if("Slime People")
|
||||
new_character = new /mob/living/carbon/human/slime(loc)
|
||||
if("Tajaran")
|
||||
new_character = new /mob/living/carbon/human/tajaran(loc)
|
||||
if("Unathi")
|
||||
new_character = new /mob/living/carbon/human/unathi(loc)
|
||||
if("Skrell")
|
||||
new_character = new /mob/living/carbon/human/skrell(loc)
|
||||
if("Diona")
|
||||
new_character = new /mob/living/carbon/human/diona(loc)
|
||||
if("Vox")
|
||||
new_character = new /mob/living/carbon/human/vox(loc)
|
||||
if("Kidan")
|
||||
new_character = new /mob/living/carbon/human/kidan(loc)
|
||||
if("Grey")
|
||||
new_character = new /mob/living/carbon/human/grey(loc)
|
||||
if("Machine")
|
||||
new_character = new /mob/living/carbon/human/machine(loc)
|
||||
if("Human")
|
||||
new_character = new /mob/living/carbon/human/human(loc)
|
||||
// new_character.set_species(client.prefs.species)
|
||||
if(chosen_species.language)
|
||||
new_character.add_language(chosen_species.language)
|
||||
else
|
||||
new_character = new /mob/living/carbon/human(loc)
|
||||
new_character.lastarea = get_area(loc)
|
||||
new_character = new(loc, client.prefs.species)
|
||||
|
||||
if(!new_character)
|
||||
new_character = new(loc)
|
||||
|
||||
new_character.lastarea = get_area(loc)
|
||||
|
||||
var/datum/language/chosen_language
|
||||
if(client.prefs.language)
|
||||
|
||||
@@ -37,34 +37,6 @@
|
||||
/mob/living/carbon/human/var/list/organs_by_name = list() // map organ names to organs
|
||||
/mob/living/carbon/human/var/list/internal_organs_by_name = list() // so internal organs have less ickiness too
|
||||
|
||||
//Creates and initializes and connects external and internal organs
|
||||
/mob/living/carbon/human/proc/make_organs()
|
||||
organs = list()
|
||||
organs_by_name["chest"] = new/datum/organ/external/chest()
|
||||
organs_by_name["groin"] = new/datum/organ/external/groin(organs_by_name["chest"])
|
||||
organs_by_name["head"] = new/datum/organ/external/head(organs_by_name["chest"])
|
||||
organs_by_name["l_arm"] = new/datum/organ/external/l_arm(organs_by_name["chest"])
|
||||
organs_by_name["r_arm"] = new/datum/organ/external/r_arm(organs_by_name["chest"])
|
||||
organs_by_name["r_leg"] = new/datum/organ/external/r_leg(organs_by_name["chest"])
|
||||
organs_by_name["l_leg"] = new/datum/organ/external/l_leg(organs_by_name["chest"])
|
||||
organs_by_name["l_hand"] = new/datum/organ/external/l_hand(organs_by_name["l_arm"])
|
||||
organs_by_name["r_hand"] = new/datum/organ/external/r_hand(organs_by_name["r_arm"])
|
||||
organs_by_name["l_foot"] = new/datum/organ/external/l_foot(organs_by_name["l_leg"])
|
||||
organs_by_name["r_foot"] = new/datum/organ/external/r_foot(organs_by_name["r_leg"])
|
||||
|
||||
if (species.name!="Slime People")
|
||||
internal_organs_by_name["heart"] = new/datum/organ/internal/heart(src)
|
||||
internal_organs_by_name["lungs"] = new/datum/organ/internal/lungs(src)
|
||||
internal_organs_by_name["liver"] = new/datum/organ/internal/liver(src)
|
||||
internal_organs_by_name["kidney"] = new/datum/organ/internal/kidney(src)
|
||||
internal_organs_by_name["brain"] = new/datum/organ/internal/brain(src)
|
||||
internal_organs_by_name["eyes"] = new/datum/organ/internal/eyes(src)
|
||||
|
||||
for(var/name in organs_by_name)
|
||||
organs += organs_by_name[name]
|
||||
|
||||
for(var/datum/organ/external/O in organs)
|
||||
O.owner = src
|
||||
|
||||
// Takes care of organ related updates, such as broken and missing limbs
|
||||
/mob/living/carbon/human/proc/handle_organs()
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
else new_mob = new /mob/living/carbon/alien/larva(M.loc)
|
||||
new_mob.universal_speak = 1
|
||||
if("human")
|
||||
new_mob = new /mob/living/carbon/human(M.loc)
|
||||
new_mob = new /mob/living/carbon/human(M.loc, pick(all_species))
|
||||
if(M.gender == MALE)
|
||||
new_mob.gender = MALE
|
||||
new_mob.name = pick(first_names_male)
|
||||
@@ -71,10 +71,6 @@
|
||||
|
||||
var/datum/preferences/A = new() //Randomize appearance for the human
|
||||
A.randomize_appearance_for(new_mob)
|
||||
|
||||
var/mob/living/carbon/human/H = new_mob
|
||||
var/newspecies = pick(all_species)
|
||||
H.set_species(newspecies)
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user