Merge branch 'master' of https://github.com/PolarisSS13/Polaris into theUnboxingBegins

# Conflicts:
#	code/modules/mob/new_player/sprite_accessories.dm
#	code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
#	icons/mob/human_face.dmi
#	icons/mob/suit.dmi
This commit is contained in:
Anewbe
2017-01-17 22:05:38 -06:00
137 changed files with 2730 additions and 596 deletions
@@ -843,3 +843,9 @@ mob/observer/dead/MayRespawn(var/feedback = 0)
if(finalized == "No")
icon_state = previous_state
/mob/observer/dead/is_blind()
return FALSE
/mob/observer/dead/is_deaf()
return FALSE
+2
View File
@@ -7,6 +7,7 @@
log_say("Ghost/[src.key] : [message]")
if (src.client)
client.handle_spam_prevention(MUTE_DEADCHAT)
if(src.client.prefs.muted & MUTE_DEADCHAT)
src << "\red You cannot talk in deadchat (muted)."
return
@@ -26,6 +27,7 @@
log_emote("Ghost/[src.key] : [message]")
if(src.client)
client.handle_spam_prevention(MUTE_DEADCHAT)
if(src.client.prefs.muted & MUTE_DEADCHAT)
src << "\red You cannot emote in deadchat (muted)."
return
+1 -1
View File
@@ -59,7 +59,7 @@
if(is_preference_enabled(/datum/client_preference/ghost_ears) && (speaker in view(src)))
message = "<b>[message]</b>"
if((sdisabilities & DEAF) || ear_deaf)
if(is_deaf())
if(!language || !(language.flags & INNATE)) // INNATE is the flag for audible-emote-language, so we don't want to show an "x talks but you cannot hear them" message if it's set
if(speaker == src)
src << "<span class='warning'>You cannot hear yourself speak!</span>"
+4 -4
View File
@@ -20,7 +20,7 @@
// 'basic' language; spoken by default.
/datum/language/common
name = "Galactic Common"
name = LANGUAGE_GALCOM
desc = "The common galactic tongue."
speech_verb = "says"
whisper_verb = "whispers"
@@ -39,7 +39,7 @@
// Galactic common languages (systemwide accepted standards).
/datum/language/trader
name = "Tradeband"
name = LANGUAGE_TRADEBAND
desc = "Maintained by the various trading cartels in major systems, this elegant, structured language is used for bartering and bargaining."
speech_verb = "enunciates"
colour = "say_quote"
@@ -56,7 +56,7 @@
// Criminal language.
/datum/language/gutter
name = "Gutter"
name = LANGUAGE_GUTTER
desc = "There is no true language named Gutter. 'Gutter' is a catchall term for a collection of unofficial SolCom dialects that has somehow managed to spread across the stars."
speech_verb = "growls"
colour = "rough"
@@ -115,7 +115,7 @@
"his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi")
/datum/language/sign
name = "Sign Language"
name = LANGUAGE_SIGN
desc = "A sign language commonly used for those who are deaf or mute."
signlang_verb = list("gestures")
colour = "say_quote"
+16 -4
View File
@@ -160,12 +160,15 @@
// Can we speak this language, as opposed to just understanding it?
/mob/proc/can_speak(datum/language/speaking)
//Prevents someone from speaking a null language.
if(speaking)
return (speaking.can_speak_special(src) && (universal_speak || (speaking && (speaking.flags & INNATE)) || speaking in src.languages))
else
if(!speaking)
log_debug("[src] attempted to speak a null language.")
return 0
if (only_species_language && speaking != all_languages[species_language])
return 0
return (speaking.can_speak_special(src) && (universal_speak || (speaking && (speaking.flags & INNATE)) || speaking in src.languages))
/mob/proc/get_language_prefix()
if(client && client.prefs.language_prefixes && client.prefs.language_prefixes.len)
return client.prefs.language_prefixes[1]
@@ -213,7 +216,10 @@
/mob/living/Topic(href, href_list)
if(href_list["default_lang"])
if(href_list["default_lang"] == "reset")
set_default_language(null)
if (species_language)
set_default_language(all_languages[species_language])
else
set_default_language(null)
else
var/datum/language/L = locate(href_list["default_lang"])
if(L && (L in languages))
@@ -223,4 +229,10 @@
else
return ..()
/proc/transfer_languages(var/mob/source, var/mob/target, var/except_flags)
for(var/datum/language/L in source.languages)
if(L.flags & except_flags)
continue
target.add_language(L.name)
#undef SCRAMBLE_CACHE_LEN
+17 -11
View File
@@ -1,6 +1,6 @@
/datum/language/diona
name = "Rootspeak"
desc = "A creaking, subvocal language spoken instinctively by the Dionaea. Due to the unique makeup of the average Diona, a phrase of Rootspeak can be a combination of anywhere from one to twelve individual voices and notes."
/datum/language/diona_local
name = LANGUAGE_ROOTLOCAL
desc = "A complex language known instinctively by Dionaea, 'spoken' by emitting modulated radio waves. This version uses high frequency waves for quick communication at short ranges."
speech_verb = "creaks and rustles"
ask_verb = "creaks"
exclaim_verb = "rustles"
@@ -9,13 +9,19 @@
flags = RESTRICTED
syllables = list("hs","zt","kr","st","sh")
/datum/language/diona/get_random_name()
/datum/language/diona_local/get_random_name()
var/new_name = "[pick(list("To Sleep Beneath","Wind Over","Embrace of","Dreams of","Witnessing","To Walk Beneath","Approaching the"))]"
new_name += " [pick(list("the Void","the Sky","Encroaching Night","Planetsong","Starsong","the Wandering Star","the Empty Day","Daybreak","Nightfall","the Rain"))]"
return new_name
/datum/language/diona_global
name = LANGUAGE_ROOTGLOBAL
desc = "A complex language known instinctively by Dionaea, 'spoken' by emitting modulated radio waves. This version uses low frequency waves for slow communication at long ranges."
key = "w"
flags = RESTRICTED | HIVEMIND
/datum/language/unathi
name = "Sinta'unathi"
name = LANGUAGE_UNATHI
desc = "The common language of Moghes, composed of sibilant hisses and rattles. Spoken natively by Unathi."
speech_verb = "hisses"
ask_verb = "hisses"
@@ -42,7 +48,7 @@
return capitalize(new_name)
/datum/language/tajaran
name = "Siik"
name = LANGUAGE_SIIK
desc = "The most prevalant language of Meralar, composed of expressive yowls and chirps. Native to the Tajaran."
speech_verb = "mrowls"
ask_verb = "mrowls"
@@ -65,7 +71,7 @@
return new_name
/datum/language/skrell
name = "Skrellian"
name = LANGUAGE_SKRELLIAN
desc = "A melodic and complex language spoken by the Skrell of Qerrbalak. Some of the notes are inaudible to humans."
speech_verb = "warbles"
ask_verb = "warbles"
@@ -76,7 +82,7 @@
syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!")
/datum/language/human
name = "Sol Common"
name = LANGUAGE_SOL_COMMON
desc = "A bastardized hybrid of informal English and elements of Mandarin Chinese; the common language of the Sol system."
speech_verb = "says"
whisper_verb = "whispers"
@@ -104,8 +110,8 @@
return ..()
/datum/language/machine
name = "Encoded Audio Language"
desc = "A efficient language of encoded tones developed by synthetics and cyborgs."
name = LANGUAGE_EAL
desc = "An efficient language of encoded tones developed by synthetics and cyborgs."
speech_verb = "whistles"
ask_verb = "chirps"
exclaim_verb = "whistles loudly"
@@ -127,7 +133,7 @@
return pick(ai_names)
/datum/language/seromi
name = "Schechi"
name = LANGUAGE_SCHECHI
desc = "A trilling language spoken by the diminutive Teshari."
speech_verb = "chirps"
ask_verb = "chirrups"
@@ -7,9 +7,11 @@
speak_emote = list("chirrups")
icon_state = "nymph"
item_state = "nymph"
language = "Rootspeak"
language = LANGUAGE_ROOTLOCAL
species_language = LANGUAGE_ROOTLOCAL
only_species_language = 1
death_msg = "expires with a pitiful chirrup..."
universal_understand = 1
universal_understand = 0
universal_speak = 0 // Dionaea do not need to speak to people other than other dionaea.
can_pull_size = ITEMSIZE_SMALL
@@ -22,6 +24,8 @@
..()
species = all_species["Diona"]
add_language(LANGUAGE_ROOTGLOBAL)
add_language(LANGUAGE_GALCOM)
verbs += /mob/living/carbon/alien/diona/proc/merge
/mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands.
@@ -28,6 +28,8 @@
adult.set_species(new_species)
show_evolution_blurb()
transfer_languages(src, adult)
if(mind)
mind.transfer_to(adult)
if (can_namepick_as_adult)
@@ -17,9 +17,6 @@
var/datum/language/speaking = parse_language(message)
if(speaking)
message = copytext(message, 2+length(speaking.key))
message = trim(message)
if(!message || stat)
+1 -1
View File
@@ -177,7 +177,7 @@
/obj/item/device/mmi/digital/New()
src.brainmob = new(src)
src.brainmob.add_language("Robot Talk")
src.brainmob.add_language("Encoded Audio Language")
src.brainmob.add_language(LANGUAGE_EAL)
src.brainmob.loc = src
src.brainmob.container = src
src.brainmob.stat = 0
+2
View File
@@ -4,6 +4,8 @@
ingested = new/datum/reagents/metabolism(1000, src, CHEM_INGEST)
touching = new/datum/reagents/metabolism(1000, src, CHEM_TOUCH)
reagents = bloodstr
if (!default_language && species_language)
default_language = all_languages[species_language]
..()
/mob/living/carbon/Life()
@@ -22,12 +22,13 @@
// Should this all be in Touch()?
if(istype(H))
var/hit_zone = get_zone_with_miss_chance(H.zone_sel.selecting, src, get_accuracy_penalty(H))
if(!hit_zone)
H.do_attack_animation(src)
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("\red <B>[H] attempts to punch [src], but misses!</B>")
return 0
if(get_accuracy_penalty(H)) //Should only trigger if they're not aiming well
var/hit_zone = get_zone_with_miss_chance(H.zone_sel.selecting, src, get_accuracy_penalty(H))
if(!hit_zone)
H.do_attack_animation(src)
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("\red <B>[H] reaches for [src], but misses!</B>")
return 0
if(H != src && check_shields(0, null, H, H.zone_sel.selecting, H.name))
H.do_attack_animation(src)
@@ -90,6 +90,54 @@
return 0
/mob/living/carbon/human
var/next_sonar_ping = 0
/mob/living/carbon/human/proc/sonar_ping()
set name = "Listen In"
set desc = "Allows you to listen in to movement and noises around you."
set category = "Abilities"
if(incapacitated())
src << "<span class='warning'>You need to recover before you can use this ability.</span>"
return
if(world.time < next_sonar_ping)
src << "<span class='warning'>You need another moment to focus.</span>"
return
if(is_deaf() || is_below_sound_pressure(get_turf(src)))
src << "<span class='warning'>You are for all intents and purposes currently deaf!</span>"
return
next_sonar_ping += 10 SECONDS
var/heard_something = FALSE
src << "<span class='notice'>You take a moment to listen in to your environment...</span>"
for(var/mob/living/L in range(client.view, src))
var/turf/T = get_turf(L)
if(!T || L == src || L.stat == DEAD || is_below_sound_pressure(T))
continue
heard_something = TRUE
var/feedback = list()
feedback += "<span class='notice'>There are noises of movement "
var/direction = get_dir(src, L)
if(direction)
feedback += "towards the [dir2text(direction)], "
switch(get_dist(src, L) / client.view)
if(0 to 0.2)
feedback += "very close by."
if(0.2 to 0.4)
feedback += "close by."
if(0.4 to 0.6)
feedback += "some distance away."
if(0.6 to 0.8)
feedback += "further away."
else
feedback += "far away."
else // No need to check distance if they're standing right on-top of us
feedback += "right on top of you."
feedback += "</span>"
src << jointext(feedback,null)
if(!heard_something)
src << "<span class='notice'>You hear no movement but your own.</span>"
#undef HUMAN_EATING_NO_ISSUE
#undef HUMAN_EATING_NO_MOUTH
#undef HUMAN_EATING_BLOCKED_MOUTH
@@ -114,11 +114,15 @@
set name = "Split"
set desc = "Split your humanoid form into its constituent nymphs."
set category = "Abilities"
diona_split_into_nymphs(5) // Separate proc to void argments being supplied when used as a verb
/mob/living/carbon/human/proc/diona_split_into_nymphs(var/number_of_resulting_nymphs)
var/turf/T = get_turf(src)
var/mob/living/carbon/alien/diona/S = new(T)
S.set_dir(dir)
transfer_languages(src, S)
if(mind)
mind.transfer_to(S)
@@ -129,12 +133,14 @@
for(var/mob/living/carbon/alien/diona/D in src)
nymphs++
D.loc = T
D.forceMove(T)
transfer_languages(src, D, WHITELISTED|RESTRICTED)
D.set_dir(pick(NORTH, SOUTH, EAST, WEST))
if(nymphs < 5)
for(var/i in nymphs to 4)
if(nymphs < number_of_resulting_nymphs)
for(var/i in nymphs to (number_of_resulting_nymphs - 1))
var/mob/M = new /mob/living/carbon/alien/diona(T)
transfer_languages(src, M, WHITELISTED|RESTRICTED)
M.set_dir(pick(NORTH, SOUTH, EAST, WEST))
@@ -40,13 +40,13 @@
var/max_age = 70
// Language/culture vars.
var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers.
var/language = "Galactic Common" // Default racial language, if any.
var/default_language = LANGUAGE_GALCOM // Default language is used when 'say' is used without modifiers.
var/language = LANGUAGE_GALCOM // Default racial language, if any.
var/list/secondary_langs = list() // The names of secondary languages that are available to this species.
var/list/speech_sounds // A list of sounds to potentially play when speaking.
var/list/speech_chance // The likelihood of a speech sound playing.
var/num_alternate_languages = 0 // How many secondary languages are available to select at character creation
var/name_language = "Galactic Common" // The language to use when determining names for this species, or null to use the first name/last name generator
var/name_language = LANGUAGE_GALCOM // The language to use when determining names for this species, or null to use the first name/last name generator
// Combat vars.
var/total_health = 100 // Point at which the mob will enter crit.
@@ -7,8 +7,8 @@
are only recently becoming known on human stations after reaching space with Skrell assistance."
num_alternate_languages = 3
secondary_langs = list("Schechi", "Skrellian")
name_language = "Schechi"
secondary_langs = list(LANGUAGE_SCHECHI, LANGUAGE_SKRELLIAN)
name_language = LANGUAGE_SCHECHI
min_age = 12
max_age = 45
health_hud_intensity = 3
@@ -31,8 +31,9 @@
brute_mod = 1.35
burn_mod = 1.35
mob_size = MOB_SMALL
pass_flags = PASSTABLE
holder_type = /obj/item/weapon/holder/human
short_sighted = 1
// short_sighted = 1
gluttonous = 1
blood_volume = 400
hunger_factor = 0.2
@@ -84,40 +85,13 @@
/datum/unarmed_attack/claws,
/datum/unarmed_attack/stomp/weak
)
/*
var/shock_cap = 30
var/hallucination_cap = 25
// I'm... so... ronrery, so ronery...
/datum/species/teshari/handle_environment_special(var/mob/living/carbon/human/H)
// If they're dead or unconcious they're a bit beyond this kind of thing.
if(H.stat)
return
// No point processing if we're already stressing the hell out.
if(H.hallucination >= hallucination_cap && H.shock_stage >= shock_cap)
return
// Check for company.
for(var/mob/living/M in viewers(H))
if(M == H || M.stat == DEAD || M.invisibility > H.see_invisible)
continue
if(M.faction == "neutral" || M.faction == H.faction)
return
// No company? Suffer :(
if(H.shock_stage < shock_cap)
H.shock_stage += 1
if(H.shock_stage >= shock_cap && H.hallucination < hallucination_cap)
H.hallucination += 2.5
*/
/datum/species/teshari/get_vision_flags(var/mob/living/carbon/human/H)
if(!(H.sdisabilities & DEAF) && !H.ear_deaf)
return SEE_SELF|SEE_MOBS
else
return SEE_SELF
inherent_verbs = list(
/mob/living/carbon/human/proc/sonar_ping,
/mob/living/proc/hide
)
/datum/species/teshari/equip_survival_gear(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
@@ -9,7 +9,7 @@
interests, rampant cyber and bio-augmentation and secretive factions make life on most human \
worlds tumultous at best."
num_alternate_languages = 3
secondary_langs = list("Sol Common")
secondary_langs = list(LANGUAGE_SOL_COMMON)
name_language = null // Use the first-name last-name generator rather than a language scrambler
min_age = 17
max_age = 110
@@ -35,8 +35,8 @@
slowdown = 0.5
brute_mod = 0.8
num_alternate_languages = 3
secondary_langs = list("Sinta'unathi")
name_language = "Sinta'unathi"
secondary_langs = list(LANGUAGE_UNATHI)
name_language = LANGUAGE_UNATHI
health_hud_intensity = 2.5
min_age = 18
@@ -94,10 +94,11 @@
slowdown = -0.5
brute_mod = 1.15
burn_mod = 1.15
metabolic_rate = 1.1
gluttonous = 1
num_alternate_languages = 3
secondary_langs = list("Siik")
name_language = "Siik"
secondary_langs = list(LANGUAGE_SIIK)
name_language = LANGUAGE_SIIK
health_hud_intensity = 2.5
min_age = 17
@@ -152,8 +153,8 @@
herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
the secrets of their empire to their allies."
num_alternate_languages = 3
secondary_langs = list("Skrellian", "Schechi")
name_language = "Skrellian"
secondary_langs = list(LANGUAGE_SKRELLIAN, LANGUAGE_SCHECHI)
name_language = LANGUAGE_SKRELLIAN
health_hud_intensity = 2
min_age = 19
@@ -197,7 +198,7 @@
name_plural = "Dionaea"
icobase = 'icons/mob/human_races/r_diona.dmi'
deform = 'icons/mob/human_races/r_def_plant.dmi'
language = "Rootspeak"
language = LANGUAGE_ROOTLOCAL
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/diona)
//primitive_form = "Nymph"
slowdown = 5
@@ -206,7 +207,8 @@
siemens_coefficient = 0.3
show_ssd = "completely quiescent"
num_alternate_languages = 2
name_language = "Rootspeak"
secondary_langs = list(LANGUAGE_ROOTGLOBAL)
name_language = LANGUAGE_ROOTLOCAL
health_hud_intensity = 2.5
min_age = 1
+11 -4
View File
@@ -5,11 +5,18 @@
set name = "Set Default Language"
set category = "IC"
if(language && !can_speak(language))
src << "<span class='notice'>You are unable to speak that language.</span>"
return
if (only_species_language && language != all_languages[src.species_language])
to_chat(src, "<span class='notice'>You can only speak your species language, [src.species_language].</span>")
return 0
if(language == all_languages[src.species_language])
to_chat(src, "<span class='notice'>You will now speak your standard default language, [language], if you do not specify a language when speaking.</span>")
else if (language)
if(language && !can_speak(language))
to_chat(src, "<span class='notice'>You are unable to speak that language.</span>")
return
if(language)
src << "<span class='notice'>You will now speak [language] if you do not specify a language when speaking.</span>"
else
src << "<span class='notice'>You will now speak whatever your standard default language is if you do not specify one when speaking.</span>"
+1
View File
@@ -131,6 +131,7 @@ proc/get_radio_key_from_channel(var/channel)
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0)
//If you're muted for IC chat
if(client)
client.handle_spam_prevention(MUTE_IC)
if((client.prefs.muted & MUTE_IC) || say_disabled)
src << "<span class='warning'>You cannot speak in IC (Muted).</span>"
return
+10 -9
View File
@@ -148,15 +148,16 @@ var/list/ai_verbs_hidden = list( // For why this exists, refer to https://xkcd.c
//Languages
add_language("Robot Talk", 1)
add_language("Galactic Common", 1)
add_language("Sol Common", 0)
add_language("Sinta'unathi", 0)
add_language("Siik", 0)
add_language("Skrellian", 0)
add_language("Tradeband", 1)
add_language("Gutter", 0)
add_language("Encoded Audio Language", 1)
add_language("Schechi", 0)
add_language(LANGUAGE_GALCOM, 1)
add_language(LANGUAGE_SOL_COMMON, 0)
add_language(LANGUAGE_UNATHI, 0)
add_language(LANGUAGE_SIIK, 0)
add_language(LANGUAGE_SKRELLIAN, 0)
add_language(LANGUAGE_TRADEBAND, 1)
add_language(LANGUAGE_GUTTER, 0)
add_language(LANGUAGE_EAL, 1)
add_language(LANGUAGE_SCHECHI, 0)
add_language(LANGUAGE_SIGN, 0)
if(!safety)//Only used by AIize() to successfully spawn an AI.
if (!B)//If there is no player/brain inside.
+5 -4
View File
@@ -89,10 +89,11 @@
radio = card.radio
//Default languages without universal translator software
add_language("Sol Common", 1)
add_language("Tradeband", 1)
add_language("Gutter", 1)
add_language("Encoded Audio Language", 1)
add_language(LANGUAGE_SOL_COMMON, 1)
add_language(LANGUAGE_TRADEBAND, 1)
add_language(LANGUAGE_GUTTER, 1)
add_language(LANGUAGE_EAL, 1)
add_language(LANGUAGE_SIGN, 0)
verbs += /mob/living/silicon/pai/proc/choose_chassis
verbs += /mob/living/silicon/pai/proc/choose_verbs
@@ -468,13 +468,15 @@
// Sol Common, Tradeband and Gutter are added with New() and are therefore the current default, always active languages
user.translator_on = !user.translator_on
if(user.translator_on)
user.add_language("Sinta'unathi")
user.add_language("Siik")
user.add_language("Skrellian")
user.add_language(LANGUAGE_UNATHI)
user.add_language(LANGUAGE_SIIK)
user.add_language(LANGUAGE_SKRELLIAN)
user.add_language(LANGUAGE_SCHECHI)
else
user.remove_language("Sinta'unathi")
user.remove_language("Siik")
user.remove_language("Skrellian")
user.remove_language(LANGUAGE_UNATHI)
user.remove_language(LANGUAGE_SIIK)
user.remove_language(LANGUAGE_SKRELLIAN)
user.remove_language(LANGUAGE_SCHECHI)
is_active(mob/living/silicon/pai/user)
return user.translator_on
@@ -99,7 +99,7 @@
spark_system.attach(src)
add_language("Robot Talk", 1)
add_language("Encoded Audio Language", 1)
add_language(LANGUAGE_EAL, 1)
wires = new(src)
@@ -23,7 +23,7 @@ var/global/list/robot_modules = list(
var/hide_on_manifest = 0
var/channels = list()
var/networks = list()
var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0)
var/languages = list(LANGUAGE_SOL_COMMON = 1, LANGUAGE_TRADEBAND = 1, LANGUAGE_UNATHI = 0, LANGUAGE_SIIK = 0, LANGUAGE_SKRELLIAN = 0, LANGUAGE_GUTTER = 0, LANGUAGE_SCHECHI = 0, LANGUAGE_SIGN = 0)
var/sprites = list()
var/can_be_pushed = 1
var/no_slip = 0
@@ -478,10 +478,12 @@ var/global/list/robot_modules = list(
LANGUAGE_UNATHI = 1,
LANGUAGE_SIIK = 1,
LANGUAGE_SKRELLIAN = 1,
LANGUAGE_ROOTSPEAK = 1,
LANGUAGE_ROOTLOCAL = 0,
LANGUAGE_TRADEBAND = 1,
LANGUAGE_GUTTER = 1,
LANGUAGE_SCHECHI = 1
LANGUAGE_SCHECHI = 1,
LANGUAGE_EAL = 1,
LANGUAGE_SIGN = 0
)
/obj/item/weapon/robot_module/robot/clerical/butler
@@ -631,9 +633,11 @@ var/global/list/robot_modules = list(
LANGUAGE_UNATHI = 0,
LANGUAGE_SIIK = 0,
LANGUAGE_SKRELLIAN = 0,
LANGUAGE_ROOTSPEAK = 0,
LANGUAGE_ROOTLOCAL = 0,
LANGUAGE_GUTTER = 1,
LANGUAGE_SCHECHI = 0
LANGUAGE_SCHECHI = 0,
LANGUAGE_EAL = 1,
LANGUAGE_SIGN = 0
)
sprites = list(
"Dread" = "securityrobot",
@@ -43,8 +43,8 @@
/mob/living/simple_animal/spiderbot/New()
..()
add_language("Galactic Common")
default_language = all_languages["Galactic Common"]
add_language(LANGUAGE_GALCOM)
default_language = all_languages[LANGUAGE_GALCOM]
verbs |= /mob/living/proc/ventcrawl
verbs |= /mob/living/proc/hide
@@ -82,11 +82,12 @@
. = ..()
if(ishuman(.))
var/mob/living/carbon/human/H = .
if(prob(poison_chance))
if(prob(5))
var/obj/item/organ/external/O = pick(H.organs)
if(!(O.robotic >= ORGAN_ROBOT))
var/eggs = PoolOrNew(/obj/effect/spider/eggcluster/, list(O, src))
O.implants += eggs
H << "<span class='warning'>The [src] injects something into your [O.name]!</span>"
/mob/living/simple_animal/hostile/giant_spider/Life()
..()
+8 -2
View File
@@ -50,13 +50,13 @@
if(!client) return
if (type)
if((type & 1) && ((sdisabilities & BLIND) || blinded || paralysis) )//Vision related
if((type & 1) && (is_blind() || paralysis) )//Vision related
if (!( alt ))
return
else
msg = alt
type = alt_type
if ((type & 2) && ((sdisabilities & DEAF) || ear_deaf))//Hearing related
if ((type & 2) && is_deaf())//Hearing related
if (!( alt ))
return
else
@@ -154,6 +154,12 @@
return UNBUCKLED
return restrained() ? FULLY_BUCKLED : PARTIALLY_BUCKLED
/mob/proc/is_blind()
return ((sdisabilities & BLIND) || blinded || incapacitated(INCAPACITATION_KNOCKOUT))
/mob/proc/is_deaf()
return ((sdisabilities & DEAF) || ear_deaf || incapacitated(INCAPACITATION_KNOCKOUT))
/mob/proc/is_physically_disabled()
return incapacitated(INCAPACITATION_DISABLED)
+2
View File
@@ -90,6 +90,8 @@
var/list/pinned = list() // List of things pinning this creature to walls (see living_defense.dm)
var/list/embedded = list() // Embedded items, since simple mobs don't have organs.
var/list/languages = list() // For speaking/listening.
var/species_language = null // For species who want reset to use a specified default.
var/only_species_language = 0 // For species who can only speak their default and no other languages. Does not affect understanding.
var/list/speak_emote = list("says") // Verbs used when speaking. Defaults to 'say' if speak_emote is null.
var/emote_type = 1 // Define emote default type, 1 for seen emotes, 2 for heard emotes
var/facing_dir = null // Used for the ancient art of moonwalking.
+28
View File
@@ -60,6 +60,11 @@
else
output += "<p><a href='byond://?src=\ref[src];showpoll=1'>Show Player Polls</A></p>"
if(client.check_for_new_server_news())
output += "<p><b><a href='byond://?src=\ref[src];shownews=1'>Show News</A> (NEW!)</b></p>"
else
output += "<p><a href='byond://?src=\ref[src];shownews=1'>Show News</A></p>"
output += "</div>"
panel = new(src, "Welcome","Welcome", 210, 280, src)
@@ -277,6 +282,29 @@
if(!isnull(href_list["option_[optionid]"])) //Test if this optionid was selected
vote_on_poll(pollid, optionid, 1)
if(href_list["shownews"])
handle_server_news()
return
/mob/new_player/proc/handle_server_news()
if(!client)
return
var/savefile/F = get_server_news()
if(F)
client.prefs.lastnews = md5(F["body"])
client.prefs.save_preferences()
var/dat = "<html><body><center>"
dat += "<h1>[F["title"]]</h1>"
dat += "<br>"
dat += "[F["body"]]"
dat += "<br>"
dat += "<font size='2'><i>Last written by [F["author"]], on [F["timestamp"]].</i></font>"
dat += "</center></body></html>"
var/datum/browser/popup = new(src, "Server News", "Server News", 450, 300, src)
popup.set_content(dat)
popup.open()
/mob/new_player/proc/IsJobAvailable(rank)
var/datum/job/job = job_master.GetJob(rank)
if(!job) return 0
+203 -83
View File
@@ -61,51 +61,6 @@
name = "Short Hair 2"
icon_state = "hair_shorthair3"
teshari
name = "Teshari Default"
icon_state = "seromi_default"
species_allowed = list("Teshari")
teshari_altdefault
name = "Teshari Alt. Default"
icon_state = "seromi_ears"
species_allowed = list("Teshari")
teshari_tight
name = "Teshari Tight"
icon_state = "seromi_tight"
species_allowed = list("Teshari")
teshari_excited
name = "Teshari Spiky"
icon_state = "seromi_spiky"
species_allowed = list("Teshari")
teshari_spike
name = "Teshari Spike"
icon_state = "seromi_spike"
species_allowed = list("Teshari")
teshari_long
name = "Teshari Overgrown"
icon_state = "seromi_long"
species_allowed = list("Teshari")
teshari_burst
name = "Teshari Starburst"
icon_state = "seromi_burst"
species_allowed = list("Teshari")
teshari_shortburst
name = "Teshari Short Starburst"
icon_state = "seromi_burst_short"
species_allowed = list("Teshari")
teshari_mohawk
name = "Teshari Mohawk"
icon_state = "seromi_mohawk"
species_allowed = list("Teshari")
cut
name = "Cut Hair"
icon_state = "hair_c"
@@ -328,6 +283,10 @@
name = "Emo"
icon_state = "hair_emo"
emo2
name = "Emo Alt"
icon_state = "hair_emo2"
longemo
name = "Long Emo"
icon_state = "hair_emolong"
@@ -522,6 +481,60 @@
name = "Oxton"
icon_state = "hair_oxton"
lowfade
name = "Low Fade"
icon_state = "hair_lowfade"
gender = MALE
medfade
name = "Medium Fade"
icon_state = "hair_medfade"
highfade
name = "High Fade"
icon_state = "hair_highfade"
gender = MALE
baldfade
name = "Balding Fade"
icon_state = "hair_baldfade"
gender = MALE
nofade
name = "Regulation Cut"
icon_state = "hair_nofade"
gender = MALE
trimflat
name = "Trimmed Flat Top"
icon_state = "hair_trimflat"
gender = MALE
trimmed
name = "Trimmed"
icon_state = "hair_trimmed"
gender = MALE
tightbun
name = "Tight Bun"
icon_state = "hair_tightbun"
gender = FEMALE
coffeehouse
name = "Coffee House Cut"
icon_state = "hair_coffeehouse"
gender = MALE
undercut
name = "Undercut"
icon_state = "hair_undercut"
gender = MALE
partfade
name = "Parted Fade"
icon_state = "hair_shavedpart"
gender = MALE
/*
///////////////////////////////////
@@ -542,24 +555,6 @@
gender = NEUTER
species_allowed = list("Human","Unathi","Tajara","Skrell", "Machine","Teshari", "Vox")
teshari_beard
name = "Teshari Beard"
icon_state = "seromi_chin"
species_allowed = list("Teshari")
gender = NEUTER
teshari_scraggly
name = "Teshari Scraggly"
icon_state = "seromi_scraggly"
species_allowed = list("Teshari")
gender = NEUTER
teshari_chops
name = "Teshari Chops"
icon_state = "seromi_gap"
species_allowed = list("Teshari")
gender = NEUTER
watson
name = "Watson Mustache"
icon_state = "facial_watson"
@@ -629,31 +624,41 @@
name = "Dwarf Beard"
icon_state = "facial_dwarf"
shadow
name = "Five O'Clock Shadow"
icon_state = "facial_shadow"
threeOclock
name = "3 O'clock Shadow"
icon_state = "facial_3oclock"
//unathi horn beards and the like
threeOclockstache
name = "3 O'clock Shadow and Moustache"
icon_state = "facial_3oclockmoustache"
una_chinhorn
name = "Unathi Chin Horn"
icon_state = "facial_chinhorns"
species_allowed = list("Unathi")
fiveOclock
name = "5 O'clock Shadow"
icon_state = "facial_5oclock"
una_hornadorns
name = "Unathi Horn Adorns"
icon_state = "facial_hornadorns"
species_allowed = list("Unathi")
fiveOclockstache
name = "5 O'clock Shadow and Moustache"
icon_state = "facial_5oclockmoustache"
una_spinespikes
name = "Unathi Spine Spikes"
icon_state = "facial_spikes"
species_allowed = list("Unathi")
sevenOclock
name = "7 O'clock Shadow"
icon_state = "facial_7oclock"
una_dorsalfrill
name = "Unathi Dorsal Frill"
icon_state = "facial_dorsalfrill"
species_allowed = list("Unathi")
sevenOclockstache
name = "7 O'clock Shadow and Moustache"
icon_state = "facial_7oclockmoustache"
mutton
name = "Mutton Chops"
icon_state = "facial_mutton"
muttonstache
name = "Mutton Chops and Moustache"
icon_state = "facial_muttonmus"
walrus
name = "Walrus Moustache"
icon_state = "facial_walrus"
/*
///////////////////////////////////
@@ -709,6 +714,7 @@
icon_state = "unathi_sidefrills"
species_allowed = list("Unathi")
//Skrell 'hairstyles'
skr_tentacle_m
name = "Skrell Male Tentacles"
icon_state = "skrell_hair_m"
@@ -721,6 +727,7 @@
species_allowed = list("Skrell")
gender = FEMALE
//Tajaran hairstyles
taj_ears
name = "Tajaran Ears"
icon_state = "ears_plain"
@@ -806,6 +813,77 @@
icon_state = "hair_fingerwave"
species_allowed = list("Tajara")
//Teshari things
teshari
name = "Teshari Default"
icon_state = "teshari_default"
species_allowed = list("Teshari")
teshari_altdefault
name = "Teshari Alt. Default"
icon_state = "teshari_ears"
species_allowed = list("Teshari")
teshari_tight
name = "Teshari Tight"
icon_state = "teshari_tight"
species_allowed = list("Teshari")
teshari_excited
name = "Teshari Spiky"
icon_state = "teshari_spiky"
species_allowed = list("Teshari")
teshari_spike
name = "Teshari Spike"
icon_state = "teshari_spike"
species_allowed = list("Teshari")
teshari_long
name = "Teshari Overgrown"
icon_state = "teshari_long"
species_allowed = list("Teshari")
teshari_burst
name = "Teshari Starburst"
icon_state = "teshari_burst"
species_allowed = list("Teshari")
teshari_shortburst
name = "Teshari Short Starburst"
icon_state = "teshari_burst_short"
species_allowed = list("Teshari")
teshari_mohawk
name = "Teshari Mohawk"
icon_state = "teshari_mohawk"
species_allowed = list("Teshari")
teshari_pointy
name = "Teshari Pointy"
icon_state = "teshari_pointy"
species_allowed = list("Teshari")
teshari_upright
name = "Teshari Upright"
icon_state = "teshari_upright"
species_allowed = list("Teshari")
teshari_mane
name = "Teshari Mane"
icon_state = "teshari_mane"
species_allowed = list("Teshari")
teshari_droopy
name = "Teshari Droopy"
icon_state = "teshari_droopy"
species_allowed = list("Teshari")
teshari_mushroom
name = "Teshari Mushroom"
icon_state = "teshari_mushroom"
species_allowed = list("Teshari")
vox_quills_short
name = "Short Vox Quills"
icon_state = "vox_shortquills"
@@ -853,6 +931,48 @@
icon_state = "facial_smallstache"
species_allowed = list("Tajara")
//unathi horn beards and the like
una_chinhorn
name = "Unathi Chin Horn"
icon_state = "facial_chinhorns"
species_allowed = list("Unathi")
una_hornadorns
name = "Unathi Horn Adorns"
icon_state = "facial_hornadorns"
species_allowed = list("Unathi")
una_spinespikes
name = "Unathi Spine Spikes"
icon_state = "facial_spikes"
species_allowed = list("Unathi")
una_dorsalfrill
name = "Unathi Dorsal Frill"
icon_state = "facial_dorsalfrill"
species_allowed = list("Unathi")
//Teshari things
teshari_beard
name = "Teshari Beard"
icon_state = "teshari_chin"
species_allowed = list("Teshari")
gender = NEUTER
teshari_scraggly
name = "Teshari Scraggly"
icon_state = "teshari_scraggly"
species_allowed = list("Teshari")
gender = NEUTER
teshari_chops
name = "Teshari Chops"
icon_state = "teshari_gap"
species_allowed = list("Teshari")
gender = NEUTER
//skin styles - WIP
//going to have to re-integrate this with surgery
//let the icon_state hold an icon preview for now