mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 06:29:23 +01:00
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:
@@ -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" = (
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user