/mob/living/basic/construct icon = 'icons/mob/nonhuman-player/cult.dmi' gender = NEUTER basic_mob_flags = DEL_ON_DEATH combat_mode = TRUE mob_biotypes = MOB_MINERAL | MOB_SPECIAL faction = list(FACTION_CULT) unsuitable_atmos_damage = 0 minimum_survivable_temperature = 0 maximum_survivable_temperature = INFINITY damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) pressure_resistance = 100 speed = 0 unique_name = TRUE initial_language_holder = /datum/language_holder/construct death_message = "collapses in a shattered heap." speak_emote = list("hisses") response_help_continuous = "thinks better of touching" response_help_simple = "think better of touching" response_disarm_continuous = "flails at" response_disarm_simple = "flail at" response_harm_continuous = "punches" response_harm_simple = "punch" // Vivid red, cause cult theme lighting_cutoff_red = 30 lighting_cutoff_green = 5 lighting_cutoff_blue = 20 /// List of spells that this construct can cast var/list/construct_spells = list() /// Flavor text shown to players when they spawn as this construct var/playstyle_string = "You are a generic construct. Your job is to not exist, and you should probably adminhelp this." /// The construct's master var/master = null /// Whether this construct is currently seeking nar nar var/seeking = FALSE /// Whether this construct can repair other constructs or cult buildings. Gets the healing_touch component if so. var/can_repair = FALSE /// Whether this construct can repair itself. Works independently of can_repair. 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 /mob/living/basic/construct/Initialize(mapload) . = ..() AddElement(/datum/element/simple_flying) if(length(remains)) AddElement(/datum/element/death_drops, remains) if(smashes_walls) AddElement(/datum/element/wall_smasher, strength_flag = ENVIRONMENT_SMASH_WALLS) if(can_repair) AddComponent(\ /datum/component/healing_touch,\ heal_brute = 5,\ heal_burn = 0,\ heal_time = 0,\ valid_targets_typecache = typecacheof(list(/mob/living/basic/construct, /mob/living/simple_animal/hostile/construct, /mob/living/simple_animal/shade)),\ self_targetting = can_repair_self ? HEALING_TOUCH_ANYONE : HEALING_TOUCH_NOT_SELF,\ action_text = "%SOURCE% begins repairing %TARGET%'s dents.",\ complete_text = "%TARGET%'s dents are repaired.",\ show_health = TRUE,\ heal_color = COLOR_CULT_RED,\ ) var/static/list/structure_types = typecacheof(list(/obj/structure/destructible/cult)) AddElement(\ /datum/element/structure_repair,\ structure_types_typecache = structure_types,\ ) add_traits(list(TRAIT_HEALS_FROM_CULT_PYLONS, TRAIT_SPACEWALK), INNATE_TRAIT) for(var/spell in construct_spells) var/datum/action/new_spell = new spell(src) new_spell.Grant(src) var/spell_count = 1 for(var/datum/action/spell as anything in actions) if(!(spell.type in construct_spells)) continue var/pos = 2 + spell_count * 31 if(construct_spells.len >= 4) pos -= 31 * (construct_spells.len - 4) spell.default_button_position = "6:[pos],4:-2" // Set the default position to this random position spell_count++ update_action_buttons() if(icon_state) add_overlay("glow_[icon_state]_[theme]") /mob/living/basic/construct/Login() . = ..() if(!. || !client) return FALSE to_chat(src, span_bold(playstyle_string)) /mob/living/basic/construct/examine(mob/user) var/text_span switch(theme) if(THEME_CULT) text_span = "cult" if(THEME_WIZARD) text_span = "purple" if(THEME_HOLY) text_span = "blue" . = list("This is [icon2html(src, user)] \a [src]!\n[desc]") if(health < maxHealth) if(health >= maxHealth/2) . += span_warning("[p_They()] look[p_s()] slightly dented.") else . += span_warning(span_bold("[p_They()] look[p_s()] severely dented!")) . += "" return . /mob/living/basic/construct/narsie_act() return /mob/living/basic/construct/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) return FALSE // Allows simple constructs to repair basic constructs. /mob/living/basic/construct/attack_animal(mob/living/simple_animal/user, list/modifiers) if(!isconstruct(user)) if(src != user) return ..() return if(src == user) //basic constructs use the healing hands component instead return var/mob/living/simple_animal/hostile/construct/doll = user if(!doll.can_repair || (doll == src && !doll.can_repair_self)) return ..() if(theme != doll.theme) return ..() if(health >= maxHealth) to_chat(user, span_cult("You cannot repair [src]'s dents, as [p_they()] [p_have()] none!")) return heal_overall_damage(brute = 5) Beam(user, icon_state = "sendbeam", time = 4) user.visible_message( span_danger("[user] repairs some of \the [src]'s dents."), span_cult("You repair some of [src]'s dents, leaving [src] at [health]/[maxHealth] health."), ) /// Construct ectoplasm. Largely a placeholder, since the death drop element needs a unique list. /obj/item/ectoplasm/construct name = "blood-red ectoplasm" desc = "Has a pungent metallic smell."