Makes Ants glow, puts a minimum on ant screaming and shoe permeability, and other ant-related things. (#64786)

I found out how emissives work and my first thought was "damn ants should glow that would look sick"
So now they do.

Also, having less than 5u ants in your body will make you not scream, so 0.0001u ants will no longer have that tiny chance of making someone scream for their life.

If an ant pile has a max damage value less than 1, then they won't be able to bite through your shoes. This is the same threshold as the second tier ant icon.

Makes the giant ant a hostile mob with the neutral faction, meaning they will attack anything not in the neutral faction.
This commit is contained in:
Wallem
2022-03-01 17:09:53 -06:00
committed by GitHub
parent 3386067d9b
commit 3bd5a2d8df
11 changed files with 94 additions and 60 deletions
@@ -29,7 +29,9 @@
/turf/open/floor/plastic,
/area/ruin/bughabitat)
"cK" = (
/mob/living/simple_animal/ant,
/mob/living/simple_animal/hostile/ant{
environment_smash = 0
},
/turf/open/floor/grass,
/area/ruin/bughabitat)
"eM" = (
+1 -1
View File
@@ -76,7 +76,7 @@
var/turf/open/open_turf = food.loc
if(!istype(open_turf)) //Are we actually in an open turf?
if(!istype(open_turf) || istype(open_turf, /turf/open/lava)) //Are we actually in a valid open turf?
remove_timer()
return
+10 -1
View File
@@ -1025,6 +1025,15 @@
processing_speed = STATUS_EFFECT_NORMAL_PROCESS
/// Will act as the main timer as well as changing how much damage the ants do.
var/ants_remaining = 0
/// Common phrases people covered in ants scream
var/static/list/ant_debuff_speech = list(
"GET THEM OFF ME!!",
"OH GOD THE ANTS!!",
"MAKE IT END!!",
"THEY'RE EVERYWHERE!!",
"GET THEM OFF!!",
"SOMEBODY HELP ME!!"
)
/datum/status_effect/ants/on_creation(mob/living/new_owner, amount_left)
if(isnum(amount_left) && new_owner.stat < HARD_CRIT)
@@ -1063,7 +1072,7 @@
if(prob(15))
switch(rand(1,2))
if(1)
victim.say(pick("GET THEM OFF ME!!", "OH GOD THE ANTS!!", "MAKE IT END!!", "THEY'RE EVERYWHERE!!", "GET THEM OFF!!", "SOMEBODY HELP ME!!"), forced = /datum/status_effect/ants)
victim.say(pick(ant_debuff_speech), forced = /datum/status_effect/ants)
if(2)
victim.emote("scream")
if(prob(50)) // Most of the damage is done through random chance. When tested yielded an average 100 brute with 200u ants.
@@ -268,8 +268,12 @@
beauty = -150
plane = GAME_PLANE
layer = LOW_OBJ_LAYER
/// The damage the ants will do when you step on them
var/ant_bite_damage = 0.1
/// The amount of ant reagent inside the ant cluster
var/ant_volume
/// Sound the ants make when biting
var/bite_sound = 'sound/weapons/bite.ogg'
/obj/effect/decal/cleanable/ants/Initialize(mapload)
. = ..()
@@ -280,7 +284,11 @@
/obj/effect/decal/cleanable/ants/proc/update_ant_damage(spilled_ants)
ant_volume += spilled_ants
ant_bite_damage = min(10, round((ant_volume * 0.1),0.1)) // 100u ants = 10 max_damage
AddComponent(/datum/component/caltrop, min_damage = 0.1, max_damage = ant_bite_damage, flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN | CALTROP_BYPASS_SHOES), soundfile = 'sound/weapons/bite.ogg')
var/ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN) /// Small amounts of ants won't be able to bite through shoes.
if(ant_bite_damage > 1)
ant_flags = (CALTROP_NOCRAWL | CALTROP_NOSTUN | CALTROP_BYPASS_SHOES)
switch(ant_bite_damage)
if(0 to 1)
icon_state = initial(icon_state)
@@ -290,3 +298,10 @@
icon_state = "[initial(icon_state)]_3"
if(7.1 to 10)
icon_state = "[initial(icon_state)]_4"
AddComponent(/datum/component/caltrop, min_damage = 0.1, max_damage = ant_bite_damage, flags = ant_flags, soundfile = bite_sound)
update_icon(UPDATE_OVERLAYS)
/obj/effect/decal/cleanable/ants/update_overlays()
. = ..()
. += emissive_appearance(icon, "[icon_state]_light", alpha = src.alpha)
+1 -1
View File
@@ -744,7 +744,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
/mob/living/basic/cockroach,
/obj/item/queen_bee,
/obj/structure/spider/spiderling,
/mob/living/simple_animal/ant,
/mob/living/simple_animal/hostile/ant,
/obj/effect/decal/cleanable/ants,
))
@@ -1,50 +0,0 @@
/mob/living/simple_animal/ant
name = "giant ant"
desc = "A writhing mass of ants, glued together to make an adorable pet!"
icon = 'icons/mob/pets.dmi'
icon_state = "ant"
icon_living = "ant"
icon_dead = "ant_dead"
speak = list("BZZZZT!", "CHTCHTCHT!", "Bzzz", "ChtChtCht")
speak_emote = list("buzzes", "chitters")
emote_hear = list("buzzes.", "clacks.")
emote_see = list("shakes its head.", "twitches its antennae.")
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
pass_flags = PASSTABLE
mob_size = MOB_SIZE_SMALL
mob_biotypes = MOB_ORGANIC|MOB_BUG
minbodytemp = 200
maxbodytemp = 400
unsuitable_atmos_damage = 1
butcher_results = list(/obj/item/food/meat/slab = 2, /obj/effect/decal/cleanable/ants = 1) //It's just a bunch of ants glued together into a larger ant
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "gently pushes aside"
response_disarm_simple = "gently push aside"
response_harm_continuous = "kicks"
response_harm_simple = "kick"
gold_core_spawnable = FRIENDLY_SPAWN
can_be_held = FALSE
footstep_type = FOOTSTEP_MOB_CLAW
health = 75
maxHealth = 75
// randomizes hunting intervals, minimum 5 turns
var/time_to_hunt = 5
/mob/living/simple_animal/ant/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
time_to_hunt = rand(5,10)
/mob/living/simple_animal/ant/Life(delta_time = SSMOBS_DT, times_fired) // In this larger state, the ants have become the predators.
. = ..()
turns_since_scan++
if(turns_since_scan > time_to_hunt)
turns_since_scan = 0
var/list/target_types = list(/mob/living/basic/cockroach)
for(var/mob/living/simple_animal/hostile/potential_target in view(2, get_turf(src)))
if(potential_target.type in target_types)
hunt(potential_target)
return
@@ -0,0 +1,48 @@
/mob/living/simple_animal/hostile/ant
name = "giant ant"
desc = "A writhing mass of ants, glued together to make an adorable pet!"
icon = 'icons/mob/pets.dmi'
icon_state = "ant"
icon_living = "ant"
icon_dead = "ant_dead"
speak = list("BZZZZT!", "CHTCHTCHT!", "Bzzz", "ChtChtCht")
speak_emote = list("buzzes", "chitters")
emote_hear = list("buzzes.", "clacks.")
emote_see = list("shakes their head.", "twitches their antennae.")
speak_chance = 1
turns_per_move = 5
see_in_dark = 6
gender = PLURAL // We are Ven-ant
pass_flags = PASSTABLE
mob_size = MOB_SIZE_SMALL
mob_biotypes = MOB_ORGANIC|MOB_BUG
minbodytemp = 200
maxbodytemp = 400
harm_intent_damage = 4
obj_damage = 5
melee_damage_lower = 5
melee_damage_upper = 10 // Higher health than a base carp, so much lower damage.
attack_verb_continuous = "bites"
attack_verb_simple = "bite"
attack_sound = 'sound/weapons/bite.ogg'
attack_vis_effect = ATTACK_EFFECT_BITE
butcher_results = list(/obj/effect/decal/cleanable/ants = 3) //It's just a bunch of ants glued together into a larger ant
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "gently pushes aside"
response_disarm_simple = "gently push aside"
response_harm_continuous = "kicks"
response_harm_simple = "kick"
gold_core_spawnable = FRIENDLY_SPAWN
faction = list("neutral")
can_be_held = FALSE
footstep_type = FOOTSTEP_MOB_CLAW
health = 100
maxHealth = 100
light_range = 1.5 // Bioluminescence!
light_color = "#d43229" // The ants that comprise the giant ant still glow red despite the sludge.
/mob/living/simple_animal/hostile/ant/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT)
AddElement(/datum/element/pet_bonus, "clacks happily!")
@@ -2756,19 +2756,29 @@
var/ant_damage = 0
/// Tells the debuff how many ants we are being covered with.
var/amount_left = 0
/// List of possible common statements to scream when eating ants
var/static/list/ant_screams = list(
"THEY'RE UNDER MY SKIN!!",
"GET THEM OUT OF ME!!",
"HOLY HELL THEY BURN!!",
"MY GOD THEY'RE INSIDE ME!!",
"GET THEM OUT!!"
)
/datum/reagent/ants/on_mob_life(mob/living/carbon/victim, delta_time)
victim.adjustBruteLoss(max(0.1, round((ant_damage * 0.025),0.1))) //Scales with time. Roughly 32 brute with 100u.
ant_damage++
if(ant_damage < 5) // Makes ant food a little more appetizing, since you won't be screaming as much.
return ..()
if(DT_PROB(5, delta_time))
if(DT_PROB(5, delta_time)) //Super rare statement
victim.say("AUGH NO NOT THE ANTS! NOT THE ANTS! AAAAUUGH THEY'RE IN MY EYES! MY EYES! AUUGH!!", forced = /datum/reagent/ants)
else
victim.say(pick("THEY'RE UNDER MY SKIN!!", "GET THEM OUT OF ME!!", "HOLY HELL THEY BURN!!", "MY GOD THEY'RE INSIDE ME!!", "GET THEM OUT!!"), forced = /datum/reagent/ants)
victim.say(pick(ant_screams), forced = /datum/reagent/ants)
if(DT_PROB(15, delta_time))
victim.emote("scream")
if(DT_PROB(2, delta_time)) // Stuns, but purges ants.
victim.vomit(rand(5,10), FALSE, TRUE, 1, TRUE, FALSE, purge_ratio = 1)
ant_damage++
return ..()
/datum/reagent/ants/on_mob_end_metabolize(mob/living/living_anthill)
@@ -922,7 +922,7 @@
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
/datum/chemical_reaction/ant_slurry // We're basically gluing ants together with synthflesh & maint sludge to make a bigger ant.
required_reagents = list(/datum/reagent/ants = 40, /datum/reagent/medicine/c2/synthflesh = 20, /datum/reagent/drug/maint/sludge = 5)
required_reagents = list(/datum/reagent/ants = 50, /datum/reagent/medicine/c2/synthflesh = 20, /datum/reagent/drug/maint/sludge = 5)
required_temp = 480
reaction_flags = REACTION_INSTANT
reaction_tags = REACTION_TAG_EASY | REACTION_TAG_UNIQUE
@@ -930,5 +930,5 @@
/datum/chemical_reaction/ant_slurry/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume)
var/location = get_turf(holder.my_atom)
for(var/i in rand(1, created_volume) to created_volume)
new /mob/living/simple_animal/ant(location)
new /mob/living/simple_animal/hostile/ant(location)
..()
Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 107 KiB

+1 -1
View File
@@ -3266,7 +3266,6 @@
#include "code\modules\mob\living\simple_animal\bot\secbot.dm"
#include "code\modules\mob\living\simple_animal\bot\SuperBeepsky.dm"
#include "code\modules\mob\living\simple_animal\bot\vibebot.dm"
#include "code\modules\mob\living\simple_animal\friendly\ant.dm"
#include "code\modules\mob\living\simple_animal\friendly\butterfly.dm"
#include "code\modules\mob\living\simple_animal\friendly\cat.dm"
#include "code\modules\mob\living\simple_animal\friendly\crab.dm"
@@ -3305,6 +3304,7 @@
#include "code\modules\mob\living\simple_animal\guardian\types\standard.dm"
#include "code\modules\mob\living\simple_animal\guardian\types\support.dm"
#include "code\modules\mob\living\simple_animal\hostile\alien.dm"
#include "code\modules\mob\living\simple_animal\hostile\ant.dm"
#include "code\modules\mob\living\simple_animal\hostile\bear.dm"
#include "code\modules\mob\living\simple_animal\hostile\bees.dm"
#include "code\modules\mob\living\simple_animal\hostile\carp.dm"