ID:260849
 
Suggestion: Replace z levels in isometric maps so they can be used for altitude. It should be possible to "look down" on lower z levels and possibly even "look up".

When moving on turfs between z levels the "gliding" animation should extend to moving up/down.

That way, stuff like this can be done more easily.
Been suggested a few times, would require a pretty heavy reworking for the devs. I believe the last 'official' post about it said not any time soon.
This isn't very difficult to do yourself, actually; I did it in less than 200 lines of code.
In response to Jeff8500
So rather than not really contribute anything at all, why not turn it in a demo? You said it yourself, it isn't very difficult, so please take some time, sit down at the computer, clean it up, and publish it!
In response to Airjoe
I'll do it when I have enough time, maybe. It really could use some cleaning up, and I have about 3 different variations of it (I had to change things here and there to get it the way I wanted).

Either way, my contribution was to state that this feature is about as useful as a Bumped() proc :P
In response to Jeff8500
Jeff8500 wrote:
Either way, my contribution was to state that this feature is about as useful as a Bumped() proc :P

I disagree. Bumped() is very straightforward and requires just a small few lines of code. This, to me, seems like quite the system overhaul. If it can't be done cleanly and efficiently in DM, it ought to be included in the system.
In response to Airjoe
Well, without a few extras (which are gravity and a hacky entered/exited height proc), here's almost all the code you would need (minus some variable definitions):

atom/var/height

atom/movable
proc
VertMove(z)
if(loc)
var/turf/T = loc

var/atom/D = T.GetDenseAtomAtHeight(z)
if(D)
Bump(D)
return

var/atom/movable/B = T.GetExitedEffectAtomAtHeight(height)
if(B) B.ExitedEffect(src)


if((abs(z-height)) == 1)
AnimateMove((z-height)*TILEHEIGHT)

else
pixel_z = TILEHEIGHT*z

height = z

B = T.GetEnteredEffectAtomAtHeight(z)
if(B) B.EnteredEffect(src)

AnimateMove(n)

spawn()
var/step_size = pixel_step_size
if(!step_size) step_size = 4

if(n < 0) step_size *= -1

var/i = 0

while(abs(i) < abs(n))

i += step_size
pixel_z += step_size
UponPZChange()
sleep(world.tick_lag)

turf
Enter(atom/movable/A) //slightly modified from lummox JR's code
if(!A.density) return 1
var/atom/D = GetDenseAtomAtHeight(A.height)
return ((!D) || (D == A)) ? 1 : 0

proc
GetAtomsAtHeight(h)
. = new/list
for(var/atom/movable/A as anything in src)
if(A.height == h) . += A
if(height == h) . += src

GetAtomsBetweenHeights(a,b)
. = new/list
for(var/atom/movable/A as anything in src)
if((A.height <= a) && (A.height >= b)) . += A
if((height <= a) && (height >= b)) . += src

GetDenseAtomAtHeight(h)
if((height == h) && (density)) return src
for(var/atom/movable/A as obj|mob in src)
if((A.height == h) && (A.density)) return A


EDIT: It looks like a kind of misinterpreted what Android Data wanted (the Z levels thing). However, this manages a simple height system, making the "climbing ladders" post he referenced easier. Regardless, this is the same thing, nix the Z levels. Plus, it accounts for partial height animations, so things like stairs can be done easily if you add some sort of heightEntered() proc.
In response to Jeff8500
From what I can tell your code does this, except I have to stack everything on top of each other. That is not my intent; I want to put everything on a different z-level, and I also want to be able to use multiple turfs.

Yes, while it's possible to create such a system artificially, it won't be possible to have more than one turf so the obj count goes up, and it's hard as hell to manage since you can't really access the lower layers without extensive right-clicking or removing the top layers first.