|

|
Download a project file illustrating this tutorial here:

|
|
|
The NGLE Manual
Populating
your Streets
By AkyV
There are two types of neutral (friendly) creatures in Tomb
Raider games:
A, creatures that are organic parts of the game: GUIDE,
BABOON_NORMAL, TROOPS etc.
B, creatures that are only decorations: the lizards of “Race
for the Iris” level of TR4, the friendly fish in
FISH_EMITTER object etc.
The theme of this tutorial is the B type: the tutorial shows
some interesting solutions for the B type creatures.
This theme has many situations: “sauntering animals in the
forest”, “swimming fishes and divers in the ocean”, “people
at theatre looking at the play and actors on the stage
acting the play” etc. But this time we care about only one
situation of this: “walking/driving people in the streets”.
(Use your imagination, and make solutions for the other
situations.)
This tutorial is made by TRNG 1.2.2.6
1. Using an ANIMATING object as a
pedestrian
The first solution is about the mourning man of the title
flyby of TR Chronicles:

Use this man in the WAD of your level in any ANIMATING slot.
For example, ANIMATING1. He is one of your pedestrian now.
When he’s triggered then he’ll start walking. At the end of
his route he will be put back to the start of his route.
From here (because he’s not antitriggered) he will be
walking on until he reaches the end of his route again.
Where he will be put back to the start of his route again. –
And that will be going on for evermore.
There are two questions about that:
1. How will he be put back to the start of his route?
2. Why will he be walking for evermore?
1. A HEAVY trigger marks the end of his route. If he steps
on the square with this trigger, he will activate it. (He
can activate it thanks for NEF_EASY_HEAVY_ENABLING constant
of Enemy script command. – See more in NG Center\Reference.)
This trigger is an “Enemy. Move immediatly <#>enemy in
lara_start_pos with (E)OCB setting” ACTION trigger. #= this
ANIMATING1 object, E: a LARA_START_POS object with a number
in its OCB window (choose any number).
This trigger transports this man to this LARA_START_POS that
is on the square where he was placed in NGLE (i.e. the start
of his route). – Be careful: maybe you have to rotate
LARA_START_POS so that the man will be walking on from here
in the right direction.
2. With this
endless sequence this ANIMATING represents not only one man
but many of them. I mean the player will think that (s)he can see a
man walking from A to B, then (s)he’ll think that (s)he can
see another man walking from A to B etc. – So the player
will think that (s)he can see many pedestrians walking one
after another. So this is a busy street, with many
pedestrians – but you only used two objects and two
triggers, saving much memory and much editing work.
(Moreover: this endless sequence means infinite pieces of
the pedestrian of this route. You can’t do it in any other
way.)
Notes:
1. Naturally, you can have more pedestrian routes, if you
place more ANIMATING1s, and one starting trigger and one
HEAVY and one LARA_START_POS for each ANIMATING1. Moreover:
naturally, you can use any other object in any other
ANIMATING slot, if you don’t want all of your pedestrians to
look like this mourning man.
(Don’t forget: HEAVY triggers are not added to any
activator. So, for example, if an “A” ANIMATING1 steps on
the transporting HEAVY of a “B” ANIMATING1 then the “B”
ANIMATING1 will be transported.)
2. Any routes must be planned nicely. – For example:
The player can’t see when the mourning man starts walking
because the man is placed in a small closed place in NGLE.
When the man is triggered then a door will be triggered too:
right in front of the man. So the player (with Lara in the
street) will see the man stepping out of a building into the
street, opening that door. (The door is timed so it closes
right away behind the man.) Then the player will see the man
walking until he reaches the mouth of a tunnel. The man
walks into the tunnel then disappears far away in the dark.
Then the player will see another man stepping out of that
building, opening that door etc.
Two more things:
- The small closed place and the tunnel are closed to Lara
and she can't get in. (Or else the player will see the man
jumping from the end point to the start point. And this is
unrealistic, of course.) So you have to use PANEL objects -
see Collision demo project – to prevent her from getting
into the building or the tunnel. – ANIMATINGs, like this
man, ignore these objects, so these are not obstacles for
them.
(There is another reason for this prevention. See for
example the tunnel: theoretically, it goes somewhere, but,
practically, it goes nowhere, and the player’s not allowed
to see that “not existing” dead end, of course, getting too
close to that.)
- These forbidden sites have a good possibility of being
forbidden. See for example the small closed place: the
player can’t see the size or the look of that small place so
(s)he can imagine anything there, even a huge hall. So you
will edit the look of the building front at this place in a
way so that the player will imagine what you want him/her to
imagine. (Though, if the player can see the size or the look
of that small place, use more obstacles in Lara’s way or the
player’s POV so the player can’t. – In this regard that
closed door of the small place is an obstacle, too.)
Red line: door object for the man
Green line: door object for Lara to leave the street
Blue line: PANEL object
LSP: LARA_START_POS object+mourning man object
3. If these ANIMATINGs leave their rooms during their routes
they will maybe work wrong. I mean these objects will maybe
disappear and appear in an unrhythmical way (or just
disappear) after leaving. You can solve the problem,
splitting the route into pieces:
So, the man starts from LARA_START_POS object with 0 OCB
window value (LSP0). He reaches the first HEAVY trigger (H1)
that will transport him to the LARA_START_POS object with 1
OCB window value (LSP1). Then the man reaches the second
HEAVY trigger (H2) that will transport him to the
LARA_START_POS object with 2 OCB window value (LSP2). Then
the man reaches the third HEAVY trigger (H0) that will
transport him to the start position (LSP0).
These HEAVY triggers are all “Enemy. Move immediatly
<#>enemy in lara_start_pos with (E)OCB setting” triggers.
Three more things:
- The one square long jump from H1 to LSP1 or H2 to LSP2 is
a bit ugly. If it bothers you then use tricks or place the
whole route just in one room. (A trick, for example: the
squares of H1 and LSP1 are hidden from the player’s POV by a
Static object, a wall or anything else.)
- After this 3rd note you may notice that the small
place-street-tunnel route above perhaps won’t work well if
each of the small place, the street and the tunnel is one
room. You can solve that problem if you place more HEAVYs
and LSPs on that route – just as above. Or if the small
place-street-tunnel is only one room and the walls at the
head and the end of the street are not room walls but room
squares with the green “Wall” button made walls on them:

