mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 02:16:05 +00:00
ethereal fixes and changelog 5947
This commit is contained in:
@@ -57,7 +57,7 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
/mob/living/var/ventcrawl_layer = PIPING_LAYER_DEFAULT
|
/mob/living/var/ventcrawl_layer = PIPING_LAYER_DEFAULT
|
||||||
|
|
||||||
/mob/living/proc/handle_ventcrawl(var/atom/clicked_on)
|
/mob/living/proc/handle_ventcrawl(var/atom/clicked_on)
|
||||||
diary << "[src] is ventcrawling."
|
diary << "[src] is ventcrawling."
|
||||||
if(!stat)
|
if(!stat)
|
||||||
|
|||||||
@@ -514,12 +514,16 @@ Status: []<BR>"},
|
|||||||
for(var/mob/living/simple_animal/C in view(7,src))
|
for(var/mob/living/simple_animal/C in view(7,src))
|
||||||
if(C.stat)
|
if(C.stat)
|
||||||
continue
|
continue
|
||||||
|
if(C.flags & INVULNERABLE)
|
||||||
|
continue
|
||||||
// Ignore lazarus-injected mobs.
|
// Ignore lazarus-injected mobs.
|
||||||
if(dd_hasprefix(C.faction, "lazarus"))
|
if(dd_hasprefix(C.faction, "lazarus"))
|
||||||
continue
|
continue
|
||||||
targets += C
|
targets += C
|
||||||
|
|
||||||
for (var/mob/living/carbon/C in view(7,src)) // loops through all living carbon-based lifeforms in view(12)
|
for (var/mob/living/carbon/C in view(7,src)) // loops through all living carbon-based lifeforms in view(12)
|
||||||
|
if(C.flags & INVULNERABLE)
|
||||||
|
continue
|
||||||
if(istype(C, /mob/living/carbon/alien) && src.check_anomalies) // git those fukken xenos
|
if(istype(C, /mob/living/carbon/alien) && src.check_anomalies) // git those fukken xenos
|
||||||
if(!C.stat) // if it's dead/dying, there's no need to keep shooting at it.
|
if(!C.stat) // if it's dead/dying, there's no need to keep shooting at it.
|
||||||
targets += C
|
targets += C
|
||||||
@@ -569,48 +573,60 @@ Status: []<BR>"},
|
|||||||
spawn() popUp() // pop the turret up if it's not already up.
|
spawn() popUp() // pop the turret up if it's not already up.
|
||||||
dir=get_dir(src,M) // even if you can't shoot, follow the target
|
dir=get_dir(src,M) // even if you can't shoot, follow the target
|
||||||
spawn() shootAt(M) // shoot the target, finally
|
spawn() shootAt(M) // shoot the target, finally
|
||||||
|
if(prob(15))
|
||||||
|
if(prob(50))
|
||||||
|
playsound(get_turf(src), 'sound/effects/turret/move1.wav', 60, 1)
|
||||||
|
else
|
||||||
|
playsound(get_turf(src), 'sound/effects/turret/move2.wav', 60, 1)
|
||||||
|
|
||||||
|
else if(secondarytargets.len>0) // if there are no primary targets, go for secondary targets
|
||||||
|
var/mob/t = pick(secondarytargets)
|
||||||
|
if (istype(t, /mob/living))
|
||||||
|
if (t.stat!=2)
|
||||||
|
spawn() popUp()
|
||||||
|
dir=get_dir(src,t)
|
||||||
|
shootAt(t)
|
||||||
|
if(prob(15))
|
||||||
|
if(prob(50))
|
||||||
|
playsound(get_turf(src), 'sound/effects/turret/move1.wav', 60, 1)
|
||||||
|
else
|
||||||
|
playsound(get_turf(src), 'sound/effects/turret/move2.wav', 60, 1)
|
||||||
else
|
else
|
||||||
if(secondarytargets.len>0) // if there are no primary targets, go for secondary targets
|
spawn()
|
||||||
var/mob/t = pick(secondarytargets)
|
popDown()
|
||||||
if (istype(t, /mob/living))
|
|
||||||
if (t.stat!=2)
|
|
||||||
spawn() popUp()
|
|
||||||
dir=get_dir(src,t)
|
|
||||||
shootAt(t)
|
|
||||||
else
|
|
||||||
spawn() popDown()
|
|
||||||
|
|
||||||
/obj/machinery/porta_turret/proc
|
|
||||||
popUp() // pops the turret up
|
|
||||||
if(disabled)
|
|
||||||
return
|
|
||||||
if(raising || raised) return
|
|
||||||
if(stat & BROKEN) return
|
|
||||||
invisibility=0
|
|
||||||
raising=1
|
|
||||||
flick("popup",cover)
|
|
||||||
sleep(5)
|
|
||||||
sleep(5)
|
|
||||||
raising=0
|
|
||||||
cover.icon_state="openTurretCover"
|
|
||||||
raised=1
|
|
||||||
layer=4
|
|
||||||
|
|
||||||
popDown() // pops the turret down
|
/obj/machinery/porta_turret/proc/popUp() // pops the turret up
|
||||||
if(disabled)
|
if(disabled)
|
||||||
return
|
return
|
||||||
if(raising || !raised) return
|
if(raising || raised) return
|
||||||
if(stat & BROKEN) return
|
if(stat & BROKEN) return
|
||||||
layer=3
|
invisibility=0
|
||||||
raising=1
|
raising=1
|
||||||
flick("popdown",cover)
|
flick("popup",cover)
|
||||||
sleep(10)
|
playsound(get_turf(src), 'sound/effects/turret/open.wav', 60, 1)
|
||||||
raising=0
|
sleep(5)
|
||||||
cover.icon_state="turretCover"
|
sleep(5)
|
||||||
raised=0
|
raising=0
|
||||||
invisibility=2
|
cover.icon_state="openTurretCover"
|
||||||
icon_state="[lasercolor]grey_target_prism"
|
raised=1
|
||||||
|
layer=4
|
||||||
|
|
||||||
|
/obj/machinery/porta_turret/proc/popDown() // pops the turret down
|
||||||
|
if(disabled)
|
||||||
|
return
|
||||||
|
if(raising || !raised) return
|
||||||
|
if(stat & BROKEN) return
|
||||||
|
layer=3
|
||||||
|
raising=1
|
||||||
|
flick("popdown",cover)
|
||||||
|
playsound(get_turf(src), 'sound/effects/turret/open.wav', 60, 1)
|
||||||
|
sleep(10)
|
||||||
|
raising=0
|
||||||
|
cover.icon_state="turretCover"
|
||||||
|
raised=0
|
||||||
|
invisibility=2
|
||||||
|
icon_state="[lasercolor]grey_target_prism"
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/porta_turret/proc/assess_perp(mob/living/carbon/human/perp as mob)
|
/obj/machinery/porta_turret/proc/assess_perp(mob/living/carbon/human/perp as mob)
|
||||||
@@ -1114,6 +1130,7 @@ Status: []<BR>"},
|
|||||||
user << "<span class='warning'>Access denied.</span>"
|
user << "<span class='warning'>Access denied.</span>"
|
||||||
|
|
||||||
else
|
else
|
||||||
|
playsound(get_turf(src), 'sound/weapons/smash.ogg', 60, 1)
|
||||||
Parent_Turret.health -= W.force * 0.5
|
Parent_Turret.health -= W.force * 0.5
|
||||||
if (Parent_Turret.health <= 0)
|
if (Parent_Turret.health <= 0)
|
||||||
Parent_Turret.die()
|
Parent_Turret.die()
|
||||||
|
|||||||
@@ -134,6 +134,10 @@
|
|||||||
if( !area_T || (area_T.type != protected_area.type) )
|
if( !area_T || (area_T.type != protected_area.type) )
|
||||||
protected_area.Exited(T)
|
protected_area.Exited(T)
|
||||||
return 0 //If the guy is somehow not in the turret's area (teleportation), get them out the damn list. --NEO
|
return 0 //If the guy is somehow not in the turret's area (teleportation), get them out the damn list. --NEO
|
||||||
|
if( ismob(T) )
|
||||||
|
var/mob/M = T
|
||||||
|
if(M.flags & INVULNERABLE)
|
||||||
|
return 0
|
||||||
if( iscarbon(T) )
|
if( iscarbon(T) )
|
||||||
var/mob/living/carbon/MC = T
|
var/mob/living/carbon/MC = T
|
||||||
if( !MC.stat )
|
if( !MC.stat )
|
||||||
@@ -160,7 +164,7 @@
|
|||||||
var/list/new_targets = new
|
var/list/new_targets = new
|
||||||
var/new_target
|
var/new_target
|
||||||
for(var/mob/living/carbon/M in protected_area.turretTargets)
|
for(var/mob/living/carbon/M in protected_area.turretTargets)
|
||||||
if(!M.stat)
|
if(!M.stat && !(M.flags & INVULNERABLE))
|
||||||
if(!M.lying || lasers)
|
if(!M.lying || lasers)
|
||||||
new_targets += M
|
new_targets += M
|
||||||
for(var/obj/mecha/M in protected_area.turretTargets)
|
for(var/obj/mecha/M in protected_area.turretTargets)
|
||||||
@@ -173,7 +177,7 @@
|
|||||||
new_targets += V
|
new_targets += V
|
||||||
|
|
||||||
for(var/mob/living/simple_animal/M in protected_area.turretTargets)
|
for(var/mob/living/simple_animal/M in protected_area.turretTargets)
|
||||||
if(!M.stat)
|
if(!M.stat && !(M.flags & INVULNERABLE))
|
||||||
new_targets += M
|
new_targets += M
|
||||||
if(new_targets.len)
|
if(new_targets.len)
|
||||||
new_target = pick(new_targets)
|
new_target = pick(new_targets)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
var/antagHUD = 0
|
var/antagHUD = 0
|
||||||
var/atom/movable/following = null
|
var/atom/movable/following = null
|
||||||
var/mob/canclone = null
|
var/mob/canclone = null
|
||||||
incorporeal_move = 1
|
incorporeal_move = INCORPOREAL_GHOST
|
||||||
|
|
||||||
/mob/dead/observer/New(var/mob/body=null, var/flags=1)
|
/mob/dead/observer/New(var/mob/body=null, var/flags=1)
|
||||||
sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
|
sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
|
||||||
|
|||||||
@@ -145,6 +145,10 @@
|
|||||||
//Drops the item in our hand - you can specify an item and a location to drop to
|
//Drops the item in our hand - you can specify an item and a location to drop to
|
||||||
/mob/proc/drop_item(var/obj/item/to_drop, var/atom/Target)
|
/mob/proc/drop_item(var/obj/item/to_drop, var/atom/Target)
|
||||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/mob/proc/drop_item() called tick#: [world.time]")
|
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/mob/proc/drop_item() called tick#: [world.time]")
|
||||||
|
|
||||||
|
if(!candrop) //can't drop items while etheral
|
||||||
|
return 0
|
||||||
|
|
||||||
if(!to_drop) //if we're not told to drop something specific
|
if(!to_drop) //if we're not told to drop something specific
|
||||||
to_drop = get_active_hand() //drop what we're currently holding
|
to_drop = get_active_hand() //drop what we're currently holding
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,11 @@
|
|||||||
var/mob/living/silicon/robot = null//Appears unused.
|
var/mob/living/silicon/robot = null//Appears unused.
|
||||||
var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm.
|
var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm.
|
||||||
|
|
||||||
|
obj/item/device/mmi/Destroy()
|
||||||
|
if(brainmob)
|
||||||
|
brainmob.ghostize()
|
||||||
|
..()
|
||||||
|
|
||||||
// Return true if handled
|
// Return true if handled
|
||||||
/obj/item/device/mmi/proc/try_handling_mommi_construction(var/obj/item/O as obj, var/mob/user as mob)
|
/obj/item/device/mmi/proc/try_handling_mommi_construction(var/obj/item/O as obj, var/mob/user as mob)
|
||||||
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/device/mmi/proc/try_handling_mommi_construction() called tick#: [world.time]")
|
//writepanic("[__FILE__].[__LINE__] ([src.type])([usr ? usr.ckey : ""]) \\/obj/item/device/mmi/proc/try_handling_mommi_construction() called tick#: [world.time]")
|
||||||
|
|||||||
@@ -537,7 +537,6 @@ var/global/list/animal_count = list() //Stores types, and amount of animals of t
|
|||||||
/mob/living/simple_animal/ex_act(severity)
|
/mob/living/simple_animal/ex_act(severity)
|
||||||
if(flags & INVULNERABLE)
|
if(flags & INVULNERABLE)
|
||||||
return
|
return
|
||||||
|
|
||||||
..()
|
..()
|
||||||
switch (severity)
|
switch (severity)
|
||||||
if (1.0)
|
if (1.0)
|
||||||
|
|||||||
@@ -102,6 +102,7 @@
|
|||||||
var/lying = 0
|
var/lying = 0
|
||||||
var/lying_prev = 0
|
var/lying_prev = 0
|
||||||
var/canmove = 1
|
var/canmove = 1
|
||||||
|
var/candrop = 1
|
||||||
var/lastpuke = 0
|
var/lastpuke = 0
|
||||||
var/unacidable = 0
|
var/unacidable = 0
|
||||||
|
|
||||||
@@ -258,7 +259,7 @@
|
|||||||
|
|
||||||
// /vg/ - Prevent mobs from being moved by a client.
|
// /vg/ - Prevent mobs from being moved by a client.
|
||||||
var/deny_client_move = 0
|
var/deny_client_move = 0
|
||||||
var/incorporeal_move = 0
|
var/incorporeal_move = INCORPOREAL_DEACTIVATE
|
||||||
|
|
||||||
//Keeps track of where the mob was spawned. Mostly for teleportation purposes. and no, using initial() doesn't work.
|
//Keeps track of where the mob was spawned. Mostly for teleportation purposes. and no, using initial() doesn't work.
|
||||||
var/origin_x = 0
|
var/origin_x = 0
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
/proc/ethereal_jaunt(var/mob/living/target, duration, enteranim = "liquify", exitanim = "reappear", mist = 1)
|
/proc/ethereal_jaunt(var/mob/living/target, duration, enteranim = "liquify", exitanim = "reappear", mist = 1)
|
||||||
var/mobloc = get_turf(target)
|
var/mobloc = get_turf(target)
|
||||||
var/previncorp = target.incorporeal_move //This shouldn't ever matter under usual circumstances
|
var/previncorp = target.incorporeal_move //This shouldn't ever matter under usual circumstances
|
||||||
if(target.incorporeal_move == 3) //they're already jaunting, we have another fix for this but this is sane)
|
if(target.incorporeal_move == INCORPOREAL_ETHEREAL) //they're already jaunting, we have another fix for this but this is sane)
|
||||||
return
|
return
|
||||||
target.unlock_from()
|
target.unlock_from()
|
||||||
//Begin jaunting with an animation
|
//Begin jaunting with an animation
|
||||||
@@ -40,9 +40,12 @@
|
|||||||
steam.set_up(10, 0, mobloc)
|
steam.set_up(10, 0, mobloc)
|
||||||
steam.start()
|
steam.start()
|
||||||
//Turn on jaunt incorporeal movement, make him invincible and invisible
|
//Turn on jaunt incorporeal movement, make him invincible and invisible
|
||||||
target.incorporeal_move = 3
|
target.incorporeal_move = INCORPOREAL_ETHEREAL
|
||||||
target.invisibility = INVISIBILITY_MAXIMUM
|
target.invisibility = INVISIBILITY_MAXIMUM
|
||||||
target.flags |= INVULNERABLE
|
target.flags |= INVULNERABLE
|
||||||
|
var/old_density = target.density
|
||||||
|
target.density = 0
|
||||||
|
target.candrop = 0
|
||||||
target.alphas["etheral_jaunt"] = 125 //Spoopy mode to know you are jaunting
|
target.alphas["etheral_jaunt"] = 125 //Spoopy mode to know you are jaunting
|
||||||
target.handle_alpha()
|
target.handle_alpha()
|
||||||
for(var/obj/screen/movable/spell_master/SM in target.spell_masters)
|
for(var/obj/screen/movable/spell_master/SM in target.spell_masters)
|
||||||
@@ -67,6 +70,8 @@
|
|||||||
for(var/obj/screen/movable/spell_master/SM in target.spell_masters)
|
for(var/obj/screen/movable/spell_master/SM in target.spell_masters)
|
||||||
SM.silence_spells(0)
|
SM.silence_spells(0)
|
||||||
target.flags &= ~INVULNERABLE
|
target.flags &= ~INVULNERABLE
|
||||||
|
target.density = old_density
|
||||||
|
target.candrop = 1
|
||||||
target.incorporeal_move = previncorp
|
target.incorporeal_move = previncorp
|
||||||
target.alphas -= "etheral_jaunt"
|
target.alphas -= "etheral_jaunt"
|
||||||
target.handle_alpha()
|
target.handle_alpha()
|
||||||
|
|||||||
@@ -1243,6 +1243,12 @@ var/proccalls = 1
|
|||||||
|
|
||||||
#define SOUND_AMBIANCE 485 //Literally arbitrary.
|
#define SOUND_AMBIANCE 485 //Literally arbitrary.
|
||||||
|
|
||||||
|
//incorporeal_move values
|
||||||
|
#define INCORPOREAL_DEACTIVATE 0
|
||||||
|
#define INCORPOREAL_GHOST 1
|
||||||
|
#define INCORPOREAL_NINJA 2
|
||||||
|
#define INCORPOREAL_ETHEREAL 3
|
||||||
|
|
||||||
|
|
||||||
//MALFUNCTION FLAGS
|
//MALFUNCTION FLAGS
|
||||||
#define COREFIRERESIST 1
|
#define COREFIRERESIST 1
|
||||||
|
|||||||
@@ -123,13 +123,13 @@
|
|||||||
usr.sight |= SEE_OBJS
|
usr.sight |= SEE_OBJS
|
||||||
usr.sight |= SEE_TURFS
|
usr.sight |= SEE_TURFS
|
||||||
//usr.density = 0
|
//usr.density = 0
|
||||||
usr.incorporeal_move = 1
|
usr.incorporeal_move = INCORPOREAL_GHOST
|
||||||
else
|
else
|
||||||
usr.sight &= ~SEE_MOBS
|
usr.sight &= ~SEE_MOBS
|
||||||
usr.sight &= ~SEE_TURFS
|
usr.sight &= ~SEE_TURFS
|
||||||
usr.sight &= ~SEE_OBJS
|
usr.sight &= ~SEE_OBJS
|
||||||
usr.density = 1
|
usr.density = 1
|
||||||
usr.incorporeal_move = 0
|
usr.incorporeal_move = INCORPOREAL_DEACTIVATE
|
||||||
src.verbs -= /client/proc/planar_shift
|
src.verbs -= /client/proc/planar_shift
|
||||||
spawn(300) src.verbs += /client/proc/planar_shift
|
spawn(300) src.verbs += /client/proc/planar_shift
|
||||||
*/
|
*/
|
||||||
|
|||||||
8
html/changelogs/DeityLink_5947.yml
Normal file
8
html/changelogs/DeityLink_5947.yml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
author: Deity Link
|
||||||
|
delete-after: true
|
||||||
|
changes:
|
||||||
|
- bugfix: you can no longer drop items while ethereal
|
||||||
|
- bugfix: turrets no longer track/attack you while you are ethereal
|
||||||
|
- bugfix: projectiles move through you while you are ethereal
|
||||||
|
- bugfix: added missing sounds to portable turrets
|
||||||
|
- bugfix: when destroyed, MMI cause the brain inside them to automatically ghost, so they don't get sent to nullspace.
|
||||||
Reference in New Issue
Block a user