mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-18 19:39:42 +01:00
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:
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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."
|
||||
Reference in New Issue
Block a user