mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 19:44:09 +01:00
Merge branch 'master' into corporate-comms
This commit is contained in:
@@ -5,20 +5,20 @@
|
||||
*/
|
||||
|
||||
/datum/language
|
||||
var/name = "an unknown language" // Fluff name of language if any.
|
||||
var/desc = "A language." // Short description for 'Check Languages'.
|
||||
var/speech_verb = "says" // 'says', 'hisses', 'farts'.
|
||||
var/ask_verb = "asks" // Used when sentence ends in a ?
|
||||
var/exclaim_verb = "exclaims" // Used when sentence ends in a !
|
||||
var/whisper_verb // Optional. When not specified speech_verb + quietly/softly is used instead.
|
||||
var/colour = "body" // CSS style to use for strings in this language.
|
||||
var/key = "x" // Character used to speak in language eg. :o for Unathi.
|
||||
var/flags = 0 // Various language flags.
|
||||
var/native // If set, non-native speakers will have trouble speaking.
|
||||
var/list/syllables // Used when scrambling text for a non-speaker.
|
||||
var/list/space_chance = 55 // Likelihood of getting a space in the random scramble string.
|
||||
var/follow = 0 // Applies to HIVEMIND languages - should a follow link be included for dead mobs?
|
||||
var/english_names = 0 // Do we want English names by default, no matter what?
|
||||
var/name = "an unknown language" // Fluff name of language if any.
|
||||
var/desc = "A language." // Short description for 'Check Languages'.
|
||||
var/speech_verb = "says" // 'says', 'hisses', 'farts'.
|
||||
var/ask_verb = "asks" // Used when sentence ends in a ?
|
||||
var/list/exclaim_verbs = list("exclaims") // Used when sentence ends in a !
|
||||
var/whisper_verb // Optional. When not specified speech_verb + quietly/softly is used instead.
|
||||
var/colour = "body" // CSS style to use for strings in this language.
|
||||
var/key = "x" // Character used to speak in language eg. :o for Unathi.
|
||||
var/flags = 0 // Various language flags.
|
||||
var/native // If set, non-native speakers will have trouble speaking.
|
||||
var/list/syllables // Used when scrambling text for a non-speaker.
|
||||
var/list/space_chance = 55 // Likelihood of getting a space in the random scramble string.
|
||||
var/follow = 0 // Applies to HIVEMIND languages - should a follow link be included for dead mobs?
|
||||
var/english_names = 0 // Do we want English names by default, no matter what?
|
||||
var/list/scramble_cache = list()
|
||||
|
||||
/datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4)
|
||||
@@ -124,7 +124,7 @@
|
||||
/datum/language/proc/get_spoken_verb(msg_end)
|
||||
switch(msg_end)
|
||||
if("!")
|
||||
return exclaim_verb
|
||||
return pick(exclaim_verbs)
|
||||
if("?")
|
||||
return ask_verb
|
||||
return speech_verb
|
||||
@@ -151,7 +151,7 @@
|
||||
desc = "The common language of Moghes, composed of sibilant hisses and rattles. Spoken natively by Unathi."
|
||||
speech_verb = "hisses"
|
||||
ask_verb = "hisses"
|
||||
exclaim_verb = "roars"
|
||||
exclaim_verbs = list("roars")
|
||||
colour = "soghun"
|
||||
key = "o"
|
||||
flags = RESTRICTED
|
||||
@@ -172,7 +172,7 @@
|
||||
desc = "The traditionally employed tongue of Ahdomai, composed of expressive yowls and chirps. Native to the Tajaran."
|
||||
speech_verb = "mrowls"
|
||||
ask_verb = "mrowls"
|
||||
exclaim_verb = "yowls"
|
||||
exclaim_verbs = list("yowls")
|
||||
colour = "tajaran"
|
||||
key = "j"
|
||||
flags = RESTRICTED
|
||||
@@ -194,7 +194,7 @@
|
||||
desc = "The guttural language spoken and utilized by the inhabitants of Vazzend system, composed of growls, barks, yaps, and heavy utilization of ears and tail movements.Vulpkanin speak this language with ease."
|
||||
speech_verb = "rawrs"
|
||||
ask_verb = "rurs"
|
||||
exclaim_verb = "barks"
|
||||
exclaim_verbs = list("barks")
|
||||
colour = "vulpkanin"
|
||||
key = "7"
|
||||
flags = RESTRICTED
|
||||
@@ -208,7 +208,7 @@
|
||||
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"
|
||||
exclaim_verb = "warbles"
|
||||
exclaim_verbs = list("warbles")
|
||||
colour = "skrell"
|
||||
key = "k"
|
||||
flags = RESTRICTED
|
||||
@@ -219,21 +219,21 @@
|
||||
desc = "The common tongue of the various Vox ships making up the Shoal. It sounds like chaotic shrieking to everyone else."
|
||||
speech_verb = "shrieks"
|
||||
ask_verb = "creels"
|
||||
exclaim_verb = "SHRIEKS"
|
||||
exclaim_verbs = list("loudly skrees")
|
||||
colour = "vox"
|
||||
key = "v"
|
||||
flags = RESTRICTED | WHITELISTED
|
||||
syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya", "yi", "chi","cha","kah", \
|
||||
syllables = list("ti","ti","ti","hi","hi","ki","ki","ki","ki","ya","ta","ha","ka","ya","yi","chi","cha","kah", \
|
||||
"SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA")
|
||||
|
||||
/datum/language/vox/get_random_name()
|
||||
var/sounds = rand(2, 8)
|
||||
var/i = 0
|
||||
var/newname = ""
|
||||
|
||||
var/static/list/vox_name_syllables = list("ti","hi","ki","ya","ta","ha","ka","ya","chi","cha","kah")
|
||||
while(i <= sounds)
|
||||
i++
|
||||
newname += pick(GLOB.vox_name_syllables)
|
||||
newname += pick(vox_name_syllables)
|
||||
return capitalize(newname)
|
||||
|
||||
/datum/language/diona
|
||||
@@ -241,7 +241,7 @@
|
||||
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."
|
||||
speech_verb = "creaks and rustles"
|
||||
ask_verb = "creaks"
|
||||
exclaim_verb = "rustles"
|
||||
exclaim_verbs = list("rustles")
|
||||
colour = "diona"
|
||||
key = "q"
|
||||
flags = RESTRICTED
|
||||
@@ -257,7 +257,7 @@
|
||||
desc = "A modification of binary to allow fuzzy logic. 0 is no, 1 is maybe, 2 is yes. Credited with giving Machine People the ability to think creatively."
|
||||
speech_verb = "states"
|
||||
ask_verb = "queries"
|
||||
exclaim_verb = "exclaims"
|
||||
exclaim_verbs = list("exclaims")
|
||||
colour = "trinary"
|
||||
key = "5"
|
||||
flags = RESTRICTED | WHITELISTED
|
||||
@@ -274,9 +274,9 @@
|
||||
/datum/language/kidan
|
||||
name = "Chittin"
|
||||
desc = "The noise made by rubbing its antennae together is actually a complex form of communication for Kidan."
|
||||
speech_verb = "rubs its antennae together"
|
||||
ask_verb = "rubs its antennae together"
|
||||
exclaim_verb = "rubs its antennae together"
|
||||
speech_verb = "rubs their antennae together"
|
||||
ask_verb = "rubs their antennae together"
|
||||
exclaim_verbs = list("rubs their antennae together")
|
||||
colour = "kidan"
|
||||
key = "4"
|
||||
flags = RESTRICTED | WHITELISTED
|
||||
@@ -296,7 +296,7 @@
|
||||
desc = "The language of slimes. It's a mixture of bubbling noises and pops. Very difficult to speak without mechanical aid for humans."
|
||||
speech_verb = "bubbles and pops"
|
||||
ask_verb = "bubbles and pops"
|
||||
exclaim_verb = "bubbles and pops"
|
||||
exclaim_verbs = list("bubbles and pops")
|
||||
colour = "slime"
|
||||
key = "f"
|
||||
flags = RESTRICTED | WHITELISTED
|
||||
@@ -307,7 +307,7 @@
|
||||
desc = "The grey's psionic communication, less potent version of their distant cousin's telepathy. Talk to other greys within a limited radius."
|
||||
speech_verb = "expresses"
|
||||
ask_verb = "inquires"
|
||||
exclaim_verb = "imparts"
|
||||
exclaim_verbs = list("imparts")
|
||||
colour = "abductor"
|
||||
key = "^"
|
||||
flags = RESTRICTED | HIVEMIND
|
||||
@@ -341,7 +341,7 @@
|
||||
desc = "The droning, vibrous language of the Drask. It sounds somewhat like whalesong."
|
||||
speech_verb = "drones"
|
||||
ask_verb = "hums"
|
||||
exclaim_verb = "rumbles"
|
||||
exclaim_verbs = list("rumbles")
|
||||
colour = "drask"
|
||||
key = "%"
|
||||
flags = RESTRICTED | WHITELISTED
|
||||
@@ -357,25 +357,18 @@
|
||||
name = "Galactic Common"
|
||||
desc = "The common galactic tongue."
|
||||
speech_verb = "says"
|
||||
exclaim_verbs = list("exclaims", "shouts", "yells")
|
||||
whisper_verb = "whispers"
|
||||
key = "9"
|
||||
flags = RESTRICTED
|
||||
syllables = list("blah","blah","blah","bleh","meh","neh","nah","wah")
|
||||
english_names = 1
|
||||
|
||||
//TODO flag certain languages to use the mob-type specific say_quote and then get rid of these.
|
||||
/datum/language/common/get_spoken_verb(msg_end)
|
||||
switch(msg_end)
|
||||
if("!")
|
||||
return pick("exclaims","shouts","yells") //TODO: make the basic proc handle lists of verbs.
|
||||
if("?")
|
||||
return ask_verb
|
||||
return speech_verb
|
||||
|
||||
/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."
|
||||
speech_verb = "says"
|
||||
exclaim_verbs = list("exclaims", "shouts", "yells")
|
||||
whisper_verb = "whispers"
|
||||
colour = "solcom"
|
||||
key = "1"
|
||||
@@ -383,14 +376,6 @@
|
||||
syllables = list("tao","shi","tzu","yi","com","be","is","i","op","vi","ed","lec","mo","cle","te","dis","e")
|
||||
english_names = 1
|
||||
|
||||
/datum/language/human/get_spoken_verb(msg_end)
|
||||
switch(msg_end)
|
||||
if("!")
|
||||
return pick("exclaims","shouts","yells") //TODO: make the basic proc handle lists of verbs.
|
||||
if("?")
|
||||
return ask_verb
|
||||
return speech_verb
|
||||
|
||||
// Galactic common languages (systemwide accepted standards).
|
||||
/datum/language/trader
|
||||
name = "Tradeband"
|
||||
@@ -413,7 +398,7 @@
|
||||
desc = "Much like Standard, this crude pidgin tongue descended from numerous languages and serves as Tradeband for criminal elements."
|
||||
speech_verb = "growls"
|
||||
ask_verb = "gnarls"
|
||||
exclaim_verb = "snarls"
|
||||
exclaim_verbs = list("snarls")
|
||||
colour = "gutter"
|
||||
key = "3"
|
||||
syllables = list ("gra","ba","ba","breh","bra","rah","dur","ra","ro","gro","go","ber","bar","geh","heh","gra")
|
||||
@@ -423,7 +408,7 @@
|
||||
desc = "The language of clown planet. Mother tongue of clowns throughout the Galaxy."
|
||||
speech_verb = "honks"
|
||||
ask_verb = "honks"
|
||||
exclaim_verb = "honks"
|
||||
exclaim_verbs = list("toots", "wubs", "honks")
|
||||
colour = "clown"
|
||||
key = "0"
|
||||
syllables = list ("honk","squeak","bonk","toot","narf","zub","wee","wub","norf")
|
||||
@@ -433,7 +418,7 @@
|
||||
desc = "Neo-Russkiya, a bastard mix of Gutter, Sol Common, and old Russian. The official language of the USSP. It has started to see use outside of the fringe in hobby circles and protest groups. The linguistic spirit of Sol-Gov criticisms."
|
||||
speech_verb = "articulates"
|
||||
whisper_verb = "mutters"
|
||||
exclaim_verb = "exaggerates"
|
||||
exclaim_verbs = list("exaggerates")
|
||||
colour = "com_srus"
|
||||
key = "?"
|
||||
space_chance = 65
|
||||
@@ -453,7 +438,7 @@
|
||||
desc = "Wryn have the strange ability to commune over a psychic hivemind."
|
||||
speech_verb = "chitters"
|
||||
ask_verb = "chitters"
|
||||
exclaim_verb = "chitters"
|
||||
exclaim_verbs = list("buzzes")
|
||||
colour = "alien"
|
||||
key = "y"
|
||||
flags = RESTRICTED | HIVEMIND | NOBABEL
|
||||
@@ -474,7 +459,7 @@
|
||||
desc = "The common tongue of the xenomorphs."
|
||||
speech_verb = "hisses"
|
||||
ask_verb = "hisses"
|
||||
exclaim_verb = "hisses"
|
||||
exclaim_verbs = list("hisses")
|
||||
key = "6"
|
||||
flags = RESTRICTED
|
||||
syllables = list("sss","sSs","SSS")
|
||||
@@ -484,7 +469,7 @@
|
||||
desc = "Xenomorphs have the strange ability to commune over a psychic hivemind."
|
||||
speech_verb = "hisses"
|
||||
ask_verb = "hisses"
|
||||
exclaim_verb = "hisses"
|
||||
exclaim_verbs = list("hisses")
|
||||
colour = "alien"
|
||||
key = "a"
|
||||
flags = RESTRICTED | HIVEMIND | NOBABEL
|
||||
@@ -495,7 +480,7 @@
|
||||
desc = "Terror spiders have a limited ability to commune over a psychic hivemind, similar to xenomorphs."
|
||||
speech_verb = "chitters"
|
||||
ask_verb = "chitters"
|
||||
exclaim_verb = "chitters"
|
||||
exclaim_verbs = list("chitters")
|
||||
colour = "terrorspider"
|
||||
key = "ts"
|
||||
flags = RESTRICTED | HIVEMIND | NOBABEL
|
||||
@@ -540,7 +525,7 @@
|
||||
desc = "Abductors are incapable of speech, but have a psychic link attuned to their own team."
|
||||
speech_verb = "gibbers"
|
||||
ask_verb = "gibbers"
|
||||
exclaim_verb = "gibbers"
|
||||
exclaim_verbs = list("gibbers")
|
||||
colour = "abductor"
|
||||
key = "zw" //doesn't matter, this is their default and only language
|
||||
flags = RESTRICTED | HIVEMIND | NOBABEL
|
||||
@@ -569,7 +554,7 @@
|
||||
desc = "Cortical borers possess a strange link between their tiny minds."
|
||||
speech_verb = "sings"
|
||||
ask_verb = "sings"
|
||||
exclaim_verb = "sings"
|
||||
exclaim_verbs = list("sings")
|
||||
colour = "alien"
|
||||
key = "bo"
|
||||
flags = RESTRICTED | HIVEMIND | NOBABEL
|
||||
@@ -594,7 +579,7 @@
|
||||
colour = "say_quote"
|
||||
speech_verb = "states"
|
||||
ask_verb = "queries"
|
||||
exclaim_verb = "declares"
|
||||
exclaim_verbs = list("declares")
|
||||
key = "b"
|
||||
flags = RESTRICTED | HIVEMIND | NOBABEL
|
||||
follow = TRUE
|
||||
@@ -642,7 +627,7 @@
|
||||
desc = "A heavily encoded damage control coordination stream."
|
||||
speech_verb = "transmits"
|
||||
ask_verb = "transmits"
|
||||
exclaim_verb = "transmits"
|
||||
exclaim_verbs = list("transmits")
|
||||
colour = "say_quote"
|
||||
key = "d"
|
||||
flags = RESTRICTED | HIVEMIND | NOBABEL
|
||||
@@ -654,7 +639,7 @@
|
||||
desc = "An encrypted stream of data converted to speech patterns."
|
||||
speech_verb = "states"
|
||||
ask_verb = "queries"
|
||||
exclaim_verb = "declares"
|
||||
exclaim_verbs = list("declares")
|
||||
key = "]"
|
||||
flags = RESTRICTED
|
||||
follow = TRUE
|
||||
@@ -665,7 +650,7 @@
|
||||
desc = "A heavily encoded alien binary pattern."
|
||||
speech_verb = "tones"
|
||||
ask_verb = "tones"
|
||||
exclaim_verb = "tones"
|
||||
exclaim_verbs = list("tones")
|
||||
colour = "say_quote"
|
||||
key = "z"//Zwarmer...Or Zerg!
|
||||
flags = RESTRICTED | HIVEMIND | NOBABEL
|
||||
@@ -744,7 +729,7 @@
|
||||
desc = "Ook ook ook."
|
||||
speech_verb = "chimpers"
|
||||
ask_verb = "chimpers"
|
||||
exclaim_verb = "screeches"
|
||||
exclaim_verbs = list("screeches")
|
||||
key = "mo"
|
||||
|
||||
/datum/language/skrell/monkey
|
||||
|
||||
@@ -92,10 +92,12 @@
|
||||
|
||||
|
||||
/mob/living/carbon/proc/vomit(var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1)
|
||||
if(src.is_muzzled())
|
||||
if(ismachineperson(src)) //IPCs do not vomit particulates
|
||||
return FALSE
|
||||
if(is_muzzled())
|
||||
if(message)
|
||||
to_chat(src, "<span class='warning'>The muzzle prevents you from vomiting!</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
if(stun)
|
||||
Stun(4)
|
||||
if(nutrition < 100 && !blood)
|
||||
@@ -125,7 +127,7 @@
|
||||
T = get_step(T, dir)
|
||||
if(is_blocked_turf(T))
|
||||
break
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/gib()
|
||||
. = death(1)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/mob/living/carbon/human/proc/change_appearance(var/flags = APPEARANCE_ALL_HAIR, var/location = src, var/mob/user = src, var/check_species_whitelist = 1, var/list/species_whitelist = list(), var/list/species_blacklist = list(), var/datum/topic_state/state = GLOB.default_state)
|
||||
var/datum/nano_module/appearance_changer/AC = new(location, src, check_species_whitelist, species_whitelist, species_blacklist)
|
||||
/mob/living/carbon/human/proc/change_appearance(flags = APPEARANCE_ALL_HAIR, datum/location = src, mob/user = src, check_species_whitelist = TRUE, list/species_whitelist = list(), list/species_blacklist = list())
|
||||
var/datum/tgui_module/appearance_changer/AC = new(location, src, check_species_whitelist, species_whitelist, species_blacklist)
|
||||
AC.flags = flags
|
||||
AC.ui_interact(user, state = state)
|
||||
AC.tgui_interact(user)
|
||||
|
||||
/mob/living/carbon/human/proc/change_gender(var/new_gender, var/update_dna = 1)
|
||||
var/obj/item/organ/external/head/H = bodyparts_by_name["head"]
|
||||
|
||||
@@ -78,7 +78,7 @@ GLOBAL_LIST_INIT(body_accessory_by_species, list("None" = null))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
|
||||
//Tajaran
|
||||
/datum/body_accessory/tail/wingler_tail // Jay wingler fluff tail
|
||||
name = "Striped Tail"
|
||||
icon_state = "winglertail"
|
||||
@@ -115,3 +115,10 @@ GLOBAL_LIST_INIT(body_accessory_by_species, list("None" = null))
|
||||
icon_state = "straightbushy"
|
||||
animated_icon_state = "straightbushy_a"
|
||||
allowed_species = list("Vulpkanin")
|
||||
|
||||
//Wryn
|
||||
/datum/body_accessory/tail/wryn
|
||||
name = "Bee Tail"
|
||||
icon_state = "wryntail"
|
||||
allowed_species = list("Wryn")
|
||||
|
||||
|
||||
@@ -542,6 +542,41 @@
|
||||
if(istype(id))
|
||||
return id
|
||||
|
||||
//Gets ID card object from hands only
|
||||
/mob/living/carbon/human/proc/get_id_from_hands()
|
||||
var/obj/item/card/id/ID
|
||||
var/obj/item/pda/PDA
|
||||
var/obj/item/storage/wallet/W
|
||||
var/active_hand = get_active_hand()
|
||||
var/inactive_hand = get_inactive_hand()
|
||||
|
||||
//ID
|
||||
if(istype(active_hand, /obj/item/card/id) || istype(inactive_hand, /obj/item/card/id))
|
||||
if(istype(active_hand, ID))
|
||||
ID = active_hand
|
||||
else
|
||||
ID = inactive_hand
|
||||
|
||||
//PDA
|
||||
else if(istype(active_hand, /obj/item/pda) || istype(inactive_hand, /obj/item/pda))
|
||||
if(istype(active_hand, PDA))
|
||||
PDA = active_hand
|
||||
else
|
||||
PDA = inactive_hand
|
||||
if(PDA.id)
|
||||
ID = PDA.id
|
||||
|
||||
//Wallet
|
||||
else if(istype(active_hand, /obj/item/storage/wallet) || istype(inactive_hand, /obj/item/storage/wallet))
|
||||
if(istype(active_hand, W))
|
||||
W = active_hand
|
||||
else
|
||||
W = inactive_hand
|
||||
if(W.front_id)
|
||||
ID = W.front_id
|
||||
|
||||
return ID
|
||||
|
||||
/mob/living/carbon/human/update_sight()
|
||||
if(!client)
|
||||
return
|
||||
@@ -1475,14 +1510,13 @@ Eyes need to have significantly high darksight to shine unless the mob has the X
|
||||
/mob/living/carbon/human/proc/eyes_shine()
|
||||
var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes)
|
||||
var/obj/item/organ/internal/cyberimp/eyes/eye_implant = get_int_organ(/obj/item/organ/internal/cyberimp/eyes)
|
||||
if(!(istype(eyes) || istype(eye_implant)))
|
||||
return FALSE
|
||||
if(!get_location_accessible(src, "eyes"))
|
||||
return FALSE
|
||||
if(!(eyes.shine()) && !istype(eye_implant) && !(XRAY in mutations)) //If their eyes don't shine, they don't have other augs, nor do they have X-RAY vision
|
||||
return FALSE
|
||||
// Natural eyeshine, any implants, and XRAY - all give shiny appearance.
|
||||
if((istype(eyes) && eyes.shine()) || istype(eye_implant) || (XRAY in mutations))
|
||||
return TRUE
|
||||
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/assess_threat(var/mob/living/simple_animal/bot/secbot/judgebot, var/lasercolor)
|
||||
if(judgebot.emagged == 2)
|
||||
|
||||
@@ -49,6 +49,102 @@
|
||||
//Default styles for created mobs.
|
||||
default_hair = "Antennae"
|
||||
|
||||
var/datum/action/innate/wryn_sting/wryn_sting
|
||||
|
||||
/datum/species/wryn/on_species_gain(mob/living/carbon/human/H)
|
||||
..()
|
||||
wryn_sting = new
|
||||
wryn_sting.Grant(H)
|
||||
|
||||
/datum/species/wryn/on_species_loss(mob/living/carbon/human/H)
|
||||
..()
|
||||
if(wryn_sting)
|
||||
wryn_sting.Remove(H)
|
||||
|
||||
/* Wryn Sting Action Begin */
|
||||
|
||||
//Define the Sting Action
|
||||
/datum/action/innate/wryn_sting
|
||||
name = "Wryn Sting"
|
||||
desc = "Readies Wryn Sting for stinging."
|
||||
button_icon_state = "wryn_sting_off" //Default Button State
|
||||
check_flags = AB_CHECK_LYING | AB_CHECK_CONSCIOUS | AB_CHECK_STUNNED
|
||||
var/button_on = FALSE
|
||||
|
||||
//What happens when you click the Button?
|
||||
/datum/action/innate/wryn_sting/Trigger()
|
||||
if(!..())
|
||||
return
|
||||
var/mob/living/carbon/user = owner
|
||||
if((user.restrained() && user.pulledby) || user.buckled) //Is your Wryn restrained, pulled, or buckled? No stinging!
|
||||
to_chat(user, "<span class='notice'>You need freedom of movement to sting someone!</span>")
|
||||
return
|
||||
if(user.wear_suit) //Is your Wryn wearing a Hardsuit or a Laboat that's blocking their Stinger?
|
||||
to_chat(user, "<span class='notice'>You must remove your hardsuit, labcoat, or jacket before using your Wryn stinger.</span>")
|
||||
return
|
||||
if(user.getStaminaLoss() >= 50) //Does your Wryn have enough Stamina to sting?
|
||||
to_chat(user, "<span class='notice'>You feel too tired to use your Wryn Stinger at the moment.</span>")
|
||||
return
|
||||
else
|
||||
button_on = TRUE
|
||||
UpdateButtonIcon()
|
||||
select_target(user)
|
||||
|
||||
//Update the Button Icon
|
||||
/datum/action/innate/wryn_sting/UpdateButtonIcon()
|
||||
if(button_on)
|
||||
button_icon_state = "wryn_sting_on"
|
||||
name = "Wryn Stinger \[READY\]"
|
||||
button.name = name
|
||||
else
|
||||
button_icon_state = "wryn_sting_off"
|
||||
name = "Wryn Stinger"
|
||||
button.name = name
|
||||
..()
|
||||
|
||||
//Select a Target from a List
|
||||
/datum/action/innate/wryn_sting/proc/select_target(var/mob/living/carbon/human/user)
|
||||
var/list/names = list()
|
||||
for(var/mob/living/carbon/human/M in orange(1))
|
||||
names += M
|
||||
var/target = input("Select a Target: ", "Sting Target", null) as null|anything in names
|
||||
if(!target) //No one's around!
|
||||
to_chat(user, "<span class='warning'>There's no one around to sting so you retract your stinger.</span>")
|
||||
user.visible_message("<span class='warning'[user] retracts their stinger.</span>")
|
||||
button_on = FALSE
|
||||
UpdateButtonIcon()
|
||||
return
|
||||
else //Get ready, aim, fire!
|
||||
user.visible_message("<span class='warning'> [user] prepares to use their Wryn stinger!</span>")
|
||||
sting_target(user, target)
|
||||
return
|
||||
|
||||
//What does the Wryn Sting do?
|
||||
/datum/action/innate/wryn_sting/proc/sting_target(mob/living/carbon/human/user, mob/living/carbon/human/target)
|
||||
button_on = FALSE //For when we Update the Button Icon
|
||||
if(!(target in orange(1, user))) //Dang, did they get away?
|
||||
to_chat(user, "<span class='warning'>You are no longer adjacent to [target]. You retract your stinger for now.</span>")
|
||||
user.visible_message("<span class='warning'[user] retracts their stinger.</span>")
|
||||
UpdateButtonIcon()
|
||||
return
|
||||
else //Nah, that chump is still here! Sting 'em! Sting 'em good!
|
||||
var/obj/item/organ/external/organ = target.get_organ(pick("l_leg", "r_leg", "l_foot", "r_foot", "groin"))
|
||||
to_chat(user, "<span class='danger'> You sting [target] in their [organ] with your stinger!</span>")
|
||||
user.visible_message("<span class='danger'>[user] stings [target] in [organ] with their stinger! </span>")
|
||||
user.adjustStaminaLoss(20) //You can't sting infinitely, Wryn - take some Stamina loss
|
||||
var/dam = rand(3, 7)
|
||||
target.apply_damage(dam, BRUTE, organ)
|
||||
playsound(user.loc, 'sound/weapons/bladeslice.ogg', 50, 0)
|
||||
add_attack_logs(user, target, "Stung by Wryn Stinger - [dam] Brute damage to [organ].")
|
||||
if(target.restrained()) //Apply tiny BURN damage if target is restrained
|
||||
if(prob(50))
|
||||
user.apply_damage(2, BURN, target)
|
||||
to_chat(target, "<span class='danger'>You feel a little burnt! Yowch!</span>")
|
||||
user.visible_message("<span class='danger'>[user] is looking a little burnt!</span>")
|
||||
UpdateButtonIcon()
|
||||
return
|
||||
|
||||
/* Wryn Sting Action End */
|
||||
|
||||
/datum/species/wryn/handle_death(gibbed, mob/living/carbon/human/H)
|
||||
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||
|
||||
@@ -1289,6 +1289,9 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
var/husk = (HUSK in mutations)
|
||||
var/hulk = (HULK in mutations)
|
||||
var/skeleton = (SKELETON in mutations)
|
||||
var/g = dna.GetUITriState(DNA_UI_GENDER)
|
||||
if(g == DNA_GENDER_PLURAL)
|
||||
g = DNA_GENDER_FEMALE
|
||||
|
||||
. = ""
|
||||
|
||||
@@ -1317,8 +1320,8 @@ GLOBAL_LIST_EMPTY(damage_icon_parts)
|
||||
if(part)
|
||||
var/datum/species/S = GLOB.all_species[part.dna.species.name]
|
||||
. += "[S.race_key]"
|
||||
. += "[part.dna.GetUIState(DNA_UI_GENDER)]"
|
||||
. += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]"
|
||||
. += "[g]"
|
||||
if(part.s_col)
|
||||
. += "[part.s_col]"
|
||||
if(part.s_tone)
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
/mob/living/silicon/decoy/syndicate
|
||||
faction = list("syndicate")
|
||||
bubble_icon = "syndibot"
|
||||
name = "R.O.D.G.E.R"
|
||||
desc = "Red Operations, Depot General Emission Regulator"
|
||||
icon_state = "ai-magma"
|
||||
|
||||
@@ -108,6 +108,8 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
var/datum/action/item_action/toggle_research_scanner/scanner = null
|
||||
var/list/module_actions = list()
|
||||
|
||||
var/see_reagents = FALSE // Determines if the cyborg can see reagents
|
||||
|
||||
/mob/living/silicon/robot/get_cell()
|
||||
return cell
|
||||
|
||||
@@ -330,6 +332,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
module_sprites["Standard"] = "Standard-Serv"
|
||||
module_sprites["Noble-SRV"] = "Noble-SRV"
|
||||
module_sprites["Cricket"] = "Cricket-SERV"
|
||||
see_reagents = TRUE
|
||||
|
||||
if("Miner")
|
||||
module = new /obj/item/robot_module/miner(src)
|
||||
@@ -357,6 +360,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
module_sprites["Noble-MED"] = "Noble-MED"
|
||||
module_sprites["Cricket"] = "Cricket-MEDI"
|
||||
status_flags &= ~CANPUSH
|
||||
see_reagents = TRUE
|
||||
|
||||
if("Security")
|
||||
if(!weapons_unlock)
|
||||
@@ -1418,6 +1422,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
is_emaggable = FALSE
|
||||
can_lock_cover = TRUE
|
||||
default_cell_type = /obj/item/stock_parts/cell/bluespace
|
||||
see_reagents = TRUE
|
||||
|
||||
/mob/living/silicon/robot/deathsquad/init(alien = FALSE, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
|
||||
laws = new /datum/ai_laws/deathsquad
|
||||
@@ -1448,6 +1453,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
can_lock_cover = TRUE
|
||||
default_cell_type = /obj/item/stock_parts/cell/super
|
||||
var/eprefix = "Amber"
|
||||
see_reagents = TRUE
|
||||
|
||||
|
||||
/mob/living/silicon/robot/ert/init(alien = FALSE, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
|
||||
@@ -1504,6 +1510,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
damage_protection = 20 // Reduce all incoming damage by this number. Very high in the case of /destroyer borgs, since it is an admin-only borg.
|
||||
can_lock_cover = TRUE
|
||||
default_cell_type = /obj/item/stock_parts/cell/bluespace
|
||||
see_reagents = TRUE
|
||||
|
||||
/mob/living/silicon/robot/destroyer/init(alien = FALSE, connect_to_AI = TRUE, mob/living/silicon/ai/ai_to_sync_to = null)
|
||||
aiCamera = new/obj/item/camera/siliconcam/robot_camera(src)
|
||||
@@ -1625,3 +1632,6 @@ GLOBAL_LIST_INIT(robot_verbs_default, list(
|
||||
audible_message("<span class='warning'>[src] sounds an alarm! \"CRITICAL ERROR: All modules OFFLINE.\"</span>")
|
||||
playsound(loc, 'sound/machines/warning-buzzer.ogg', 75, TRUE)
|
||||
to_chat(src, "<span class='userdanger'>CRITICAL ERROR: All modules OFFLINE.</span>")
|
||||
|
||||
/mob/living/silicon/robot/can_see_reagents()
|
||||
return see_reagents
|
||||
|
||||
@@ -323,6 +323,7 @@
|
||||
modules += new /obj/item/razor(src)
|
||||
modules += new /obj/item/instrument/piano_synth(src)
|
||||
modules += new /obj/item/healthanalyzer/advanced(src)
|
||||
modules += new /obj/item/reagent_scanner/adv(src)
|
||||
|
||||
var/obj/item/rsf/M = new /obj/item/rsf(src)
|
||||
M.matter = 30
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
/mob/living/silicon
|
||||
var/register_alarms = 1
|
||||
var/datum/nano_module/alarm_monitor/all/alarm_monitor
|
||||
var/datum/nano_module/atmos_control/atmos_control
|
||||
var/register_alarms = TRUE
|
||||
var/datum/tgui_module/atmos_control/atmos_control
|
||||
var/datum/tgui_module/crew_monitor/crew_monitor
|
||||
var/datum/nano_module/law_manager/law_manager
|
||||
var/datum/tgui_module/law_manager/law_manager
|
||||
var/datum/tgui_module/power_monitor/digital/power_monitor
|
||||
|
||||
/mob/living/silicon
|
||||
@@ -41,7 +40,7 @@
|
||||
set category = "Subsystems"
|
||||
set name = "Atmospherics Control"
|
||||
|
||||
atmos_control.ui_interact(usr, state = GLOB.self_state)
|
||||
atmos_control.tgui_interact(usr, state = GLOB.tgui_self_state)
|
||||
|
||||
/********************
|
||||
* Crew Monitor *
|
||||
@@ -58,7 +57,7 @@
|
||||
set name = "Law Manager"
|
||||
set category = "Subsystems"
|
||||
|
||||
law_manager.ui_interact(usr, state = GLOB.conscious_state)
|
||||
law_manager.tgui_interact(usr, state = GLOB.tgui_conscious_state)
|
||||
|
||||
/********************
|
||||
* Power Monitor *
|
||||
@@ -67,5 +66,5 @@
|
||||
set category = "Subsystems"
|
||||
set name = "Power Monitor"
|
||||
|
||||
power_monitor.tgui_interact(usr, state = GLOB.self_state)
|
||||
power_monitor.tgui_interact(usr, state = GLOB.tgui_self_state)
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
if(M)
|
||||
playsound(src, 'sound/magic/demon_consume.ogg', 50, TRUE)
|
||||
M.adjustBruteLoss(60)
|
||||
new /obj/effect/gibspawner/generic(get_turf(M), M)
|
||||
new /obj/effect/gibspawner/generic(get_turf(M), M.dna)
|
||||
if(M.stat == DEAD)
|
||||
var/mob/living/simple_animal/hostile/netherworld/blankbody/blank
|
||||
blank = new(loc)
|
||||
|
||||
@@ -113,6 +113,10 @@
|
||||
return
|
||||
|
||||
/mob/new_player/Stat()
|
||||
statpanel("Status")
|
||||
|
||||
..()
|
||||
|
||||
statpanel("Lobby")
|
||||
if(client.statpanel=="Lobby" && SSticker)
|
||||
if(SSticker.hide_mode)
|
||||
@@ -141,10 +145,6 @@
|
||||
if(player.ready)
|
||||
totalPlayersReady++
|
||||
|
||||
..()
|
||||
|
||||
statpanel("Status")
|
||||
|
||||
|
||||
/mob/new_player/Topic(href, href_list[])
|
||||
if(!client)
|
||||
|
||||
Reference in New Issue
Block a user