Merge pull request #6618 from Zuhayr/dev

Bunch of minor fixes for xenomorphs and borer husks.
This commit is contained in:
Snapshot
2014-10-06 16:36:30 -07:00
17 changed files with 148 additions and 35 deletions

View File

@@ -22,12 +22,16 @@
if(istype(player,/mob/dead))
understood = 1
else if(src in player.languages)
else if((src in player.languages) && check_special_condition(player))
understood = 1
if(understood)
if(!speaker_mask) speaker_mask = speaker.name
player << "<i><span class='game say'>[name], <span class='name'>[speaker_mask]</span> <span class='message'>[speech_verb], \"<span class='[colour]'>[message]</span><span class='message'>\"</span></span></i>"
var/msg = "<i><span class='game say'>[name], <span class='name'>[speaker_mask]</span> <span class='message'>[speech_verb], \"<span class='[colour]'>[message]</span><span class='message'>\"</span></span></i>"
player << "[msg]"
/datum/language/proc/check_special_condition(var/mob/other)
return 1
/datum/language/unathi
name = "Sinta'unathi"
@@ -69,6 +73,13 @@
key = "q"
flags = RESTRICTED
/datum/language/common
name = "Galactic Common"
desc = "The common galactic tongue."
speech_verb = "says"
key = "0"
flags = RESTRICTED
/datum/language/human
name = "Sol Common"
desc = "A bastardized hybrid of informal English and elements of Mandarin Chinese; the common language of the Sol system."
@@ -91,6 +102,14 @@
colour = "rough"
key = "3"
/datum/language/xenocommon
name = "Xenomorph"
colour = "alien"
desc = "The common tongue of the xenomorphs."
speech_verb = "hisses"
key = "4"
flags = RESTRICTED
/datum/language/xenos
name = "Hivemind"
desc = "Xenomorphs have the strange ability to commune over a psychic hivemind."
@@ -99,6 +118,16 @@
key = "a"
flags = RESTRICTED | HIVEMIND
/datum/language/xenos/check_special_condition(var/mob/other)
var/mob/living/carbon/M = other
if(!istype(M))
return 1
if(locate(/datum/organ/internal/xenos/hivenode) in M.internal_organs)
return 1
return 0
/datum/language/ling
name = "Changeling"
desc = "Although they are normally wary and suspicious of each other, changelings can commune over a distance."
@@ -116,7 +145,7 @@
/datum/language/corticalborer
name = "Cortical Link"
desc = "Cortical borers possess a strange between their tiny minds."
desc = "Cortical borers possess a strange link between their tiny minds."
speech_verb = "sings"
colour = "alien"
key = "x"

View File

@@ -16,4 +16,4 @@
/mob/living/carbon/alien/larva/New()
..()
add_language("Rootspeak")
add_language("Xenomorph") //Bonus language.

View File

@@ -12,6 +12,9 @@
if(stat == 2)
return say_dead(message)
if(copytext(message,1,2) == "*")
return emote(copytext(message,2))
var/datum/language/speaking = null
if(length(message) >= 2)

View File

@@ -23,9 +23,15 @@
attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O,/obj/item/organ/brain) && !brainmob) //Time to stick a brain in it --NEO
if(!O:brainmob)
var/obj/item/organ/brain/B = O
if(B.health <= 0)
user << "\red That brain is well and truly dead."
return
else if(!B.brainmob)
user << "\red You aren't sure where this brain came from, but you're pretty sure it's a useless brain."
return
for(var/mob/V in viewers(src, null))
V.show_message(text("\blue [user] sticks \a [O] into \the [src]."))

View File

@@ -17,6 +17,12 @@
var/mob/living/carbon/brain/brainmob = null
/obj/item/organ/brain/xeno
name = "thinkpan"
desc = "It looks kind of like an enormous wad of purple bubblegum."
icon = 'icons/mob/alien.dmi'
icon_state = "chitin"
/obj/item/organ/brain/New()
..()
spawn(5)

View File

