#define DEVIL_HANDS_LAYER 1 #define DEVIL_HEAD_LAYER 2 #define DEVIL_TOTAL_LAYERS 2 /mob/living/carbon/true_devil name = "True Devil" desc = "A pile of infernal energy, taking a vaguely humanoid form." icon = 'icons/mob/32x64.dmi' icon_state = "true_devil" gender = NEUTER health = 350 maxHealth = 350 ventcrawler = 0 density = 1 pass_flags = 0 var/ascended = 0 sight = (SEE_TURFS | SEE_OBJS) status_flags = CANPUSH languages_spoken = ALL //The devil speaks all languages meme languages_understood = ALL //The devil speaks all languages meme mob_size = MOB_SIZE_LARGE var/mob/living/oldform var/list/devil_overlays[DEVIL_TOTAL_LAYERS] /mob/living/carbon/true_devil/New() internal_organs += new /obj/item/organ/brain/ internal_organs += new /obj/item/organ/tongue for(var/X in internal_organs) var/obj/item/organ/I = X I.Insert(src) ..() /mob/living/carbon/true_devil/proc/convert_to_archdevil() maxHealth = 5000 // not an IMPOSSIBLE amount, but still near impossible. ascended = 1 health = maxHealth icon_state = "arch_devil" /mob/living/carbon/true_devil/proc/set_name() name = mind.devilinfo.truename real_name = name /mob/living/carbon/true_devil/Login() ..() mind.announceDevilLaws() mind.announce_objectives() /mob/living/carbon/true_devil/death(gibbed) stat = DEAD ..(gibbed) drop_l_hand() drop_r_hand() spawn (0) mind.devilinfo.beginResurrectionCheck(src) /mob/living/carbon/true_devil/examine(mob/user) var/msg = "*---------*\nThis is \icon[src] [src]!\n" //Left hand items if(l_hand && !(l_hand.flags&ABSTRACT)) if(l_hand.blood_DNA) msg += "It is holding \icon[l_hand] [l_hand.gender==PLURAL?"some":"a"] blood-stained [l_hand.name] in its left hand!\n" else msg += "It is holding \icon[l_hand] \a [l_hand] in its left hand.\n" //Right hand items if(r_hand && !(r_hand.flags&ABSTRACT)) if(r_hand.blood_DNA) msg += "It is holding \icon[r_hand] [r_hand.gender==PLURAL?"some":"a"] blood-stained [r_hand.name] in its right hand!\n" else msg += "It is holding \icon[r_hand] \a [r_hand] in its right hand.\n" //Braindead if(!client && stat != DEAD) msg += "The devil seems to be in deep contemplation.\n" //Damaged if(stat == DEAD) msg += "The hellfire seems to have been extinguished, for now at least.\n" else if(health < (maxHealth/10)) msg += "You can see hellfire inside of it's gaping wounds.\n" else if(health < (maxHealth/2)) msg += "You can see hellfire inside of it's wounds.\n" msg += "*---------*" user << msg /mob/living/carbon/true_devil/IsAdvancedToolUser() return 1 /mob/living/carbon/true_devil/canUseTopic(atom/movable/M, be_close = 0) if(incapacitated()) return 0 if(be_close && !in_range(M, src)) return 0 return 1 /mob/living/carbon/true_devil/assess_threat() return 666 /mob/living/carbon/true_devil/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0) if(mind && has_bane(BANE_LIGHT)) mind.disrupt_spells(-500) return ..() //flashes don't stop devils UNLESS it's their bane. /mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone) var/weakness = check_weakness(I, user) apply_damage(I.force * weakness, I.damtype, def_zone) var/message_verb = "" if(I.attack_verb && I.attack_verb.len) message_verb = "[pick(I.attack_verb)]" else if(I.force) message_verb = "attacked" var/attack_message = "[src] has been [message_verb] with [I]." if(user) user.do_attack_animation(src) if(user in viewers(src, null)) attack_message = "[user] has [message_verb] [src] with [I]!" if(message_verb) visible_message("[attack_message]", "[attack_message]") return TRUE /mob/living/carbon/true_devil/UnarmedAttack(atom/A, proximity) A.attack_hand(src) /mob/living/carbon/true_devil/Process_Spacemove(movement_dir = 0) return 1 /mob/living/carbon/true_devil/singularity_act() if(ascended) return 0 return ..() /mob/living/carbon/true_devil/attack_ghost(mob/dead/observer/user as mob) if(ascended || user.mind.soulOwner == src.mind) var/mob/living/simple_animal/imp/S = new(get_turf(loc)) S.key = user.key S.mind.assigned_role = "Imp" S.mind.special_role = "Imp" var/datum/objective/newobjective = new newobjective.explanation_text = "Try to get a promotion to a higher devilic rank." S.mind.objectives += newobjective S << S.playstyle_string S << "Objective #[1]: [newobjective.explanation_text]" return else return ..() /mob/living/carbon/true_devil/can_be_revived() return 1 /mob/living/carbon/true_devil/resist_fire() //They're immune to fire. /mob/living/carbon/true_devil/attack_hand(mob/living/carbon/human/M) if(..()) switch(M.a_intent) if ("harm") var/damage = rand(1, 5) playsound(loc, "punch", 25, 1, -1) visible_message("[M] has punched [src]!", \ "[M] has punched [src]!") adjustBruteLoss(damage) add_logs(M, src, "attacked") updatehealth() if ("disarm") if (!lying && !ascended) //No stealing the arch devil's pitchfork. if (prob(5)) Paralyse(2) playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) add_logs(M, src, "pushed") visible_message("[M] has pushed down [src]!", \ "[M] has pushed down [src]!") else if (prob(25)) drop_item() playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) visible_message("[M] has disarmed [src]!", \ "[M] has disarmed [src]!") else playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) visible_message("[M] has attempted to disarm [src]!") /mob/living/carbon/true_devil/handle_breathing() // devils do not need to breathe /mob/living/carbon/true_devil/is_literate() return 1 /mob/living/carbon/true_devil/ex_act(severity, ex_target) if(!ascended) var/b_loss switch (severity) if (1) b_loss = 500 if (2) b_loss = 150 if(3) b_loss = 30 if(has_bane(BANE_LIGHT)) b_loss *=2 adjustBruteLoss(b_loss) return ..()