Merge branch '13113'

This commit is contained in:
silicons
2020-08-16 18:53:35 -07:00
100 changed files with 3832 additions and 185 deletions
+14
View File
@@ -476,5 +476,19 @@
hand_bodyparts[i] = BP
..() //Don't redraw hands until we have organs for them
//GetAllContents that is reasonable and not stupid
/mob/living/carbon/proc/get_all_gear()
var/list/processing_list = get_equipped_items(include_pockets = TRUE) + held_items
listclearnulls(processing_list) // handles empty hands
var/i = 0
while(i < length(processing_list) )
var/atom/A = processing_list[++i]
if(SEND_SIGNAL(A, COMSIG_CONTAINS_STORAGE))
var/list/item_stuff = list()
SEND_SIGNAL(A, COMSIG_TRY_STORAGE_RETURN_INVENTORY, item_stuff)
processing_list += item_stuff
return processing_list
/mob/canReachInto(atom/user, atom/target, list/next, view_only, obj/item/tool)
return ..() && (user == src)
@@ -299,10 +299,10 @@
/mob/living/carbon/human/ex_act(severity, target, origin)
if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src))
if(TRAIT_BOMBIMMUNE in dna.species.species_traits)
return
..()
if (!severity)
if (!severity || QDELETED(src))
return
var/brute_loss = 0
var/burn_loss = 0
+1 -1
View File
@@ -57,7 +57,7 @@
/mob/living/Bump(atom/A)
if(..()) //we are thrown onto something
return
if (buckled || now_pushing)
if(buckled || now_pushing)
return
if(ismob(A))
var/mob/M = A
@@ -430,3 +430,6 @@
/mob/living/silicon/handle_high_gravity(gravity)
return
/mob/living/silicon/rust_heretic_act()
adjustBruteLoss(500)
@@ -1058,3 +1058,6 @@ Pass a positive integer as an argument to override a bot's default speed.
if(I)
I.icon_state = null
path.Cut(1, 2)
/mob/living/silicon/rust_heretic_act()
adjustBruteLoss(500)
@@ -0,0 +1,386 @@
/mob/living/simple_animal/hostile/eldritch
name = "Demon"
real_name = "Demon"
desc = ""
gender = NEUTER
mob_biotypes = NONE
speak_emote = list("screams")
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 = "reaps"
response_harm_simple = "tears"
speak_chance = 1
icon = 'icons/mob/eldritch_mobs.dmi'
speed = 0
a_intent = INTENT_HARM
stop_automated_movement = 1
AIStatus = AI_OFF
attack_sound = 'sound/weapons/punch1.ogg'
see_in_dark = 7
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
atmos_requirements = list("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 = INFINITY
healable = 0
movement_type = GROUND
pressure_resistance = 100
del_on_death = TRUE
deathmessage = "implodes into itself"
faction = list("heretics")
simple_mob_flags = SILENCE_RANGED_MESSAGE
///Innate spells that are supposed to be added when a beast is created
var/list/spells_to_add
/mob/living/simple_animal/hostile/eldritch/Initialize()
. = ..()
add_spells()
/**
* Add_spells
*
* Goes through spells_to_add and adds each spell to the mind.
*/
/mob/living/simple_animal/hostile/eldritch/proc/add_spells()
for(var/spell in spells_to_add)
AddSpell(new spell())
/mob/living/simple_animal/hostile/eldritch/raw_prophet
name = "Raw Prophet"
real_name = "Raw Prophet"
desc = "Abomination made from severed limbs."
icon_state = "raw_prophet"
status_flags = CANPUSH
icon_living = "raw_prophet"
melee_damage_lower = 5
melee_damage_upper = 10
maxHealth = 50
health = 50
sight = SEE_MOBS|SEE_OBJS|SEE_TURFS
spells_to_add = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/ash/long,/obj/effect/proc_holder/spell/pointed/manse_link,/obj/effect/proc_holder/spell/targeted/telepathy/eldritch,/obj/effect/proc_holder/spell/pointed/trigger/blind/eldritch)
var/list/linked_mobs = list()
/mob/living/simple_animal/hostile/eldritch/raw_prophet/Initialize()
. = ..()
link_mob(src)
/mob/living/simple_animal/hostile/eldritch/raw_prophet/Login()
. = ..()
client.change_view(10)
/mob/living/simple_animal/hostile/eldritch/raw_prophet/proc/link_mob(mob/living/mob_linked)
if(QDELETED(mob_linked) || mob_linked.stat == DEAD)
return FALSE
if(HAS_TRAIT(mob_linked, TRAIT_MINDSHIELD)) //mindshield implant, no dice
return FALSE
if(mob_linked.anti_magic_check(FALSE, FALSE, TRUE, 0))
return FALSE
if(linked_mobs[mob_linked])
return FALSE
to_chat(mob_linked, "<span class='notice'>You feel something new enter your sphere of mind, you hear whispers of people far away, screeches of horror and a humming of welcome to [src]'s Mansus Link.</span>")
var/datum/action/innate/mansus_speech/action = new(src)
linked_mobs[mob_linked] = action
action.Grant(mob_linked)
RegisterSignal(mob_linked, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING) , .proc/unlink_mob)
return TRUE
/mob/living/simple_animal/hostile/eldritch/raw_prophet/proc/unlink_mob(mob/living/mob_linked)
if(!linked_mobs[mob_linked])
return
UnregisterSignal(mob_linked, list(COMSIG_MOB_DEATH, COMSIG_PARENT_QDELETING))
var/datum/action/innate/mansus_speech/action = linked_mobs[mob_linked]
action.Remove(mob_linked)
qdel(action)
to_chat(mob_linked, "<span class='notice'>Your mind shatters as the [src]'s Mansus Link leaves your mind.</span>")
mob_linked.emote("Scream")
//micro stun
mob_linked.AdjustParalyzed(0.5 SECONDS)
linked_mobs -= mob_linked
/mob/living/simple_animal/hostile/eldritch/raw_prophet/death(gibbed)
for(var/linked_mob in linked_mobs)
unlink_mob(linked_mob)
return ..()
/mob/living/simple_animal/hostile/eldritch/armsy
name = "Terror of the Night"
real_name = "Armsy"
desc = "Abomination made from severed limbs."
icon_state = "armsy_start"
icon_living = "armsy_start"
maxHealth = 200
health = 200
obj_damage = 80
melee_damage_lower = 10
melee_damage_upper = 15
move_resist = MOVE_FORCE_OVERPOWERING+1
movement_type = GROUND
environment_smash = ENVIRONMENT_SMASH_RWALLS
sight = SEE_MOBS
spells_to_add = list(/obj/effect/proc_holder/spell/targeted/worm_contract)
ranged = TRUE
///Previous segment in the chain
var/mob/living/simple_animal/hostile/eldritch/armsy/back
///Next segment in the chain
var/mob/living/simple_animal/hostile/eldritch/armsy/front
///Your old location
var/oldloc
///Allow / disallow pulling
var/allow_pulling = FALSE
///How many arms do we have to eat to expand?
var/stacks_to_grow = 2
///Currently eaten arms
var/current_stacks = 0
//I tried Initalize but it didnt work, like at all. This proc just wouldnt fire if it was Initalize instead of New
/mob/living/simple_animal/hostile/eldritch/armsy/Initialize(mapload,spawn_more = TRUE,len = 6)
. = ..()
if(len < 3)
stack_trace("Eldritch Armsy created with invalid len ([len]). Reverting to 3.")
len = 3 //code breaks below 3, let's just not allow it.
oldloc = loc
RegisterSignal(src,COMSIG_MOVABLE_MOVED,.proc/update_chain_links)
if(!spawn_more)
return
allow_pulling = TRUE
///next link
var/mob/living/simple_animal/hostile/eldritch/armsy/next
///previous link
var/mob/living/simple_animal/hostile/eldritch/armsy/prev
///current link
var/mob/living/simple_animal/hostile/eldritch/armsy/current
for(var/i in 0 to len)
prev = current
//i tried using switch, but byond is really fucky and it didnt work as intended. Im sorry
if(i == 0)
current = new type(drop_location(),FALSE)
current.icon_state = "armsy_mid"
current.icon_living = "armsy_mid"
current.front = src
current.AIStatus = AI_OFF
back = current
else if(i < len)
current = new type(drop_location(),FALSE)
prev.back = current
prev.icon_state = "armsy_mid"
prev.icon_living = "armsy_mid"
prev.front = next
prev.AIStatus = AI_OFF
else
prev.icon_state = "armsy_end"
prev.icon_living = "armsy_end"
prev.front = next
prev.AIStatus = AI_OFF
next = prev
//we are literally a vessel of otherworldly destruction, we bring our own gravity unto this plane
/mob/living/simple_animal/hostile/eldritch/armsy/has_gravity(turf/T)
return TRUE
/mob/living/simple_animal/hostile/eldritch/armsy/can_be_pulled()
return FALSE
///Updates chain links to force move onto a single tile
/mob/living/simple_animal/hostile/eldritch/armsy/proc/contract_next_chain_into_single_tile()
if(back)
back.forceMove(loc)
back.contract_next_chain_into_single_tile()
return
///Updates the next mob in the chain to move to our last location, fixed the worm if somehow broken.
/mob/living/simple_animal/hostile/eldritch/armsy/proc/update_chain_links()
gib_trail()
if(back && back.loc != oldloc)
back.Move(oldloc)
// self fixing properties if somehow broken
if(front && loc != front.oldloc)
forceMove(front.oldloc)
oldloc = loc
/mob/living/simple_animal/hostile/eldritch/armsy/proc/gib_trail()
if(front) // head makes gibs
return
var/chosen_decal = pick(typesof(/obj/effect/decal/cleanable/blood/tracks))
var/obj/effect/decal/cleanable/blood/gibs/decal = new chosen_decal(drop_location())
decal.setDir(dir)
/mob/living/simple_animal/hostile/eldritch/armsy/Destroy()
if(front)
front.icon_state = "armsy_end"
front.icon_living = "armsy_end"
front.back = null
if(back)
QDEL_NULL(back) // chain destruction baby
return ..()
/mob/living/simple_animal/hostile/eldritch/armsy/BiologicalLife(seconds, times_fired)
adjustBruteLoss(-2)
/mob/living/simple_animal/hostile/eldritch/armsy/proc/heal()
if(health == maxHealth)
if(back)
back.heal()
return
else
current_stacks++
if(current_stacks >= stacks_to_grow)
var/mob/living/simple_animal/hostile/eldritch/armsy/prev = new type(drop_location(),spawn_more = FALSE)
icon_state = "armsy_mid"
icon_living = "armsy_mid"
back = prev
prev.icon_state = "armsy_end"
prev.icon_living = "armsy_end"
prev.front = src
prev.AIStatus = AI_OFF
current_stacks = 0
adjustBruteLoss(-maxHealth * 0.5, FALSE)
adjustFireLoss(-maxHealth * 0.5 ,FALSE)
/mob/living/simple_animal/hostile/eldritch/armsy/Shoot(atom/targeted_atom)
target = targeted_atom
AttackingTarget()
/mob/living/simple_animal/hostile/eldritch/armsy/AttackingTarget()
if(istype(target,/obj/item/bodypart/r_arm) || istype(target,/obj/item/bodypart/l_arm))
qdel(target)
heal()
return
if(target == back || target == front)
return
if(back)
back.target = target
back.AttackingTarget()
if(!Adjacent(target))
return
do_attack_animation(target)
//have fun
//if(istype(target,/turf/closed/wall))
//var/turf/closed/wall = target
//wall.ScrapeAway()
if(iscarbon(target))
var/mob/living/carbon/C = target
if(HAS_TRAIT(C, TRAIT_NODISMEMBER))
return
var/list/parts = list()
for(var/X in C.bodyparts)
var/obj/item/bodypart/bodypart = X
if(bodypart.body_part != HEAD && bodypart.body_part != CHEST)
if(bodypart.dismemberable)
parts += bodypart
if(length(parts) && prob(10))
var/obj/item/bodypart/bodypart = pick(parts)
bodypart.dismember()
return ..()
/mob/living/simple_animal/hostile/eldritch/armsy/prime
name = "Lord of the Night"
real_name = "Master of Decay"
maxHealth = 400
health = 400
melee_damage_lower = 20
melee_damage_upper = 25
/mob/living/simple_animal/hostile/eldritch/armsy/prime/Initialize(mapload,spawn_more = TRUE,len = 9)
. = ..()
var/matrix/matrix_transformation = matrix()
matrix_transformation.Scale(1.4,1.4)
transform = matrix_transformation
/mob/living/simple_animal/hostile/eldritch/armsy/primeproc/heal()
if(health == maxHealth)
if(back)
back.heal()
return
else
current_stacks++
if(current_stacks >= stacks_to_grow)
var/mob/living/simple_animal/hostile/eldritch/armsy/prev = new type(drop_location(),spawn_more = FALSE)
icon_state = "armsy_mid"
icon_living = "armsy_mid"
back = prev
prev.icon_state = "armsy_end"
prev.icon_living = "armsy_end"
prev.front = src
prev.AIStatus = AI_OFF
current_stacks = 0
var/matrix/matrix_transformation = matrix()
matrix_transformation.Scale(1.4,1.4)
transform = matrix_transformation
adjustBruteLoss(-maxHealth * 0.5, FALSE)
adjustFireLoss(-maxHealth * 0.5 ,FALSE)
/mob/living/simple_animal/hostile/eldritch/rust_spirit
name = "Rust Walker"
real_name = "Rusty"
desc = "Incomprehensible abomination actively seeping life out of it's surrounding."
icon_state = "rust_walker_s"
status_flags = CANPUSH
icon_living = "rust_walker_s"
maxHealth = 75
health = 75
melee_damage_lower = 15
melee_damage_upper = 20
sight = SEE_TURFS
spells_to_add = list(/obj/effect/proc_holder/spell/aoe_turf/rust_conversion/small,/obj/effect/proc_holder/spell/aimed/rust_wave/short)
/mob/living/simple_animal/hostile/eldritch/rust_spirit/setDir(newdir, ismousemovement)
. = ..()
if(newdir == NORTH)
icon_state = "rust_walker_n"
else if(newdir == SOUTH)
icon_state = "rust_walker_s"
update_icon()
/mob/living/simple_animal/hostile/eldritch/rust_spirit/Moved()
. = ..()
playsound(src, 'sound/effects/footstep/rustystep1.ogg', 100, TRUE)
/mob/living/simple_animal/hostile/eldritch/rust_spirit/Life()
if(stat == DEAD)
return ..()
var/turf/T = get_turf(src)
if(istype(T,/turf/open/floor/plating/rust))
adjustBruteLoss(-3, FALSE)
adjustFireLoss(-3, FALSE)
return ..()
/mob/living/simple_animal/hostile/eldritch/ash_spirit
name = "Ash Man"
real_name = "Ashy"
desc = "Incomprehensible abomination actively seeping life out of it's surrounding."
icon_state = "ash_walker"
status_flags = CANPUSH
icon_living = "ash_walker"
maxHealth = 75
health = 75
melee_damage_lower = 15
melee_damage_upper = 20
sight = SEE_TURFS
spells_to_add = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/ash,/obj/effect/proc_holder/spell/pointed/cleave/long,/obj/effect/proc_holder/spell/aoe_turf/fire_cascade)
/mob/living/simple_animal/hostile/eldritch/stalker
name = "Flesh Stalker"
real_name = "Flesh Stalker"
desc = "Abomination made from severed limbs."
icon_state = "stalker"
status_flags = CANPUSH
icon_living = "stalker"
maxHealth = 150
health = 150
melee_damage_lower = 15
melee_damage_upper = 20
sight = SEE_MOBS
spells_to_add = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/ash,/obj/effect/proc_holder/spell/targeted/shapeshift/eldritch,/obj/effect/proc_holder/spell/targeted/emplosion/eldritch)
@@ -146,6 +146,8 @@
var/bare_wound_bonus = 0
//If the attacks from this are sharp
var/sharpness = SHARP_NONE
//Generic flags
var/simple_mob_flags = NONE
/mob/living/simple_animal/Initialize()
. = ..()