Phase fixes (#7484)

This commit is contained in:
Guti
2024-01-01 02:13:13 +01:00
committed by GitHub
parent a79e1ba798
commit f32a21f36b
20 changed files with 54 additions and 17 deletions

View File

@@ -8,6 +8,7 @@
#define INVISIBILITY_LIGHTING 20
#define INVISIBILITY_LEVEL_ONE 35
#define INVISIBILITY_LEVEL_TWO 45
#define INVISIBILITY_SHADEKIN 55
#define INVISIBILITY_OBSERVER 60
#define INVISIBILITY_EYE 61

View File

@@ -37,6 +37,8 @@
continue
if(!attack_can_reach(user, SM, 1))
continue
if(SM.is_incorporeal()) // CHOMPADD - Don't cleave phased entities.
continue
if(resolve_attackby(SM, user, attack_modifier = 0.5)) // Hit them with the weapon. This won't cause recursive cleaving due to the cleaving variable being set to true.
hit_mobs++

View File

@@ -96,7 +96,7 @@
if (istype(A,/mob/living))
var/dirtslip = FALSE //CHOMPEdit
var/mob/living/M = A
if(M.lying || M.flying) //VOREStation Edit
if(M.lying || M.flying || M.is_incorporeal()) //VOREStation Edit - CHOMPADD - Don't forget the phased ones.
return ..()
if(M.dirties_floor())

View File

@@ -769,6 +769,9 @@ GLOBAL_LIST_EMPTY(vending_products)
if(!target)
return 0
if(target.is_incorporeal()) // CHOMPADD - Don't shoot at things that aren't there.
return 0
for(var/datum/stored_item/vending_product/R in shuffle(product_records))
throw_item = R.get_product(loc)
if(!throw_item)

View File

@@ -7,6 +7,9 @@
if(!istype(M))
return
if(M.is_incorporeal()) // CHOMPEdit - Don't buckle phased entities.
return
if(!has_buckled_mobs() && !M.buckled && !M.anchored && (issmall(M) || prob(round(seed.get_trait(TRAIT_POTENCY)/3))))
//wait a tick for the Entered() proc that called HasProximity() to finish (and thus the moving animation),
//so we don't appear to teleport from two tiles away when moving into a turf adjacent to vines.

View File

@@ -1,4 +1,4 @@
/mob/living/verb/give(var/mob/living/target in living_mobs(1))
/mob/living/verb/give(var/mob/living/target in living_mobs_in_view(1))
set category = "IC"
set name = "Give"
@@ -43,4 +43,4 @@
if(src.unEquip(I))
target.put_in_hands(I) // If this fails it will just end up on the floor, but that's fitting for things like dionaea.
target.visible_message(SPAN_NOTICE("\The [src] handed \the [I] to \the [target]"))
target.visible_message(SPAN_NOTICE("\The [src] handed \the [I] to \the [target]"))

View File

@@ -431,7 +431,7 @@ emp_act
I.forceMove(vore_selected)
return //CHOMPADD End
if(in_throw_mode && speed <= THROWFORCE_SPEED_DIVISOR) //empty active hand and we're in throw mode
if(canmove && !restrained())
if(canmove && !restrained() && !src.is_incorporeal()) // CHOMPADD - No hands for the phased ones.
if(isturf(O.loc))
if(can_catch(O))
put_in_active_hand(O)
@@ -439,6 +439,9 @@ emp_act
throw_mode_off()
return
if(src.is_incorporeal()) // CHOMPADD - Don't hit what's not there.
return
var/dtype = O.damtype
var/throw_damage = O.throwforce*(speed/THROWFORCE_SPEED_DIVISOR)

View File

@@ -263,7 +263,7 @@
to_chat(src, "<span class='notice'>You take a moment to listen in to your environment...</span>")
for(var/mob/living/L in range(client.view, src))
var/turf/T = get_turf(L)
if(!T || L == src || L.stat == DEAD || is_below_sound_pressure(T))
if(!T || L == src || L.stat == DEAD || is_below_sound_pressure(T) || L.is_incorporeal()) // CHOMPAdd - No bluespace ears.
continue
heard_something = TRUE
var/feedback = list()

View File

@@ -155,7 +155,7 @@
H.shadekin_set_energy(0)
H.ability_flags |= AB_DARK_RESPITE
H.invisibility = INVISIBILITY_LEVEL_TWO
H.invisibility = INVISIBILITY_SHADEKIN
H.adjustFireLoss(-(H.getFireLoss() * 0.75))
H.adjustBruteLoss(-(H.getBruteLoss() * 0.75))
@@ -166,7 +166,7 @@
bp.bandage()
bp.disinfect()
H.nutrition = 0
H.invisibility = INVISIBILITY_LEVEL_TWO
H.invisibility = INVISIBILITY_SHADEKIN
BITRESET(H.hud_updateflag, HEALTH_HUD)
BITRESET(H.hud_updateflag, STATUS_HUD)
BITRESET(H.hud_updateflag, LIFE_HUD)

View File

@@ -246,9 +246,9 @@
add_modifier(/datum/modifier/shadekin_phase_vision)
add_modifier(/datum/modifier/shadekin_phase) //CHOMPEdit - Shadekin probably shouldn't be hit while phasing
sleep(5)
invisibility = INVISIBILITY_LEVEL_TWO
see_invisible = INVISIBILITY_LEVEL_TWO
see_invisible_default = INVISIBILITY_LEVEL_TWO // CHOMPEdit - Allow seeing phased entities while phased.
invisibility = INVISIBILITY_SHADEKIN
see_invisible = INVISIBILITY_SHADEKIN
see_invisible_default = INVISIBILITY_SHADEKIN // CHOMPEdit - Allow seeing phased entities while phased.
//cut_overlays()
update_icon()
alpha = 127

View File

@@ -1,4 +1,4 @@
/mob/living/silicon/robot/verb/robot_nom(var/mob/living/T in living_mobs(1))
/mob/living/silicon/robot/verb/robot_nom(var/mob/living/T in living_mobs_in_view(1))
set name = "Robot Nom"
set category = "IC"
set desc = "Allows you to eat someone."

View File

@@ -128,6 +128,8 @@
//CHOMPSTATION add
if(!M.devourable) //Why was there never a check for edibility to begin with
return 0
if(M.is_incorporeal()) // CHOMPADD - No eating the phased ones
return 0
//CHOMPSTATION add end
if(vore_ignores_undigestable && !M.digestable) //Don't eat people with nogurgle prefs
//ai_log("vr/wont eat [M] because I am picky", 3) //VORESTATION AI TEMPORARY REMOVAL
@@ -172,6 +174,10 @@
/mob/living/simple_mob/proc/CanPounceTarget(var/mob/living/M) //returns either FALSE or a %chance of success
if(!M.canmove || issilicon(M) || world.time < vore_pounce_cooldown) //eliminate situations where pouncing CANNOT happen
return FALSE
// CHOMPADD Start - No pouncing on the shades
if(M.is_incorporeal())
return FALSE
// CHOMPADD End
if(!prob(vore_pounce_chance) || !will_eat(M)) //mob doesn't want to pounce
return FALSE
if(vore_standing_too) //100% chance of hitting people we can eat on the spot

View File

@@ -53,6 +53,8 @@
if(ismob(AM))
if(isliving(AM))
var/mob/living/A = AM
if(A.is_incorporeal()) // CHOMPADD - Bad kin, no squishing the roach
return
if(A.mob_size > MOB_SMALL)
if(prob(squish_chance))
A.visible_message("<span class='notice'>[A] squashed [src].</span>", "<span class='notice'>You squashed [src].</span>")

View File

@@ -429,7 +429,7 @@
env.merge(removed)
for(var/mob/living/carbon/human/l in view(src, min(7, round(sqrt(power/6))))) // If they can see it without mesons on. Bad on them.
if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) // VOREStation Edit - Only mesons can protect you!
if(!istype(l.glasses, /obj/item/clothing/glasses/meson) || l.is_incorporeal()) // VOREStation Edit - Only mesons can protect you! - CHOMPEdit - OR if they're not in the same plane of existence
l.hallucination = max(0, min(200, l.hallucination + power * config_hallucination_power * sqrt( 1 / max(1,get_dist(l, src)) ) ) )
SSradiation.radiate(src, max(power * 1.5, 50) ) //Better close those shutters!

