[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
+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