Merge pull request #750 from Shadowfire117/plantmobs

changes to space vines, additional ranged mob behaviour and three plant mobs
This commit is contained in:
Razgriz
2019-08-12 02:04:03 -07:00
committed by GitHub
6 changed files with 1806 additions and 1771 deletions
File diff suppressed because it is too large Load Diff
@@ -1,215 +1,226 @@
/mob/living/simple_animal/hostile/tomato
name = "tomato"
desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!"
tt_desc = "X Solanum abominable"
icon_state = "tomato"
icon_living = "tomato"
icon_dead = "tomato_dead"
intelligence_level = SA_PLANT
faction = "plants"
maxHealth = 15
health = 15
turns_per_move = 5
response_help = "prods"
response_disarm = "pushes aside"
response_harm = "smacks"
harm_intent_damage = 5
melee_damage_upper = 15
melee_damage_lower = 10
attacktext = list("mauled")
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
//CHOMPEDIT PIRANHA PLANT.
//When I stop being lazy I'll give this its own file -shark
//Yes I'm basing this shit on the tomato, sue me. -shark
//No longer based on tomato because evolved too far -shark
/mob/living/simple_animal/hostile/piranhaplant
name = "Piranha Plant"
desc = "It's a plant, that eats people!"
tt_desc = "Packun Flower"
faction = "plants"
intelligence_level = SA_PLANT
maxHealth = 50
health = 50
meat_type = null
//Mob icon/appearance settings
icon = 'icons/mob/plantmobs32x32.dmi' //Thanks to vorebound mod and Estelle
icon_living = "piranha-plant"
icon_state = "piranha-plant"
icon_dead = "piranha-plant_dead"
icon_gib = "generic_gib" // The iconstate for being gibbed, optional. Defaults to a generic gib animation.
//icon_rest = null // The iconstate for resting, optional
attack_icon = 'icons/effects/effects.dmi' //Just the default, played like the weapon attack anim
attack_icon_state = "slash" //Just the default //gonna have to make teeth chomping version
//Vore stuff
vore_active = 1
vore_capacity = 1
vore_pounce_chance = 10
vore_standing_too = 1
vore_ignores_undigestable = 0
vore_default_mode = DM_DIGEST
vore_digest_chance = 99
vore_absorb_chance = 0
vore_escape_chance = 5
vore_icons = SA_ICON_LIVING
swallowTime = 10 SECONDS //CHOMPED
//Movement Stuff
wander = 0 // Does the mob wander around when idle?
wander_distance = 0 // How far the mob will wander before going home (assuming they are allowed to do that)
returns_home = 1 // Mob knows how to return to wherever it started
turns_per_move = 4 // How many life() cycles to wait between each wander mov?
stop_when_pulled = 0 // When set to 1 this stops the animal from moving when someone is pulling it.
follow_dist = 0 // Distance the mob tries to follow a friend
speed = 4 // Higher speed is slower, negative speed is faster.
//Talk/Emote stuff
speak_chance = 0 // Probability that I talk (this is 'X in 200' chance since even 1/100 is pretty noisy)
reacts = 1 // Reacts to some things being said
speak = list() // Things I might say if I talk
emote_hear = list("chomps","snaps at the air") // Hearable emotes I might perform
emote_see = list() // Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps
say_understood = list() // List of things to say when accepting an order
say_cannot = list() // List of things to say when they cannot comply
say_maybe_target = list() // List of things to say when they spot something barely
say_got_target = list() // List of things to say when they engage a target
reactions = list("chomp" = "!chomps",) // List of "string" = "reaction" and things they hear will be searched for string.
//Hostility war bloodshed, RAWR
hostile = 1 // Do I even attack?
view_range = 2 // Scan for targets in this range.
investigates = 1 // Do I investigate if I saw someone briefly?
cooperative = 1 // Do I ask allies to help me?
assist_distance = 2 // Radius in which I'll ask my comrades for help.
grab_resist = 100 // Chance of me resisting a grab attempt.
taser_kill = 1 // Is the mob weak to tasers
//Melee behaviour
melee_damage_lower = 1 // Lower bound of randomized melee damage
melee_damage_upper = 25 // Upper bound of randomized melee damage
attacktext = list("chomped","bit","hompfed","crunched","cronched") // "You are [attacktext] by the mob!"
friendly = list("nuzzles") // "The mob [friendly] the person."
//attack_sound = null // Sound to play when I attack
environment_smash = 0 // How much environment damage do I do when I hit stuff?
melee_miss_chance = 1 // percent chance to miss a melee attack.
melee_attack_minDelay = 5 // How long between attacks at least
melee_attack_maxDelay = 20 // How long between attacks at most
attack_armor_type = "bio" // What armor does this check?
attack_armor_pen = 50 // How much armor pen this attack has.
attack_sharp = 1 // Is the attack sharp?
attack_edge = 0 // Does the attack have an edge?
//Stuff for people wanting to be a fucking plant. Weirdos
show_stat_health = 1 // Does the percentage health show in the stat panel for the mob
ai_inactive = 0 // Set to 1 to turn off most AI actions
has_hands = 1 // Set to 1 to enable the use of hands and the hands hud
humanoid_hands = 1 // Can a player in this mob use things like guns or AI cards?
//hand_form = "hands" // Used in IsHumanoidToolUser. 'Your X are not fit-'.
//hud_gears // Slots to show on the hud (typically none)
//ui_icons // Icon file path to use for the HUD, otherwise generic icons are used
//r_hand_sprite = "piranha_r" // If they have hands, //TODO make a leaf sprite for this
//l_hand_sprite = "piranha_l" // they could use some icons.
player_msg = "PLANT GO CHOMP" // Message to print to players about 'how' to play this mob on login.
//Ranged variation
/mob/living/simple_animal/hostile/piranhaplant/spitter
//might snatch the code for that uranium ray for this since it should poison
name = "Piranha Spitter"
attack_armor_pen = 0
//Attack ranged settings.
ranged = 1 // Do I attack at range?
shoot_range = 6 // How far away do I start shooting from?
view_range = 5 //More range, more hurt, more... plant?
rapid = 1 // Three-round-burst fire mode
firing_lines = 0 // Avoids shooting allies
projectiletype = /obj/item/projectile/energy/piranhaspit // The projectiles I shoot
projectilesound = 'sound/weapons/thudswoosh.ogg' // The sound I make when I do it
casingtype = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha // What to make the hugely laggy casings pile out of
//Piranha unique projectile
/obj/item/projectile/energy/piranhaspit
name = "piranhaspit"
icon_state = "neurotoxin"
damage = 4 //Reduced damage to 4 from 10, 3 fired projectiles mean might do 12 total if all 3 hit
damage_type = TOX
check_armour = "bio" //yup biohazard protection works here
flash_strength = 0
agony = 10
combustion = FALSE
/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha
name = "Soylent"
desc = "This was spat out by a strange plant that eats people."
icon_state = "soylent_green"
filling_color = "#B8E6B5"
center_of_mass = list("x"=15, "y"=11)
/obj/item/projectile/energy/piranhaspit/on_hit(var/atom/soyled)
soyl(soyled)
..()
/obj/item/projectile/energy/piranhaspit/proc/soyl(var/mob/M)
var/location = get_turf(M)
new /obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha(location)
//VORE FLUFF section and extended gut settings
/mob/living/simple_animal/hostile/piranhaplant/init_vore()
..()
var/obj/belly/B = vore_selected
B.vore_verb = "chomp up"
B.name = "stomach"
B.desc = "You're pulled into the tight stomach of the plant. The walls knead weakly around you, coating you in thick, viscous fluids that cling to your body, that soon starts to tingle and burn..."
B.digest_burn = 0
B.digest_brute = 12
/mob/living/simple_animal/hostile/piranhaplant/pitcher
icon_state = "pitcher"
icon_living = "pitcher"
name = "Pitcher Plant"
desc = "It's a plant! How pretty"
tt_desc = "Brig Flower"
health = 50
maxHealth = 50 //starts with 50
var/antispam = 0
/mob/living/simple_animal/hostile/piranhaplant/pitcher/death()
..()
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
qdel(src)
/mob/living/simple_animal/hostile/piranhaplant/pitcher/Life()
..()
if(!anchored)
anchored=1
if(maxHealth <= 499) //Ok maybe there are limits
maxHealth = health //Limits are merely a suggestion
if(vore_fullness && !antispam)
antispam = 1
spawn(10)
if(maxHealth <= 499)
maxHealth += 1
health += 1
antispam = !antispam
if(size_multiplier!=1*health/100)
size_multiplier=1*health/100
update_icons()
/mob/living/simple_animal/hostile/piranhaplant/pitcher/init_vore()
..()
var/obj/belly/B = vore_selected
B.digest_burn = 0.5
B.digest_brute = 0
B.vore_verb = "slurped up"
B.name = "pitcher"
/mob/living/simple_animal/hostile/tomato
name = "tomato"
desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!"
tt_desc = "X Solanum abominable"
icon_state = "tomato"
icon_living = "tomato"
icon_dead = "tomato_dead"
intelligence_level = SA_PLANT
faction = "plants"
maxHealth = 15
health = 15
turns_per_move = 5
response_help = "prods"
response_disarm = "pushes aside"
response_harm = "smacks"
harm_intent_damage = 5
melee_damage_upper = 15
melee_damage_lower = 10
attacktext = list("mauled")
meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
//CHOMPEDIT PIRANHA PLANT.
//When I stop being lazy I'll give this its own file -shark
//Yes I'm basing this shit on the tomato, sue me. -shark
//No longer based on tomato because evolved too far -shark
/mob/living/simple_animal/hostile/piranhaplant
name = "Piranha Plant"
desc = "It's a plant, that eats people!"
tt_desc = "Packun Flower"
faction = "plants"
intelligence_level = SA_PLANT
maxHealth = 50
health = 50
meat_type = null
//Mob icon/appearance settings
icon = 'icons/mob/plantmobs32x32.dmi' //Thanks to vorebound mod and Estelle
icon_living = "piranha-plant"
icon_state = "piranha-plant"
icon_dead = "piranha-plant_dead"
icon_gib = "generic_gib" // The iconstate for being gibbed, optional. Defaults to a generic gib animation.
//icon_rest = null // The iconstate for resting, optional
attack_icon = 'icons/effects/effects.dmi' //Just the default, played like the weapon attack anim
attack_icon_state = "slash" //Just the default //gonna have to make teeth chomping version
//Vore stuff
vore_active = 1
vore_capacity = 1
vore_pounce_chance = 10
vore_standing_too = 1
vore_ignores_undigestable = 0
vore_default_mode = DM_DIGEST
vore_digest_chance = 99
vore_absorb_chance = 0
vore_escape_chance = 5
vore_icons = SA_ICON_LIVING
swallowTime = 10 SECONDS //CHOMPED
//Movement Stuff
wander = 0 // Does the mob wander around when idle?
wander_distance = 0 // How far the mob will wander before going home (assuming they are allowed to do that)
returns_home = 1 // Mob knows how to return to wherever it started
turns_per_move = 4 // How many life() cycles to wait between each wander mov?
stop_when_pulled = 0 // When set to 1 this stops the animal from moving when someone is pulling it.
follow_dist = 0 // Distance the mob tries to follow a friend
speed = 4 // Higher speed is slower, negative speed is faster.
entangle_immunity = 1 //makes mob immune to entangle effect of vines and also wont get stabbed by vines that has thorns
//Talk/Emote stuff
speak_chance = 0 // Probability that I talk (this is 'X in 200' chance since even 1/100 is pretty noisy)
reacts = 1 // Reacts to some things being said
speak = list() // Things I might say if I talk
emote_hear = list("chomps","snaps at the air") // Hearable emotes I might perform
emote_see = list() // Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps
say_understood = list() // List of things to say when accepting an order
say_cannot = list() // List of things to say when they cannot comply
say_maybe_target = list() // List of things to say when they spot something barely
say_got_target = list() // List of things to say when they engage a target
reactions = list("chomp" = "!chomps",) // List of "string" = "reaction" and things they hear will be searched for string.
//Hostility war bloodshed, RAWR
hostile = 1 // Do I even attack?
view_range = 2 // Scan for targets in this range.
investigates = 1 // Do I investigate if I saw someone briefly?
cooperative = 1 // Do I ask allies to help me?
assist_distance = 2 // Radius in which I'll ask my comrades for help.
grab_resist = 100 // Chance of me resisting a grab attempt.
taser_kill = 1 // Is the mob weak to tasers
//Melee behaviour
melee_damage_lower = 1 // Lower bound of randomized melee damage
melee_damage_upper = 25 // Upper bound of randomized melee damage
attacktext = list("chomped","bit","hompfed","crunched","cronched") // "You are [attacktext] by the mob!"
friendly = list("nuzzles") // "The mob [friendly] the person."
//attack_sound = null // Sound to play when I attack
environment_smash = 0 // How much environment damage do I do when I hit stuff?
melee_miss_chance = 1 // percent chance to miss a melee attack.
melee_attack_minDelay = 5 // How long between attacks at least
melee_attack_maxDelay = 20 // How long between attacks at most
attack_armor_type = "bio" // What armor does this check?
attack_armor_pen = 50 // How much armor pen this attack has.
attack_sharp = 1 // Is the attack sharp?
attack_edge = 0 // Does the attack have an edge?
//Stuff for people wanting to be a fucking plant. Weirdos
show_stat_health = 1 // Does the percentage health show in the stat panel for the mob
ai_inactive = 0 // Set to 1 to turn off most AI actions
has_hands = 1 // Set to 1 to enable the use of hands and the hands hud
humanoid_hands = 1 // Can a player in this mob use things like guns or AI cards?
//hand_form = "hands" // Used in IsHumanoidToolUser. 'Your X are not fit-'.
//hud_gears // Slots to show on the hud (typically none)
//ui_icons // Icon file path to use for the HUD, otherwise generic icons are used
//r_hand_sprite = "piranha_r" // If they have hands, //TODO make a leaf sprite for this
//l_hand_sprite = "piranha_l" // they could use some icons.
player_msg = "PLANT GO CHOMP" // Message to print to players about 'how' to play this mob on login.
//Ranged variation
/mob/living/simple_animal/hostile/piranhaplant/spitter
//might snatch the code for that uranium ray for this since it should poison
name = "Piranha Spitter"
attack_armor_pen = 0
//Attack ranged settings.
ranged = 1 // Do I attack at range?
shoot_range = 6 // How far away do I start shooting from?
view_range = 5 //More range, more hurt, more... plant?
rapid = 1 // Three-round-burst fire mode
firing_lines = 0 // Avoids shooting allies
projectiletype = /obj/item/projectile/energy/piranhaspit // The projectiles I shoot
projectilesound = 'sound/weapons/thudswoosh.ogg' // The sound I make when I do it
ranged_ignore_incapitated = 1 //make it so our spitter doesnt stun lock dorks
ranged_cooldown_time = 90
//mob/living/simple_animal/hostile/piranhaplant/spitter/proc/Shoot()
//TOX/HALLOSS swap code goes here //TODO
//Piranha unique projectile
/obj/item/projectile/energy/piranhaspit
name = "piranha spit"
icon_state = "neurotoxin"
damage = 10
damage_type = HALLOSS
check_armour = "bio" //yup biohazard protection works here
flash_strength = 0
agony = 10
combustion = FALSE
/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha
name = "Soylent"
desc = "This was spat out by a strange plant that eats people."
icon_state = "soylent_green"
filling_color = "#B8E6B5"
center_of_mass = list("x"=15, "y"=11)
/obj/item/projectile/energy/piranhaspit/on_hit(var/atom/soyled)
if(prob(5))
soyl(soyled)
..()
/obj/item/projectile/energy/piranhaspit/proc/soyl(var/mob/M)
var/location = get_turf(M)
new /obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha(location)
//VORE FLUFF section and extended gut settings
/mob/living/simple_animal/hostile/piranhaplant/init_vore()
..()
var/obj/belly/B = vore_selected
B.vore_verb = "chomp up"
B.name = "stomach"
B.desc = "You're pulled into the tight stomach of the plant. The walls knead weakly around you, coating you in thick, viscous fluids that cling to your body, that soon starts to tingle and burn..."
B.digest_burn = 0
B.digest_brute = 12
/mob/living/simple_animal/hostile/piranhaplant/pitcher
icon_state = "pitcher-plant"
icon_living = "pitcher-plant"
icon_dead = "pitcher-plant_dead"
name = "Pitcher Plant"
desc = "It's a plant! How pretty"
tt_desc = "Brig Flower"
health = 500
maxHealth = 500
var/antispam = 0
swallowTime = 3 SECONDS //If you get to close to a pitcher, its your own fault ;p
/mob/living/simple_animal/hostile/piranhaplant/pitcher/death()
..()
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
new /obj/item/weapon/reagent_containers/food/snacks/aesirsalad(location)
qdel(src)
/mob/living/simple_animal/hostile/piranhaplant/pitcher/Life()
..()
if(!anchored)
anchored=1
if(vore_fullness && !antispam)
antispam = 1
spawn(10)
if(bruteloss >= 1)
bruteloss -= 1
antispam = !antispam
if(prob(3))
new /obj/item/weapon/reagent_containers/food/snacks/soylentgreen/piranha(src.loc)
if(size_multiplier!=1*health/100 && health >= 50 && health <= 300)
size_multiplier=1*health/100
update_icons()
/mob/living/simple_animal/hostile/piranhaplant/pitcher/New()
..()
bruteloss = 400
/mob/living/simple_animal/hostile/piranhaplant/pitcher/init_vore()
..()
var/obj/belly/B = vore_selected
B.digest_burn = 0.5
B.digest_brute = 0
B.vore_verb = "slurp up"
B.name = "pitcher"
@@ -121,7 +121,8 @@
var/retreat_distance = null //If our mob runs from players when they're too close, set in tile distance. By default, mobs do not retreat.
var/minimum_distance = 1 //Minimum approach distance, so ranged mobs chase targets down, but still keep their distance set in tiles to the target, set higher to make mobs keep distance
var/move_shoot = 0
var/ranged_ignore_incapitated = 0 //Ranged mobs will by default keep shooting on unconscious targets, if set to 1 the mob will ignore unconscious victims.
//Mob melee settings
var/melee_damage_lower = 2 // Lower bound of randomized melee damage
var/melee_damage_upper = 6 // Upper bound of randomized melee damage
@@ -1270,19 +1271,24 @@
ai_log("AttackTarget() special",3)
if(SpecialAtkTarget()) //Might not succeed/be allowed, do something else.
return 1
//AAAAH!
if(distance <= 1)
ai_log("AttackTarget() melee",3)
PunchTarget()
return 1
//Open fire!
else if(ranged && (distance <= shoot_range) && ranged_cooldown <= world.time)
if(ishuman(target_mob) && ranged_ignore_incapitated)
var/mob/living/carbon/human/TA = target_mob
if(TA.stat == UNCONSCIOUS)
LoseTarget(TA)
return
ai_log("AttackTarget() ranged",3)
ShootTarget(target_mob)
return 1
else
ai_log("AttackTarget() out of range!",3)
stoplag(1) // Unfortunately this is needed to protect from ClosestDistance() sometimes not updating fast enough to prevent an infinite loop.
@@ -1777,5 +1783,5 @@
/mob/living/simple_animal/get_nametag_desc(mob/user)
return "<i>[tt_desc]</i>"