View File

@@ -17,7 +17,7 @@
user.face_atom(A)
if(ismob(A) && user.aiming)
user.aiming.aim_at(A, src)
if(!isliving(A))
if(!isliving(A) || A.is_incorporeal()) // CHOMPEdit - Phase out can't be targetted when phased
return 0
return 1
return 0
return 0

View File

@@ -369,7 +369,7 @@
//
// Clearly super important. Obviously.
//
/mob/living/proc/lick(mob/living/tasted in living_mobs(1, TRUE)) //CHOMPEdit
/mob/living/proc/lick(mob/living/tasted in living_mobs_in_view(1, TRUE)) //CHOMPEdit
set name = "Lick"
set category = "IC"
set desc = "Lick someone nearby!"
@@ -412,7 +412,7 @@
//This is just the above proc but switched about.
/mob/living/proc/smell(mob/living/smelled in living_mobs(1, TRUE)) //CHOMPEdit
/mob/living/proc/smell(mob/living/smelled in living_mobs_in_view(1, TRUE)) //CHOMPEdit
set name = "Smell"
set category = "IC"
set desc = "Smell someone nearby!"

View File

@@ -12,7 +12,7 @@
//
// Simple nom proc for if you get ckey'd into a simple_mob mob! Avoids grabs.
//
/mob/living/simple_mob/proc/animal_nom(mob/living/T in living_mobs(1))
/mob/living/simple_mob/proc/animal_nom(mob/living/T in living_mobs_in_view(1))
set name = "Animal Nom"
set category = "Abilities" // Moving this to abilities from IC as it's more fitting there
set desc = "Since you can't grab, you get a verb!"

View File

@@ -241,6 +241,8 @@
var/datum/sprite_accessory/tail/taur/tail = H.tail_style
src_message = tail.msg_owner_help_run
tmob_message = tail.msg_prey_help_run
if(tmob.is_incorporeal()) // CHOMPEdit - Nothing to step over.
return TRUE
//Smaller person stepping under larger person
else if(get_effective_size(TRUE) < tmob.get_effective_size(TRUE) && ishuman(tmob))

View File

@@ -0,0 +1,14 @@
/atom/proc/living_mobs_in_view(var/range = world.view, var/count_held = FALSE)
var/list/viewers = oviewers(src, range)
if(count_held)
viewers = viewers(src,range)
var/list/living = list()
for(var/mob/living/L in viewers)
if(L.is_incorporeal())
continue
living += L
if(count_held)
for(var/obj/item/weapon/holder/H in L.contents)
if(istype(H.held_mob, /mob/living))
living += H.held_mob
return living

View File

@@ -4600,6 +4600,7 @@
#include "modular_chomp\code\coalesce_ch.dm"
#include "modular_chomp\code\global.dm"
#include "modular_chomp\code\_global_vars\tgui.dm"
#include "modular_chomp\code\_HELPERS\mobs.dm"
#include "modular_chomp\code\_HELPERS\icons\flatten.dm"
#include "modular_chomp\code\_HELPERS\type2type\color.dm"
#include "modular_chomp\code\_onclick\hud\alert.dm"