diff --git a/_maps/RandomRuins/SpaceRuins/originalcontent.dmm b/_maps/RandomRuins/SpaceRuins/originalcontent.dmm index 142b2acdbf7..5679fcba3cf 100644 --- a/_maps/RandomRuins/SpaceRuins/originalcontent.dmm +++ b/_maps/RandomRuins/SpaceRuins/originalcontent.dmm @@ -111,7 +111,7 @@ /turf/open/indestructible/paper, /area/ruin/powered) "at" = ( -/mob/living/simple_animal/hostile/stickman, +/mob/living/basic/stickman, /turf/open/indestructible/paper, /area/ruin/powered) "au" = ( @@ -181,7 +181,7 @@ dir = 8 }, /obj/structure/fluff/paper/corner, -/mob/living/simple_animal/hostile/stickman, +/mob/living/basic/stickman, /turf/open/indestructible/paper, /area/ruin/powered) "aE" = ( @@ -250,7 +250,7 @@ /obj/structure/fluff/paper/corner{ dir = 8 }, -/mob/living/simple_animal/hostile/stickman, +/mob/living/basic/stickman, /turf/open/indestructible/paper, /area/ruin/powered) "aM" = ( @@ -270,7 +270,7 @@ /area/ruin/powered) "aO" = ( /obj/structure/fluff/paper, -/mob/living/simple_animal/hostile/stickman/dog, +/mob/living/basic/stickman/dog, /turf/open/indestructible/paper, /area/ruin/powered) "aP" = ( @@ -302,7 +302,7 @@ /area/ruin/powered) "aS" = ( /obj/structure/fluff/paper/corner, -/mob/living/simple_animal/hostile/stickman/dog, +/mob/living/basic/stickman/dog, /turf/open/indestructible/paper, /area/ruin/powered) "aT" = ( @@ -358,7 +358,7 @@ /obj/structure/fluff/paper{ dir = 1 }, -/mob/living/simple_animal/hostile/stickman/dog, +/mob/living/basic/stickman/dog, /turf/open/indestructible/paper, /area/ruin/powered) "bb" = ( @@ -432,7 +432,7 @@ /obj/structure/fluff/paper/corner{ dir = 1 }, -/mob/living/simple_animal/hostile/stickman, +/mob/living/basic/stickman, /turf/open/indestructible/paper, /area/ruin/powered) "bl" = ( @@ -443,7 +443,7 @@ /area/ruin/powered) "bm" = ( /obj/structure/fluff/paper, -/mob/living/simple_animal/hostile/stickman, +/mob/living/basic/stickman, /turf/open/indestructible/paper, /area/ruin/powered) "bn" = ( @@ -498,7 +498,7 @@ /turf/open/indestructible/paper, /area/ruin/powered) "bu" = ( -/mob/living/simple_animal/hostile/stickman/ranged, +/mob/living/basic/stickman/ranged, /turf/open/indestructible/paper, /area/ruin/powered) "bv" = ( @@ -562,7 +562,7 @@ /turf/open/indestructible/paper, /area/ruin/powered) "bE" = ( -/mob/living/simple_animal/hostile/stickman/dog, +/mob/living/basic/stickman/dog, /turf/open/indestructible/paper, /area/ruin/powered) "bF" = ( @@ -577,7 +577,7 @@ /area/ruin/powered) "bG" = ( /obj/item/toy/crayon/blue, -/mob/living/simple_animal/hostile/stickman/ranged, +/mob/living/basic/stickman/ranged, /turf/open/indestructible/paper, /area/ruin/powered) "bH" = ( @@ -693,7 +693,7 @@ /obj/structure/fluff/paper{ dir = 4 }, -/mob/living/simple_animal/hostile/stickman, +/mob/living/basic/stickman, /turf/open/indestructible/paper, /area/ruin/powered) "bV" = ( @@ -792,7 +792,7 @@ /obj/structure/fluff/paper{ dir = 1 }, -/mob/living/simple_animal/hostile/stickman, +/mob/living/basic/stickman, /turf/open/indestructible/paper, /area/ruin/powered) "ck" = ( @@ -861,7 +861,7 @@ /obj/structure/fluff/paper{ dir = 1 }, -/mob/living/simple_animal/hostile/stickman/dog, +/mob/living/basic/stickman/dog, /turf/open/indestructible/paper, /area/ruin/powered) "ct" = ( @@ -891,7 +891,7 @@ /obj/structure/fluff/paper{ dir = 1 }, -/mob/living/simple_animal/hostile/stickman/ranged, +/mob/living/basic/stickman/ranged, /turf/open/indestructible/paper, /area/ruin/powered) "wr" = ( diff --git a/code/datums/elements/basic_body_temp_sensitive.dm b/code/datums/elements/basic_body_temp_sensitive.dm index 30dd0ed41a2..9f3709d918f 100644 --- a/code/datums/elements/basic_body_temp_sensitive.dm +++ b/code/datums/elements/basic_body_temp_sensitive.dm @@ -1,7 +1,7 @@ /** - * When attached to a basic mob, it gives it the ability to be hurt by cold body temperatures + * When attached to a basic mob, it gives it the ability to be hurt by cold/hot body temperatures */ -/datum/element/basic_body_temp_sensetive +/datum/element/basic_body_temp_sensitive element_flags = ELEMENT_BESPOKE id_arg_index = 2 @@ -14,7 +14,7 @@ ///Damage when above max temp var/heat_damage = 1 -/datum/element/basic_body_temp_sensetive/Attach(datum/target, min_body_temp, max_body_temp, cold_damage, heat_damage) +/datum/element/basic_body_temp_sensitive/Attach(datum/target, min_body_temp, max_body_temp, cold_damage, heat_damage) . = ..() if(!isbasicmob(target)) return ELEMENT_INCOMPATIBLE @@ -29,13 +29,13 @@ src.heat_damage = heat_damage RegisterSignal(target, COMSIG_LIVING_LIFE, .proc/on_life) -/datum/element/basic_body_temp_sensetive/Detach(datum/source) +/datum/element/basic_body_temp_sensitive/Detach(datum/source) if(source) UnregisterSignal(source, COMSIG_LIVING_LIFE) return ..() -/datum/element/basic_body_temp_sensetive/proc/on_life(datum/target, delta_time, times_fired) +/datum/element/basic_body_temp_sensitive/proc/on_life(datum/target, delta_time, times_fired) var/mob/living/basic/basic_mob = target var/gave_alert = FALSE diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index cbaf04a9189..ea548b8b840 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -156,7 +156,6 @@ /obj/item/clothing/suit/wizrobe/paper/verb/stickmen() set category = "Object" set name = "Summon Stick Minions" - set src in usr if(!isliving(usr)) return if(!robe_charge) @@ -164,13 +163,12 @@ return usr.say("Rise, my creation! Off your page into this realm!", forced = "stickman summoning") - playsound(src.loc, 'sound/magic/summon_magic.ogg', 50, TRUE, TRUE) - var/mob/living/M = new /mob/living/simple_animal/hostile/stickman(get_turf(usr)) - var/list/factions = usr.faction - M.faction = factions - src.robe_charge = FALSE + playsound(loc, 'sound/magic/summon_magic.ogg', 50, TRUE, TRUE) + var/mob/living/M = new /mob/living/basic/stickman(get_turf(usr)) + M.faction += list("[REF(usr)]") + robe_charge = FALSE sleep(30) - src.robe_charge = TRUE + robe_charge = TRUE to_chat(usr, span_notice("The robe hums, its internal magic supply restored.")) diff --git a/code/modules/mob/living/basic/ruin_defender/stickman.dm b/code/modules/mob/living/basic/ruin_defender/stickman.dm new file mode 100644 index 00000000000..f3a272ee28c --- /dev/null +++ b/code/modules/mob/living/basic/ruin_defender/stickman.dm @@ -0,0 +1,94 @@ +/mob/living/basic/stickman + name = "Angry Stick Man" + desc = "A being from a realm with only 2 dimensions. At least it's trying to stay faced towards you." + icon_state = "stickman" + icon_living = "stickman" + icon_dead = "stickman_dead" + mob_biotypes = MOB_HUMANOID + gender = MALE + health = 100 + maxHealth = 100 + speed = 0.5 + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + melee_damage_lower = 10 + melee_damage_upper = 10 + attack_sound = 'sound/weapons/punch1.ogg' + combat_mode = TRUE + faction = list("stickman") + + ai_controller = /datum/ai_controller/basic_controller/stickman + +/mob/living/basic/stickman/Initialize(mapload) + . = ..() + new /obj/effect/temp_visual/paper_scatter(get_turf(src)) + AddElement(/datum/element/basic_body_temp_sensitive, cold_damage = 7.5, heat_damage = 7.5) + AddElement(/datum/element/atmos_requirements, list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0), 7.5) + +/datum/ai_controller/basic_controller/stickman + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic() + ) + + ai_movement = /datum/ai_movement/basic_avoidance + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_melee_attack_subtree/stickman + ) + +/datum/ai_planning_subtree/basic_melee_attack_subtree/stickman + melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/stickman + +/datum/ai_behavior/basic_melee_attack/stickman + action_cooldown = 1.5 SECONDS + +/datum/ai_controller/basic_controller/stickman/PerformIdleBehavior(delta_time) + . = ..() + var/mob/living/living_pawn = pawn + + if(DT_PROB(25, delta_time) && (living_pawn.mobility_flags & MOBILITY_MOVE) && isturf(living_pawn.loc) && !living_pawn.pulledby) + var/move_dir = pick(GLOB.alldirs) + living_pawn.Move(get_step(living_pawn, move_dir), move_dir) + +/mob/living/basic/stickman/dog + name = "Angry Stick Dog" + desc = "Stickman's best friend, if he could see him at least." + icon_state = "stickdog" + icon_living = "stickdog" + icon_dead = "stickdog_dead" + attack_verb_continuous = "bites" + attack_verb_simple = "bite" + attack_vis_effect = ATTACK_EFFECT_BITE + sharpness = SHARP_POINTY + mob_biotypes = MOB_BEAST + attack_sound = 'sound/weapons/bite.ogg' + +/mob/living/basic/stickman/ranged + name = "Angry Stick Gunman" + desc = "How do 2 dimensional guns even work??" + icon_state = "stickmanranged" + icon_living = "stickmanranged" + attack_verb_continuous = "whacks" + attack_verb_simple = "whack" + melee_damage_lower = 5 + melee_damage_upper = 5 + attack_sound = 'sound/weapons/genhit1.ogg' + + ai_controller = /datum/ai_controller/basic_controller/stickman/ranged + +/mob/living/basic/stickman/ranged/Initialize() + . = ..() + AddElement(/datum/element/death_drops, list(/obj/item/gun/ballistic/automatic/pistol/stickman)) + AddElement(/datum/element/ranged_attacks, /obj/item/ammo_casing/c9mm, 'sound/misc/bang.ogg') + +/datum/ai_controller/basic_controller/stickman/ranged + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/basic_ranged_attack_subtree/stickman + ) + +/datum/ai_planning_subtree/basic_ranged_attack_subtree/stickman + ranged_attack_behavior = /datum/ai_behavior/basic_ranged_attack/stickman + +/datum/ai_behavior/basic_ranged_attack/stickman + action_cooldown = 5 SECONDS diff --git a/code/modules/mob/living/basic/vermin/cockroach.dm b/code/modules/mob/living/basic/vermin/cockroach.dm index aa301b36f89..ca04c8d5847 100644 --- a/code/modules/mob/living/basic/vermin/cockroach.dm +++ b/code/modules/mob/living/basic/vermin/cockroach.dm @@ -31,7 +31,7 @@ . = ..() AddElement(/datum/element/death_drops, list(/obj/effect/decal/cleanable/insectguts)) AddElement(/datum/element/swabable, CELL_LINE_TABLE_COCKROACH, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 7) - AddElement(/datum/element/basic_body_temp_sensetive, 270, INFINITY) + AddElement(/datum/element/basic_body_temp_sensitive, 270, INFINITY) AddComponent(/datum/component/squashable, squash_chance = 50, squash_damage = 1) ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ef33ffe8dad..3667338d48f 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1323,8 +1323,8 @@ /mob/living/simple_animal/hostile/asteroid/goliath/beast, /mob/living/simple_animal/hostile/headcrab, /mob/living/simple_animal/hostile/morph, - /mob/living/simple_animal/hostile/stickman, - /mob/living/simple_animal/hostile/stickman/dog, + /mob/living/basic/stickman, + /mob/living/basic/stickman/dog, /mob/living/simple_animal/hostile/megafauna/dragon/lesser, /mob/living/simple_animal/hostile/gorilla, /mob/living/simple_animal/parrot, diff --git a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm index cf138034208..579cac6e826 100644 --- a/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm +++ b/code/modules/mob/living/simple_animal/hostile/bosses/paperwizard.dm @@ -37,20 +37,43 @@ boss_type = /mob/living/simple_animal/hostile/boss/paper_wizard needs_target = FALSE say_when_triggered = "Rise, my creations! Jump off your pages and into this realm!" - var/static/summoned_minions = 0 + ///How many minions we summoned + var/summoned_minions = 0 + ///How many minions we can have at once + var/max_minions = 6 + ///How many minions we should spawn + var/minions_to_summon = 3 + +/datum/action/boss/wizard_summon_minions/IsAvailable() + . = ..() + if(!.) + return FALSE + if(summoned_minions >= max_minions) + return FALSE + return TRUE /datum/action/boss/wizard_summon_minions/Trigger() - if(summoned_minions <= 6 && ..()) - var/list/minions = list( - /mob/living/simple_animal/hostile/stickman, - /mob/living/simple_animal/hostile/stickman/ranged, - /mob/living/simple_animal/hostile/stickman/dog) - var/list/directions = GLOB.cardinals.Copy() - for(var/i in 1 to 3) - var/minions_chosen = pick_n_take(minions) - new minions_chosen (get_step(boss,pick_n_take(directions)), 1) - summoned_minions += 3; + . = ..() + if(!.) + return + var/list/minions = list( + /mob/living/basic/stickman, + /mob/living/basic/stickman/ranged, + /mob/living/basic/stickman/dog) + var/list/directions = GLOB.cardinals.Copy() + var/summon_amount = min(minions_to_summon, max_minions - summoned_minions) + for(var/i in 1 to summon_amount) + var/atom/chosen_minion = pick_n_take(minions) + chosen_minion = new chosen_minion(get_step(boss, pick_n_take(directions))) + RegisterSignal(chosen_minion, list(COMSIG_PARENT_QDELETING, COMSIG_LIVING_DEATH), .proc/lost_minion) + summoned_minions++ +/// Called when a minion is qdeleted or dies, removes it from our minion list +/datum/action/boss/wizard_summon_minions/proc/lost_minion(mob/source) + SIGNAL_HANDLER + + UnregisterSignal(source, list(COMSIG_PARENT_QDELETING, COMSIG_LIVING_DEATH)) + summoned_minions-- //Mimic Ability //Summons mimics of himself with magical papercraft diff --git a/code/modules/mob/living/simple_animal/hostile/stickman.dm b/code/modules/mob/living/simple_animal/hostile/stickman.dm deleted file mode 100644 index 1d5fef888fc..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/stickman.dm +++ /dev/null @@ -1,61 +0,0 @@ -/mob/living/simple_animal/hostile/stickman - name = "Angry Stick Man" - desc = "A being from a realm with only 2 dimensions. At least it's trying to stay faced towards you." - icon_state = "stickman" - icon_living = "stickman" - icon_dead = "stickman_dead" - icon_gib = "syndicate_gib" - mob_biotypes = MOB_HUMANOID - gender = MALE - speak_chance = 0 - turns_per_move = 5 - speed = 0 - stat_attack = HARD_CRIT - robust_searching = 1 - environment_smash = ENVIRONMENT_SMASH_NONE - maxHealth = 100 - health = 100 - harm_intent_damage = 5 - obj_damage = 0 - melee_damage_lower = 10 - melee_damage_upper = 10 - attack_verb_continuous = "punches" - attack_verb_simple = "punch" - attack_sound = 'sound/weapons/punch1.ogg' - combat_mode = TRUE - atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) - unsuitable_atmos_damage = 7.5 - faction = list("hostile","stickman") - check_friendly_fire = 1 - status_flags = CANPUSH - var/datum/action/boss/wizard_summon_minions/changesummons = /datum/action/boss/wizard_summon_minions - var/summoned_by_wizard = 0 - -/mob/living/simple_animal/hostile/stickman/ranged - ranged = 1 - retreat_distance = 5 - minimum_distance = 5 - icon_state = "stickmanranged" - icon_living = "stickmanranged" - casingtype = /obj/item/ammo_casing/c45 - projectilesound = 'sound/misc/bang.ogg' - loot = list(/obj/item/gun/ballistic/automatic/pistol/stickman) - - -/mob/living/simple_animal/hostile/stickman/dog - name = "Angry Stick Dog" - desc = "Stickman's best friend, if he could see him at least." - icon_state = "stickdog" - icon_living = "stickdog" - icon_dead = "stickdog_dead" - mob_biotypes = MOB_BEAST - -/mob/living/simple_animal/hostile/stickman/Initialize(mapload, wizard_summoned) - . = ..() - new /obj/effect/temp_visual/paper_scatter(src) - summoned_by_wizard = wizard_summoned - -/mob/living/simple_animal/hostile/stickman/death() - ..() - if(summoned_by_wizard == 1) - changesummons.summoned_minions -- diff --git a/icons/mob/simple_human.dmi b/icons/mob/simple_human.dmi index 9c2493d5258..d654434b55b 100644 Binary files a/icons/mob/simple_human.dmi and b/icons/mob/simple_human.dmi differ diff --git a/tgstation.dme b/tgstation.dme index cccb3f1574e..ce7a1dd0127 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2754,6 +2754,7 @@ #include "code\modules\mob\living\basic\basic.dm" #include "code\modules\mob\living\basic\basic_defense.dm" #include "code\modules\mob\living\basic\health_adjustment.dm" +#include "code\modules\mob\living\basic\ruin_defender\stickman.dm" #include "code\modules\mob\living\basic\vermin\cockroach.dm" #include "code\modules\mob\living\brain\brain.dm" #include "code\modules\mob\living\brain\brain_item.dm" @@ -2989,7 +2990,6 @@ #include "code\modules\mob\living\simple_animal\hostile\skeleton.dm" #include "code\modules\mob\living\simple_animal\hostile\space_dragon.dm" #include "code\modules\mob\living\simple_animal\hostile\statue.dm" -#include "code\modules\mob\living\simple_animal\hostile\stickman.dm" #include "code\modules\mob\living\simple_animal\hostile\syndicate.dm" #include "code\modules\mob\living\simple_animal\hostile\tree.dm" #include "code\modules\mob\living\simple_animal\hostile\vatbeast.dm"