/mob/living/simple_animal/construct name = "Construct" real_name = "Construct" desc = "" speak_emote = list("hisses") emote_hear = list("wails","screeches") response_help = "thinks better of touching" response_disarm = "flailed at" response_harm = "punched" icon_dead = "shade_dead" speed = -1 a_intent = I_HURT stop_automated_movement = 1 status_flags = CANPUSH universal_speak = 0 universal_understand = 1 attack_sound = 'sound/weapons/spiderlunge.ogg' 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 show_stat_health = 1 faction = "cult" supernatural = 1 see_invisible = SEE_INVISIBLE_NOLIGHTING var/nullblock = 0 mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY mob_push_flags = ALLMOBS var/list/construct_spells = list() /mob/living/simple_animal/construct/cultify() return /mob/living/simple_animal/construct/New() ..() name = text("[initial(name)] ([rand(1, 1000)])") real_name = name add_language("Cult") add_language("Occult") for(var/spell in construct_spells) src.add_spell(new spell, "const_spell_ready") updateicon() add_glow() /mob/living/simple_animal/construct/death() new /obj/item/weapon/ectoplasm (src.loc) ..(null,"collapses in a shattered heap.") ghostize() qdel(src) /mob/living/simple_animal/construct/attack_generic(var/mob/user) if(istype(user, /mob/living/simple_animal/construct/builder)) if(health < maxHealth) adjustBruteLoss(-5) user.visible_message("\The [user] mends some of \the [src]'s wounds.") else user << "\The [src] is undamaged." return return ..() /mob/living/simple_animal/construct/examine(mob/user) ..(user) var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" if (src.health < src.maxHealth) msg += "" if (src.health >= src.maxHealth/2) msg += "It looks slightly dented.\n" else msg += "It looks severely dented!\n" msg += "" msg += "*---------*" user << msg /////////////////Juggernaut/////////////// /mob/living/simple_animal/construct/armoured name = "Juggernaut" real_name = "Juggernaut" desc = "A possessed suit of armour driven by the will of the restless dead" icon = 'icons/mob/mob.dmi' icon_state = "behemoth" icon_living = "behemoth" maxHealth = 250 health = 250 response_harm = "harmlessly punches" harm_intent_damage = 0 melee_damage_lower = 30 melee_damage_upper = 30 attacktext = "smashed their armoured gauntlet into" mob_size = 20 speed = 3 environment_smash = 2 attack_sound = 'sound/weapons/heavysmash.ogg' status_flags = 0 resistance = 10 construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser) /mob/living/simple_animal/construct/armoured/Life() weakened = 0 ..() /mob/living/simple_animal/construct/armoured/bullet_act(var/obj/item/projectile/P) if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) var/reflectchance = 80 - round(P.damage/3) if(prob(reflectchance)) adjustBruteLoss(P.damage * 0.5) visible_message("The [P.name] gets reflected by [src]'s shell!", \ "The [P.name] gets reflected by [src]'s shell!") // Find a turf near or on the original location to bounce to if(P.starting) var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) var/turf/curloc = get_turf(src) // redirect the projectile P.redirect(new_x, new_y, curloc, src) return -1 // complete projectile permutation return (..(P)) ////////////////////////Wraith///////////////////////////////////////////// /mob/living/simple_animal/construct/wraith name = "Wraith" real_name = "Wraith" desc = "A wicked bladed shell contraption piloted by a bound spirit" icon = 'icons/mob/mob.dmi' icon_state = "floating" icon_living = "floating" maxHealth = 75 health = 75 melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "slashed" speed = -1 environment_smash = 1 see_in_dark = 7 attack_sound = 'sound/weapons/rapidslice.ogg' construct_spells = list(/spell/targeted/ethereal_jaunt/shift) /////////////////////////////Artificer///////////////////////// /mob/living/simple_animal/construct/builder name = "Artificer" real_name = "Artificer" desc = "A bulbous construct dedicated to building and maintaining The Cult of Nar-Sie's armies" icon = 'icons/mob/mob.dmi' icon_state = "artificer" icon_living = "artificer" maxHealth = 50 health = 50 response_harm = "viciously beaten" harm_intent_damage = 5 melee_damage_lower = 5 melee_damage_upper = 5 attacktext = "rammed" speed = 0 environment_smash = 1 attack_sound = 'sound/weapons/rapidslice.ogg' construct_spells = list(/spell/aoe_turf/conjure/construct/lesser, /spell/aoe_turf/conjure/wall, /spell/aoe_turf/conjure/floor, /spell/aoe_turf/conjure/soulstone, /spell/aoe_turf/conjure/pylon ) /////////////////////////////Behemoth///////////////////////// /mob/living/simple_animal/construct/behemoth name = "Behemoth" real_name = "Behemoth" desc = "The pinnacle of occult technology, Behemoths are the ultimate weapon in the Cult of Nar-Sie's arsenal." icon = 'icons/mob/mob.dmi' icon_state = "behemoth" icon_living = "behemoth" maxHealth = 750 health = 750 speak_emote = list("rumbles") response_harm = "harmlessly punched" harm_intent_damage = 0 melee_damage_lower = 50 melee_damage_upper = 50 attacktext = "brutally crushed" speed = 5 environment_smash = 2 attack_sound = 'sound/weapons/heavysmash.ogg' resistance = 10 var/energy = 0 var/max_energy = 1000 construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser) ////////////////////////Harvester//////////////////////////////// /mob/living/simple_animal/construct/harvester name = "Harvester" real_name = "Harvester" desc = "The promised reward of the livings who follow narsie. Obtained by offering their bodies to the geometer of blood" icon = 'icons/mob/mob.dmi' icon_state = "harvester" icon_living = "harvester" maxHealth = 150 health = 150 melee_damage_lower = 25 melee_damage_upper = 25 attacktext = "violently stabbed" speed = -1 environment_smash = 1 see_in_dark = 7 attack_sound = 'sound/weapons/pierce.ogg' construct_spells = list( /spell/targeted/harvest, /spell/aoe_turf/knock/harvester, /spell/rune_write ) ////////////////Glow////////////////// /mob/living/simple_animal/construct/proc/add_glow() overlays = 0 var/overlay_layer = LIGHTING_LAYER+0.1 if(layer != MOB_LAYER) overlay_layer=TURF_LAYER+0.2 overlays += image(icon,"glow-[icon_state]",overlay_layer) set_light(2, -2, l_color = "#FFFFFF") ////////////////HUD////////////////////// /mob/living/simple_animal/construct/Life() . = ..() if(.) if(fire) if(fire_alert) fire.icon_state = "fire1" else fire.icon_state = "fire0" if(pullin) if(pulling) pullin.icon_state = "pull1" else pullin.icon_state = "pull0" if(purged) if(purge > 0) purged.icon_state = "purge1" else purged.icon_state = "purge0" silence_spells(purge) /mob/living/simple_animal/construct/armoured/Life() ..() if(healths) switch(health) if(250 to INFINITY) healths.icon_state = "juggernaut_health0" if(208 to 249) healths.icon_state = "juggernaut_health1" if(167 to 207) healths.icon_state = "juggernaut_health2" if(125 to 166) healths.icon_state = "juggernaut_health3" if(84 to 124) healths.icon_state = "juggernaut_health4" if(42 to 83) healths.icon_state = "juggernaut_health5" if(1 to 41) healths.icon_state = "juggernaut_health6" else healths.icon_state = "juggernaut_health7" /mob/living/simple_animal/construct/behemoth/Life() ..() if(healths) switch(health) if(750 to INFINITY) healths.icon_state = "juggernaut_health0" if(625 to 749) healths.icon_state = "juggernaut_health1" if(500 to 624) healths.icon_state = "juggernaut_health2" if(375 to 499) healths.icon_state = "juggernaut_health3" if(250 to 374) healths.icon_state = "juggernaut_health4" if(125 to 249) healths.icon_state = "juggernaut_health5" if(1 to 124) healths.icon_state = "juggernaut_health6" else healths.icon_state = "juggernaut_health7" /mob/living/simple_animal/construct/builder/Life() ..() if(healths) switch(health) if(50 to INFINITY) healths.icon_state = "artificer_health0" if(42 to 49) healths.icon_state = "artificer_health1" if(34 to 41) healths.icon_state = "artificer_health2" if(26 to 33) healths.icon_state = "artificer_health3" if(18 to 25) healths.icon_state = "artificer_health4" if(10 to 17) healths.icon_state = "artificer_health5" if(1 to 9) healths.icon_state = "artificer_health6" else healths.icon_state = "artificer_health7" /mob/living/simple_animal/construct/wraith/Life() ..() if(healths) switch(health) if(75 to INFINITY) healths.icon_state = "wraith_health0" if(62 to 74) healths.icon_state = "wraith_health1" if(50 to 61) healths.icon_state = "wraith_health2" if(37 to 49) healths.icon_state = "wraith_health3" if(25 to 36) healths.icon_state = "wraith_health4" if(12 to 24) healths.icon_state = "wraith_health5" if(1 to 11) healths.icon_state = "wraith_health6" else healths.icon_state = "wraith_health7" /mob/living/simple_animal/construct/harvester/Life() ..() if(healths) switch(health) if(150 to INFINITY) healths.icon_state = "harvester_health0" if(125 to 149) healths.icon_state = "harvester_health1" if(100 to 124) healths.icon_state = "harvester_health2" if(75 to 99) healths.icon_state = "harvester_health3" if(50 to 74) healths.icon_state = "harvester_health4" if(25 to 49) healths.icon_state = "harvester_health5" if(1 to 24) healths.icon_state = "harvester_health6" else healths.icon_state = "harvester_health7"