mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-29 07:59:01 +01:00
Update, 22JUL2018
Episode VI, The Return of the Maymay.
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]
|
||||
|
||||
|
||||
@@ -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)
|
||||
..()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user