diff --git a/beestation.dme b/beestation.dme index 9c0e244b937c7..e9f050389b49f 100644 --- a/beestation.dme +++ b/beestation.dme @@ -3882,6 +3882,11 @@ #include "monkestation\code\modules\mob\living\simple_animal\friendly\walterverse.dm" #include "monkestation\code\modules\mob\living\simple_animal\hostile\bees.dm" #include "monkestation\code\modules\mob\living\simple_animal\hostile\mining_mobs\elites\pandora_exploration.dm" +#include "monkestation\code\modules\mob\living\simple_animal\hostile\monkedome\bullfrog.dm" +#include "monkestation\code\modules\mob\living\simple_animal\hostile\monkedome\megafly.dm" +#include "monkestation\code\modules\mob\living\simple_animal\hostile\monkedome\monkedome_fauna.dm" +#include "monkestation\code\modules\mob\living\simple_animal\hostile\monkedome\spore.dm" +#include "monkestation\code\modules\mob\living\simple_animal\hostile\monkedome\walker_snake.dm" #include "monkestation\code\modules\neuromods\neuromod_items.dm" #include "monkestation\code\modules\neuromods\surgery.dm" #include "monkestation\code\modules\particles\byond_particles\particle_holder.dm" diff --git a/monkestation/code/modules/mob/living/simple_animal/friendly/monkedome/domeflower.dm b/monkestation/code/modules/mob/living/simple_animal/friendly/monkedome/domeflower.dm new file mode 100644 index 0000000000000..c0f595730cffd --- /dev/null +++ b/monkestation/code/modules/mob/living/simple_animal/friendly/monkedome/domeflower.dm @@ -0,0 +1,13 @@ +/mob/living/simple_animal/friendly_monkedome_fauna/bullfrog + name = "domeflower" + icon = 'monkestation/icons/mob/monkedome/monkedome_monsters.dmi' + icon_state = "domeflower" + icon_living = "domeflower" + icon_dead = "domeflower_dead" + mob_size = MOB_SIZE_SMALL + + health = 5 + maxHealth = 5 + + response_help = "pets" + response_harm = "stomps" diff --git a/monkestation/code/modules/mob/living/simple_animal/friendly/monkedome/friendly_monkedome_fauna.dm b/monkestation/code/modules/mob/living/simple_animal/friendly/monkedome/friendly_monkedome_fauna.dm new file mode 100644 index 0000000000000..4d953feb10190 --- /dev/null +++ b/monkestation/code/modules/mob/living/simple_animal/friendly/monkedome/friendly_monkedome_fauna.dm @@ -0,0 +1,12 @@ +//the base mining mob +/mob/living/simple_animal/friendly_monkedome_fauna + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + faction = list("dome") + minbodytemp = 0 + maxbodytemp = INFINITY + a_intent = INTENT_HELP + see_in_dark = 9 + mob_size = MOB_SIZE_LARGE + discovery_points = 500 + + diff --git a/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/bullfrog.dm b/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/bullfrog.dm new file mode 100644 index 0000000000000..f6cc095733c5b --- /dev/null +++ b/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/bullfrog.dm @@ -0,0 +1,65 @@ +/mob/living/simple_animal/hostile/monkedome_fauna/bullfrog + name = "bullfrog" + icon = 'monkestation/icons/mob/monkedome/monkedome_monsters.dmi' + icon_state = "bullfrog" + icon_living = "bullfrog" + icon_dead = "bullfrog_dead" + + ranged = TRUE + projectiletype = /obj/item/projectile/bullfrog_tongue + + health = 75 + maxHealth = 75 + + melee_damage = 25 + obj_damage = 15 + + faction = list("dome","hostile") + + ranged_message = "launches it's tongue at" + ranged_cooldown_time = 5 SECONDS + + check_friendly_fire = TRUE + + move_to_delay = 0.5 SECONDS + +/mob/living/simple_animal/hostile/monkedome_fauna/faction_check_mob(mob/target, exact_match) + if(istype(target,/mob/living/simple_animal/hostile/monkedome_fauna/megafly)) //Allow them to target megaflies + return FALSE + return ..() + +//Projectile + +/obj/item/projectile/bullfrog_tongue + name = "rock" + icon_state = "bullet" + pass_flags = PASSTABLE + range = 8 + var/tongue + flag = "bullet" + +/obj/item/projectile/bullfrog_tongue/fire(setAngle) + if(firer) + tongue = firer.Beam(src, icon_state = "tentacle", time = INFINITY, maxdistance = INFINITY, beam_sleep_time = 1) + ..() + +/obj/item/projectile/bullfrog_tongue/on_hit(atom/target, blocked) + . = ..() + if(isliving(target)) + var/mob/living/living_target = target + living_target.visible_message("[living_target] is grabbed by [firer]'s tongue!","A tongue grabs you and pulls you towards [firer]!") + if(istype(target,/mob/living/simple_animal/hostile/monkedome_fauna/megafly)) //Tongue instantly kills flies + living_target.throw_at(get_step_towards(firer,living_target), 8, 2, firer, TRUE, TRUE, callback=CALLBACK(src, .proc/hit_fly, firer, living_target)) + return BULLET_ACT_HIT + living_target.throw_at(get_step_towards(firer,living_target), 8, 2, firer, TRUE, TRUE) + living_target.Stun(2 SECONDS) + living_target.Knockdown(3 SECONDS) + return BULLET_ACT_HIT + +/obj/item/projectile/bullfrog_tongue/proc/hit_fly(mob/firer,mob/target_fly) + target_fly.visible_message("[firer] eats [target_fly] in one swift motion!") + qdel(target_fly) + +/obj/item/projectile/bullfrog_tongue/Destroy() + qdel(tongue) + return ..() diff --git a/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/megafly.dm b/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/megafly.dm new file mode 100644 index 0000000000000..6e92584d7a9a0 --- /dev/null +++ b/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/megafly.dm @@ -0,0 +1,23 @@ +/mob/living/simple_animal/hostile/monkedome_fauna/megafly + name = "megafly" + icon = 'monkestation/icons/mob/monkedome/monkedome_monsters.dmi' + icon_state = "megafly" + icon_living = "megafly" + icon_dead = "megafly_dead" + + health = 35 + maxHealth = 35 + + melee_damage = 10 + + faction = list("dome","hostile") + + movement_type = FLYING + + move_to_delay = 0.15 SECONDS + +/mob/living/simple_animal/hostile/monkedome_fauna/megafly/AttackingTarget() + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/carbon_target = target + carbon_target.blood_volume -= rand(7,16) diff --git a/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/monkedome_fauna.dm b/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/monkedome_fauna.dm new file mode 100644 index 0000000000000..961731ab5c969 --- /dev/null +++ b/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/monkedome_fauna.dm @@ -0,0 +1,33 @@ +//the base mining mob +/mob/living/simple_animal/hostile/monkedome_fauna + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + faction = list("dome") + obj_damage = 30 + environment_smash = ENVIRONMENT_SMASH_WALLS + minbodytemp = 0 + maxbodytemp = INFINITY + response_help = "pokes" + response_disarm = "shoves" + response_harm = "strikes" + a_intent = INTENT_HARM + see_in_dark = 9 + mob_size = MOB_SIZE_LARGE + hardattacks = TRUE + discovery_points = 1000 + +/mob/living/simple_animal/hostile/monkedome_fauna/Initialize(mapload) + . = ..() + set_varspeed(move_to_delay/10) + + +/mob/living/simple_animal/hostile/monkedome_fauna/bullet_act(obj/item/projectile/bullet) + if(!stat) + Aggro() + ..() + +/mob/living/simple_animal/hostile/monkedome_fauna/hitby(atom/movable/weapon, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) + if(!stat) + Aggro() + ..() + + diff --git a/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/spore.dm b/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/spore.dm new file mode 100644 index 0000000000000..f1464c3f57593 --- /dev/null +++ b/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/spore.dm @@ -0,0 +1,65 @@ +/mob/living/simple_animal/hostile/monkedome_fauna/spore + name = "spore" + icon = 'monkestation/icons/mob/monkedome/monkedome_monsters.dmi' + icon_state = "spore" + icon_living = "spore" + icon_dead = "spore_dead" + + environment_smash = ENVIRONMENT_SMASH_NONE + + ranged = TRUE + projectiletype = /obj/item/projectile/spore_shot + + health = 10 + maxHealth = 10 + + melee_damage = 0 + obj_damage = 0 + + del_on_death = TRUE + + faction = list("dome","hostile") + + ranged_message = "shoots ooze at" + ranged_cooldown_time = 5 SECONDS + retreat_distance = 4 + minimum_distance = 6 + + check_friendly_fire = TRUE + + move_to_delay = 0.25 SECONDS + +//Projectile + +/obj/item/projectile/spore_shot + name = "rock" + icon_state = "bullet" + pass_flags = PASSTABLE + damage = 2 + flag = "bullet" + var/list/static/possible_reagents = list( + /datum/reagent/toxin/acid, + /datum/reagent/toxin/spore, + /datum/reagent/drug/space_drugs, + /datum/reagent/toxin/mushroom_powder, + /datum/reagent/toxin/bungotoxin, + ) + +/obj/item/projectile/spore_shot/on_hit(atom/target, blocked, pierce_hit) + . = ..() + if(ishuman(target)) + var/mob/living/carbon/human/human_target = target + + var/reagent_amount = rand(15,45) + var/datum/reagents/spore_reagents = new() + spore_reagents.my_atom = src + spore_reagents.add_reagent(pick(possible_reagents), reagent_amount) + + if(human_target.wear_suit && human_target.head && isclothing(human_target.wear_suit) && isclothing(human_target.head)) + var/obj/item/clothing/clothing_suit = human_target.wear_suit + var/obj/item/clothing/clothing_head = human_target.head + if (clothing_suit.clothing_flags & clothing_head.clothing_flags & THICKMATERIAL) + spore_reagents.trans_to(target, reagent_amount, method = TOUCH, transfered_by = src) + return + + spore_reagents.trans_to(target, reagent_amount, method = INJECT, transfered_by = src) diff --git a/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/walker_snake.dm b/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/walker_snake.dm new file mode 100644 index 0000000000000..dfe8f0b7f0919 --- /dev/null +++ b/monkestation/code/modules/mob/living/simple_animal/hostile/monkedome/walker_snake.dm @@ -0,0 +1,35 @@ +/mob/living/simple_animal/hostile/monkedome_fauna/walker_snake + name = "walker snake" + icon = 'monkestation/icons/mob/monkedome/monkedome_monsters.dmi' + icon_state = "walker_snake" + icon_living = "walker_snake" + icon_dead = "walker_snake_dead" + + ranged = TRUE + projectiletype = /obj/item/projectile/walker_snake_rock + + health = 35 + maxHealth = 35 + + melee_damage = 3 + obj_damage = 15 + + faction = list("dome","hostile") + + ranged_message = "hurls a rock at" + ranged_cooldown_time = 5 SECONDS + retreat_distance = 2 + minimum_distance = 3 + + check_friendly_fire = TRUE + + move_to_delay = 0.3 SECONDS + +//Projectile + +/obj/item/projectile/walker_snake_rock + name = "rock" + icon_state = "bullet" + pass_flags = PASSTABLE + damage = 5 + flag = "bullet" diff --git a/monkestation/icons/mob/monkedome/monkedome_monsters.dmi b/monkestation/icons/mob/monkedome/monkedome_monsters.dmi new file mode 100644 index 0000000000000..09215e7a9282f Binary files /dev/null and b/monkestation/icons/mob/monkedome/monkedome_monsters.dmi differ