- Be careful! In some situations you may notice that
all/some Moveable objects of the room (wherefrom the jump
will happen) will become invisible when a room-leaving jump
happens.
4. Don’t forget: the ANIMATINGs won’t react when they reach
a wall, a floor, a ceiling, a slope up, a slope down or any
other object. So, for example, when an ANIMATING moves
horizontally and reaches a slope up, it will move into the
slope and not move up the slope. So when you’re planning the
route of the mourning man and, for example, you want him to
go down some stairs, then use
a Move ACTION trigger* or
a PARAM_MOVE_ITEM type of Parameters script commands and a
FLIPEFFECT trigger to activate it to make the man move
vertically during his route.This ACTION/FLIPEFFECT is a
HEAVY and activated by the man when he reaches the top of
that stairs.
*: Write a number in the OCB window of the object: this is
the speed of this moving.
5. If you want you can make the man walk around a corner.
All you have to do is use
a Turn ACTION trigger or a PARAM_ROTATE_ITEM type of
Parameters script commands and a FLIPEFFECT trigger to
activate it to make the man turn around.
This ACTION/FLIPEFFECT is a HEAVY and activated by the
man when he reaches that corner.
6. If Lara begins fighting an enemy in a busy street the
pedestrians will run away and after the fight they will come
back. – Oh, that would be great if I knew how to edit it.
But I didn’t: if the fight begins the pedestrians won’t do
anything else but do their things as usual.
This is illogical, of course. If you want to prevent it,
there are some solutions definitely. One of them is about
forbidding fighting in this street – for example, doing
something like these:
a, Don’t let Lara have any weapons in her hands when she’s
in a busy street. (For example, using these FLIPEFFECTs:
“Lara. (Weapons) Remove weapons or flare from lara's hands”
and “Lara. (Weapons) <&>Enable/disable usage of weapons for
Lara”.) When Lara’s left the street then you’ll allow her to
use weapons again (with another “Lara. (Weapons)
<&>Enable/disable usage of weapons for Lara” trigger).
b, Use the grey “Box” button (or a door object that closes
just in front of the creature) so the enemy won’t be able to
follow Lara into the busy street.
7. Save memory: antitrigger these pedestrians when they’re
just out of the player’s POV (they stop just where they
are), and trigger them again when the player can see them
again (they move again from the point where they stopped).
8. Of course you don’t need these endless routes everyway. I
mean if you want a single pedestrian in its route then you
don’t need to transport it from the end point to the start
point. In this case all you have to do is place the
creature, trigger it and place a HEAVYANTITRIGGER at the end
of its route to deactivate itself.
9. My experience:NEF_EASY_HEAVY_ENABLING constant will never
be valid for the moves that are animated by emitters.
2. Using an enemy as a pedestrian
The second solution is about the good old BADDY_1:

