Walking Like Angel of Darkness
by
AkyV
Download a project file illustrating this tutorial
I will show you in this tutorial how to use
these two TR6 walking features in NGLE:
- If you hit SHIFT
shortly, then you switch on/off the walking mode.
It means you don't
need to hold SHIFT pushed down continuously to make Lara walk. (But you
are still able to do that.)
- There's an 'I'll be walking and not
running, if you use the cursor keys!' icon on the screen, when Lara will
be walking with the cursor keys.
So, if you follow the tutorial you will able
to do this:
1. The player hits left or right SHIFT (and
holds it pushed down), so if (s)he uses the cursor keys Lara will be
walking and not running. A 'walking person' icon shows up in the bottom
right corner of the screen. - Then the player releases SHIFT so Lara
will be running again with the cursor keys, and not walking. The icon
disappears.
2. The player hits left or right SHIFT, then
releases it at once. With that, the player switched on the walking mode.
I.e. Lara will be walking if the player uses the cursor keys, either
(s)he presses SHIFT continuously after the switching-on or not. The
'walking person' icon shows up.
To
switch off the walking mode, the player must hit left or right SHIFT
again, shortly. The icon disappears.
GETTING THE ICON
- First of all, you need that icon, of course. You can find it in your TR6 main folder, in Data\effects folder, in bar.tga. Cut it out to get that from the TGA:
The icon must be a 128x128 pixel sized BMP.
The whole background was black, I made the magenta parts that will be
transparent in the game. (I left some black area around the person, but
we don't need that: you can make it more perfect, making the whole black
area colored magenta.)
- You need a CUSTOM_SPRITES object in your
WAD. (You can get it from Paolone's Miscellaneous II demo project.)
- Use NG Center\Tools\Sprite Editor: load your WAD, choose
CUSTOM_SPRITES, then import the person icon picture, for example, into
Texture0 slot. Click on 'Exit and Save WAD', save on the SWD of your
WAD, then quit.
Using Image Script command you can use another method for the icon and
not the method of a sprite.
This tutorial skips discussing Image version.
SETUPS
I'll show you
two setups now.
The first setup is the easier one - it's
recommended to beginners.
The second setup is the complicated one -
it's recommended to advanced builders.
The
differences between the two setups in the game:
1. In Setup#2 you will copy the exact procedure of TR6 method. I.e.
the same key (left/right SHIFT) has three functions in Setup#2:
-
short press: switching on the walking mode if it's switched off
-
short press: switching off the walking mode if it's switched on
-
continuous press: continuous walking
In Setup#1 you will use the
three functions on three keys:
- hit key Z (near left SHIFT):
switching on the walking mode
- hit key X (next to key Z): switching
off the walking mode
- hit left/right SHIFT: walking until releasing
this key
2. In TR4 engines you can use not only SHIFT to walk:
- press SHIFT+left arrow or DELETE to make Lara step left,
-
press SHIFT+right arrow or PAGE DOWN to make Lara step right.
Unfortunately, we don't have a keyboard scancode either for DELETE or
PAGE DOWN. (We have, if we're talking about DELETE or PAGE DOWN in
NumPad, but that's not the same now.)
But we should have those
scancodes to make Setup#2 work. That's why you have to modify your
Control Configuration in the game, replacing the keys of 'Step Left' and
'Step Right' by any keys that have keyboard scancodes. (See the usable
keyboard scancodes here: NG Center\Reference\Keyboard Scancodes List.)
In Setup#2 we use NumPad1(End) to step left and NumPad3(Page Down) to
step right now - but feel free to choose other keys.
Attention:
The usage of SHIFT and the usage of Step Left/Right keys are not the
same in Setup#2. That would be illogical if they did the same thing.
So, when you hit Step Left/Right key then the icon appears (except: the
icon has placed on the screen before, i.e. the walking mode is just on),
and if you release Step Left/Right key then the icon disappears (except:
the icon remains on the screen now, because the walking mode is just
on).
In Setup#1 Step Left/Right keys work the same way as in
Setup#2, except Setup#1 works perfectly with the default DELETE and PAGE
DOWN keys. (Because we don't use DELETE/PAGE DOWN scancodes in Setup#1.)
THE SETUP#1
Type these entries in the Script, in the
[Level] block of your level:
GlobalTrigger= 1, IGNORE, GT_CONDITION_GROUP, IGNORE, 1, 2, 3
GlobalTrigger= 2, IGNORE, GT_KEYBOARD_CODE, 44, IGNORE, 4, IGNORE
GlobalTrigger= 3, IGNORE, GT_KEYBOARD_CODE, 45, IGNORE, 5, IGNORE
TriggerGroup= 1, $8000, 6, $10D
TriggerGroup= 2, $2000, 357, $1
TriggerGroup= 3, $2000, 358, $1
TriggerGroup= 4, $2000, 357, $1,
$2000, 127, $1
TriggerGroup= 5, $2000, 358, $1, $2000, 128, $1
TriggerGroup= 6, $2000, 53, $7
Organizer= 1, FO_LOOP, IGNORE, 0, 6
Parameters= PARAM_SHOW_SPRITE, 1, IGNORE, 880, 860, 110, 110,
CUSTOM_SPRITES, 0, IGNORE, >
IGNORE, IGNORE, IGNORE
This
'Parameters' command says the sprite (picture) in the Texture0 slot of
CUSTOM_SPRITES (i.e. the person icon) will show up in the '880, 860,
110, 110' position on the screen if you call this PARAM_SHOW_SPRITE=1
entry in the game.
There are two methods to call that entry:
-
First method: if Lara is ready to walk in the usual way (i.e. if the
player is just holding pressed down left/right SHIFT) or if she's just
walking by DELETE/PAGE DOWN.
- Second method: if the player has just
switched on the walking mode by hitting key Z.
The first method
uses GlobalTrigger#1: if the condition is true (i.e. if the player uses
left/right SHIFT or DELETE/PAGE DOWN, see TriggerGroup#1) then the icon
will appear (see TriggerGroup#2), or, if that's not true, then the icon
will disappear (see TriggerGroup#3).
;
Set Trigger Type - CONDITION 13
;
Exporting: CONDITION(13:60) for PARAMETER(6)
;
<#> : Walk (slowly)
;
<&> : Keyboard. <#>Command game is currently (E)
;
(E) : ACTIVE (Single shot for positive condition)
; Values
to add in script command: $8000, 6, $10D
; Set Trigger Type - FLIPEFFECT 357
;
Exporting: TRIGGER(1:0) for FLIPEFFECT(357)
;
<#> : Sprite. Show sprite with data in <&>Parameters for (E)Durate
;
<&> : Parameters=PARAM_SHOW_SPRITE, 1
;
(E) : Forever (use other action/effect to disable it)
;
Values to add in script command: $2000, 357, $1
; Set Trigger Type - FLIPEFFECT 358
;
Exporting: TRIGGER(1:0) for FLIPEFFECT(358)
;
<#> : Sprite. Remove from the screen the sprite with data in
<&>Parameters
;
<&> : Parameters=PARAM_SHOW_SPRITE, 1
;
(E) :
;
Values to add in script command: $2000, 358, $1
The second method uses GlobalTrigger#2 and #3:
-
GlobalTrigger#2 says if the keyboard code is 44 (i.e. key Z) then
TriggerGroup#4 will be activated, placing the icon on the screen and
starting Organizer#1:
;
Set Trigger Type - FLIPEFFECT 127
;
Exporting: TRIGGER(1:0) for FLIPEFFECT(127)
;
<#> : Organizer. Enable <&>Organizer
;
<&> : Organizer= 1
;
(E) :
;
Values to add in script command: $2000, 127, $1
- GlobalTrigger#3 says if the keyboard code is 45 (i.e. key X) then
TriggerGroup#5 will be activated, deleting the icon off the screen and
stopping Organizer#1:
;
Set Trigger Type - FLIPEFFECT 128
;
Exporting: TRIGGER(1:0) for FLIPEFFECT(128)
;
<#> : Organizer. Stop <&>Organizer
;
<&> : Organizer= 1
;
(E) :
;
Values to add in script command: $2000, 128, $1
If Organizer#1 starts then it starts TriggerGroup#6 at once (see: 0,
6):
; Set Trigger Type - FLIPEFFECT 53
;
Exporting: TRIGGER(7:0) for FLIPEFFECT(53)
;
<#> : Keyboard. Simulate receivement of <&>keyboard comand in (E) way
;
<&> : Walk
;
(E) : Single sending
;
Values to add in script command: $2000, 53, $7
This trigger makes Lara walk if the player uses the cursor keys
without SHIFT pressed.
Thanks to FO_LOOP in the Organizer, this
command will be sent again and again (until the Organizer stops) so the
walk will be continuous.
See
more about the contents of the Script in NG Center\Reference.
THE SETUP#2
Notes:
1. I decided I'd use 1/6 second (i.e. 5 frames) as a border between
'short' and 'continuous' pushing. So, if the player holds SHIFT pushed
down for more than 5 frames then it will be 'continuous'. If (s)he does
that for maximum 5 frames, then it will be 'short'. (Feel free to use
other border. To change the border, change the setup below.)
2.
The icon will always show up if you use the keys to walk. So even when
it's not logical: when Lara's climbing a ladder, swimming in water etc.
But it doesn't disturb the gameplay, moreover, it's helpful a bit: for
example, if you see the icon (because you've switched on the walking
mode) when Lara's swimming then you will know that Lara will be walking
after she climbs out of the water, and not running.
But don't
forget: Lara does special movements if SHIFT is just pressed. - For
example, she doesn't perform a simple jumping forward but performs a
swan dive if you also hit SHIFT with ALT+up cursor keys.
That's why,
if you hit ALT+up, but the walking mode is on then Lara will perform a
swan dive.
If those 'imperfections' bother you then you must
modify the setup somehow. (If you are thinking about this kind of
modifying then I must tell you Setup#2 isn't perfect in copying TR6. I
mean in TR6, when the walking mode is on but player doesn't hold SHIFT
down, then Lara will be turning when you hit left/right arrows, and not
stepping left/right. - So Setup#2 ignores this special movement now.)
Type these entries in the Script, in the
[Level] block of your level:
GlobalTrigger= 1, IGNORE, GT_CONDITION_GROUP, IGNORE, 1, 2, 3
TriggerGroup= 1, $8000, 42, $10C, $8000+TGROUP_OR, 54, $10C
TriggerGroup= 2, $2000, 231, $141, $2000, 357, $1
TriggerGroup= 3,
$2000, 232, $41, >
$8000, 64, $12B, $2000, 127, $1, >
$8000+TGROUP_ELSE, 64, $22B, $2000, 128, $1, $2000, 358, $1, $2000, 233,
$240, >
$8000+TGROUP_ELSE, 64, $32B, $2000, 358, $1, $2000, 233,
$340, >
$8000+TGROUP_ELSE, 64, $42B, $2000, 233, $340
GlobalTrigger= 2, IGNORE, GT_CONDITION_GROUP, IGNORE, 4, 5, IGNORE
TriggerGroup= 4, $8000, 65, $12B
TriggerGroup= 5, $2000, 231, $140
GlobalTrigger= 3, IGNORE, GT_CONDITION_GROUP, IGNORE, 6, 7, IGNORE
TriggerGroup= 6, $8000, 65, $62B
TriggerGroup= 7, $2000, 231, $240
GlobalTrigger= 4, IGNORE, GT_CONDITION_GROUP, IGNORE, 8, 9, IGNORE
TriggerGroup= 8, $8000, 65, $82B
TriggerGroup= 9, $2000, 233, $141
Organizer= 1, FO_LOOP, IGNORE, 0, 10
TriggerGroup= 10, $2000, 53, $7
Parameters= PARAM_SHOW_SPRITE, 1, IGNORE, 880, 860, 110, 110,
CUSTOM_SPRITES, 0, IGNORE, >
IGNORE, IGNORE, IGNORE
GlobalTrigger=
5, IGNORE, GT_CONDITION_GROUP, IGNORE, 11, 12, 13
TriggerGroup=11,
$8000, 79, $10C, $8000+TGROUP_OR, 81, $10C
TriggerGroup= 12, $2000,
357, $2
TriggerGroup= 13, $2000, 358, $2
Parameters=
PARAM_SHOW_SPRITE, 2, IGNORE, 880, 860, 110, 110, CUSTOM_SPRITES, 0,
IGNORE, >
IGNORE, IGNORE, IGNORE
The setup works in two
threads:
- Thread#1: if the player hits left/right SHIFT,
-
Thread#2: if the player hits Step Left/Right keys.
Thread#1:
The thread uses
two 'local byte' variables:
- Local Byte Alfa1: in this variable
you define what the state of the walking will be when you release the
just pressed SHIFT:
0: this is the default state: the SHIFT
hasn't been pressed, the walking mode is off.
1: the walking mode
switches on, because the SHIFT has been pressed shortly and the walking
mode has just been off.
2: the walking mode switches off, because the
SHIFT has been pressed shortly and the walking mode has just been on.
3: the SHIFT has been pressed continuously, but the walking mode is just
off, so Lara will be running and not walking now if you hit the cursor
keys.
4: the SHIFT has been pressed continuously, but the walking
mode is just on, so Lara will be walking and not running now if you hit
the cursor keys. - Naturally, it's a useless activity of the player: why
does (s)he press SHIFT continuously when the walking mode is on? That
pressing is absolutely senseless: Lara would walk without that long
pressing, all the player should do is press the cursor keys now.
- Local Byte Alfa2: at each frame, number 1 will be added to this
variable, while SHIFT is being pressed. - This is the way to count how
long the SHIFT is being pressed. (No, Organizer can't be usable now. -
I'd rather skip the details to tell why.)
All of this because we want
to perform given things at some frames now:
The 'timer' starts
from 0.
After 1 frame the game adds 1 to Local Byte Alfa1:
-
If the walking mode is just off (so if Local Byte Alfa1=0 now) then
Local Byte Alfa1 becomes 1 now. If the player releases SHIFT maximum
after being pressed 5 frames, then the walking mode will switch on.
-
If the walking mode is just on (so if Local Byte Alfa=1 now) then Local
Byte Alfa1 becomes 2 now. If the player releases SHIFT maximum after
being pressed 5 frames, then the walking mode will switch off.
After newer 5 frames the game adds 2 to Local Byte Alfa1 - this is the
point when the SHIFT has been pressed for 6 frames, i.e. the point when
the pushing becomes 'continuous' instead of 'short':
- If the
walking mode is just off (so if Local Byte Alfa=1 now) then Local Byte
Alfa1 becomes 3 now. If the player releases SHIFT now or later, then
Lara will be running and not walking if the player hits the cursor keys.
- If the walking mode is just on (so if Local Byte Alfa=2 now) then
Local Byte Alfa1 becomes 4 now. If the player releases SHIFT now or
later, then Lara will be walking and not running if the player hits the
cursor keys.
And now let's see what happens in the game
exactly in Thread#1:
GlobalTrigger#1 activates TriggerGroup#2 if the condition in
TriggerGroup#1 is true, or activates TriggerGroup#3 if that condition
isn't true.
TriggerGroup#1 checks if left or right SHIFT is pressed:
; Set Trigger Type - CONDITION 12
;
Exporting: CONDITION(12:60) for PARAMETER(42)
;
<#> : SHIFT Left
;
<&> : Keyboard. <#>keyboard scancode is currently (E)
;
(E) : ACTIVE (Single shot for positive condition)
;
Values to add in script command: $8000, 42, $10C
; Set Trigger Type - CONDITION 12
;
Exporting: CONDITION(12:60) for PARAMETER(54)
;
<#> : SHIFT_Right
;
<&> : Keyboard. <#>keyboard scancode is currently (E)
;
(E) : ACTIVE (Single shot for positive condition)
;
Values to add in script command: $8000, 54, $10C
TriggerGroup#2 adds number 1 to Local Byte Alfa2 (at each frame
while the condition is true, i.e. while left/right SHIFT is being
pressed) and calls PARAM_SHOW_SPRITE=1 Script entry to put the icon on
the screen:
; Set Trigger Type - FLIPEFFECT 231
;
Exporting: TRIGGER(321:0) for FLIPEFFECT(231)
;
<#> : Variables. Numeric. Add to <&>Variable the (E)value
;
<&> : Local Byte Alfa2
;
(E) : Value 1
;
Values to add in script command: $2000, 231, $141
; Set Trigger Type - FLIPEFFECT 357
;
Exporting: TRIGGER(1:0) for FLIPEFFECT(357)
;
<#> : Sprite. Show sprite with data in <&>Parameters for (E)Durate
;
<&> : Parameters=PARAM_SHOW_SPRITE, 1
;
(E) : Forever (use other action/effect to disable it)
;
Values to add in script command: $2000, 357, $1
TriggerGroup#3 does these things when the player releases left or
right SHIFT:
- In every case, it puts the 'timer' (Local Byte
Alfa2) into the default 0 value so that the timer will start from 0 when
the player hits SHIFT next time:
;
Set Trigger Type - FLIPEFFECT 232
;
Exporting: TRIGGER(65:0) for FLIPEFFECT(232)
;
<#> : Variables. Numeric. Set <&>Variable with (E)value
;
<&> : Local Byte Alfa2
;
(E) : Value 0
;
Values to add in script command: $2000, 232, $41
- If Local Byte Alfa1=1 then the game starts Organizer#1:
; Set Trigger Type - CONDITION 43
;
Exporting: CONDITION(43:60) for PARAMETER(64)
;
<#> : Local Byte Alfa1
;
<&> : Variables. The <#>Numeric Variable is = than (E)Value
;
(E) : Value= 1
;
Values to add in script command: $8000, 64, $12B
; Set Trigger Type - FLIPEFFECT 127
;
Exporting: TRIGGER(1:0) for FLIPEFFECT(127)
;
<#> : Organizer. Enable <&>Organizer
;
<&> : Organizer= 1
;
(E) :
;
Values to add in script command: $2000, 127, $1
If Organizer#1 starts then it starts TriggerGroup#10 at once (see:
0, 10):
; Set Trigger Type - FLIPEFFECT 53
;
Exporting: TRIGGER(7:0) for FLIPEFFECT(53)
;
<#> : Keyboard. Simulate receivement of <&>keyboard comand in (E) way
;
<&> : Walk
;
(E) : Single sending
;
Values to add in script command: $2000, 53, $7
This trigger makes Lara walk if the player uses the cursor keys
without SHIFT pressed.
Thanks to FO_LOOP in the Organizer, this
command will be sent again and again (until the Organizer stops) so the
walk will be continuous.
- If Local Byte Alfa1=2 then the game
a, stops Organizer#1 so Lara stops walking without SHIFT pressed,
and
b, removes the icon off the screen, and
c, subtracts 2 from
Local Byte Alfa1 that means 'Lara's not walking and SHIFT isn't pressed,
because Local Byte Alfa1=0'.
;
Set Trigger Type - CONDITION 43
;
Exporting: CONDITION(43:58) for PARAMETER(64)
;
<#> : Local Byte Alfa1
;
<&> : Variables. The <#>Numeric Variable is = than (E)Value
;
(E) : Value= 2
;
Values to add in script command: $8000, 64, $22B
; Set Trigger Type - FLIPEFFECT 128
;
Exporting: TRIGGER(1:0) for FLIPEFFECT(128)
;
<#> : Organizer. Stop <&>Organizer
;
<&> : Organizer= 1
;
(E) :
;
Values to add in script command: $2000, 128, $1
; Set Trigger Type - FLIPEFFECT 358
;
Exporting: TRIGGER(1:0) for FLIPEFFECT(358)
;
<#> : Sprite. Remove from the screen the sprite with data in
<&>Parameters
;
<&> : Parameters=PARAM_SHOW_SPRITE, 1
;
(E) :
;
Values to add in script command: $2000, 358, $1
; Set Trigger Type - FLIPEFFECT 233
;
Exporting: TRIGGER(576:0) for FLIPEFFECT(233)
;
<#> : Variables. Numeric. Substract from <&>Variable the (E)value
;
<&> : Local Byte Alfa1
;
(E) : Value 2
;
Values to add in script command: $2000, 233, $240
- If Local Byte Alfa1=3 then the game
a, removes the icon off
the screen (see $2000, 358, $1 above) and
b, subtracts 3 from Local
Byte Alfa1 that means 'Lara's not walking and SHIFT isn't pressed,
because Local Byte Alfa1=0'.
;
Set Trigger Type - CONDITION 43
;
Exporting: CONDITION(43:56) for PARAMETER(64)
;
<#> : Local Byte Alfa1
;
<&> : Variables. The <#>Numeric Variable is = than (E)Value
;
(E) : Value= 3
;
Values to add in script command: $8000, 64, $32B
; Set Trigger Type - FLIPEFFECT 233
;
Exporting: TRIGGER(832:0) for FLIPEFFECT(233)
;
<#> : Variables. Numeric. Substract from <&>Variable the (E)value
;
<&> : Local Byte Alfa1
;
(E) : Value 3
;
Values to add in script command: $2000, 233, $340
- If Local Byte Alfa1=4 then the game subtracts 3 from Local Byte
Alfa1 (see $2000, 233, $340 above) that means 'Lara's walking and SHIFT
isn't pressed, because Local Byte Alfa1=1'.
;
Set Trigger Type - CONDITION 43
;
Exporting: CONDITION(43:54) for PARAMETER(64)
;
<#> : Local Byte Alfa1
;
<&> : Variables. The <#>Numeric Variable is = than (E)Value
;
(E) : Value= 4
;
Values to add in script command: $8000, 64, $42B
GlobalTrigger#2 activates TriggerGroup#5 if the condition in
TriggerGroup#4 is true.
TriggerGroup#4 checks if Local Byte Alfa2=1:
; Set Trigger Type - CONDITION 43
;
Exporting: CONDITION(43:60) for PARAMETER(65)
;
<#> : Local Byte Alfa2
;
<&> : Variables. The <#>Numeric Variable is = than (E)Value
;
(E) : Value= 1
;
Values to add in script command: $8000, 65, $12B
TriggerGroup#5 adds number 1 to Local Byte Alfa1:
;
Set Trigger Type - FLIPEFFECT 231
;
Exporting: TRIGGER(320:0) for FLIPEFFECT(231)
;
<#> : Variables. Numeric. Add to <&>Variable the (E)value
;
<&> : Local Byte Alfa1
;
(E) : Value 1
;
Values to add in script command: $2000, 231, $140
GlobalTrigger#3 activates TriggerGroup#7 if the condition in
TriggerGroup#6 is true.
TriggerGroup#6 checks if Local Byte Alfa2=6:
; Set Trigger Type - CONDITION 43
;
Exporting: CONDITION(43:50) for PARAMETER(65)
;
<#> : Local Byte Alfa2
;
<&> : Variables. The <#>Numeric Variable is = than (E)Value
;
(E) : Value= 6
;
Values to add in script command: $8000, 65, $62B
TriggerGroup#7 adds number 2 to Local Byte Alfa1:
;
Set Trigger Type - FLIPEFFECT 231
;
Exporting: TRIGGER(576:0) for FLIPEFFECT(231)
;
<#> : Variables. Numeric. Add to <&>Variable the (E)value
;
<&> : Local Byte Alfa1
;
(E) : Value 2
;
Values to add in script command: $2000, 231, $240
Local Byte Alfa2 is a 'byte type variable' that means the largest
number in it is 255. So if the player holds SHIFT down continuously too
long (255 frames=8,5 seconds) then the value in the variable will become
0 at the frame that just follows frame#255 and starts increasing again.
Then will become 255 again, then 0 etc. (I.e. this cycle will be
repeated: 0-255-0-255-0-255-0 etc.)
Of course, Setup#2 will be
bothered if the variable value turns from 255 into 0. That's why we
don't let GlobalTrigger#1 increase the value too high. No, it doesn't
mean we'll stop the timer (because that disturbs the working of some
conditions). Instead of that, we'll always subtract number 1 from Local
Byte Alfa2 if GlobalTrigger#1 would like to step over a limit in Local
Byte Alfa2.
I adjusted this limit as the frame#8. So, if the
player holds SHIFT down at least until 8 frames, then the game subtracts
number 1 from those 8 frames. Then the variable value will become 7. If
SHIFT is still down then Globaltrigger#1 would give another frame to
Local Byte Alfa2 to be 8. But it is 8 again, so the number 1 will be
subtracted again, and the value will become 7 again. Etc.
Conclusion: if the player holds SHIFT down at least 8 frames long then
Local Byte Alfa2 will become 7 continuously - until TriggerGroup#3 turns
it into 0 when the player releases the SHIFT.
It is
GlobalTrigger#4 that does that subtraction: if the Condition in
TriggerGroup#8 is true (i.e. if Local Byte Alfa2=8) then the game will
perform TriggerGroup#9 (i.e. subtracts 1 from Local Byte Alfa2).
; Set Trigger Type - CONDITION 43
;
Exporting: CONDITION(43:46) for PARAMETER(65)
;
<#> : Local Byte Alfa2
;
<&> : Variables. The <#>Numeric Variable is = than (E)Value
;
(E) : Value= 8
;
Values to add in script command: $8000, 65, $82B
; Set Trigger Type - FLIPEFFECT 233
;
Exporting: TRIGGER(321:0) for FLIPEFFECT(233)
;
<#> : Variables. Numeric. Substract from <&>Variable the (E)value
;
<&> : Local Byte Alfa2
;
(E) : Value 1
;
Values to add in script command: $2000, 233, $141
In fact, there are short and long type variables whose containers
are bigger and much bigger than the container of byte type variables.
But we have 3 local long variables, 6 local short variables and 12 local
byte variables in the game for each level, and I'd rather used a smaller
variable now, instead of wasting a valuable, rarer variable. (Anyway,
the subtracting method works perfectly.)
See
more about the variables in the Variables demo project of Paolone.
Thread#2:
In this thread, GlobalTrigger#5 activates TriggerGroup#12 if the
condition in TriggerGroup#11 is true, or activates TriggerGroup#13 if
that condition isn't true.
TriggerGroup#11 checks if Step Left or
Step Right key is pressed:
;
Set Trigger Type - CONDITION 12
;
Exporting: CONDITION(12:60) for PARAMETER(79)
;
<#> : END_PAD1
;
<&> : Keyboard. <#>keyboard scancode is currently (E)
;
(E) : ACTIVE (Single shot for positive condition)
;
Values to add in script command: $8000, 79, $10C
; Set Trigger Type - CONDITION 12
;
Exporting: CONDITION(12:60) for PARAMETER(81)
;
<#> : PAGE_DOWN_PAD3
;
<&> : Keyboard. <#>keyboard scancode is currently (E)
;
(E) : ACTIVE (Single shot for positive condition)
;
Values to add in script command: $8000, 81, $10C
This time we can't call PARAM_SHOW_SPRITE=1 Script entry to put the
icon on the screen, because that would disturb the working of Thread#1.
Instead of that, we'll call PARAM_SHOW_SPRITE=2 Script entry to put the
icon on the screen. This entry contains exactly the same data as
PARAM_SHOW_SPRITE=1 contains. That's why PARAM_SHOW_SPRITE=2 also puts
the 'walking person' icon of Texture0 slot on the screen, and also on
the '880, 860, 110, 110' coordinates.
(So, if the walking mode is
off, then the game puts the same icon in the same position as if the
player hit SHIFT. - It is logical.
And, if the walking mode is on,
then the game puts the icon on the other icon on the screen, overlapping
them with each other. Because the two icons are the same, the player
won't sense anything. - That is also logical.)
TriggerGroup#12
will call PARAM_SHOW_SPRITE=2 (if any of those keys is just pressed) and
TriggerGroup#13 will remove the icon off the screen (if the player just
releases any of those keys):
;
Set Trigger Type - FLIPEFFECT 357
;
Exporting: TRIGGER(2:0) for FLIPEFFECT(357)
;
<#> : Sprite. Show sprite with data in <&>Parameters for (E)Durate
;
<&> : Parameters=PARAM_SHOW_SPRITE, 2
;
(E) : Forever (use other action/effect to disable it)
;
Values to add in script command: $2000, 357, $2
; Set Trigger Type - FLIPEFFECT 358
;
Exporting: TRIGGER(2:0) for FLIPEFFECT(358)
;
<#> : Sprite. Remove from the screen the sprite with data in
<&>Parameters
;
<&> : Parameters=PARAM_SHOW_SPRITE, 2
;
(E) :
;
Values to add in script command: $2000, 358, $2
(When walking mode is on, the player won't sense that the icon is
being removed off the screen, because the other icon - overlapped with
it so far - remains on the screen. - And that is also logical.)
Made using TRNG 1.2.2.6