Toolbox and Sprint Tweaks (#1098)

New feature! Toolboxes that are full of tools hit much harder, stun, and make a satisfying thunk. But they'll spill their contents everywhere, it's a one-shot thing

Fixes unathi being able to spam devour, and eat through faceplates

Slightly buffs IPC sprinting as requested by cake
This commit is contained in:
NanakoAC
2016-11-03 23:16:05 +00:00
committed by skull132
parent 406c44c0e3
commit 492d287667
8 changed files with 84 additions and 23 deletions
@@ -459,13 +459,13 @@
max_storage_space += I.get_storage_cost()
//Useful for spilling the contents of containers all over the floor
/obj/item/weapon/storage/proc/spill()
if (istype(loc, /turf))//If its not on the floor this might cause issues
var/turf/T = get_turf(src)
for (var/obj/O in contents)
contents.Remove(O)
O.forceMove(T)
O.tumble(2)
/obj/item/weapon/storage/proc/spill(var/dist = 2, var/turf/T = null)
if (!T || !istype(T, /turf))//If its not on the floor this might cause issues
T = get_turf(src)
for (var/obj/O in contents)
remove_from_storage(O, T)
O.tumble(2)
//Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area).
@@ -14,6 +14,11 @@
max_storage_space = 14 //can hold 7 w_class-2 items or up to 3 w_class-3 items (with 1 w_class-2 item as change).
origin_tech = "combat=1"
attack_verb = list("robusted")
var/stunhit = 0
/obj/item/weapon/storage/toolbox/initialize()
spawn(3)
update_force()
/obj/item/weapon/storage/toolbox/emergency
name = "emergency toolbox"
@@ -80,3 +85,24 @@
new /obj/item/stack/cable_coil(src,30,color)
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/multitool(src)
/obj/item/weapon/storage/toolbox/proc/update_force()
force = initial(force)
for (var/obj/item/I in contents)
force += I.w_class*1.5
/obj/item/weapon/storage/toolbox/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
if (..(W, prevent_warning))
update_force()
/obj/item/weapon/storage/toolbox/attack(mob/living/M as mob, mob/user as mob)
update_force()
..(M, user)
if (contents.len)
spill(3, get_turf(M))
playsound(M, 'sound/items/trayhit2.ogg', 100, 1) //sound playin' again
update_force()
user.visible_message(span("danger", "[user] smashes the [src] into [M], causing it to break open and strew its contents across the area"))
@@ -334,16 +334,15 @@
else
remainder = cost
H.adjustOxyLoss(remainder*0.4)
H.adjustHalLoss(remainder*0.3)
H.adjustOxyLoss(remainder*0.3)
H.adjustHalLoss(remainder*0.25)
H.updatehealth()
H.update_oxy_overlay()
if (H.oxyloss >= exhaust_threshold)
H.Weaken(10)
H.m_intent = "walk"
H.hud_used.move_intent.update_move_icon(H)
H << span("danger", "You're too exhausted to run anymore! You collapse in a heap on the floor.")
H << span("danger", "You're too exhausted to run anymore!")
return 0
H.hud_used.move_intent.update_move_icon(H)
return 1
@@ -16,7 +16,7 @@
stamina = 130 // Humans can sprint for longer than any other species
stamina_recovery = 5
sprint_speed_factor = 0.8
sprint_cost_factor = 0.8
sprint_cost_factor = 0.7
/datum/species/unathi
name = "Unathi"
@@ -35,7 +35,7 @@
stamina = 120 // Unathi have the shortest but fastest sprint of all
sprint_speed_factor = 3
stamina_recovery = 5
sprint_cost_factor = 2
sprint_cost_factor = 1.8
rarity_value = 3
blurb = "A heavily reptillian species, Unathi (or 'Sinta as they call themselves) hail from the \
@@ -102,7 +102,7 @@
stamina = 90 // Tajarans evolved to maintain a steady pace in the snow, sprinting wastes energy
stamina_recovery = 4
sprint_speed_factor = 0.55
sprint_cost_factor = 1.1
sprint_cost_factor = 1
blurb = "The Tajaran race is a species of feline-like bipeds hailing from the planet of Ahdomai in the \
@@ -153,7 +153,7 @@
of the Qerr'Katish, a caste within their society which keeps the empire of the Skrell running smoothly. Skrell are \
herbivores on the whole and tend to be co-operative with the other species of the galaxy, although they rarely reveal \
the secrets of their empire to their allies."
rarity_value = 3
flags = CAN_JOIN | IS_WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | NO_SLIP | HAS_SKIN_COLOR
@@ -166,7 +166,7 @@
ethanol_resistance = 0.5//gets drunk faster
stamina = 90
sprint_speed_factor = 1.2 //Evolved for rapid escapes from predators
sprint_speed_factor = 1.1 //Evolved for rapid escapes from predators
/datum/species/diona
@@ -338,13 +338,13 @@
has_organ = list() //TODO: Positronic brain.
stamina = -1 // Machines use power and generate heat, stamina is not a thing
sprint_speed_factor = 0.8 // About as capable of speed as a human
sprint_speed_factor = 0.85 // About as capable of speed as a human
/datum/species/machine/handle_sprint_cost(var/mob/living/carbon/human/H, var/cost)
if (H.stat == CONSCIOUS)
H.bodytemperature += cost*1.5
H.nutrition -= cost
H.bodytemperature += cost*1.35
H.nutrition -= cost*0.9
if (H.nutrition > 0)
return 1
else
@@ -408,7 +408,7 @@
stamina = 100 // Long period of sprinting, but relatively low speed gain
sprint_speed_factor = 0.5
sprint_cost_factor = 0.3
sprint_cost_factor = 0.27
stamina_recovery = 1//slow recovery
+17 -1
View File
@@ -27,6 +27,8 @@
//This is set true if there are any mobs in this mob's contents. they will be slowly digested.
//just used as a boolean to minimise extra processing
/mob/living/var/mob/living/devouring = null
//If we are currently devouring a mob, a reference to it goes here.
/mob/living/proc/attempt_devour(var/mob/living/victim, var/eat_types, var/mouth_size = null)
@@ -44,6 +46,16 @@
src << "\red You can't eat yourself!"
return 0
if (devouring == victim)
src << span("danger","You're already eating that!.")
return
if (ishuman(src))
var/mob/living/carbon/human/H = src
var/obj/item/blocked = H.check_mouth_coverage()
if(blocked)
user << "<span class='warning'>\The [blocked] is in the way!</span>"
return
//This check is exploit prevention.
//Nymphs have seperate mechanics for gaining biomass from other diona
@@ -106,6 +118,7 @@
//This function will start consuming the victim by taking bites out of them.
//Victim or attacker moving will interrupt it
//A bite will be taken every 4 seconds
devouring = victim
var/bite_delay = 4
var/bite_size = mouth_size * 0.5
var/num_bites_needed = (victim.mob_size*victim.mob_size)/bite_size//total bites needed to eat it from full health
@@ -141,7 +154,7 @@
var/i = 0
for (i=0;i < num_bites_needed;i++)
if(do_mob(src, victim, bite_delay*10))
if(do_mob(src, victim, bite_delay*10) && devouring == victim)
face_atom(victim)
victim.adjustCloneLoss(victim_maxhealth*PEPB)
victim.adjustHalLoss(victim_maxhealth*PEPB*5)//Being eaten hurts!
@@ -153,14 +166,17 @@
src.visible_message("[src] finishes devouring [victim]","You finish devouring [victim]")
handle_devour_mess(src, victim, vessel, 1)
qdel(victim)
devouring = null
break
else
devouring = null
if (victimloc != victim.loc)
src << "<span class='danger'>[victim] moved away, you need to keep it still. Try grabbing, stunning or killing it first.</span>"
else if (ourloc != src.loc)
src << "<span class='danger'>You moved! Devouring cancelled</span>"
else
src << "Devouring Cancelled"//reason unknown, maybe the eater got stunned?
//This can also happen if you start devouring something else
break
+9
View File
@@ -1219,4 +1219,13 @@ var/list/wierd_mobs_inclusive = list( /mob/living/simple_animal/construct,
else
return "its"//Something went wrong
/mob/proc/isHoldingShield()
var/obj/item/test = l_hand
if (istype(test, /obj/item) && test.IsShield())
return 1
test = r_hand
if (istype(test, /obj/item) && test.IsShield())
return 1
return 0
#undef SAFE_PERP
+5 -2
View File
@@ -312,8 +312,11 @@
//source is an object caused electrocuting (airlock, grille, etc)
//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
if (!M) return 0
if (!M)
return 0
if(istype(M.loc,/obj/mecha))
return 0 //feckin mechs are dumb
var/mob/living/carbon/human/H = null
if (ishuman(M))
H = M //20/1/16 Insulation (vaurca)
+8
View File
@@ -0,0 +1,8 @@
author: Nanako
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
changes:
- rscadd: "Toolboxes that are full of stuff now hit much harder, but spill their contents."
- bugfix: "Fixed unathi being able to eat while wearing face-covering helmets, and being able to rapidly spam devour."