mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-22 04:22:39 +01:00
Morph Gore (#10186)
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user