Populating your Streets
by 
		AkyV
		Download a 
		project file illustrating this tutorial here
		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 using 
		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 for 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.