But this time the BADDY_1 is not a baddy. He’s just a
harmless pedestrian now (walking with his weapons…) –
because you’ll use it in your WAD in an ANIMATING slot. For
example, ANIMATING2. (There’s no need a MESHSWAP.)
There’s only one animation of the animations of this
ANIMATING that we care about now - the walking animation:
Animation32. You have to copy this animation to Animation0
in the Animation Editor of WADMerger, because Animation0 is
the general beginning animation of every ANIMATING.
After this, change this Animation0 a bit:
a, Check if some values are equal with BADDY_1’s walking
animation values: FrameRate=2, Speed=32, Accel=0. (Or, if
you want to, change them in a logical way, of course.)
b, This Animation0 is a loop animation, so NextAnimation=0
and NextFrame=0.
c, StateID is the general state of any ANIMATING: 0.
d, State Change Editor must be totally empty.
After this, do everything about this pedestrian just like
you would about the mourning man above.
Notes:
1. "Animation0 is the general beginning animation" means the
ANIMATING can use another animation when it's been
triggered. I mean the ANIMATING will use another animation
at the begining of its moving (and not the walking
Animation0) if there's a Force ACTION trigger overlapped
with its starting trigger. In this case the ANIMATING will
use the beginning animation that you chose in the E window
of that ACTION. (Whatever animation the ANIMATING will use,
don't forget the same type of changes at that animation that
you did at Animation0.)
If you want then activate an ACTION like this later, when
this ANIMATING is just active: so this way the ANIMATING
will change animation. (You can also make it change
animation if you connect animations, using NextAnimation
window.)
Moreover: you may use some conditions (GlobalTriggers etc.)
to make it change animation under some circumstances. (With
smart animation editing/changing/using and smart condition
using you will perhaps be able to make a good solution for -
see above - "the pedestrians will run away and after the
fight they will come back" case.)
Be careful: if this setup is too complex then the ANIMATING
may miss some HEAVYs that it's not allowed to miss.
2. Let’s suppose you want to see a harmless dog walking in
the street. So you’ll do the same with the dog (taking DOG
enemy into an ANIMATING slot) as you did with the ANIMATING
baddy: you’ll take its walking animation, place it into
Animation0, then change it.
But what if you want this dog as the pet of a mourning man?
Then you’ll place them close to each other in NGLE, then
trigger both of them at the same time. So in the game the
player will see “the man’s walking with his pet”. (If the
rhythm of man’s walking animation and dog’s walking
animation are not the same and, because of that, one of them
overtakes the other one then you have to modify walking
animation of one or both of them: Speed and/or FrameRate
values, to synchronize their animations.)
3. Cars
The third solution is about the taxi (ANIMATING9) of “Street
Bazaar” level of TR4:

Copy this ANIMATING9 into your WAD.
This car must be used just like the mourning man, except
these things:
a, The car doesn’t have any moving animation. So you’ll make
one.
b, The car must have some engine sound. So you’ll give that
one.
c, The car must be able to run over Lara. So you’ll adjust
this ability. (So this is the point where the “car” type
decoration becomes a trap.)
a, Of course, you have to use Animation0 again. Now you can
see this here: FrameRate=1, Speed=0, StateID=0, Accel=0,
NextAnimation=0, NextFrame=0. All you have to do here is
write a speed value. Negative value this time or else the
car will move backwards. (I think -200 is a good value for a
fast car.) – Be careful: a minus sign in Speed window
without numbers may crash WADMerger.
(So that was all of the animation editing now. If you want a
perfect animation - like, car with spinning wheels - then
you need more editing.)
b, Sounds are always a hard theme in Tomb Raider editing –
just like now:
- You can’t use a Sound icon: because it’s still, but the
car is moving.
- You can’t use a Sound FLIPEFFECT (placed, exported to a
TriggerGroup or exported as an AnimCommand), because these
sounds always play with the same volume, independently of
the extension of the space between Lara and the car. (You
can adjust sound volume with variables but it’s too
difficult for the present case.)
- So you’ll use a “Play Sound” AnimCommand in the Animation
Editor of WADMerger. But a loop sound won’t play well with
Play Sound – in spite of the “moving jeep” loop sound
(JEEP_MOVE, ID: 155) would be great for this purpose.
So you’ll use a single sound: add it to the only one frame
(frame0) of the Animation0, using Play Sound AnimCommand.
This is a loop animation (see: NextAnimation=0, NextFrame=0)
and this sound will play at all of the frames. Because of
this density the player will think it’s a continuous, loop
sound. (Maybe it’s too dense. I mean the time that a frame
takes maybe is too little to play this sound properly. If
you notice that then use more frames for the animation:
every frame looks like frame0 but there’s no frame with this
sound added beside the frame0.)
I chose SCALE1 (ID: 98) sound as this single sound. (I know
it’s lame. But I thought it would be good for an example.)
You may choose other one if you want to. (Use the Sound
Editor of WADMerger to add it to your WAD and Sound in drop
down menu bar of Animation Editor to add it to this object
before adding it to that frame.)
- If you use PARAM_MOVE_ITEM or PARAM_ROTATE_ITEM for moving
then you may also use these constants to add sounds to the
car.
c, You need this GlobalTrigger in NG Center\Script:
GlobalTrigger= 1, FGT_PUSHING_COLLISION, GT_COLLIDE_SLOT,
ANIMATING9, IGNORE, 1, IGNORE
TriggerGroup= 1, $2000, 89, $12
FGT_PUSHING_COLLISION: technical constant
GT_COLLIDE_SLOT, ANIMATING9, …, 1: it says the
TriggerGroup#1 will happen if Lara touches any taxi objects
; Exporting: TRIGGER(18:0) for
FLIPEFFECT(89)
; <#> : Lara. (Health) Damage Lara, decreasing life by
<&>percentage of full vitality in (E) way
; <&> : 10 Percentage
; (E) : Immediatly, one-shot
; Values to add in script command: $2000, 89, $12
This trigger decreases Lara’s health with 10 percents.
So, the GlobalTrigger says: “every time when Lara touches a
taxi she will loose 10 percents of her health”.
Notes:
- This 10 percentage is maybe not the proper amount. It
depends on the speed of the car.
- These hurts won’t be unrealistic because you’ll edit the
level in a way that Lara won’t encounter a still or a slow
taxi. (Or if she will then this car’s not allowed to hurt
her: forget about running over ability, disable
GlobalTrigger.)
(It’s not impossible to use different speeds for Animation0
of ANIMATING9 slot during the game: you can change Speed
value of the animation with variables. Besides, a taxi that
is not triggered/is antitriggered is still.)
- It’s unrealistic if Lara gets hurt by hitting the rear of
a car. But if the car is speedy enough when she’s running
after it then she won’t catch it. (Now we don’t care about
reversing cars.)
- I think a hurt caused by the side of the car is not
unrealistic: “the car sweeps away Lara”.
- Lara may get hurt by falling on a car with a huge fall. In
this case it doesn’t matter whether the car’s moving or not.
(But disable GlobalTrigger if it’s a small fall.)
- Cars won’t run over pedestrians or enemies. So don’t let
the pedestrians (not crossing their routes with the routes
of the cars) or the enemies (for example, using “Box”
button) get close to the cars.
- You don't need to use starting trigger and
HEAVYANTITRIGGER, if you want a single car (see Chapter#1
note#8). I mean, as the car has no animation with more
frames (because the only one animation has only one frame),
you can do that you place the car and move it with only
PARAM_MOVE/ROTATE_ITEM constants now (or with the similar
ACTION triggers).
CONCLUSION
So, this is a really busy street:

Maybe too busy. I mean this picture has 8 routes: 4
mourning man routes, 1 “baddy” ANIMATING route and 3 car
routes. It’s maybe too much for the game engine, so there’s
no reason to be surprised if some of these ANIMATINGs won’t
work properly. (It means the ANIMATING will ignore the
transporting HEAVY trigger, immediately or after some
activations.)
I think the problem (first of all) is not how many routes or
(any) objects are just active in the game at the same time.
But how many transporting HEAVY activations happen during a
short time. (Not the transporting HEAVY of the problematic
object but any transporting HEAVY in the level.)
Note:
In the background you can see a tunnel that is forbidden
Lara to get in. (Not the same tunnel that is in the example
above.) You can use PANEL objects to prevent her from
getting in there or (if the street and the tunnel are not in
the same room, so the mouth of the tunnel is a door) you can
use totally transparent textures at the mouth of the tunnel
with “Toggle Opacity” mode.
Back to Top
|
|