@@ -23,10 +23,6 @@ proc/create_new_xenomorph(var/alien_caste,var/target)
h_style = "Bald"
..(new_loc, "Xenomorph Queen")
/mob/living/carbon/human/Stat()
..()
// I feel like we should generalize/condense down all the various icon-rendering antag procs.
/*----------------------------------------
Proc: AddInfectionImages()

View File

@@ -1,6 +1,7 @@
//Stand-in until this is made more lore-friendly.
/datum/species/xenos
name = "Xenomorph"
default_language = "Xenomorph"
language = "Hivemind"
unarmed_type = /datum/unarmed_attack/claws/strong
secondary_unarmed_type = /datum/unarmed_attack/bite/strong
@@ -40,7 +41,7 @@
has_organ = list(
"heart" = /datum/organ/internal/heart,
"lungs" = /datum/organ/internal/lungs,
"brain" = /datum/organ/internal/brain,
"brain" = /datum/organ/internal/brain/xeno,
"plasma vessel" = /datum/organ/internal/xenos/plasmavessel,
"hive node" = /datum/organ/internal/xenos/hivenode,
"nutrient vessel" = /datum/organ/internal/diona/nutrients
@@ -51,6 +52,13 @@
var/weeds_heal_rate = 1 // Health regen on weeds.
var/weeds_plasma_rate = 5 // Plasma regen on weeds.
/datum/species/xenos/can_understand(var/mob/other)
if(istype(other,/mob/living/carbon/alien/larva))
return 1
return 0
/datum/species/xenos/hug(var/mob/living/carbon/human/H,var/mob/living/target)
H.visible_message("<span class='notice'>[H] caresses [target] with its scythe-like arm.</span>", \
"<span class='notice'>You caress [target] with your scythe-like arm.</span>")
@@ -109,7 +117,7 @@
has_organ = list(
"heart" = /datum/organ/internal/heart,
"lungs" = /datum/organ/internal/lungs,
"brain" = /datum/organ/internal/brain,
"brain" = /datum/organ/internal/brain/xeno,
"plasma vessel" = /datum/organ/internal/xenos/plasmavessel/queen,
"acid gland" = /datum/organ/internal/xenos/acidgland,
"hive node" = /datum/organ/internal/xenos/hivenode,
@@ -148,7 +156,7 @@
has_organ = list(
"heart" = /datum/organ/internal/heart,
"lungs" = /datum/organ/internal/lungs,
"brain" = /datum/organ/internal/brain,
"brain" = /datum/organ/internal/brain/xeno,
"plasma vessel" = /datum/organ/internal/xenos/plasmavessel/hunter,
"hive node" = /datum/organ/internal/xenos/hivenode,
"nutrient vessel" = /datum/organ/internal/diona/nutrients
@@ -176,7 +184,7 @@
has_organ = list(
"heart" = /datum/organ/internal/heart,
"lungs" = /datum/organ/internal/lungs,
"brain" = /datum/organ/internal/brain,
"brain" = /datum/organ/internal/brain/xeno,
"plasma vessel" = /datum/organ/internal/xenos/plasmavessel/sentinel,
"acid gland" = /datum/organ/internal/xenos/acidgland,
"hive node" = /datum/organ/internal/xenos/hivenode,
@@ -207,7 +215,7 @@
has_organ = list(
"heart" = /datum/organ/internal/heart,
"lungs" = /datum/organ/internal/lungs,
"brain" = /datum/organ/internal/brain,
"brain" = /datum/organ/internal/brain/xeno,
"egg sac" = /datum/organ/internal/xenos/eggsac,
"plasma vessel" = /datum/organ/internal/xenos/plasmavessel/queen,
"acid gland" = /datum/organ/internal/xenos/acidgland,

View File

@@ -1263,6 +1263,9 @@
if(species.language)
remove_language(species.language)
if(species.default_language)
remove_language(species.default_language)
species = all_species[new_species]
species.create_organs(src)
@@ -1270,6 +1273,9 @@
if(species.language)
add_language(species.language)
if(species.default_language)
add_language(species.default_language)
if(species.base_color && default_colour)
//Apply colour.
r_skin = hex2num(copytext(species.base_color,2,4))
@@ -1426,4 +1432,4 @@
var/datum/organ/internal/eyes = internal_organs_by_name["eyes"]
if(eyes && istype(eyes) && !eyes.status & ORGAN_CUT_AWAY)
return 1
return 0
return 0

View File

@@ -435,6 +435,7 @@
proc/handle_breath(datum/gas_mixture/breath)
if(status_flags & GODMODE)
return
@@ -456,7 +457,17 @@
return 0
var/safe_pressure_min = 16 // Minimum safe partial pressure of breathable gas in kPa
//var/safe_pressure_max = 140 // Maximum safe partial pressure of breathable gas in kPa (Not used for now)
// Lung damage increases the minimum safe pressure.
if(species.has_organ["lungs"])
var/datum/organ/internal/lungs/L = internal_organs_by_name["lungs"]
if(!L)
safe_pressure_min = INFINITY //No lungs, how are you breathing?
else if(L.is_broken())
safe_pressure_min *= 1.5
else if(L.is_bruised())
safe_pressure_min *= 1.25
var/safe_exhaled_max = 10
var/safe_toxins_max = 0.005
var/SA_para_min = 1

View File

@@ -1,7 +1,5 @@
/mob/living/carbon/human/say(var/message)
//TODO: Add checks for species who do not speak common.
var/verb = "says"
var/alt_name = ""
var/message_range = world.view
@@ -34,9 +32,13 @@
//parse the language code and consume it
var/datum/language/speaking = parse_language(message)
if(speaking)
message = copytext(message,3)
else if(species.default_language)
speaking = all_languages[species.default_language]
if (speaking)
verb = speaking.speech_verb
message = copytext(message,3)
// This is broadcast to all mobs with the language,
// irrespective of distance or anything else.
@@ -169,6 +171,9 @@
if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak.
return 1
if(species.can_understand(other))
return 1
//These only pertain to common. Languages are handled by mob/say_understands()
if (!speaking)
if (istype(other, /mob/living/carbon/alien/diona))

View File

@@ -13,7 +13,6 @@
var/primitive // Lesser form, if any (ie. monkey for humans)
var/tail // Name of tail image in species effects icon file.
var/language // Default racial language, if any.
var/datum/unarmed_attack/unarmed // For empty hand harm-intent attack
var/datum/unarmed_attack/secondary_unarmed // For empty hand harm-intent attack if the first fails.
var/datum/hud_data/hud
@@ -24,6 +23,9 @@
var/unarmed_type = /datum/unarmed_attack
var/secondary_unarmed_type = /datum/unarmed_attack/bite
var/language // Default racial language, if any.
// Default language is used when 'say' is used without modifiers.
var/default_language = "Galactic Common"
var/secondary_langs = list() // The names of secondary languages that are available to this species.
var/mutantrace // Safeguard due to old code.
var/list/speech_sounds // A list of sounds to potentially play when speaking.
@@ -194,6 +196,10 @@
/datum/species/proc/get_inventory_dialogue(var/mob/living/carbon/human/H)
return
//Used by xenos understanding larvae and dionaea understanding nymphs.
/datum/species/proc/can_understand(var/mob/other)
return
/datum/species/human
name = "Human"
language = "Sol Common"
@@ -274,7 +280,8 @@
name = "Vox"
icobase = 'icons/mob/human_races/r_vox.dmi'
deform = 'icons/mob/human_races/r_def_vox.dmi'
language = "Vox-pidgin"
default_language = "Vox-pidgin"
language = "Galactic Common"
unarmed_type = /datum/unarmed_attack/claws/strong
secondary_unarmed_type = /datum/unarmed_attack/bite/strong
rarity_value = 2
@@ -319,7 +326,6 @@
name = "Vox Armalis"
icobase = 'icons/mob/human_races/r_armalis.dmi'
deform = 'icons/mob/human_races/r_armalis.dmi'
language = "Vox-pidgin"
rarity_value = 10
warning_low_pressure = 50
@@ -395,6 +401,12 @@
reagent_tag = IS_DIONA
/datum/species/diona/can_understand(var/mob/other)
var/mob/living/carbon/alien/diona/D = other
if(istype(D))
return 1
return 0
/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
H.gender = NEUTER
return ..()