From eda2d806f959efbcf56762a307562c4ecac2b1b1 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Sat, 26 Jul 2025 01:55:29 -0400 Subject: [PATCH] Converts clowns, clown goblins, and cluwne goblins to basic mobs (#29807) * Clowns and other honknomaly mobs * Updatepaths --- .../lavaland_biodome_clown_planet.dmm | 2 +- _maps/map_files/stations/emeraldstation.dmm | 2 +- code/game/gamemodes/wizard/artefact.dm | 2 +- code/game/machinery/syndicatebomb.dm | 2 +- code/modules/events/tear_honk.dm | 6 +- .../mob/living/basic/retaliate/clown.dm | 109 ++++++++++++++++++ .../simple_animal/hostile/retaliate/clown.dm | 76 ------------ paradise.dme | 2 +- .../Scripts/29807_honknomaly_mobs.txt | 1 + 9 files changed, 118 insertions(+), 84 deletions(-) create mode 100644 code/modules/mob/living/basic/retaliate/clown.dm delete mode 100644 code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm create mode 100644 tools/UpdatePaths/Scripts/29807_honknomaly_mobs.txt diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm index 80194dd078b..85dc540884a 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_clown_planet.dmm @@ -1114,7 +1114,7 @@ /area/ruin/powered/clownplanet) "Mv" = ( /obj/effect/mapping_helpers/no_lava, -/mob/living/simple_animal/hostile/retaliate/clown, +/mob/living/basic/clown, /turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors/explored) "MR" = ( diff --git a/_maps/map_files/stations/emeraldstation.dmm b/_maps/map_files/stations/emeraldstation.dmm index 60aac20a811..af8f32a1dda 100644 --- a/_maps/map_files/stations/emeraldstation.dmm +++ b/_maps/map_files/stations/emeraldstation.dmm @@ -42224,7 +42224,7 @@ }, /area/station/public/fitness) "itU" = ( -/mob/living/simple_animal/hostile/retaliate/clown/goblin/cluwne, +/mob/living/basic/clown/goblin/cluwne, /turf/simulated/floor/plating/asteroid/ancient/airless, /area/station/engineering/atmos/asteroid) "itV" = ( diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index be0db5bc087..08a58c36692 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -148,7 +148,7 @@ /obj/item/veilrender/honkrender name = "honk render" desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast circus." - spawn_type = /mob/living/simple_animal/hostile/retaliate/clown + spawn_type = /mob/living/basic/clown spawn_amt = 10 activate_descriptor = "depression" rend_desc = "Gently wafting with the sounds of endless laughter." diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 4bba8b00f76..6d16cd38c58 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -418,7 +418,7 @@ qdel(src) /obj/item/bombcore/badmin/summon/clown - summon_path = /mob/living/simple_animal/hostile/retaliate/clown + summon_path = /mob/living/basic/clown amt_summon = 100 /obj/item/bombcore/badmin/summon/clown/defuse() diff --git a/code/modules/events/tear_honk.dm b/code/modules/events/tear_honk.dm index b6d40241220..a38a3274157 100644 --- a/code/modules/events/tear_honk.dm +++ b/code/modules/events/tear_honk.dm @@ -17,8 +17,8 @@ /obj/effect/tear/honk name = "honkmensional tear" desc = "A tear in the dimensional fabric of sanity." - leader = /mob/living/simple_animal/hostile/retaliate/clown/goblin/cluwne + leader = /mob/living/basic/clown/goblin/cluwne possible_mobs = list( - /mob/living/simple_animal/hostile/retaliate/clown, - /mob/living/simple_animal/hostile/retaliate/clown/goblin + /mob/living/basic/clown, + /mob/living/basic/clown/goblin ) diff --git a/code/modules/mob/living/basic/retaliate/clown.dm b/code/modules/mob/living/basic/retaliate/clown.dm new file mode 100644 index 00000000000..8d197fd55c8 --- /dev/null +++ b/code/modules/mob/living/basic/retaliate/clown.dm @@ -0,0 +1,109 @@ +/mob/living/basic/clown + name = "Clown" + desc = "A strange creature that vaguely resembles a normal clown. Upon closer inspection, it is nothing of the sort." + icon = 'icons/mob/simple_human.dmi' + icon_state = "clown" + icon_living = "clown" + icon_dead = "clown_dead" + icon_gib = "clown_gib" + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID + response_help_continuous = "pokes the" + response_help_simple = "poke the" + response_disarm_continuous = "gently pushes aside the" + response_disarm_simple = "gently push aside the" + a_intent = INTENT_HARM + maxHealth = 75 + health = 75 + speed = 0 + harm_intent_damage = 8 + melee_damage_lower = 10 + melee_damage_upper = 10 + melee_attack_cooldown_min = 1.5 SECONDS + melee_attack_cooldown_max = 2.5 SECONDS + attack_verb_simple = "attack" + attack_verb_continuous = "attacks" + attack_sound = 'sound/items/bikehorn.ogg' + obj_damage = 0 + environment_smash = 0 + minimum_survivable_temperature = 270 + maximum_survivable_temperature = 370 + unsuitable_heat_damage = 15 //amount of damage applied if animal's body temperature is higher than maxbodytemp + unsuitable_cold_damage = 10 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp + unsuitable_atmos_damage = 10 + step_type = FOOTSTEP_MOB_SHOE + contains_xeno_organ = TRUE + surgery_container = /datum/xenobiology_surgery_container/clown + ai_controller = /datum/ai_controller/basic_controller/simple/clown + +/mob/living/basic/clown/Initialize(mapload) + . = ..() + AddElement(/datum/element/ai_retaliate) + +/mob/living/basic/clown/goblin + icon = 'icons/mob/animal.dmi' + name = "clown goblin" + desc = "A tiny walking mask and clown shoes. You want to honk his nose!" + icon_state = "clowngoblin" + icon_living = "clowngoblin" + icon_dead = null + mob_biotypes = MOB_ORGANIC + response_help_continuous = "honks the" + response_help_simple = "honk the" + speak_emote = list("squeaks") + maxHealth = 100 + health = 100 + speed = -1 + basic_mob_flags = DEL_ON_DEATH + loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/item/clothing/shoes/clown_shoes) + +/mob/living/basic/clown/goblin/cluwne + name = "cluwne goblin" + desc = "A tiny pile of misery and evil. Kill this thing before it comes for your family." + icon_state = "cluwnegoblin" + icon_living = "cluwnegoblin" + response_help_continuous = "henks the" + response_help_simple = "henk the" + maxHealth = 150 + health = 150 + harm_intent_damage = 15 + melee_damage_lower = 17 + melee_damage_upper = 20 + 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) + minimum_survivable_temperature = 0 + maximum_survivable_temperature = INFINITY + ai_controller = /datum/ai_controller/basic_controller/simple/cluwne_goblin + + loot = list(/obj/item/clothing/mask/false_cluwne_mask, /obj/item/clothing/shoes/clown_shoes/false_cluwne_shoes) // We'd rather not give them ACTUAL cluwne stuff you know? + +/// Fight back if attacked +/datum/ai_controller/basic_controller/simple/clown + ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/random_speech/clown, + ) + +/datum/ai_planning_subtree/random_speech/clown + speech_chance = 2 + speak = list("HONK", "Honk!", "Come join the fun!") + speak_verbs = list("honks") + sound = list('sound/items/bikehorn.ogg') + emote_hear = list("honks.") + emote_see = list("honks.") + +/datum/ai_controller/basic_controller/simple/cluwne_goblin + ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/random_speech/cluwne_goblin, + ) + +/datum/ai_planning_subtree/random_speech/cluwne_goblin + speech_chance = 2 + speak = list("HENK!") + speak_verbs = list("henks") + sound = list('sound/items/bikehorn.ogg') + emote_hear = list("henks.") + emote_see = list("henks.") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm deleted file mode 100644 index a7b271d5439..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ /dev/null @@ -1,76 +0,0 @@ -/mob/living/simple_animal/hostile/retaliate/clown - name = "Clown" - desc = "A strange creature that vaguely resembles a normal clown. Upon closer inspection, it is nothing of the sort." - icon = 'icons/mob/simple_human.dmi' - icon_state = "clown" - icon_living = "clown" - icon_dead = "clown_dead" - icon_gib = "clown_gib" - mob_biotypes = MOB_ORGANIC | MOB_HUMANOID - turns_per_move = 5 - response_help = "pokes the" - response_disarm = "gently pushes aside the" - response_harm = "hits the" - speak = list("HONK", "Honk!", "Come join the fun!") - emote_see = list("honks") - speak_chance = 1 - a_intent = INTENT_HARM - maxHealth = 75 - health = 75 - speed = 0 - harm_intent_damage = 8 - melee_damage_lower = 10 - melee_damage_upper = 10 - attacktext = "attacks" - attack_sound = 'sound/items/bikehorn.ogg' - obj_damage = 0 - environment_smash = 0 - minbodytemp = 270 - maxbodytemp = 370 - heat_damage_per_tick = 15 //amount of damage applied if animal's body temperature is higher than maxbodytemp - cold_damage_per_tick = 10 //same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp - unsuitable_atmos_damage = 10 - footstep_type = FOOTSTEP_MOB_SHOE - contains_xeno_organ = TRUE - surgery_container = /datum/xenobiology_surgery_container/clown - -/mob/living/simple_animal/hostile/retaliate/clown/goblin - icon = 'icons/mob/animal.dmi' - name = "clown goblin" - desc = "A tiny walking mask and clown shoes. You want to honk his nose!" - icon_state = "clowngoblin" - icon_living = "clowngoblin" - icon_dead = null - mob_biotypes = MOB_ORGANIC - response_help = "honks the" - speak = list("Honk!") - speak_emote = list("squeaks") - emote_see = list("honks") - maxHealth = 100 - health = 100 - - speed = -1 - turns_per_move = 1 - - del_on_death = TRUE - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/item/clothing/shoes/clown_shoes) - -/mob/living/simple_animal/hostile/retaliate/clown/goblin/cluwne - name = "cluwne goblin" - desc = "A tiny pile of misery and evil. Kill this thing before it comes for your family." - icon_state = "cluwnegoblin" - icon_living = "cluwnegoblin" - response_help = "henks the" - speak = list("HENK!") - emote_see = list("henks") - maxHealth = 150 - health = 150 - harm_intent_damage = 15 - melee_damage_lower = 17 - melee_damage_upper = 20 - 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) - minbodytemp = 0 - maxbodytemp = INFINITY - move_to_delay = 2 - - loot = list(/obj/item/clothing/mask/false_cluwne_mask, /obj/item/clothing/shoes/clown_shoes/false_cluwne_shoes) // We'd rather not give them ACTUAL cluwne stuff you know? diff --git a/paradise.dme b/paradise.dme index 40c783f78bd..4961987ccc8 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2422,6 +2422,7 @@ #include "code\modules\mob\living\basic\minebots\minebot_abilities.dm" #include "code\modules\mob\living\basic\minebots\minebot_ai.dm" #include "code\modules\mob\living\basic\minebots\minebot_upgrades.dm" +#include "code\modules\mob\living\basic\retaliate\clown.dm" #include "code\modules\mob\living\brain\brain_death.dm" #include "code\modules\mob\living\brain\brain_emote.dm" #include "code\modules\mob\living\brain\brain_life.dm" @@ -2663,7 +2664,6 @@ #include "code\modules\mob\living\simple_animal\hostile\mining\elites\legionnaire.dm" #include "code\modules\mob\living\simple_animal\hostile\mining\elites\pandora.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\araneus.dm" -#include "code\modules\mob\living\simple_animal\hostile\retaliate\clown.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\combat_drone.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\fish.dm" #include "code\modules\mob\living\simple_animal\hostile\retaliate\kangaroo.dm" diff --git a/tools/UpdatePaths/Scripts/29807_honknomaly_mobs.txt b/tools/UpdatePaths/Scripts/29807_honknomaly_mobs.txt new file mode 100644 index 00000000000..e8e20a28c2a --- /dev/null +++ b/tools/UpdatePaths/Scripts/29807_honknomaly_mobs.txt @@ -0,0 +1 @@ +/mob/living/simple_animal/hostile/retaliate/clown/@SUBTYPES : /mob/living/basic/clown/@SUBTYPES{@OLD}