diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 651baf38fbb..c551041ac3c 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -68,6 +68,24 @@
if(safety <= 0)
M.Weaken(10)
flick("e_flash", M.flash)
+ //Vaurca damage 15/01/16
+ var/mob/living/carbon/human/H = M
+ if(H.species.flags & IS_BUG)
+ var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
+ if(!E)
+ return
+ usr << "\red Your eyes burn with the intense light of the flash!."
+ E.damage += rand(10, 11)
+ if(E.damage > 12)
+ M.eye_blurry += rand(3,6)
+ if (E.damage >= E.min_broken_damage)
+ M.sdisabilities |= BLIND
+ else if (E.damage >= E.min_bruised_damage)
+ M.eye_blind = 5
+ M.eye_blurry = 5
+ M.disabilities |= NEARSIGHTED
+ spawn(100)
+ M.disabilities &= ~NEARSIGHTED
if(ishuman(M) && ishuman(user) && M.stat!=DEAD)
if(user.mind && user.mind in revs.current_antagonists)
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 4c3c73c485c..37f40c3b9c4 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -53,6 +53,24 @@
flick("e_flash", M.flash)
M.Stun(2)
M.Weaken(10)
+ //Vaurca damage 15/01/16
+ var/mob/living/carbon/human/H = M
+ if(H.species.flags & IS_BUG)
+ var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
+ if(!E)
+ return
+ usr << "\red Your eyes burn with the intense light of the flash!."
+ E.damage += rand(10, 11)
+ if(E.damage > 12)
+ M.eye_blurry += rand(3,6)
+ if (E.damage >= E.min_broken_damage)
+ M.sdisabilities |= BLIND
+ else if (E.damage >= E.min_bruised_damage)
+ M.eye_blind = 5
+ M.eye_blurry = 5
+ M.disabilities |= NEARSIGHTED
+ spawn(100)
+ M.disabilities &= ~NEARSIGHTED
diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm
index 5dcb4df74a1..90b94513ed8 100644
--- a/code/modules/clothing/spacesuits/spacesuits.dm
+++ b/code/modules/clothing/spacesuits/spacesuits.dm
@@ -15,7 +15,7 @@
cold_protection = HEAD
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
- species_restricted = list("exclude","Diona", "Xenomorph")
+ species_restricted = list("exclude","Diona","Xenomorph","Vaurca")
var/obj/machinery/camera/camera
var/list/camera_networks
@@ -61,7 +61,7 @@
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
- species_restricted = list("exclude","Diona", "Xenomorph")
+ species_restricted = list("exclude","Diona","Xenomorph","Vaurca")
var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit.
diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm
index 82ee92232d7..7aa3d9cd425 100644
--- a/code/modules/mob/language/station.dm
+++ b/code/modules/mob/language/station.dm
@@ -66,6 +66,15 @@
flags = WHITELISTED
syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!")
+/datum/language/vaurcese
+ name = "Vaurcese"
+ desc = "Vaurca native language made of clicks and sputters, \"It's a bugs life.\""
+ speech_verb = "clicks"
+ colour = "vaurca"
+ key = "p"
+ flags = WHITELISTED
+ syllables = list("kic","klic","\'tic","kit","lit","xic","vil","xrit","tshh","qix","qlit","zix","\'","!")
+
/datum/language/human
name = "Sol Common"
desc = "A bastardized hybrid of informal English and elements of Mandarin Chinese; the common language of the Sol system."
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index 1728b61008d..146749f3010 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -257,3 +257,40 @@
visible_message("\The [src] quivers slightly, then splits apart with a wet slithering noise.")
qdel(src)
+
+/mob/living/carbon/human/proc/bugbite()
+ set category = "Abilities"
+ set name = "Bite"
+ set desc = "While grabbing someone aggressively, tear into them with your mandibles."
+
+ if(last_special > world.time)
+ return
+
+ if(stat || paralysis || stunned || weakened || lying)
+ src << "\red You cannot do that in your current state."
+ return
+
+ var/obj/item/weapon/grab/G = locate() in src
+ if(!G || !istype(G))
+ src << "\red You are not grabbing anyone."
+ return
+
+ if(G.state < GRAB_AGGRESSIVE)
+ src << "\red You must have an aggressive grab to gut your prey!"
+ return
+
+ last_special = world.time + 50
+
+ visible_message("\The [src] rips viciously at \the [G.affecting]'s flesh with its mandibles!")
+
+ if(istype(G.affecting,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = G.affecting
+ H.apply_damage(30,BRUTE)
+// if(H.stat == 2) //no gibbing humans but i'll let you gib like a mouse or something that's cool
+// H.gib()
+ else
+ var/mob/living/M = G.affecting
+ if(!istype(M)) return //wut
+ M.apply_damage(30,BRUTE)
+ if(M.stat == 2)
+ M.gib()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm
index f4172060f97..5503ccfcec6 100644
--- a/code/modules/mob/living/carbon/human/human_species.dm
+++ b/code/modules/mob/living/carbon/human/human_species.dm
@@ -36,3 +36,6 @@
/mob/living/carbon/human/stok/New(var/new_loc)
..(new_loc, "Stok")
+
+/mob/living/carbon/human/bug/New(var/new_loc)
+ ..(new_loc, "Vaurca")
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index ddd0c9ef8c3..3c47cbf287e 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -258,7 +258,7 @@
proc/handle_mutations_and_radiation()
- if(species.flags & IS_SYNTHETIC) //Robots don't suffer from mutations or radloss.
+ if(species.flags & IS_SYNTHETIC || species.flags & IS_BUG) //Robots/bugs don't suffer from mutations or radloss.
return
if(getFireLoss())
@@ -366,14 +366,14 @@
get_breath_from_environment(var/volume_needed=BREATH_VOLUME)
var/datum/gas_mixture/breath = ..()
-
+
if(breath)
//exposure to extreme pressures can rupture lungs
var/check_pressure = breath.return_pressure()
if(check_pressure < ONE_ATMOSPHERE / 5 || check_pressure > ONE_ATMOSPHERE * 5)
if(!is_lung_ruptured() && prob(5))
rupture_lung()
-
+
return breath
handle_breath(datum/gas_mixture/breath)
@@ -409,6 +409,15 @@
else if(L.is_bruised())
safe_pressure_min *= 1.25
+ if(species.has_organ["breathing apparatus"])
+ var/obj/item/organ/vaurca/breathingapparatus/L = internal_organs_by_name["breathing apparatus"]
+ if(isnull(L))
+ safe_pressure_min = INFINITY //No wannabe-lungs, how are you breathing? FOR VAURCA
+ else if(L.is_broken())
+ safe_pressure_min *= 1.5
+ else if(L.is_bruised())
+ safe_pressure_min *= 1.25
+
var/safe_exhaled_max = 10
var/safe_toxins_max = 0.005
var/SA_para_min = 1
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 979a4fc6034..601041a6e2f 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -228,6 +228,14 @@
for(var/obj/item/organ/I in H.internal_organs)
I.robotize()
+ if(flags & IS_BUG)
+ for (var/obj/item/organ/external/E in H.organs)
+ if ((E.status & ORGAN_CUT_AWAY) || (E.status & ORGAN_DESTROYED))
+ continue
+ E.status |= ORGAN_ADV_ROBOT
+ for(var/obj/item/organ/I in H.internal_organs)
+ I.robotize()
+
/datum/species/proc/hug(var/mob/living/carbon/human/H,var/mob/living/target)
var/t_him = "them"
diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm
index 9ba341ff4a1..bd146e66004 100644
--- a/code/modules/mob/living/carbon/human/species/station/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station.dm
@@ -266,3 +266,47 @@
H.h_style = ""
spawn(100)
if(H) H.update_hair()
+
+/datum/species/bug
+ name = "Vaurca"
+ name_plural = "varucae"
+
+ icobase = 'icons/mob/human_races/r_vaurca.dmi'
+ deform = 'icons/mob/human_races/r_vaurca.dmi'
+ language = "Vaurcese"
+ unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
+ rarity_value = 2
+ slowdown = 1
+ darksight = 5 //USELESS
+ eyes = "blank_eyes"
+ brute_mod = 0.5 //note to self: remove is_synthetic checks for brmod and burnmod
+ burn_mod = 2
+ warning_low_pressure = 50
+ hazard_low_pressure = 0
+
+ cold_level_1 = 50
+ cold_level_2 = -1
+ cold_level_3 = -1
+
+ heat_level_1 = 330 //Default 360
+ heat_level_2 = 380 //Default 400
+ heat_level_3 = 600 //Default 1000
+ flags = CAN_JOIN | IS_WHITELISTED | NO_SLIP | IS_BUG | NO_SCAN
+ blood_color = "#E6E600" // dark yellow
+ flesh_color = "#575757"
+
+ inherent_verbs = list(
+ /mob/living/carbon/human/proc/bugbite //weaker version of gut.
+ )
+
+
+ has_organ = list(
+ "neural socket" = /obj/item/organ/vaurca/neuralsocket,
+ "breathing apparatus" = /obj/item/organ/vaurca/breathingapparatus,
+ "heart" = /obj/item/organ/heart,
+ "second heart" = /obj/item/organ/heart,
+ "liver" = /obj/item/organ/liver,
+ "kidneys" = /obj/item/organ/kidneys,
+ "brain" = /obj/item/organ/brain,
+ "eyes" = /obj/item/organ/eyes,
+)
\ No newline at end of file
diff --git a/code/modules/organs/organ_alien.dm b/code/modules/organs/organ_alien.dm
index 5c1a3e9584c..26d46471377 100644
--- a/code/modules/organs/organ_alien.dm
+++ b/code/modules/organs/organ_alien.dm
@@ -379,3 +379,31 @@
/obj/item/organ/external/head/slime
cannot_break = 1
dislocated = -1
+
+
+//VAURCA ORGANS
+/obj/item/organ/vaurca/neuralsocket
+ name = "neural socket"
+ organ_tag = "neural socket"
+ icon = 'icons/mob/alien.dmi'
+ icon_state = "neural_socket"
+
+/obj/item/organ/vaurca/neuralsocket/removed()
+ return
+
+/obj/item/organ/vaurca/breathingapparatus
+ name = "breathing apparatus"
+ organ_tag = "breathing apparatus"
+ icon = 'icons/mob/alien.dmi'
+ icon_state = "breathing_app"
+
+/obj/item/organ/vaurca/breathingapparatus/removed()
+ return
+
+/obj/item/organ/vaurca/tracheae
+ name = "tracheae"
+ organ_tag = "tracheae"
+ icon = 'icons/mob/alien.dmi'
+ icon_state = "tracheae"
+/obj/item/organ/vaurca/tracheae/removed()
+ return
\ No newline at end of file
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index d3918aa3454..ad5a53b27fa 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -258,7 +258,7 @@
createwound(BURN, min(burn,can_inflict))
//How much burn damage is left to inflict
spillover += max(0, burn - can_inflict)
-
+
//If there are still hurties to dispense
if (spillover)
owner.shock_stage += spillover * config.organ_damage_spillover_multiplier
@@ -275,7 +275,7 @@
//2. If the damage amount dealt exceeds the disintegrate threshold, the organ is completely obliterated.
//3. If the organ has already reached or would be put over it's max damage amount (currently redundant),
// and the brute damage dealt exceeds the tearoff threshold, the organ is torn off.
-
+
//Check edge eligibility
var/edge_eligible = 0
if(edge)
@@ -557,7 +557,7 @@ Note that amputating the affected organ does in fact remove the infection from t
//Updating wounds. Handles wound natural I had some free spachealing, internal bleedings and infections
/obj/item/organ/external/proc/update_wounds()
- if((status & ORGAN_ROBOT)) //Robotic limbs don't heal or get worse.
+ if((status & ORGAN_ROBOT) || (status & ORGAN_ADV_ROBOT)) //Robotic limbs don't heal or get worse.
return
for(var/datum/wound/W in wounds)
@@ -890,6 +890,12 @@ Note that amputating the affected organ does in fact remove the infection from t
if(T)
T.robotize()
+/obj/item/organ/external/proc/robotize_advanced()
+ status |= ORGAN_ADV_ROBOT
+ for (var/obj/item/organ/external/T in children)
+ if (T)
+ T.robotize_advanced()
+
/obj/item/organ/external/proc/mutate()
if(src.status & ORGAN_ROBOT)
return
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index 39a8a142cf0..49c28b605c0 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -165,3 +165,19 @@
icon_state = "appendixinflamed"
name = "inflamed appendix"
..()
+
+//VAURCA ORGANS
+/obj/item/organ/vaurca/neuralsocket
+ name = "neural socket"
+ parent_organ = "head"
+ robotic = 2
+
+
+/obj/item/organ/vaurca/breathingapparatus
+ name = "breathing apparatus"
+ parent_organ = "chest"
+ robotic = 2
+
+
+/obj/item/organ/internal/vaurca/process()
+ return
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 7d51af8e352..274f5aac992 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -313,6 +313,8 @@
//No animations will be performed by this proc.
/proc/electrocute_mob(mob/living/carbon/M as mob, var/power_source, var/obj/source, var/siemens_coeff = 1.0)
if(istype(M.loc,/obj/mecha)) return 0 //feckin mechs are dumb
+ var/mob/living/carbon/human/H = M //20/1/16 Insulation (vaurca)
+ if(H.species.flags & IS_BUG) return 0
var/area/source_area
if(istype(power_source,/area))
source_area = power_source
@@ -343,7 +345,7 @@
if(PN)
PN.trigger_warning(5)
if(istype(M,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
+ //var/mob/living/carbon/human/H = M
if(H.species.siemens_coefficient == 0)
return
if(H.gloves)
diff --git a/code/setup.dm b/code/setup.dm
index f501e736690..e1f2db03457 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -512,12 +512,15 @@
#define ORGAN_GAUZED 2
#define ORGAN_BLEEDING 8
#define ORGAN_BROKEN 32
+#define ORGAN_DESTROYED 64
#define ORGAN_ROBOT 128
#define ORGAN_SPLINTED 256
#define SALVED 512
#define ORGAN_DEAD 1024
#define ORGAN_MUTATED 2048
#define ORGAN_ASSISTED 4096
+#define ORGAN_ADV_ROBOT 4096
+
// Admin permissions. Please don't edit these values without speaking to Errorage first. ~Carn
#define R_BUILDMODE 1
@@ -650,6 +653,7 @@ var/list/be_special_flags = list(
#define CAN_JOIN 16384 // Species is selectable in chargen.
#define IS_RESTRICTED 32768 // Is not a core/normally playable species. (castes, mutantraces)
#define REGENERATES_LIMBS 65536 // Attempts to regenerate unamputated limbs.
+#define IS_BUG 4096 //Everything bug related
// Language flags.
#define WHITELISTED 1 // Language is available if the speaker is whitelisted.
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index d42ac80b7c8..673712a1c1b 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -86,6 +86,7 @@ h1.alert, h2.alert {color: #000000;}
.tajaran {color: #803B56;}
.tajaran_signlang {color: #941C1C;}
.skrell {color: #00CED1;}
+.vaurca {color: #9e9e39;}
.soghun {color: #228B22;}
.solcom {color: #22228B;}
.changeling {color: #800080;}
diff --git a/icons/mob/human_races/r_vaurca.dmi b/icons/mob/human_races/r_vaurca.dmi
new file mode 100644
index 00000000000..0343a618476
Binary files /dev/null and b/icons/mob/human_races/r_vaurca.dmi differ