Merge pull request #438 from LunarFleet/Lun-Demons

Kassc's demon changes
This commit is contained in:
Razgriz
2020-08-04 18:15:29 -07:00
committed by GitHub
7 changed files with 329 additions and 2 deletions
@@ -0,0 +1,200 @@
/mob/living/simple_mob/vore/demonAI
name = "Rift Walker"
desc = "A large bipedal creature, body a mix of dark fur and scales. Marks on the creatures body pulse slowly with red light"
icon_state = "boxfox"
icon_living = "boxfox"
icon_dead = "dead"
icon_rest = "boxfox_rest"
icon = 'icons/mob/demon_ch.dmi'
vis_height = 47
ai_holder_type = /datum/ai_holder/simple_mob/melee/hit_and_run
var/cloaked_alpha = 60 // Lower = Harder to see.
var/cloaked_bonus_damage = 30 // This is added on top of the normal melee damage.
var/cloaked_weaken_amount = 3 // How long to stun for.
var/cloak_cooldown = 10 SECONDS // Amount of time needed to re-cloak after losing it.
var/last_uncloak = 0 // world.time
faction = "demon"
maxHealth = 200
health = 200
movement_cooldown = 0
see_in_dark = 10
has_hands = TRUE
seedarkness = FALSE
attack_sound = 'sound/misc/demonattack.ogg'
has_langs = list(LANGUAGE_GALCOM,LANGUAGE_SHADEKIN,LANGUAGE_CULT)
melee_damage_lower = 10
melee_damage_upper = 5
var/poison_chance = 50
var/poison_type = "mindbreaker"
var/poison_per_bite = 3
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
maxbodytemp = 96669
response_help = "touches"
response_disarm = "pushes"
response_harm = "hits"
attacktext = list("mauled","slashed","clawed")
friendly = list("pokes", "scratches", "rurrs softly at", "sniffs on")
vore_active = 1
swallowTime = 2 SECOND
vore_pounce_chance = 15
vore_icons = SA_ICON_LIVING
vore_escape_chance = 25
var/shifted_out = FALSE
var/shift_state = AB_SHIFT_NONE
var/last_shift = 0
var/blood_spawn = 0
var/is_shifting = FALSE
/mob/living/simple_mob/vore/demonAI/init_vore()
..()
var/obj/belly/B = vore_selected
B.name = "Stomach"
B.desc = "You slide down the slick, slippery gullet of the creature. It's warm, and the air is thick. You can feel the doughy walls of the creatures gut push and knead into your form! Slimy juices coat your form stinging against your flesh as they waste no time to start digesting you. The creature's heartbeat and the gurgling of their stomach are all you can hear as your jostled about, treated like nothing but food."
/mob/living/simple_mob/vore/demonAI/UnarmedAttack()
if(shifted_out)
return FALSE
. = ..()
/mob/living/simple_mob/vore/demonAI/can_fall()
if(shifted_out)
return FALSE
return ..()
/mob/living/simple_mob/vore/demonAI/zMove(direction)
if(shifted_out)
var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src)
if(destination)
forceMove(destination)
return TRUE
return ..()
/mob/living/simple_mob/vore/demonAI/Life()
. = ..()
if(shifted_out)
density = FALSE
/mob/living/simple_mob/vore/demonAI/handle_atmos()
if(shifted_out)
return
else
return .=..()
/mob/living/simple_mob/vore/demonAI/update_canmove()
if(is_shifting)
canmove = FALSE
return canmove
else
return ..()
/mob/living/simple_mob/vore/demonAI/cloak()
if(cloaked)
return
animate(src, alpha = cloaked_alpha, time = 1 SECOND)
cloaked = TRUE
/mob/living/simple_mob/vore/demonAI/uncloak()
last_uncloak = world.time // This is assigned even if it isn't cloaked already, to 'reset' the timer if the spider is continously getting attacked.
if(!cloaked)
return
animate(src, alpha = initial(alpha), time = 1 SECOND)
cloaked = FALSE
// Check if cloaking if possible.
/mob/living/simple_mob/vore/demonAI/proc/can_cloak()
if(stat)
return FALSE
if(last_uncloak + cloak_cooldown > world.time)
return FALSE
return TRUE
// Called by things that break cloaks, like Technomancer wards.
/mob/living/simple_mob/vore/demonAI/break_cloak()
uncloak()
/mob/living/simple_mob/vore/demonAI/is_cloaked()
return cloaked
// Cloaks the spider automatically, if possible.
/mob/living/simple_mob/vore/demonAI/handle_special()
if(!cloaked && can_cloak())
cloak()
// Applies bonus base damage if cloaked.
/mob/living/simple_mob/vore/demonAI/apply_bonus_melee_damage(atom/A, damage_amount)
var/turf/T = get_turf(src)
if(cloaked)
new /obj/effect/gibspawner/generic(T)
playsound(src.loc, 'sound/effects/blobattack.ogg', 50, 1)
uncloak()
return damage_amount + cloaked_bonus_damage
return ..()
// Force uncloaking if attacked.
/mob/living/simple_mob/vore/demonAI/bullet_act(obj/item/projectile/P)
. = ..()
break_cloak()
/mob/living/simple_mob/vore/demonAI/hit_with_weapon(obj/item/O, mob/living/user, effective_force, hit_zone)
. = ..()
break_cloak()
/mob/living/simple_mob/vore/demonAI/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
if(L.reagents)
var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
if(L.can_inject(src, null, target_zone))
inject_poison(L, target_zone)
/mob/living/simple_mob/vore/demonAI/proc/inject_poison(mob/living/L, target_zone)
if(prob(poison_chance))
to_chat(L, "<span class='warning'>You feel a tiny prick.</span>")
L.reagents.add_reagent(poison_type, poison_per_bite)
/mob/living/simple_mob/vore/demonAI/death()
playsound(src, 'sound/misc/demondeath.ogg', 50, 1)
..()
/mob/living/simple_mob/vore/demonAI/bullet_act()
playsound(src, 'sound/misc/demonlaugh.ogg', 50, 1)
..()
/mob/living/simple_mob/vore/demonAI/attack_hand()
playsound(src, 'sound/misc/demonlaugh.ogg', 50, 1)
..()
/mob/living/simple_mob/vore/demonAI/hitby()
playsound(src, 'sound/misc/demonlaugh.ogg', 50, 1)
..()
/mob/living/simple_mob/vore/demonAI/attackby()
playsound(src, 'sound/misc/demonlaugh.ogg', 50, 1)
..()
@@ -0,0 +1,89 @@
/mob/living/simple_mob/vore/demonAI/wendigo
name = "Wendigo"
icon_state = "wendigo"
icon_living = "wendigo"
icon_dead = "wendigo_dead"
icon_rest = "wendigo_rest"
vore_icons = SA_ICON_LIVING
/mob/living/simple_mob/vore/demonAI/engorge
name = "Engorge"
icon_state = "engorge"
icon_living = "engorge"
icon_dead = "dead"
icon_rest = "engorge_rest"
vore_icons = null
/mob/living/simple_mob/vore/demonAI/zellic
name = "Zellic"
icon_state = "zellic"
icon_living = "zellic"
icon_dead = "dead"
icon_rest = null
vore_icons = null
/mob/living/simple_mob/vore/demonAI/avarn
name = "Avarn"
icon_state = "avarn"
icon_living = "avarn"
icon_dead = "dead"
icon_rest = null
vore_icons = null
/mob/living/simple_mob/vore/demonAI/covern
name = "Covern"
icon_state = "covern"
icon_living = "covern"
icon_dead = "dead"
icon_rest = null
vore_icons = null
/mob/living/simple_mob/vore/demonAI/ira
name = "Ira"
icon_state = "ira"
icon_living = "ira"
icon_dead = "dead"
icon_rest = null
vore_icons = null
/mob/living/simple_mob/vore/demonAI/ire
name = "Ire"
icon_state = "ire"
icon_living = "ire"
icon_dead = "dead"
icon_rest = null
vore_icons = null
/mob/living/simple_mob/vore/demonAI/laxel
name = "Laxel"
icon_state = "laxel"
icon_living = "laxel"
icon_dead = "dead"
icon_rest = null
vore_icons = null
/mob/living/simple_mob/vore/demonAI/lutra
name = "Lutra"
icon_state = "lutra"
icon_living = "lutra"
icon_dead = "dead"
icon_rest = null
vore_icons = null
@@ -17,11 +17,14 @@
see_in_dark = 10
has_hands = TRUE
seedarkness = FALSE
attack_sound = 'sound/weapons/bladeslice.ogg'
attack_sound = 'sound/misc/demonattack.ogg'
has_langs = list(LANGUAGE_GALCOM,LANGUAGE_SHADEKIN,LANGUAGE_CULT)
melee_damage_lower = 20
melee_damage_upper = 15
var/poison_chance = 50
var/poison_type = "mindbreaker"
var/poison_per_bite = 3
min_oxy = 0
max_oxy = 0
@@ -96,4 +99,37 @@
canmove = FALSE
return canmove
else
return ..()
return ..()
/mob/living/simple_mob/vore/demon/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
if(L.reagents)
var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
if(L.can_inject(src, null, target_zone))
inject_poison(L, target_zone)
/mob/living/simple_mob/vore/demon/proc/inject_poison(mob/living/L, target_zone)
if(prob(poison_chance))
to_chat(L, "<span class='warning'>You feel a tiny prick.</span>")
L.reagents.add_reagent(poison_type, poison_per_bite)
/mob/living/simple_mob/vore/demon/death()
playsound(src, 'sound/misc/demondeath.ogg', 50, 1)
..()
/mob/living/simple_mob/vore/demon/bullet_act()
playsound(src, 'sound/misc/demonlaugh.ogg', 50, 1)
..()
/mob/living/simple_mob/vore/demon/attack_hand()
playsound(src, 'sound/misc/demonlaugh.ogg', 50, 1)
..()
/mob/living/simple_mob/vore/demon/hitby()
playsound(src, 'sound/misc/demonlaugh.ogg', 50, 1)
..()
/mob/living/simple_mob/vore/demon/attackby()
playsound(src, 'sound/misc/demonlaugh.ogg', 50, 1)
..()