From 05791861b7600d3ca8e419cc1ca6f66c334ff140 Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Tue, 15 Jul 2025 20:19:23 -0400 Subject: [PATCH] New PVE Major Midround: Demonic Incursion (#29053) * Initial commit. Event. * Started converting mobs to basic mobs. Migo and Creature. Needs aggressiveness AI * Makes CI happy * Fixes some file names * Ticks files * Fixes file again * Update code/modules/events/demon_incursion.dm Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> * Announcement sound, spawn adjustments * Reduced spread when portals multiply * Elite spawns when portal count gets high * Fixes missing comma * Converted migo, blank, and most of hellhounds to basic mobs. Added new controllers and behaviors * Fixes * Linters! * Faithless moved to basic mob * LINTERS * Makes skeletons basic mobs * Fixes, Ranged Attacks, Ranged variants of nether mobs * Handles portal expansion chance * Linters * Fixes mobs not breaking shit * Fixes ranged attacks * Fixes ranged attacks * oops * Another oops. No config changes are needed here * Twenty percent chance that a nether mob is a grappler * Dimensional tear fixes * Adjusts awaken distance for hostile mobs, makes variable melee attack rate for basic mobs * Variable initial spawns, variable spread rates. * Whole lot of fixes from merge, hellhound completion * Updated lavaland winter biodome * Makes basic mobs able to hurt other mobs * Makes spawners properly rally basic mobs to beat up the attacker * Extra line * Removed comment * Makes hellhounds stop resting when attacked or when they find a new target * Fixed initial portal spawn amounts * Borgs now affected by basic mobs * Nerfs portal spawn rate, nerfs portal integrity, nerfs portal max mobs * Grapplers now teleport to missed turfs * Removes duplicate notices * Buff portals a small bit * Makes nether portals no longer RR - the body is now recoverable from the blank it became * Makes portals layer above mobs * Removed excess ranged attack var * Changes list for determining start count to rely on mobs with client instead of all clients * Nerfs portal max mobs * Portals can no longer spread to within 3 tiles of another portal except on initial event start * Adjusts target portal count for big mobs * Spawners now properly remove nest values of basic mobs * Portals now glow an evil red. When portals are destroyed, 50% chance per mob to slay the mob * add prowling and return to home behaviors * cut this down * be a tiny bit smarter * Some code cleanup * Removes hostile base type, removing excess code * Gives /obj/ a basic mob attack handler. Fixes turrets * Gives basic mobs a HUD * Fixes skeleton death flag * Adjusted initial spawns * Incursion portals now slowly convert turfs, up to range 3 of them, to hellish flooring * Increases reward per destroyed portal * Makes the final portal of an incursion play a sound on destruction, couple portal fixes * Fixes basic mob xenobiology interactions * Non-shit portal sprites * Adds hostile machine element, mobs now actively target turrets and emitters * Properly gibs things when they should gib * Linter fix * Portals now layer under living mobs but over dead ones * Adds blackbox checking for demon incursion portal counts * Increases mob sight range slightly to account for widescreen, adds alt-color for grappler, delays incursion announcement a bit more * Portals now are more likely to spread the less there are * Incursion portals now repair themselves after not being damaged for some time * Grilles now shock basic mobs * Portals will now clean up basic mob corpses near them by gibbing them * Portal spread chance is now exponential regression * Portal mob spawns now linearly scale in time * Fixes some skeleton oversights in ruin mapping * Demon incursions no longer can spread to tiles in a space area, such as near brig plating * Moves corpse cleanup to mobs via component * Portals now drop bodies that are being eaten when they're destroyed. * Addresses code review * Docs some vars --------- Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Co-authored-by: Luc <89928798+lewcc@users.noreply.github.com> Co-authored-by: warriorstar-orion --- .../LavaRuins/lavaland_biodome_winter.dmm | 2 +- .../SpaceRuins/abandoned_sec_shuttle.dmm | 2 +- .../RandomRuins/SpaceRuins/derelict5.dmm | 2 +- code/__DEFINES/ai/ai_defines.dm | 1 + code/__DEFINES/ai/blackboard_defines.dm | 8 +- code/__DEFINES/layers.dm | 1 + code/__DEFINES/misc_defines.dm | 1 + code/controllers/subsystem/SSticker.dm | 8 + .../basic_ai_behaviors/targeting.dm | 6 +- .../basic_subtrees/attack_obstacle_in_path.dm | 100 +++++++ .../ai/basic_mobs/basic_subtrees/prowl.dm | 28 ++ .../basic_subtrees/ranged_skirmish.dm | 50 ++++ .../hostile_controllers.dm | 35 +++ .../datums/ai/basic_mobs/simple_controller.dm | 8 + .../basic_targeting_strategy.dm | 6 + code/datums/components/incursion_mob_death.dm | 16 ++ code/datums/components/spawner.dm | 36 ++- code/datums/components/surgery_initiator.dm | 2 +- code/datums/elements/hostile_machine.dm | 19 ++ code/datums/spells/shapeshift.dm | 12 +- code/game/gamemodes/game_mode.dm | 1 + code/game/machinery/portable_turret.dm | 13 + code/game/mecha/mecha.dm | 1 + code/game/objects/items/weapons/dice.dm | 2 +- code/game/objects/obj_defense.dm | 17 ++ code/game/objects/structures/grille.dm | 13 + .../objects/structures/monster_spawner.dm | 2 +- code/modules/events/demon_incursion.dm | 272 ++++++++++++++++++ code/modules/events/event_container.dm | 1 + code/modules/events/tear.dm | 13 +- code/modules/mob/living/basic/basic_mob.dm | 56 +++- .../mob/living/basic/farm_animals/deer_ai.dm | 6 + .../hostile/hellhound.dm | 119 ++++---- .../mob/living/basic/hostile/hellhound_ai.dm | 45 +++ .../mob/living/basic/hostile/skeleton_mob.dm | 99 +++++++ .../mob/living/basic/nether_mobs/blankbody.dm | 26 ++ .../mob/living/basic/nether_mobs/faithless.dm | 23 ++ .../mob/living/basic/nether_mobs/migo.dm | 197 +++++++++++++ .../living/basic/nether_mobs/nether_mobs.dm | 38 +++ .../mob/living/silicon/silicon_defense.dm | 20 ++ .../living/simple_animal/animal_defense.dm | 6 + .../living/simple_animal/hostile/faithless.dm | 34 --- .../simple_animal/hostile/netherworld.dm | 80 +----- .../simple_animal/hostile/retaliate/undead.dm | 39 --- .../simple_animal/hostile/skeleton_mob.dm | 50 ---- .../power/engines/singularity/emitter.dm | 1 + .../projectile/special_projectiles.dm | 18 ++ icons/obj/structures/portal.dmi | Bin 0 -> 731 bytes paradise.dme | 18 +- sound/AI/outbreak_demon.ogg | Bin 0 -> 163155 bytes 50 files changed, 1265 insertions(+), 288 deletions(-) create mode 100644 code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm create mode 100644 code/datums/ai/basic_mobs/basic_subtrees/prowl.dm create mode 100644 code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm create mode 100644 code/datums/ai/basic_mobs/generic_controllers/hostile_controllers.dm create mode 100644 code/datums/ai/basic_mobs/simple_controller.dm create mode 100644 code/datums/components/incursion_mob_death.dm create mode 100644 code/datums/elements/hostile_machine.dm create mode 100644 code/modules/events/demon_incursion.dm rename code/modules/mob/living/{simple_animal => basic}/hostile/hellhound.dm (60%) create mode 100644 code/modules/mob/living/basic/hostile/hellhound_ai.dm create mode 100644 code/modules/mob/living/basic/hostile/skeleton_mob.dm create mode 100644 code/modules/mob/living/basic/nether_mobs/blankbody.dm create mode 100644 code/modules/mob/living/basic/nether_mobs/faithless.dm create mode 100644 code/modules/mob/living/basic/nether_mobs/migo.dm create mode 100644 code/modules/mob/living/basic/nether_mobs/nether_mobs.dm delete mode 100644 code/modules/mob/living/simple_animal/hostile/faithless.dm delete mode 100644 code/modules/mob/living/simple_animal/hostile/skeleton_mob.dm create mode 100644 icons/obj/structures/portal.dmi create mode 100644 sound/AI/outbreak_demon.ogg diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm index 5720ef32047..703539c83e5 100644 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm +++ b/_maps/map_files/RandomRuins/LavaRuins/lavaland_biodome_winter.dmm @@ -149,7 +149,7 @@ /turf/simulated/floor/wood, /area/ruin/powered/snow_cabin) "aH" = ( -/mob/living/simple_animal/hostile/skeleton/arctic, +/mob/living/basic/skeleton/arctic, /turf/simulated/floor/wood, /area/ruin/powered/snow_cabin) "aI" = ( diff --git a/_maps/map_files/RandomRuins/SpaceRuins/abandoned_sec_shuttle.dmm b/_maps/map_files/RandomRuins/SpaceRuins/abandoned_sec_shuttle.dmm index d972e10bdc6..fb9db8eabd7 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/abandoned_sec_shuttle.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/abandoned_sec_shuttle.dmm @@ -22,7 +22,7 @@ /obj/structure/chair/comfy/shuttle{ dir = 4 }, -/mob/living/simple_animal/hostile/retaliate/skeleton/warden{ +/mob/living/basic/skeleton/warden{ dir = 4 }, /turf/simulated/floor/plasteel/airless{ diff --git a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm index 6589aca2c26..5bbd8d64a0c 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/derelict5.dmm @@ -5,7 +5,7 @@ /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "bO" = ( -/mob/living/simple_animal/hostile/skeleton, +/mob/living/basic/skeleton, /turf/simulated/floor/plasteel, /area/ruin/space/unpowered) "bQ" = ( diff --git a/code/__DEFINES/ai/ai_defines.dm b/code/__DEFINES/ai/ai_defines.dm index 6edf0e98531..1cf3ea125a1 100644 --- a/code/__DEFINES/ai/ai_defines.dm +++ b/code/__DEFINES/ai/ai_defines.dm @@ -13,6 +13,7 @@ // How far should we, by default, be looking for interesting things to de-idle? #define AI_DEFAULT_INTERESTING_DIST 10 +#define AI_SIMPLE_INTERESTING_DIST 15 /// Cooldown on planning if planning failed last time diff --git a/code/__DEFINES/ai/blackboard_defines.dm b/code/__DEFINES/ai/blackboard_defines.dm index cdcf1c21362..4291ac1cd55 100644 --- a/code/__DEFINES/ai/blackboard_defines.dm +++ b/code/__DEFINES/ai/blackboard_defines.dm @@ -45,6 +45,8 @@ #define BB_TEMPORARILY_IGNORE_FACTION "BB_TEMPORARILY_IGNORE_FACTIONS" ///List of mobs who have damaged us #define BB_BASIC_MOB_RETALIATE_LIST "BB_BASIC_MOB_SHITLIST" +///Blackboard key for a whitelist typecache of "things we can target while trying to move" +#define BB_OBSTACLE_TARGETING_WHITELIST "BB_targeting_whitelist" //Hunting BB keys @@ -145,7 +147,7 @@ // Misc /// For /datum/ai_behavior/find_potential_targets, what if any field are we using currently -#define BB_FIND_TARGETS_FIELD(type) "bb_find_targets_field_[type]" +#define BB_FIND_TARGETS_FIELD(type) "BB_FIND_TARGETS_FIELD_[type]" /// key that tells the wall we will mine #define BB_TARGET_MINERAL_WALL "BB_TARGET_MINERAL_WALL" @@ -153,3 +155,7 @@ #define BB_ORE_TARGET "BB_ORE_TARGET" /// which ore types we will not eat #define BB_ORE_IGNORE_TYPES "BB_ORE_IGNORE_TYPES" + +#define BB_INCURSION_HOME_PORTAL "BB_INCURSION_HOME_PORTAL" +#define BB_INCURSION_HOME_PORTAL_TARGET "BB_INCURSION_HOME_PORTAL_TARGET" +#define BB_PROWL_TARGET "BB_PROWL_TARGET" diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index f7f5145a212..c834d74cd0d 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -79,6 +79,7 @@ #define BELOW_MOB_LAYER 3.7 #define LYING_MOB_LAYER 3.8 +#define ABOVE_LYING_MOB_LAYER 3.9 //#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define #define ABOVE_MOB_LAYER 4.1 #define HITSCAN_LAYER 4.2 diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index 3c78bf684d2..e5fb01f0a20 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -640,6 +640,7 @@ #define BIOHAZARD_BLOB "Blob" #define BIOHAZARD_XENO "Xenomorphs" +#define INCURSION_DEMONS "Demon Incursion" #define MAX_ALLOWED_TELEPORTS_PER_PROCESS 20 diff --git a/code/controllers/subsystem/SSticker.dm b/code/controllers/subsystem/SSticker.dm index c69207c53e5..6c336b355bb 100644 --- a/code/controllers/subsystem/SSticker.dm +++ b/code/controllers/subsystem/SSticker.dm @@ -843,6 +843,10 @@ SUBSYSTEM_DEF(ticker) for(var/atom/blob_overmind in SSticker.mode.blob_overminds) if(blob_overmind.admin_spawned) return TRUE + if(INCURSION_DEMONS) + for(var/obj/portal in SSticker.mode.incursion_portals) + if(portal.admin_spawned) + return TRUE /datum/controller/subsystem/ticker/proc/biohazard_count(biohazard) switch(biohazard) @@ -858,6 +862,8 @@ SUBSYSTEM_DEF(ticker) return count_xenomorps() if(BIOHAZARD_BLOB) return length(SSticker.mode.blob_overminds) + if(INCURSION_DEMONS) + return length(SSticker.mode.incursion_portals) CRASH("biohazard_count got unexpected [biohazard]") @@ -875,5 +881,7 @@ SUBSYSTEM_DEF(ticker) return count > 5 if(BIOHAZARD_BLOB) return count > 0 + if(INCURSION_DEMONS) + return count > 0 return FALSE diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm index 637f15c1334..d1dcedcc19a 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm @@ -6,6 +6,7 @@ GLOBAL_LIST_EMPTY_TYPED(hostile_machines, /atom) GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list( /mob, /obj/machinery/porta_turret, + /obj/machinery/power/emitter, /obj/mecha, ))) @@ -13,7 +14,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list( action_cooldown = 2 SECONDS behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION /// How far can we see stuff? - var/vision_range = 9 + var/vision_range = 11 /// Blackboard key for aggro range, uses vision range if not specified var/aggro_range_key = BB_AGGRO_RANGE @@ -156,3 +157,6 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list( /// Returns the desired final target from the filtered list of targets /datum/ai_behavior/find_potential_targets/proc/pick_final_target(datum/ai_controller/controller, list/filtered_targets) return pick(filtered_targets) + +/datum/ai_behavior/find_potential_targets/bigger_range + vision_range = 16 diff --git a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm new file mode 100644 index 00000000000..09fc8ab4105 --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm @@ -0,0 +1,100 @@ +/// If there's something between us and our target then we need to queue a behaviour to make it not be there +/datum/ai_planning_subtree/attack_obstacle_in_path + /// Blackboard key containing current target + var/target_key = BB_BASIC_MOB_CURRENT_TARGET + /// The action to execute, extend to add a different cooldown or something + var/attack_behaviour = /datum/ai_behavior/attack_obstructions + +/datum/ai_planning_subtree/attack_obstacle_in_path/select_behaviors(datum/ai_controller/controller, seconds_per_tick) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return + + var/turf/next_step = get_step_towards(controller.pawn, target) + if(!next_step.is_blocked_turf(exclude_mobs = TRUE, source_atom = controller.pawn)) + return + + controller.queue_behavior(attack_behaviour, target_key) + // Don't cancel future planning, maybe we can move now + +/// Something is in our way, get it outta here +/datum/ai_behavior/attack_obstructions + action_cooldown = 2 SECONDS + /// If we should attack walls, be prepared for complaints about breaches + var/can_attack_turfs = FALSE + /// For if you want your mob to be able to attack dense objects + var/can_attack_dense_objects = TRUE + +/datum/ai_behavior/attack_obstructions/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + var/mob/living/basic/basic_mob = controller.pawn + var/atom/target = controller.blackboard[target_key] + + if(QDELETED(target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + + var/turf/next_step = get_step_towards(basic_mob, target) + var/dir_to_next_step = get_dir(basic_mob, next_step) + // If moving diagonally we need to punch both ways, or more accurately the one we are blocked in + var/list/dirs_to_move = list() + if(dir_to_next_step && GLOB.diagonals) + for(var/direction in GLOB.cardinal) + if(direction & dir_to_next_step) + dirs_to_move += direction + else + dirs_to_move += dir_to_next_step + + for(var/direction in dirs_to_move) + if(attack_in_direction(controller, basic_mob, direction)) + return AI_BEHAVIOR_DELAY + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/datum/ai_behavior/attack_obstructions/proc/attack_in_direction(datum/ai_controller/controller, mob/living/basic/basic_mob, direction) + var/turf/next_step = get_step(basic_mob, direction) + if(!next_step.is_blocked_turf(exclude_mobs = TRUE, source_atom = controller.pawn)) + return FALSE + + for(var/obj/object as anything in next_step.contents) + if(!can_smash_object(basic_mob, object)) + continue + basic_mob.melee_attack(object) + return TRUE + + if(can_attack_turfs) + basic_mob.melee_attack(next_step) + return TRUE + return FALSE + +/datum/ai_behavior/attack_obstructions/proc/can_smash_object(mob/living/basic/basic_mob, obj/object) + if(!object.density && !can_attack_dense_objects) + return FALSE + if(object.IsObscured()) + return FALSE + if(basic_mob.see_invisible < object.invisibility) + return FALSE + var/list/whitelist = basic_mob.ai_controller.blackboard[BB_OBSTACLE_TARGETING_WHITELIST] + if(whitelist && !is_type_in_typecache(object, whitelist)) + return FALSE + if((!ismachinery(object) && !isstructure(object))) + return FALSE + + return TRUE // It's in our way, let's get it out of our way + +/datum/ai_behavior/attack_obstructions/avoid_breaches + +/datum/ai_behavior/attack_obstructions/avoid_breaches/can_smash_object(mob/living/basic/basic_mob, obj/object) + . = ..() + if(istype(object, /obj/structure/window) || istype(object, /obj/machinery/door/airlock/external)) + for(var/dir in GLOB.alldirs) + if(isspaceturf(get_step(object, dir))) + return FALSE + +/datum/ai_planning_subtree/attack_obstacle_in_path/low_priority_target + target_key = BB_LOW_PRIORITY_HUNTING_TARGET + +/datum/ai_planning_subtree/attack_obstacle_in_path/pet_target + target_key = BB_CURRENT_PET_TARGET + +/datum/ai_planning_subtree/attack_obstacle_in_path/prowl + attack_behaviour = /datum/ai_behavior/attack_obstructions/avoid_breaches + target_key = BB_PROWL_TARGET diff --git a/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm b/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm new file mode 100644 index 00000000000..24706ba16eb --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm @@ -0,0 +1,28 @@ +/datum/ai_behavior/find_hunt_target/prowl + search_turf_types = TRUE + +/datum/ai_behavior/find_hunt_target/prowl/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, types_to_hunt, hunt_range) + var/mob/living/living_mob = controller.pawn + var/list/interesting_objects = search_turf_types ? RANGE_TURFS(hunt_range, living_mob) : oview(hunt_range, living_mob) + shuffle_inplace(interesting_objects) + for(var/atom/possible_dinner as anything in typecache_filter_list(interesting_objects, types_to_hunt)) + if(!valid_dinner(living_mob, possible_dinner, hunt_range, controller, seconds_per_tick)) + continue + controller.set_blackboard_key(hunting_target_key, possible_dinner) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + +/datum/ai_behavior/hunt_target/prowl + always_reset_target = TRUE + behavior_flags = parent_type::behavior_flags | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION + +/datum/ai_behavior/hunt_target/prowl/target_caught(mob/living/hunter, atom/hunted) + return // We're just going there + +/datum/ai_planning_subtree/find_and_hunt_target/prowl + target_key = BB_PROWL_TARGET + finding_behavior = /datum/ai_behavior/find_hunt_target/prowl + hunting_behavior = /datum/ai_behavior/hunt_target/prowl + hunt_targets = list(/turf/simulated/floor/plasteel) + hunt_range = 8 + hunt_chance = 50 diff --git a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm new file mode 100644 index 00000000000..220336592a4 --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm @@ -0,0 +1,50 @@ +/// Fire a ranged attack without interrupting movement. +/datum/ai_planning_subtree/ranged_skirmish + operational_datums = list(/datum/component/ranged_attacks) + /// Blackboard key holding target atom + var/target_key = BB_BASIC_MOB_CURRENT_TARGET + /// What AI behaviour do we actually run? + var/attack_behavior = /datum/ai_behavior/ranged_skirmish + /// If target is further away than this we don't fire + var/max_range = 9 + /// If target is closer than this we don't fire + var/min_range = 2 + +/datum/ai_planning_subtree/ranged_skirmish/select_behaviors(datum/ai_controller/controller, seconds_per_tick) + . = ..() + if(!controller.blackboard_key_exists(target_key)) + return + controller.queue_behavior(attack_behavior, target_key, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION, max_range, min_range) + +/// How often will we try to perform our ranged attack? +/datum/ai_behavior/ranged_skirmish + action_cooldown = 0.5 SECONDS + +/datum/ai_behavior/ranged_skirmish/setup(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range) + . = ..() + var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] + return !QDELETED(target) + +/datum/ai_behavior/ranged_skirmish/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range) + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) + if(!targeting_strategy.can_attack(controller.pawn, target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + + var/hiding_target = targeting_strategy.find_hidden_mobs(controller.pawn, target) + controller.set_blackboard_key(hiding_location_key, hiding_target) + + target = hiding_target || target + + var/distance = get_dist(controller.pawn, target) + if(distance > max_range || distance < min_range) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + + controller.ai_interact(target = target, intent = INTENT_HARM) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/datum/ai_planning_subtree/ranged_skirmish/no_minimum + min_range = 0 diff --git a/code/datums/ai/basic_mobs/generic_controllers/hostile_controllers.dm b/code/datums/ai/basic_mobs/generic_controllers/hostile_controllers.dm new file mode 100644 index 00000000000..490a1c12e21 --- /dev/null +++ b/code/datums/ai/basic_mobs/generic_controllers/hostile_controllers.dm @@ -0,0 +1,35 @@ +/// Find a target, walk at target, attack intervening obstacles +/datum/ai_controller/basic_controller/simple/simple_hostile_obstacles + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +/datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/demonic_incursion + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_and_hunt_target/prowl, + /datum/ai_planning_subtree/attack_obstacle_in_path/prowl, + ) + +/// Find a target, walk towards it AND shoot it +/datum/ai_controller/basic_controller/simple/simple_skirmisher + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/ranged_skirmish, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + ) + +/datum/ai_controller/basic_controller/simple/simple_skirmisher/demon_incursion + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/ranged_skirmish, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_and_hunt_target/prowl, + /datum/ai_planning_subtree/attack_obstacle_in_path/prowl, + ) diff --git a/code/datums/ai/basic_mobs/simple_controller.dm b/code/datums/ai/basic_mobs/simple_controller.dm new file mode 100644 index 00000000000..3f714baf7a2 --- /dev/null +++ b/code/datums/ai/basic_mobs/simple_controller.dm @@ -0,0 +1,8 @@ +/datum/ai_controller/basic_controller/simple + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + interesting_dist = AI_SIMPLE_INTERESTING_DIST diff --git a/code/datums/ai/targeting_strategy/basic_targeting_strategy.dm b/code/datums/ai/targeting_strategy/basic_targeting_strategy.dm index 9ff1c493ef2..b867dd8b68a 100644 --- a/code/datums/ai/targeting_strategy/basic_targeting_strategy.dm +++ b/code/datums/ai/targeting_strategy/basic_targeting_strategy.dm @@ -73,6 +73,12 @@ return FALSE return TRUE + if(istype(the_target, /obj/machinery/power/emitter)) // Targetting emitters + var/obj/machinery/power/emitter/E = the_target + if(!E.active) // Don't attack if the emitter isn't active + return FALSE + return TRUE + return FALSE /// Returns true if the mob and target share factions diff --git a/code/datums/components/incursion_mob_death.dm b/code/datums/components/incursion_mob_death.dm new file mode 100644 index 00000000000..f63d69bd2f3 --- /dev/null +++ b/code/datums/components/incursion_mob_death.dm @@ -0,0 +1,16 @@ +/datum/component/incursion_mob_death + var/gib_delay = 2 MINUTES + +/datum/component/incursion_mob_death/RegisterWithParent() + RegisterSignal(parent, COMSIG_MOB_DEATH, PROC_REF(extra_death_effect)) + RegisterSignal(parent, COMSIG_PARENT_QDELETING, PROC_REF(extra_death_effect)) + +/datum/component/incursion_mob_death/proc/extra_death_effect(datum/source) + SIGNAL_HANDLER + if(prob(95)) // Save some corpses for xenobio + addtimer(CALLBACK(src, PROC_REF(delayed_gib)), gib_delay) + +/datum/component/incursion_mob_death/proc/delayed_gib() + var/mob/living/demon = parent + new /obj/effect/temp_visual/demonic_grasp(demon.loc) + demon.gib() diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm index eb845a9aba6..1b791a95d33 100644 --- a/code/datums/components/spawner.dm +++ b/code/datums/components/spawner.dm @@ -35,14 +35,17 @@ for(var/mob/living/simple_animal/L in spawned_mobs) if(L.nest == src) L.nest = null + for(var/mob/living/basic/L in spawned_mobs) + if(L.nest == src) + L.nest = null spawned_mobs = null /datum/component/spawner/proc/try_spawn_mob() var/atom/P = parent if(length(spawned_mobs) >= max_mobs) - return 0 + return if(spawn_delay > world.time) - return 0 + return spawn_delay = world.time + spawn_time var/chosen_mob_type = pick(mob_types) var/mob/living/simple_animal/L = new chosen_mob_type(P.loc) @@ -52,6 +55,7 @@ L.faction = src.faction P.visible_message("[L] [spawn_text] [P].") P.on_mob_spawn(L) + return L /datum/component/spawner/proc/rally_spawned_mobs(parent, mob/living/target) SIGNAL_HANDLER // COMSIG_SPAWNER_SET_TARGET @@ -62,5 +66,29 @@ // start the cooldown first, because a rallied mob might fire on // ourselves while this is happening, causing confusion COOLDOWN_START(src, last_rally, 30 SECONDS) - for(var/mob/living/simple_animal/hostile/rallied as anything in spawned_mobs) - INVOKE_ASYNC(rallied, TYPE_PROC_REF(/mob/living/simple_animal/hostile, aggro_fast), target) + for(var/mob/living/rallied as anything in spawned_mobs) + if(istype(rallied, /mob/living/basic)) + var/mob/living/basic/basic = rallied + basic.ai_controller.cancel_actions() + basic.ai_controller.set_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET, target) + if(istype(rallied, /mob/living/simple_animal/hostile)) + var/mob/living/simple_animal/hostile/simple = rallied + INVOKE_ASYNC(simple, TYPE_PROC_REF(/mob/living/simple_animal/hostile, aggro_fast), target) + +/datum/component/spawner/demon_incursion_portal + +/datum/component/spawner/demon_incursion_portal/try_spawn_mob() + var/atom/result = ..() + if(result && istype(result.ai_controller)) + result.ai_controller.set_blackboard_key(BB_INCURSION_HOME_PORTAL, parent) + + return result + +/datum/component/spawner/demon_incursion_portal/rally_spawned_mobs(parent, mob/living/target) + if(!(COOLDOWN_FINISHED(src, last_rally))) + return + + COOLDOWN_START(src, last_rally, 30 SECONDS) + for(var/mob/living/basic/rallied as anything in spawned_mobs) + rallied.ai_controller.cancel_actions() + rallied.ai_controller.queue_behavior(/datum/ai_behavior/return_home/incursion_portal, BB_INCURSION_HOME_PORTAL) diff --git a/code/datums/components/surgery_initiator.dm b/code/datums/components/surgery_initiator.dm index 51f0ad1a9e1..3d2c53a04b8 100644 --- a/code/datums/components/surgery_initiator.dm +++ b/code/datums/components/surgery_initiator.dm @@ -82,7 +82,7 @@ return if(!IS_HORIZONTAL(L) && !can_start_on_stander) return - if(IS_HORIZONTAL(L) && !on_operable_surface(L) && !isanimal(L)) + if(IS_HORIZONTAL(L) && !on_operable_surface(L) && !(isanimal(L) || isbasicmob(L))) return if(iscarbon(target)) var/mob/living/carbon/C = target diff --git a/code/datums/elements/hostile_machine.dm b/code/datums/elements/hostile_machine.dm new file mode 100644 index 00000000000..7d8d1274784 --- /dev/null +++ b/code/datums/elements/hostile_machine.dm @@ -0,0 +1,19 @@ +/// AIs will attack this as a potential target if they see it +/datum/element/hostile_machine + element_flags = ELEMENT_DETACH_ON_HOST_DESTROY + +/datum/element/hostile_machine/Attach(datum/target) + . = ..() + + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + +#ifdef UNIT_TESTS + if(!GLOB.target_interested_atoms[target.type]) + stack_trace("Tried to make a hostile machine without updating ai targeting to include it, they must be synced") +#endif + GLOB.hostile_machines += target + +/datum/element/hostile_machine/Detach(datum/source) + GLOB.hostile_machines -= source + return ..() diff --git a/code/datums/spells/shapeshift.dm b/code/datums/spells/shapeshift.dm index 4b601beabe7..3d2f38cbea9 100644 --- a/code/datums/spells/shapeshift.dm +++ b/code/datums/spells/shapeshift.dm @@ -112,14 +112,14 @@ action_icon_state = "glare" gain_desc = "You have gained the ability to shapeshift into lesser hellhound form. This is a combat form with different abilities, tough but not invincible. It can regenerate itself over time by resting." - shapeshift_type = /mob/living/simple_animal/hostile/hellhound - current_shapes = list(/mob/living/simple_animal/hostile/hellhound) + shapeshift_type = /mob/living/basic/hellhound + current_shapes = list(/mob/living/basic/hellhound) current_casters = list() - possible_shapes = list(/mob/living/simple_animal/hostile/hellhound) + possible_shapes = list(/mob/living/basic/hellhound) /datum/spell/shapeshift/hellhound/greater name = "Greater Hellhound Form" - shapeshift_type = /mob/living/simple_animal/hostile/hellhound/greater - current_shapes = list(/mob/living/simple_animal/hostile/hellhound/greater) + shapeshift_type = /mob/living/basic/hellhound/greater + current_shapes = list(/mob/living/basic/hellhound/greater) current_casters = list() - possible_shapes = list(/mob/living/simple_animal/hostile/hellhound/greater) + possible_shapes = list(/mob/living/basic/hellhound/greater) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 5b4a22dbc5d..8a4000edfd7 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -38,6 +38,7 @@ var/list/datum/mind/xenos = list() var/list/datum/mind/eventmiscs = list() var/list/blob_overminds = list() + var/list/incursion_portals = list() var/list/datum/station_goal/station_goals = list() // A list of all station goals for this game mode var/list/secondary_goal_grab_bags = null // Once initialized, contains an associative list of department_name -> list(secondary_goal_type). When a goal is requested, a type will be pulled out of the department's grab bag. When the bag is empty, it will be refilled from the list of all goals in that department, with the amount of each set to the type's weight, max 10. diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 6c95d15e7af..1a7bdd34f25 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -91,6 +91,7 @@ spark_system.attach(src) setup() + AddElement(/datum/element/hostile_machine) /obj/machinery/porta_turret/Destroy() QDEL_NULL(spark_system) @@ -475,6 +476,18 @@ GLOBAL_LIST_EMPTY(turret_icons) to_chat(M, "That object is useless to you.") return +/mob/living/handle_basic_attack(mob/living/basic/attacker, modifiers) + attacker.changeNext_move(CLICK_CD_MELEE) + attacker.do_attack_animation(src) + if(attacker.melee_damage_upper == 0 || (attacker.melee_damage_type != BRUTE && attacker.melee_damage_type != BURN)) + return FALSE + if(!(stat & BROKEN)) + visible_message("[attacker] [attacker.attack_verb_continuous] [src]!") + ..() + else + to_chat(attacker, "That object is useless to you.") + return TRUE + /obj/machinery/porta_turret/attack_alien(mob/living/carbon/alien/humanoid/M) M.changeNext_move(CLICK_CD_MELEE) M.do_attack_animation(src) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index e84aa61d6aa..5415994362c 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -160,6 +160,7 @@ set_light(lights_range_ambient, lights_power_ambient) update_icon(UPDATE_OVERLAYS) + AddElement(/datum/element/hostile_machine) /obj/mecha/update_overlays() . = ..() diff --git a/code/game/objects/items/weapons/dice.dm b/code/game/objects/items/weapons/dice.dm index 02a5817119f..abe0740e846 100644 --- a/code/game/objects/items/weapons/dice.dm +++ b/code/game/objects/items/weapons/dice.dm @@ -187,7 +187,7 @@ //Swarm of creatures T.visible_message("A swarm of creatures surround [user]!") for(var/direction in GLOB.alldirs) - new /mob/living/simple_animal/hostile/netherworld(get_step(get_turf(user), direction)) + new /mob/living/basic/netherworld(get_step(get_turf(user), direction)) if(4) //Destroy Equipment T.visible_message("Everything [user] is holding and wearing disappears!") diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 5e9099bade5..0b16dd94f30 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -117,6 +117,23 @@ if(. && !play_soundeffect) playsound(QDELETED(src) ? obj_turf : src, 'sound/effects/meteorimpact.ogg', 100, TRUE) +/obj/handle_basic_attack(mob/living/basic/attacker, modifiers) + if((attacker.a_intent == INTENT_HELP && attacker.ckey) || attacker.melee_damage_upper == 0) + attacker.custom_emote(EMOTE_VISIBLE, "[attacker.friendly_verb_continuous] [src].") + return FALSE + else + var/play_soundeffect = TRUE + if(attacker.environment_smash) + play_soundeffect = FALSE + var/obj_turf = get_turf(src) // play from the turf in case the object gets deleted mid attack + if(attacker.obj_damage) + . = attack_generic(attacker, attacker.obj_damage, attacker.melee_damage_type, MELEE, play_soundeffect, attacker.armour_penetration_flat, attacker.armour_penetration_percentage) + else + . = attack_generic(attacker, rand(attacker.melee_damage_lower, attacker.melee_damage_upper), attacker.melee_damage_type, MELEE, play_soundeffect, attacker.armour_penetration_flat, attacker.armour_penetration_percentage) + if(. && !play_soundeffect) + playsound(QDELETED(src) ? obj_turf : src, 'sound/effects/meteorimpact.ogg', 100, TRUE) + return TRUE + /obj/force_pushed(atom/movable/pusher, force = MOVE_FORCE_DEFAULT, direction) return TRUE diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index e41215c7684..eb6af458257 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -66,6 +66,19 @@ take_damage(rand(5,10), BRUTE, MELEE, 1) +/obj/structure/grille/handle_basic_attack(mob/living/basic/attacker, modifiers) + . = ..() + if(!. || QDELETED(src) || shock(attacker, 70)) + return + + if(attacker.environment_smash >= ENVIRONMENT_SMASH_STRUCTURES) + playsound(src, 'sound/effects/grillehit.ogg', 80, TRUE) + obj_break() + attacker.visible_message("[attacker] smashes through [src]!", "You smash through [src].") + return + + take_damage(rand(5, 10), BRUTE, MELEE, 1) + /obj/structure/grille/hulk_damage() return 60 diff --git a/code/game/objects/structures/monster_spawner.dm b/code/game/objects/structures/monster_spawner.dm index d5d69be47e9..498ebfdc9df 100644 --- a/code/game/objects/structures/monster_spawner.dm +++ b/code/game/objects/structures/monster_spawner.dm @@ -41,7 +41,7 @@ max_integrity = 150 max_mobs = 15 spawn_time = 150 - mob_types = list(/mob/living/simple_animal/hostile/skeleton) + mob_types = list(/mob/living/basic/skeleton) spawn_text = "climbs out of" faction = list("skeleton") diff --git a/code/modules/events/demon_incursion.dm b/code/modules/events/demon_incursion.dm new file mode 100644 index 00000000000..738313e4e35 --- /dev/null +++ b/code/modules/events/demon_incursion.dm @@ -0,0 +1,272 @@ +/datum/event/demon_incursion + name = "demon incursion" + /// Corresponds to the number of process() runs the event has lasted for. Roughly 2 minutes here. + announceWhen = 60 + /// Corresponds to the number of process() runs the event has lasted for. Roughly 2 minutes here. + endWhen = 60 + /// The name of the notification for dchat + var/notify_title = "Demonic Incursion" + /// The icon of the notification + var/notify_image = "nether" + /// List of portals + var/list/portal_list = list() + /// The target number of portals + var/target_portals = 100 + +/datum/event/demon_incursion/setup() + impact_area = findEventArea() + +/datum/event/demon_incursion/start() + if(isnull(impact_area)) + log_debug("No valid event areas could be generated for demonic incursion.") + var/initial_portals = max(length(GLOB.crew_list) / 10, 1) + target_portals = max(initial_portals * 10, 30) + var/list/area_turfs = get_area_turfs(impact_area) + var/notice_sent = FALSE + while(length(area_turfs) && initial_portals > 0) + var/turf/T = pick_n_take(area_turfs) + if(T.is_blocked_turf(exclude_mobs = TRUE)) + continue + + // Give ghosts some time to jump there before it begins. + var/image/alert_overlay = image('icons/mob/nest.dmi', notify_image) + if(!notice_sent) + notify_ghosts("\A [src] is about to open in [get_area(T)].", title = notify_title, source = T, alert_overlay = alert_overlay, flashwindow = FALSE, action = NOTIFY_FOLLOW) + notice_sent = TRUE + addtimer(CALLBACK(src, PROC_REF(spawn_portal), T), 4 SECONDS) + + // Energy overload; we mess with machines as an early warning and for extra spookiness. + for(var/obj/machinery/M in range(8, T)) + INVOKE_ASYNC(M, TYPE_PROC_REF(/atom, get_spooked)) + + initial_portals-- + + if(initial_portals > 0) + log_debug("demonic incursion failed to find a valid turf in [impact_area]") + + SSticker.record_biohazard_start(INCURSION_DEMONS) + SSevents.biohazards_this_round += INCURSION_DEMONS + +/datum/event/demon_incursion/proc/spawn_portal(location) + var/obj/structure/spawner/nether/demon_incursion/new_portal = new /obj/structure/spawner/nether/demon_incursion(location) + new_portal.linked_incursion = src + portal_list += new_portal + // Too many portals - make a bad thing happen + if(length(portal_list) > target_portals) + target_portals *= 2 + prepare_spawn_elite() + +/datum/event/demon_incursion/proc/prepare_spawn_elite() + var/obj/structure/spawner/nether/demon_incursion/elite_portal = pick(portal_list) + elite_portal.visible_message("Something within [elite_portal] stirs...") + var/list/potentialspawns = list(/mob/living/simple_animal/hostile/asteroid/elite/broodmother, + /mob/living/simple_animal/hostile/asteroid/elite/pandora, + /mob/living/simple_animal/hostile/asteroid/elite/legionnaire, + /mob/living/simple_animal/hostile/asteroid/elite/herald) + var/selected_elite = pick(potentialspawns) + addtimer(CALLBACK(src, PROC_REF(spawn_elite), null, elite_portal, selected_elite), 10 SECONDS) + +/datum/event/demon_incursion/proc/spawn_elite(mob/dead/observer/elitemind, obj/structure/spawner/nether/demon_incursion/elite_portal, selected_elite) + var/mob/living/simple_animal/hostile/asteroid/elite/created_mob = new selected_elite(elite_portal.loc) + created_mob.faction = list("nether") + elite_portal.visible_message("[created_mob] emerges from [elite_portal]!") + notify_ghosts("\A [created_mob] has emerged from an incursion portal in \the [get_area(src)]!", enter_link="(Click to help)", source = created_mob, action = NOTIFY_FOLLOW) + qdel(elite_portal) + playsound(created_mob.loc,'sound/effects/phasein.ogg', 200, FALSE, 50, TRUE, TRUE) + +/datum/event/demon_incursion/announce(false_alarm) + var/area/target_area = impact_area + if(!target_area) + if(false_alarm) + target_area = findEventArea() + if(isnull(target_area)) + log_debug("Tried to announce a false-alarm tear without a valid area!") + kill() + return + else + log_debug("Tried to announce an incursion without a valid area!") + kill() + return + + GLOB.major_announcement.Announce("Major bluespace energy spike detected at [target_area.name]. Extradimensional intruder alert. All personnel must prevent the incursion before the station is destroyed.", "Demonic Incursion Alert", 'sound/effects/siren-spooky.ogg', new_sound2 = 'sound/AI/outbreak_demon.ogg') + +/obj/structure/spawner/nether/demon_incursion + name = "demonic portal" + density = FALSE + layer = ABOVE_LYING_MOB_LAYER // Portals are below living mobs, but layer over dead ones + spawn_time = 5 SECONDS // Short spawn time initially, it gets updated after it spawns initial mobs + max_mobs = 5 // We want a lot of mobs, but not too many + max_integrity = 200 + mob_types = list(/mob/living/basic/netherworld/migo, + /mob/living/basic/netherworld, + /mob/living/basic/netherworld/blankbody, + /mob/living/basic/hellhound, + /mob/living/basic/skeleton, + /mob/living/basic/netherworld/faithless) + icon = 'icons/obj/structures/portal.dmi' + icon_state = "portal" + light_range = 4 + light_power = 2 + light_color = "#780606" + spawner_type = /datum/component/spawner/demon_incursion_portal + /// The event that spawned this portal + var/datum/event/demon_incursion/linked_incursion + /// Percentage chance that a portal will spread every time spread() is called + var/portal_spread_chance = 50 + /// Lowest possible spread chance + var/min_spread_chance = 10 + /// Lower bound for portal spreading + var/portal_spread_cooldown_min = 3 MINUTES + /// Upper bound for portal spreading + var/portal_spread_cooldown_max = 4 MINUTES + /// Time until next portal + var/expansion_delay + /// How fast does the portal spawn mobs after the initial spawns? + var/spawn_rate = 30 SECONDS + /// How many initial mobs does it spawn? + var/initial_spawns_min = 1 + var/initial_spawns_max = 4 + /// Are we spawning initial mobs? + var/spawning_initial_mobs = TRUE + /// Current tile spread distance + var/tile_spread = 1 + /// Max tile Spread distance + var/tile_spread_max = 3 + /// Turf type that is spread by the portals + var/turf_to_spread = /turf/simulated/floor/engine/cult/demon_incursion + /// How long of a cooldown on portal repair + var/portal_repair_cooldown = 15 SECONDS + COOLDOWN_DECLARE(portal_repair) + +/obj/structure/spawner/nether/demon_incursion/Initialize(mapload) + . = ..() + expansion_delay = rand(portal_spread_cooldown_min, portal_spread_cooldown_max) + addtimer(CALLBACK(src, PROC_REF(spread)), expansion_delay) + var/initial_spawns = rand(initial_spawns_min, initial_spawns_max) + var/initial_spawn_time = spawn_time * initial_spawns - 1 + addtimer(CALLBACK(src, PROC_REF(stop_initial_mobs)), initial_spawn_time) + if(turf_to_spread) + spread_turf() + SSticker.mode.incursion_portals += src + +/obj/structure/spawner/nether/demon_incursion/examine(mob/user) + . = ..() + if(COOLDOWN_FINISHED(src, portal_repair) && obj_integrity < max_integrity) + . += "Dark tendrils are stabilizing the portal!" + +/obj/structure/spawner/nether/demon_incursion/process() + . = ..() + if(!spawning_initial_mobs) + update_spawn_time() + if(!COOLDOWN_FINISHED(src, portal_repair)) + return + if(obj_integrity >= max_integrity) + return + obj_integrity += 5 + new /obj/effect/temp_visual/heal(loc, COLOR_BLOOD_MACHINE) + +/obj/structure/spawner/nether/demon_incursion/deconstruct(disassembled) + var/datum/component/spawner/spawn_comp = GetComponent(/datum/component/spawner) + for(var/mob/living/basic/summoned_mob in spawn_comp.spawned_mobs) + if(prob(50)) + playsound(src, 'sound/magic/lightningbolt.ogg', 60, TRUE) + Beam(summoned_mob, icon_state = "purple_lightning", icon = 'icons/effects/effects.dmi', time = 1 SECONDS) + summoned_mob.addtimer(CALLBACK(summoned_mob, TYPE_PROC_REF(/mob/living/basic, gib)), 1 SECONDS) + var/reward_type = pick(/obj/item/stack/ore/bluespace_crystal, /obj/item/stack/ore/palladium, /obj/item/stack/ore/platinum, /obj/item/stack/ore/iridium, /obj/item/stack/ore/diamond) + var/obj/item/stack/ore/reward = new reward_type(loc) + reward.amount = 2 + if(linked_incursion) + linked_incursion.portal_list -= src + if(!length(linked_incursion.portal_list)) + playsound(src, 'sound/misc/demon_dies.ogg', 100, TRUE, ignore_walls = TRUE) + SSticker.mode.incursion_portals -= src + return ..() + +/obj/structure/spawner/nether/demon_incursion/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration_flat, armour_penetration_percentage) + . = ..() + COOLDOWN_START(src, portal_repair, portal_repair_cooldown) + +/obj/structure/spawner/nether/demon_incursion/on_mob_spawn(mob/created_mob) + . = ..() + created_mob.Move(get_step(created_mob.loc, pick(GLOB.alldirs))) + var/mob/living/basic/new_mob = created_mob + if(!istype(new_mob, /mob/living/basic)) + return + if(new_mob.basic_mob_flags & DEL_ON_DEATH) + return + new_mob.AddComponent(/datum/component/incursion_mob_death) + +/obj/structure/spawner/nether/demon_incursion/attacked_by(obj/item/attacker, mob/living/user) + . = ..() + SEND_SIGNAL(src, COMSIG_SPAWNER_SET_TARGET, user) + +/obj/structure/spawner/nether/demon_incursion/bullet_act(obj/item/projectile/P) + . = ..() + if(P.firer) + SEND_SIGNAL(src, COMSIG_SPAWNER_SET_TARGET, P.firer) + +/obj/structure/spawner/nether/demon_incursion/proc/update_spawn_time() + var/datum/component/spawner/spawn_comp = GetComponent(/datum/component/spawner) + var/spawn_increment = 0 + for(var/mob/living/mob as anything in spawn_comp.spawned_mobs) + spawn_increment += 5 SECONDS + spawn_comp.spawn_time = spawn_time + spawn_increment + +/obj/structure/spawner/nether/demon_incursion/proc/spread() + + var/base_portal_count = max(length(GLOB.crew_list) / 10, 1) + if(length(linked_incursion.portal_list) <= base_portal_count) + portal_spread_chance = 100 + else + // Spread chance runs on an exponential regression formula when above the base portal count. + var/log_value = (50 - min_spread_chance) / (100 - min_spread_chance) + var/midpoint = -(log(log_value) / base_portal_count) + var/euler_exponent = 2.71828 ** (-midpoint * (length(linked_incursion.portal_list) - base_portal_count)) + portal_spread_chance = min_spread_chance + ((100 - min_spread_chance) * euler_exponent) + expansion_delay = rand(portal_spread_cooldown_min, portal_spread_cooldown_max) + if(!prob(portal_spread_chance)) + addtimer(CALLBACK(src, PROC_REF(spread)), expansion_delay) + return + var/list/spawnable_turfs = list() + for(var/turf/simulated/floor/possible_loc in orange(8, src.loc)) + if(!istype(possible_loc)) + continue + if(istype(get_area(possible_loc), /area/space)) + continue + if(possible_loc.is_blocked_turf(exclude_mobs = TRUE)) + continue + var/density_check = TRUE + for(var/turf/possible_turf in view(3, possible_loc)) + if(locate(/obj/structure/spawner/nether/demon_incursion) in possible_turf) + density_check = FALSE + continue + if(!density_check) + continue + spawnable_turfs += possible_loc + if(!spawnable_turfs) + return + var/turf/spawn_loc = pick_n_take(spawnable_turfs) + linked_incursion.spawn_portal(spawn_loc) + addtimer(CALLBACK(src, PROC_REF(spread)), expansion_delay) + return + +/obj/structure/spawner/nether/demon_incursion/proc/stop_initial_mobs() + spawning_initial_mobs = FALSE + spawn_time = spawn_rate + update_spawn_time() + +/obj/structure/spawner/nether/demon_incursion/proc/spread_turf() + for(var/turf/spread_turf in range(tile_spread, loc)) + if(isfloorturf(spread_turf) && !istype(spread_turf, turf_to_spread)) + spread_turf.ChangeTurf(turf_to_spread) + Beam(spread_turf, icon_state = "sendbeam", icon = 'icons/effects/effects.dmi', time = 0.5 SECONDS) + if(tile_spread < tile_spread_max) + tile_spread++ + addtimer(CALLBACK(src, PROC_REF(spread_turf)), spawn_rate) + +/turf/simulated/floor/engine/cult/demon_incursion + name = "hellish flooring" + +/turf/simulated/floor/engine/cult/demon_incursion/Initialize(mapload) + . = ..() + icon_state = "culthell" // Cult floors auto adjust. This forces it to be the hell variant diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index 271f68c9f52..7a799f0480c 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -207,6 +207,7 @@ GLOBAL_LIST_EMPTY(event_last_fired) new /datum/event_meta(EVENT_LEVEL_MAJOR, "Terror Spiders", /datum/event/spider_terror, 15, list(ASSIGNMENT_SECURITY = 3), TRUE), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Slaughter Demon", /datum/event/spawn_slaughter, 20, is_one_shot = TRUE), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Shadow Demon", /datum/event/spawn_slaughter/shadow, 20, is_one_shot = TRUE), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Demonic Incursion", /datum/event/demon_incursion, 20, list(ASSIGNMENT_SECURITY = 3)), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Immovable Rod", /datum/event/immovable_rod, 0, list(ASSIGNMENT_ENGINEER = 10), TRUE) //new /datum/event_meta(EVENT_LEVEL_MAJOR, "Floor Cluwne", /datum/event/spawn_floor_cluwne, 15, is_one_shot = TRUE) //new /datum/event_meta(EVENT_LEVEL_MAJOR, "Pulse Demon Infiltration", /datum/event/spawn_pulsedemon, 20, is_one_shot = TRUE) diff --git a/code/modules/events/tear.dm b/code/modules/events/tear.dm index 66f7fabe4de..a61ecda9b11 100644 --- a/code/modules/events/tear.dm +++ b/code/modules/events/tear.dm @@ -73,15 +73,15 @@ pixel_x = -106 pixel_y = -96 /// What the leader of the dimensional tear will be - var/leader = /mob/living/simple_animal/hostile/hellhound/tear + var/leader = /mob/living/basic/hellhound/tear var/spawn_max = 0 var/spawn_total = 0 var/list/possible_mobs = list( - /mob/living/simple_animal/hostile/hellhound, - /mob/living/simple_animal/hostile/skeleton, - /mob/living/simple_animal/hostile/netherworld, - /mob/living/simple_animal/hostile/netherworld/migo, - /mob/living/simple_animal/hostile/faithless) + /mob/living/basic/hellhound, + /mob/living/basic/skeleton, + /mob/living/basic/netherworld/, + /mob/living/basic/netherworld/migo, + /mob/living/basic/netherworld/faithless) /obj/effect/tear/Initialize(mapload) . = ..() @@ -107,6 +107,7 @@ if(!leader) return var/mob/M = new leader(get_turf(src)) + M.faction = list("rift") playsound(M, 'sound/goonstation/voice/growl2.ogg', 100) visible_message("With a terrifying growl, \a [M] steps out of the portal!") diff --git a/code/modules/mob/living/basic/basic_mob.dm b/code/modules/mob/living/basic/basic_mob.dm index a9c2a7ea8f3..429f276be59 100644 --- a/code/modules/mob/living/basic/basic_mob.dm +++ b/code/modules/mob/living/basic/basic_mob.dm @@ -20,6 +20,7 @@ RESTRICT_TYPE(/mob/living/basic) desc = "If you can see this, make an issue report on GitHub." healable = TRUE icon = 'icons/mob/animal.dmi' + hud_type = /datum/hud/simple_animal var/basic_mob_flags @@ -30,6 +31,8 @@ RESTRICT_TYPE(/mob/living/basic) var/icon_living /// Icon when the animal is dead. var/icon_dead + /// Icon when the animal is resting + var/icon_resting /// We only try to show a gibbing animation if this exists. var/icon_gib /// The sound played on death @@ -129,14 +132,27 @@ RESTRICT_TYPE(/mob/living/basic) var/melee_damage_upper = 0 /// How much damage this simple animal does to objects, if any var/obj_damage = 0 + /// What can this mob break? + var/environment_smash = ENVIRONMENT_SMASH_NONE /// Flat armour reduction, occurs after percentage armour penetration. var/armour_penetration_flat = 0 /// Percentage armour reduction, happens before flat armour reduction. var/armour_penetration_percentage = 0 /// Damage type of a simple mob's melee attack, should it do damage. var/melee_damage_type = BRUTE - /// How often can you melee attack? - var/melee_attack_cooldown = 2 SECONDS + /// Lower bound for melee attack cooldown + var/melee_attack_cooldown_min = 2 SECONDS + /// Upper bound for melee attack cooldown + var/melee_attack_cooldown_max = 2 SECONDS + + /// Loot this mob drops on death. + var/list/loot = list() + + /// Compatibility with mob spawners + var/datum/component/spawner/nest + + /// Footsteps + var/step_type /mob/living/basic/Initialize(mapload) . = ..() @@ -146,6 +162,14 @@ RESTRICT_TYPE(/mob/living/basic) apply_atmos_requirements() apply_temperature_requirements() + if(step_type) + AddComponent(/datum/component/footstep, step_type) + +/mob/living/basic/Destroy() + if(nest) + nest.spawned_mobs -= src + nest = null + return ..() /mob/living/basic/movement_delay() . = speed @@ -198,6 +222,7 @@ RESTRICT_TYPE(/mob/living/basic) /mob/living/basic/proc/early_melee_attack(atom/target, list/modifiers, ignore_cooldown = FALSE) face_atom(target) if(!ignore_cooldown) + var/melee_attack_cooldown = rand(melee_attack_cooldown_min, melee_attack_cooldown_max) changeNext_move(melee_attack_cooldown) if(SEND_SIGNAL(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, target, Adjacent(target), modifiers) & COMPONENT_HOSTILE_NO_ATTACK) return FALSE @@ -233,6 +258,10 @@ RESTRICT_TYPE(/mob/living/basic) . = ..() if(!.) return FALSE + if(nest) + nest.spawned_mobs -= src + nest = null + drop_loot() if(!gibbed) if(death_sound) playsound(get_turf(src), death_sound, 200, 1) @@ -302,6 +331,24 @@ RESTRICT_TYPE(/mob/living/basic) apply_damage(damage, damagetype, null, getarmor(null, armorcheck)) return TRUE + +/mob/living/basic/handle_basic_attack(mob/living/basic/attacker, modifiers) + . = ..() + if(.) + var/damage = rand(attacker.melee_damage_lower, attacker.melee_damage_upper) + return attack_threshold_check(damage, attacker.melee_damage_type) + +/mob/living/basic/on_lying_down(new_lying_angle) + ..() + if(icon_resting && stat != DEAD) + icon_state = icon_resting + ADD_TRAIT(src, TRAIT_IMMOBILIZED, LYING_DOWN_TRAIT) //simple mobs cannot crawl (unless they can) + +/mob/living/basic/on_standing_up() + ..() + if(icon_resting && stat != DEAD) + icon_state = icon_living + // Health/Damage adjustment, cribbed straight from simplemobs /mob/living/basic/adjustHealth(amount, updating_health = TRUE) @@ -333,3 +380,8 @@ RESTRICT_TYPE(/mob/living/basic) /mob/living/basic/adjustStaminaLoss(amount, updating_health = TRUE) if(damage_coeff[STAMINA]) return ..(amount * damage_coeff[STAMINA], updating_health) + +/mob/living/basic/proc/drop_loot() + if(length(loot)) + for(var/item in loot) + new item(get_turf(src)) diff --git a/code/modules/mob/living/basic/farm_animals/deer_ai.dm b/code/modules/mob/living/basic/farm_animals/deer_ai.dm index 78010e9b069..f486a7e7cf3 100644 --- a/code/modules/mob/living/basic/farm_animals/deer_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/deer_ai.dm @@ -145,3 +145,9 @@ controller.set_blackboard_key(BB_DEER_RESTING, world.time + 15 SECONDS) controller.set_blackboard_key(BB_DEER_NEXT_REST_TIMER, world.time + rand(minimum_time, maximum_time)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/datum/ai_behavior/return_home/incursion_portal + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT + +/datum/ai_behavior/return_home/incursion_portal/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + return AI_BEHAVIOR_SUCCEEDED diff --git a/code/modules/mob/living/simple_animal/hostile/hellhound.dm b/code/modules/mob/living/basic/hostile/hellhound.dm similarity index 60% rename from code/modules/mob/living/simple_animal/hostile/hellhound.dm rename to code/modules/mob/living/basic/hostile/hellhound.dm index a9c237f7498..9d0927d7232 100644 --- a/code/modules/mob/living/simple_animal/hostile/hellhound.dm +++ b/code/modules/mob/living/basic/hostile/hellhound.dm @@ -1,5 +1,4 @@ -// Hellhound -/mob/living/simple_animal/hostile/hellhound +/mob/living/basic/hellhound // Sprites by FoS: https://www.paradisestation.org/forum/profile/335-fos name = "lesser hellhound" desc = "A demonic-looking black canine monster with glowing red eyes and sharp teeth. A firey, lava-like substance drips from it." @@ -8,55 +7,46 @@ icon_dead = "hellhound_dead" icon_resting = "hellhound_rest" mob_biotypes = MOB_ORGANIC | MOB_BEAST - 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 melee_damage_lower = 10 // slightly higher than araneus melee_damage_upper = 30 + melee_attack_cooldown_min = 1.5 SECONDS + melee_attack_cooldown_max = 2.5 SECONDS + environment_smash = ENVIRONMENT_SMASH_STRUCTURES a_intent = INTENT_HARM - environment_smash = 1 - speak_chance = 0 speed = 0 maxHealth = 250 // same as sgt araneus health = 250 obj_damage = 50 - robust_searching = TRUE - stat_attack = UNCONSCIOUS - attacktext = "savages" + attack_verb_continuous = "savages" + attack_verb_simple = "savage" attack_sound = 'sound/effects/bite.ogg' speak_emote = list("growls") see_in_dark = 9 universal_understand = TRUE - wander = FALSE - var/life_regen_cycles = 0 - var/life_regen_cycle_trigger = 10 // heal once for every X number of cycles spent resting - var/life_regen_amount = -10 // negative, because negative = healing - var/smoke_lastuse = 0 - var/smoke_freq = 300 // 30 seconds - footstep_type = FOOTSTEP_MOB_CLAW + ai_controller = /datum/ai_controller/basic_controller/simple/hellhound + step_type = FOOTSTEP_MOB_CLAW + faction = list("nether") + 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) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAM = 0, OXY = 1) + gold_core_spawnable = HOSTILE_SPAWN contains_xeno_organ = TRUE - ignore_generic_organs = TRUE surgery_container = /datum/xenobiology_surgery_container/hound + /// How many cycles has the hellhound rested + var/life_regen_cycles = 0 + /// Trigger number for health regen + var/life_regen_cycle_trigger = 10 + /// How much is healed when regenerating + var/life_regen_amount = -10 // negative, because negative = healing + /// When did the hellhound last use smoke + var/smoke_lastuse = 0 + /// How often can the hellhound use smoke + var/smoke_freq = 30 SECONDS -/mob/living/simple_animal/hostile/hellhound/Initialize(mapload) +/mob/living/basic/hellhound/Initialize(mapload) . = ..() - var/datum/action/innate/demon_whisper/whisper_action = new - whisper_action.Grant(src) - ADD_TRAIT(src, TRAIT_NOBREATH, SPECIES_TRAIT) + AddElement(/datum/element/ai_retaliate) -/mob/living/simple_animal/hostile/hellhound/handle_automated_action() - if(!..()) - return - if(IS_HORIZONTAL(src)) - if(!wants_to_rest()) - custom_emote(EMOTE_VISIBLE, "growls, and gets up.") - playsound(get_turf(src), 'sound/hallucinations/growl2.ogg', 50, 1) - stand_up() - else if(wants_to_rest()) - custom_emote(EMOTE_VISIBLE, "lays down, and starts to lick their wounds.") - lay_down() - -/mob/living/simple_animal/hostile/hellhound/examine(mob/user) +/mob/living/basic/hellhound/examine(mob/user) . = ..() if(stat != DEAD) var/list/msgs = list() @@ -77,34 +67,31 @@ msgs += "It is currently resting." . += msgs.Join("
") -/mob/living/simple_animal/hostile/hellhound/Life(seconds, times_fired) +/mob/living/basic/hellhound/Move(atom/newloc, direct, glide_size_override, update_dir) . = ..() - if(stat != DEAD && IS_HORIZONTAL(src) && (getBruteLoss() || getFireLoss())) - if(life_regen_cycles >= life_regen_cycle_trigger) - life_regen_cycles = 0 - to_chat(src, "You lick your wounds, helping them close.") - adjustBruteLoss(life_regen_amount) - adjustFireLoss(life_regen_amount) - else - life_regen_cycles++ + if(IS_HORIZONTAL(src)) + stand_up() -/mob/living/simple_animal/hostile/hellhound/proc/wants_to_rest() - if(target) - return FALSE - if(getBruteLoss() || getFireLoss()) - return TRUE - return FALSE +/mob/living/basic/hellhound/Life(seconds, times_fired) + . = ..() + if(stat != DEAD && (getBruteLoss() || getFireLoss())) + if(IS_HORIZONTAL(src)) + if(life_regen_cycles >= life_regen_cycle_trigger) + life_regen_cycles = 0 + to_chat(src, "You lick your wounds, helping them close.") + adjustBruteLoss(life_regen_amount) + adjustFireLoss(life_regen_amount) + else + life_regen_cycles++ + if(ai_controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) + stand_up() -/mob/living/simple_animal/hostile/hellhound/attacked_by(obj/item/attacker, mob/living/user) - if(..()) - return FINISH_ATTACK +/mob/living/basic/hellhound/apply_damage(damage, damagetype, def_zone, blocked, sharp, used_weapon, spread_damage) + . = ..() + if(stat != DEAD && IS_HORIZONTAL(src)) + stand_up() - if(target && isliving(target)) - var/mob/living/L = target - if(L.stat != CONSCIOUS) - target = user - -/mob/living/simple_animal/hostile/hellhound/greater +/mob/living/basic/hellhound/greater name = "greater hellhound" desc = "A demonic-looking black canine monster with glowing red eyes and sharp teeth. Greater hounds are far stronger than their lesser kin, and should be engaged with extreme caution." icon_state = "hellhoundgreater" @@ -114,13 +101,12 @@ health = 400 force_threshold = 5 // no punching universal_speak = TRUE - smoke_freq = 200 + smoke_freq = 20 SECONDS life_regen_cycle_trigger = 5 melee_damage_lower = 20 melee_damage_upper = 30 - environment_smash = 2 -/mob/living/simple_animal/hostile/hellhound/greater/Initialize(mapload) +/mob/living/basic/hellhound/greater/Initialize(mapload) . = ..() // Movement AddSpell(new /datum/spell/ethereal_jaunt/shift) @@ -140,16 +126,16 @@ var/datum/spell/aoe/conjure/creature/summonspell = new summonspell.base_cooldown = 1 summonspell.invocation_type = "none" - summonspell.summon_type = list(/mob/living/simple_animal/hostile/hellhound) + summonspell.summon_type = list(/mob/living/basic/hellhound) summonspell.summon_amt = 1 AddSpell(summonspell) -/mob/living/simple_animal/hostile/hellhound/greater/AttackingTarget() +/mob/living/basic/hellhound/greater/melee_attack(atom/target, list/modifiers, ignore_cooldown) . = ..() if(. && ishuman(target) && (!client || a_intent == INTENT_HARM)) special_aoe() -/mob/living/simple_animal/hostile/hellhound/greater/proc/special_aoe() +/mob/living/basic/hellhound/greater/proc/special_aoe() if(world.time < (smoke_lastuse + smoke_freq)) return smoke_lastuse = world.time @@ -157,10 +143,9 @@ smoke.set_up(10, FALSE, loc) smoke.start() -/mob/living/simple_animal/hostile/hellhound/tear +/mob/living/basic/hellhound/tear name = "frenzied hellhound" maxHealth = 300 health = 300 melee_damage_lower = 30 melee_damage_upper = 50 - faction = list("rift") diff --git a/code/modules/mob/living/basic/hostile/hellhound_ai.dm b/code/modules/mob/living/basic/hostile/hellhound_ai.dm new file mode 100644 index 00000000000..51b5a0894f2 --- /dev/null +++ b/code/modules/mob/living/basic/hostile/hellhound_ai.dm @@ -0,0 +1,45 @@ +/datum/ai_controller/basic_controller/simple/hellhound + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + ) + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, + /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/hellhound_rest, + /datum/ai_planning_subtree/find_and_hunt_target/prowl, + /datum/ai_planning_subtree/attack_obstacle_in_path/prowl, + ) + +/datum/ai_planning_subtree/hellhound_rest/select_behaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/pawn = controller.pawn + if(pawn.stat == DEAD) + return + + if(pawn.getBruteLoss() || pawn.getFireLoss()) + controller.queue_behavior(/datum/ai_behavior/hellhound_rest) + return SUBTREE_RETURN_FINISH_PLANNING + else + controller.queue_behavior(/datum/ai_behavior/hellhound_stand) + +/datum/ai_behavior/hellhound_rest + action_cooldown = 2 SECONDS + +/datum/ai_behavior/hellhound_rest/perform(seconds_per_tick, datum/ai_controller/controller, ...) + . = ..() + var/mob/living/basic/hellhound/hound = controller.pawn + if(!IS_HORIZONTAL(hound)) + hound.lay_down() + + return AI_BEHAVIOR_SUCCEEDED + +/datum/ai_behavior/hellhound_stand + action_cooldown = 2 SECONDS + +/datum/ai_behavior/hellhound_stand/perform(seconds_per_tick, datum/ai_controller/controller, ...) + . = ..() + var/mob/living/basic/hellhound/hound = controller.pawn + if(IS_HORIZONTAL(hound)) + hound.stand_up() + + return AI_BEHAVIOR_SUCCEEDED diff --git a/code/modules/mob/living/basic/hostile/skeleton_mob.dm b/code/modules/mob/living/basic/hostile/skeleton_mob.dm new file mode 100644 index 00000000000..54d3c75ac24 --- /dev/null +++ b/code/modules/mob/living/basic/hostile/skeleton_mob.dm @@ -0,0 +1,99 @@ +/mob/living/basic/skeleton + name = "reanimated skeleton" + desc = "A real bonefied skeleton, doesn't seem like it wants to socialize." + icon = 'icons/mob/simple_human.dmi' + icon_state = "skeleton" + icon_living = "skeleton" + speak_emote = list("rattles") + mob_biotypes = MOB_UNDEAD | MOB_HUMANOID + maxHealth = 40 + health = 40 + a_intent = INTENT_HARM + melee_damage_lower = 15 + melee_damage_upper = 15 + harm_intent_damage = 5 + obj_damage = 50 + melee_attack_cooldown_min = 1.5 SECONDS + melee_attack_cooldown_max = 2.5 SECONDS + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + minimum_survivable_temperature = 0 + maximum_survivable_temperature = 1500 + healable = FALSE + attack_verb_simple = "slash" + attack_verb_continuous = "slashes" + attack_sound = 'sound/hallucinations/growl1.ogg' + 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) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAM = 0, OXY = 1) + unsuitable_atmos_damage = 10 + see_in_dark = 8 + faction = list("skeleton") + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + basic_mob_flags = DEL_ON_DEATH + speed = 1 + step_type = FOOTSTEP_MOB_SHOE + gold_core_spawnable = HOSTILE_SPAWN + loot = list(/obj/effect/decal/remains/human) + ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/demonic_incursion + +/mob/living/basic/skeleton/Initialize(mapload) + . = ..() + AddElement(/datum/element/ai_retaliate) + +/mob/living/basic/skeleton/arctic + name = "undead arctic explorer" + desc = "The reanimated remains of some poor traveler." + icon_state = "arctic_skeleton" + icon_living = "arctic_skeleton" + maxHealth = 55 + health = 55 + weather_immunities = list("snow") + gold_core_spawnable = NO_SPAWN + melee_damage_lower = 17 + melee_damage_upper = 20 + death_message = "collapses into a pile of bones, its gear falling to the floor!" + loot = list(/obj/effect/decal/remains/human, + /obj/item/spear, + /obj/item/clothing/shoes/winterboots, + /obj/item/clothing/suit/hooded/wintercoat) + +/mob/living/basic/skeleton/warden + name = "skeleton warden" + desc = "The remains of a warden." + icon = 'icons/mob/simple_human.dmi' + icon_state = "skeleton_warden" + icon_living = "skeleton_warden" + loot = list(/obj/effect/decal/cleanable/shreds, /mob/living/basic/skeleton/angered_warden) + maxHealth = 300 + health = 300 + melee_damage_lower = 15 + melee_damage_upper = 15 + death_message = null + gold_core_spawnable = NO_SPAWN + ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/skeleton_warden + +/mob/living/basic/skeleton/warden/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) + return TRUE + +/mob/living/basic/skeleton/angered_warden + name = "angered skeleton warden" // round 2 + desc = "An angry skeleton." + icon = 'icons/mob/simple_human.dmi' + icon_state = "skeleton_warden_alt" + icon_living = "skeleton_warden_alt" + attack_verb_simple = "claw" + attack_verb_continuous = "claws" + attack_sound = 'sound/hallucinations/growl1.ogg' + maxHealth = 200 + health = 200 + speed = -1 + melee_damage_lower = 30 + melee_damage_upper = 30 + loot = list(/obj/effect/decal/remains/human, /obj/item/clothing/head/warden, /obj/item/card/sec_shuttle_ruin) + gold_core_spawnable = NO_SPAWN + ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/skeleton_warden + +/mob/living/basic/skeleton/angered_warden/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) + return TRUE + +/datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/skeleton_warden + idle_behavior = null // Don't idly wander diff --git a/code/modules/mob/living/basic/nether_mobs/blankbody.dm b/code/modules/mob/living/basic/nether_mobs/blankbody.dm new file mode 100644 index 00000000000..2e06b93219d --- /dev/null +++ b/code/modules/mob/living/basic/nether_mobs/blankbody.dm @@ -0,0 +1,26 @@ +/mob/living/basic/netherworld/blankbody + name = "blank body" + desc = "This looks human enough, but its flesh has an ashy texture, and it's face is featureless save an eerie smile." + icon_state = "blank-body" + icon_living = "blank-body" + icon_dead = "blank-dead" + health = 100 + maxHealth = 100 + obj_damage = 50 + melee_damage_lower = 5 + melee_damage_upper = 10 + attack_verb_continuous = "punches" + attack_verb_simple = "punch" + attack_sound = 'sound/weapons/bladeslice.ogg' + melee_attack_cooldown_min = 0.5 SECONDS + melee_attack_cooldown_max = 1.5 SECONDS + speak_emote = list("screams") + death_message = "falls apart into a fine dust." + /// The body/brain of the player turned into a blank, if the blank was turned + var/mob/living/held_body + +/mob/living/basic/netherworld/blankbody/death(gibbed) + . = ..() + if(held_body) + held_body.forceMove(loc) + qdel(src) diff --git a/code/modules/mob/living/basic/nether_mobs/faithless.dm b/code/modules/mob/living/basic/nether_mobs/faithless.dm new file mode 100644 index 00000000000..8943d267e48 --- /dev/null +++ b/code/modules/mob/living/basic/nether_mobs/faithless.dm @@ -0,0 +1,23 @@ +/mob/living/basic/netherworld/faithless + name = "Faithless" + desc = "The Wish Granter's faith in humanity, incarnate." + speak_emote = list("wails", "growls") + icon_state = "faithless" + icon_living = "faithless" + icon_dead = "faithless_dead" + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID + maxHealth = 80 + health = 80 + melee_damage_lower = 15 + melee_damage_upper = 15 + harm_intent_damage = 10 + obj_damage = 50 + attack_verb_simple = "grip" + attack_verb_continuous = "grips" + attack_sound = 'sound/hallucinations/growl1.ogg' + speed = 0 + gold_core_spawnable = HOSTILE_SPAWN + faction = "faithless" + +/mob/living/basic/netherworld/faithless/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) + return TRUE diff --git a/code/modules/mob/living/basic/nether_mobs/migo.dm b/code/modules/mob/living/basic/nether_mobs/migo.dm new file mode 100644 index 00000000000..fc1334f2edc --- /dev/null +++ b/code/modules/mob/living/basic/nether_mobs/migo.dm @@ -0,0 +1,197 @@ +/mob/living/basic/netherworld/migo + name = "mi-go" + desc = "A pinkish, fungoid crustacean-like creature with numerous pairs of clawed appendages and a head covered with waving antennae." + speak_emote = list("screams", "clicks", "chitters", "barks", "moans", "growls", "meows", "reverberates", "roars", "squeaks", "rattles", "exclaims", "yells", "remarks", "mumbles", "jabbers", "stutters", "seethes") + icon_state = "mi-go" + icon_living = "mi-go" + icon_dead = "mi-go-dead" + attack_verb_simple = "lacerate" + attack_verb_continuous = "lacerates" + speed = 0 + death_message = "wails as its form turns into a pulpy mush." + death_sound = 'sound/voice/hiss6.ogg' + gold_core_spawnable = HOSTILE_SPAWN + /// List of sounds the migo can make + var/static/list/migo_sounds + /// Will the migo dodge? + var/dodge_prob = 10 + surgery_container = /datum/xenobiology_surgery_container/migo + +/mob/living/basic/netherworld/migo/Initialize(mapload) + . = ..() + migo_sounds = list( + 'sound/items/bubblewrap.ogg', + 'sound/items/change_jaws.ogg', + 'sound/items/crowbar.ogg', + 'sound/items/drink.ogg', + 'sound/items/deconstruct.ogg', + 'sound/items/change_drill.ogg', + 'sound/items/dodgeball.ogg', + 'sound/items/eatfood.ogg', + 'sound/items/screwdriver.ogg', + 'sound/items/weeoo1.ogg', + 'sound/items/wirecutter.ogg', + 'sound/items/welder.ogg', + 'sound/items/zip.ogg', + 'sound/items/rped.ogg', + 'sound/items/ratchet.ogg', + 'sound/items/polaroid1.ogg', + 'sound/items/pshoom.ogg', + 'sound/items/airhorn.ogg', + 'sound/voice/bcreep.ogg', + 'sound/voice/biamthelaw.ogg', + 'sound/voice/ed209_20sec.ogg', + 'sound/voice/hiss3.ogg', + 'sound/voice/hiss6.ogg', + 'sound/voice/mpatchedup.ogg', + 'sound/voice/mfeelbetter.ogg', + 'sound/weapons/sear.ogg', + 'sound/ambience/antag/tatoralert.ogg', + 'sound/mecha/nominal.ogg', + 'sound/mecha/weapdestr.ogg', + 'sound/mecha/critdestr.ogg', + 'sound/mecha/imag_enh.ogg', + 'sound/effects/adminhelp.ogg', + 'sound/effects/alert.ogg', + 'sound/effects/attackblob.ogg', + 'sound/effects/bamf.ogg', + 'sound/effects/blobattack.ogg', + 'sound/effects/break_stone.ogg', + 'sound/effects/bubbles.ogg', + 'sound/effects/bubbles2.ogg', + 'sound/effects/clang.ogg', + 'sound/effects/clownstep2.ogg', + 'sound/effects/dimensional_rend.ogg', + 'sound/effects/doorcreaky.ogg', + 'sound/effects/empulse.ogg', + 'sound/effects/explosionfar.ogg', + 'sound/effects/explosion1.ogg', + 'sound/effects/grillehit.ogg', + 'sound/effects/genetics.ogg', + 'sound/effects/heartbeat.ogg', + 'sound/effects/hyperspace_begin.ogg', + 'sound/effects/hyperspace_end.ogg', + 'sound/goonstation/effects/screech.ogg', + 'sound/effects/phasein.ogg', + 'sound/effects/picaxe1.ogg', + 'sound/effects/sparks1.ogg', + 'sound/effects/smoke.ogg', + 'sound/effects/splat.ogg', + 'sound/effects/snap.ogg', + 'sound/effects/tendril_destroyed.ogg', + 'sound/effects/supermatter.ogg', + 'sound/misc/desceration-01.ogg', + 'sound/misc/desceration-02.ogg', + 'sound/misc/desceration-03.ogg', + 'sound/misc/bloblarm.ogg', + 'sound/goonstation/misc/airraid_loop.ogg', + 'sound/misc/interference.ogg', + 'sound/misc/notice1.ogg', + 'sound/misc/notice2.ogg', + 'sound/misc/sadtrombone.ogg', + 'sound/misc/slip.ogg', + 'sound/weapons/armbomb.ogg', + 'sound/weapons/chainsaw.ogg', + 'sound/weapons/emitter.ogg', + 'sound/weapons/emitter2.ogg', + 'sound/weapons/blade1.ogg', + 'sound/weapons/bladeslice.ogg', + 'sound/weapons/blastcannon.ogg', + 'sound/weapons/blaster.ogg', + 'sound/weapons/bulletflyby3.ogg', + 'sound/weapons/circsawhit.ogg', + 'sound/weapons/cqchit2.ogg', + 'sound/weapons/drill.ogg', + 'sound/weapons/genhit1.ogg', + 'sound/weapons/gunshots/gunshot_silenced.ogg', + 'sound/weapons/gunshots/gunshot.ogg', + 'sound/weapons/handcuffs.ogg', + 'sound/weapons/homerun.ogg', + 'sound/weapons/kenetic_accel.ogg', + 'sound/machines/fryer/deep_fryer_emerge.ogg', + 'sound/machines/airlock_alien_prying.ogg', + 'sound/machines/airlock_close.ogg', + 'sound/machines/airlockforced.ogg', + 'sound/machines/airlock_open.ogg', + 'sound/machines/alarm.ogg', + 'sound/machines/blender.ogg', + 'sound/machines/boltsdown.ogg', + 'sound/machines/boltsup.ogg', + 'sound/machines/buzz-sigh.ogg', + 'sound/machines/buzz-two.ogg', + 'sound/machines/chime.ogg', + 'sound/machines/defib_charge.ogg', + 'sound/machines/defib_failed.ogg', + 'sound/machines/defib_ready.ogg', + 'sound/machines/defib_zap.ogg', + 'sound/machines/deniedbeep.ogg', + 'sound/machines/ding.ogg', + 'sound/machines/disposalflush.ogg', + 'sound/machines/door_close.ogg', + 'sound/machines/door_open.ogg', + 'sound/machines/engine_alert1.ogg', + 'sound/machines/engine_alert2.ogg', + 'sound/machines/hiss.ogg', + 'sound/machines/honkbot_evil_laugh.ogg', + 'sound/machines/juicer.ogg', + 'sound/machines/ping.ogg', + 'sound/ambience/signal.ogg', + 'sound/machines/synth_no.ogg', + 'sound/machines/synth_yes.ogg', + 'sound/machines/terminal_alert.ogg', + 'sound/machines/twobeep.ogg', + 'sound/machines/ventcrawl.ogg', + 'sound/machines/warning-buzzer.ogg', + 'sound/ai/outbreak5.ogg', + 'sound/ai/outbreak7.ogg', + 'sound/ai/alert.ogg', + 'sound/ai/radiation.ogg', + 'sound/ai/eshuttle_call.ogg', + 'sound/ai/eshuttle_dock.ogg', + 'sound/ai/eshuttle_recall.ogg', + 'sound/ai/aimalf.ogg', + 'sound/ambience/ambigen1.ogg', + 'sound/ambience/ambigen3.ogg', + 'sound/ambience/ambigen4.ogg', + 'sound/ambience/ambigen5.ogg', + 'sound/ambience/ambigen6.ogg', + 'sound/ambience/ambigen10.ogg', + 'sound/hallucinations/over_here1.ogg', + 'sound/hallucinations/over_here2.ogg', + 'sound/hallucinations/over_here3.ogg' + ) + +/// Makes the migo more likely to dodge around the more damaged it is +/mob/living/basic/netherworld/migo/proc/update_dodge_chance(health_ratio) + dodge_prob = LERP(50, 10, health_ratio) + +/mob/living/basic/netherworld/migo/proc/make_migo_sound() + playsound(src, pick(migo_sounds), 50, TRUE) + +/mob/living/basic/netherworld/migo/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) + ..() + if(stat) + return + make_migo_sound() + +/mob/living/basic/netherworld/migo/Life() + ..() + if(stat) + return + if(prob(10)) + make_migo_sound() + +/mob/living/basic/netherworld/migo/Move(atom/newloc, dir, step_x, step_y) + if(!ckey && prob(dodge_prob) && moving_diagonally == 0 && isturf(loc) && isturf(newloc)) + return dodge(newloc, dir) + else + return ..() + +/mob/living/basic/netherworld/migo/proc/dodge(moving_to, move_direction) + // Assuming we move towards the target we want to swerve toward them to get closer + var/cdir = turn(move_direction, 45) + var/ccdir = turn(move_direction, -45) + . = Move(get_step(loc, pick(cdir, ccdir))) + if(!.)// Can't dodge there so we just carry on + . = Move(moving_to, move_direction) + diff --git a/code/modules/mob/living/basic/nether_mobs/nether_mobs.dm b/code/modules/mob/living/basic/nether_mobs/nether_mobs.dm new file mode 100644 index 00000000000..3c5b169bcdc --- /dev/null +++ b/code/modules/mob/living/basic/nether_mobs/nether_mobs.dm @@ -0,0 +1,38 @@ +/mob/living/basic/netherworld + name = "creature" + desc = "A sanity-destroying otherthing from the netherworld." + icon_state = "otherthing-pink" + icon_living = "otherthing-pink" + icon_dead = "otherthing-pink-dead" + health = 80 + maxHealth = 80 + obj_damage = 100 + melee_damage_lower = 25 + melee_damage_upper = 50 + melee_attack_cooldown_min = 1.5 SECONDS + melee_attack_cooldown_max = 2.5 SECONDS + environment_smash = ENVIRONMENT_SMASH_STRUCTURES + ai_controller = /datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/demonic_incursion + attack_verb_simple = "chomp" + attack_verb_continuous = "chomps" + attack_sound = 'sound/weapons/bladeslice.ogg' + speak_emote = list("screams") + gold_core_spawnable = HOSTILE_SPAWN + 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) + damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAM = 0, OXY = 1) + faction = list("nether") + contains_xeno_organ = TRUE + surgery_container = /datum/xenobiology_surgery_container/sweating + step_type = FOOTSTEP_MOB_SHOE + /// The chance of it being a grappler variant + var/grappler_chance = 20 + +/mob/living/basic/netherworld/Initialize(mapload) + . = ..() + if(prob(grappler_chance)) + AddComponent(/datum/component/ranged_attacks, projectile_type = /obj/item/projectile/energy/demonic_grappler, projectile_sound = 'sound/weapons/wave.ogg') + name = "grappling " + name + ai_controller = new /datum/ai_controller/basic_controller/simple/simple_skirmisher/demon_incursion(src) + update_appearance(UPDATE_NAME) + color = "#5494DA" + AddElement(/datum/element/ai_retaliate) diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 6b564a9a80b..3d3947cda3e 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -69,3 +69,23 @@ visible_message("[M] punches [src], but doesn't leave a dent.", \ "[M] punches [src], but doesn't leave a dent.") return FALSE + +/mob/living/silicon/handle_basic_attack(mob/living/basic/attacker, modifiers) + . = ..() + if(.) + var/damage = rand(attacker.melee_damage_lower, attacker.melee_damage_upper) + damage = run_armor(damage, attacker.melee_damage_type, MELEE, 0, attacker.armour_penetration_flat, attacker.armour_penetration_percentage) + switch(attacker.melee_damage_type) + if(BRUTE) + adjustBruteLoss(damage) + if(BURN) + adjustFireLoss(damage) + if(TOX) + adjustToxLoss(damage) + if(OXY) + adjustOxyLoss(damage) + if(CLONE) + adjustCloneLoss(damage) + if(STAMINA) + adjustStaminaLoss(damage) + updatehealth() diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 5b919326889..27f880dbb5f 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -123,3 +123,9 @@ else visual_effect_icon = ATTACK_EFFECT_SMASH ..() + +/mob/living/simple_animal/handle_basic_attack(mob/living/basic/attacker, modifiers) + . = ..() + if(.) + var/damage = rand(attacker.melee_damage_lower, attacker.melee_damage_upper) + return attack_threshold_check(damage, attacker.melee_damage_type) diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm deleted file mode 100644 index 22f4b014e19..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ /dev/null @@ -1,34 +0,0 @@ -/mob/living/simple_animal/hostile/faithless - name = "Faithless" - desc = "The Wish Granter's faith in humanity, incarnate." - icon_state = "faithless" - icon_living = "faithless" - icon_dead = "faithless_dead" - mob_biotypes = MOB_ORGANIC | MOB_HUMANOID - speak_chance = 0 - turns_per_move = 5 - response_help = "passes through the" - response_disarm = "shoves" - response_harm = "hits the" - speed = 0 - maxHealth = 80 - health = 80 - obj_damage = 50 - harm_intent_damage = 10 - melee_damage_lower = 15 - melee_damage_upper = 15 - attacktext = "grips" - attack_sound = 'sound/hallucinations/growl1.ogg' - speak_emote = list("growls") - emote_taunt = list("wails") - taunt_chance = 25 - - 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 - - faction = list("faithless") - gold_core_spawnable = HOSTILE_SPAWN - footstep_type = FOOTSTEP_MOB_SHOE - -/mob/living/simple_animal/hostile/faithless/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) - return 1 diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm index dcc173d775a..2c56e03cd5e 100644 --- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm +++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm @@ -1,69 +1,3 @@ -/mob/living/simple_animal/hostile/netherworld - name = "creature" - desc = "A sanity-destroying otherthing from the netherworld." - icon_state = "otherthing-pink" - icon_living = "otherthing-pink" - icon_dead = "otherthing-pink-dead" - health = 80 - maxHealth = 80 - obj_damage = 100 - melee_damage_lower = 25 - melee_damage_upper = 50 - attacktext = "chomps" - attack_sound = 'sound/weapons/bladeslice.ogg' - speak_emote = list("screams") - gold_core_spawnable = HOSTILE_SPAWN - 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 - faction = list("nether") - contains_xeno_organ = TRUE - surgery_container = /datum/xenobiology_surgery_container/sweating - -/mob/living/simple_animal/hostile/netherworld/migo - name = "mi-go" - desc = "A pinkish, fungoid crustacean-like creature with numerous pairs of clawed appendages and a head covered with waving antennae." - speak_emote = list("screams", "clicks", "chitters", "barks", "moans", "growls", "meows", "reverberates", "roars", "squeaks", "rattles", "exclaims", "yells", "remarks", "mumbles", "jabbers", "stutters", "seethes") - icon_state = "mi-go" - icon_living = "mi-go" - icon_dead = "mi-go-dead" - attacktext = "lacerates" - speed = -0.5 - deathmessage = "wails as its form turns into a pulpy mush." - death_sound = 'sound/voice/hiss6.ogg' - surgery_container = /datum/xenobiology_surgery_container/migo - -/mob/living/simple_animal/hostile/netherworld/migo/Initialize(mapload) - . = ..() - -/mob/living/simple_animal/hostile/netherworld/migo/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) - ..() - if(stat) - return - var/chosen_sound = pick(GLOB.migo_sounds) - playsound(src, chosen_sound, 50, TRUE) - -/mob/living/simple_animal/hostile/netherworld/migo/Life() - ..() - if(stat) - return - if(prob(10)) - var/chosen_sound = pick(GLOB.migo_sounds) - playsound(src, chosen_sound, 50, TRUE) - -/mob/living/simple_animal/hostile/netherworld/blankbody - name = "blank body" - desc = "This looks human enough, but its flesh has an ashy texture, and it's face is featureless save an eerie smile." - icon_state = "blank-body" - icon_living = "blank-body" - icon_dead = "blank-dead" - gold_core_spawnable = NO_SPAWN - health = 100 - maxHealth = 100 - melee_damage_lower = 5 - melee_damage_upper = 10 - attacktext = "punches" - deathmessage = "falls apart into a fine dust." - /obj/structure/spawner/nether name = "netherworld link" desc = null //see examine() @@ -73,7 +7,7 @@ max_mobs = 15 icon = 'icons/mob/nest.dmi' spawn_text = "crawls through" - mob_types = list(/mob/living/simple_animal/hostile/netherworld/migo, /mob/living/simple_animal/hostile/netherworld, /mob/living/simple_animal/hostile/netherworld/blankbody) + mob_types = list(/mob/living/basic/netherworld/migo, /mob/living/basic/netherworld, /mob/living/basic/netherworld/blankbody) faction = list("nether") /obj/structure/spawner/nether/Initialize(mapload) @@ -103,9 +37,17 @@ M.adjustBruteLoss(60) new /obj/effect/gibspawner/generic(get_turf(M), M.dna) if(M.stat == DEAD) - var/mob/living/simple_animal/hostile/netherworld/blankbody/blank + var/mob/living/basic/netherworld/blankbody/blank blank = new(loc) blank.name = "[M]" blank.desc = "It's [M], but [M.p_their()] flesh has an ashy texture, and [M.p_their()] face is featureless save an eerie smile." visible_message("[M] reemerges from the link!") - qdel(M) + blank.held_body = M + M.forceMove(blank) + +/obj/structure/spawner/nether/deconstruct(disassembled) + for(var/mob/living/M in contents) + if(M) + M.forceMove(loc) + return ..() + diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm index f67d27cdd21..d1be7e7ae34 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -77,45 +77,6 @@ del_on_death = TRUE footstep_type = FOOTSTEP_MOB_SHOE -/mob/living/simple_animal/hostile/retaliate/skeleton/warden - name = "skeleton warden" - desc = "The remains of a warden." - icon = 'icons/mob/simple_human.dmi' - icon_state = "skeleton_warden" - icon_living = "skeleton_warden" - wander = FALSE - loot = list(/obj/effect/decal/cleanable/shreds, /mob/living/simple_animal/hostile/skeleton/angered_warden) - maxHealth = 300 - health = 300 - melee_damage_lower = 15 - melee_damage_upper = 15 - deathmessage = null - gold_core_spawnable = NO_SPAWN - -/mob/living/simple_animal/hostile/retaliate/skeleton/warden/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) - return TRUE - -/mob/living/simple_animal/hostile/skeleton/angered_warden - name = "angered skeleton warden" //round 2 - desc = "An angry skeleton." - icon = 'icons/mob/simple_human.dmi' - icon_state = "skeleton_warden_alt" - icon_living = "skeleton_warden_alt" - - attacktext = "claws" - attack_sound = 'sound/hallucinations/growl1.ogg' - - maxHealth = 200 - health = 200 - speed = -1 - melee_damage_lower = 30 - melee_damage_upper = 30 - loot = list(/obj/effect/decal/remains/human, /obj/item/clothing/head/warden, /obj/item/card/sec_shuttle_ruin) - gold_core_spawnable = NO_SPAWN - -/mob/living/simple_animal/hostile/skeleton/angered_warden/Process_Spacemove(movement_dir = 0, continuous_move = FALSE) - return TRUE - /mob/living/simple_animal/hostile/retaliate/zombie name = "zombie" icon = 'icons/mob/human.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton_mob.dm b/code/modules/mob/living/simple_animal/hostile/skeleton_mob.dm deleted file mode 100644 index e2baff75166..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/skeleton_mob.dm +++ /dev/null @@ -1,50 +0,0 @@ -/mob/living/simple_animal/hostile/skeleton - name = "reanimated skeleton" - desc = "A real bonefied skeleton, doesn't seem like it wants to socialize." - icon = 'icons/mob/simple_human.dmi' - icon_state = "skeleton" - icon_living = "skeleton" - mob_biotypes = MOB_UNDEAD | MOB_HUMANOID - turns_per_move = 5 - speak_emote = list("rattles") - emote_see = list("rattles") - a_intent = INTENT_HARM - maxHealth = 40 - health = 40 - speed = 1 - harm_intent_damage = 5 - melee_damage_lower = 15 - melee_damage_upper = 15 - minbodytemp = 0 - maxbodytemp = 1500 - healable = FALSE //they're skeletons how would bruise packs help them?? - attacktext = "slashes" - attack_sound = 'sound/hallucinations/growl1.ogg' - 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) - unsuitable_atmos_damage = 10 - robust_searching = TRUE - stat_attack = UNCONSCIOUS - gold_core_spawnable = HOSTILE_SPAWN - faction = list("skeleton") - see_in_dark = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - deathmessage = "collapses into a pile of bones!" - del_on_death = TRUE - loot = list(/obj/effect/decal/remains/human) - -/mob/living/simple_animal/hostile/skeleton/arctic - name = "undead arctic explorer" - desc = "The reanimated remains of some poor traveler." - icon_state = "arctic_skeleton" - icon_living = "arctic_skeleton" - maxHealth = 55 - health = 55 - weather_immunities = list("snow") - gold_core_spawnable = NO_SPAWN - melee_damage_lower = 17 - melee_damage_upper = 20 - deathmessage = "collapses into a pile of bones, its gear falling to the floor!" - loot = list(/obj/effect/decal/remains/human, - /obj/item/spear, - /obj/item/clothing/shoes/winterboots, - /obj/item/clothing/suit/hooded/wintercoat) diff --git a/code/modules/power/engines/singularity/emitter.dm b/code/modules/power/engines/singularity/emitter.dm index fb2e752b5d5..5f74677ae06 100644 --- a/code/modules/power/engines/singularity/emitter.dm +++ b/code/modules/power/engines/singularity/emitter.dm @@ -50,6 +50,7 @@ sparks = new sparks.attach(src) sparks.set_up(5, 1, src) + AddElement(/datum/element/hostile_machine) /obj/machinery/power/emitter/cherenkov icon_state = "emitter_+a" diff --git a/code/modules/projectiles/projectile/special_projectiles.dm b/code/modules/projectiles/projectile/special_projectiles.dm index 7aa798a0fde..e546319f663 100644 --- a/code/modules/projectiles/projectile/special_projectiles.dm +++ b/code/modules/projectiles/projectile/special_projectiles.dm @@ -305,6 +305,24 @@ add_attack_logs(firer, target, "Shot with a [type] [teleport_target ? "(Destination: [teleport_target])" : ""]") return ..() +/obj/item/projectile/energy/demonic_grappler + name = "demonic grappler" + icon_state = "bluespace" + damage = 0 + damage_type = BURN + nodamage = 1 + flag = "energy" + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + +/obj/item/projectile/energy/demonic_grappler/on_hit(atom/target, blocked = 0) + if(isliving(target)) + var/turf/source_turf = get_turf(firer) + do_teleport(target, source_turf) + else + var/turf/miss_turf = get_step(target, get_dir(target, firer)) + do_teleport(firer, miss_turf) + return ..() + /obj/item/projectile/snowball name = "snowball" icon_state = "snowball" diff --git a/icons/obj/structures/portal.dmi b/icons/obj/structures/portal.dmi new file mode 100644 index 0000000000000000000000000000000000000000..00356ea6618cfa9d81e33718b26e9c8b624309a8 GIT binary patch literal 731 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 {i1S5!8W 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 zνOdpZAc=J|$L5T$!`?!cwn%J(<91Iy*fjf6OPN&WTd&kK&3Nd2bqu)V$CzPp`R z4@bhSe@gCrF{@7VtH4QZM8w*X$z$*3-0m=4v36tB)_=&|@ZP0Ax_=@R&9}RzxQ{I7 zbX78Mavi!#Zf)D~>;y$x+1wwR+2AP;`O^=>VC3bXuG8i*!p`Wtjc%1vi(NYm$?D{<&JPPx=!mW=1G?+gq#R zlPa^b{@1QA*GKk7<%rQr*NY(5pH#pJp?`!fqZaY``2wk!BQvJO?ReE)WSJeTpU*v)J#GwRz( zM^NO3k#qPyX4$kUN6EVCW!DF>lNxuEAlA2g?SSccV!s5X)7R0h1y3lmdB!^QFm~&!cp#27n{pv$ zexC)b1bt%r3=eD5p7$4#oQkf;C&njkM=S>@BGeNL61B#CF+ZbMjKe|%99^iS)#(Uk zkoTaV8o-8>nn?!<_-mC~Fg7xNe1-c-s8~ugEx|M^_#KwO0Gw^+Eq8FzWr9rN?%`;E zBv+9gsr|1#gynHk#G3gXo}L((Z}$Y&_jr8`n(1|s_Y5wtID4wXg04?+fC-MqG_R<1!Cxm|C*u!j;lHa;yB#`q~}`7-7Y=8bVY4SXs-3+|H=vO1P}B_Y7$ z`zs+mcW$b03;KQM{@2#ZFZw3HM&L8O)sBc((~!kcVXl_%)K*h!T|$30=AX**+Rn#$ zJ_{mGwI9YzqTr8K5-Geep_r2z6#bQEkts;La(Q{>r^@QH9v*~>#hKf2gem4o5=f}n zGn^z|V0(<9$5ekUX;4aY*g04l5nJc-YCLfs_W@1r&c_yyU7k37cH6Z})9}!$4J3l$ z(%&Q8LwZC|KpDKw{dL2B_Q%N68%nZ647bx~TPjZSc!}QUpW3WQ;EhM-tuBI1W3<0I zsTGB`wlne7<{>5bsx`+_gRA+_!Sq zKq31+d8;0^gzG#tDc5rN7lYjo2L48Ow>54q;Yjs`xsx5?=jD9=r!N^z7)ln~H^SAz z-N!-F$b@4iy!rvK>E@v4dz;ymMo8>57%NV#5bsz;Kc<+|G;<=ugv)4*8{ zE}K@F!{x4;D>xsK4dmp<;TK}m_^JRlPp-_{+jCKcR`&P`Pso5cm(`;{MT~+?m)s@p zjYwJ88sSC0z3mcD<<)@p*TbF#mqxp(vHKB?18ghcxk3hLz7&6wd zt+LS^F~Y^+%@$n!*U<#o^X9O_s#uF#Q?;E=L$FpyBmok$iu;mKK6boy>w!=BR{JpSRlb%NxJT>{m}iGq&za#eK~2Z| zKU|Shp_zT34q3U{Bm2$Bs)>J~ej=lsc@D(JNO>6fqx0>^%D$!F<6r-lo^`#Sly%q} z=OfS96vmmdm-d0Tjr=d;UPFrIoW`F!%<)W_JToE8^CYr{0Cs!C(0Z{6Py>#c9i@0wb~UYrS0sxx=fOlxBY z&;h}iVnJ3Vnflmf_Oixz#|$VmRThp b`UZ%p&I`KRj@3& literal 0 HcmV?d00001