Weaponized Botany Changes

HEAVILY nerfs spreading plants!
- Spread chance cut down by 66%
- In general, plants will spread slower, meaning they won't outpace a
goat wielding a scythe and plant-killer grenades.
- Spread distance cut down by AT LEAST 66%
- TRAIT_SPREAD 1 plants (glowshrooms) will spread to a maximum distance
of (TRAIT_POTENCY * 0.1)
- TRAIT_SPREAD 2 plants (kudzu) will spread to a maximum distance of
(TRAIT_POTENCY * 0.6) if they are vines or biomass growth_type (most
common types)
- TRAIT_SPREAD 2 that have the "worms" or "mold" growth_type will spread
to a maximum distance of (TRAIT_POTENCY * 0.3)

Buffs spreading plants!
- Spreading plants with thorns or stinging will now properly attempt to
affect anyone who walks over them!
- Wearing shoes gives you a 50% chance to avoid being affected by thorns
and stings

Rewrites stinging plant defenses and logic
- Stinging plants now will target a specific limb/body part and check
for the appropriate clothing coverage
- Spreading plant stings will only target legs and feet
- Picking up stinging fruit will only target hands
- Being hit with a stinging fruit will target the hit limb
- THICKMATERIAL clothing from hardsuits and biosuits will protect from
stings that target areas they cover
- Clothes will protect their covered areas from stings
- Protecting the head requires covering the eyes and mouth with either
the helmet or glasses/masks
- If you aren't fully protected in the target area, you get stung.

Fruit with thorns and/or stinging now properly apply their effects when
thrown or used as melee weapons
- Still requires HARM intent to use fruit as a melee weapon instead of
feeding it to the target
- Stinging fruit will check the hit area for protection
- Stinging fruit will crumble into dust if it uses up all its reagents.
- Stringing fruit still has a chance to break on hit even while it has
reagents left.
This commit is contained in:
FalseIncarnate
2015-11-26 01:27:21 -05:00
parent b092cb7d45
commit 7702b5957d
4 changed files with 60 additions and 17 deletions
+13 -5
View File
@@ -311,7 +311,7 @@
var/hit = H.attacked_by(src, user, def_zone)
if(hit && hitsound)
playsound(loc, hitsound, 50, 1, -1)
return hit
//return hit
else
if(attack_verb.len)
user.visible_message("<span class='danger'>[M] has been [pick(attack_verb)] with [src] by [user]!</span>")
@@ -331,15 +331,23 @@
M.take_organ_damage(0, force)
M.updatehealth()
if(seed && seed.get_trait(TRAIT_STINGS))
if(seed && seed.get_trait(TRAIT_CARNIVOROUS))
seed.do_thorns(M, src, def_zone)
if(ishuman(M) && seed && seed.get_trait(TRAIT_STINGS))
if(!reagents || reagents.total_volume <= 0)
return
reagents.remove_any(rand(1,3))
seed.thrown_at(src,M)
seed.do_sting(M, src, def_zone)
reagents.remove_any(rand(1,3)) //use up some of the reagents at random
sleep(-1)
if(!src)
return
if(prob(35))
if(reagents && reagents.total_volume <= 0) //used-up fruit will be destroyed
if(user)
user << "<span class='danger'>\The [src] has dried out and crumbles to dust.</span>"
//user.drop_from_inventory(src)
qdel(src)
else if(prob(35)) //fruit that still has reagents has a chance of breaking each time it stings on hit
if(user)
user << "<span class='danger'>\The [src] has fallen to bits.</span>"
//user.drop_from_inventory(src)
+32 -4
View File
@@ -140,19 +140,47 @@
target.updatehealth()
// Adds reagents to a target.
/datum/seed/proc/do_sting(var/mob/living/carbon/human/target, var/obj/item/fruit)
/datum/seed/proc/do_sting(var/mob/living/carbon/human/target, var/obj/item/fruit, var/target_limb)
if(!get_trait(TRAIT_STINGS))
return
if(!target_limb) //if we weren't given a target_limb, pick a random one to try stinging
target_limb = pick("l_foot","r_foot","l_leg","r_leg","l_hand","r_hand","l_arm", "r_arm","head","chest","groin")
if(chems && chems.len)
var/body_coverage = HEAD|HEADCOVERSMOUTH|HEADCOVERSEYES|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
if(!target.can_inject(target, 0, target_limb)) //if a syringe can't get through, neither can the sting
return
var/protection_needed
switch(target_limb)
if("head")
protection_needed = HEAD | HEADCOVERSMOUTH | HEADCOVERSEYES
if("chest")
protection_needed = UPPER_TORSO
if("groin")
protection_needed = LOWER_TORSO
if("l_arm","r_arm")
protection_needed = ARMS
if("l_hand","r_hand")
protection_needed = HANDS
if("l_leg","r_leg")
protection_needed = LEGS
if("l_foot","r_foot")
protection_needed = FEET
for(var/obj/item/clothing/clothes in target)
if(target.l_hand == clothes|| target.r_hand == clothes)
continue
body_coverage &= ~(clothes.body_parts_covered)
protection_needed &= ~(clothes.body_parts_covered)
if((clothes.slot_flags & SLOT_HEAD) || (clothes.slot_flags & SLOT_MASK))
if(clothes.flags & HEADCOVERSEYES)
protection_needed &= ~(HEADCOVERSEYES)
if(clothes.flags & HEADCOVERSMOUTH)
protection_needed &= ~(HEADCOVERSMOUTH)
if(!protection_needed) //already got the needed protection, save some time and skip the rest of the loop
break
if(!body_coverage)
if(!protection_needed) //properly protected, good job!
return
target << "<span class='danger'>You are stung by \the [fruit]!</span>"
@@ -125,8 +125,13 @@
max_growth-- //Ensure some variation in final sprite, makes the carpet of crap look less wonky.
mature_time = world.time + seed.get_trait(TRAIT_MATURATION) + 15 //prevent vines from maturing until at least a few seconds after they've been created.
spread_chance = seed.get_trait(TRAIT_POTENCY) * 3
spread_distance = ((growth_type>0) ? round(spread_chance*0.6) : round(spread_chance*0.3))
spread_chance = seed.get_trait(TRAIT_POTENCY)
if(growth_type == 0) //These don't spread far at all (glowshroom, glowberries, brown mold)
spread_distance = round(spread_chance*0.1)
else if(growth_type == 2 || growth_type == 3) //Vines and biomass can go further than worms and mold
spread_distance = round(spread_chance*0.6)
else //Worms and mold go a moderate distance
spread_distance = round(spread_chance*0.3)
update_icon()
spawn(1) // Plants will sometimes be spawned in the turf adjacent to the one they need to end up in, for the sake of correct dir/etc being set.
@@ -17,14 +17,16 @@
// Todo, cause damage.
user_unbuckle_mob(user, user)
/obj/effect/plant/proc/trodden_on(var/mob/living/victim)
/obj/effect/plant/Crossed(var/mob/living/victim)
if(!is_mature())
return
var/mob/living/carbon/human/H = victim
if(istype(H) && H.shoes)
return
seed.do_thorns(victim,src)
seed.do_sting(victim,src,pick("r_foot","l_foot","r_leg","l_leg"))
var/target_limb = pick("r_foot","l_foot","r_leg","l_leg")
if(ishuman(victim))
var/mob/living/carbon/human/H = victim
if(H.shoes && prob(50)) //shoes will reduce chances of being stuck/stung by plants, but not always avoid it
return
seed.do_thorns(victim,src,target_limb)
seed.do_sting(victim,src,target_limb)
/obj/effect/plant/proc/entangle(var/mob/living/victim)