Merge pull request #4819 from Mloc/bs12-itemorgans

human: move organ generation into a species proc
This commit is contained in:
Ccomp5950
2014-04-25 15:33:34 -05:00
8 changed files with 70 additions and 70 deletions

View File

@@ -110,9 +110,11 @@
sleep(48) sleep(48)
del(animation) del(animation)
var/mob/living/carbon/human/O = new( src ) var/mob/living/carbon/human/O
if(Mo.greaterform) if(Mo.greaterform)
O.set_species(Mo.greaterform) O = new(src, Mo.greaterform)
else
O = new(src)
if (M.dna.GetUIState(DNA_UI_GENDER)) if (M.dna.GetUIState(DNA_UI_GENDER))
O.gender = FEMALE O.gender = FEMALE

View File

@@ -162,7 +162,7 @@
spawn(30) spawn(30)
src.eject_wait = 0 src.eject_wait = 0
var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species)
occupant = H occupant = H
if(!R.dna.real_name) //to prevent null names if(!R.dna.real_name) //to prevent null names
@@ -212,8 +212,6 @@
if(R.dna.species == "Human") //no more xenos losing ears/tentacles if(R.dna.species == "Human") //no more xenos losing ears/tentacles
H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3") H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3")
H.set_species(R.dna.species)
//for(var/datum/language/L in languages) //for(var/datum/language/L in languages)
// H.add_language(L.name) // H.add_language(L.name)
H.suiciding = 0 H.suiciding = 0

View File

@@ -492,7 +492,7 @@ client/proc/one_click_antag()
/datum/admins/proc/create_vox_raider(obj/spawn_location, leader_chosen = 0) /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.gender = pick(MALE, FEMALE)
new_vox.h_style = "Short Vox Quills" 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.ready_dna(new_vox) // Creates DNA.
new_vox.dna.mutantrace = "vox" 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_initialize()
new_vox.mind.assigned_role = "MODE" new_vox.mind.assigned_role = "MODE"
new_vox.mind.special_role = "Vox Raider" new_vox.mind.special_role = "Vox Raider"

View File

@@ -12,39 +12,36 @@
real_name = "Test Dummy" real_name = "Test Dummy"
status_flags = GODMODE|CANPUSH status_flags = GODMODE|CANPUSH
/mob/living/carbon/human/skrell/New() /mob/living/carbon/human/skrell/New(var/new_loc)
h_style = "Skrell Male Tentacles" 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" 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" 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" h_style = "Short Vox Quills"
set_species("Vox") ..(new_loc, "Vox")
..()
/mob/living/carbon/human/diona/New() /mob/living/carbon/human/diona/New(var/new_loc)
species = new /datum/species/diona(src) ..(new_loc, "Diona")
..()
/mob/living/carbon/human/machine/New() /mob/living/carbon/human/machine/New(var/new_loc)
h_style = "blue IPC screen" h_style = "blue IPC screen"
set_species("Machine") ..(new_loc, "Machine")
..()
/mob/living/carbon/human/New() /mob/living/carbon/human/New(var/new_loc, var/new_species = null)
if(!species) if(!species)
set_species() if(new_species)
set_species(new_species)
else
set_species()
var/datum/reagents/R = new/datum/reagents(1000) var/datum/reagents/R = new/datum/reagents(1000)
reagents = R reagents = R
@@ -71,7 +68,6 @@
dna.real_name = real_name dna.real_name = real_name
prev_gender = gender // Debug for plural genders prev_gender = gender // Debug for plural genders
make_organs()
make_blood() make_blood()
/mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes) /mob/living/carbon/human/Bump(atom/movable/AM as mob|obj, yes)
@@ -1202,7 +1198,7 @@
else else
usr << "\blue [self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)]." usr << "\blue [self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)]."
/mob/living/carbon/human/proc/set_species(var/new_species) /mob/living/carbon/human/proc/set_species(var/new_species, var/force_organs)
if(!dna) if(!dna)
if(!new_species) if(!new_species)
@@ -1221,6 +1217,9 @@
species = all_species[new_species] species = all_species[new_species]
if(force_organs || !organs || !organs.len)
species.create_organs(src)
if(species.language) if(species.language)
add_language(species.language) add_language(species.language)

View File

@@ -42,14 +42,45 @@
var/blood_color = "#A10808" //Red. var/blood_color = "#A10808" //Red.
var/flesh_color = "#FFC896" //Pink. var/flesh_color = "#FFC896" //Pink.
/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"])
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) if(flags & IS_SYNTHETIC)
for(var/datum/organ/external/E in H.organs) for(var/datum/organ/external/E in H.organs)
if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue
E.status |= ORGAN_ROBOT E.status |= ORGAN_ROBOT
for(var/datum/organ/internal/I in H.internal_organs) 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 return
/datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns). /datum/species/proc/handle_death(var/mob/living/carbon/human/H) //Handles any species-specific death events (such as dionaea nymph spawns).
@@ -152,7 +183,6 @@
flesh_color = "#808D11" flesh_color = "#808D11"
/datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H) /datum/species/vox/handle_post_spawn(var/mob/living/carbon/human/H)
var/datum/organ/external/affected = H.get_organ("head") var/datum/organ/external/affected = H.get_organ("head")
//To avoid duplicates. //To avoid duplicates.
@@ -199,9 +229,10 @@
flesh_color = "#907E4A" flesh_color = "#907E4A"
/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H) /datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
H.gender = NEUTER H.gender = NEUTER
return ..()
/datum/species/diona/handle_death(var/mob/living/carbon/human/H) /datum/species/diona/handle_death(var/mob/living/carbon/human/H)
var/mob/living/carbon/monkey/diona/S = new(get_turf(H)) var/mob/living/carbon/monkey/diona/S = new(get_turf(H))

View File

@@ -349,15 +349,19 @@
spawning = 1 spawning = 1
close_spawn_windows() close_spawn_windows()
var/mob/living/carbon/human/new_character = new(loc) var/mob/living/carbon/human/new_character
new_character.lastarea = get_area(loc)
var/datum/species/chosen_species var/datum/species/chosen_species
if(client.prefs.species) if(client.prefs.species)
chosen_species = all_species[client.prefs.species] chosen_species = all_species[client.prefs.species]
if(chosen_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. 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.
new_character.set_species(client.prefs.species) 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 var/datum/language/chosen_language
if(client.prefs.language) if(client.prefs.language)

View File

@@ -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/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 /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["groin"])
organs_by_name["l_leg"] = new/datum/organ/external/l_leg(organs_by_name["groin"])
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"])
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 // Takes care of organ related updates, such as broken and missing limbs
/mob/living/carbon/human/proc/handle_organs() /mob/living/carbon/human/proc/handle_organs()
number_wounds = 0 number_wounds = 0

View File

@@ -61,7 +61,7 @@
else new_mob = new /mob/living/carbon/alien/larva(M.loc) else new_mob = new /mob/living/carbon/alien/larva(M.loc)
new_mob.universal_speak = 1 new_mob.universal_speak = 1
if("human") 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) if(M.gender == MALE)
new_mob.gender = MALE new_mob.gender = MALE
new_mob.name = pick(first_names_male) new_mob.name = pick(first_names_male)
@@ -73,10 +73,6 @@
var/datum/preferences/A = new() //Randomize appearance for the human var/datum/preferences/A = new() //Randomize appearance for the human
A.randomize_appearance_for(new_mob) A.randomize_appearance_for(new_mob)
var/mob/living/carbon/human/H = new_mob
var/newspecies = pick(all_species)
H.set_species(newspecies)
else else
return return