Customising Text and Inventory Items
by AkyV

If we're talking about how to define the inventory names of the inventory items, then we have two methods:

A, You won't define the inventory names in Script, in the case of some inventory items. - An inventory item like that will have one and only one name during the game, always the same. (It doesn't matter how many objects you will use in the object slot of the inventory item, during the game.)
These items are:

- weapons (PISTOLS_ITEM, UZI_ITEM, SHOTGUN_ITEM, CROSSBOW_ITEM, GRENADE_GUN_ITEM, SIXSHOOTER_ITEM)
- ammunition (PISTOLS_AMMO_ITEM, UZI_AMMO_ITEM, SHOTGUN_AMMO1/2_ITEM, CROSSBOW_AMMO1/2/3_ITEM, GRENADE_GUN_AMMO1/2/3_ITEM, SIXSHOOTER_AMMO_ITEM)
- medipacks (BIGMEDI_ITEM, SMALLMEDI_ITEM)
- other tools of Lara (LASERSIGHT_ITEM, FLARE_INV_ITEM, BINOCULARS_ITEM, COMPASS_ITEM, CROWBAR_ITEM)
- waterskins (WATERSKIN_1_EMPTY, 1, 2, 3, WATERSKIN2_EMPTY, 1, 2, 3, 4, 5)
- mechanical scarab (CLOCKWORK_BEETLE, COMBO1, COMBO2)
- quest items (QUEST_ITEM1, 2, 3, 4, 5, 6)
- saving/loading point (MEMCARD_SAVE_INV_ITEM, MEMCARD_LOAD_INV_ITEM)

