End Credits
by
AkyV
Download
a project file illustrating this tutorial
You can end your game by two methods:
- The game jumps to the title at the end of the game.
- The game jumps to the title at the end of the game, showing the
credits list.
To acquire those methods, read this description:
The amount of the [Level] blocks in your Script is X. Type X+1 or X+2
into the window of FINISH trigger at the end of the last level of your
game:
- Typing X+2, the game jumps to title if the trigger has been activated.
- Typing X+1, the game jumps to title if the trigger has been activated,
but:
a, 098.wav (this is hardcoded) will start instead of the background
audio you use for the title and
b, the original credits list of TRLR starts.
The 'X+1' case won't work if you don't type this entry in [Title] block
or the [Level] block of the last level:
Customize= CUST_SET_CREDITS_LEVEL, A
Where A=X+1.
Notes:
1. It seems the flyby under the credit list doesn't always start with
the first camera of the first sequence (as opposed to the title flyby
you can see usually). I think it starts from the camera that was just
used when you left the title level last before.
2. When the list has ended the main menu will appear again. (But 098.wav
won't change.)
3. If you see a black screen instead of the title flyby and the list
then maybe it's some configuration (resolution?) problem.
Customizing the look
You can give a new form to the list by these tools:
- New basic fonts for the whole game (including the texts of the credits
list), editing font.pc in graphics\wads folder.
- New fonts for the whole title (including the texts of the credits
list): put a FONT_GRAPHICS object into the WAD of the actual level -
i.e. the title this time - (get the object from the new font demo
project of Paolone), then use NG Font Editor in NG Center\Tools.
- Use this entry in Script (in [Title] block) to give a new color to the
people's names:
Customize= CUST_SET_TEXT_COLOR, TT_CREDITS, B
Where B=one of the CL constants
- Use this entry in Script (in [Title] block) to give a new size to all
the old entries*:
TextFormat= IGNORE, IGNORE, IGNORE, C
Where C= one of the SC constants
*: 'Old entries' mean now all the texts (except: the text of Legend
Script command) you can see anywhere in TRLR and TRLE as well. Including
the texts of the credits list.
Note:
If you don't want to hear 098.wav, then write this in [Title] block:
GlobalTrigger= 1, IGNORE, GT_ALWAYS, IGNORE, IGNORE, 1, IGNORE
TriggerGroup= 1, $2000, 68, $168
; Set Trigger Type - FLIPEFFECT 68
; Exporting: TRIGGER(360:0) for FLIPEFFECT(68)
; <#> : Sound. (CD) Play <&>CD track in (E) way on channel1
; <&> : AUDIO\104
; (E) : Looped playback
; Values to add in script command: $2000, 68, $168
The GlobalTrigger activates TriggerGroup#1, activating the required
audio, instead of 098.wav. (In this example the required audio is
104.wav.)
This GlobalTrigger also works when the game starts, after you've clicked
on tomb4.exe. That's why the audio in Level command is absolutely
useless now, practically: the game will always play the audio in title
that is defined by the GlobalTrigger.
Customizing the contents
You can find the task names and person names of the credits in these NG
Center\Strings entries:
- Task: [PSXStrings] #246-#259 and [PCStrings] #300-#302
- Person: [PSXStrings] #260-#299.
Unfortunately, you can't change people's names. (I mean, you can in
Strings, but it doesn't affect the game.)
But you can change the task names. After updating them, build the
script.
New type credits
You can make a brand new credits list, if you want. But you can't make
it in the title level. You'll make it in a 'real' level. (So if we say
'credits level' in this chapter, that is NOT the title level this time.)
Why should you do a new credits list? - Well, maybe
- you want own person names in the list and don't want to use the
original ones you can't change,
- the structure and/or the length of the original credits list is not
acceptable for you,
- you want to see other flyby sequences and/or another level for the
credits when the game ends and not the ones in the title level,
- you want to trigger/show/customize something you can't do in the
original credits list/in the title level.
This is how it works:
1. Lara reaches the end of the last level of the game. A usual FINISH
trigger is being activated there, loading Lara into another level - i.e.
into the level, where the new type credits will show up.
2. When the credits level starts, a Flyby sequence also starts at once.
Lara can't move and maybe she's absolutely out of the POVs of all the
cameras. (It depends on how you placed and adjusted the flyby cameras.)
The sequence is endless, and you can't interrupt that by hitting the
Look key.
When the level starts, the credits list also starts, scrolling
vertically from below upwards. When the last entry of the list is just
out of the top of the screen then the game loads the title level.
And now, let's see the setup that has two parts (one in Room Editor and
one in Script):
SETUP IN ROOM EDITOR
- LARA object is placed on a trigger. So, if the level starts, then the
trigger will be activated at once, activating TriggerGroup#2:
; Set Trigger Type - FLIPEFFECT 118
; Exporting: TRIGGER(258:0) for FLIPEFFECT(118)
; <#> : TriggerGroup. Perform <&>TriggerGroup from script.dat in (E)way
; <&> : TriggerGroup= 2
; (E) : Single performing (to use when in TriggerGroup there are only
commands)
; Values to add in script command: $2000, 118, $102
- The flyby cameras of the sequence are scattered (by you) in the map.
These OCB buttons of the first camera of the sequence are pressed:
0 - so the sequence starts with its first camera, and not Lara's
chase-camera
2 - so the sequence is endless, i.e. works in loop mode
9 - so the sequence cannot be aborted
10 - so Lara can't be moved during the sequence
(See more about flyby cameras in Skribblerz tutorials.)
SETUP IN SCRIPT
Customize= CUST_TEXT_ON_FLY_SCREEN, ENABLED
TriggerGroup= 2, $5000, 14, $2D, $2000, 66, $307, $2000, 201, $0
GlobalTrigger= 2, FGT_SINGLE_SHOT, GT_VSCROLL_LAST_VISIBLE, 0, IGNORE,
3, IGNORE
TriggerGroup= 3, $2000, 66, $303, $2000, 201, $1
GlobalTrigger=3, FGT_SINGLE_SHOT, GT_VSCROLL_LAST_VISIBLE, 1, IGNORE, 4,
IGNORE
TriggerGroup= 4, $2000, 66, $307, $2000, 201, $2
GlobalTrigger= 4, FGT_SINGLE_SHOT, GT_VSCROLL_LAST_VISIBLE, 2, IGNORE,
5, IGNORE
TriggerGroup= 5, $2000, 66, $303, $2000, 201, $3
GlobalTrigger= 5, FGT_SINGLE_SHOT, GT_VSCROLL_LAST_VISIBLE, 3, IGNORE,
6, IGNORE
TriggerGroup= 6, $2000, 66, $307, $2000, 201, $4
GlobalTrigger= 6, FGT_SINGLE_SHOT, GT_VSCROLL_LAST_VISIBLE, 4, IGNORE,
7, IGNORE
TriggerGroup= 7, $2000, 66, $303, $2000, 201, $5
GlobalTrigger= 7, IGNORE, GT_VSCROLL_COMPLETE, 5, IGNORE, 8, IGNORE
TriggerGroup= 8, $2000, 82, $A
The entry of CUST_TEXT_ON_FLY_SCREEN is needed or else the list won't be
printed on the screen of a flyby sequence!
So when the level starts, Lara activates TriggerGroup#2 at once. It
means:
a, the flyby camera sequence starts, with its first camera:
; Set Trigger Type - ACTION 45
; Exporting: TRIGGER(45:0) for ACTION(14)
; <#> : CAMERA_FLYBY ID 14
; <&> : Trigger. (FlyBy) (E)Activate or Untrigger the <#>FlyBy camera
sequence
; (E) : Activate Flyby camera sequence
; Values to add in script command: $5000, 14, $2D
b, a trigger defines the color and position for the next text (the first
entry of the list - that is written in ExtraNG#0):
; Set Trigger Type - FLIPEFFECT 66
; Exporting: TRIGGER(775:0) for FLIPEFFECT(66)
; <#> : Text. Set <&>color and (E)position for next Print String
flipeffect
; <&> : Dark Metal (Dark Gray + Light Gray)
; (E) : Central line, central aligment
; Values to add in script command: $2000, 66, $307
c, a trigger prints the first entry of the list on the bottom of the
screen, scrolling that vertically upwards:
; Set Trigger Type - FLIPEFFECT 201
; Exporting: TRIGGER(0:0) for FLIPEFFECT(201)
; <#> : Text. Vertical Scrolling of ExtraNG <&>string with (E) speed
; <&> : 0: Story of The Game
; (E) : Abs. Normal Speed (30 fps)
; Values to add in script command: $2000, 201, $0
GlobalTrigger#2 says if the ExtraNG#0 entry (i.e. the first entry of the
list: 'Story of The Game') is printed on the screen, then TriggerGroup#3
will be activated.
TriggerGroup#3 defines the color and position for the next text (the
second entry of the list - that is written in ExtraNG#1):
; Set Trigger Type - FLIPEFFECT 66
; Exporting: TRIGGER(771:0) for FLIPEFFECT(66)
; <#> : Text. Set <&>color and (E)position for next Print String
flipeffect
; <&> : Red
; (E) : Central line, central aligment
; Values to add in script command: $2000, 66, $303
and then prints the second entry of the list on the bottom of the
screen, scrolling that vertically upwards:
; Set Trigger Type - FLIPEFFECT 201
; Exporting: TRIGGER(1:0) for FLIPEFFECT(201)
; <#> : Text. Vertical Scrolling of ExtraNG <&>string with (E) speed
; <&> : 1: AkyV
; (E) : Abs. Normal Speed (30 fps)
; Values to add in script command: $2000, 201, $1
(Because of technical reasons, the GlobalTrigger works only once - see:
FGT_SINGLE_SHOT flag.
Anyway, the GlobalTrigger don't need to work more than once.)
After that, that block will be repeated for the actual entry of the
list:
So, GlobalTrigger#3 says if the ExtraNG#1 entry (i.e. the second entry
of the list: 'AkyV') is printed on the screen, then TriggerGroup#4 will
be activated. TriggerGroup#4 defines the color and position for the next
text (the third entry of the list - that is written in ExtraNG#2) and
then prints that on the bottom of the screen, scrolling that vertically
upwards.
Then, GlobalTrigger#4 says if the ExtraNG#2 entry is printed on the
screen, then TriggerGroup#5 will be activated. TriggerGroup#5 defines
the color and position for the next text and then prints that on the
bottom of the screen, scrolling that vertically upwards.
Etc.
These are the other entries of the list now:
ExtraNG#2: \nLevel Designer
ExtraNG#3: AkyV
ExtraNG#4: \nSpecial Thanks to
ExtraNG#5: @Credits_special_thanks.txt
GlobalTrigger#7 is unlike the other GlobalTriggers of the setup:
I.e. GlobalTrigger#7 says if the ExtraNG#5 entry (i.e. the last entry of
the list) is totally scrolled out of the screen, then TriggerGroup#8
will be activated:
; Set Trigger Type - FLIPEFFECT 82
; Exporting: TRIGGER(10:0) for FLIPEFFECT(82)
; <#> : Delay. Load <&>level in (E)seconds
; <&> : 10
; (E) : Forever (use other action/effect to disable it)
; Values to add in script command: $2000, 82, $A
As X (see above) is 8 now (for example), then 10 means this trigger will
load the title level (without the original credits list).
Notes:
1. About the contents of the texts:
- 'AkyV' text is presented in two ExtraNG entries. It's because I had to
give different subject for GlobalTrigger#3 and #5. (I.e. the subject of
GlobalTrigger#3 is ExtraNG#1: AkyV, and the subject of GlobalTrigger#5
is ExtraNG#3: AkyV.)
- '\n' means: 'I hit ENTER'. (Hence the vertical space between the
entries of the list.)
- Credits_special_thanks.txt is saved in Script folder and contains
these entries:
Core Design
Eidos Interactive
Paolone for TRNG
The '@Credits_special_thanks.txt' in ExtraNG#5 means: 'the contents of
Credits_special_thanks.txt in Script folder'.
(Use this in ExtraNG#5, instead of the TXT, if you want:
Core Design\nEidos Interactive\nPaolone for TRNG
The result will be the same.)
2. TextFormat Script command in the [Level] block of the credits level
can give default values (color, position) to the texts of the list.
3. Use 'Text. Vertical Scrolling of ExtraNG <&>string with (E)formatting
data' FLIPEFFECT trigger instead of 'Text. Vertical Scrolling of ExtraNG
<&>string with (E) speed' FLIPEFFECT trigger, if you want. But in this
case it's not 'Text.Set' triggers or TextFormat commands that will add
forming values for the scrolling, but PARAM_PRINT_TEXT Script constants
will.
4. You can also form the texts of your own credits by font.pc or
FONT_GRAPHICS (see above).
5. See more about fonts and texts in Paolone's new font demo project.
6. Except the setup you've just read, you don't need to do anything
special in the credits level.
So build the level as you build levels usually (including creating its
[Level] block), use that setup - and it will work successfully as your
own credits level.
(I mean it's recommended to create a simple level - as for building
combat elements, for example - because the still Lara isn't able to
fight enemies now. But that's clear, I think.)
7. Two usable new alternatives for the setup:
- You don't need flyby cameras. I.e. you can use a still picture during
the credits list instead of the 'movie':
Place a Camera or Fixed Camera and another object that the camera will
shoot, then activate them in TriggerGroup#2 instead of a flyby camera
trigger. Also use a Keyboard FLIPEFFECT, in that TriggerGroup, to
disable all the movements of Lara (that's why she won't be running
around in front of the camera or won't be able to abort the camera).
- Use a GlobalTrigger in [Title] block, with GT_KEYBOARD_CODE constant,
where the condition is Key C (C as Credits.) It says: if the player hits
C then a TriggerGroup will be activated, activating a Delay FLIPEFFECT
trigger that loads the game into the credits level. - So you can examine
the credits, loaded them directly from the title level, whenever you're
in the title level, all you have to do is hit C. (In this case you can
even skip the loading of the credits level at the end of the game: i.e.
you can adjust the FINISH trigger of the last level to load directly to
the title level.)
Use a Text FLIPEFFECT in the title level so that you can print on the
title screen for the player that 'hit C to see credits'.
Made using TRNG 1.2.2.6