Tomb Raider Forums

Tomb Raider Forums (https://www.tombraiderforums.com/index.php)
-   Tomb Raider Next Generation (https://www.tombraiderforums.com/forumdisplay.php?f=40)
-   -   TRNG - Bugs & Limitations Thread (https://www.tombraiderforums.com/showthread.php?t=165980)

AkyV 22-12-13 13:12

See demo in the previous post.
---------------------------------

[B]About 1.2.2.7x[/B]

1. So after I activated a sprite sequence with F357 then it must be stopped (suspended) by F402?
It didn’t work for me, F402 didn’t do anything.
(I tested with F357 “forever”, frame0 in F402 and with this:
Parameters= PARAM_SHOW_SPRITE, 1, FSS_ANIMATE, 100, 200, 300, 300, CUSTOM_SPRITES, 4, IGNORE, IGNORE, IGNORE, 15364)

2. C92:
I tested it with NEF_EASY_HEAVY_ENABLING objects when they are over a HEAVY F118 for a TriggerGroup. The TG contains C92 and an executable trigger:
- BADDY_2: I created a gap for him to jump over. In the gap I placed that F118. I don’t think it’s OK. When the baddy jumped over the gap, sometimes the F118 was activated when he landed at the opposite edge. On the other hand, when he falled into the gap, then nothing happened.
- ANIMATING: I moved it up/down continuously, from the floor, with a PARAM_MOVE_ITEM. Each time, when he touched the floor, with that F118, the trigger should have been activated. But nothing happened.

I suspect the problem is HEAVY triggers will be activated only when the activator steps into the trigger zone at the first time. (I.e. eg. if the baddy jumps forward from another square and he lands on this "PAD", then he is in the air when he gets into the trigger zone. Or: the ANIMATING is in the trigger zone always, above the HEAVY, it never steps into the zone.)
Moreover, I tried the same with a similar C89 ("if the leading actor is closer the floor than 0"), with the same wrong result.
Now I tried both C92/C89 when the ANIMATING was out of the trigger zone, placed in the floor, moving the object continuously forth/back on the trigger zone, so now the object stepped into the zone. The same wrong result.

However, both C92 and C89 was successful if I tried them in GlobalTriggers, without a placed HEAVY!

3. GT_CREATED NEW ITEM
Not a bug, only some thinking:
I tried this GlobalTrigger:

GlobalTrigger= 1, -1, GT_CREATED_NEW_ITEM, FLARE_ITEM, -1, 3, -1
TriggerGroup= 3, $2000, 244, $FF

[I]; Set Trigger Type - FLIPEFFECT 244
; Exporting: TRIGGER(255:0) for FLIPEFFECT(244)
; <#> : Variables. Memory. Copy to <&>Numeric Variable the (E)Savegame Memory value
; <&> : Current Value
; (E) : TRNG Index. Index of last item found with testposition or condition (Short)
; Values to add in script command: $2000, 244, $FF
[/I]
I have three objects placed in the actual game. The first thing I did I extracted a flare. I dropped down – now Current Value turned into 4. I extracted another flare, dropped it – now Current Value turned into 5. 3+1= 4, 4+1= 5 so they must be tomb index. (Logical, they have no NGLE index.) It means this:
I create this GlobalTrigger after I placed all my objects in the map. Eg. that says 917 is the index of the first dropped flare. So if I’m sure Lara won’t drop a torch, shoot grenades eg. after starting the level, then I can be sure that 920 will be the ID of the fourth dropped flare. – It is great if I want to do some action only on a given dropped flare. (I suppose it is a very dangerous setup because to find that correct ID is not easy, mostly if I place another object after that or if Lara will do anything as well meanwhile, not only dropping flares.)
On the other hand, I can have eg. this triggergroup:

TriggerGroup= 3, $5000+TGROUP_USE_FOUND_ITEM_INDEX, 5, $324

[I]; Set Trigger Type - ACTION 36
; Exporting: TRIGGER(804:0) for ACTION(5)
; <#> : BADDY_2 ID 5 in sector (2,16) of Room0
; <&> : Move. Move continuosly upstairs-downstairs <#>animating of (E) clicks
; (E) : 4 clicks (1 Sectors)
; Values to add in script command: $5000, 5, $324[/I]

Now the TriggerGroup will move up/down any game-created item, after using that GT. Now the setup is not so dangerous, but too general: the trigger will move up/down any actual game created item, I can’t narrow it somehow eg. for flares or a given flare.

Note:
I don't know if it is important informations or not, but, according to my experiences, AI objects are not counted in the amount of placed objects now. (Not all the nullmeshes. Only the AI's.)

4. F404
By the way, old secret triggers have a strange bug (so it is an old bug): if I go back to a level, then the secret (trigger) I found there previously, can be activated once again, increasing the trigger counter. (Whatever the secret ID is.) Even with One Shot.
That's why the new trigger is useful even if you don't want to export it but place it in the map: now One Shot is useful to prevent that bug.

5. F405
By the way, old/new FMV triggers have a strange bug (so it is an old bug): I can play an FMV only once in a level, even without One Shot. If I try to activate another FMV trigger after that for the same FMV file that doesn’t work either, even if the second FMV trigger has not been activated yet.

6.
[QUOTE]Note: really I'm not sure about all above descriptions. I've not had the time to study better above variables[/QUOTE]

Maybe I can help you, for the future TRNG updates: I tested a lot of memory zone values cautiously:

[url]http://www.skribblerz.com/tuts/ngle/ngle3/akhiddentriggers.htm[/url]

7. WeaponAnim. Current animation of torch-flare animation (Short)
WeaponAnim. Current frame of torch-flare animation (Short)
For me, they worked for other ANIM slots absolute animation as well, including weapon anims. (I didn’t test other meshswap slots: eg. crowbar, waterskin or Lara with the shovel in The Sphinx Complex level etc.)

8. WeaponAnim. Current state id of extra lara slots. (Weapons and torch) (Short)
I think
- it is only for torch, and
- it is not StateID for TORCH_ANIM but something else:

= 1 if lara throws the torch away with SPACE (there is no State1 for TORCH_ANIM)
= 2 if Lara drops the torch with extracting a weapon
= 3 if Lara ignites the torch/ignites flame with the torch (it is not TORCH_ANIM animation, but LARA animation)

So this field is exactly (!) the same as “[I]Lara. Test. Throw out item from the Hands (1 = lara is throwing out item) (Short)[/I]” field.

9. Another thought about A88:
If save/load the game will turn the actors back to normal then I need to disable saving games during the cutscenes. It is logical.
But if I use the actor only to use the A88 collision feature eg. to move the actor up a slope with a forced animation, out of cutscenes, then disabling saving seems illogical.
(EDIT - it is an unimportant question.
I mean, the enemy must be placed in an animating slot, so you can control it as a dummy, even out of cutscenes, but using the benefits of A88. Moreover, now the animating enemy doesn't need to be an actor - so save/load won't cause anything about the AI which an animating never has.)

----------------------------------
For the future:
Your binoculars compass made me remember an older tutorial of me:

[url]http://www.skribblerz.com/tuts/ngle/ngle3/akrealtimecompass.htm[/url]

So how about a permanent (concealable?) compass on the screen (with a better accomplishment instead of these static sprites)? (Maybe also removing the old one in the inventory?)

---------------------
Another question, for the future as well (because yes, you're right, it's time to finish TRNG 1.2.2.7):
Excepting for the classic HEAVYSWITCH technique, is there a TRNG way to link a given object to a given HEAVY/HEAVYANTITRIGGER? Eg. if I want only a given baddy2, not all the baddy2's to activate a given HEAVY, though NEF_EASY_HEAVY_ENABLING will work for all of them? (Or the same things with rollingballs, because they don't need that NEF.)
Or if I want only a flaming torch in Lara's hand to activate that HEAVY, so the baddy2 (with NEF_EASY_HEAVY_ENABLING) sauntering there won't be able to do that, even if he gets into the trigger zone? Etc.

AkyV 23-12-13 20:34

@Everyone:

[QUOTE=Paolone;6964661]
[QUOTE]6. Examine text bug
I donít think it is fixed. Moreover now I think at least one but maybe more other fields (I tested only InventoryItemName) seem also effectless now. [/QUOTE]
But I worked on position of examine text, like those about snakes enigma, Now you can move up or down the begin position of the examine text.
[/QUOTE]

Could someone confirm me?
Examine text and inventory name still don't work for me.

Syntax: DefaultWindowsFont= IdWindowsFont, FLAGS (DWF_...), LineSpacing, MainMenuOffsets, NewGameTitle, LoadGameTitle, NewGameList, LoadGameList, OptionSettings, OptionCmdList, PauseScreen, StatList, [B]InventoryItemName, ExamineText[/B]

I used this to test:

[CODE]ColorRGB= 1, 0,255,0
ColorRGB= 2, 255,0,0
WindowsFont= 1, Arial, WFF_BOLD+WFF_UNDERLINE+WFF_ITALIC+WFF_SHADOW+WFF_RIGHT_ALIGN, 40, 1, 2
DefaultWindowsFont= 1, IGNORE, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 700, -500[/CODE]

Paolone 26-12-13 21:00

[QUOTE=AkyV;6966052]See demo in the previous post.
---------------------------------

[B]About 1.2.2.7x[/B]

1. So after I activated a sprite sequence with F357 then it must be stopped (suspended) by F402?
It didnít work for me, F402 didnít do anything.
(I tested with F357 ďforeverĒ, frame0 in F402 and with this:
Parameters= PARAM_SHOW_SPRITE, 1, FSS_ANIMATE, 100, 200, 300, 300, CUSTOM_SPRITES, 4, IGNORE, IGNORE, IGNORE, 15364)
[/quote]

You set as first sprite the value "4". Trng will wait for sprite 0 (you chose with f402 trigger for stop ) but it will never happen. You have to use f402 trigger with a frame (sprite index) that will be really showed in animated sequence.

[quote]
3. GT_CREATED NEW ITEM
Not a bug, only some thinking:
I tried this GlobalTrigger:

GlobalTrigger= 1, -1, GT_CREATED_NEW_ITEM, FLARE_ITEM, -1, 3, -1
TriggerGroup= 3, $2000, 244, $FF

[I]; Set Trigger Type - FLIPEFFECT 244
; Exporting: TRIGGER(255:0) for FLIPEFFECT(244)
; <#> : Variables. Memory. Copy to <&>Numeric Variable the (E)Savegame Memory value
; <&> : Current Value
; (E) : TRNG Index. Index of last item found with testposition or condition (Short)
; Values to add in script command: $2000, 244, $FF
[/I]
I have three objects placed in the actual game. The first thing I did I extracted a flare. I dropped down Ė now Current Value turned into 4. I extracted another flare, dropped it Ė now Current Value turned into 5. 3+1= 4, 4+1= 5 so they must be tomb index. (Logical, they have no NGLE index.) It means this:
I create this GlobalTrigger after I placed all my objects in the map. Eg. that says 917 is the index of the first dropped flare. So if Iím sure Lara wonít drop a torch, shoot grenades eg. after starting the level, then I can be sure that 920 will be the ID of the fourth dropped flare. Ė It is great if I want to do some action only on a given dropped flare. (I suppose it is a very dangerous setup because to find that correct ID is not easy, mostly if I place another object after that or if Lara will do anything as well meanwhile, not only dropping flares.)
On the other hand, I can have eg. this triggergroup:

TriggerGroup= 3, $5000+TGROUP_USE_FOUND_ITEM_INDEX, 5, $324

[I]; Set Trigger Type - ACTION 36
; Exporting: TRIGGER(804:0) for ACTION(5)
; <#> : BADDY_2 ID 5 in sector (2,16) of Room0
; <&> : Move. Move continuosly upstairs-downstairs <#>animating of (E) clicks
; (E) : 4 clicks (1 Sectors)
; Values to add in script command: $5000, 5, $324[/I]

Now the TriggerGroup will move up/down any game-created item, after using that GT. Now the setup is not so dangerous, but too general: the trigger will move up/down any actual game created item, I canít narrow it somehow eg. for flares or a given flare.
[/quote]

Probably I could understand better the problem if you did an example in game playing. I mean, a situation where in reasonable way, you need to discern between one or other created flare to do happen different effects.

Because if these flares have a different effect in game (that you wish) I suppose there will some of their layout or position that will be seen also from the player.
You should work on that difference to recognize one between others.
[quote]
Note:
I don't know if it is important informations or not, but, according to my experiences, AI objects are not counted in the amount of placed objects now. (Not all the nullmeshes. Only the AI's.)
[/quote]
It's true, I confirm that.
For this reason when you use AI you need to supply an OCB rather an index. The ocb will be used to locate the given AI item.

[quote]
5. F405
By the way, old/new FMV triggers have a strange bug (so it is an old bug): I can play an FMV only once in a level, even without One Shot. If I try to activate another FMV trigger after that for the same FMV file that doesnít work either, even if the second FMV trigger has not been activated yet.
[/quote]
It's true. I used same code (about fmv triggering) used in the last revelation.
There is a mask array, where will be store the already played fmv and for this reason it's indifferent if you use a single-shot or multishot trigger.

[quote]
Maybe I can help you, for the future TRNG updates: I tested a lot of memory zone values cautiously:

[url]http://www.skribblerz.com/tuts/ngle/ngle3/akhiddentriggers.htm[/url]
[/quote]
Thanks, good job, I'll check it.

[quote]

Another question, for the future as well (because yes, you're right, it's time to finish TRNG 1.2.2.7):
Excepting for the classic HEAVYSWITCH technique, is there a TRNG way to link a given object to a given HEAVY/HEAVYANTITRIGGER? Eg. if I want only a given baddy2, not all the baddy2's to activate a given HEAVY, though NEF_EASY_HEAVY_ENABLING will work for all of them? (Or the same things with rollingballs, because they don't need that NEF.)
[/quote]
In hardcoded way, you can perform a triggergroup when there is this heavy/antiheavy trigger. At begin of triggergroup you set a condition that compare the current index with the constan value of ngle index (you have to convert it first comparing, of course).
while a method a bit more customizable, is to type a ocb value only in enemy you wish enable the trigger and then in the conidtion you check if ocb value (using variables) is that you set.
[quote]
Or if I want only a flaming torch in Lara's hand to activate that HEAVY, so the baddy2 (with NEF_EASY_HEAVY_ENABLING) sauntering there won't be able to do that, even if he gets into the trigger zone? Etc.[/QUOTE]

If you catch the torch index of lara you can use same method above, I believe.

Paolone 26-12-13 21:16

[QUOTE=AkyV;6964819]You misunderstood. Not the actors are close to each other, only the camera is too close to the target. ;)
[/quote]

Oh, weird. :confused:
Then is it indifferent where is Lara in that moment?
[quote]
Try eg. a baddy1 or a big scorpion in an animating slot to force him to walk out of its room, into other rooms. I used default (18◊18) rooms for the test. The animating started blinking in the non-original room, and then walked through the walls into the nothing.
However, I think it is not a TRNG problem, I experienced this in the old TRLE as well, even with objects that were animatings originally.
[/quote]
Ah, now I understand. :D
It's obvious. Animating slot don't update the room number of animating item and when a moveable move outside from his original room without update some internal structure, there are those troubles you describe.
I could do a trigger to update room of any movable but then it should be called to right moment, I suppose. I'm not sure, I'll check...


[quote]
OK, I'll send one later.
-------------
EDIT:
Here you are:
[url]https://www.mediafire.com/?sb3twvzazqz76gl[/url][/QUOTE]

[/quote]

I thank you. ;)

Paolone 26-12-13 21:19

[QUOTE=AkyV;6966892]
Could someone confirm me?
Examine text and inventory name still don't work for me.

I used this to test:
ColorRGB= 1, 0,255,0
ColorRGB= 2, 255,0,0
WindowsFont= 1, Arial, WFF_BOLD+WFF_UNDERLINE+WFF_ITALIC+WFF_SHADOW+WFF_RIGHT_ALIGN, 40, 1, 2
DefaultWindowsFont= 1, IGNORE, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 700, -500[/QUOTE]

You set a huge value (-500), moving the text outside of screen in top side.
Try to use: first time, no change (-1) and second time a value like "40".
I had tried with little values to center vertically the description of snake enigma and it worked.

AkyV 27-12-13 13:03

[QUOTE=Paolone;6968272]You set as first sprite the value "4". Trng will wait for sprite 0 (you chose with f402 trigger for stop ) but it will never happen. You have to use f402 trigger with a frame (sprite index) that will be really showed in animated sequence.[/QUOTE]

Right. My setup was wrong.
Anyway, how about an "actual sprite" option, so the animation can be suspended right away when activating F402?

[QUOTE]Probably I could understand better the problem if you did an example in game playing. I mean, a situation where in reasonable way, you need to discern between one or other created flare to do happen different effects.

Because if these flares have a different effect in game (that you wish) I suppose there will some of their layout or position that will be seen also from the player.
You should work on that difference to recognize one between others.[/QUOTE]

You know... I guess my thinking was wrong...
I mean, for a given flare I can use a given condition, in usual ways. Eg. "bigger shining for the flare if it is dropped in a room with poisonable air". - Now I use this:

GlobalTrigger= 1, -1, GT_CREATED_NEW_ITEM, FLARE_ITEM, -1, 3, -1
TriggerGroup= 3, $2000, 244, $FF

; Set Trigger Type - FLIPEFFECT 244
; Exporting: TRIGGER(255:0) for FLIPEFFECT(244)
; <#> : Variables. Memory. Copy to <&>Numeric Variable the (E)Savegame Memory value
; <&> : Current Value
; (E) : TRNG Index. Index of last item found with testposition or condition (Short)
; Values to add in script command: $2000, 244, $FF

Then I examine if Current Value is not 0 (so a flare is just dropped), and if it is that poisonable room (I hope "Room (Room where is the item) (Short)" item memory zone works for that flare index now), then I add an AddEffect to the flare. (Though the condition must be more complex, because "not 0" condition is true only for the first flare...)

However, it gave me some ideas for the future TRNG updates - how about them?:

- CUST_FLARE: enhance it, so different flares (dropped or in Lara's hand) can have different effects (depending on the circumstances?),
- AssignSlot-like command for "pickables only with one slot", so eg. I could pick up "flares with red light" or "flares with green light" etc. (It could be difficult, because eg. crowbar1 for a given task needs another handmesh than crowbar2 for another task.)

[QUOTE]Oh, weird.
Then is it indifferent where is Lara in that moment?[/QUOTE]

Yes, it is not related to Lara's position.

[QUOTE]You set a huge value (-500), moving the text outside of screen in top side.
Try to use: first time, no change (-1) and second time a value like "40".
I had tried with little values to center vertically the description of snake enigma and it worked. [/QUOTE]

1. Yes, too big values seem useless.
2. "Snake" is Examine3. That is good for me. But Examine2 (with two paragraphs) is still wrong.

Paolone 27-12-13 14:50

[QUOTE=AkyV;6966052]
Maybe I can help you, for the future TRNG updates: I tested a lot of memory zone values cautiously:

[url]http://www.skribblerz.com/tuts/ngle/ngle3/akhiddentriggers.htm[/url]
[/quote]

Oh, well, I just read some page of your tutorial about "hidden triggers", it's really an awesome work. :eek:

About the chance to modify so many descriptions of memory variables I've the problem of time and the wideness of your work get it yet more complicated.
So I could do that work for next (a bit far) 1.2.2.8 version, after I had studied all your tutorial.
Or, since you have all in your mind about it, you could modify now description of critical variabile you discovered.
You are free to say "no", of course.
Anyway I attach here the internal code of ngle source where there are all memory descriptions.

In the case you wish change it, just you edit only the text part included in quotes.

For instance in the row:

[quote]
{(BYTE *) 0x80E01A, 'S', "Dash Bar Value (0 - 120)"},
[/quote]

You should change only the text:
[code]
Dash Bar Value (0 - 120)
[/code]

You can edit only some of them, those you believe had most meaningful difference respect original description.

Here there is full list in source code format:
[Code]
// NON AGGIUNGERE MAI ALL'INIZIO MA SOLO IN FONDO
StrAdrMemory VetCodeMemory[] = {
{(BYTE *) &GlobTomb4.BaseBassHandles.VetCanali[0].NumeroCd, 'S', "Audio Track Number on Channel 1 (only for read)"},
{(BYTE *) &GlobTomb4.BaseBassHandles.VetCanali[1].NumeroCd, 'S', "Audio Track Number on Channel 2 (only for read)"},
{NULL, 'B', "Script Dat. Option Flags (Use bit operations to read or write)"},
{(BYTE *) 0x7FD170, 'B', "Current Level number (more updated than savegame memory)"},
{(BYTE *) 0x7FD140, 'S', "Script Dat. Level Flags (Use bit operation to read or change)"},
{(BYTE *) 0x7FE738, 'L', "Earthquake vertical movement (negative values)"},
{(BYTE *) 0x753C60, 'S', "Screen. Width game screen in pixel (only for read)"},
{(BYTE *) 0x753BB0, 'S', "Screen. Height game screen in pixel (only for read)"},
{(BYTE *) 0x535780, 'L', "KeyBoard Game Command hit (Use bit operations with KEY1_ constants)"},
{(BYTE *) 0x80E01A, 'S', "Dash Bar Value (0 - 120)"},
{(BYTE* ) 0x4AC060, 'L', "Inventory Item required in game (example, crowbar for door)"},
{(BYTE* ) 0x4AC064, 'L', "Inventory Item just chosen from inventory (example a key to open a door)"},
{(BYTE *) 0x7E70CC, 'L', "Frame System Counter. (Works always, in game, inventory and pause screens) "},
{(BYTE *) 0x4BF5BC, 'L', "Test. There is a Flyby in progress (1 = true / 0 = false)"},
{(BYTE *) 0x4AD439, 'B', "Test. How entered in current game (New level=0; From savegame = 4)"},
{(BYTE *) 0x4B1710, 'L', "Music volume (max = 100)"},
{(BYTE *) 0x4B1714, 'L', "Sound SFX volume (max = 100)"},
{(BYTE *) 0x7FE724, 'L', "Camera Mode Now (0='follow me', 1='fixed', 2='look'; 3 ='combat')"},
{(BYTE *) 0x7FE720, 'L', "Camera Mode Next (0='follow me', 1='fixed', 2='look'; 3 ='combat')"},
{(BYTE *) 0x7FD132, 'B', "Speed Layer1 (4th field of Layer1= script command)"},
{(BYTE *) 0x7FD131, 'B', "Speed Layer2 (4th field of Layer2= script command)"},
{(BYTE *) 0x4BF248, 'B', "Test. Disable Fog Bulbs (1 = disable)"},
{(BYTE *) 0x7FD138, 'L', "Frame 3d Counter. (It works in game and inventory but not in pause)"},
{(BYTE *) 0x80DEE8, 'S', "Index of current vehicle or -1 if lara's not using a vehicle"},
{NULL,0,NULL}};
// NON AGGIUNGER MAI ALL'INIZIO MA SOLO IN FONDO
StrAdrMemory VetSlotMemory[] = {{(BYTE *) 0x0, 'S', "Number of Meshes" },
{(BYTE *) 0x2, 'S', "First Mesh Index"},
{(BYTE *) 0xC, 'L', "Pointer for Initialization Procedure"},
{(BYTE *) 0x10, 'L', "Pointer for Main Control Procedure"},
{(BYTE *) 0x14, 'L', "Pointer for Special Floor Procedure"},
{(BYTE *) 0x18, 'L', "Pointer for Special Ceiling Procedure"},
{(BYTE *) 0x1C, 'L', "Pointer for Emitter Procedure"},
{(BYTE *) 0x20, 'L', "Pointer for Collision Procedure"},
{(BYTE *) 0x24, 'S', "Unknown1 (Pheraps distance to enable the MIP version)"},
{(BYTE *) 0x28, 'S', "HP. Max Vitality at start"},
{(BYTE *) 0x2A, 'S', "Unknown2 (Usually it has value 50)"},
{(BYTE *) 0x2C, 'S', "Unknown3 (It will be copied in Custom_B field of Item structure)"},
{(BYTE *) 0x2E, 'S', "FootStep (Shadow below Lara or enemies)"},
{(BYTE *) 0x30, 'S', "Test Attack Lara (1=attack, 0 =ignore lara)"},
{(BYTE *) 0x32, 'S', "Flags. Main flags"},
{(BYTE *) 0x34, 'L', "Pointer for Draw Extra Procedure (used by jeep, sidecar)"},
{(BYTE *) 0x38, 'L', "Explosion Mask. (Each bit a type of weapon able to do explode it"},
{(BYTE *) 0x3C, 'L', "Unknown4"},
{(BYTE *) 0x26, 'S', "First Animation Index"},
{NULL,0,NULL}};

// NON AGGIUNGER MAI ALL'INIZIO MA SOLO IN FONDO
StrAdrMemory VetItemMemory[] = {{(BYTE *) 0x0, 'L', "Height Floor below the item"},
{(BYTE *) 0x4, 'L', "Contact Flags ($2400 = damage lara on touching)"},
{(BYTE *) 0x8, 'L', "Visible Mesh Flags (each mesh a different bit)"},
{(BYTE *) 0xC, 'S', "Slot Id (number of slot)"},
{(BYTE *) 0xE, 'S', "State Id Now"},
{(BYTE *) 0x10, 'S', "State Id Next"},
{(BYTE *) 0x12, 'S', "Unknown (Pheraps accelleration on falling)"},
{(BYTE *) 0x14, 'S', "Animation Now (Number of current animation)"},
{(BYTE *) 0x16, 'S', "Frame Now (warning it's an abs value)"},
{(BYTE *) 0x18, 'S', "Room (Room where is the item)"},
{(BYTE *) 0x1E, 'S', "Speed in horizontal movements"},
{(BYTE *) 0x20, 'S', "Speed vertical movements or underwater"},
{(BYTE *) 0x22, 'S', "HP (Current life level. $C000 = unkillable)"},
{(BYTE *) 0x26, 'S', "Unknown Countdown (Some counter, not yet discovered)"},
{(BYTE *) 0x28, 'S', "Object buttons. Five buttons + invisible button"},
{(BYTE *) 0x29, 'B', "Custom Flags (Different flags in according with object type)"},
{(BYTE *) 0x2A, 'S', "Unknown (Used when enemy shot a granade = $c210)"},
{(BYTE *) 0x2C, 'S', "OCB Code (The value you typed in OCB of this item)"},
{(BYTE *) 0x2E, 'B', "Unknown (Sprite1 Id)"},
{(BYTE *) 0x2F, 'B', "Unknown (Sprite2 Id)"},
{(BYTE *) 0x30, 'S', "Transparence level (0 = opaque / 126 transparent / over 127 removes item)"},
{(BYTE *) 0x34, 'S', "Custom_A (Different usage in according with type of item)"},
{(BYTE *) 0x36, 'S', "Custom_B (Different usage in according with type of item)"},
{(BYTE *) 0x38, 'S', "Custom_C (Different usage in according with type of item)"},
{(BYTE *) 0x3A, 'S', "Custom_D (Different usage in according with type of item)"},
{(BYTE *) 0x40, 'L', "Position X"},
{(BYTE *) 0x44, 'L', "Position Y"},
{(BYTE *) 0x48, 'L', "Position Z"},
{(BYTE *) 0x4C, 'S', "Facing Vertical"},
{(BYTE *) 0x4E, 'S', "Facing Horizontal"},
{(BYTE *) 0x50, 'S', "Facing Rotation (Only for Lara)"},
{(BYTE *) 0x52, 'L', "Unknown (Light_A)"},
{(BYTE *) 0x56, 'L', "Unknown (Light_B)"},
{(BYTE *) 0x5A, 'L', "Unknown (Light_C)"},
{(BYTE *) 0x5E, 'L', "Unknown (Light_D)"},
{(BYTE *) 0x62, 'L', "Unknown (Light_E)"},
{(BYTE *) 0x66, 'L', "Unknown (Light_F)"},
{(BYTE *) 0x6A, 'L', "Unknown (Light_G)"},
{(BYTE *) 0x6E, 'L', "Unknown (Light_H)"},
{(BYTE *) 0x15EA, 'L', "Flags of Item"},
{NULL,0,NULL}};
// NON AGGIUNGER MAI ALL'INIZIO MA SOLO IN FONDO
StrAdrMemory VetMemoryAnimation[] = {
{(BYTE *) 0x4, 'B', "Frame Rate"},
{(BYTE *) 0x5, 'B', "Frame Size"},
{(BYTE *) 0x6, 'S', "State Id"},
{(BYTE *) 0x8, 'S', "Unknown1"},
{(BYTE *) 0xA, 'S', "Speed"},
{(BYTE *) 0xC, 'S', "Low Accelleration"},
{(BYTE *) 0xE, 'S', "High Accelleration"},
{(BYTE *) 0x10, 'S', "Unknown2"},
{(BYTE *) 0x12, 'S', "Next Speed"},
{(BYTE *) 0x14, 'S', "Next Low Acceleration"},
{(BYTE *) 0x16, 'S', "Next High Acceleration"},
{(BYTE *) 0x18, 'S', "First absolute Frame index"},
{(BYTE *) 0x1A, 'S', "Last absolute Frame index"},
{(BYTE *) 0x1C, 'S', "Next Animation index"},
{(BYTE *) 0x1e, 'S', "Next Frame index"},
{(BYTE *) 0x20, 'S', "Number of State Changes"},
{(BYTE *) 0x22, 'S', "Absolute Index of first State Change"},
{(BYTE *) 0x24, 'S', "Number of Animation Commands"},
{(BYTE *) 0x26, 'S', "Absolute Index of first AnimCommand"},
{NULL,0,NULL}};
// NON AGGIUNGER MAI ALL'INIZIO MA SOLO IN FONDO
StrAdrMemory VetMemorySavegame[] = {
{(BYTE *) &GlobTomb4.IndiceItemCondizione, 'S', "TRNG Index. Index of last item found with testposition or condition"},
{(BYTE *) &GlobTomb4.IndiceItemAnimCommand, 'S', "TRNG Index. Index of moveable performing last AnimComand"},
{(BYTE *) &GlobTomb4.IndiceItemSelected, 'S', "TRNG Index. Item Index for Selected Item Memory" },
{(BYTE *) 0x80DEC0, 'S', "Lara. Item Index of Lara"},
{(BYTE *) 0x80DEC2, 'S', "Lara. Hands. Attached Lara Status"},
{(BYTE *) 0x80DEC4, 'S', "Lara. Hands. Item in the Hands of Lara (Current)"},
{(BYTE *) 0x80DEC6, 'S', "Lara. Hands. Item in the Hands of Lara (Following"},
{(BYTE *) 0x80DEC8, 'S', "Lara. Current Weapon (not necessarly in the hand)"},
{(BYTE *) 0x80DECC, 'S', "Lara. Environment where lara is. (ground, underwater ecc,)"},
{(BYTE *) 0x80DECE, 'S', "Lara. Test. Climb sector Test (=1 yes; =0 no)"},
{(BYTE *) 0x80DED6, 'S', "Lara. Air for Lara (0 - 1800)"},
{(BYTE *) 0x80DEDA, 'S', "System. Disable special keys (15 disable inventory pause f5)"},
{(BYTE *) 0x80DEE6, 'S', "Lara. Hands. Remaining time with lighted flare in the hand"},
{(BYTE *) 0x80DEEA, 'S', "WeaponAnim. Index of fake item with animations for current weapon (only big weapons)"},
{(BYTE *) 0x80DEEC, 'S', "Lara. Weapon on the back of Lara"},
{(BYTE *) 0x80DEF0, 'S', "Lara. Poison1 (giant scorpion = 2048)"},
{(BYTE *) 0x80DEF2, 'S', "Lara. Poison2"},
{(BYTE *) 0x80DF04, 'B', "Lara. Special Status of Lara"},
{(BYTE *) 0x80DF05, 'B', "Lara. Special2 Status of Lara"},
{(BYTE *) 0x80DF5A, 'L', "System. Item Memory address of enemy aimed by Lara"},
{(BYTE *) 0x80DF7A, 'S', "Lara. Test. Throw out item from the Hands (1 = lara is throwing out item)"},
{(BYTE *) 0x80DF82, 'S', "Lara. Test. Lara has a flare in the and (1 = yes)"},
{(BYTE *) 0x80DF8C, 'S', "Lara. Test. Lara is placing the weapon on the back (1 = yes)"},
{(BYTE *) 0x80DFAA, 'S', "Lara. Rope. Speed sliding on the rope"},
{(BYTE *) 0x80DFBC, 'L', "Lara. Test. Lara is on rope (different than -1 lara is on the rope)"},
{(BYTE *) 0x80DFD2, 'B', "Inventory. Pistols Mask."},
{(BYTE *) 0x80DFD3, 'B', "Inventory. UZI Mask"},
{(BYTE *) 0x80DFD4, 'B', "Inventory. Shotgun"},
{(BYTE *) 0x80DFD5, 'B', "Inventory. CrowBow"},
{(BYTE *) 0x80DFD6, 'B', "Inventory. Greanade-Gun"},
{(BYTE *) 0x80DFD7, 'B', "Inventory. Revolver"},
{(BYTE *) 0x80DFD8, 'B', "Inventory. Laser Sight"},
{(BYTE *) 0x80DFD9, 'B', "Inventory. Binocular (1= present)"},
{(BYTE *) 0x80DFDA, 'B', "Inventory. Crow Bar (1= present)"},
{(BYTE *) 0x80DFDB, 'B', "Inventory. Mechanical Scarab (1=full item; 2=key;4=only scarab)"},
{(BYTE *) 0x80DFDC, 'B', "Inventory. Little Skin Bag"},
{(BYTE *) 0x80DFDD, 'B', "Inventory. Big Skin Bag"},
{(BYTE *) 0x80DFDE, 'B', "Inventory. Examine Item 1"},
{(BYTE *) 0x80DFDF, 'B', "Inventory. Examine Item 2"},
{(BYTE *) 0x80DFE0, 'B', "Inventory. Examine Item 3"},
{(BYTE *) 0x80DFE1, 'B', "Inventory. Puzzle Item 1"},
{(BYTE *) 0x80DFE2, 'B', "Inventory. Puzzle Item 2"},
{(BYTE *) 0x80DFE3, 'B', "Inventory. Puzzle Item 3"},
{(BYTE *) 0x80DFE4, 'B', "Inventory. Puzzle Item 4"},
{(BYTE *) 0x80DFE5, 'B', "Inventory. Puzzle Item 5"},
{(BYTE *) 0x80DFE6, 'B', "Inventory. Puzzle Item 6"},
{(BYTE *) 0x80DFE7, 'B', "Inventory. Puzzle Item 7"},
{(BYTE *) 0x80DFE8, 'B', "Inventory. Puzzle Item 8"},
{(BYTE *) 0x80DFE9, 'B', "Inventory. Puzzle Item 9"},
{(BYTE *) 0x80DFEA, 'B', "Inventory. Puzzle Item 10"},
{(BYTE *) 0x80DFEB, 'B', "Inventory. Puzzle item 11"},
{(BYTE *) 0x80DFEC, 'B', "Inventory. Puzzle Item 12"},
{(BYTE *) 0x80DFED, 'B', "Inventory. Combo items 1 - 4"},
{(BYTE *) 0x80DFEE, 'B', "Inventory. Combo item 5 - 8"},
{(BYTE *) 0x80DFEF, 'B', "Inventory. Keys 1 - 8"},
{(BYTE *) 0x80DFF0, 'B', "Inventory. Keys 9 - 12"},
{(BYTE *) 0x80DFF3, 'B', "Inventory. Pickup Items 1 - 8"},
{(BYTE *) 0x80DFF7, 'B', "Inventory. Quest items 1-8"},
{(BYTE *) 0x80DFF9, 'S', "Inventory. Small medikit"},
{(BYTE *) 0x80DFFB, 'S', "Inventory. Large Medikit"},
{(BYTE *) 0x80DFFD, 'S', "Inventory. Flares"},
{(BYTE *) 0x80DFFF, 'S', "Inventory. Ammo Pistol"},
{(BYTE *) 0x80E001, 'S', "Inventory. Ammo UZI"},
{(BYTE *) 0x80E003, 'S', "Inventory. Ammo revolver"},
{(BYTE *) 0x80E005, 'S', "Inventory. Ammo Normal Shotgun"},
{(BYTE *) 0x80E007, 'S', "Inventory. Ammo Wide-shot Shotgun"},
{(BYTE *) 0x80E009, 'S', "Inventory. Ammo Normal Grenade"},
{(BYTE *) 0x80E00B, 'S', "Inventory. Ammo Super Grenade"},
{(BYTE *) 0x80E00D, 'S', "Inventory. Ammo Flash Grenade"},
{(BYTE *) 0x80E00F, 'S', "Inventory. Ammo Normal CrossBow"},
{(BYTE *) 0x80E011, 'S', "Inventory. Ammo Poisoned CrossBow"},
{(BYTE *) 0x80E013, 'S', "Inventory. Ammo Explosive CrossBow"},
{(BYTE *) 0x80E015, 'S', "Inventory. Remaining usage of Mechanical Scarab"},
{(BYTE *) 0x7F7730, 'B', "System. Number of current Level"},
{(BYTE *) 0x7F7732, 'L', "System. Core Game Timer (one unit = 1/30 of second)"},
{(BYTE *) 0x7F7736, 'L', "Statistics. Distance"},
{(BYTE *) 0x7F773A, 'S', "Statistics. Used Ammos"},
{(BYTE *) 0x7F7744, 'B', "Statistics. Secrets"},
{(BYTE *) 0x7F7745, 'B', "Statistics. Used MediPacks"},
{(BYTE *) 0x7F7746, 'L', "System. Screen Timer (Increased only when it is different than 0)"},
{(BYTE *) 0x7F7756, 'S', "Statistics. Killed Enemies"},
{(BYTE *) 0x7F7764, 'L', "System. Fog Bulb Color"},
{(BYTE *) 0x7F7768, 'B', "System. Auto-Aiming for Enemy"},
{(BYTE *) 0x4AC05C, 'L', "System. Unknown (Item chosen from Inventory?"},
{(BYTE *) &GlobTomb4.IndiceSlotSelected, 'S', "TRNG Index. Slot Index for Selected Slot Memory"},
{(BYTE *) &GlobTomb4.IndiceAnimationSelected, 'S', "TRNG Index. Animation Index for Selected Animation Memory"},
{(BYTE *) &GlobTomb4.BaseOrganizer.CounterGame, 'L', "TRNG Organizer Timer. (Increased always in game but not in inventory and pause)"},
{(BYTE *) &GlobTomb4.IndiceItemUsedByLara, 'S', "TRNG Index. Index of last item used by Lara"},
{(BYTE *) 0x80DF88, 'S', "WeaponAnim. Current frame of weapon animation"},
{(BYTE *) 0x80DF8A, 'S', "WeaponAnim. Current animation of weapon animation."},
{(BYTE *) 0x80DF76, 'S', "WeaponAnim. Current frame of torch-flare animation"},
{(BYTE *) 0x80DF78, 'S', "WeaponAnim. Current animation of torch-flare animation"},
{(BYTE *) 0x80DF7A, 'S', "WeaponAnim. Current state id of extra lara slots. (Weapons and torch)"},
{(BYTE *) &GlobTomb4.IndiceItemAttivaTrigger, 'S', "TRNG Index. Index of last item to have enabled a trigger"},
{NULL, 0, NULL}};
// NON AGGIUNGER MAI ALL'INIZIO MA SOLO IN FONDO
StrAdrMemory VetMemoryInventory[] = {
{(BYTE*) 0x00 , 'S', "Slot of Mesh to show in Inventory"},
{(BYTE*) 0x02 , 'S', "Top Border in 2d plane. (Negative numbers move up the item)"},
{(BYTE*) 0x04 , 'S', "Distance of Cam. {Little values bigger items and vice-versa)"},
{(BYTE*) 0x06 , 'S', "X Facing about the cam view on X Axis"},
{(BYTE*) 0x08 , 'S', "Y Facing about the cam view on Y Axis"},
{(BYTE*) 0x0A , 'S', "Z Facing about the cam view on Z Axis"},
{(BYTE*) 0x0C , 'S', "View Flags. (2 = turn endless, $4000 = usable?)"},
{(BYTE*) 0x0E , 'S', "String index of Name"},
{(BYTE*) 0x10 , 'L', "Unknown. (It may be only 1 or -1)"},
{(BYTE*) 0xFF , 'S', "Type Flags. (4 = USE, 32 = EXAMINE, $1000 = LOAD ect)"},
{NULL, 0, NULL}};
[/code]

AkyV 28-12-13 12:17

[QUOTE=Paolone;6968523]Oh, well, I just read some page of your tutorial about "hidden triggers", it's really an awesome work. :eek:[/QUOTE]

Thank you! - By the way:
- I also had a "pre-tutorial" about memory zones, here:

[url]http://www.skribblerz.com/tuts/ngle/ngle3/akmemoryzones.htm[/url]

("Hidden triggers" contain only the "useful" fields.)
- I'd like to update the hidden triggers tutorial just after you finished 1.2.2.7, because there are some new memory zone things in it.
The update (the new contents+the link for the "old one" on the Skribblerz) will be here, on TRF, because Skribblerz materia will not be updated any more. (Decision of Skribblerz host.)

[QUOTE]About the chance to modify so many descriptions of memory variables I've the problem of time and the wideness of your work get it yet more complicated.
So I could do that work for next (a bit far) 1.2.2.8 version, after I had studied all your tutorial.
Or, since you have all in your mind about it, you could modify now description of critical variabile you discovered.
You are free to say "no", of course.
[/QUOTE]

No problemo. :D
You may try your own new name list, and I'll do another one (I suppose there are at least a few months till 1.2.2.8, so there will be time enough), and then you can decide in the lists, entry by entry, which entry looks better for the given task. - Please skip it now, ignore it for TRNG 1.2.2.7. It is a too serious work.
-----------------------------
Maybe my combinations are not the best, there would be a bit more work with some of them. - For example:

- Custom Flags, Item Memory Zone field: I say 0, 1, 62, 63 can have different functions in Condition Combination1. That sounds lame. With other conditions, it could be narrowed somehow, so eg. 63 could have only one function.
- Flags of Item, Item Memory Zone field. Lots of great values disturb each other here. That must be solved somehow.
- Flags of Item field and Custom_B field both have values for horsemen. maybe the properties of those two fields should be merged somehow for a better customization for the horsemen.
- Etc.

----------------------------------
I saw some of your TRNG triggers are based on memory zone fields. Independently of the new entry names, this gave me two ideas, for future developments:

Idea#1:
Controlling combinations from NG Center.
The combinations in Hidden Triggers are very different, so possibly each combination could have its own panel in NG Center (or Script command?), eg. with these basic boxes (fields):
FieldName, ChosenCombination, ChosenVariable, ChosenValue - and complex combinations can have other boxes/fields, too.

Note:
Don't forget, I said above: perhaps combinations in the tutorial are not the best, you may re-define them.

Idea#2:
Splitting combinations, merging combinations, adding "older" TRNG triggers to them can cause several new, variable-free actions/flipeffects, Script commands, OCB codes.

For me, Idea#2 looks more user-fiendly, I would choose that, though perhaps that needs the more work.
[B]
[I]However, Idea#2 list in Hungarian is done yet in my PC. (I tried to remove some "the combinations are not the best" problems.) I will translate it into English, and then I'll try to transform it into Idea#1 mode. Then I'll send both Idea#1 and #2 lists to you.[/I][/B] - But I need one month' time or more.

(I mentioned several bugs in the descriptions in Hidden Triggers tutorial. I hope you could fix them somehow.)

Paolone 28-12-13 21:03

[QUOTE=AkyV;6968918]
[I]However, Idea#2 list in Hungarian is done yet in my PC. (I tried to remove some "the combinations are not the best" problems.) I will translate it into English, and then I'll try to transform it into Idea#1 mode. Then I'll send both Idea#1 and #2 lists to you.[/I][/B] - But I need one month' time or more.

(I mentioned several bugs in the descriptions in Hidden Triggers tutorial. I hope you could fix them somehow.)[/QUOTE]

Really I hoped you can do it. ;)
I understand that there these new good ideas about combinations ect, anyway I thought you can change some description of memory zone (using source I pasted).
Anyway if this work requires to much time, we can postpone this matter to next 1.2.2.8 version.
By the way, with next version the plugin will allow to you add byself many new skills and perhaps also new triggers to support advanced combinations :)

AkyV 29-12-13 12:01

[QUOTE=Paolone;6969105]
anyway I thought you can change some description of memory zone (using source I pasted).
Anyway if this work requires to much time, we can postpone this matter to next 1.2.2.8 version.[/QUOTE]

You know, what... I'll try to "re-arrange my resources" (freetime...) and do it in a week, for 1.2.2.7! :D

[QUOTE]By the way, with next version the plugin will allow to you add byself many new skills and perhaps also new triggers to support advanced combinations :)[/QUOTE]

Wow, that's cool, so you say I (the common user who perhaps has good TRNG-scripting skills) will be able to turn even variable/memory zone features into common TRNG features?
(In that case, I save some time for both of us, and leave those lists now.)
So eg. you say, when I try this combination:

Adjust (X) object "A" property to (Y)
(where X is Item Memory Zone subject, Y is a value of a variable/memory zone field),

then I will able to turn it into a variable/memory-zone free ACTION trigger:

Adjust (#) object "A" property to (E)
(where # and E are Set Trigger Type window values) - so I don't need to use the "well-known" variables? (I think it is an important thing. I mean, if you say E value must be defined "in the background" eg. in Local Byte Alfa1, that means I "engaged" something that the user maybe also use in his setup, so I may say "if you use "Adjust (#) object "A" property to (E)", then you can't use Local Byte Alfa1". - Or am I wrong?) (I don't need a complex explanation, I bet I will get it later in 1228 readme/tutorial. I am just curious a bit...)
---------------------
Another question:
Theoretically, can these new, user-made features be anything? - I mean:

- new ACTION, FLIPEFFECT, CONDITION triggers
- enhancement of old ACTION, FLIPEFFECT, CONDITION triggers
- new OCB codes
- enhancement of old OCB codes
- new Script commands plus their constants
- technically enhancement (i.e. "how it works") of old Script commands
- new Script constants for old Script commands (including GT globaltrigger conditions)
- enhancement of old Script constants
- new functions for Room Editor
- enhancement of Room Editor old functions
- new functions for NG Center (help txt's, tools etc.)
- enhancement of NG Center old functions
- new functions in other programs (eg. MapConverter2)
- enhancement of other programs
- enhancement of WADMerger-related things (eg. new object slots)
- new programs to support TRNG

Naturally, that is not a nice thing if we just re-edit something that somebody else made (see: "enhancements"), but we won't discuss in this post how it should work. And how all the new features will be connected to each other. And how they won't disturb each other. Later. :D


All times are GMT. The time now is 22:45.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2023, vBulletin Solutions Inc.
Tomb Raider Forums is not owned or operated by CDE Entertainment Ltd.
Lara Croft and Tomb Raider are trademarks of CDE Entertainment Ltd.