Morph Gore (#10186)

This commit is contained in:
Geeves
2020-10-12 19:26:38 +02:00
committed by GitHub
parent d8f9f8ad53
commit 4aa4f9a60a
29 changed files with 486 additions and 280 deletions
+1 -1
View File
@@ -725,7 +725,7 @@ var/list/worths = list(
/obj/structure/transit_tube = 80,
/obj/structure/transit_tube_pod = 100,
/obj/structure/toilet = 50,
/obj/structure/alien = 300,
/obj/structure/gore = 300,
/obj/structure/closet = 15,
/obj/structure/bed = 7,
/obj/structure/holostool = 0,
+2
View File
@@ -195,6 +195,8 @@ note dizziness decrements automatically in the mob's Life() proc.
..()
is_floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement.
if(attack_item == FIST_ATTACK_ANIMATION) // only play the physical movement
return
// What icon do we use for the attack?
var/image/I
if(attack_item)
@@ -87,7 +87,7 @@
tally = max(0, tally-3)
var/turf/T = get_turf(src)
if(T)
if(T && !mind.changeling) // changelings don't get movement costs
tally += T.movement_cost
tally += config.human_delay
+1 -1
View File
@@ -794,7 +794,7 @@ default behaviour is:
set category = "IC"
resting = !resting
to_chat(src, "<span class='notice'>You are now [resting ? "resting" : "getting up"]</span>")
to_chat(src, "<span class='notice'>You are now [resting ? "resting" : "getting up"].</span>")
update_vision_cone()
/mob/living/proc/cannot_use_vents()
+1 -1
View File
@@ -441,7 +441,7 @@
else
resting = !resting
icon_state = resting ? "[chassis]_rest" : "[chassis]"
to_chat(src, "<span class='notice'>You are now [resting ? "resting" : "getting up"]</span>")
to_chat(src, "<span class='notice'>You are now [resting ? "resting" : "getting up"].</span>")
canmove = !resting
@@ -8,6 +8,7 @@
icon = 'icons/mob/npc/animal.dmi'
icon_state = "morph"
icon_living = "morph"
icon_rest = "morph_rest"
icon_dead = "morph_dead"
speed = 2.5
stop_automated_movement = TRUE
@@ -28,12 +29,14 @@
maxHealth = 125
health = 125
max_stamina = -1
melee_damage_lower = 12
melee_damage_upper = 16
see_in_dark = 8
see_invisible = SEE_INVISIBLE_NOLIGHTING
stop_sight_update = TRUE
minbodytemp = 0
maxbodytemp = 350
@@ -51,12 +54,51 @@
var/eat_while_disguised = FALSE
var/atom/movable/form = null
var/morph_time = 0
var/static/list/blacklist_typecache = typecacheof(list(/obj/screen, /obj/singularity, /mob/living/simple_animal/hostile/morph, /obj/effect))
var/static/list/blacklist_typecache = typecacheof(list(/obj/screen, /obj/singularity, /mob/living/simple_animal/hostile/morph, /obj/effect, /obj/structure/gore))
/mob/living/simple_animal/hostile/morph/Initialize()
. = ..()
verbs += /mob/living/proc/ventcrawl
var/list/morph_spells = list(/spell/aoe_turf/conjure/node, /spell/aoe_turf/conjure/nest)
for(var/spell in morph_spells)
add_spell(new spell, "const_spell_ready")
/mob/living/simple_animal/hostile/morph/Life()
. = ..()
if(stat == DEAD && healths)
healths.icon_state = "health6"
if(.)
if(healths)
switch(health / maxHealth * 100)
if(100 to INFINITY)
healths.icon_state = "health0"
if(80 to 100)
healths.icon_state = "health1"
if(60 to 80)
healths.icon_state = "health2"
if(40 to 60)
healths.icon_state = "health3"
if(20 to 40)
healths.icon_state = "health4"
if(0 to 20)
healths.icon_state = "health5"
else
healths.icon_state = "health6"
if((stat == UNCONSCIOUS || resting) && locate(/obj/structure/gore/tendrils) in loc)
health = min(maxHealth, health + 1)
/mob/living/simple_animal/hostile/morph/verb/toggle_darkview()
set name = "Toggle Darkvision"
set desc = "Toggles whether you see light or not."
set category = "Abilities"
if(see_invisible == SEE_INVISIBLE_NOLIGHTING)
see_invisible = SEE_INVISIBLE_LIVING
else
see_invisible = SEE_INVISIBLE_NOLIGHTING
/mob/living/simple_animal/hostile/morph/examine(mob/user)
if(morphed)
. = form.examine(user)
@@ -66,6 +108,13 @@
else
return ..()
/mob/living/simple_animal/hostile/morph/proc/update_speed()
switch(m_intent)
if("run")
speed = 1.5
if("walk")
speed = 2.5
/mob/living/simple_animal/hostile/morph/proc/allowed(atom/movable/A)
return !is_type_in_typecache(A, blacklist_typecache) && (isobj(A) || ismob(A))
@@ -201,5 +250,11 @@
return
return ..()
/mob/living/simple_animal/hostile/morph/add_spell(var/spell/spell_to_add, var/spell_base = "wiz_spell_ready", var/master_type = /obj/screen/movable/spell_master)
. = ..()
for(var/obj/screen/movable/spell_master/spell_master in spell_masters)
spell_master.open_state = "morph_open"
spell_master.closed_state = "morph_closed"
/mob/living/simple_animal/hostile/morph/do_animate_chat(var/message, var/datum/language/language, var/small, var/list/show_to, var/duration, var/list/message_override)
INVOKE_ASYNC(src, /atom/movable/proc/animate_chat, message, language, small, show_to, duration)
@@ -696,7 +696,7 @@ mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
else
fall_asleep()
to_chat(src, SPAN_NOTICE("You are now [resting ? "resting" : "getting up"]"))
to_chat(src, SPAN_NOTICE("You are now [resting ? "resting" : "getting up"]."))
update_icon()
@@ -373,11 +373,7 @@
playsound(F, 'sound/species/diona/gestalt_grow.ogg', 30, TRUE)
/datum/reagent/toxin/plantbgone/touch_obj(var/obj/O, var/volume)
if(istype(O, /obj/structure/alien/weeds))
var/obj/structure/alien/weeds/alien_weeds = O
alien_weeds.health -= rand(15, 35)
alien_weeds.healthcheck()
else if(istype(O, /obj/effect/plant))
if(istype(O, /obj/effect/plant))
qdel(O)
/datum/reagent/toxin/plantbgone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
@@ -0,0 +1,14 @@
/spell/aoe_turf/conjure/nest
name = "Create Nest"
desc = "This spell creates a nest beneath you."
charge_max = 600
spell_flags = Z2NOCAST
override_base = "const"
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/obj/structure/bed/nest)
cast_sound = 'sound/effects/attackblob.ogg'
hud_state = "nest"
@@ -0,0 +1,14 @@
/spell/aoe_turf/conjure/node
name = "Create Node"
desc = "This spell creates a node beneath you."
charge_max = 1800
spell_flags = Z2NOCAST
override_base = "const"
invocation = "none"
invocation_type = SpI_NONE
range = 0
summon_type = list(/obj/structure/gore/tendrils/node)
cast_sound = 'sound/effects/attackblob.ogg'
hud_state = "tendril_node"