diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm index fdf272d8aa4..e6c3a96f8e0 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/port_tarkon/defcon2.dmm @@ -128,7 +128,7 @@ /turf/open/floor/cult, /area/ruin/space/has_grav/port_tarkon/porthall) "aO" = ( -/mob/living/simple_animal/hostile/construct/wraith/hostile{ +/mob/living/basic/construct/wraith/hostile{ health = 125; maxHealth = 125 }, @@ -1462,7 +1462,7 @@ /area/ruin/space/has_grav/port_tarkon/secoff) "id" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/mob/living/simple_animal/hostile/construct/wraith/hostile{ +/mob/living/basic/construct/wraith/hostile{ health = 125; maxHealth = 125 }, @@ -1794,7 +1794,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/east, -/mob/living/simple_animal/hostile/construct/wraith/hostile, +/mob/living/basic/construct/wraith/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/starboardhall) @@ -2901,7 +2901,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/mob/living/simple_animal/hostile/construct/wraith/hostile{ +/mob/living/basic/construct/wraith/hostile{ health = 125; maxHealth = 125 }, @@ -6493,7 +6493,7 @@ "Kb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/construct/wraith/hostile{ +/mob/living/basic/construct/wraith/hostile{ health = 125; maxHealth = 125 }, @@ -6918,7 +6918,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/simple_animal/hostile/construct/wraith/hostile{ +/mob/living/basic/construct/wraith/hostile{ health = 125; maxHealth = 125 }, @@ -7253,7 +7253,7 @@ /turf/open/floor/engine, /area/ruin/space/has_grav/port_tarkon/atmos) "Od" = ( -/mob/living/simple_animal/hostile/construct/wraith/hostile{ +/mob/living/basic/construct/wraith/hostile{ health = 125; maxHealth = 125 }, @@ -7972,7 +7972,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/mob/living/simple_animal/hostile/construct/wraith/hostile{ +/mob/living/basic/construct/wraith/hostile{ health = 125; maxHealth = 125 }, @@ -8302,7 +8302,7 @@ /area/ruin/space/has_grav/port_tarkon/developement) "Uh" = ( /obj/effect/decal/cleanable/blood, -/mob/living/simple_animal/hostile/construct/wraith/hostile{ +/mob/living/basic/construct/wraith/hostile{ health = 125; maxHealth = 125 }, @@ -8613,7 +8613,7 @@ /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/secoff) "Wi" = ( -/mob/living/simple_animal/hostile/construct/wraith/hostile, +/mob/living/basic/construct/wraith/hostile, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/has_grav/port_tarkon/starboardhall) @@ -9060,7 +9060,7 @@ /area/ruin/space/has_grav/port_tarkon/trauma) "Zt" = ( /obj/machinery/light/dim/directional/north, -/mob/living/simple_animal/hostile/construct/wraith/hostile{ +/mob/living/basic/construct/wraith/hostile{ health = 125; maxHealth = 125 }, diff --git a/_maps/shuttles/emergency_narnar.dmm b/_maps/shuttles/emergency_narnar.dmm index 804c59fa4ff..d6c48664e08 100644 --- a/_maps/shuttles/emergency_narnar.dmm +++ b/_maps/shuttles/emergency_narnar.dmm @@ -166,7 +166,7 @@ /turf/open/floor/cult, /area/shuttle/escape) "H" = ( -/mob/living/simple_animal/hostile/construct/wraith, +/mob/living/basic/construct/wraith, /turf/open/floor/cult, /area/shuttle/escape) "I" = ( diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targetting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targetting.dm index 8535554e54b..46037fdc076 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targetting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/wounded_targetting.dm @@ -7,5 +7,5 @@ living_targets += filtered_targets if(living_targets.len) sortTim(living_targets, GLOBAL_PROC_REF(cmp_mob_health)) - return living_targets[1] + return pop(living_targets) return ..() diff --git a/code/datums/components/recharging_attacks.dm b/code/datums/components/recharging_attacks.dm new file mode 100644 index 00000000000..b9127c4e018 --- /dev/null +++ b/code/datums/components/recharging_attacks.dm @@ -0,0 +1,66 @@ +/// Reduces the cooldown of a given action upon landing attacks, critting, or killing mobs. +/datum/component/recharging_attacks + /// The target of the most recent attack + var/last_target + /// The stat of the most recently attacked mob + var/last_stat + /// The action to recharge when attacking + var/datum/action/cooldown/recharged_action + /// The amount of cooldown to refund on a successful attack + var/attack_refund + /// The amount of cooldown to refund when putting a target into critical + var/crit_refund + +/datum/component/recharging_attacks/Initialize( + datum/action/cooldown/recharged_action, + attack_refund = 1 SECONDS, + crit_refund = 5 SECONDS, +) + . = ..() + if (!isbasicmob(parent) || !istype(recharged_action)) + return COMPONENT_INCOMPATIBLE + src.recharged_action = recharged_action + src.attack_refund = attack_refund + src.crit_refund = crit_refund + +/datum/component/recharging_attacks/Destroy() + UnregisterSignal(recharged_action, COMSIG_QDELETING) + recharged_action = null + return ..() + +/datum/component/recharging_attacks/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(set_old_stat)) + RegisterSignal(parent, COMSIG_HOSTILE_POST_ATTACKINGTARGET, PROC_REF(check_stat)) + RegisterSignal(recharged_action, COMSIG_QDELETING, PROC_REF(on_action_qdel)) + +/datum/component/recharging_attacks/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, list(COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_HOSTILE_POST_ATTACKINGTARGET)) + if(recharged_action) + UnregisterSignal(recharged_action, COMSIG_QDELETING) + +/datum/component/recharging_attacks/proc/set_old_stat(mob/attacker, mob/attacked) + SIGNAL_HANDLER + if(!isliving(attacked)) + return + last_target = attacked + last_stat = attacked.stat + +/datum/component/recharging_attacks/proc/check_stat(mob/living/attacker, mob/living/attacked, success) + SIGNAL_HANDLER + if(!isliving(attacked) || attacked != last_target || attacker.faction_check_atom(attacked)) + return + + var/final_refund = attack_refund + if(QDELETED(attacked) || (attacked.stat == DEAD && last_stat != DEAD)) //The target is dead and we killed them - full refund + final_refund = recharged_action.cooldown_time + else if(attacked.stat > CONSCIOUS && last_stat == CONSCIOUS) //We knocked the target unconscious - partial refund + final_refund = crit_refund + + recharged_action.next_use_time -= final_refund + recharged_action.build_all_button_icons() + +/datum/component/recharging_attacks/proc/on_action_qdel() + SIGNAL_HANDLER + qdel(src) diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm index 28b7a4f5247..9f3da121b12 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/alternate_appearance.dm @@ -149,7 +149,7 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) /datum/atom_hud/alternate_appearance/basic/blessed_aware/mobShouldSee(mob/M) if(M.mind?.holy_role) return TRUE - if (istype(M, /mob/living/simple_animal/hostile/construct/wraith)) + if (istype(M, /mob/living/basic/construct/wraith)) return TRUE if(isrevenant(M) || IS_WIZARD(M)) return TRUE diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm index a0498c38c45..69bb2f44bba 100644 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ b/code/modules/antagonists/wizard/equipment/soulstone.dm @@ -470,18 +470,18 @@ if(THEME_HOLY) makeNewConstruct(/mob/living/basic/construct/juggernaut/angelic, target, creator, cultoverride, loc_override) if(THEME_CULT) - makeNewConstruct(/mob/living/basic/construct/juggernaut/noncult, target, creator, cultoverride, loc_override) + makeNewConstruct(/mob/living/basic/construct/juggernaut, target, creator, cultoverride, loc_override) if(CONSTRUCT_WRAITH) if(IS_CULTIST(creator)) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, target, creator, cultoverride, loc_override) // ignore themes, the actual giving of cult info is in the makeNewConstruct proc + makeNewConstruct(/mob/living/basic/construct/wraith, target, creator, cultoverride, loc_override) // ignore themes, the actual giving of cult info is in the makeNewConstruct proc return switch(theme) if(THEME_WIZARD) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/mystic, target, creator, cultoverride, loc_override) + makeNewConstruct(/mob/living/basic/construct/wraith/mystic, target, creator, cultoverride, loc_override) if(THEME_HOLY) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/angelic, target, creator, cultoverride, loc_override) + makeNewConstruct(/mob/living/basic/construct/wraith/angelic, target, creator, cultoverride, loc_override) if(THEME_CULT) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/noncult, target, creator, cultoverride, loc_override) + makeNewConstruct(/mob/living/basic/construct/wraith, target, creator, cultoverride, loc_override) if(CONSTRUCT_ARTIFICER) if(IS_CULTIST(creator)) makeNewConstruct(/mob/living/basic/construct/artificer, target, creator, cultoverride, loc_override) // ignore themes, the actual giving of cult info is in the makeNewConstruct proc @@ -494,10 +494,10 @@ if(THEME_CULT) makeNewConstruct(/mob/living/basic/construct/artificer/noncult, target, creator, cultoverride, loc_override) -/proc/makeNewConstruct(mob/living/simple_animal/hostile/construct/ctype, mob/target, mob/stoner = null, cultoverride = FALSE, loc_override = null) +/proc/makeNewConstruct(mob/living/basic/construct/ctype, mob/target, mob/stoner = null, cultoverride = FALSE, loc_override = null) if(QDELETED(target)) return - var/mob/living/simple_animal/hostile/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target))) + var/mob/living/basic/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target))) var/makeicon = newstruct.icon_state var/theme = newstruct.theme flick("make_[makeicon][theme]", newstruct) diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index 714e3838e34..8ad0b48985f 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -28,7 +28,7 @@ boss_types = list(/mob/living/basic/construct/artificer/hostile = 6) hostile_types = list( /mob/living/basic/construct/juggernaut/hostile = 8, - /mob/living/simple_animal/hostile/construct/wraith/hostile = 6, + /mob/living/basic/construct/wraith/hostile = 6, ) /datum/round_event/portal_storm diff --git a/code/modules/mob/living/basic/constructs/_construct.dm b/code/modules/mob/living/basic/constructs/_construct.dm index fcafab62259..e4c21b5a23c 100644 --- a/code/modules/mob/living/basic/constructs/_construct.dm +++ b/code/modules/mob/living/basic/constructs/_construct.dm @@ -22,6 +22,7 @@ response_disarm_simple = "flail at" response_harm_continuous = "punches" response_harm_simple = "punch" + melee_attack_cooldown = CLICK_CD_MELEE // Vivid red, cause cult theme lighting_cutoff_red = 30 @@ -42,14 +43,19 @@ var/can_repair_self = FALSE /// Theme controls color. THEME_CULT is red THEME_WIZARD is purple and THEME_HOLY is blue var/theme = THEME_CULT - /// What flavor of gunk does this construct drop on death? - var/static/list/remains = list(/obj/item/ectoplasm/construct) /// Can this construct smash walls? Gets the wall_smasher element if so. var/smashes_walls = FALSE + /// The different flavors of goop constructs can drop, depending on theme. + var/static/list/remains_by_theme = list( + THEME_CULT = list(/obj/item/ectoplasm/construct), + THEME_HOLY = list(/obj/item/ectoplasm/angelic), + THEME_WIZARD = list(/obj/item/ectoplasm/mystic), + ) /mob/living/basic/construct/Initialize(mapload) . = ..() AddElement(/datum/element/simple_flying) + var/list/remains = string_list(remains_by_theme[theme]) if(length(remains)) AddElement(/datum/element/death_drops, remains) if(smashes_walls) diff --git a/code/modules/mob/living/basic/constructs/artificer.dm b/code/modules/mob/living/basic/constructs/artificer.dm index d3be414791b..bf4a086bcdb 100644 --- a/code/modules/mob/living/basic/constructs/artificer.dm +++ b/code/modules/mob/living/basic/constructs/artificer.dm @@ -43,6 +43,7 @@ /mob/living/basic/construct/artificer/hostile ai_controller = /datum/ai_controller/basic_controller/artificer smashes_walls = FALSE + melee_attack_cooldown = 2 SECONDS // Alternate artificer themes /mob/living/basic/construct/artificer/angelic diff --git a/code/modules/mob/living/basic/constructs/construct_ai.dm b/code/modules/mob/living/basic/constructs/construct_ai.dm index 367bce49183..6f837146837 100644 --- a/code/modules/mob/living/basic/constructs/construct_ai.dm +++ b/code/modules/mob/living/basic/constructs/construct_ai.dm @@ -1,4 +1,9 @@ -/// Artificers +/** + * Artificers + * + * Artificers will seek out and heal the most wounded construct or shade they can see. + * If there is no one to heal, they will run away from any non-allied mobs. + */ /datum/ai_controller/basic_controller/artificer blackboard = list( BB_TARGETTING_DATUM = new /datum/targetting_datum/basic/same_faction/construct, @@ -15,7 +20,12 @@ /datum/ai_planning_subtree/flee_target/from_flee_key, ) -/// Juggernauts +/** + * Juggernauts + * + * Juggernauts slowly walk toward non-allied mobs and pummel them into hardcrit. + * They do not finish off carbons, as that's the job of wraiths. + */ /datum/ai_controller/basic_controller/juggernaut blackboard = list( BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, @@ -26,6 +36,26 @@ idle_behavior = /datum/idle_behavior/idle_random_walk 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, + ) + +/** + * Wraiths + * + * Wraiths seek out the most injured non-allied mob to beat to death. + */ +/datum/ai_controller/basic_controller/wraith + blackboard = list( + BB_TARGETTING_DATUM = new /datum/targetting_datum/basic, + BB_TARGET_MINIMUM_STAT = HARD_CRIT, + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/simple_find_wounded_target, + /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree, ) diff --git a/code/modules/mob/living/basic/constructs/juggernaut.dm b/code/modules/mob/living/basic/constructs/juggernaut.dm index 9d8f4567bd2..2b8bb7e293d 100644 --- a/code/modules/mob/living/basic/constructs/juggernaut.dm +++ b/code/modules/mob/living/basic/constructs/juggernaut.dm @@ -31,6 +31,7 @@ /mob/living/basic/construct/juggernaut/hostile ai_controller = /datum/ai_controller/basic_controller/juggernaut smashes_walls = FALSE + melee_attack_cooldown = 2 SECONDS /mob/living/basic/construct/juggernaut/bullet_act(obj/projectile/bullet) if(!istype(bullet, /obj/projectile/energy) && !istype(bullet, /obj/projectile/beam)) @@ -58,5 +59,3 @@ /mob/living/basic/construct/juggernaut/mystic theme = THEME_WIZARD - -/mob/living/basic/construct/juggernaut/noncult diff --git a/code/modules/mob/living/basic/constructs/wraith.dm b/code/modules/mob/living/basic/constructs/wraith.dm new file mode 100644 index 00000000000..06a09b6446e --- /dev/null +++ b/code/modules/mob/living/basic/constructs/wraith.dm @@ -0,0 +1,50 @@ +/mob/living/basic/construct/wraith + name = "Wraith" + real_name = "Wraith" + desc = "A wicked, clawed shell constructed to assassinate enemies and sow chaos behind enemy lines." + icon_state = "wraith" + icon_living = "wraith" + maxHealth = 65 + health = 65 + melee_damage_lower = 20 + melee_damage_upper = 20 + attack_verb_continuous = "slashes" + attack_verb_simple = "slash" + attack_sound = 'sound/weapons/bladeslice.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH + construct_spells = list( + /datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift, + /datum/action/innate/cult/create_rune/tele, + ) + playstyle_string = span_bold("You are a Wraith. Though relatively fragile, you are fast, deadly, and can phase through walls. Your attacks will lower the cooldown on phasing, moreso for fatal blows.") + +/mob/living/basic/construct/wraith/Initialize(mapload) + . = ..() + var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift/jaunt = locate() in actions + if(isnull(jaunt)) + return . + AddComponent(/datum/component/recharging_attacks, recharged_action = jaunt) + +/// Hostile NPC version. Attempts to kill the lowest-health mob it can see. +/mob/living/basic/construct/wraith/hostile + ai_controller = /datum/ai_controller/basic_controller/wraith + melee_attack_cooldown = 1.5 SECONDS + +// Alternate wraith themes +/mob/living/basic/construct/wraith/angelic + theme = THEME_HOLY + construct_spells = list( + /datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift/angelic, + /datum/action/innate/cult/create_rune/tele, + ) + +/mob/living/basic/construct/wraith/angelic/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_ANGELIC, INNATE_TRAIT) + +/mob/living/basic/construct/wraith/mystic + theme = THEME_WIZARD + construct_spells = list( + /datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift/mystic, + /datum/action/innate/cult/create_rune/tele, + ) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index ffa6c8ce264..361bd5e2769 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -490,7 +490,7 @@ if(1) new /mob/living/basic/construct/juggernaut/hostile(get_turf(src)) if(2) - new /mob/living/simple_animal/hostile/construct/wraith/hostile(get_turf(src)) + new /mob/living/basic/construct/wraith/hostile(get_turf(src)) if(3) new /mob/living/basic/construct/artificer/hostile(get_turf(src)) if(4) diff --git a/code/modules/mob/living/simple_animal/hostile/constructs/wraith.dm b/code/modules/mob/living/simple_animal/hostile/constructs/wraith.dm deleted file mode 100644 index 83bc262e8bc..00000000000 --- a/code/modules/mob/living/simple_animal/hostile/constructs/wraith.dm +++ /dev/null @@ -1,82 +0,0 @@ -/mob/living/simple_animal/hostile/construct/wraith - name = "Wraith" - real_name = "Wraith" - desc = "A wicked, clawed shell constructed to assassinate enemies and sow chaos behind enemy lines." - icon_state = "wraith" - icon_living = "wraith" - maxHealth = 65 - health = 65 - melee_damage_lower = 20 - melee_damage_upper = 20 - retreat_distance = 2 //AI wraiths will move in and out of combat - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' - attack_vis_effect = ATTACK_EFFECT_SLASH - construct_spells = list( - /datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift, - /datum/action/innate/cult/create_rune/tele, - ) - playstyle_string = "You are a Wraith. Though relatively fragile, you are fast, deadly, \ - can phase through walls, and your attacks will lower the cooldown on phasing." - - // Accomplishing various things gives you a refund on jaunt, to jump in and out. - /// The seconds refunded per attack - var/attack_refund = 1 SECONDS - /// The seconds refunded when putting a target into critical - var/crit_refund = 5 SECONDS - -/mob/living/simple_animal/hostile/construct/wraith/AttackingTarget(atom/attacked_target) //refund jaunt cooldown when attacking living targets - var/prev_stat - var/mob/living/living_target = target - - if(isliving(living_target) && !IS_CULTIST(living_target)) - prev_stat = living_target.stat - - . = ..() - if(!. || !isnum(prev_stat)) - return - - var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift/jaunt = locate() in actions - if(!jaunt) - return - - var/total_refund = 0 SECONDS - // they're dead, and you killed them - full refund - if(QDELETED(living_target) || (living_target.stat == DEAD && prev_stat != DEAD)) - total_refund += jaunt.cooldown_time - // you knocked them into critical - else if(HAS_TRAIT(living_target, TRAIT_CRITICAL_CONDITION) && prev_stat == CONSCIOUS) - total_refund += crit_refund - - if(living_target.stat != DEAD && prev_stat != DEAD) - total_refund += attack_refund - - jaunt.next_use_time -= total_refund - jaunt.build_all_button_icons() - -/mob/living/simple_animal/hostile/construct/wraith/hostile //actually hostile, will move around, hit things - AIStatus = AI_ON - -//////////////////////////Wraith-alts//////////////////////////// -/mob/living/simple_animal/hostile/construct/wraith/angelic - theme = THEME_HOLY - construct_spells = list( - /datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift/angelic, - /datum/action/innate/cult/create_rune/tele, - ) - loot = list(/obj/item/ectoplasm/angelic) - -/mob/living/simple_animal/hostile/construct/wraith/angelic/Initialize(mapload) - . = ..() - ADD_TRAIT(src, TRAIT_ANGELIC, INNATE_TRAIT) - -/mob/living/simple_animal/hostile/construct/wraith/mystic - theme = THEME_WIZARD - construct_spells = list( - /datum/action/cooldown/spell/jaunt/ethereal_jaunt/shift/mystic, - /datum/action/innate/cult/create_rune/tele, - ) - loot = list(/obj/item/ectoplasm/mystic) - -/mob/living/simple_animal/hostile/construct/wraith/noncult diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index fb99665fbd2..3c5dbfb6474 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -61,11 +61,6 @@ /mob/living/simple_animal/hostile/construct, /mob/living/simple_animal/hostile/construct/proteon, /mob/living/simple_animal/hostile/construct/proteon/hostile, - /mob/living/simple_animal/hostile/construct/wraith, - /mob/living/simple_animal/hostile/construct/wraith/angelic, - /mob/living/simple_animal/hostile/construct/wraith/hostile, - /mob/living/simple_animal/hostile/construct/wraith/mystic, - /mob/living/simple_animal/hostile/construct/wraith/noncult, /mob/living/simple_animal/hostile/dark_wizard, /mob/living/simple_animal/hostile/guardian, /mob/living/simple_animal/hostile/guardian/assassin, diff --git a/tgstation.dme b/tgstation.dme index cdf0f9986ed..41924f05d88 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1179,6 +1179,7 @@ #include "code\datums\components\radioactive_exposure.dm" #include "code\datums\components\ranged_attacks.dm" #include "code\datums\components\reagent_refiller.dm" +#include "code\datums\components\recharging_attacks.dm" #include "code\datums\components\redirect_attack_hand_from_turf.dm" #include "code\datums\components\reflection.dm" #include "code\datums\components\regenerator.dm" @@ -4493,6 +4494,7 @@ #include "code\modules\mob\living\basic\constructs\construct_ai.dm" #include "code\modules\mob\living\basic\constructs\harvester.dm" #include "code\modules\mob\living\basic\constructs\juggernaut.dm" +#include "code\modules\mob\living\basic\constructs\wraith.dm" #include "code\modules\mob\living\basic\drone\_drone.dm" #include "code\modules\mob\living\basic\drone\drone_say.dm" #include "code\modules\mob\living\basic\drone\drone_tools.dm" @@ -4886,7 +4888,6 @@ #include "code\modules\mob\living\simple_animal\hostile\wizard.dm" #include "code\modules\mob\living\simple_animal\hostile\zombie.dm" #include "code\modules\mob\living\simple_animal\hostile\constructs\constructs.dm" -#include "code\modules\mob\living\simple_animal\hostile\constructs\wraith.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\megafauna\_megafauna.dm" diff --git a/tools/UpdatePaths/Scripts/79235_simple_to_basic_construct_wraith.txt b/tools/UpdatePaths/Scripts/79235_simple_to_basic_construct_wraith.txt new file mode 100644 index 00000000000..631f07688f9 --- /dev/null +++ b/tools/UpdatePaths/Scripts/79235_simple_to_basic_construct_wraith.txt @@ -0,0 +1 @@ +/mob/living/simple_animal/hostile/construct/wraith/@SUBTYPES : /mob/living/basic/construct/wraith/@SUBTYPES{@OLD}