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