Calculating Global Coordinates
by Fluen

This tutorial is a thorough and in-depth explanation on the global coordinates of the level editor - partly meant as a reference. However, if you are only interested in how to use the lens flare, you may safely skim through this tutorial as you only need a cursory overview of this information to make a fairly nice lens flare - just go to the last part of this tutorial, where I have made the 'recipe' for calculation of the coordinates (written in red).

I will explain all I have discovered about the LensFlare-command in the tutorial:

How to set up a Global Lens Flare

Global coordinates and how to calculate them

Look at the coordinates shown when FlyCheat is enabled and F1 is pressed:

Thanks to some fortunate coincidences involving a cramped room with blocks to climb, a fixed camera, a target nullmesh and Lara fooling around in a jeep (but not all of it at the same time), I discovered, that the line:
p aaaaa,-bbbb,ccccc is the set of coordinates for the camera, while
t ddddd,-eeee,fffff is the set of coordinates for the camera target (usually Lara) and
r gg is the room number (but I guess most of us knew that already).
(That would explain the letters: p = point of view, t = target and r = room.)

I suspect that Lara's heart or something close by is the centre of her coordinates. Hold F1 while she sits in the jeep and notice that when she changes gear from forwards to backwards, the middle coordinate 'decreases' (the negative number becomes a bit smaller). So the centre of her coordinates must be a part of her which moves during this process.

There is room for one hundred blocks in either direction in the global editor room. 
Some block climbing showed, that a block is 1024 * 1024 in global coordinates. And finally one click is 256 - four clicks are 1024, so the raised block has the same dimensions on all sides.
Be aware that height is negative upwards: If you raise a block four clicks from zero level, the height coordinate goes from 0 to -1024.

I'll use the coordinate description as shown below:

Just to add to the confusion, there is a non usable zone one block wide all around the edge of the level editor window. Try to place a room in one of the corners and you will notice that you can't get your room all the way out to the edge.

When you place a room as far upwards and left as possible and then click the upper- and leftmost block in that room, the (X, Y)-data for that block will say 'Selected Block [ X:0 Y:0 ]'.
But the global coordinates start counting from the edge of the editor window, so the non usable zone counts for the first 1024 in both the X- and the Y-direction and the global coordinates for the block with the editor-coordinates X = 0, Y = 0 (the one you clicked) will be Xglobal= 1024, Yglobal = 1024.

It also means that the X- and Y-coordinates in the level editor window go up to 104448 (100 blocks plus 2 unusable blocks - all multiplied with 1024).

Here is an example taken from the Playable Tutorial Level on how to calculate the global coordinates for a specific block:
I chose this Room:

And in there I highlight a block:

The red 'square' accentuates the coordinates for this particular block. The first piece of information is general for the Mid Room: 'Floor: -16 Ceiling: -8' and it uses clicks.

This is the first challenge! This data always gives you the lowest level of the floor and the highest level of the roof in the chosen room. Try to lower just one block in a room with a levelled floor (use the fresh room the editor always presents when opened) and you will see that the 'Floor:'-information lowers with this one block even though the rest of the floor stays in one place.

The same is the case for the roof. If you raise just one block in the roof, the 'Roof:'-information will raise with it.

I have made things easy for myself by picking a block which is level with the lowest part of the floor. So I already know that its height is -8 clicks. If I needed to know the click-height of another block, I would have to either raise another block from the floor or lower one from the roof and count the clicks until it had the same height as the block I was examining.

Ok, each click is 256 in global coordinates. This block is below zero level so it has a positive value. All I have to do is to multiply 256 with 8 (forget about the negative sign):
Zglobal = 8 * 256 = 2048

Assuming the height for the above block had been above zero, say +11, I would have done the same calculation:
Zglobal = 11 * 256 = 2816 and because it would be above zero level I would put a negative sign in front of it, so +11 clicks are -2816 in global coordinates.
When I do height calculations I only work with the numerical value (the number itself) and add the negative sign afterwards if the block is above zero level.

Now the X- and Y-coordinates:
They are read directly from 'Selected Block [ X:72 Y:31 ]'. But I have to add one (1) to either number because of the non usable zone around the rim of the level area before I can multiply each with 1024.
Xglobal = (72 + 1) * 1024 = 73 * 1024 = 74752
Yglobal = (31 + 1) * 1024 = 32 * 1024 = 32768

The general rule is then:
Xglobal = (X-coordinate from the editor + 1) * 1024
Yglobal = (Y- coordinate from the editor + 1) * 1024
Zglobal = height in clicks (must be examined closer and forget about any negative sign) * 256, and add a negative sign to the final value, if the height is above zero level


Normally, you don't have to use such precision when you work with the lens flare. The command for the lens flare used in Coastal Ruins from Tomb Raider 4 is:
LensFlare = 250000, -32000, 110000, 128, 96, 0 - not very precise, right?
So the exact coordinates are only necessary if it is important for you to be able to see the lens flare in a very specific place. The picture below shows that I wanted it to appear at the same level as the road Lara is driving along. With the road being only three blocks wide, precision is needed.

This leads to the exact order of the coordinates and I must say that it is the strangest coordinate system I have ever encountered. There must have been a compelling reason for this coordinate system when the Tomb Raider Editor was designed (or a wicked devil doing the program design).

The coordinates for the LensFlare-command are:
LensFlare = Y,Z,X,red,green,blue - no wonder, it's confusing!
The same order is used for the coordinates you get when you use F1:
p yyyyy,-zzzzz,xxxxx
t yyyyy,-zzzzz,xxxxx
r nn (= no.)

As an example I suggest you start TRLE and let Lara stay on one spot while you hold F1. If she crouches, the only coordinates that change are the middle coordinates in the p- and the t-line, because Lara only changes her position in height (the t-line) and so the camera aims lower to follow her (the p-line). Remember, Z is height.

Next, climb onto a block so Lara faces exactly north (you know her orientation is right, when you enter the inventory and the compass needle is transparent - it is the red compass needle that must point north). Hold F1 and let Lara roll and notice that the first coordinates in the p- and the t-line stay calm, while the others go crazy.

The real compass directions

Here I have to add something about compass directions. The manual that comes with the level editor says that the upward edge of the editor window is north. That is wrong!

The real compass directions as they work in-game are:

The X-coordinate runs from south to north and the Y-coordinate runs from west to east. If you want the sun (i.e. the lens flare) to rise in the east and set in the west, you must be aware of this. But the Tomb Raider games take place out of our world, so it is not mandatory. For instance, the sunset in Coastal Ruins takes place in the east, so what? 

So when Lara does the rolling around on the block mentioned above, she only moves along the X-axis, while remaining at the same 'Y-height'. And that is why the first coordinate (the Y) in both lines doesn't change.

To make things clear, here is an easy to understand diagram showing the relationship between compass directions and global coordinates: