Update, 22JUL2018

Episode VI, The Return of the Maymay.
This commit is contained in:
Erki
2018-07-22 22:14:03 +03:00
committed by GitHub
214 changed files with 3249 additions and 8662 deletions
+2 -1
View File
@@ -27,6 +27,7 @@
key = "0"
flags = RESTRICTED
syllables = list("blah","blah","blah","bleh","meh","neh","nah","wah")
partial_understanding = list(LANGUAGE_SIIK_TAU = 60)
//TODO flag certain languages to use the mob-type specific say_quote and then get rid of these.
/datum/language/common/get_spoken_verb(var/msg_end)
@@ -66,7 +67,7 @@
// Sign language
/datum/language/sign
name = LANGUAGE_SIGN
desc = "A signed version of Standard, though its intent is primarily to help out people who are deaf and mute, "
desc = "A signed version of Ceti Basic, though its intent is primarily to help out people who are deaf and mute, "
speech_verb = "signs"
signlang_verb = list("signs", "gestures")
colour = "i"
+14 -2
View File
@@ -55,7 +55,7 @@
"mi","jri","dynh","manq","rhe","zar","rrhaz","kal","chur","eech","thaa","dra","jurl","mah","sanu","dra","ii'r",
"ka","aasi","far","wa","baq","ara","qara","zir","sam","mak","hrar","nja","rir","khan","jun","dar","rik","kah",
"hal","ket","jurl","mah","tul","cresh","azu","ragh","mro","mra","mrro","mrra")
partial_understanding = list(LANGUAGE_SIIK_TAJR = 50, LANGUAGE_YA_SSA = 25, LANGUAGE_DELVAHII = 50)
partial_understanding = list(LANGUAGE_SIIK_TAJR = 50, LANGUAGE_YA_SSA = 25, LANGUAGE_DELVAHII = 50, LANGUAGE_SIIK_TAU = 40)
/datum/language/tajaran/get_random_name(var/gender)
@@ -92,7 +92,7 @@
"mi","jri","dynh","manq","rhe","zar","rrhaz","kal","chur","eech","thaa","dra","jurl","mah","sanu","dra","ii'r",
"ka","aasi","far","wa","baq","ara","qara","zir","sam","mak","hrar","nja","rir","khan","jun","dar","rik","kah",
"hal","ket","jurl","mah","tul","cresh","azu","ragh","mro","mra","mrro","mrra")
partial_understanding = list(LANGUAGE_SIIK_MAAS = 50, LANGUAGE_SIGN_TAJARA = 25)
partial_understanding = list(LANGUAGE_SIIK_MAAS = 50, LANGUAGE_SIGN_TAJARA = 25, LANGUAGE_SIIK_TAU= 20)
/datum/language/yassa
name = LANGUAGE_YA_SSA
@@ -124,6 +124,18 @@
"hal","kete","juril","mah","tul","cresh","azu","ragh","miro","mara","mrero","mrara")
partial_understanding = list(LANGUAGE_SIIK_MAAS = 50)
/datum/language/siik_tau
name = LANGUAGE_SIIK_TAU
desc = "A macaronic form of Tau Ceti Basic and Siik'maas, developed in Mendell City soon after Tajara entered the galactic field."
speech_verb = "slurs"
ask_verb = "mrowmbles"
exclaim_verb = "exclaims"
key = "t"
flags = WHITELISTED
syllables = list("m'Rr","rr","tahjr","kir","rrahj","kii","mirr","krah","ahhk","nahl","vahh","khahz","jri","rahn","dahrr",
"mi","j'Rri","dy'Nh","mah'nq","rhe","zahr","r'Rhahz","kahl")
partial_understanding = list(LANGUAGE_SIIK_MAAS = 40, LANGUAGE_SIIK_TAJR = 20, LANGUAGE_TCB = 60)
/datum/language/skrell
name = LANGUAGE_SKRELLIAN
desc = "A melodic and complex language spoken by the Skrell of Qerrbalak. Some of the notes are inaudible to humans."
@@ -1296,6 +1296,9 @@
if (src.is_diona())
setup_gestalt(1)
burn_mod = species.burn_mod
brute_mod = species.brute_mod
max_stamina = species.stamina
stamina = max_stamina
sprint_speed_factor = species.sprint_speed_factor
@@ -102,7 +102,7 @@
/mob/living/carbon/human/adjustBruteLoss(var/amount)
amount = amount*species.brute_mod
amount *= brute_mod
if(amount > 0)
take_overall_damage(amount, 0)
else
@@ -110,7 +110,7 @@
BITSET(hud_updateflag, HEALTH_HUD)
/mob/living/carbon/human/adjustFireLoss(var/amount)
amount = amount*species.burn_mod
amount *= burn_mod
if(amount > 0)
take_overall_damage(0, amount)
else
@@ -118,7 +118,7 @@
BITSET(hud_updateflag, HEALTH_HUD)
/mob/living/carbon/human/proc/adjustBruteLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
amount = amount*species.brute_mod
amount *= brute_mod
if (organ_name in organs_by_name)
var/obj/item/organ/external/O = get_organ(organ_name)
@@ -131,7 +131,7 @@
BITSET(hud_updateflag, HEALTH_HUD)
/mob/living/carbon/human/proc/adjustFireLossByPart(var/amount, var/organ_name, var/obj/damage_source = null)
amount = amount*species.burn_mod
amount *= burn_mod
if (organ_name in organs_by_name)
var/obj/item/organ/external/O = get_organ(organ_name)
@@ -245,6 +245,23 @@
else
..()
/mob/living/carbon/human/adjustHalLoss(var/amount, var/ignoreImmunity = 0)//An inherited version so this doesnt affect cyborgs
if(status_flags & GODMODE) return 0 //godmode
if(!ignoreImmunity)//Adjusting how hallloss works. Species with the NO_PAIN flag will suffer most of the effects of halloss, but will be immune to most conventional sources of accumulating it
if (species && species.flags & NO_PAIN)//Species with this flag will only gather halloss through species-specific mechanics, which apply it with the ignoreImmunity flag
return 0
if(wearing_rig) //I don't know if this is the best way, but I'm hard-pressed to think of a different way. Thanks Vaurca.
for(var/obj/item/rig_module/lattice/L in wearing_rig.installed_modules)
if(L.active && lattice_users.len)
amount = amount / (lattice_users.len + 1)
for(var/mob/living/carbon/human/H in lattice_users)
if(H != src)
H.setHalLoss(min(max(H.getHalLoss() + amount, 0),(H.maxHealth*2)))
H << "<span class='danger'>Your neural lattice buzzes, filling your mind with pain!</span>"
halloss = min(max(halloss + amount, 0),(maxHealth*2))
////////////////////////////////////////////
//Returns a list of damaged organs
@@ -566,3 +566,189 @@
G.affecting.forceMove(locate(T.x + rand(-1,1), T.y + rand(-1,1), T.z))
else
qdel(G)
/mob/living/carbon/human/proc/trample()
set category = "Abilities"
set name = "Trample"
set desc = "Charge forward, trampling anything in your path until you hit something more stubborn than you are."
if(last_special > world.time)
to_chat(src, "<span class='danger'>You are too tired to charge!.</span>")
return
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
to_chat(src, "<span class='danger'>You cannot charge in your current state!.</span>")
return
last_special = world.time
src.visible_message("<span class='warning'>\The [src] takes a step backwards and rears up.</span>",
"<span class='notice'>You take a step backwards and then...</span>")
if(do_after(src,5))
playsound(loc, 'sound/species/shadow/grue_screech.ogg', 100, 1)
src.visible_message("<span class='danger'>\The [src] charges!</span>")
trampling()
/mob/living/carbon/human/proc/trampling()
var/brokesomething = 0//true if we break anything
var/done = 0//Set true if we fail to break something. We won't try to break anything for the rest of the proc
var/turf/target = get_step(src, dir)
for(var/obj/obstacle in get_turf(src))
if((obstacle.flags & ON_BORDER) && (src != obstacle))
if(!obstacle.CheckExit(src, target))
brokesomething++
if (!crash_into(obstacle))
done = 1
if (!done && !target.CanPass(src, target))
crash_into(target)
brokesomething++
if (!target.CanPass(src, target))
done = 1
if (!done)
for (var/atom/A in target)
if (A.density && A != src && A.loc != src)
brokesomething++
if (!crash_into(A))
done = 1
if(istype(A, /mob/living) && !A.density)
brokesomething++
crash_into(A)
if (brokesomething)
playsound(get_turf(target), 'sound/weapons/heavysmash.ogg', 100, 1)
attack_log += "\[[time_stamp()]\]<font color='red'>crashed into [brokesomething] objects at ([target.x];[target.y];[target.z]) </font>"
msg_admin_attack("[key_name(src)] crashed into [brokesomething] objects at (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>)" )
if (!done && target.Enter(src, null))
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
return 0
step(src, dir)
playsound(src,'sound/mecha/mechstep.ogg',25,1)
if (brokesomething)
src.visible_message("<span class='danger'>[src.name] breaks through!</span>")
addtimer(CALLBACK(src, .proc/trampling), 1)
else
target = get_step(src, dir)
do_attack_animation(target)
/mob/living/carbon/human/proc/crash_into(var/atom/A)
var/aname = A.name
var/oldtype = A.type
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
return 0
if (istype(A, /mob/living))
var/mob/living/M = A
attack_log += "\[[time_stamp()]\]<font color='red'> Crashed into [key_name(M)]</font>"
M.attack_log += "\[[time_stamp()]\]<font color='orange'> Was rammed by [key_name(src)]</font>"
msg_admin_attack("[key_name(src)] crashed into [key_name(M)] at (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[M.x];Y=[M.y];Z=[M.z]'>JMP</a>)" )
A.ex_act(2)
sleep(1)
if (A && !(A.gcDestroyed) && A.type == oldtype)
src.visible_message("<span class='danger'>[src.name] plows into \the [aname]!</span>")
return 0
return 1
/mob/living/carbon/human/proc/rebel_yell()
set category = "Abilities"
set name = "Screech"
set desc = "Emit a powerful screech which stuns hearers in a two-tile radius."
if(last_special > world.time)
to_chat(src, "<span class='danger'>You are too tired to screech!.</span>")
return
if(stat || paralysis || stunned || weakened)
to_chat(src, "<span class='danger'>You cannot screech in your current state!.</span>")
return
last_special = world.time
visible_message("<span class='danger'>[src.name] lets out an ear piercing shriek!</span>",
"<span class='danger'>You let out an ear-shattering shriek!</span>",
"<span class='danger'>You hear a painfully loud shriek!</span>")
var/list/victims = list()
for (var/mob/living/carbon/human/T in hearers(2, src))
if (T == src)
continue
if (istype(T) && (T:l_ear || T:r_ear) && istype((T:l_ear || T:r_ear), /obj/item/clothing/ears/earmuffs))
continue
if (!vampire_can_affect_target(T, 0))
continue
to_chat(T, "<span class='danger'>You hear an ear piercing shriek and feel your senses go dull!</span>")
T.Weaken(5)
T.ear_deaf = 20
T.stuttering = 20
T.Stun(5)
victims += T
for (var/obj/structure/window/W in view(2))
W.shatter()
for (var/obj/machinery/light/L in view(4))
L.broken()
playsound(loc, 'sound/voice/shriek1.ogg', 100, 1)
if (victims.len)
admin_attacker_log_many_victims(src, victims, "used rebel yell to stun", "was stunned by [key_name(src)] using rebel yell", "used rebel yell to stun")
/mob/living/carbon/human/proc/formic_spray()
set category = "Abilities"
set name = "Napalm"
set desc = "Spew a cone of ignited napalm in front of you"
if(last_special > world.time)
to_chat(src,"<span class='notice'>You are too tired to spray napalm.</span>")
return
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
to_chat(src,"<span class='notice'>You cannot spray napalm in your current state.</span>")
return
last_special = world.time
playsound(loc, 'sound/species/shadow/grue_screech.ogg', 100, 1)
visible_message("<span class='danger'>\The [src] unleashes a torrent of raging flame!</span>",
"<span class='danger'>You unleash a gust of fire!</span>",
"<span class='danger'>You hear the roar of an inferno!</span>")
var/turf/T = get_step(get_step(src, dir), dir)
var/turf/T1 = get_step(T, dir)
var/turf/T2 = get_step(T1,turn(dir, 90))
var/turf/T3 = get_step(T1,turn(dir, -90))
var/turf/T4 = get_step(T1, dir)
var/turf/T5 = get_step(T2, dir)
var/turf/T6 = get_step(T3, dir)
var/turf/T7 = get_step(T5,turn(dir, 90))
var/turf/T8 = get_step(T6,turn(dir, -90))
var/list/the_targets = list(T,T1,T2,T3,T4,T5,T6,T7,T8)
playsound(src.loc, 'sound/magic/Fireball.ogg', 200, 1)
for(var/turf/FuelSpot in the_targets)
spawn(0)
var/obj/effect/effect/water/firewater/D = new/obj/effect/effect/water/firewater(get_turf(get_step(src, dir)))
var/turf/my_target = FuelSpot
D.create_reagents(200)
if(!src)
return
D.reagents.add_reagent("greekfire", 200)
D.set_color()
D.set_up(my_target, rand(6,8), 1, 50)
return
@@ -78,6 +78,14 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy/mannequin)
/mob/living/carbon/human/type_c
layer = 5
/mob/living/carbon/human/type_big/Initialize(mapload)
. = ..(mapload, "Vaurca Warform")
src.gender = NEUTER
src.mutations.Add(HULK)
/mob/living/carbon/human/type_big
layer = 5
/mob/living/carbon/human/msai_tajara/Initialize(mapload)
h_style = "Tajaran Ears"
. = ..(mapload, "M'sai Tajara")
+1 -1
View File
@@ -125,7 +125,7 @@
return verb
/mob/living/carbon/human/handle_speech_problems(var/message, var/verb)
/mob/living/carbon/human/handle_speech_problems(var/message, var/verb, var/message_mode)
message = handle_speech_muts(message,verb)
for(var/datum/brain_trauma/trauma in get_traumas())
if(!trauma.suppressed)
@@ -4,8 +4,7 @@
name_plural = "Vox"
icobase = 'icons/mob/human_races/r_vox.dmi'
deform = 'icons/mob/human_races/r_def_vox.dmi'
default_language = LANGUAGE_VOX
language = "Ceti Basic"
language = LANGUAGE_VOX
num_alternate_languages = 1
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong)
rarity_value = 4
@@ -28,6 +28,7 @@
var/icon_x_offset = 0
var/icon_y_offset = 0
var/eyes = "eyes_s" // Icon for eyes.
var/eyes_icons = 'icons/mob/human_face/eyes.dmi' // DMI file for eyes, mostly for none 32x32 species.
var/has_floating_eyes // Eyes will overlay over darkness (glow)
var/eyes_icon_blend = ICON_ADD // The icon blending mode to use for eyes.
var/blood_color = "#A10808" // Red.
@@ -70,11 +71,12 @@
var/radiation_mod = 1 // Radiation modifier
var/flash_mod = 1 // Stun from blindness modifier.
var/fall_mod = 1 // Fall damage modifier, further modified by brute damage modifier
var/vision_flags = DEFAULT_SIGHT // Same flags as glasses.
var/vision_flags = DEFAULT_SIGHT // Same flags as glasses.
var/inherent_eye_protection // If set, this species has this level of inherent eye protection.
var/eyes_are_impermeable = FALSE // If TRUE, this species' eyes are not damaged by phoron.
var/list/breakcuffs = list() //used in resist.dm to check if they can break hand/leg cuffs
var/list/breakcuffs = list() //used in resist.dm to check if they can break hand/leg cuffs
var/natural_climbing = FALSE //If true, the species always succeeds at climbing.
var/climb_coeff = 1.25 //The coefficient to the climbing speed of the individual = 60 SECONDS * climb_coeff
// Death vars.
var/meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/human
var/gibber_type = /obj/effect/gibspawner/human
@@ -115,3 +115,36 @@
step_away(target,user,15)
sleep(1)
target.apply_effect(attack_damage * 0.4, WEAKEN, armour)
/datum/unarmed_attack/claws/cleave
attack_verb = list("cleaved", "plowed", "swiped")
attack_noun = list("massive claws")
damage = 25
sharp = 1
edge = 1
attack_name = "massive claws"
shredding = 1
/datum/unarmed_attack/claws/cleave/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone)
..()
var/hit_mobs = 0
for(var/mob/living/L in orange(1,user))
if(L == user)
continue
if(L == target)
continue
L.apply_damage(rand(5,20), BRUTE, zone, armour)
to_chat(L, "<span class='danger'>\The [user] [pick(attack_verb)] you with its [attack_noun]!</span>")
hit_mobs++
if(hit_mobs)
to_chat(user, "<span class='danger'>You used \the [attack_noun] to attack [hit_mobs] other target\s!</span>")
/datum/unarmed_attack/bite/mandibles
attack_verb = list("mauled","gored","perforated")
attack_noun = list("mandibles")
damage = 35
shredding = 1
sharp = 1
edge = 1
attack_name = "mandibles"
@@ -33,6 +33,7 @@
brute_mod = 1.5
burn_mod = 1.5
fall_mod = 0.5
natural_climbing = 1
spawn_flags = IS_RESTRICTED
@@ -21,7 +21,7 @@
megacorporations have sparked secretive factions to fight their influence, while there is always the risk of someone digging too \
deep into the secrets of the galaxy..."
num_alternate_languages = 2
secondary_langs = list("Sol Common")
secondary_langs = list(LANGUAGE_SOL_COMMON, LANGUAGE_SIIK_TAU)
name_language = null // Use the first-name last-name generator rather than a language scrambler
mob_size = 9
spawn_flags = CAN_JOIN
@@ -33,6 +33,8 @@
sprint_speed_factor = 0.9
sprint_cost_factor = 0.5
climb_coeff = 1
/datum/species/unathi
name = "Unathi"
short_name = "una"
@@ -69,6 +71,7 @@
rarity_value = 3
breakcuffs = list(MALE)
mob_size = 10
climb_coeff = 1.35
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the Uuosa-Eso \
system, which roughly translates to 'burning mother'. A relatively recent addition to the galactic stage, they \
@@ -140,7 +143,7 @@
brute_mod = 1.2
fall_mod = 0.5
num_alternate_languages = 2
secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_YA_SSA)
secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_YA_SSA, LANGUAGE_SIIK_TAU)
name_language = LANGUAGE_SIIK_MAAS
ethanol_resistance = 0.8//Gets drunk a little faster
rarity_value = 2
@@ -208,9 +211,10 @@
forever scarred the species and left them with a deep rooted suspicion of artificial intelligence. As \
such an ancient and venerable species, they often hold patronizing attitudes towards the younger races."
num_alternate_languages = 2
secondary_langs = list(LANGUAGE_SKRELLIAN)
name_language = null
num_alternate_languages = 3
language = LANGUAGE_SKRELLIAN
secondary_langs = list(LANGUAGE_SIIK_TAU)
name_language = LANGUAGE_SKRELLIAN
rarity_value = 3
spawn_flags = CAN_JOIN | IS_WHITELISTED
@@ -250,8 +254,7 @@
economic_modifier = 3
icobase = 'icons/mob/human_races/r_diona.dmi'
deform = 'icons/mob/human_races/r_def_plant.dmi'
language = "Ceti Basic"
default_language = LANGUAGE_ROOTSONG
language = LANGUAGE_ROOTSONG
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
@@ -265,7 +268,7 @@
eyes = "blank_eyes"
show_ssd = "completely quiescent"
num_alternate_languages = 1
name_language = "Rootsong"
name_language = LANGUAGE_ROOTSONG
ethanol_resistance = -1 //Can't get drunk
taste_sensitivity = TASTE_DULL
mob_size = 12 //Worker gestalts are 150kg
@@ -326,6 +329,7 @@
stamina = -1 // Diona sprinting uses energy instead of stamina
sprint_speed_factor = 0.5 //Speed gained is minor
sprint_cost_factor = 0.8
climb_coeff = 1.3
/datum/species/diona/handle_sprint_cost(var/mob/living/carbon/H, var/cost)
var/datum/dionastats/DS = H.get_dionastats()
@@ -657,6 +661,8 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
breath_type = "phoron"
poison_type = "nitrogen" //a species that breathes plasma shouldn't be poisoned by it.
mob_size = 13 //their half an inch thick exoskeleton and impressive height, plus all of their mechanical organs.
natural_climbing = TRUE
climb_coeff = 0.75
blurb = "Type A are the most common type of Vaurca and can be seen as the 'backbone' of Vaurcae societies. Their most prevalent feature is their hardened exoskeleton, varying in colors \
in accordance to their hive. It is approximately half an inch thick among all Type A Vaurca. The carapace provides protection against harsh radiation, solar \
@@ -701,15 +707,15 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
has_organ = list(
"neural socket" = /obj/item/organ/vaurca/neuralsocket,
"lungs" = /obj/item/organ/lungs,
"lungs" = /obj/item/organ/lungs/vaurca,
"filtration bit" = /obj/item/organ/vaurca/filtrationbit,
"right heart" = /obj/item/organ/heart/right,
"left heart" = /obj/item/organ/heart/left,
"phoron reserve tank" = /obj/item/organ/vaurca/preserve,
"liver" = /obj/item/organ/liver,
"kidneys" = /obj/item/organ/kidneys,
"brain" = /obj/item/organ/brain,
"eyes" = /obj/item/organ/eyes
"liver" = /obj/item/organ/liver/vaurca,
"kidneys" = /obj/item/organ/kidneys/vaurca,
"brain" = /obj/item/organ/brain/vaurca,
"eyes" = /obj/item/organ/eyes/vaurca
)
/datum/species/bug/equip_survival_gear(var/mob/living/carbon/human/H)
@@ -723,8 +729,8 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
var/obj/item/clothing/mask/breath/M = new /obj/item/clothing/mask/breath(H)
if(H.equip_to_slot_or_del(M, slot_wear_mask))
M.autodrobe_no_remove = 1
H.gender = NEUTER
/datum/species/bug/handle_post_spawn(var/mob/living/carbon/human/H)
H.gender = NEUTER
H.add_client_color(/datum/client_color/vaurca)
return ..()
@@ -9,13 +9,14 @@
from their fellow Tajara who cite their lackluster test scores, even among Tajara, and their higher \
crime rates."
secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_DELVAHII)
secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_DELVAHII, LANGUAGE_SIIK_TAU)
slowdown = -0.8 //As opposed to -1 for Base tajara
sprint_speed_factor = 0.55 // As opposed to 0.65
stamina = 100 // As opposed to 90
brute_mod = 1.1 // Less Brute Damage
ethanol_resistance = 1 // Default value
climb_coeff = 1.1
cold_level_1 = 160 //RaceDefault 200 Default 260
cold_level_2 = 100 //RaceDefault 140 Default 200
@@ -54,4 +55,4 @@
primitive_form = "M'sai Farwa"
secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_SIGN_TAJARA)
secondary_langs = list(LANGUAGE_SIIK_MAAS, LANGUAGE_SIIK_TAJR, LANGUAGE_SIGN_TAJARA, LANGUAGE_SIIK_TAU)
@@ -47,8 +47,9 @@
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/strong, /datum/unarmed_attack/bite/strong)
rarity_value = 10
slowdown = 2
eyes = "blank_eyes" //makes it so that eye colour is not changed when skin colour is.
brute_mod = 0.2 //note to self: remove is_synthetic checks for brmod and burnmod
eyes = "breeder_eyes" //makes it so that eye colour is not changed when skin colour is.
eyes_icons = 'icons/mob/human_face/eyes48x48.dmi'
brute_mod = 0.1 //note to self: remove is_synthetic checks for brmod and burnmod
burn_mod = 0.8 //2x was a bit too much. we'll see how this goes.
toxins_mod = 1 //they're not used to all our weird human bacteria.
breakcuffs = list(MALE,FEMALE,NEUTER)
@@ -58,9 +59,9 @@
speech_chance = 100
death_sound = 'sound/voice/hiss6.ogg'
damage_overlays = 'icons/mob/human_races/masks/dam_breeder.dmi'
damage_mask = 'icons/mob/human_races/masks/dam_mask_breeder.dmi'
blood_mask = 'icons/mob/human_races/masks/blood_breeder.dmi'
damage_overlays = 'icons/mob/human_races/masks/dam_mask_warform.dmi'
damage_mask = 'icons/mob/human_races/masks/dam_mask_warform.dmi'
blood_mask = 'icons/mob/human_races/masks/dam_mask_warform.dmi'
stamina = 175
sprint_speed_factor = 1
@@ -80,5 +81,79 @@
return
/datum/species/bug/type_c/handle_post_spawn(var/mob/living/carbon/human/H)
..()
H.gender = FEMALE
return ..()
return
/datum/species/bug/type_big
name = "Vaurca Warform"
short_name = "vam"
name_plural = "Type BA"
bodytype = "Vaurca Warform"
primitive_form = "Vaurca Warrior"
icon_template = 'icons/mob/human_races/subspecies/r_vaurcamecha.dmi'
icobase = 'icons/mob/human_races/subspecies/r_vaurcamecha.dmi'
deform = 'icons/mob/human_races/subspecies/r_vaurcamecha.dmi'
default_language = LANGUAGE_GIBBERING
language = LANGUAGE_VAURCA
icon_x_offset = -8
unarmed_types = list(/datum/unarmed_attack/claws/cleave, /datum/unarmed_attack/bite/strong)
rarity_value = 10
slowdown = 0
eyes = "warform_eyes"
eyes_icons = 'icons/mob/human_face/warform_eyes.dmi'
brute_mod = 0.5
burn_mod = 0.1
toxins_mod = 1
total_health = 200
breakcuffs = list(MALE,FEMALE,NEUTER)
mob_size = 30
speech_sounds = list('sound/voice/hiss1.ogg','sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')
speech_chance = 100
death_sound = 'sound/voice/hiss6.ogg'
damage_overlays = 'icons/mob/human_races/masks/dam_breeder.dmi'
damage_mask = 'icons/mob/human_races/masks/dam_mask_breeder.dmi'
blood_mask = 'icons/mob/human_races/masks/blood_breeder.dmi'
stamina = 200
stamina_recovery = 5
sprint_speed_factor = 0.9
sprint_cost_factor = 0.5
heat_level_1 = 1000 //Default 360
heat_level_2 = 4000 //Default 400
heat_level_3 = 16000 //Default 1000
hazard_high_pressure = 55000 //Default 550
warning_high_pressure = 3250 //Default 325
spawn_flags = IS_RESTRICTED
flags = NO_SCAN | NO_SLIP | NO_PAIN | NO_BREATHE
inherent_verbs = list(
/mob/living/carbon/human/proc/rebel_yell,
/mob/living/carbon/human/proc/devour_head,
/mob/living/carbon/human/proc/formic_spray,
/mob/living/carbon/human/proc/trample
)
has_organ = list(
"neural socket" = /obj/item/organ/vaurca/neuralsocket,
"lungs" = /obj/item/organ/lungs/vaurca,
"right heart" = /obj/item/organ/heart/right,
"left heart" = /obj/item/organ/heart/left,
"phoron reservoir" = /obj/item/organ/vaurca/reservoir,
"mechanical liver" = /obj/item/organ/liver/vaurca/robo,
"mechanical kidneys" = /obj/item/organ/kidneys/vaurca/robo,
"brain" = /obj/item/organ/brain/vaurca,
"eyes" = /obj/item/organ/eyes/vaurca,
"filtration bit" = /obj/item/organ/vaurca/filtrationbit
)
/datum/species/bug/type_big/equip_survival_gear(var/mob/living/carbon/human/H)
return
/datum/species/bug/type_big/handle_post_spawn(var/mob/living/carbon/human/H)
H.mutations.Add(HULK)
return ..()
@@ -37,6 +37,8 @@
sprint_speed_factor = 2
sprint_cost_factor = 0.80
stamina_recovery = 5
natural_climbing = 1
climb_coeff = 0.1
virus_immune = 1
@@ -279,7 +279,7 @@ There are several things that need to be remembered:
else
base_icon.Blend(temp, ICON_OVERLAY)
if(!skeleton)
if(!(species.flags & NO_SCAN))
if(husk)
base_icon.ColorTone(husk_color_mod)
else if(hulk)
+2
View File
@@ -250,6 +250,7 @@ default behaviour is:
/mob/living/proc/adjustBruteLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
amount *= brute_mod
bruteloss = min(max(bruteloss + amount, 0),(maxHealth*2))
/mob/living/proc/getOxyLoss()
@@ -279,6 +280,7 @@ default behaviour is:
/mob/living/proc/adjustFireLoss(var/amount)
if(status_flags & GODMODE) return 0 //godmode
amount *= burn_mod
fireloss = min(max(fireloss + amount, 0),(maxHealth*2))
/mob/living/proc/getCloneLoss()
@@ -75,3 +75,6 @@
var/tesla_ignore = 0 // If true, mob is not affected by tesla bolts.
var/stop_sight_update = 0 //If true, it won't reset the mob vision flags
var/burn_mod = 1
var/brute_mod = 1
+2 -2
View File
@@ -98,7 +98,7 @@ proc/get_radio_key_from_channel(var/channel)
/mob/living/proc/is_muzzled()
return 0
/mob/living/proc/handle_speech_problems(var/message, var/verb)
/mob/living/proc/handle_speech_problems(var/message, var/verb, var/message_mode)
var/list/returns[3]
var/speech_problem_flag = 0
if((HULK in mutations) && health >= 25 && length(message))
@@ -205,7 +205,7 @@ proc/get_radio_key_from_channel(var/channel)
if(!(speaking && (speaking.flags & NO_STUTTER)))
message = handle_autohiss(message, speaking)
var/list/handle_s = handle_speech_problems(message, verb)
var/list/handle_s = handle_speech_problems(message, verb, message_mode)
message = handle_s[1]
verb = handle_s[2]
+21 -3
View File
@@ -599,16 +599,34 @@ var/list/ai_verbs_default = list(
if(alert("Would you like to select a hologram based on a crew member or switch to unique avatar?",,"Crew Member","Unique")=="Crew Member")
var/personnel_list[] = list()
var/current_mobs = list()
for(var/mob/living/carbon/human/H in human_mob_list)
current_mobs[H.real_name] = H
for(var/datum/data/record/t in data_core.locked)//Look in data core locked.
personnel_list["[t.fields["name"]]: [t.fields["rank"]]"] = t.fields["image"]//Pull names, rank, and image.
if(current_mobs[t.fields["name"]])
personnel_list["[t.fields["name"]]: [t.fields["rank"]]"] = list("mob" = current_mobs[t.fields["name"]], "image" = t.fields["image"])
if(personnel_list.len)
input = input("Select a crew member:") as null|anything in personnel_list
var/icon/character_icon = personnel_list[input]
var/selection = personnel_list[input]
var/icon/character_icon
if(selection && istype(selection, /list))
var/mob/living/carbon/human/H = selection["mob"]
if (H.near_camera())
character_icon = new('icons/mob/human.dmi', "blank")
character_icon.Insert(getHologramIcon(getFlatIcon(H, SOUTH)), dir = SOUTH)
character_icon.Insert(getHologramIcon(getFlatIcon(H, NORTH)), dir = NORTH)
character_icon.Insert(getHologramIcon(getFlatIcon(H, EAST)), dir = EAST)
character_icon.Insert(getHologramIcon(getFlatIcon(H, WEST)), dir = WEST)
else
character_icon = getHologramIcon(icon(selection["image"]))
if(selection && istype(selection, /icon))
character_icon = getHologramIcon(icon(selection))
if(character_icon)
qdel(holo_icon)//Clear old icon so we're not storing it in memory.
holo_icon = getHologramIcon(icon(character_icon))
qdel(holo_icon) // Clear old icon so we're not storing it in memory.
holo_icon = character_icon
else
alert("No suitable records found. Aborting.")
@@ -34,7 +34,6 @@
if(wrapped)
qdel(wrapped)
wrapped = new/obj/item/broken_device
wrapped.icon_state = brokenstate // Module-specific broken icons! Yay!
@@ -42,6 +41,9 @@
uninstall()
installed = -1
/datum/robot_component/proc/get_damage(var/type)
return Clamp(brute_damage + electronics_damage,0,max_damage)
/datum/robot_component/proc/take_damage(brute, electronics, sharp, edge)
if(installed != 1) return
@@ -212,3 +212,13 @@
custom_emote(m_type,message)
return
/mob/living/silicon/robot/verb/powerwarn()
set category = "Robot Commands"
set name = "Power Warning"
if(!is_component_functioning("power cell") || !cell || !cell.charge)
visible_message("The power warning light on <span class='name'>[src]</span> flashes urgently.",\
"You announce you are operating in low power mode.")
playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0)
else
to_chat(src, "<span class='warning'>You can only use this emote when you're out of charge.</span>")
@@ -10,14 +10,20 @@
var/amount = 0
for(var/V in components)
var/datum/robot_component/C = components[V]
if(C.installed != 0) amount += C.brute_damage
if(C.installed)
amount += Clamp(C.brute_damage,0,C.max_damage)
else if(C.installed == -1)
amount += C.max_damage/2
return amount
/mob/living/silicon/robot/getFireLoss()
var/amount = 0
for(var/V in components)
var/datum/robot_component/C = components[V]
if(C.installed != 0) amount += C.electronics_damage
if(C.installed)
amount += Clamp(C.electronics_damage,0,C.max_damage)
else if(C.installed == -1)
amount += C.max_damage/2
return amount
/mob/living/silicon/robot/adjustBruteLoss(var/amount)
@@ -533,9 +533,7 @@ var/global/list/robot_modules = list(
"Classic" = "secborg",
"Spider" = "spidersec",
"Heavy" = "heavysec"
)
supported_upgrades = list(/obj/item/robot_parts/robot_component/jetpack)
/obj/item/weapon/robot_module/security/general/New()
..()
@@ -675,7 +673,10 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/form_printer(src)
src.modules += new /obj/item/weapon/gripper/paperwork(src)
src.modules += new /obj/item/weapon/hand_labeler(src)
src.emag = new /obj/item/weapon/stamp/denied(src)
src.modules += new /obj/item/weapon/tape_roll(src) //allows it to place flyers
src.modules += new /obj/item/weapon/stamp/denied(src) //why was this even a emagged item before smh
src.emag = new /obj/item/weapon/stamp/chameleon(src)
/obj/item/weapon/robot_module/general/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
..()
+21
View File
@@ -4,6 +4,27 @@
/mob/living/silicon/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
log_say("[key_name(src)] : [message]",ckey=key_name(src))
/mob/living/silicon/robot/handle_speech_problems(var/message, var/verb, var/message_mode)
var/speech_problem_flag = 0
//Handle gibberish when components are damaged
if(message_mode)
//If we have a radio message, just look at the damage of the radio
var/datum/robot_component/C = get_component("radio")
if(C.get_damage())
speech_problem_flag = 1
message=Gibberish(message,C.max_damage/C.get_damage())
else
var/damaged = 100-(Clamp(health,0,maxHealth)/maxHealth)*100
if(damaged > 40)
speech_problem_flag = 1
message = Gibberish(message,damaged-10)
var/list/returns[3]
returns[1] = message
returns[2] = verb
returns[3] = speech_problem_flag
return returns
/mob/living/silicon/robot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
..()
if(message_mode)
+3 -1
View File
@@ -60,12 +60,14 @@
/proc/isvaurca(A)
if(istype(A, /mob/living/carbon/human))
switch(A:get_species())
if ("Vaurca Worker")
if("Vaurca Worker")
return 1
if("Vaurca Warrior")
return 1
if("Vaurca Breeder")
return 1
if("Vaurca Warform")
return 1
if("V'krexi")
return 1
return 0