mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-18 10:33:30 +01:00
Ports TG bamboo and Punji Sticks (#24497)
* adds most things
* STOP BECOMING CRLF
* half the sprites ported
* adds floor turfs, hopefully
* adds bamboo stack recipes and parameter documentation for datum/stack_recipe
* adds the crude syringe and sprite
* Revert "adds the crude syringe and sprite"
This reverts commit d949332055.
* adds crude syringe and sprite
* nevermind, goon license moment
* bamboo walls, false walls, and sprites
* caltrops check for shoe thickmaterial flag
* added spear and fixed filepaths
* smoothing and caltrops are even more broken
* Fixes sprite smoothing and caltrop weirdness
* whitespace
* fixes tile stacking
* Henri review
Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
* royal blue and red carpets no longer smooth
* henri review
* actual henri review, thanks git
* Henri review electric boogaloo
Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
* removes bamboo walls (rip)
* Update code/game/turfs/simulated/floor/fancy_floor.dm
Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
---------
Co-authored-by: cybercapitalism <98280110+cybercapitalism@users.noreply.github.com>
Co-authored-by: Henri215 <77684085+Henri215@users.noreply.github.com>
This commit is contained in:
@@ -1,18 +1,30 @@
|
||||
/datum/component/caltrop
|
||||
///Minimum damage when crossed
|
||||
var/min_damage
|
||||
|
||||
///Maximum damage when crossed
|
||||
var/max_damage
|
||||
|
||||
///Probability of stunning and doing daamge
|
||||
var/probability
|
||||
|
||||
///Duration of weaken when crossed
|
||||
var/weaken_duration
|
||||
|
||||
///Shoebypassing, walking interaction, silence
|
||||
var/flags
|
||||
|
||||
var/cooldown = 0
|
||||
|
||||
/datum/component/caltrop/Initialize(_min_damage = 0, _max_damage = 0, _probability = 100, _flags = NONE)
|
||||
min_damage = _min_damage
|
||||
max_damage = max(_min_damage, _max_damage)
|
||||
probability = _probability
|
||||
flags = _flags
|
||||
/datum/component/caltrop/Initialize(_min_damage = 0, _max_damage = 0, _probability = 100, _weaken_duration = 6 SECONDS, _flags = NONE)
|
||||
src.min_damage = _min_damage
|
||||
src.max_damage = max(_min_damage, _max_damage)
|
||||
src.probability = _probability
|
||||
src.weaken_duration = _weaken_duration
|
||||
src.flags = _flags
|
||||
|
||||
RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED), PROC_REF(Crossed))
|
||||
/datum/component/caltrop/RegisterWithParent()
|
||||
RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, PROC_REF(Crossed))
|
||||
|
||||
/datum/component/caltrop/proc/Crossed(datum/source, atom/movable/AM)
|
||||
var/atom/A = parent
|
||||
@@ -22,41 +34,51 @@
|
||||
if(!prob(probability))
|
||||
return
|
||||
|
||||
if(ishuman(AM))
|
||||
var/mob/living/carbon/human/H = AM
|
||||
if(HAS_TRAIT(H, TRAIT_PIERCEIMMUNE))
|
||||
return
|
||||
if(!ishuman(AM))
|
||||
return
|
||||
|
||||
if((flags & CALTROP_IGNORE_WALKERS) && H.m_intent == MOVE_INTENT_WALK)
|
||||
return
|
||||
var/mob/living/carbon/human/H = AM
|
||||
|
||||
var/picked_def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
|
||||
var/obj/item/organ/external/O = H.get_organ(picked_def_zone)
|
||||
if(!istype(O))
|
||||
return
|
||||
if(O.is_robotic())
|
||||
return
|
||||
if(HAS_TRAIT(H, TRAIT_PIERCEIMMUNE))
|
||||
return
|
||||
|
||||
var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
|
||||
if((flags & CALTROP_IGNORE_WALKERS) && H.m_intent == MOVE_INTENT_WALK)
|
||||
return
|
||||
|
||||
if(!(flags & CALTROP_BYPASS_SHOES) && (H.shoes || feetCover))
|
||||
return
|
||||
var/picked_def_zone = pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
|
||||
var/obj/item/organ/external/O = H.get_organ(picked_def_zone)
|
||||
|
||||
if(H.flying || H.floating || H.buckled)
|
||||
return
|
||||
if(!istype(O))
|
||||
return
|
||||
|
||||
if(IS_HORIZONTAL(H) && HAS_TRAIT(H, TRAIT_CONTORTED_BODY))
|
||||
return TRUE
|
||||
if(O.is_robotic())
|
||||
return
|
||||
|
||||
var/damage = rand(min_damage, max_damage)
|
||||
var/feet_cover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET))
|
||||
var/bypass_shoes = flags & CALTROP_BYPASS_SHOES
|
||||
|
||||
H.apply_damage(damage, BRUTE, picked_def_zone)
|
||||
// doesn't penetrate if feet are covered
|
||||
if(!bypass_shoes && (H.shoes || feet_cover))
|
||||
return
|
||||
|
||||
if(cooldown < world.time - 10) //cooldown to avoid message spam.
|
||||
if(!H.incapacitated(ignore_restraints = TRUE))
|
||||
H.visible_message("<span class='danger'>[H] steps on [A].</span>", "<span class='userdanger'>You step on [A]!</span>")
|
||||
else
|
||||
H.visible_message("<span class='danger'>[H] slides on [A]!</span>", "<span class='userdanger'>You slide on [A]!</span>")
|
||||
// doesn't penetrate shoes if feet are extra covered
|
||||
if(bypass_shoes && (H.shoes && (H.shoes.flags & THICKMATERIAL)))
|
||||
return
|
||||
|
||||
cooldown = world.time
|
||||
H.Weaken(6 SECONDS)
|
||||
if(H.flying || H.floating || H.buckled)
|
||||
return
|
||||
|
||||
if(IS_HORIZONTAL(H) && HAS_TRAIT(H, TRAIT_CONTORTED_BODY))
|
||||
return TRUE
|
||||
|
||||
var/damage = rand(min_damage, max_damage)
|
||||
H.apply_damage(damage, BRUTE, picked_def_zone)
|
||||
|
||||
if(cooldown < world.time - 10) //cooldown to avoid message spam.
|
||||
if(!H.incapacitated(ignore_restraints = TRUE))
|
||||
H.visible_message("<span class='danger'>[H] steps on [A].</span>", "<span class='userdanger'>You step on [A]!</span>")
|
||||
else
|
||||
H.visible_message("<span class='danger'>[H] slides on [A]!</span>", "<span class='userdanger'>You slide on [A]!</span>")
|
||||
|
||||
cooldown = world.time
|
||||
H.Weaken(weaken_duration)
|
||||
|
||||
Reference in New Issue
Block a user