Polaris December Sync

This commit is contained in:
killer653
2016-12-10 09:51:11 -05:00
263 changed files with 5254 additions and 1644 deletions
+10 -2
View File
@@ -215,9 +215,17 @@
return
if(say_understands(speaker, language))
message = "<B>[src]</B> [verb], \"[message]\""
message = "<B>[speaker]</B> [verb], \"[message]\""
else
message = "<B>[src]</B> [verb]."
var/adverb
var/length = length(message) * pick(0.8, 0.9, 1.0, 1.1, 1.2) //Adds a little bit of fuzziness
switch(length)
if(0 to 12) adverb = " briefly"
if(12 to 30) adverb = " a short message"
if(30 to 48) adverb = " a message"
if(48 to 90) adverb = " a lengthy message"
else adverb = " a very lengthy message"
message = "<B>[speaker]</B> [verb][adverb]."
if(src.status_flags & PASSEMOTES)
for(var/obj/item/weapon/holder/H in src.contents)
+2
View File
@@ -48,6 +48,8 @@ var/list/slot_equipment_priority = list( \
//set disable_warning to disable the 'you are unable to equip that' warning.
//unset redraw_mob to prevent the mob from being redrawn at the end.
/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1)
if(!W)
return 0
if(!W.mob_can_equip(src, slot))
if(del_on_fail)
qdel(W)
+8
View File
@@ -113,3 +113,11 @@
"le", "me", "nd", "ne", "ng", "nt", "on", "or", "ou", "re", "se", "st", "te", "th", "ti", "to",
"ve", "wa", "all", "and", "are", "but", "ent", "era", "ere", "eve", "for", "had", "hat", "hen", "her", "hin",
"his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi")
/datum/language/sign
name = "Sign Language"
desc = "A sign language commonly used for those who are deaf or mute."
signlang_verb = list("gestures")
colour = "say_quote"
key = "s"
flags = SIGNLANG|NO_STUTTER|NONVERBAL
+4 -1
View File
@@ -18,6 +18,7 @@
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/machine_understands = 1 // Whether machines can parse and understand this language
/datum/language/proc/get_random_name(var/gender, name_count=2, syllable_count=4, syllable_divisor=2)
if(!syllables || !syllables.len)
@@ -202,8 +203,10 @@
if(!(L.flags & NONGLOBAL))
if(L == default_language)
dat += "<b>[L.name] ([get_language_prefix()][L.key])</b> - default - <a href='byond://?src=\ref[src];default_lang=reset'>reset</a><br/>[L.desc]<br/><br/>"
else
else if (can_speak(L))
dat += "<b>[L.name] ([get_language_prefix()][L.key])</b> - <a href='byond://?src=\ref[src];default_lang=\ref[L]'>set default</a><br/>[L.desc]<br/><br/>"
else
dat += "<b>[L.name] ([get_language_prefix()][L.key])</b> - cannot speak!<br/>[L.desc]<br/><br/>"
src << browse(dat, "window=checklanguage")
+1
View File
@@ -47,6 +47,7 @@
key = "f"
flags = RESTRICTED
space_chance = 100
machine_understands = 0
syllables = list("ire","ego","nahlizet","certum","veri","jatkaa","mgar","balaq", "karazet", "geeri", \
"orkan", "allaq", "sas'so", "c'arta", "forbici", "tarem", "n'ath", "reth", "sh'yro", "eth", "d'raggathnor", \
"mah'weyh", "pleggh", "at", "e'ntrath", "tok-lyr", "rqa'nap", "g'lt-ulotf", "ta'gh", "fara'qha", "fel", "d'amar det", \
+3 -1
View File
@@ -116,7 +116,9 @@
space_chance = 10
/datum/language/machine/can_speak_special(var/mob/speaker)
return speaker.isSynthetic()
var/obj/item/weapon/implant/language/eal/beep = locate() in speaker
return ((beep && beep.implanted) || speaker.isSynthetic())
//thank you sweet zuhayr
/datum/language/machine/get_random_name()
if(prob(70))
@@ -16,6 +16,9 @@
var/time_of_birth
var/language
var/death_msg = "lets out a waning guttural screech, green blood bubbling from its maw."
var/can_namepick_as_adult = 0
var/adult_name
var/instance_num
/mob/living/carbon/alien/New()
@@ -24,7 +27,8 @@
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
name = "[initial(name)] ([rand(1, 1000)])"
instance_num = rand(1, 1000)
name = "[initial(name)] ([instance_num])"
real_name = name
regenerate_icons()
@@ -2,6 +2,8 @@
name = "diona nymph"
voice_name = "diona nymph"
adult_form = /mob/living/carbon/human
can_namepick_as_adult = 1
adult_name = "diona gestalt"
speak_emote = list("chirrups")
icon_state = "nymph"
item_state = "nymph"
@@ -28,9 +28,15 @@
adult.set_species(new_species)
show_evolution_blurb()
adult.name = input(src,"Choose a name for yourself (please stick to any appropriate naming conventions).") as text|null
if(mind)
mind.transfer_to(adult)
if (can_namepick_as_adult)
var/newname = sanitize(input(adult, "You have become an adult. Choose a name for yourself.", "Adult Name") as null|text, MAX_NAME_LEN)
if(!newname)
adult.fully_replace_character_name(name, "[src.adult_name] ([instance_num])")
else
adult.fully_replace_character_name(name, newname)
else
adult.key = src.key
@@ -3,6 +3,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.loc = src
src.brainmob.container = src
src.brainmob.stat = 0
@@ -57,5 +57,8 @@
canmove = 0
return canmove
/mob/living/carbon/brain/binarycheck()
/mob/living/carbon/brain/isSynthetic()
return istype(loc, /obj/item/device/mmi/digital)
/mob/living/carbon/brain/binarycheck()
return isSynthetic()
@@ -1,122 +0,0 @@
/obj/item/organ/internal/brain
name = "brain"
health = 400 //They need to live awhile longer than other organs. Is this even used by organ code anymore?
desc = "A piece of juicy meat found in a person's head."
organ_tag = "brain"
parent_organ = BP_HEAD
vital = 1
icon_state = "brain2"
force = 1.0
w_class = ITEMSIZE_SMALL
throwforce = 1.0
throw_speed = 3
throw_range = 5
origin_tech = list(TECH_BIO = 3)
attack_verb = list("attacked", "slapped", "whacked")
var/mob/living/carbon/brain/brainmob = null
/obj/item/organ/internal/brain/robotize()
replace_self_with(/obj/item/organ/internal/mmi_holder/posibrain)
/obj/item/organ/internal/brain/mechassist()
replace_self_with(/obj/item/organ/internal/mmi_holder)
/obj/item/organ/internal/brain/digitize()
replace_self_with(/obj/item/organ/internal/mmi_holder/robot)
/obj/item/organ/internal/brain/proc/replace_self_with(replace_path)
var/mob/living/carbon/human/tmp_owner = owner
qdel(src)
if(tmp_owner)
tmp_owner.internal_organs_by_name[organ_tag] = new replace_path(tmp_owner, 1)
tmp_owner = null
/obj/item/organ/internal/pariah_brain
name = "brain remnants"
desc = "Did someone tread on this? It looks useless for cloning or cyborgification."
organ_tag = "brain"
parent_organ = BP_HEAD
icon = 'icons/mob/alien.dmi'
icon_state = "chitin"
vital = 1
/obj/item/organ/internal/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/internal/brain/New()
..()
health = config.default_brain_health
spawn(5)
if(brainmob && brainmob.client)
brainmob.client.screen.len = null //clear the hud
/obj/item/organ/internal/brain/Destroy()
if(brainmob)
qdel(brainmob)
brainmob = null
..()
/obj/item/organ/internal/brain/proc/transfer_identity(var/mob/living/carbon/H)
if(!brainmob)
brainmob = new(src)
brainmob.name = H.real_name
brainmob.real_name = H.real_name
brainmob.dna = H.dna.Clone()
brainmob.timeofhostdeath = H.timeofdeath
if(H.mind)
H.mind.transfer_to(brainmob)
brainmob << "<span class='notice'>You feel slightly disoriented. That's normal when you're just \a [initial(src.name)].</span>"
callHook("debrain", list(brainmob))
/obj/item/organ/internal/brain/examine(mob/user) // -- TLE
..(user)
if(brainmob && brainmob.client)//if thar be a brain inside... the brain.
user << "You can feel the small spark of life still left in this one."
else
user << "This one seems particularly lifeless. Perhaps it will regain some of its luster later.."
/obj/item/organ/internal/brain/removed(var/mob/living/user)
if(name == initial(name))
name = "\the [owner.real_name]'s [initial(name)]"
var/mob/living/simple_animal/borer/borer = owner.has_brain_worms()
if(borer)
borer.detatch() //Should remove borer if the brain is removed - RR
var/obj/item/organ/internal/brain/B = src
if(istype(B) && istype(owner))
B.transfer_identity(owner)
..()
/obj/item/organ/internal/brain/replaced(var/mob/living/target)
if(target.key)
target.ghostize()
if(brainmob)
if(brainmob.mind)
brainmob.mind.transfer_to(target)
else
target.key = brainmob.key
..()
/obj/item/organ/internal/brain/slime
name = "slime core"
desc = "A complex, organic knot of jelly and crystalline particles."
icon = 'icons/mob/slimes.dmi'
icon_state = "green slime extract"
/obj/item/organ/internal/brain/golem
name = "chem"
desc = "A tightly furled roll of paper, covered with indecipherable runes."
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
@@ -10,6 +10,7 @@
..()
src.brainmob.name = "[pick(list("ADA","DOS","GNU","MAC","WIN"))]-[rand(1000, 9999)]"
src.brainmob.real_name = src.brainmob.name
src.name = "robotic intelligence circuit ([src.brainmob.name])"
/obj/item/device/mmi/digital/robot/transfer_identity(var/mob/living/carbon/H)
..()
@@ -17,3 +18,6 @@
brainmob.mind.assigned_role = "Robotic Intelligence"
brainmob << "<span class='notify'>You feel slightly disoriented. That's normal when you're little more than a complex circuit.</span>"
return
/obj/item/device/mmi/digital/robot/attack_self(mob/user as mob)
return //This object is technically a brain, and should not be dumping brains out of itself like its parent object does.
+5 -4
View File
@@ -94,7 +94,7 @@
return
/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null)
/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null, var/stun = 1)
if(status_flags & GODMODE) return 0 //godmode
shock_damage *= siemens_coeff
if (shock_damage<1)
@@ -108,8 +108,9 @@
"\red <B>You feel a powerful shock course through your body!</B>", \
"\red You hear a heavy electrical crack." \
)
Stun(10)//This should work for now, more is really silly and makes you lay there forever
Weaken(10)
if(stun)
Stun(10)//This should work for now, more is really silly and makes you lay there forever
Weaken(10)
else
src.visible_message(
"\red [src] was mildly shocked by \the [source].", \
@@ -445,7 +446,7 @@
chem_effects[effect] = magnitude
/mob/living/carbon/get_default_language()
if(default_language)
if(default_language && can_speak(default_language))
return default_language
if(!species)
@@ -4,6 +4,8 @@
var/skipjumpsuit = 0
var/skipshoes = 0
var/skipmask = 0
var/skiptie = 0
var/skipholster = 0
var/skipears = 0
var/skipeyes = 0
@@ -25,6 +27,14 @@
skiplegs |= 1
skipchest |= 1
skipgroin |= 1
skipjumpsuit |= 1
skiptie |= 1
skipholster |= 1
else if(wear_suit.flags_inv & HIDETIE)
skiptie |= 1
skipholster |= 1
else if(wear_suit.flags_inv & HIDEHOLSTER)
skipholster |= 1
if(wear_suit.flags_inv & HIDESHOES)
skipshoes |= 1
skipfeet |= 1
@@ -107,10 +117,17 @@
if(w_uniform && !skipjumpsuit)
//Ties
var/tie_msg
if(istype(w_uniform,/obj/item/clothing/under))
if(istype(w_uniform,/obj/item/clothing/under) && !skiptie)
var/obj/item/clothing/under/U = w_uniform
if(U.accessories.len)
tie_msg += ". Attached to it is [lowertext(english_list(U.accessories))]"
if(skipholster)
var/list/accessories_visible = new/list() //please let this fix the stupid fucking runtimes
for(var/obj/item/clothing/accessory/A in U.accessories)
if(A.concealed_holster == 0)
accessories_visible.Add(A)
if(accessories_visible.len)
tie_msg += ". Attached to it is [lowertext(english_list(accessories_visible))]"
else tie_msg += ". Attached to it is [lowertext(english_list(U.accessories))]"
if(w_uniform.blood_DNA)
msg += "<span class='warning'>[T.He] [T.is] wearing \icon[w_uniform] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name][tie_msg]!</span>\n"
@@ -155,6 +155,15 @@
update |= temp.take_damage(b_loss * 0.05, f_loss * 0.05, used_weapon = weapon_message)
if(update) UpdateDamageIcon()
/mob/living/carbon/human/proc/implant_loadout(var/datum/gear/G = new/datum/gear/utility/implant)
var/obj/item/weapon/implant/I = new G.path(src)
I.imp_in = src
I.implanted = 1
var/obj/item/organ/external/affected = src.organs_by_name[BP_HEAD]
affected.implants += I
I.part = affected
I.implanted(src)
/mob/living/carbon/human/proc/implant_loyalty(override = FALSE) // Won't override by default.
if(!config.use_loyalty_implants && !override) return // Nuh-uh.
@@ -60,7 +60,7 @@
if (istype(H) && attempt_to_scoop(H))
return 0;
// VOREStation Edit - End
if(istype(H) && health < config.health_threshold_crit && health > config.health_threshold_dead)
if(istype(H) && health < config.health_threshold_crit)
if(!H.check_has_mouth())
H << "<span class='danger'>You don't have a mouth, you cannot perform CPR!</span>"
return
@@ -86,12 +86,14 @@
if(!do_after(H, 30))
return
adjustOxyLoss(-(min(getOxyLoss(), 5)))
updatehealth()
H.visible_message("<span class='danger'>\The [H] performs CPR on \the [src]!</span>")
src << "<span class='notice'>You feel a breath of fresh air enter your lungs. It feels good.</span>"
H << "<span class='warning'>Repeat at least every 7 seconds.</span>"
if(istype(H) && health > config.health_threshold_dead)
adjustOxyLoss(-(min(getOxyLoss(), 5)))
updatehealth()
src << "<span class='notice'>You feel a breath of fresh air enter your lungs. It feels good.</span>"
else if(!(M == src && apply_pressure(M, M.zone_sel.selecting)))
help_shake_act(M)
return 1
@@ -24,6 +24,9 @@ emp_act
else // Otherwise we blocked normally and stopped all the damage.
return 0
if(!P.nodamage)
organ.add_autopsy_data("[P.name]", P.damage)
//Shrapnel
if(P.can_embed())
var/armor = getarmor_organ(organ, "bullet")
+16 -11
View File
@@ -216,11 +216,12 @@
// DNA2 - Gene processing.
// The HULK stuff that was here is now in the hulk gene.
for(var/datum/dna/gene/gene in dna_genes)
if(!gene.block)
continue
if(gene.is_active(src))
gene.OnMobLife(src)
if(!isSynthetic())
for(var/datum/dna/gene/gene in dna_genes)
if(!gene.block)
continue
if(gene.is_active(src))
gene.OnMobLife(src)
radiation = Clamp(radiation,0,100)
@@ -343,14 +344,14 @@
else
adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS)
if(should_have_organ(O_LUNGS))
if(breath && should_have_organ(O_LUNGS))
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
if(!L.is_bruised() && prob(8))
if(breath.total_moles)
if(breath.total_moles < BREATH_MOLES / 5 || breath.total_moles > BREATH_MOLES * 5)
rupture_lung()
else
rupture_lung()
rupture_lung()
if(should_have_organ("brain"))
if(prob(5))
adjustBrainLoss(0.02 * oxyloss) //2% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
oxygen_alert = max(oxygen_alert, 1)
@@ -368,6 +369,10 @@
safe_pressure_min *= 1.5
else if(L.is_bruised())
safe_pressure_min *= 1.25
else if(breath)
if(breath.total_moles < BREATH_MOLES / 10 || breath.total_moles > BREATH_MOLES * 5)
if (prob(8))
rupture_lung()
var/safe_exhaled_max = 10
var/safe_toxins_max = 0.2
@@ -159,6 +159,8 @@
min_age = 19
max_age = 80
darksight = 4
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR
@@ -167,6 +169,15 @@
base_color = "#006666"
//reagent_tag = IS_SKRELL //VOREStation Removal
cold_level_1 = 280 //Default 260 - Lower is better
cold_level_2 = 220 //Default 200
cold_level_3 = 130 //Default 120
heat_level_1 = 420 //Default 360 - Higher is better
heat_level_2 = 480 //Default 400
heat_level_3 = 1100 //Default 1000
reagent_tag = IS_SKRELL
has_limbs = list(
BP_TORSO = list("path" = /obj/item/organ/external/chest),
@@ -110,29 +110,30 @@ Please contact me on #coderbus IRC. ~Carn x
#define DAMAGE_LAYER 2
#define SURGERY_LEVEL 3 //bs12 specific.
#define UNDERWEAR_LAYER 4
#define UNIFORM_LAYER 5
#define ID_LAYER 6
#define SHOES_LAYER 7
#define GLOVES_LAYER 8
#define BELT_LAYER 9
#define SUIT_LAYER 10
#define TAIL_LAYER 11 //bs12 specific. this hack is probably gonna come back to haunt me
#define GLASSES_LAYER 12
#define BELT_LAYER_ALT 13
#define SUIT_STORE_LAYER 14
#define BACK_LAYER 15
#define HAIR_LAYER 16 //TODO: make part of head layer?
#define EARS_LAYER 17
#define FACEMASK_LAYER 18
#define HEAD_LAYER 19
#define COLLAR_LAYER 20
#define HANDCUFF_LAYER 21
#define LEGCUFF_LAYER 22
#define L_HAND_LAYER 23
#define R_HAND_LAYER 24
#define FIRE_LAYER 25 //If you're on fire
#define TARGETED_LAYER 26 //BS12: Layer for the target overlay from weapon targeting system
#define TOTAL_LAYERS 26
#define SHOES_LAYER_ALT 5
#define UNIFORM_LAYER 6
#define ID_LAYER 7
#define SHOES_LAYER 8
#define GLOVES_LAYER 9
#define BELT_LAYER 10
#define SUIT_LAYER 11
#define TAIL_LAYER 12 //bs12 specific.
#define GLASSES_LAYER 13
#define BELT_LAYER_ALT 14
#define SUIT_STORE_LAYER 15
#define BACK_LAYER 16
#define HAIR_LAYER 17 //TODO: make part of head layer?
#define EARS_LAYER 18
#define FACEMASK_LAYER 19
#define HEAD_LAYER 20
#define COLLAR_LAYER 21
#define HANDCUFF_LAYER 22
#define LEGCUFF_LAYER 23
#define L_HAND_LAYER 24
#define R_HAND_LAYER 25
#define FIRE_LAYER 26 //If you're on fire
#define TARGETED_LAYER 27 //BS12: Layer for the target overlay from weapon targeting system
#define TOTAL_LAYERS 27
//////////////////////////////////
/mob/living/carbon/human
@@ -475,7 +476,7 @@ var/global/list/damage_icon_parts = list()
//vvvvvv UPDATE_INV PROCS vvvvvv
/mob/living/carbon/human/update_inv_w_uniform(var/update_icons=1)
if(w_uniform && istype(w_uniform, /obj/item/clothing/under) )
if( (w_uniform && istype(w_uniform, /obj/item/clothing/under)) && !(wear_suit && istype(wear_suit, /obj/item/clothing/suit/space) && wear_suit.flags_inv & HIDEJUMPSUIT && !istype(wear_suit, /obj/item/clothing/suit/space/rig) ))
w_uniform.screen_loc = ui_iclothing
//determine the icon to use
@@ -519,7 +520,7 @@ var/global/list/damage_icon_parts = list()
overlays_standing[UNIFORM_LAYER] = null
//hiding/revealing shoes if necessary
update_inv_shoes(0)
update_inv_shoes(1)
if(update_icons)
update_icons()
@@ -647,12 +648,22 @@ var/global/list/damage_icon_parts = list()
else
standing = image("icon" = 'icons/mob/feet.dmi', "icon_state" = "[shoes.icon_state]")
var/shoe_layer = SHOES_LAYER
if(istype(shoes, /obj/item/clothing/shoes))
var/obj/item/clothing/shoes/ushoes = shoes
if(ushoes.shoes_under_pants == 1)
overlays_standing[SHOES_LAYER] = null
shoe_layer = SHOES_LAYER_ALT
else
overlays_standing[SHOES_LAYER_ALT] = null
shoe_layer = SHOES_LAYER
if(shoes.blood_DNA)
var/image/bloodsies = image("icon" = species.get_blood_mask(src), "icon_state" = "shoeblood")
bloodsies.color = shoes.blood_color
standing.overlays += bloodsies
standing.color = shoes.color
overlays_standing[SHOES_LAYER] = standing
overlays_standing[shoe_layer] = standing
else
if(feet_blood_DNA)
var/image/bloodsies = image("icon" = species.get_blood_mask(src), "icon_state" = "shoeblood")
@@ -660,6 +671,7 @@ var/global/list/damage_icon_parts = list()
overlays_standing[SHOES_LAYER] = bloodsies
else
overlays_standing[SHOES_LAYER] = null
overlays_standing[SHOES_LAYER_ALT] = null
if(update_icons) update_icons()
/mob/living/carbon/human/update_inv_s_store(var/update_icons=1)
@@ -808,16 +820,15 @@ var/global/list/damage_icon_parts = list()
standing.overlays |= A.get_mob_overlay()
overlays_standing[SUIT_LAYER] = standing
update_tail_showing(0)
else
overlays_standing[SUIT_LAYER] = null
update_tail_showing(0)
//Hide/show other layers if necessary
update_collar(0)
//hide/show shoes if necessary
update_inv_w_uniform(0)
update_inv_shoes(0)
update_tail_showing(0)
if(update_icons) update_icons()
@@ -5,6 +5,10 @@
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(language)
src << "<span class='notice'>You will now speak [language] if you do not specify a language when speaking.</span>"
else
+4 -2
View File
@@ -17,8 +17,7 @@
//Mutations and radiation
handle_mutations_and_radiation()
//Chemicals in the body
handle_chemicals_in_body()
//Blood
handle_blood()
@@ -30,6 +29,9 @@
. = 1
//Chemicals in the body, this is moved over here so that blood can be added after death
handle_chemicals_in_body()
//Handle temperature/pressure differences between body and environment
if(environment)
handle_environment(environment)
+3 -2
View File
@@ -177,7 +177,7 @@ proc/get_radio_key_from_channel(var/channel)
return 1
//Self explanatory.
if(is_muzzled())
if(is_muzzled() && !(speaking && (speaking.flags & SIGNLANG)))
src << "<span class='danger'>You're muzzled and cannot speak!</span>"
return
@@ -204,7 +204,7 @@ proc/get_radio_key_from_channel(var/channel)
w_not_heard = "[speaking.speech_verb] something [w_adverb]"
//For speech disorders (hulk, slurring, stuttering)
if(!(speaking && (speaking.flags & NO_STUTTER)))
if(!(speaking && (speaking.flags & NO_STUTTER || speaking.flags & SIGNLANG)))
var/list/message_data = list(message, verb, whispering)
if(handle_speech_problems(message_data))
message = message_data[1]
@@ -264,6 +264,7 @@ proc/get_radio_key_from_channel(var/channel)
src.custom_emote(1, "[pick(speaking.signlang_verb)].")
if (speaking.flags & SIGNLANG)
log_say("[name]/[key] : SIGN: [message]")
return say_signlang(message, pick(speaking.signlang_verb), speaking)
//These will contain the main receivers of the message
@@ -220,7 +220,7 @@
m_type = 1
if("law")
if (istype(module,/obj/item/weapon/robot_module/security))
if (istype(module,/obj/item/weapon/robot_module/robot/security))
message = "shows its legal authorization barcode."
playsound(src.loc, 'sound/voice/biamthelaw.ogg', 50, 0)
@@ -229,7 +229,7 @@
src << "You are not THE LAW, pal."
if("halt")
if (istype(module,/obj/item/weapon/robot_module/security))
if (istype(module,/obj/item/weapon/robot_module/robot/security))
message = "<B>[src]</B>'s speakers skreech, \"Halt! Security!\"."
playsound(src.loc, 'sound/voice/halt.ogg', 50, 0)
@@ -827,7 +827,7 @@
. = ..()
if(module)
if(module.type == /obj/item/weapon/robot_module/janitor)
if(module.type == /obj/item/weapon/robot_module/robot/janitor)
var/turf/tile = loc
if(isturf(tile))
tile.clean_blood()
@@ -1,16 +1,16 @@
var/global/list/robot_modules = list(
"Standard" = /obj/item/weapon/robot_module/standard,
"Service" = /obj/item/weapon/robot_module/clerical/butler,
"Clerical" = /obj/item/weapon/robot_module/clerical/general,
"Research" = /obj/item/weapon/robot_module/research,
"Miner" = /obj/item/weapon/robot_module/miner,
"Crisis" = /obj/item/weapon/robot_module/medical/crisis,
"Surgeon" = /obj/item/weapon/robot_module/medical/surgeon,
"Security" = /obj/item/weapon/robot_module/security/general,
"Combat" = /obj/item/weapon/robot_module/security/combat,
"Engineering" = /obj/item/weapon/robot_module/engineering/general,
"Construction" = /obj/item/weapon/robot_module/engineering/construction,
"Janitor" = /obj/item/weapon/robot_module/janitor
"Standard" = /obj/item/weapon/robot_module/robot/standard,
"Service" = /obj/item/weapon/robot_module/robot/clerical/butler,
"Clerical" = /obj/item/weapon/robot_module/robot/clerical/general,
"Research" = /obj/item/weapon/robot_module/robot/research,
"Miner" = /obj/item/weapon/robot_module/robot/miner,
"Crisis" = /obj/item/weapon/robot_module/robot/medical/crisis,
"Surgeon" = /obj/item/weapon/robot_module/robot/medical/surgeon,
"Security" = /obj/item/weapon/robot_module/robot/security/general,
"Combat" = /obj/item/weapon/robot_module/robot/security/combat,
"Engineering" = /obj/item/weapon/robot_module/robot/engineering/general,
"Construction" = /obj/item/weapon/robot_module/robot/engineering/construction,
"Janitor" = /obj/item/weapon/robot_module/robot/janitor
)
/obj/item/weapon/robot_module
@@ -149,7 +149,14 @@ var/global/list/robot_modules = list(
if(!can_be_pushed)
R.status_flags |= CANPUSH
/obj/item/weapon/robot_module/standard
// Cyborgs (non-drones), default loadout. This will be given to every module.
/obj/item/weapon/robot_module/robot/New()
..()
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/weapon/extinguisher(src)
/obj/item/weapon/robot_module/robot/standard
name = "standard robot module"
sprites = list( "Basic" = "robot_old",
"Android" = "droid",
@@ -157,24 +164,21 @@ var/global/list/robot_modules = list(
"Drone" = "drone-standard"
)
/obj/item/weapon/robot_module/standard/New()
src.modules += new /obj/item/device/flash(src)
/obj/item/weapon/robot_module/robot/standard/New()
..()
src.modules += new /obj/item/weapon/melee/baton/loaded(src)
src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.emag = new /obj/item/weapon/melee/energy/sword(src)
..()
/obj/item/weapon/robot_module/medical
/obj/item/weapon/robot_module/robot/medical
name = "medical robot module"
channels = list("Medical" = 1)
networks = list(NETWORK_MEDICAL)
subsystems = list(/mob/living/silicon/proc/subsystem_crew_monitor)
can_be_pushed = 0
/obj/item/weapon/robot_module/medical/surgeon
/obj/item/weapon/robot_module/robot/medical/surgeon
name = "surgeon robot module"
sprites = list(
"Basic" = "Medbot",
@@ -184,8 +188,8 @@ var/global/list/robot_modules = list(
"Drone" = "drone-surgery"
)
/obj/item/weapon/robot_module/medical/surgeon/New()
src.modules += new /obj/item/device/flash(src)
/obj/item/weapon/robot_module/robot/medical/surgeon/New()
..()
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/weapon/reagent_containers/borghypo(src)
src.modules += new /obj/item/weapon/scalpel(src)
@@ -198,7 +202,6 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/circular_saw(src)
src.modules += new /obj/item/weapon/surgicaldrill(src)
src.modules += new /obj/item/weapon/gripper/no_use/organ(src)
src.modules += new /obj/item/weapon/extinguisher/mini(src)
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
src.emag.reagents.add_reagent("pacid", 250)
src.emag.name = "Polyacid spray"
@@ -217,15 +220,13 @@ var/global/list/robot_modules = list(
src.modules += N
src.modules += B
..()
/obj/item/weapon/robot_module/medical/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
/obj/item/weapon/robot_module/medical/robot/surgeon/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
if(src.emag)
var/obj/item/weapon/reagent_containers/spray/PS = src.emag
PS.reagents.add_reagent("pacid", 2 * amount)
..()
/obj/item/weapon/robot_module/medical/crisis
/obj/item/weapon/robot_module/robot/medical/crisis
name = "crisis robot module"
sprites = list(
"Basic" = "Medbot",
@@ -236,8 +237,8 @@ var/global/list/robot_modules = list(
"Drone - Chemistry" = "drone-chemistry"
)
/obj/item/weapon/robot_module/medical/crisis/New()
src.modules += new /obj/item/device/flash(src)
/obj/item/weapon/robot_module/robot/medical/crisis/New()
..()
src.modules += new /obj/item/borg/sight/hud/med(src)
src.modules += new /obj/item/device/healthanalyzer(src)
src.modules += new /obj/item/device/reagent_scanner/adv(src)
@@ -248,7 +249,6 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
src.modules += new /obj/item/weapon/gripper/no_use/organ(src)
src.modules += new /obj/item/weapon/gripper/chemistry(src)
src.modules += new /obj/item/weapon/extinguisher/mini(src)
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
src.emag.reagents.add_reagent("pacid", 250)
src.emag.name = "Polyacid spray"
@@ -272,9 +272,7 @@ var/global/list/robot_modules = list(
src.modules += B
src.modules += S
..()
/obj/item/weapon/robot_module/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
/obj/item/weapon/robot_module/robot/medical/crisis/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/weapon/reagent_containers/syringe/S = locate() in src.modules
if(S.mode == 2)
@@ -290,7 +288,7 @@ var/global/list/robot_modules = list(
..()
/obj/item/weapon/robot_module/engineering
/obj/item/weapon/robot_module/robot/engineering
name = "engineering robot module"
channels = list("Engineering" = 1)
networks = list(NETWORK_ENGINEERING)
@@ -303,18 +301,16 @@ var/global/list/robot_modules = list(
"Drone" = "drone-engineer"
)
/obj/item/weapon/robot_module/engineering/construction
/obj/item/weapon/robot_module/robot/engineering/construction
name = "construction robot module"
no_slip = 1
/obj/item/weapon/robot_module/engineering/construction/New()
src.modules += new /obj/item/device/flash(src)
/obj/item/weapon/robot_module/robot/engineering/construction/New()
..()
src.modules += new /obj/item/borg/sight/meson(src)
src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/weapon/rcd/borg(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/weapon/weldingtool/largetank(src)
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
src.modules += new /obj/item/device/pipe_painter(src)
@@ -348,16 +344,12 @@ var/global/list/robot_modules = list(
RG.synths = list(metal, glass)
src.modules += RG
/obj/item/weapon/robot_module/robot/engineering/general/New()
..()
/obj/item/weapon/robot_module/engineering/general/New()
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/borg/sight/meson(src)
src.modules += new /obj/item/weapon/extinguisher(src)
src.modules += new /obj/item/weapon/weldingtool/largetank(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/weapon/wirecutters(src)
src.modules += new /obj/item/device/multitool(src)
src.modules += new /obj/item/device/t_scanner(src)
@@ -405,9 +397,7 @@ var/global/list/robot_modules = list(
RG.synths = list(metal, glass)
src.modules += RG
..()
/obj/item/weapon/robot_module/security
/obj/item/weapon/robot_module/robot/security
name = "security robot module"
channels = list("Security" = 1)
networks = list(NETWORK_SECURITY)
@@ -415,7 +405,7 @@ var/global/list/robot_modules = list(
can_be_pushed = 0
supported_upgrades = list(/obj/item/borg/upgrade/tasercooler)
/obj/item/weapon/robot_module/security/general
/obj/item/weapon/robot_module/robot/security/general
sprites = list(
"Basic" = "secborg",
"Red Knight" = "Security",
@@ -425,8 +415,8 @@ var/global/list/robot_modules = list(
"Drone" = "drone-sec"
)
/obj/item/weapon/robot_module/security/general/New()
src.modules += new /obj/item/device/flash(src)
/obj/item/weapon/robot_module/robot/security/general/New()
..()
src.modules += new /obj/item/borg/sight/hud/sec(src)
src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
src.modules += new /obj/item/weapon/melee/baton/robot(src)
@@ -434,9 +424,8 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/taperoll/police(src)
src.modules += new /obj/item/weapon/reagent_containers/spray/pepper(src)
src.emag = new /obj/item/weapon/gun/energy/laser/mounted(src)
..()
/obj/item/weapon/robot_module/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
/obj/item/weapon/robot_module/robot/security/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/device/flash/F = locate() in src.modules
if(F.broken)
F.broken = 0
@@ -454,7 +443,7 @@ var/global/list/robot_modules = list(
if(B && B.bcell)
B.bcell.give(amount)
/obj/item/weapon/robot_module/janitor
/obj/item/weapon/robot_module/robot/janitor
name = "janitorial robot module"
channels = list("Service" = 1)
sprites = list(
@@ -464,8 +453,8 @@ var/global/list/robot_modules = list(
"Drone" = "drone-janitor"
)
/obj/item/weapon/robot_module/janitor/New()
src.modules += new /obj/item/device/flash(src)
/obj/item/weapon/robot_module/robot/janitor/New()
..()
src.modules += new /obj/item/weapon/soap/nanotrasen(src)
src.modules += new /obj/item/weapon/storage/bag/trash(src)
src.modules += new /obj/item/weapon/mop(src)
@@ -473,16 +462,15 @@ var/global/list/robot_modules = list(
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
src.emag.reagents.add_reagent("lube", 250)
src.emag.name = "Lube spray"
..()
/obj/item/weapon/robot_module/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
/obj/item/weapon/robot_module/robot/janitor/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/device/lightreplacer/LR = locate() in src.modules
LR.Charge(R, amount)
if(src.emag)
var/obj/item/weapon/reagent_containers/spray/S = src.emag
S.reagents.add_reagent("lube", 2 * amount)
/obj/item/weapon/robot_module/clerical
/obj/item/weapon/robot_module/robot/clerical
name = "service robot module"
channels = list("Service" = 1)
languages = list(
@@ -496,7 +484,7 @@ var/global/list/robot_modules = list(
LANGUAGE_SCHECHI = 1
)
/obj/item/weapon/robot_module/clerical/butler
/obj/item/weapon/robot_module/robot/clerical/butler
sprites = list( "Waitress" = "Service",
"Kent" = "toiletbot",
"Bro" = "Brobot",
@@ -506,8 +494,8 @@ var/global/list/robot_modules = list(
"Drone - Hydro" = "drone-hydro"
)
/obj/item/weapon/robot_module/clerical/butler/New()
src.modules += new /obj/item/device/flash(src)
/obj/item/weapon/robot_module/robot/clerical/butler/New()
..()
src.modules += new /obj/item/weapon/gripper/service(src)
src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
src.modules += new /obj/item/weapon/material/minihoe(src)
@@ -537,9 +525,8 @@ var/global/list/robot_modules = list(
R.my_atom = src.emag
R.add_reagent("beer2", 50)
src.emag.name = "Mickey Finn's Special Brew"
..()
/obj/item/weapon/robot_module/clerical/general
/obj/item/weapon/robot_module/robot/clerical/general
name = "clerical robot module"
sprites = list(
"Waitress" = "Service",
@@ -550,8 +537,8 @@ var/global/list/robot_modules = list(
"Drone" = "drone-service"
)
/obj/item/weapon/robot_module/clerical/general/New()
src.modules += new /obj/item/device/flash(src)
/obj/item/weapon/robot_module/robot/clerical/general/New()
..()
src.modules += new /obj/item/weapon/pen/robopen(src)
src.modules += new /obj/item/weapon/form_printer(src)
src.modules += new /obj/item/weapon/gripper/paperwork(src)
@@ -568,7 +555,7 @@ var/global/list/robot_modules = list(
var/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/B = src.emag
B.reagents.add_reagent("beer2", 2 * amount)
/obj/item/weapon/robot_module/miner
/obj/item/weapon/robot_module/robot/miner
name = "miner robot module"
channels = list("Supply" = 1)
networks = list(NETWORK_MINE)
@@ -580,8 +567,8 @@ var/global/list/robot_modules = list(
)
supported_upgrades = list(/obj/item/borg/upgrade/jetpack)
/obj/item/weapon/robot_module/miner/New()
src.modules += new /obj/item/device/flash(src)
/obj/item/weapon/robot_module/robot/miner/New()
..()
src.modules += new /obj/item/borg/sight/material(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/screwdriver(src)
@@ -590,11 +577,9 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src)
src.modules += new /obj/item/weapon/gripper/miner(src)
src.modules += new /obj/item/weapon/mining_scanner(src)
src.modules += new /obj/item/weapon/crowbar(src)
src.emag = new /obj/item/weapon/pickaxe/plasmacutter(src)
..()
/obj/item/weapon/robot_module/research
/obj/item/weapon/robot_module/robot/research
name = "research module"
channels = list("Science" = 1)
sprites = list(
@@ -602,8 +587,8 @@ var/global/list/robot_modules = list(
"Drone" = "drone-science"
)
/obj/item/weapon/robot_module/research/New()
src.modules += new /obj/item/device/flash(src)
/obj/item/weapon/robot_module/robot/research/New()
..()
src.modules += new /obj/item/weapon/portable_destructive_analyzer(src)
src.modules += new /obj/item/weapon/gripper/research(src)
src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src)
@@ -614,12 +599,10 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/weldingtool/largetank(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/crowbar(src)
src.modules += new /obj/item/weapon/wirecutters(src)
src.modules += new /obj/item/device/multitool(src)
src.modules += new /obj/item/weapon/scalpel(src)
src.modules += new /obj/item/weapon/circular_saw(src)
src.modules += new /obj/item/weapon/extinguisher/mini(src)
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
src.emag = new /obj/item/weapon/hand_tele(src)
@@ -639,9 +622,7 @@ var/global/list/robot_modules = list(
C.synths = list(wire)
src.modules += C
..()
/obj/item/weapon/robot_module/syndicate
/obj/item/weapon/robot_module/robot/syndicate
name = "illegal robot module"
hide_on_manifest = 1
languages = list(
@@ -659,9 +640,9 @@ var/global/list/robot_modules = list(
)
var/id
/obj/item/weapon/robot_module/syndicate/New(var/mob/living/silicon/robot/R)
/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R)
..()
loc = R
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/weapon/melee/energy/sword(src)
src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src)
src.modules += new /obj/item/weapon/card/emag(src)
@@ -671,19 +652,19 @@ var/global/list/robot_modules = list(
id = R.idcard
src.modules += id
..()
/obj/item/weapon/robot_module/syndicate/Destroy()
/obj/item/weapon/robot_module/robot/syndicate/Destroy()
src.modules -= id
id = null
return ..()
/obj/item/weapon/robot_module/security/combat
/obj/item/weapon/robot_module/robot/security/combat
name = "combat robot module"
hide_on_manifest = 1
sprites = list("Combat Android" = "droid-combat")
/obj/item/weapon/robot_module/security/combat/New()
/obj/item/weapon/robot_module/robot/security/combat/New()
..()
src.modules += new /obj/item/device/flash(src)
//src.modules += new /obj/item/borg/sight/thermal(src) // VOREStation Edit
src.modules += new /obj/item/weapon/gun/energy/laser/mounted(src)
@@ -691,7 +672,6 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/borg/combat/shield(src)
src.modules += new /obj/item/borg/combat/mobility(src)
src.emag = new /obj/item/weapon/gun/energy/lasercannon/mounted(src)
..()
/obj/item/weapon/robot_module/drone
name = "drone module"
@@ -700,6 +680,7 @@ var/global/list/robot_modules = list(
networks = list(NETWORK_ENGINEERING)
/obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot)
..()
src.modules += new /obj/item/weapon/weldingtool(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
@@ -774,8 +755,6 @@ var/global/list/robot_modules = list(
P.synths = list(plastic)
src.modules += P
..()
/obj/item/weapon/robot_module/drone/construction
name = "construction drone module"
hide_on_manifest = 1
@@ -783,8 +762,8 @@ var/global/list/robot_modules = list(
languages = list()
/obj/item/weapon/robot_module/drone/construction/New()
src.modules += new /obj/item/weapon/rcd/borg(src)
..()
src.modules += new /obj/item/weapon/rcd/borg(src)
/obj/item/weapon/robot_module/drone/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/device/lightreplacer/LR = locate() in src.modules
@@ -20,7 +20,7 @@
laws = new /datum/ai_laws/syndicate_override
overlays.Cut()
init_id()
new /obj/item/weapon/robot_module/syndicate(src)
new /obj/item/weapon/robot_module/robot/syndicate(src)
radio.keyslot = new /obj/item/device/encryptionkey/syndicate(radio)
radio.recalculateChannels()
+2 -2
View File
@@ -75,13 +75,13 @@
/mob/living/silicon/stun_effect_act(var/stun_amount, var/agony_amount)
return //immune
/mob/living/silicon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0)
/mob/living/silicon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 0.0)
if(shock_damage > 0)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, loc)
s.start()
shock_damage *= 0.75 //take reduced damage
shock_damage *= siemens_coeff //take reduced damage
take_overall_damage(0, shock_damage)
visible_message("<span class='warning'>[src] was shocked by \the [source]!</span>", \
"<span class='danger'>Energy pulse detected, system damaged!</span>", \
@@ -129,7 +129,7 @@
return
custom_emote(1, pick( list("slashes at [target_mob]", "bites [target_mob]") ) )
var/damage = rand(20,30)
var/damage = rand(melee_damage_lower, melee_damage_upper)
if(ishuman(target_mob))
var/mob/living/carbon/human/H = target_mob
+1
View File
@@ -654,6 +654,7 @@
if(.)
if(statpanel("Status") && ticker && ticker.current_state != GAME_STATE_PREGAME)
stat("Station Time", stationtime2text())
stat("Station Date", stationdate2text())
stat("Round Duration", roundduration2text())
if(client.holder)