[Ready for Review] Unapologetic Vaurca Buffs III: Revenge of the Buffs (#4885)

Implements various changes at the behest of lore-dev BygoneHero, namely:

Vaurca can now wear specially modified softsuits.
Vaurca now have their own special rigsuit a la the breacher: the combat exoskeleton. It comes with various special modules, including a boring laser that allows them to dig below themselves rapidly, a vaurca variant of the combat injector which includes phoron and k'ois paste, and a neural lattice which reduces halloss by sharing it with everyone else wearing a neural lattice.
Vaurca also have received various other currently unavailable event items, including a variant of the tactical mask that filters out nitrogen and allows the Vaurca wearing it to eat, tachyon rifles and carbines which penetrate up to three layers of walls and possess other fringe benefits, the gauss rifle which is a semi-automatic variant of the crossbow with greater power and a 6 rod magazine, the energy zweihander, commando armor and scout armor.
Introduces a general climbing mechanic. Climbing can be initiated by clicking on a wall or an open turf, and it is a percentage chance that is modified by the amount of stable/large items beneath you, and decreased by the amount of unstable/small items. Vaurca are naturally proficient and always succeed at climbing.
Changes Vaurca to see in blue-green vision. Their vision is generally brighter and reddish colors are converted to a blue-green color.
Adds the Sedantis flag, an interhive flag that celebrates the universal longing for Sedantis and is a symbol of the Vaurca diaspora.
This commit is contained in:
LordFowl
2018-07-22 19:17:03 +03:00
committed by Erki
parent b8fd0de694
commit 76372c4b15
84 changed files with 1315 additions and 178 deletions
+43 -1
View File
@@ -218,7 +218,8 @@ var/list/admin_verbs_debug = list(
/client/proc/cmd_ss_panic,
/client/proc/reset_openturf,
/datum/admins/proc/capture_map,
/client/proc/global_ao_regenerate
/client/proc/global_ao_regenerate,
/client/proc/add_client_color
)
var/list/admin_verbs_paranoid_debug = list(
@@ -1160,6 +1161,47 @@ var/list/admin_verbs_cciaa = list(
SSzcopy.hard_reset()
/client/proc/add_client_color(mob/T as mob in mob_list)
set category = "Debug"
set name = "Add Client Color"
set desc = "Adds a client color to a given mob"
if(!check_rights(R_DEV))
return
if(!ishuman(T))
to_chat(usr, "This can only be done to instances of type /mob/living/carbon/human")
return
var/mob/living/carbon/human/C = T
var/rr = input("Enter color value", "Red-Red") as num|null
var/rg = input("Enter color value", "Red-Green") as num|null
var/rb = input("Enter color value", "Red-Blue") as num|null
var/gr = input("Enter color value", "Green-Red") as num|null
var/gg = input("Enter color value", "Green-Green") as num|null
var/gb = input("Enter color value", "Green-Blue") as num|null
var/br = input("Enter color value", "Blue-Red") as num|null
var/bg = input("Enter color value", "Blue-Green") as num|null
var/bb = input("Enter color value", "Blue-Blue") as num|null
var/priority = input("Enter priority value.", "Priority") as num|null
if(!usr)
return
if(!C)
to_chat(usr, "Mob doesn't exist anymore")
return
if(priority)
var/datum/client_color/CC = new /datum/client_color()
CC.client_color = list(rr,rg,rb, gr,gg,gb, br,bg,bb)
CC.priority = priority
C.client_colors |= CC
sortTim(C.client_colors, /proc/cmp_clientcolor_priority)
C.update_client_color()
log_and_message_admins("<span class='notice'>gave [key_name(C)] a new client color.</span>")
feedback_add_details("admin_verb","CR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
#ifdef ENABLE_SUNLIGHT
/client/proc/apply_sunstate()
set category = "Fun"
+6 -2
View File
@@ -47,7 +47,7 @@
/mob/proc/update_client_color()
if(!client)
return
client.color = ""
client.color = null
if(!client_colors.len)
return
var/datum/client_color/CC = client_colors[1]
@@ -68,4 +68,8 @@
/datum/client_color/tritanopia
client_color = list(0.95,0.07,0, 0,0.44,0.52, 0.05,0.49,0.48)
priority = 100
priority = 100
/datum/client_color/vaurca
client_color = list(0.3,0,0, 0,0.5,0, 0.5,0,1.5)
priority = 101
@@ -77,6 +77,7 @@
banners["banner, Jargon"] = /obj/item/weapon/flag/jargon
banners["banner, NanoTrasen"] = /obj/item/weapon/flag/nanotrasen
banners["banner, Eridani Fed"] = /obj/item/weapon/flag/eridani
banners["banner, Sedantis"] = /obj/item/weapon/flag/vaurca
gear_tweaks += new/datum/gear_tweak/path(banners)
/datum/gear/flag
@@ -94,6 +95,7 @@
flags["flag, Jargon"] = /obj/item/weapon/flag/jargon/l
flags["flag, NanoTrasen"] = /obj/item/weapon/flag/nanotrasen/l
flags["flag, Eridani Fed"] = /obj/item/weapon/flag/eridani/l
flags["flag, Sedantis"] = /obj/item/weapon/flag/vaurca/l
gear_tweaks += new/datum/gear_tweak/path(flags)
+6 -6
View File
@@ -335,7 +335,7 @@
body_parts_covered = HANDS
slot_flags = SLOT_GLOVES
attack_verb = list("challenged")
species_restricted = list("exclude","Unathi","Tajara","Vaurca", "Golem","Vaurca Breeder")
species_restricted = list("exclude","Unathi","Tajara","Vaurca", "Golem","Vaurca Breeder","Vaurca Warform")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/gloves.dmi',
"Resomi" = 'icons/mob/species/resomi/gloves.dmi'
@@ -435,7 +435,7 @@
slot_flags = SLOT_HEAD
w_class = 2.0
uv_intensity = 50 //Light emitted by this object or creature has limited interaction with diona
species_restricted = list("exclude","Vaurca Breeder")
species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
var/light_overlay = "helmet_light"
var/light_applied
@@ -543,7 +543,7 @@
"Resomi" = 'icons/mob/species/resomi/masks.dmi',
"Tajara" = 'icons/mob/species/tajaran/mask.dmi',
"Unathi" = 'icons/mob/species/unathi/mask.dmi')
species_restricted = list("exclude","Vaurca Breeder")
species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
var/voicechange = 0
var/list/say_messages
@@ -575,7 +575,7 @@
slowdown = SHOES_SLOWDOWN
force = 0
var/overshoes = 0
species_restricted = list("exclude","Unathi","Tajara","Vox","Vaurca","Vaurca Breeder")
species_restricted = list("exclude","Unathi","Tajara","Vox","Vaurca","Vaurca Breeder","Vaurca Warform")
sprite_sheets = list("Vox" = 'icons/mob/species/vox/shoes.dmi')
var/silent = 0
sprite_sheets = list(
@@ -650,7 +650,7 @@
var/blood_overlay_type = "suit"
siemens_coefficient = 0.9
w_class = 3
species_restricted = list("exclude","Vaurca Breeder")
species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi',
@@ -690,7 +690,7 @@
"Vox" = 'icons/mob/species/vox/uniform.dmi',
"Golem" = 'icons/mob/uniform_fat.dmi',
"Resomi" = 'icons/mob/species/resomi/uniform.dmi')
species_restricted = list("exclude","Vaurca Breeder")
species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
//convenience var for defining the icon state for the overlay used when the clothing is worn.
//Also used by rolling/unrolling.
+2 -1
View File
@@ -28,7 +28,8 @@ BLIND // can't see anything
var/activated_color = null
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi',
"Resomi" = 'icons/mob/species/resomi/eyes.dmi'
"Resomi" = 'icons/mob/species/resomi/eyes.dmi',
"Vaurca Warform" = 'icons/mob/species/warriorform/eyes.dmi'
)
species_restricted = list("exclude","Vaurca Breeder")
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "Because you really needed another excuse to punch your crewmates."
icon_state = "boxing"
item_state = "boxing"
species_restricted = list("exclude","Vaurca Breeder")
species_restricted = list("exclude","Vaurca Breeder","Vaurca Warform")
/obj/item/clothing/gloves/boxing/attackby(obj/item/weapon/W, mob/user)
if(iswirecutter(W) || istype(W, /obj/item/weapon/scalpel))
@@ -213,7 +213,7 @@
force = 5
punch_force = 10
clipped = 1
species_restricted = list("exclude","Golem","Vaurca Breeder")
species_restricted = list("exclude","Golem","Vaurca Breeder","Vaurca Warform")
/obj/item/clothing/gloves/powerfist/Touch(atom/A, mob/living/user, proximity)
if(!proximity)
+2 -2
View File
@@ -234,7 +234,7 @@
item_state = "magboots"
icon_state = "magboots"
species_restricted = list("Vaurca Breeder")
species_restricted = list("Vaurca Breeder","Vaurca Warform")
sprite_sheets = list(
"Vaurca Breeder" = 'icons/mob/species/breeder/shoes.dmi'
)
@@ -281,7 +281,7 @@
//ZZODDAA
/obj/item/clothing/gloves/yellow/typec
icon = 'icons/mob/species/breeder/inventory/items.dmi'
desc = "A set of form-fitting carapace gauntlets. They appear to be fitted with some robust hydralics."
desc = "A set of form-fitting carapace gauntlets. They appear to be fitted with some robust hydraulics."
name = "carapace gauntlets"
w_class = 5.0
icon_state = "forceglove"
@@ -272,6 +272,21 @@
interface_name = "combat chem dispenser"
interface_desc = "Dispenses loaded chemicals directly into the bloodstream."
/obj/item/rig_module/chem_dispenser/vaurca
name = "vaurca combat chemical injector"
desc = "A complex web of tubing and needles suitable for vaurcan hardsuit use."
charges = list(
list("synaptizine", "synaptizine", 0, 30),
list("hyperzine", "hyperzine", 0, 30),
list("oxycodone", "oxycodone", 0, 30),
list("phoron", "phoron", 0, 60),
list("kois", "k'ois paste", 0, 80)
)
interface_name = "vaurca combat chem dispenser"
interface_desc = "Dispenses loaded chemicals directly into the bloodstream."
/obj/item/rig_module/chem_dispenser/injector
@@ -636,6 +651,7 @@
return 1
/obj/item/rig_module/cooling_unit
name = "mounted cooling unit"
toggleable = 1
@@ -660,4 +676,64 @@
H.bodytemperature -= temp_adj
active_power_cost = round((temp_adj/max_cooling)*charge_consumption)
return active_power_cost
return active_power_cost
/obj/item/rig_module/boring
name = "burrowing lasers"
desc = "A set of precise boring lasers designed to carve a hole beneath the user."
icon_state = "actuators"
interface_name = "boring laser"
interface_desc = "Allows you to burrow to the z-level below."
disruptive = 1
use_power_cost = 5
module_cooldown = 25
usable = 1
/obj/item/rig_module/boring/engage()
if (!..())
return 0
playsound(src,'sound/magic/lightningbolt.ogg',60,1)
var/turf/T = get_turf(holder.wearer)
if(istype(T, /turf/simulated))
if(istype(T, /turf/simulated/mineral) || istype(T, /turf/simulated/wall) || istype(T, /turf/simulated/shuttle))
T.ChangeTurf(T.baseturf)
else
T.ChangeTurf(/turf/space)
var/global/list/lattice_users = list()
/obj/item/rig_module/lattice
name = "neural lattice"
desc = "A probing mind collar that synchronizes the subject's pain receptors with all other neural lattices on the local grid."
icon_state = "actuators"
interface_name = "neural lattice"
interface_desc = "Synchronize neural lattice to reduce pain."
disruptive = 0
toggleable = 1
confined_use = 1
/obj/item/rig_module/lattice/activate()
if (!..())
return 0
var/mob/living/carbon/human/H = holder.wearer
H << "<span class='notice'>Neural lattice engaged. Pain receptors altered.</span>"
lattice_users.Add(H)
/obj/item/rig_module/lattice/deactivate()
if (!..())
return 0
var/mob/living/carbon/human/H = holder.wearer
H << "<span class='notice'>Neural lattice disengaged. Pain receptors restored.</span>"
lattice_users.Remove(H)
@@ -51,7 +51,8 @@
resilience = 0.2
can_breach = 1
sprite_sheets = list("Tajara" = 'icons/mob/species/tajaran/suit.dmi',"Unathi" = 'icons/mob/species/unathi/suit.dmi')
species_restricted = list("exclude","Diona","Xenomorph","Vaurca","Golem", "Vox")
species_restricted = list("exclude","Diona","Xenomorph","Golem","Vaurca","Vox")
supporting_limbs = list()
//TODO: move this to modules
@@ -35,3 +35,43 @@
/obj/item/clothing/shoes/magboots/rig/unathi
species_restricted = list("Unathi")
/obj/item/weapon/rig/vaurca
name = "combat exoskeleton control module"
desc = "An ancient piece of equipment from a bygone age, This highly advanced Vaurcan technology rarely sees use outside of a battlefield."
suit_type = "combat exoskeleton"
icon_state = "vaurca_rig"
armor = list(melee = 65, bullet = 65, laser = 100, energy = 100, bomb = 90, bio = 100, rad = 80)
vision_restriction = 0
slowdown = 2
offline_slowdown = 3
chest_type = /obj/item/clothing/suit/space/rig/vaurca
helm_type = /obj/item/clothing/head/helmet/space/rig/vaurca
boot_type = /obj/item/clothing/shoes/magboots/rig/vaurca
air_type = /obj/item/weapon/tank/phoron
allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy)
initial_modules = list(
/obj/item/rig_module/actuators/combat,
/obj/item/rig_module/vision/thermal,
/obj/item/rig_module/device/flash,
/obj/item/rig_module/chem_dispenser/vaurca,
/obj/item/rig_module/boring,
/obj/item/rig_module/lattice
)
/obj/item/clothing/head/helmet/space/rig/vaurca
species_restricted = list("Vaurca")
light_overlay = "helmet_light_dual_green"
light_color = "#3e7c3e"
/obj/item/clothing/suit/space/rig/vaurca
species_restricted = list("Vaurca")
/obj/item/clothing/shoes/magboots/rig/vaurca
species_restricted = list("Vaurca")
@@ -14,7 +14,8 @@
sprite_sheets_refit = list(
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Skrell" = 'icons/mob/species/skrell/helmet.dmi'
"Skrell" = 'icons/mob/species/skrell/helmet.dmi',
"Vaurca" = 'icons/mob/species/vaurca/helmet.dmi'
)
sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi',
@@ -40,7 +41,8 @@
sprite_sheets_refit = list(
"Unathi" = 'icons/mob/species/unathi/suit.dmi',
"Tajara" = 'icons/mob/species/tajaran/suit.dmi',
"Skrell" = 'icons/mob/species/skrell/suit.dmi'
"Skrell" = 'icons/mob/species/skrell/suit.dmi',
"Vaurca" = 'icons/mob/species/vaurca/suit.dmi'
)
sprite_sheets_obj = list(
"Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi',
@@ -9,6 +9,7 @@
invisibility = INVISIBILITY_LIGHTING
simulated = 0
blend_mode = BLEND_MULTIPLY
appearance_flags = NO_CLIENT_COLOR
var/needs_update = FALSE
+12
View File
@@ -513,7 +513,19 @@ var/list/mineral_can_smooth_with = list(
)
mineralChance = 75
/turf/simulated/mineral/attack_hand(var/mob/user)
add_fingerprint(user)
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(ishuman(user))
var/mob/living/carbon/human/H
var/turf/destination = GetAbove(H)
if(destination)
var/turf/start = get_turf(H)
if(start.CanZPass(H, UP))
if(destination.CanZPass(H, UP))
H.climb(UP, src, 20)
/**********************Asteroid**************************/
@@ -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")
@@ -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
@@ -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 \
@@ -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 ..()
@@ -16,6 +16,7 @@
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
@@ -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
+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
+82 -12
View File
@@ -126,11 +126,81 @@
if(Allow_Spacemove())
return TRUE
if(Check_Shoegrip()) //scaling hull with magboots
for(var/turf/simulated/T in RANGE_TURFS(1,src))
if(T.density)
for(var/turf/simulated/T in RANGE_TURFS(1,src))
if(T.density)
if(Check_Shoegrip(FALSE))
return TRUE
/mob/living/carbon/human/proc/climb(var/direction, var/turf/source, var/climb_bonus)
var/turf/destination
if(direction == UP)
destination = GetAbove(source)
else
destination = GetBelow(source)
if(!destination)
return
if(stat || paralysis || stunned || weakened || lying || restrained() || buckled)
return
if(destination.density)
return
visible_message("<span class='notice'>The [src] begins to climb [(direction == UP) ? "upwards" : "downwards"].</span>",
"<span class='notice'>You begin to climb [(direction == UP) ? "upwards" : "downwards"].</span>")
var/climb_chance = 50
var/climb_speed = 45 SECONDS
var/will_succeed = FALSE
var/turf/stack_turf = get_turf(src) //turf upon which obejcts must be stacked upon to gain vantage
var/speed_bonus = 0
if(direction == DOWN)
stack_turf = destination
if(species && !species.natural_climbing)
for(var/obj/O in stack_turf)
if(O.w_class >= 4.0 || O.anchored) //if an object is anchored it's stable footing
climb_chance = min(100, climb_chance + O.w_class) //large items increase your reach
speed_bonus = min(15, speed_bonus + 1)
else
climb_chance = max(0, climb_chance - O.w_class) //small items destabilize your footing
speed_bonus = max(0, speed_bonus - 1)
if(climb_bonus)
climb_chance = min(100, climb_chance + climb_bonus)
else
climb_chance = 100
if(species && species.climb_coeff)
climb_speed = round(max(1, (species.climb_coeff * climb_speed) - speed_bonus), 1)
if(prob(climb_chance))
will_succeed = TRUE
if(do_after(src, climb_speed, extra_checks = CALLBACK(src, .proc/climb_check, will_succeed, climb_chance, climb_speed, direction, destination)))
if(will_succeed)
visible_message("<span class='noticed'>\The [src] climbs [(direction == UP) ? "upwards" : "downwards"].</span>",
"<span class='noticed'>You climb [(direction == UP) ? "upwards" : "downwards"].</span>")
forceMove(destination)
return
else
visible_message("<span class='warning'>\The [src] slips and falls as they climb [(direction == UP) ? "upwards" : "downwards"]!</span>",
"<span class='danger'>You slip and fall as you climb [(direction == UP) ? "upwards" : "downwards"]!</span>")
if(direction == DOWN)
Move(destination)
fall_impact(1, damage_mod = min(1, max(0.2, ((100-climb_chance)/100) - 0.2)))
/mob/living/carbon/human/proc/climb_check(var/success, var/climb_chance, var/speed, var/direction, var/turf/destination) //purely for immersion and variety
if((last_special < world.time) && !success) //if you will succeed you can't fail
last_special = world.time + speed/10
if(prob(100 - climb_chance)) //The worse you are the sooner you'll fail.
visible_message("<span class='warning'>\The [src] slips and falls as they climb [(direction == UP) ? "upwards" : "downwards"]!</span>",
"<span class='danger'>You slip and fall as you climb [(direction == UP) ? "upwards" : "downwards"]!</span>")
if(direction == DOWN)
Move(destination)
fall_impact(1, damage_mod = min(1, max(0.2, ((100-climb_chance)/100) - 0.2)))
return 0
return 1
/mob/living/silicon/robot/can_ztravel(var/direction)
if(incapacitated() || is_dead())
return FALSE
@@ -311,7 +381,7 @@
* @return TRUE if the proc ran completely. FALSE otherwise. Used to determine
* if child procs should continue running or not, really.
*/
/atom/movable/proc/fall_impact(levels_fallen, stopped_early = FALSE)
/atom/movable/proc/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
// No gravity, stop falling into spess!
var/area/area = get_area(src)
if (istype(loc, /turf/space) || (area && !area.has_gravity()))
@@ -322,7 +392,7 @@
return TRUE
// Mobs take damage if they fall!
/mob/living/fall_impact(levels_fallen, stopped_early = FALSE)
/mob/living/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
// No gravity, stop falling into spess!
var/area/area = get_area(src)
if (istype(loc, /turf/space) || (area && !area.has_gravity()))
@@ -332,7 +402,7 @@
"With a loud thud, you land on \the [loc]!", "You hear a thud!")
var/z_velocity = 5*(levels_fallen**2)
var/damage = ((60 + z_velocity) + rand(-20,20))
var/damage = ((60 + z_velocity) + rand(-20,20)) * damage_mod
apply_damage(damage, BRUTE)
// The only piece of duplicate code. I was so close. Soooo close. :ree:
@@ -351,7 +421,7 @@
return TRUE
/mob/living/carbon/human/fall_impact(levels_fallen, stopped_early = FALSE)
/mob/living/carbon/human/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
// No gravity, stop falling into spess!
var/area/area = get_area(src)
if (istype(loc, /turf/space) || (area && !area.has_gravity()))
@@ -374,7 +444,7 @@
"<span class='notice'>You tuck into a roll as you hit \the [loc], minimizing damage!</span>")
var/z_velocity = 5*(levels_fallen**2)
var/damage = (((60 * species.fall_mod) + z_velocity) + rand(-20,20)) * combat_roll
var/damage = (((60 * species.fall_mod) + z_velocity) + rand(-20,20)) * combat_roll * damage_mod
var/limb_damage = rand(0,damage/2)
if(prob(30) && combat_roll >= 1) //landed on their head
@@ -463,25 +533,25 @@
/mob/living/carbon/human/bst/fall_impact()
return FALSE
/obj/mecha/fall_impact(levels_fallen, stopped_early = FALSE)
/obj/mecha/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
. = ..()
if (!.)
return
var/z_velocity = 5*(levels_fallen**2)
var/damage = ((60 + z_velocity) + rand(-20,20))
var/damage = ((60 + z_velocity) + rand(-20,20)) * damage_mod
take_damage(damage)
playsound(loc, "sound/effects/bang.ogg", 100, 1)
playsound(loc, "sound/effects/bamf.ogg", 100, 1)
/obj/vehicle/fall_impact(levels_fallen, stopped_early = FALSE)
/obj/vehicle/fall_impact(levels_fallen, stopped_early = FALSE, var/damage_mod = 1)
. = ..()
if (!.)
return
var/z_velocity = 5*(levels_fallen**2)
var/damage = ((60 + z_velocity) + rand(-20,20))
var/damage = ((60 + z_velocity) + rand(-20,20)) * damage_mod
health -= (damage * brute_dam_coeff)
playsound(loc, "sound/effects/clang.ogg", 75, 1)
+12
View File
@@ -206,6 +206,18 @@
return
return
/turf/simulated/open/attack_hand(var/mob/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
var/turf/climbing_wall = GetBelow(H)
var/climb_bonus = 0
if(istype(climbing_wall, /turf/simulated/mineral))
climb_bonus = 20
else
climb_bonus = 0
H.climb(DOWN, src, climb_bonus)
//Most things use is_plating to test if there is a cover tile on top (like regular floors)
/turf/simulated/open/is_plating()
return TRUE
+1 -1
View File
@@ -63,7 +63,7 @@
var/icon/eyes_icon = SSicon_cache.human_eye_cache[cache_key]
if (!eyes_icon)
eyes_icon = new/icon('icons/mob/human_face/eyes.dmi', species.eyes)
eyes_icon = new/icon(species.eyes_icons, species.eyes)
if(eyecolor)
eyes_icon.Blend(eyecolor, species.eyes_icon_blend)
else
+43 -14
View File
@@ -1,21 +1,59 @@
/obj/item/organ/heart/left
name = "heart"
icon_state = "heart-on"
icon_state = "vaurca_heart_l-on"
organ_tag = "left heart"
parent_organ = "chest"
dead_icon = "heart-off"
dead_icon = "vaurca_heart_l-off"
/obj/item/organ/heart/right
name = "heart"
icon_state = "heart-on"
icon_state = "vaurca_heart_r-on"
organ_tag = "right heart"
parent_organ = "chest"
dead_icon = "heart-off"
dead_icon = "vaurca_heart_r-off"
/obj/item/organ/lungs/vaurca
icon_state = "lungs_vaurca"
/obj/item/organ/kidneys/vaurca
icon_state = "kidney_vaurca"
/obj/item/organ/eyes/vaurca
icon_state = "eyes_vaurca"
/obj/item/organ/kidneys/vaurca/robo
icon_state = "kidney_vaurca"
organ_tag = "mechanical kidneys"
robotic = 2
/obj/item/organ/liver/vaurca/robo
icon_state = "liver_vaurca"
organ_tag = "mechanical liver"
robotic = 2
/obj/item/organ/liver/vaurca
icon_state = "liver_vaurca"
/obj/item/organ/brain/vaurca
icon_state = "brain_vaurca"
/obj/item/organ/vaurca/reservoir
name = "phoron reservoir"
organ_tag = "phoron reservoir"
parent_organ = "chest"
icon_state = "phoron_reservoir"
robotic = 1
/obj/item/organ/vaurca/filtrationbit
name = "filtration bit"
organ_tag = "filtration bit"
parent_organ = "head"
icon_state = "filter"
robotic = 2
/obj/item/organ/vaurca/neuralsocket
name = "neural socket"
organ_tag = "neural socket"
icon = 'icons/mob/alien.dmi'
icon_state = "neural_socket"
parent_organ = "head"
robotic = 2
@@ -43,19 +81,10 @@ obj/item/organ/vaurca/neuralsocket/process()
target << "<span class='warning'>Your mind suddenly grows dark as the unity of the Hive is torn from you.</span>"
..()
/obj/item/organ/vaurca/filtrationbit
name = "filtration bit"
organ_tag = "filtration bit"
parent_organ = "head"
icon = 'icons/mob/alien.dmi'
icon_state = "filter"
robotic = 2
/obj/item/organ/vaurca/preserve
name = "phoron reserve tank"
organ_tag = "phoron reserve tank"
parent_organ = "chest"
icon = 'icons/mob/alien.dmi'
icon_state = "breathing_app"
robotic = 1
var/datum/gas_mixture/air_contents = null
+29 -2
View File
@@ -101,7 +101,7 @@
can_switch_modes = 0
turret_sprite_set = "xray"
turret_is_lethal = 1
/obj/item/weapon/gun/energy/rifle/pulse
name = "pulse rifle"
desc = "A weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. Because of its complexity and cost, it is rarely seen in use except by specialists."
@@ -116,7 +116,7 @@
can_switch_modes = 0
turret_sprite_set = "pulse"
turret_is_lethal = 1
modifystate = null
firemodes = list(
@@ -138,3 +138,30 @@
/obj/item/weapon/gun/energy/rifle/pulse/destroyer/attack_self(mob/living/user as mob)
user << "<span class='warning'>[src.name] has three settings, and they are all DESTROY.</span>"
/obj/item/weapon/gun/energy/rifle/laser/tachyon
name = "tachyon rifle"
desc = "A Vaurcan rifle that fires a beam of concentrated faster than light particles, capable of passing through most forms of matter."
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "tachyonrifle"
item_state = "tachyonrifle"
fire_sound = 'sound/weapons/laser3.ogg'
projectile_type = /obj/item/projectile/beam/tachyon
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
secondary_projectile_type = null
secondary_fire_sound = null
can_switch_modes = 0
can_turret = 0
zoomdevicename = "rifle scope"
var/obj/screen/overlay = null
/obj/item/weapon/gun/energy/rifle/laser/tachyon/verb/scope()
set category = "Object"
set name = "Use Rifle Scope"
set popup_menu = 1
if(wielded)
toggle_scope(2.0, usr)
else
usr << "<span class='warning'>You can't look through the scope without stabilizing the rifle!</span>"
+28 -27
View File
@@ -343,8 +343,14 @@
toggle_wield(usr)
/obj/item/weapon/gun/energy/vaurca/typec/attack(atom/A, mob/living/user, def_zone)
return ..() //Pistolwhippin'
/obj/item/weapon/gun/energy/vaurca/typec/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
user.setClickCooldown(16)
..()
/obj/item/weapon/gun/energy/vaurca/typec/pre_attack(var/mob/living/target, var/mob/living/user)
if(istype(target))
cleave(user, target)
..()
/obj/item/weapon/gun/energy/vaurca/typec/special_check(var/mob/user)
if(is_charging)
@@ -371,14 +377,13 @@
/obj/item/weapon/gun/energy/vaurca/typec/attack_hand(mob/user as mob)
if(loc != user)
var/mob/living/carbon/human/H = user
if(istype(H))
if(H.species.name == "Vaurca Breeder")
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
anchored = 1
user << "<span class='notice'>\The [src] is now energised.</span>"
icon_state = "megaglaive1"
..()
return
if(H.mob_size >= 30)
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
anchored = 1
user << "<span class='notice'>\The [src] is now energised.</span>"
icon_state = "megaglaive1"
..()
return
user << "<span class='warning'>\The [src] is far too large for you to pick up.</span>"
return
@@ -503,23 +508,19 @@
return ..()
/*/obj/item/weapon/gun/energy/vaurca/flamer
name = "Vaurcae Incinerator"
desc = "A devious flamethrower device that procedurally converts atmosphere to fuel for a virtually unlimited tank."
icon_state = "incinerator"
item_state = "incinerator"
fire_sound = 'sound/effects/extinguish.ogg'
charge_meter = 0
slot_flags = SLOT_BACK
w_class = 3
force = 10
projectile_type = /obj/item/projectile/energy/flamer
self_recharge = 1
recharge_time = 2
max_shots = 80
firemodes = list(
list(mode_name="spray", burst = 20, burst_delay = -1, fire_delay = 10, dispersion = list(0.5, 0.5, 1.0, 1.0, 1.5, 1.5, 2.0, 2.0, 2.5, 2.5, 3.0, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.0, 6.0)),
)*/
/obj/item/weapon/gun/energy/vaurca/tachyon
name = "tachyon carbine"
desc = "A Vaurcan carbine that fires a beam of concentrated faster than light particles, capable of passing through most forms of matter."
contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "tachyoncarbine"
item_state = "tachyoncarbine"
fire_sound = 'sound/weapons/laser3.ogg'
projectile_type = /obj/item/projectile/beam/tachyon
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
max_shots = 10
fire_delay = 1
can_turret = 0
/obj/item/weapon/gun/energy/tesla
name = "tesla gun"
@@ -339,3 +339,18 @@
/obj/item/projectile/beam/energy_net/proc/do_net(var/mob/M)
var/obj/item/weapon/energy_net/net = new (get_turf(M))
net.throw_impact(M)
/obj/item/projectile/beam/tachyon
name = "particle beam"
icon_state = "xray"
damage = 25
armor_penetration = 65
penetrating = 1
maiming = 1
maim_rate = 5
clean_cut = 1
maim_type = DROPLIMB_BURN
muzzle_type = /obj/effect/projectile/muzzle/tachyon
tracer_type = /obj/effect/projectile/tracer/tachyon
impact_type = /obj/effect/projectile/impact/tachyon
@@ -234,7 +234,7 @@
/datum/reagent/fuel
name = "Welding fuel"
id = "fuel"
description = "Required for welders. Flamable."
description = "Required for welders. Flammable."
reagent_state = LIQUID
color = "#660000"
touch_met = 5
@@ -256,3 +256,27 @@
if(istype(L))
L.adjust_fire_stacks(amount / 10) // Splashing people with welding fuel to make them easy to ignite!
/datum/reagent/fuel/napalm
name = "Zo'rane Fire"
id = "greekfire"
description = "A highly flammable and cohesive gel once used commonly in the tunnels of Sedantis. Napalm sticks to kids."
reagent_state = LIQUID
color = "#D35908"
touch_met = 50
taste_description = "fiery death"
/datum/reagent/fuel/napalm/touch_turf(var/turf/T)
new /obj/effect/decal/cleanable/liquid_fuel/napalm(T, volume/3)
for(var/mob/living/L in T)
L.adjust_fire_stacks(volume / 10)
L.add_modifier(/datum/modifier/napalm, MODIFIER_CUSTOM, _strength = 2)
remove_self(volume)
return
/datum/reagent/fuel/touch_mob(var/mob/living/L, var/amount)
if(istype(L))
L.adjust_fire_stacks(amount / 10) // Splashing people with welding fuel to make them easy to ignite!
new /obj/effect/decal/cleanable/liquid_fuel/napalm(get_turf(L), amount/3)
L.adjustFireLoss(amount / 10)
remove_self(volume)
L.add_modifier(/datum/modifier/napalm, MODIFIER_CUSTOM, _strength = 2)
@@ -123,11 +123,6 @@
conflicting_reagent = /datum/reagent/toxin/phoron
strength = 1
/datum/reagent/toxin/cardox/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
.. ()
if(alien == IS_VAURCA)
affect_blood(M, alien, removed * 0.25)
/datum/reagent/toxin/cardox/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_VAURCA)
M.adjustToxLoss(removed * strength*2)