B, You will define the inventory names in Script, in the case of some inventory items. - An inventory item like that can have more names during the game (maximum one name per each level). (It doesn't matter how many objects you will use in the object slot of the inventory item, during the game.)
These items are:

EXAMINE
KEY_ITEM, COMBO
PICKUP_ITEM, COMBO
PUZZLE_ITEM, COMBO

To define any of those names in Script, use an Inventory Item Script Command (IISC). Every object type has its own IISC:

object type____________IISC

EXAMINE_____________Examine
KEY_ITEM____________Key
KEY_ITEM_COMBO____KeyCombo
PICKUP_ITEM_________Pickup
PICKUP_ITEM_COMBO_PickupCombo
PUZZLE_ITEM_________Puzzle
PUZZLE_ITEM_COMBO_PuzzleCombo

If you use X amount object slots of an object type in a given level, then you need to use X amount of the IISC of that object type, in the [Level] block of that level.
(So, for example, if you use exactly two KEY_ITEM object slots - for example, KEY_ITEM1 and KEY_ITEM2 - in a level, then you need exactly two Key IISC's in the [Level] block of that level - one for KEY_ITEM1 and another one for KEY_ITEM2.
But, for example, if you don't use a PICKUP_ITEM slot in a level, then you don't need a Pickup IISC in the [Level] block of that level.)

You must type the requested name of the object slot into that IISC. - Let's see three examples:

Key= 1, Token, $0013, $0200, $4000, $0000, $0000, $0002
Key= 10, Gate Key, $0008, $0300, $8000, $e000, $0000, $0002
PuzzleCombo= 3, 2, Cartouche Piece 2, $0000, $0400, $0000, $0000, $0000, $0002

It's easy to understand that:

KEY_ITEM1 object slot has the inventory name 'Token' in the actual level.
KEY_ITEM10 object slot has the inventory name 'Gate Key' in the actual level.
PUZZLE_ITEM3_COMBO2 object slot has the inventory name 'Cartouche Piece 2' in the actual level.

But how can I change the name of an inventory item, if I don't type its inventory name in Script?
Well, whether you will define the inventory names in Script or not, you need to define those names in [Strings] section of English.txt:

- If you won't define the inventory name in Script, then always type the name into a given [Strings] entry. (You will find those entries from String#53 to #99.)
For example, the inventory name of SMALLMEDI_ITEM object slot is always typed in String#74. This is 'Small Medipack' now. But if you want to see another name of SMALLMEDI_ITEM during your game, then type the requested name here, replacing 'Small Medipack'.

- If you will define the inventory name in Script, then feel free to use any (!) - unused - [Strings] entry to type the name there. - So now the name will be typed both in Script and [Strings].
(If the text in a [Strings] entry is never typed on the screen during the game, then that string will be unused. - For example, you will find a lot of Examine, Key, Puzzle, Pickup item names in [Strings], from String#100 to #170, that were used for the original TRLR levels. Supposedly, you won't use those names in your game, so feel free to change any of them.)

Notes:

1. As I said, you can use any string of [Strings] to type the name there (if you type the name into Script as well). So, for example, you can find level names in [Strings] from String#3 to #38, but, if you want, you can type, e.g., a PUZZLE_ITEM name in a string of that 3-38 block, replacing an unused level name there.
Despite of that, it's recommended to type a name in the proper block. So, for example, if you want to name a PUZZLE_ITEM, then type the name into the block of Examine, Key, Puzzle, Pickup items (from String#100 to #170).

2. In fact, if you use TRNG, then you will be able to change the inventory name of any inventory item, any time during the game. - See more about it below.

3. This object is a pickable one, but it will never get into Lara's backpack (i.e. into the inventory) that's why you can't name that:

BURNING_TORCH_ITEM

4. Never use these object slots - though they seem to be inventory items:

MAP, SECRET_MAP, DIARY_ITEM, PC_LOAD_INV_ITEM, PC_SAVE_INV_ITEM

5. If you want to change the names of inventory commands (EQUIP, USE etc.) then use the method of 'the inventory item doesn't have a name in Script but it does in [Strings]'.
I mean, for example, the name of 'Equip' inventory command is always typed in a given [Strings] entry, String#44 - but you don't need to type it nowhere else.

2. Item coordinates in the inventory

Okay, but what are those numbers with $ signs in IISC's?
Well, those numbers are hexadecimal numbers. ($ means the number is hexadecimal.) Their purpose is to define the coordinates of the objects in the inventory.

Feel free to use 'usual' (i.e. decimal, devoid of $ signs) numbers instead of hexadecimal numbers now, if you want.
However, if you want to use hexadecimal numbers but you don't know what the hexadecimal value of a decimal number is, then type the decimal number into your Windows calculator and transform that number into a hexadecimal number.


1st number: it defines the vertical coordinate of the item.
If the value is 0 here then the Blue Line End Point (BLEP) is (approximately?) halfway between the upper edge of the screen and the name of the item.

The definition of BLEP: open the item in Animation Editor of WADMerger. See the item there in 'Animation0' state. The BLEP of this item is where that long, blue line ends at the item.

- If you type a negative number here then the object will move so many pixels upwards, compared to Level 0.
- If you type a positive number here then the object will move so many pixels downwards, compared to Level 0.

2nd number: it defines the distance of the item from the camera.

The definition of the camera: it has nothing to do with any cameras in the game this time. I mean this camera is your eye (its visual axis is perpendicular to the screen now) looking at the just selected item in the inventory.

Type Number A here. If the camera saw the item placed in the game, and not in the inventory, and it saw it, for example, 2 centimeters height in A distance, then it also sees it 2 centimeters height now in the inventory.
(Paolone says if A=512 then it means 1 square distance now. I did some tests and I'd rather say a bigger number equals 1 square now. Maybe the well-known 1024.)

3rd number: it defines how the object will be rotated, around Axis X, compared to the default state.

The definition of Axis X (in the default state): it's the vertical axis of the object. It's going through the BLEP of the object.

The definition of the default state: see the item in Animation Editor, in 'Animation0' state. The item is at one end of the long, blue line. Imagine the camera at the other end of the blue line. The longitudinal axis of the camera is the blue line. - Now the camera sees the item in the default state of the item.

Some accentuated values of the clockwise rotations (seeing the item from above in the default state):

90 degrees from the default state = $4000 (16384)
180 degrees from the default state = $8000 (32768)
270 degrees from the default state = $C000 (49152)
360 degrees from the default state = $FFFF (65535)

4th number: it defines how the object will be rotated, around Axis Y, compared to the default state.

The definition of Axis Y (in the default state): it's one of the horizontal axes of the object: perpendicular to the longitudinal axis of the camera. It's going through the BLEP of the object.

Some accentuated values of the clockwise rotations (seeing the item from the left hand side of the camera in the default state):

90 degrees from the default state = $4000 (16384)
180 degrees from the default state = $8000 (32768)
270 degrees from the default state = $C000 (49152)
360 degrees from the default state = $FFFF (65535)

5th number: it defines how the object will be rotated, around Axis Z, compared to the default state.

The definition of Axis Z (in the default state): it's one of the horizontal axes of the object: the extended longitudinal axis of the camera.

Some accentuated values of the clockwise rotations (seeing the item from the camera in the default state):

90 degrees from the default state = $4000 (16384)
180 degrees from the default state = $8000 (32768)
270 degrees from the default state = $C000 (49152)
360 degrees from the default state = $FFFF (65535)

6th number: in fact, this number has nothing to do with the coordinates of the object.
I mean, if an object is not selected in the inventory, then you can see it exactly the way as you defined it in 1st-5th numbers.
But if the object is selected, then it can act in some other ways. - The ways I've identified:

$0002 value - the selected object is rotating around the vertical median axis of the screen (that is just going through the BLEP of the item)
$0000 value - the selected object is still (as if it were non-selected)

Notes:

1. Be careful: the 1st-6th values of the given pickable inventory item may affect the position of the item in the bottom right corner of the screen, when it has just been picked up.
2. See more about inventory item coordinates here: PuzzleCombo old command in NG Center\Reference.

3. TRNG features

3.1. Fonts


Excepting the fonts of the diary and the new type savegame panel, all the fonts in the game (including the font of the inventory) are defined by Font.pc file (see in graphics/wads subfolder of Level Editor main folder) or FONT_GRAPHICS object.
(If a level has a FONT_GRAPHICS then that level will use the font defined in FONT_GRAPHICS.
If a level doesn't have a FONT_GRAPHICS then that level will use the font defined in Font.pc.)

If you want color customization for the font in the inventory, then use this Script command (in the [Title] block to use it for the whole game or only in a [Level] block to use it only for that level):

Customize= CUST_SET_TEXT_COLOR, A, B

In which:

A= the text type you want to customize, defined by a TT constant
B= the new color for the text type, defined by a CL constant (know the CL constants in NG Center\Reference)

Useable TT constants for the inventory are:

TT_ACTION_INVENTORY_MENU_OFF: the just non-selected inventory commands (EQUIP, USE etc.). Default color: light grey (CL_METAL).
TT_ACTION_INVENTORY_MENU_ON: the just selected inventory commands. Default color: pulsing rhythmically between white and dark grey (CL_BLINKING_WHITE).
TT_AMMO: the ammo amount below the weapon items. Default color: yellow (CL_YELLOW).
TT_ITEM_NAME: the name of the selected item (including the amount of the item if it is read). Default color: yellow (CL_YELLOW).

If you want size customization for the font of the inventory, then use this Script command:

TextFormat= A, B, C, D

This is a bit complex command. I mean, if you want the command to customize inventory texts, then:

- always type it into [Title] block, and
- use only Field D, i.e. always type IGNORE into Field A, B and C.

Use SC constants in Field D (know the SC constants in NG Center\Reference) to customize the width/height of the font in the inventory.

Be careful! If you use TextFormat command this way that will modify the size of all the 'TRLE type' texts of the game (menus etc. - except Legend Script command text), and not only the texts in the inventory of a level.

3.2. New names

Sometimes it's good to rename the inventory items in the game.
Just think about it: for example, your game has two levels. In the first level, Lara has a crossbow. But, at the end of the level, you will remove the crossbow from the inventory, because Lara will pick up the harpoon gun in the second level - and the harpoon gun must be put into CROSSBOW_ITEM slot.
The inventory name of the slot won't be typed into Script, so ID58 [Strings] entry will give only one name for CROSSBOW_ITEM slot during the whole game - in spite of we definitely want to rename the original 'Crossbow' name of the slot into 'Harpoon Gun' in the second level.

The problem could be solved by variables:
Type 'Harpoon Gun' into a (any) unused entry of [Strings]. For example, it's ID105 now. Activate three FLIPEFFECTs at the same time in the game (at the moment when you want to change the name):

A, A 'Variables. Numeric. Set' FLIPEFFECT that gives a variable that 105 value.
B, A 'Variables. Memory. Set the <&>Inventory item as Selected Inventory Memory' FLIPEFFECT that makes CROSSBOW_ITEM to be the actual subject of the Inventory Memory Zone.
C, A 'Variables. Memory. Copy from <&>Numeric Variable to (E)Inventory Memory' FLIPEFFECT that gives Value 105 (the actual value of that variable) to the 'String index of Name (Short)' field of the Inventory Memory Zone.

(For the proper working, Trigger C must be the lowest trigger in these overlapped triggers. So always place Trigger C first, and then place either Trigger A or Trigger B. - Or don't use overlapped triggers here, but activate a TriggerGroup, in which you place these triggers, and put Trigger C in the last place in the TriggerGroup.)

3.3. New coordinates

You don't have IISC's in the Script for weapons, ammunition, medipacks, other tools of Lara, waterskins, mechanical scarab (parts), quest items or the objects of saving/loading points to define the coordinates of these items - because they have hardcoded coordinates in the inventory.
But it doesn't mean you can't change the coordinates of those items - all you need is use variables:

If you want to change a coordinate then use the same method as that has been told just above:

- Use a 'Variables. Numeric. Set' FLIPEFFECT to define the requested value of the coordinate. (This time only as a decimal value, of course.)
- Use a 'Variables. Memory. Set the <&>Inventory item as Selected Inventory Memory' FLIPEFFECT to define the item whose coordinate you want to modify.
- Use a 'Variables. Memory. Copy from <&>Numeric Variable to (E)Inventory Memory' FLIPEFFECT to give the coordinate value (the actual value of that variable) to one of these fields of the Inventory Memory Zone:

a, 'Distance of Cam. {Little values bigger items and vice-versa) (Short)' field: if you want to define the distance of the item from the camera.
b, 'Top Border in 2d plane. (Negative numbers move up the item) (Short)' field: if you want to define the vertical position of the item.
c, 'View Flags. (2 = turn endless, $4000 = usable?) (Short)' field: if you want to define how the selected item will be acting (turning, still).
d, 'X Facing about the cam view on X Axis (Short)' field: if you want to define how the item will be rotated, around Axis X, compared to the default state.
e, 'Y Facing about the cam view on Y Axis (Short)' field: if you want to define how the item will be rotated, around Axis Y, compared to the default state.
f, 'Z Facing about the cam view on Z Axis (Short)' field: if you want to define how the item will be rotated, around Axis Z, compared to the default state.

Note:
If you redefined a coordinate value that will affect the whole inventory.
So, for example, if you define a new coordinate value for GRENADE_GUN_AMMO1_ITEM then it will affect the position of that ammo either if that is standalone on the top of the screen or if that is seen below the grenade gun.

Made using TRNG 1.2.2.6