diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index f05b74117d9..b8cebfbf271 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -32,6 +32,8 @@ #define ismouse(A) (istype(A, /mob/living/simple_animal/mouse)) +#define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct)) + #define isbear(A) (istype(A, /mob/living/simple_animal/hostile/bear)) #define iscarp(A) (istype(A, /mob/living/simple_animal/hostile/carp)) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index ecd8c75aa6e..06b82c79c54 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -154,7 +154,7 @@ This file contains the arcane tome files. text += "Juggernaut
The Juggernaut is a slow, but durable, melee attacker which can produce temporary forcewalls. It will also reflect most lethal energy weapons.

" - text += "Artificer
The Artificer is a weak and fragile construct, able to heal other constructs, produce more soulstones and construct shells, \ + text += "Artificer
The Artificer is a weak and fragile construct, able to heal other constructs, shades, or itself, produce more soulstones and construct shells, \ construct fortifying cult walls and flooring, and finally, it can release a few indiscriminate stunning missiles.

" text += "Harvester
If you see one, know that you have done all you can and your life is void.

" diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index c7ed281b154..f1d0ececa64 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -24,6 +24,8 @@ pressure_resistance = 200 unique_name = 1 AIStatus = AI_OFF //normal constructs don't have AI + loot = list(/obj/item/weapon/ectoplasm) + del_on_death = 1 var/list/construct_spells = list() var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." @@ -34,12 +36,8 @@ AddSpell(new spell(null)) /mob/living/simple_animal/hostile/construct/death() - ..(1) - new /obj/item/weapon/ectoplasm (src.loc) - visible_message("[src] collapses in a shattered heap.") - ghostize() - qdel(src) - return + deathmessage = "[src] collapses in a shattered heap." + ..() /mob/living/simple_animal/hostile/construct/examine(mob/user) var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" @@ -183,12 +181,12 @@ /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) playstyle_string = "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \ - use magic missile, repair allied constructs (by clicking on them), \ + use magic missile, repair allied constructs, shades, and yourself (by clicking on them), \ and, most important of all, create new constructs by producing soulstones to capture souls, \ and shells to place those soulstones into." /mob/living/simple_animal/hostile/construct/builder/Found(atom/A) //what have we found here? - if(istype(A, /mob/living/simple_animal/hostile/construct)) //is it a construct? + if(isconstruct(A)) //is it a construct? var/mob/living/simple_animal/hostile/construct/C = A if(C.health < C.maxHealth) //is it hurt? let's go heal it if it is return 1 @@ -207,7 +205,7 @@ ..() if(isliving(target)) var/mob/living/L = target - if(istype(L, /mob/living/simple_animal/hostile/construct) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it + if(isconstruct(L) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it LoseTarget() return 0 if(L.health <= melee_damage_lower+melee_damage_upper) //ey bucko you're hurt as fuck let's go hit you @@ -216,7 +214,7 @@ /mob/living/simple_animal/hostile/construct/builder/Aggro() ..() - if(istype(target, /mob/living/simple_animal/hostile/construct)) //oh the target is a construct no need to flee + if(isconstruct(target)) //oh the target is a construct no need to flee retreat_distance = null minimum_distance = 1 @@ -229,11 +227,6 @@ AIStatus = AI_ON environment_smash = 1 //only token destruction, don't smash the cult wall NO STOP - - - - - /////////////////////////////Non-cult Artificer///////////////////////// /mob/living/simple_animal/hostile/construct/builder/noncult construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index 955ccacb23d..f2164eec7b9 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -26,16 +26,28 @@ faction = list("cult") status_flags = CANPUSH flying = 1 + loot = list(/obj/item/weapon/ectoplasm) + del_on_death = 1 /mob/living/simple_animal/shade/death() - ..(1) - new /obj/item/weapon/ectoplasm (src.loc) - visible_message("[src] lets out a contented sigh as their form unwinds.") - ghostize() - qdel(src) - return + deathmessage = "[src] lets out a contented sigh as their form unwinds." + ..() +/mob/living/simple_animal/shade/Process_Spacemove(movement_dir = 0) + return TRUE //this doesn't make much sense; you'd thing TRUE would mean it'd process spacemove but it means it doesn't + +/mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/M) + if(istype(M, /mob/living/simple_animal/hostile/construct/builder)) + if(health < maxHealth) + adjustHealth(-25) + Beam(M,icon_state="sendbeam",icon='icons/effects/effects.dmi',time=4) + M.visible_message("[M] heals \the [src].", \ + "You heal [src], leaving [src] at [health]/[maxHealth] health.") + else + M << "You cannot heal [src], as it is unharmed!" + else if(src != M) + ..() /mob/living/simple_animal/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri if(istype(O, /obj/item/device/soulstone)) @@ -43,4 +55,3 @@ SS.transfer_soul("SHADE", src, user) else ..() - return