From 32f4007f935ac348fc0470b85998ecc4e3069856 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Thu, 17 Aug 2023 00:26:34 +0200 Subject: [PATCH] [MIRROR] mega arachnid basic monster [MDB IGNORE] (#23135) * mega arachnid basic monster (#77601) ## About The Pull Request the mega arachnid is now a basic monster. he is a very tricky and opportunistic creature he will plan his attacks carefully and only attack the weak. he will first try to throw fleshy legcuffs at his victims, if the victim becomes cuffed he will move in to attack him, otherwise he will run away from him while trying to throw restraints at his legs. while he is running away he will also release slippery acid to slip his prey. also when he is looking for his prey, he will be transparent for more stealth. after he finds his prey the transparency will wear off. he is also a very stealthy creature, he will break any lights and cameras near him and he can also climb trees to hide in them while he is looking for a victim. ## Why It's Good For The Game add more combat depth for the mega arachnid ## Changelog :cl: refactor: the mega arachnid is now a basic monster ,please report any bugs feature: the mega arachnid now have an ability to slip victims /:cl: * mega arachnid basic monster --------- Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> --- code/__DEFINES/ai/monsters.dm | 8 ++ .../ai/hunting_behavior/hunting_lights.dm | 13 +-- code/datums/components/appearance_on_aggro.dm | 49 +++++++++++ code/datums/elements/appearance_on_aggro.dm | 34 -------- .../jungle/mega_arachnid/mega_arachnid.dm | 56 +++++++++++++ .../mega_arachnid/mega_arachnid_abilities.dm | 80 ++++++++++++++++++ .../jungle/mega_arachnid/mega_arachnid_ai.dm | 79 +++++++++++++++++ .../basic/space_fauna/hivebot/_hivebot.dm | 2 +- .../hostile/jungle/mega_arachnid.dm | 84 ------------------- .../vatgrowing/samples/cell_lines/common.dm | 2 +- .../unit_tests/simple_animal_freeze.dm | 1 - tgstation.dme | 6 +- 12 files changed, 282 insertions(+), 132 deletions(-) create mode 100644 code/datums/components/appearance_on_aggro.dm delete mode 100644 code/datums/elements/appearance_on_aggro.dm create mode 100644 code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm create mode 100644 code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm create mode 100644 code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm delete mode 100644 code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm diff --git a/code/__DEFINES/ai/monsters.dm b/code/__DEFINES/ai/monsters.dm index 4ad06155f6c..f08bd169120 100644 --- a/code/__DEFINES/ai/monsters.dm +++ b/code/__DEFINES/ai/monsters.dm @@ -85,3 +85,11 @@ #define BB_TARGET_CANNIBAL "BB_target_cannibal" ///the tree we will burn down #define BB_TARGET_TREE "BB_target_tree" + +// mega arachnid keys +/// ability to throw restrain projectiles +#define BB_ARACHNID_RESTRAIN "BB_arachnid_restrain" +/// the found surveillance item we must destroy +#define BB_SURVEILLANCE_TARGET "BB_surveillance_target" +/// our acid slip ability +#define BB_ARACHNID_SLIP "BB_arachnid_slip" diff --git a/code/datums/ai/hunting_behavior/hunting_lights.dm b/code/datums/ai/hunting_behavior/hunting_lights.dm index f26743b7dfa..6b82e87f269 100644 --- a/code/datums/ai/hunting_behavior/hunting_lights.dm +++ b/code/datums/ai/hunting_behavior/hunting_lights.dm @@ -1,23 +1,18 @@ /datum/ai_planning_subtree/find_and_hunt_target/look_for_light_fixtures target_key = BB_LOW_PRIORITY_HUNTING_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/light_fixtures - hunting_behavior = /datum/ai_behavior/hunt_target/light_fixtures + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/light_fixtures hunt_targets = list(/obj/machinery/light) hunt_range = 7 -/datum/ai_behavior/hunt_target/light_fixtures +/datum/ai_behavior/hunt_target/unarmed_attack_target/light_fixtures hunt_cooldown = 10 SECONDS always_reset_target = TRUE -/datum/ai_behavior/hunt_target/light_fixtures/target_caught(mob/living/hunter, obj/machinery/light/hunted) - hunter.UnarmedAttack(hunted, TRUE) - /datum/ai_behavior/find_hunt_target/light_fixtures /datum/ai_behavior/find_hunt_target/light_fixtures/valid_dinner(mob/living/source, obj/machinery/light/dinner, radius) - if(istype(dinner, /obj/machinery/light)) - var/obj/machinery/light/light_target = dinner - if(light_target.status == LIGHT_BROKEN) //light is already broken - return FALSE + if(dinner.status == LIGHT_BROKEN) //light is already broken + return FALSE return can_see(source, dinner, radius) diff --git a/code/datums/components/appearance_on_aggro.dm b/code/datums/components/appearance_on_aggro.dm new file mode 100644 index 00000000000..85690a579ae --- /dev/null +++ b/code/datums/components/appearance_on_aggro.dm @@ -0,0 +1,49 @@ + +/** + * component gave to basic creatures to allow them to change appearance when find a target + */ +/datum/component/appearance_on_aggro + var/target_key = BB_BASIC_MOB_CURRENT_TARGET + /// path of the overlay to apply + var/mutable_appearance/overlay_path + /// visibility of our icon when aggroed + var/alpha_on_aggro + /// visibility of our icon when deaggroed + var/alpha_on_deaggro + +/datum/component/appearance_on_aggro/Initialize(overlay_icon, overlay_state, alpha_on_aggro, alpha_on_deaggro) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + if(overlay_icon && overlay_state) + src.overlay_path = mutable_appearance(overlay_icon, overlay_state) + if(!alpha_on_aggro || !alpha_on_deaggro) + return + src.alpha_on_aggro = alpha_on_aggro + src.alpha_on_deaggro = alpha_on_deaggro + +/datum/component/appearance_on_aggro/RegisterWithParent() + RegisterSignal(parent, COMSIG_AI_BLACKBOARD_KEY_SET(target_key), PROC_REF(change_appearance)) + RegisterSignal(parent, COMSIG_AI_BLACKBOARD_KEY_CLEARED(target_key), PROC_REF(revert_appearance)) + +/datum/component/appearance_on_aggro/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, list(COMSIG_AI_BLACKBOARD_KEY_SET(target_key), COMSIG_AI_BLACKBOARD_KEY_CLEARED(target_key))) + +/datum/component/appearance_on_aggro/proc/change_appearance(mob/living/source) + SIGNAL_HANDLER + + var/atom/target = source.ai_controller.blackboard[target_key] + if(isnull(target)) + return + if(overlay_path) + source.add_overlay(overlay_path) + if(alpha_on_aggro) + animate(source, alpha = alpha_on_aggro, time = 2 SECONDS) + +/datum/component/appearance_on_aggro/proc/revert_appearance(mob/living/source) + SIGNAL_HANDLER + + if(overlay_path) + source.cut_overlay(overlay_path) + if(alpha_on_deaggro) + animate(source, alpha = alpha_on_deaggro, time = 2 SECONDS) diff --git a/code/datums/elements/appearance_on_aggro.dm b/code/datums/elements/appearance_on_aggro.dm deleted file mode 100644 index 1e64eb6140a..00000000000 --- a/code/datums/elements/appearance_on_aggro.dm +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Element gave to basic creatures to allow them to change appearance when find a target - */ -/datum/element/appearance_on_aggro - element_flags = ELEMENT_BESPOKE - argument_hash_start_idx = 2 - /// the target key - var/target_key = BB_BASIC_MOB_CURRENT_TARGET - /// path of the overlay to apply - var/mutable_appearance/overlay_path - -/datum/element/appearance_on_aggro/Attach(datum/target, overlay_icon, overlay_state) - . = ..() - if(!isliving(target)) - return ELEMENT_INCOMPATIBLE - src.overlay_path = mutable_appearance(overlay_icon, overlay_state) - RegisterSignal(target, COMSIG_AI_BLACKBOARD_KEY_SET(target_key), PROC_REF(add_overlay)) - RegisterSignal(target, COMSIG_AI_BLACKBOARD_KEY_CLEARED(target_key), PROC_REF(remove_overlay)) - -/datum/element/appearance_on_aggro/proc/remove_overlay(mob/living/source) - SIGNAL_HANDLER - - source.cut_overlay(overlay_path) - -/datum/element/appearance_on_aggro/Detach(datum/target) - . = ..() - UnregisterSignal(target, list(COMSIG_AI_BLACKBOARD_KEY_SET(target_key), COMSIG_AI_BLACKBOARD_KEY_CLEARED(target_key))) - -/datum/element/appearance_on_aggro/proc/add_overlay(mob/living/source) - SIGNAL_HANDLER - var/atom/target = source.ai_controller.blackboard[target_key] - if(isnull(target)) - return - source.add_overlay(overlay_path) diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm new file mode 100644 index 00000000000..7f40e6ae0a1 --- /dev/null +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid.dm @@ -0,0 +1,56 @@ +//Large and powerful, but timid. It won't engage anything above 50 health, or anything without legcuffs. +//It can fire fleshy snares that legcuff anyone that it hits, making them look especially tasty to the arachnid. +/mob/living/basic/mega_arachnid + name = "mega arachnid" + desc = "Though physically imposing, it prefers to ambush its prey, and it will only engage with an already crippled opponent." + icon = 'icons/mob/simple/jungle/arachnid.dmi' + icon_state = "arachnid" + icon_living = "arachnid" + icon_dead = "arachnid_dead" + mob_biotypes = MOB_ORGANIC|MOB_BUG + melee_damage_lower = 30 + melee_damage_upper = 30 + maxHealth = 300 + health = 300 + + pixel_x = -16 + base_pixel_x = -16 + + habitable_atmos = list("min_oxy" = 0, "max_oxy" = 0, "min_plas" = 0, "max_plas" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + faction = list(FACTION_JUNGLE) + obj_damage = 30 + environment_smash = ENVIRONMENT_SMASH_WALLS + minimum_survivable_temperature = T0C + maximum_survivable_temperature = T0C + 450 + status_flags = NONE + lighting_cutoff_red = 5 + lighting_cutoff_green = 20 + lighting_cutoff_blue = 25 + mob_size = MOB_SIZE_LARGE + + speak_emote = list("chitters") + attack_sound = 'sound/weapons/bladeslice.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH + ai_controller = /datum/ai_controller/basic_controller/mega_arachnid + alpha = 40 + +/mob/living/basic/mega_arachnid/Initialize(mapload) + . = ..() + var/datum/action/cooldown/spell/pointed/projectile/flesh_restraints/restrain = new(src) + var/datum/action/small_sprite/mega_arachnid/mini_arachnid = new(src) + var/datum/action/cooldown/mob_cooldown/secrete_acid/acid_spray = new(src) + acid_spray.Grant(src) + restrain.Grant(src) + mini_arachnid.Grant(src) + AddElement(/datum/element/swabable, CELL_LINE_TABLE_MEGA_ARACHNID, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) + AddComponent(/datum/component/appearance_on_aggro, alpha_on_aggro = 255, alpha_on_deaggro = alpha) + AddComponent(/datum/component/tree_climber, climbing_distance = 15) + ai_controller.set_blackboard_key(BB_ARACHNID_RESTRAIN, restrain) + ai_controller.set_blackboard_key(BB_ARACHNID_SLIP, acid_spray) + +/mob/living/basic/mega_arachnid/Login() + . = ..() + if(!. || !client) + return FALSE + + animate(src, alpha = 255, time = 2 SECONDS) //make them visible diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm new file mode 100644 index 00000000000..e8c4d1723e7 --- /dev/null +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_abilities.dm @@ -0,0 +1,80 @@ + +/datum/action/cooldown/spell/pointed/projectile/flesh_restraints + name = "fleshy restraints" + desc = "Launch at your prey to immobilize them." + button_icon = 'icons/obj/restraints.dmi' + button_icon_state = "flesh_snare" + + cooldown_time = 6 SECONDS + spell_requirements = NONE + + active_msg = "You prepare to throw a restraint at your target!" + cast_range = 8 + projectile_type = /obj/projectile/mega_arachnid + +/obj/projectile/mega_arachnid + name = "flesh snare" + icon_state = "tentacle_end" + damage = 0 + +/obj/projectile/mega_arachnid/on_hit(atom/target, blocked = FALSE) + . = ..() + if(!iscarbon(target) || blocked >= 100) + return + var/obj/item/restraints/legcuffs/beartrap/mega_arachnid/restraint = new(get_turf(target)) + restraint.spring_trap(null, target) + +/obj/item/restraints/legcuffs/beartrap/mega_arachnid + name = "fleshy restraints" + desc = "Used by mega arachnids to immobilize their prey." + flags_1 = NONE + item_flags = DROPDEL + icon_state = "flesh_snare" + armed = TRUE + +/obj/item/restraints/legcuffs/beartrap/mega_arachnid/Initialize(mapload) + . = ..() + AddElement(/datum/element/swabable, CELL_LINE_TABLE_MEGA_ARACHNID, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) + + +/datum/action/cooldown/mob_cooldown/secrete_acid + name = "Secrete Acid" + button_icon = 'icons/effects/acid.dmi' + button_icon_state = "default" + desc = "Secrete a slippery acid!" + cooldown_time = 15 SECONDS + melee_cooldown_time = 0 SECONDS + click_to_activate = FALSE + +/datum/action/cooldown/mob_cooldown/secrete_acid/Activate(atom/target_atom) + RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(release_acid)) + addtimer(CALLBACK(src, PROC_REF(deactivate_ability)), 3 SECONDS) + StartCooldown() + return TRUE + +/datum/action/cooldown/mob_cooldown/secrete_acid/proc/release_acid() + SIGNAL_HANDLER + + var/turf/current_turf = owner.loc + if(locate(/obj/effect/slippery_acid) in current_turf.contents) + return + + new /obj/effect/slippery_acid(current_turf) + +/datum/action/cooldown/mob_cooldown/secrete_acid/proc/deactivate_ability() + UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) + +/obj/effect/slippery_acid + name = "slippery acid" + icon = 'icons/effects/acid.dmi' + icon_state = "default" + layer = BELOW_MOB_LAYER + plane = GAME_PLANE + anchored = TRUE + /// how long does the acid exist for + var/duration_time = 5 SECONDS + +/obj/effect/slippery_acid/Initialize(mapload) + . = ..() + AddComponent(/datum/component/slippery, 6 SECONDS) + QDEL_IN(src, duration_time) diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm new file mode 100644 index 00000000000..e2c67af2467 --- /dev/null +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm @@ -0,0 +1,79 @@ +/datum/ai_controller/basic_controller/mega_arachnid + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_BASIC_MOB_FLEEING = TRUE, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/targeted_mob_ability/arachnid_restrain, + /datum/ai_planning_subtree/basic_melee_attack_subtree/mega_arachnid, + /datum/ai_planning_subtree/flee_target/mega_arachnid, + /datum/ai_planning_subtree/climb_trees, + /datum/ai_planning_subtree/find_and_hunt_target/destroy_surveillance, + ) + +///destroy surveillance objects to boost our stealth +/datum/ai_planning_subtree/find_and_hunt_target/destroy_surveillance + target_key = BB_SURVEILLANCE_TARGET + finding_behavior = /datum/ai_behavior/find_hunt_target/find_active_surveillance + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunt_targets = list(/obj/machinery/camera, /obj/machinery/light) + hunt_range = 7 + +/datum/ai_behavior/find_hunt_target/find_active_surveillance + +/datum/ai_behavior/find_hunt_target/find_active_camera/valid_dinner(mob/living/source, obj/machinery/dinner, radius) + if(dinner.machine_stat & BROKEN) + return FALSE + + return can_see(source, dinner, radius) + +///spray slippery acid as we flee! +/datum/ai_planning_subtree/flee_target/mega_arachnid + flee_behaviour = /datum/ai_behavior/run_away_from_target/mega_arachnid + +/datum/ai_planning_subtree/flee_target/mega_arachnid/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard[BB_BASIC_MOB_FLEEING]) + return + var/datum/action/cooldown/slip_acid = controller.blackboard[BB_ARACHNID_SLIP] + + if(!QDELETED(slip_acid) && slip_acid.IsAvailable()) + controller.queue_behavior(/datum/ai_behavior/use_mob_ability, BB_ARACHNID_SLIP) + + return ..() + +/datum/ai_behavior/run_away_from_target/mega_arachnid + clear_failed_targets = FALSE + run_distance = 5 + +///only engage in melee combat against cuffed targets, otherwise keep throwing restraints at them +/datum/ai_planning_subtree/basic_melee_attack_subtree/mega_arachnid + ///minimum health our target must be before we can attack them + var/minimum_health = 50 + +/datum/ai_planning_subtree/basic_melee_attack_subtree/mega_arachnid/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/atom/target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(!ishuman(target)) + return ..() + + var/mob/living/carbon/human_target = target + if(!human_target.legcuffed && human_target.health > minimum_health) + return + + return ..() + +/datum/ai_planning_subtree/targeted_mob_ability/arachnid_restrain + ability_key = BB_ARACHNID_RESTRAIN + +/// only fire ability at humans if they are not cuffed +/datum/ai_planning_subtree/targeted_mob_ability/arachnid_restrain/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/target = controller.blackboard[target_key] + if(!ishuman(target)) + return + var/mob/living/carbon/human_target = target + if(human_target.legcuffed) + return + return ..() diff --git a/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm b/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm index df4ed505f3d..db0d310a71c 100644 --- a/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm +++ b/code/modules/mob/living/basic/space_fauna/hivebot/_hivebot.dm @@ -42,7 +42,7 @@ . = ..() var/static/list/death_loot = list(/obj/effect/decal/cleanable/robot_debris) AddElement(/datum/element/death_drops, death_loot) - AddElement(/datum/element/appearance_on_aggro, overlay_icon = icon, overlay_state = "[initial(icon_state)]_attack") + AddComponent(/datum/component/appearance_on_aggro, overlay_icon = icon, overlay_state = "[initial(icon_state)]_attack") if(!ranged_attacker) return AddComponent(/datum/component/ranged_attacks, /obj/item/ammo_casing/hivebot, cooldown_time = ranged_attack_cooldown) diff --git a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm b/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm deleted file mode 100644 index b7caeb42c14..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/jungle/mega_arachnid.dm +++ /dev/null @@ -1,84 +0,0 @@ -//Large and powerful, but timid. It won't engage anything above 50 health, or anything without legcuffs. -//It can fire fleshy snares that legcuff anyone that it hits, making them look especially tasty to the arachnid. -/mob/living/simple_animal/hostile/jungle/mega_arachnid - name = "mega arachnid" - desc = "Though physically imposing, it prefers to ambush its prey, and it will only engage with an already crippled opponent." - icon = 'icons/mob/simple/jungle/arachnid.dmi' - icon_state = "arachnid" - icon_living = "arachnid" - icon_dead = "arachnid_dead" - mob_biotypes = MOB_ORGANIC|MOB_BUG - melee_damage_lower = 30 - melee_damage_upper = 30 - maxHealth = 300 - health = 300 - speed = 1 - ranged = 1 - pixel_x = -16 - base_pixel_x = -16 - move_to_delay = 10 - aggro_vision_range = 9 - speak_emote = list("chitters") - attack_sound = 'sound/weapons/bladeslice.ogg' - attack_vis_effect = ATTACK_EFFECT_SLASH - ranged_cooldown_time = 60 - projectiletype = /obj/projectile/mega_arachnid - projectilesound = 'sound/weapons/pierce.ogg' - alpha = 50 - - footstep_type = FOOTSTEP_MOB_CLAW - var/datum/action/small_sprite/mini_arachnid = new/datum/action/small_sprite/mega_arachnid() - -/mob/living/simple_animal/hostile/jungle/mega_arachnid/Life(seconds_per_tick = SSMOBS_DT, times_fired) - ..() - if(target && ranged_cooldown > world.time && iscarbon(target)) - var/mob/living/carbon/C = target - if(!C.legcuffed && C.health < 50) - retreat_distance = 9 - minimum_distance = 9 - alpha = 125 - return - retreat_distance = 0 - minimum_distance = 0 - alpha = 255 - - -/mob/living/simple_animal/hostile/jungle/mega_arachnid/Aggro() - ..() - alpha = 255 - -/mob/living/simple_animal/hostile/jungle/mega_arachnid/LoseAggro() - ..() - alpha = 50 - -/mob/living/simple_animal/hostile/jungle/mega_arachnid/Initialize(mapload) - . = ..() - add_cell_sample() - mini_arachnid.Grant(src) - -/mob/living/simple_animal/hostile/jungle/mega_arachnid/add_cell_sample() - . = ..() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_MEGA_ARACHNID, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - -/obj/projectile/mega_arachnid - name = "flesh snare" - icon_state = "tentacle_end" - damage = 0 - -/obj/projectile/mega_arachnid/on_hit(atom/target, blocked = FALSE) - if(iscarbon(target) && blocked < 100) - var/obj/item/restraints/legcuffs/beartrap/mega_arachnid/B = new /obj/item/restraints/legcuffs/beartrap/mega_arachnid(get_turf(target)) - B.spring_trap(null, target) - return ..() - -/obj/item/restraints/legcuffs/beartrap/mega_arachnid - name = "fleshy restraints" - desc = "Used by mega arachnids to immobilize their prey." - item_flags = DROPDEL - flags_1 = NONE - icon_state = "flesh_snare" - armed = TRUE - -/obj/item/restraints/legcuffs/beartrap/mega_arachnid/Initialize(mapload) - . = ..() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_MEGA_ARACHNID, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) diff --git a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm index 01d190c5889..1210e5527eb 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -736,6 +736,6 @@ /datum/reagent/drug/nicotine = -1, /datum/reagent/toxin/pestkiller = -1) - resulting_atoms = list(/mob/living/simple_animal/hostile/jungle/mega_arachnid = 1) + resulting_atoms = list(/mob/living/basic/mega_arachnid = 1) #undef VAT_GROWTH_RATE diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index baa58cb21ad..2390a9cf74b 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -144,7 +144,6 @@ /mob/living/simple_animal/hostile/illusion/mirage, /mob/living/simple_animal/hostile/jungle, /mob/living/simple_animal/hostile/jungle/leaper, - /mob/living/simple_animal/hostile/jungle/mega_arachnid, /mob/living/simple_animal/hostile/jungle/mook, /mob/living/simple_animal/hostile/jungle/seedling, /mob/living/simple_animal/hostile/megafauna, diff --git a/tgstation.dme b/tgstation.dme index 038cfdb72d4..b36b24fdf83 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -984,6 +984,7 @@ #include "code\datums\components\aggro_emote.dm" #include "code\datums\components\ai_retaliate_advanced.dm" #include "code\datums\components\anti_magic.dm" +#include "code\datums\components\appearance_on_aggro.dm" #include "code\datums\components\aquarium_content.dm" #include "code\datums\components\area_based_godmode.dm" #include "code\datums\components\area_sound_manager.dm" @@ -1297,7 +1298,6 @@ #include "code\datums\elements\ai_target_damagesource.dm" #include "code\datums\elements\amputating_limbs.dm" #include "code\datums\elements\animal_variety.dm" -#include "code\datums\elements\appearance_on_aggro.dm" #include "code\datums\elements\art.dm" #include "code\datums\elements\atmos_requirements.dm" #include "code\datums\elements\atmos_sensitive.dm" @@ -4227,6 +4227,9 @@ #include "code\modules\mob\living\basic\icemoon\ice_whelp\ice_whelp.dm" #include "code\modules\mob\living\basic\icemoon\ice_whelp\ice_whelp_abilities.dm" #include "code\modules\mob\living\basic\icemoon\ice_whelp\ice_whelp_ai.dm" +#include "code\modules\mob\living\basic\jungle\mega_arachnid\mega_arachnid.dm" +#include "code\modules\mob\living\basic\jungle\mega_arachnid\mega_arachnid_abilities.dm" +#include "code\modules\mob\living\basic\jungle\mega_arachnid\mega_arachnid_ai.dm" #include "code\modules\mob\living\basic\lavaland\mining.dm" #include "code\modules\mob\living\basic\lavaland\bileworm\_bileworm.dm" #include "code\modules\mob\living\basic\lavaland\bileworm\bileworm_actions.dm" @@ -4544,7 +4547,6 @@ #include "code\modules\mob\living\simple_animal\hostile\gorilla\visuals_icons.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\_jungle_mobs.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\leaper.dm" -#include "code\modules\mob\living\simple_animal\hostile\jungle\mega_arachnid.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\mook.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\seedling.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\_megafauna.dm"