BABTECH: Shadow Warrior Sprite Tagging Reference
This document is your reference guide to using the special sprites in Shadow Warrior,
including ST1, tracks, locks, switches, cracks, and so on. Examples of almost all uses of
these sprites are given in EXAMPLE.MAP, so be sure to check that map out. You'll find it
in the \GOODIES\TOOLS directory of your Shadow Warrior CD.
Contents
- The Shadow Warrior Sector Effector -
Section 1
- Meet the ST1 sprite - 1.1
- Using the ST1 - 1.1.1
- ST1 functions - 1.1.2
- ST1 context sensitive help - 1.1.3
- The Shadow Warrior BUILD Tags - 1.2
- The 15 standard tags - 1.2.1
- The 11 Boolean Flags - 1.2.2
- TAG1 (Hitag) - 1.2.3
- TAG2 (Lotag) and match tags - 1.2.4
- TAG4 - 1.2.5
- BOOL1 - 1.2.6
- BOOL11 - 1.2.7
- Other Notes Regarding The ST1 - 1.3
- Z-height - 1.3.1
- Color Coding Your ST1s - 1.3.2
- Brighten Your ST1s - 1.3.3
- Other Notes Regarding The ST1 - 1.4
- 0. SECT_SINK
- 1. SECT_OPERATIONAL
- 3. SECT_CURRENT
- 5. SECT_NO_RIDE
- 7. SECT_DIVE_AREA
- 8. SECT_UNDERWATER
- 9. SECT_UNDERWATER2
- 16. SO_ANGLE
- 19. SECT_FLOOR_PAN
- 21. SECT_CEILING_PAN
- 23. WALL_PAN_SPEED
- 29. SECT_LOCK_DOOR
- 30. SPRI_CLIMB_MARKER
- 31. SECT_SO_SPRITE_OBJ
- 32. SECT_SO_DONT_BOB
- 33. SECT_SO_SINK_DEST
- 34. SECT_SO_DONT_SINK
- 37. SECT_SO_FORM_WHIRLPOOL
- 38. SECT_ACTOR_BLOCK
- 42. MULTI_PLAYER_START
- 43. FIREBALL_TRAP
- 44. BOLT_TRAP
- 45. SECT_SO_DONT_ROTATE
- 46. PARALLAX_LEVEL
- 47. SECT_DONT_COPY_PALETTE
- 48. MULTI_COOPERATIVE_START
- 49. SO_SET_SPEED
- 50. SO_SPIN
- 51. SO_SPIN_REVERSE
- 52. SO_BOB_START
- 53. SO_BOB_SPEED
- 55. SO_TURN_SPEED
- 56. LAVA_ERUPT
- 57. SECT_EXPLODING_CEIL_FLOOR
- 58. SECT_COPY_DEST
- 59. SECT_COPY_SOURCE
- 62. SHOOT_POINT
- 63. SPEAR_TRAP
- 64. SO_SYNC1
- 65. SO_SYNC2
- 66. DEMO_CAMERA
- 68. SO_LIMIT_TURN
- 69. SPAWN_SPOT
- 70. SO_MATCH_EVENT
- 71. SO_SLOPE_FLOOR_TO_POINT
- 72. SO_SLOPE_CEILING_TO_POINT
- 73. SO_TORNADO
- 75. SO_AMOEBA
- 76. SO_MAX_DAMAGE
- 77. SO_RAM_DAMAGE
- 80. SO_KILLABLE
- 81. SO_AUTO_TURRET
- 82. SECT_DAMAGE
- 84. WARP_TELEPORTER
- 85. WARP_CEILING_PLANE
- 86. WARP_FLOOR_PLANE
- 87. WARP_COPY_SPRITE1
- 88. WARP_COPY_SPRITE2
- 90. PLAX_GLOB_Z_ADJUST
- 92. SECT_VATOR
- 97. CEILING_Z_ADJUST
- 98. FLOOR_Z_ADJUST
- 99. FLOOR_SLOPE_DONT_DRAW
- 100. SO_SCALE_INFO
- 101. SO_SCALE_POINT_INFO
- 102. SO_SCALE_XY_MULTIPLY
- 103. SECT_WALL_MOVE
- 104. SECT_WALL_MOVE_CANSEE
- 106. SECT_SPIKE
- 108. LIGHTING
- 109. LIGHTING_DIFFUSE
- 110. VIEW_LEVEL1
- 111. VIEW_LEVEL2
- 120. VIEW_THRU_CEILING
- 121. VIEW_THRU_FLOOR
- 132. BREAKABLE
- 132. BREAKABLE_SPRITE
- 133. QUAKE_SPOT
- 134. SOUND_SPOT
- 135. SLIDE_SECTOR
- 136. CEILING_FLOOR_PIC_OVERRIDE
- 140. TRIGGER_SECTOR
- 141. DELETE_SPRITE
- 143. SECT_ROTATOR
- 144. SECT_ROTATOR_PIVOT
- 145. SECT_SLIDOR
- 146. SECT_CHANGOR
- 147. SO_DRIVABLE_ATTRIB
- 148. WALL_DONT_STICK
- 149. SPAWN_ITEMS
- 150. STOP_SOUND_SPOT
- 202. BOUND_FLOOR_BASE_OFFSET
- 203. BOUND_FLOOR_OFFSET
- 500-596. SECT_SO_BOUNDING
- 1000. MIRROR_CAM
- 1002. AMBIENT_SOUND
- 1005. ECHO_SPOT
- 1006. DRIP_GENERATOR
- The Shadow Warrior Track Sprite -
Section 2
- Meet the Track sprites - 2.1
- Building a track - 2.2
- Tagging a track sprite - 2.3
- Lotag - 2.3.1
- Hitag - 2.3.2
- Using a track - 2.4
- Sector and sprite objects - 2.4.1
- Actors - 2.4.2
- Tracktag function reference - 2.5
- 700. TRACK_START
- 701. TRACK_END
- 702. TRACK_SET_SPEED
- 703. TRACK_STOP
- 704. TRACK_REVERSE
- 705. TRACK_SPEED_UP
- 706. TRACK_SLOW_DOWN
- 707. TRACK_VEL_RATE
- 709. TRACK_ZUP
- 710. TRACK_ZDOWN
- 711. TRACK_ZRATE
- 712. TRACK_ZDIFF_MODE
- 715. TRACK_SPIN
- 716. TRACK_SPIN_STOP
- 717. TRACK_BOB_START
- 718. TRACK_BOB_SPEED
- 719. TRACK_BOB_STOP
- 720. TRACK_SPIN_REVERSE
- 723. TRACK_SO_SINK
- 724. TRACK_SO_FORM_WHIRLPOOL
- 725. TRACK_MOVE_VERTICAL
- 726. TRACK_WAIT_FOR_EVENT
- 728. TRACK_MATCH_EVERYTHING
- 729. TRACK_MATCH_EVERYTHING_ONCE
- 751. TRACK_ACTOR_STOP
- 752. TRACK_ACTOR_REVERSE
- 753. TRACK_ACTOR_SPEED_UP
- 754. TRACK_ACTOR_SLOW_DOWN
- 755. TRACK_ACTOR_VEL_RATE
- 771. TRACK_ACTOR_JUMP
- 772. TRACK_ACTOR_CRAWL
- 780. TRACK_ACTOR_CLOSE_ATTACK1
- 782. TRACK_ACTOR_ATTACK1
- 791. TRACK_ACTOR_OPERATE
- 792. TRACK_ACTOR_CLIMB_LADDER
- 799. TRACK_ACTOR_WAIT_FOR_PLAYER
- Other Important Sprites - Section 3
- Actors - 3.1
- Hornets (picnum 800) - 3.1.1
- Bouncing Betty (picnum 817) - 3.1.2
- Accursed Head (picnum 820) - 3.1.3
- Sumo Boss (picnum 1210) - 3.1.4
- Serpent Boss (picnum 1300) - 3.1.5
- Coolie (picnum 1400) - 3.1.6
- Coolie Ghost (picnum 1441) - 3.1.7
- Green Guardian (picnum 1469) - 3.1.8
- Little Ripper (picnum 1580) - 3.1.9
- Fish (picnum 3780) - 3.1.10
- Evil Ninja (picnum 4096) - 3.1.11
- Crouching Evil Ninja (picnum 4162) - 3.1.12
- Big Ripper (picnum 4320) - 3.1.13
- Bunny (picnum 4550) - 3.1.14
- Female Warrior (picnum 5162) - 3.1.15
- Zilla Boss (picnum 5426) - 3.1.16
- Leaders and Followers - 3.1.17
- Spawning Actors with a Trigger - 3.1.18
- Cracks (TAG_SPRITE_HIT_MATCH) - 3.2
- 257. TAG_SPRITE_HIT_MATCH
- Switches: (picnums 551 - 584) - 3.3
- 206. TAG_SPRITE_SWITCH_VATOR
- 210. TAG_LIGHT_SWITCH
- 211. TAG_SWITCH_EVERYTHING
- 212. TAG_SWITCH_EVERYTHING_ONCE
- 213. TAG_COMBO_SWITCH_EVERYTHING
- 214. TAG_COMBO_SWITCH_EVERYTHING_ONCE
- 216. TAG_SPAWN_ACTOR_SWITCH
- 304. TAG_ROTATE_SO_SWITCH
- Shootable switch (picnum 577) - 3.3.1
- Exit switch (picnum 2470) - 3.3.2
- Keys and Keyholes - 3.4
- Keys (picnums 1765 - 1779) - 3.4.1
- Keyholes (picnums 1846, 1850, and 1852) - 3.4.2
- TV Monitors: (picnums 3830 - 3837) - 3.5
- QuickJump and QuickJumpDown - 3.6
- QuickJump (picnum 2309) - 3.6.1
- QuickJumpDown (picnum 2310) - 3.6.2
- Gratings - 3.7
- DeathFlag(tm) Capture the Flag - 3.8
- The Flag Sprite (picnum 2520) - 3.8.1
1. The Shadow Warrior Sector Effector
1.1 Meet the ST1 sprite:
Shadow Warrior has one sector effector, the ST1 sprite. Using it, you will be able to
create all of the different special effects in the game. This is how you make working
doors, dynamic slopes, explosions, moving sectors, room over room, water, and everything
else. For this reason, it is by far the most commonly used sprite in Shadow Warrior.
- 1.1.1 Using the ST1
- An ST1 is a sprite just like any other. You can find it in the tile set (the
"V" menu in BUILD) at position 2307. The most common way to use an ST1 is to
place it in the sector you wish to be affected. For example, if you want a sector to be a
door, you would place the ST1 in that sector, tag it properly, and then that sector would
behave like a door.
- 1.1.2 ST1 functions
- There are almost 100 different functions an ST1 can perform. When you you first place an
ST1 sprite, its sign in 2D mode will probably read "SECT_SINK." This indicates
the ST1's hitag is 0, which designates the SECT_SINK function. By changing the hitag (Alt
H in 2D mode, or ' H in 3D mode) of the sprite, you change the function it will perform,
and its sign will change to reflect that. All of the different ST1 functions are listed
below.
- 1.1.3 ST1 context sensitive help
- If, in 2D mode, you point at an ST1 and press F6, context sensitive help will be listed
at the bottom of the screen. The information provided will be based on the hitag of the
ST1. If, for instance, the ST1's hitag is 92, then F6 will give you help regarding vators.
Most of this help will be the same material you find in this document.
1.2 The Shadow Warrior BUILD Tags:
The Shadow Warrior tagging system was developed by a team which was not in contact with
the Duke Nukem 3D team, so if you are familiar with Duke Nukem 3D mapping, then forget
everything you know, because it can only confuse you here. Shadow Warrior's tagging system
is very powerful, and with this power comes complexity. Stick with it, though, and you'll
soon be proficient enough to set up a shootable light or a locked door without even
looking at this reference.
- 1.2.1 The 15 standard tags
- Every sprite in Shadow Warrior makes use of 15 different TAGS. A tag is merely a
variable that contains information regarding the sprite. To enter a value for a tag, point
to the sprite, then press the QUOTE key plus the number of the tag. To access TAG11
through TAG15, press SHIFT+QUOTE+the number of the tag. Note that TAG1 and TAG2 are the
hitag and lotag, respectively, and so can also be altered with the Alt-H and the Alt-T
keys. The following is a list of the 15 tags, their function, and the range of values they
can hold.
TAG1 = hitag (-32768 to 32767)
TAG2 = lotag (-32768 to 32767)
TAG3 = clipdist (-128 to 127) - default value is 32
TAG4 = ang (-32768 to 32767)
TAG5 = xvel (-32768 to 32767)
TAG6 = yvel (-32768 to 32767)
TAG7 = zvel 1 (-128 to 127)
TAG8 = zvel 2 (-128 to 127)
TAG9 = owner 1 (-128 to 127) - default is unsigned 255 or signed -1
TAG10 = owner 2 (-128 to 127) - default is unsigned 255 or signed -1
TAG11 = shade (-128 to 127)
TAG12 = pal (-128 to 127)
TAG13 = xoffset and yoffset (-32768 to 32767)
TAG14 = xrepeat and yrepeat (-32768 to 32767)
TAG15 = z (-32768 to 32767)
- 1.2.2 The 11 Boolean Flags
- A boolean flag can hold only two possible values: 0 or 1. Every sprite in Shadow Warrior
makes use of 11 boolean flags. To enter a value for a boolean flag, press the SEMICOLON
key plus the number of the tag. To enter a value for BOOL11, press SHIFT, plus SEMICOLON,
plus the "1" key.
- 1.2.3 TAG1 (Hitag)
- An ST1 sprite always uses TAG1 (the hitag) to specify which function the sprite is to
perform on the sector.
- 1.2.4 TAG2 (Lotag) and match tags
- An ST1 sprite often uses TAG2 (the lotag) to specify a so-called "match" tag.
This means that the value in TAG2 is a unique and arbitrary value designated by you, the
level designer. This unique value is used to match the ST1's function to a trigger. A
trigger can be caused by such events as operating a switch or stepping into a trigger
sector. BUILD will report the next available match tag when you press F5 in 2D mode.
- 1.2.5 TAG4
- TAG4, as you can see from the list above, is a sprite's angle. By changing the TAG4
value of a sprite, you also change the angle it's facing. Be very cautious of this,
because a great many ST1 functions rely on having an exact value in TAG4. If you use the
">" or "<" keys on that sprite, the value will shift by 128,
which is probably a large enough change that the ST1 will no longer behave as you'd expect
it to. In the case of ST1 134 (SOUND_SPOT), the game will probably quit to DOS with an
error. Another pitfall to beware is rotating Right-Alt selected groups of sectors. Since
all of the sprites within the selected group are rotated with the sectors when you do
this, their TAG4 values will often become grossly incorrect.
- 1.2.6 BOOL1
- If the BOOL1 flag is set to 1 on any sprite, BUILD will cause that individual sprite to
behave as though it were an ST1 sprite. This is generally only used to create breakable
sprites.
- 1.2.7 BOOL11
- BOOL11 is a flag used by all sprites in the game, not just ST1s. If the BOOL11 flag on
any sprite is set to 1, then that sprite will remain stationary rather than ride up and
down on a vator.
1.3 Other Notes Regarding The ST1
- 1.3.1 Z-height
- Many functions are affected by the height of the ST1 sprite. For instance, a door might
open to the height of the sprite, or a teleporter might move the player to the same height
as the sprite. When calculating a height, always use the lowest point of the sprite
graphic as the reference, no matter which way the sprite is oriented. A sprite that is
placed on the floor by means of Ctrl-PgDn is at the exact same z-coordinate as the floor,
no matter how far the graphic sticks up. A sprite that is placed against the ceiling using
Ctrl-PgUp, however, does not have the same z-height as the ceiling because the top of the
graphic is resting against the ceiling, and not the bottom. You'll find that you will
occasionally need to sink an ST1 into the floor or into the ceiling to get a desired
effect.
- 1.3.2 Color Coding Your ST1s
- The only ST1 functions affected by the sprite's palette value are LIGHTING (hitag 108)
and LIGHTING_DIFFUSE (hitag 109). Since in most cases the ST1 isn't affected by palette,
you may find it useful to assign different palette values to certain ST1 functions, so as
to more readily identify them in 3D mode. For instance, I sometimes like to color
SPAWN_SPOTs green (palette 11) and TAG_SPRITE_HIT_MATCHes red (palette 14.) Make a habit
of color coding your ST1 sprites, and you won't regret it.
- 1.3.3 Brighten Your ST1s
- No ST1 function is affected by the shade value of the sprite, so why not make them
really bright? This will make them easier to spot in 3D editing mode.
1.4 The Shadow Warrior ST1 Function Reference:
- Hitag 0: SECT_SINK
- TAG2 = depth
- Place this in water, lava, or any sector with a floor surface you want Lo Wang to sink
into. He will sink to the depth specified in TAG2. When building dive sectors (see Hitag
7: SECT_DIVE_AREA) TAG2 needs to be at least 35. You probably never want to use a value
greater than 40, or the player's view may become distorted. NOTE: If used with a lava
texture, SECT_SINK will cause Lo Wang to take damage when stepping in the sector.
EXAMPLES: AA and BB in EXAMPLE.MAP
SEE ALSO: PLAX_GLOB_Z_ADJUST (hitag 90), CEILING_Z_ADJUST (hitag 97), FLOOR_Z_ADJUST (hitag 98)
- Hitag 1: SECT_OPERATIONAL
- Place this in a sector of a driveable sector object. This will be the sector the player
must stand in and press SPACE to operate the driveable.
EXAMPLES: EE and EF in EXAMPLE.MAP
- Hitag 3: SECT_CURRENT
- TAG2 = speed
- TAG4 = angle
- If SECT_CURRENT is used in a sector along with either a SECT_SINK (Hitag 0), a
SECT_UNDERWATER (Hitag 8), or a SECT_UNDERWATER2 (Hitag 9), the player will be moved in
the direction the SECT_CURRENT is facing, at the speed designated in TAG2.
EXAMPLES: AA and BB in EXAMPLE.MAP
SEE ALSO: SECT_SINK (hitag 0), SECT_UNDERWATER (hitag 8), SECT_FLOOR_PAN (hitag 19)
- Hitag 5: SECT_NO_RIDE
- Use SECT_NO_RIDE in any sector of a moving sector object to keep the player from moving
with that sector.
EXAMPLES: EC, FC and FD in EXAMPLE.MAP
- Hitag 7: SECT_DIVE_AREA
- TAG2 = match (non zero)
- Diving area - pressing the CROUCH key when here will teleport the player to an
UNDERWATER (Hitag 8) area with a matching UNIQUE match tag. You must also have a SECT_SINK
(Hitag 0) sprite in the same sector with a TAG2 of at least 35 for this to work.
EXAMPLES: BA in EXAMPLE.MAP
SEE ALSO: SECT_SINK (hitag 0), SECT_UNDERWATER (hitag 8)
- Hitag 8: SECT_UNDERWATER
- Underwater area - floating to the ceiling of this area will teleport the player to the
DIVE_AREA (hitag 7) with a matching UNIQUE non zero match tag. IMPORTANT: The over- and
underwater sectors need to have congruent shapes, and the SECT_DIVE_AREA sprite and the
SECT_UNDERWATER sprite need to be in the same relative position for both of their
respective sectors. IMPORTANT: A zero in TAG2 denotes that this is a swim area with no
matching SECT_DIVE_AREA. This can be used for areas where the player cannot surface.
EXAMPLES: BA in EXAMPLE.MAP
SEE ALSO: SECT_DIVE_AREA (hitag 7), SECT_UNDERWATER2 (hitag 9)
- Hitag 9: SECT_UNDERWATER2
- TAG2 = match
- TAG3 = type
- 0 or 32 = surface here
- 1 = can't surface here
- Secondary Underwater area - floating to the surface of this area will teleport you to
the SECT_DIVE_AREA (hitag 7) with a matching unique match tag. SECT_UNDERWATER2 allows you
to split an underwater area into multiple sectors, while still having a single large
DIVE_AREA sector.
EXAMPLES: BA in EXAMPLE.MAP
SEE ALSO: SECT_DIVE_AREA (hitag 7), SECT_UNDERWATER (hitag 8)
- Hitag 16: SO_ANGLE
- TAG4 = Angle of Sector Object
- Place this anywhere in a sector object to tell Shadow Warrior which end is the front.
This will affect the orientation of a sector object as it follows a track or is operated
by the player.
EXAMPLES: EE, EF, and FA in EXAMPLE.MAP
- Hitag 19: SECT_FLOOR_PAN
- TAG2 = speed - 0 to 16386
- TAG4 = angle
- BOOL1 = Move with speed of sector object
- This causes the floor of the sector it's in to pan in the direction indicated by TAG4 at
the rate indicated by TAG2. Set BOOL1 to "1" if the sector is part of a sector
object and you want the floor to pan at the same speed the sector object is moving. The
BOOL1 feature is primarily used to simulate moving tank treads on driveable sector
objects.
EXAMPLES: BB in EXAMPLE.MAP
SEE ALSO: SECT_CEILING_PAN (hitag 21), WALL_PAN_SPEED (hitag 23)
- Hitag 21: SECT_CEILING_PAN
- TAG2 = speed - 0 to 16386
- TAG4 = angle
- BOOL1 = Move with speed of sector object
- This causes the ceiling of the sector it's in to pan in the direction indicated by TAG4
at the rate indicated by TAG2. Set BOOL1 to "1" if the sector is part of a
sector object and you want the ceiling to pan at the same speed the sector object is
moving.
EXAMPLES: BB in EXAMPLE.MAP
SEE ALSO: SECT_FLOOR_PAN (hitag 19), WALL_PAN_SPEED (hitag 23)
- Hitag 23: WALL_PAN_SPEED
- TAG2 = speed - 0 to 16386
- TAG4 = point sprite at desired wall
- TAG6 = angle of panning
- BOOL1 = Move with speed of sector object
- Point the sprite at the wall you want it to affect. That wall's texture will pan in the
direction indicated by TAG6 at the rate indicated by TAG2. Set BOOL1 to "1" if
the wall is part of a sector object and you want the wall texture to pan at the same speed
the sector object is moving. This feature is usually used to simulate tank treads on
driveable sector objects.
EXAMPLES: BB in EXAMPLE.MAP
SEE ALSO: SECT_CEILING_PAN (hitag 21), SECT_FLOOR_PAN (hitag 19)
- Hitag 29: SECT_LOCK_DOOR
- TAG2 = type
- 1 = RED KEYCARD
- 2 = BLUE KEYCARD
- 3 = GREEN KEYCARD
- 4 = YELLOW KEYCARD
- 5 = GOLD MASTER KEY
- 6 = SILVER MASTER KEY
- 7 = BRONZE MASTER KEY
- 8 = RED MASTER KEY
- Lock the door. Must have the correct key to open it. Works for rotating, sliding, and
all vator uses including switches. Place it in the same sector with a SECT_VATOR (hitag 92), SECT_ROTATOR
(hitag 143), or SECT_SLIDOR (hitag 145).
EXAMPLES: EB in EXAMPLE.MAP
- Hitag 30: SPRI_CLIMB_MARKER
- TAG4 = angle
- Center this sprite on the ladder and set the angle pointing out away from the wall. The
position of the sprite is important, because that is the (x,y) location the player sprite
will be in while climbing the ladder. Used in conjunction with TAG_WALL_CLIMB (walltag
305).
EXAMPLES: BC and DF in EXAMPLE.MAP
- Hitag 31: SECT_SO_SPRITE_OBJ
- Place this ST1 anywhere in a sector object. Makes a sector object become a "sprite
object." The sprites will move but the sectors will not. Sprite objects can cross
sector boundries, whereas regular sector objects cannot.
EXAMPLES: EC in EXAMPLE.MAP
- Hitag 32: SECT_SO_DONT_BOB
- Mark a sector in a bobbing sector object so it will not bob with the rest of the sector.
Look at the boat in $WHIRL.MAP for an example.
SEE ALSO: SO_BOB_START (hitag 52), SO_BOB_SPEED (hitag 53)
- Hitag 33: SECT_SO_SINK_DEST
- TAG2 = offset
- Mark a sector in a sector object as the destination for sinking. It will not sink with
other sectors. TAG2 is the offset from the sector's current floor height to use as the
sinking destination. Look at the boat in $WHIRL.MAP for an example.
SEE ALSO: SECT_SO_DONT_SINK (hitag 34), TRACK_SO_SINK
(tracktag 723)
- Hitag 34: SECT_SO_DONT_SINK
- Mark a sector in a sector object so it will not sink with other sectors. Look at the
boat in $WHIRL.MAP for an example.
SEE ALSO: SECT_SO_SINK_DEST (hitag 33)
- Hitag 37: SECT_SO_FORM_WHIRLPOOL
- TAG2 = depth
- Lower the whirlpool sectors to a 'depth' level, when the appropriate track sprite is
reached by the sector object. TRACK_SO_FORM_WHIRLPOOL
(tracktag 724) Look at the boat in $WHIRL.MAP for an example.
- Hitag 38: SECT_ACTOR_BLOCK
- Mark a sector to keep enemy actors from entering, but the player can still enter. Both
enemies and the player can still fire weapons through the sector.
EXAMPLES: BC in EXAMPLE.MAP
- Hitag 42: MULTI_PLAYER_START
- TAG2 = (0 to 7) player number
- TAG4 = angle to start facing
- These mark the positions where players will spawn in WangBang games. The players' feet
will be placed at the same height as the bottom of the ST1 sprite, so place them on the
floor unless you want the player to fall. Always be sure to include start point #0.
EXAMPLES: Any game map
SEE ALSO: MULTI_COOPERATIVE_START (hitag 48)
- Hitag 43: FIREBALL_TRAP
- TAG2 = match
- TAG4 = angle
- Shoots a fireball from the location of this sprite in the direction the angle is
pointing when a sector tagged TAG_TRIGGER_MISSILE_TRAP (sector tag 43) is stepped on.
EXAMPLES: BD in EXAMPLE.MAP
SEE ALSO: BOLT_TRAP (hitag 44), SPEAR_TRAP (hitag 63)
- Hitag 44: BOLT_TRAP
- TAG2 = match
- TAG4 = angle
- Shoots a rocket from the location of this sprite in the direction the angle is pointing
when a sector tagged TAG_TRIGGER_MISSILE_TRAP (sector tag 43) is stepped on.
EXAMPLES: BD in EXAMPLE.MAP
SEE ALSO: FIREBALL_TRAP (hitag 43), SPEAR_TRAP (hitag
63)
- Hitag 45: SECT_SO_DONT_ROTATE
- Causes a sector object to move without rotating as it follows its track or is driven by
the player. Place in the center sector.
EXAMPLES: FB in EXAMPLE.MAP
SEE ALSO: SO_TURN_SPEED (hitag 55), SO_LIMIT_TURN (hitag 68)
- Hitag 46: PARALLAX_LEVEL
- TAG2 = parallax sky type
- Set parallax sky type to 0, 1, or 2. This value adjusts the xrepeat of the sky texture.
You only need to place one per level in a single sector that uses a parallax sky texture,
and it will affect the whole level. If more than one is placed in a map, the sky will
usually behave strangely.
EXAMPLES: BE in EXAMPLE.MAP
- Hitag 47: SECT_DONT_COPY_PALETTE
- Normally any sprites or the player standing on a palette swapped floor take on the
palette of the floor. Use this ST1 on sectors where you don't want this to happen.
EXAMPLES: BE in EXAMPLE.MAP
- Hitag 48: MULTI_COOPERATIVE_START
- TAG2 = (0 to 7) player number
- TAG4 = angle to start facing
- Spawn spots for cooperative multi-player games. The players' feet will be placed at the
same height as the bottom of the ST1 sprite, so place them on the floor unless you want
the player to fall. Always be sure to include start point #0.
EXAMPLES: Any game map
SEE ALSO: MULTI_PLAYER_START (hitag 42)
- Hitag 49: SO_SET_SPEED
- TAG2 = speed (2 to 128)
- Sets the speed at which a sector object follows a track. This is functionally the same
as TRACK_SET_SPEED (tracktag 702).
EXAMPLES: FA in EXAMPLE.MAP
- Hitag 50: SO_SPIN
- TAG2 = speed
- Causes a sector object to spin clockwise at the rate specified in TAG2. This is
functionally the same as TRACK_SPIN (tracktag 715).
EXAMPLES: EC in EXAMPLE.MAP
SEE ALSO: SO_SPIN_REVERSE (hitag 51)
- Hitag 51: SO_SPIN_REVERSE
- TAG2 = speed
- Causes a sector object to spin counter-clockwise at the rate specified in TAG2. This is
functionally the same as TRACK_SPIN_REVERSE (tracktag 720).
EXAMPLES: EC in EXAMPLE.MAP
SEE ALSO: SO_SPIN (hitag 50)
- Hitag 52: SO_BOB_START
- TAG2 = bobbing amount
- Causes a sector object to bob up and down continuously. TAG2 specifies how high the
object will bob. This is functionally the same as TRACK_BOB_START (tracktag 717).
EXAMPLES: $WHIRL.MAP
SEE ALSO: SO_BOB_SPEED (hitag 53), SECT_SO_DONT_BOB
(hitag 32)
- Hitag 53: SO_BOB_SPEED
- TAG2 = speed
- Place in the same sector with SO_BOB_START (hitag 52). TAG2 specifies the speed at which
the sector object will bob. This is functionally the same as TRACK_BOB_SPEED (tracktag
718).
EXAMPLES: $WHIRL.MAP
SEE ALSO: SO_BOB_START (hitag 52), SECT_SO_DONT_BOB
(hitag 32)
- Hitag 55: SO_TURN_SPEED
- TAG2 = speed (0 is fastest)
- Determines how fast a sector object turns to meet the new angle as it follows a track.
The default is 4. For some reason this has no track tag functional equivalent.
EXAMPLES: FA in EXAMPLE.MAP
SEE ALSO: SECT_SO_DONT_ROTATE (hitag 45), SO_LIMIT_TURN (hitag 68)
- Hitag 56: LAVA_ERUPT
- TAG2 = (1 to 1024) The larger the number the more stuff erupts.
- TAG3 = type of eruption
- 0 = lava shards
- 1 = volcano boulders
- TAG4 = angle of eruption
- TAG5 = angle delta from TAG4
- TAG6 = max x/y velocity
- TAG7 = z velocity amount
- TAG8 = z velocity random amount - added to TAG5 value
- TAG9 = erupt for this many seconds - default 10
- TAG10 = wait for this many seconds till next eruption
- BOOL1 = don't spawn unless player is in TRIGGER_SECTOR
- This ST1 will spawn lava debris at its location. The lava will constantly erupt in
intervals (killing framerate) unless BOOL1 is set to "1", in which case you will
need to set up trigger sectors. See TRIGGER_SECTOR
(hitag 140.) Then the lava will only erupt while the player is standing in those sectors.
EXAMPLES: BF in EXAMPLE.MAP
- Hitag 57: SECT_EXPLODING_CEIL_FLOOR
- TAG2 = match
- Pulls the ceiling and floor together at pre-map. The ceiling and floor can then be
explosively blown apart by shooting a TAG_SPRITE_HIT_MATCH (lotag 257), otherwise known as
a crack sprite. The TAG_SPRITE_HIT_MATCH hitag must match
TAG2 of this ST1.
EXAMPLES: CA in EXAMPLE.MAP
SEE ALSO: SECT_COPY_DEST (hitag 58), SECT_COPY_SOURCE (hitag 59), SPAWN_SPOT (hitag 69)
- Hitag 58: SECT_COPY_DEST
- TAG2 = match
- TAG3 = sector source-dest match
- Effectively copies all of the source sector attributes to the destination sector when
triggered. This is probably the most powerful feature of Shadow Warrior, because it lets
you do so many cool things to a map. Examples are scattered throughout almost every map.
You can do things like blow a hole in the floor and reveal a hidden swimmable stream, lava
pool, or gettable item. It will move sprites from the source to the destination also. It's
very important that the source and destination sectors be congruent. TAG2 is an event
match (i.e. hit a switch and the copy occurs), while TAG3 serves to identify which source
sector belongs to which destination sector when copying multiple sectors at the same time.
Copy sector 58-59 tags will activate in conjuction with matching SECT_MOVE_WALL (hitag 103) tags AFTER the copy is done.
Copy sector 58-59 tags should remove any visible sprites from the destination sector,
although this doesn't apply to gettable items. Copy sector 58-59 tags will activate in
conjuction with matching SPAWN_SPOT tags AFTER the copy is done.
EXAMPLES: CB in EXAMPLE.MAP
SEE ALSO: SECT_COPY_SOURCE (hitag 59), SECT_EXPLODING_CEIL_FLOOR (hitag 57)
- Hitag 59: SECT_COPY_SOURCE
- TAG2 = match
- TAG3 = sector sourec-dest match
- This is the source from which a destination sector is copied. See SECT_COPY_DEST (hitag
58) for more information.
EXAMPLES: CB in EXAMPLE.MAP
SEE ALSO: SECT_COPY_DEST (hitag 58), SECT_EXPLODING_CEIL_FLOOR (hitag 57)
- Hitag 62: SHOOT_POINT
- TAG2 = match - if non 0 then it will call DoMatchEverything every time sector object is
fired. Can be a one time operation with BOOL1
- TAG3 = ammo type -1/255 = Do nothing shoot point - primarily to make the player's weapon
go away
- 0 = Tank shell
- 1 = Machine gun
- 2 = Laser
- 3 = Rail gun
- 4 = Fireball
- 5 = Rocket
- 6 = Micro Missle Battery
- TAG4 = angle
- TAG5 = delay until next fire in 120th of a second tics (i.e. 60 = half a second)
Defaults to 80, except ammo type 1, which defaults to 6.
- TAG6 = Sound Spot match - Calls SOUND_SPOT (hitag 134) with this match tag
- BOOL1= If "1" then TAG2 is reset to 0 after the first use.
- For operational sector objects and auto turrets. Sets the point from which the sector
object shoots. Place on the end of a gun barrel and point the sprite in the desired
shooting direction. When a shoot point exists on an operational sector object, the
player's weapon is no longer used, otherwise the player's weapon stays up. Sometimes TAG6
is not needed because some ammo types have default sounds.
EXAMPLES: EE and EF in EXAMPLE.MAP
- Hitag 63: SPEAR_TRAP
- TAG2 = match
- TAG4 = angle
- Shoots an arrow from the location of this sprite in the direction the angle is pointing
when a sector tagged TAG_TRIGGER_MISSILE_TRAP (sector tag 43) is stepped on.
EXAMPLES: BD in EXAMPLE.MAP
SEE ALSO: FIREBALL_TRAP (hitag 43), BOLT_TRAP (hitag 44)
- Hitag 64: SO_SYNC1
- Place in a sector object. Keeps sector objects running a constant rate so they can stay
in sync better if needed. Possibly useful for meshing gears or something. If it's rideable
use SYNC1. Only use this when you absolutely need to. (NOTE: This isn't used anywhere in
Shadow Warrior, and probably isn't even necessary.)
SEE ALSO: SO_SYNC2 (hitag 65)
- Hitag 65: SO_SYNC2
- Same as SO_SYNC1 (hitag 64), only slightly faster. If it's rideable use SYNC1. Only use
this when you absolutely need to. (NOTE: This isn't used anywhere in Shadow Warrior, and
probably isn't even necessary.)
- Hitag 66: DEMO_CAMERA
- TAG2 = delta angle
- TAG3 = camera type (0 or 1)
- TAG4 = angle
- A third person camera view which is used when playing back demos, or when playing with
the -cam command line option. Point it in the direction you want the camera to face. TAG2
is the amount the camera will turn in either direction (512 = 90 degrees). If TAG3 is 1,
then a special camera will be used which orbits around the player at a constant distance,
speed, and height, until the player moves out of the camera's view.
EXAMPLES: FD in EXAMPLE.MAP
SEE ALSO: MIRROR_CAM (hitag 1000)
- Hitag 68: SO_LIMIT_TURN
- TAG2 = delta angle
- Limit the turning of sector object. Especially useful with turrets. Point the
SO_LIMIT_TURN sprite in the center direction. TAG2 is the amount the sector object can
pivot in either direction. (512 = 90 degrees either way, for a 180 degree total range of
motion)
EXAMPLES: EE in EXAMPLE.MAP
SEE ALSO: SECT_SO_DONT_ROTATE (hitag 45), SO_TURN_SPEED (hitag 55)
- Hitag 69: SPAWN_SPOT
- TAG2 = Match
- TAG3 = Type of effect to spawn
- 0 = Nothing
- 1 = Breaking glass
- 2 = Wood smashed
- 3 = Smoke, but only used for damaged sector objects
- 4 = Rice paper (silent)
- 5 = Blood splat (silent)
- 6 = Standard explosion
- 7 = Explosion w/phosphorous
- 8 = Breaking metal
- 9 = Crumbling stone
- 11 = Gib splat
- 12 = Wood smashed
- 13 = Crumbling stone
- TAG4 = Direction debris flies out in
- TAG5 = Time delay before activating in 1/8 second tics
- TAG6 = Always set this equal to TAG3
- TAG8 = Number of shrap pieces (default value of 0 will pick a programmed default number)
- TAG9 = Random Z range in pixels from ST1 z position
- TAG10 = Increase size of shraps (0-255)
- Spawn some effect triggered by just about anything. This is used a lot throughout the
game for various special effects, including crumbling ceilings, large complex explosions,
and breakable sprites.
EXAMPLES: CC in EXAMPLE.MAP
SEE ALSO: SECT_EXPLODING_CEIL_FLOOR (hitag 57), SPAWN_ITEMS (hitag 149)
- Hitag 70: SO_MATCH_EVENT
- TAG2 = Match
- TAG3 = Spin_speed adjust - can be negative or positive
- TAG7 = Velocity adjustment
- BOOL1 = Velocity adjustment type
- 0: Velocity adjust is instant
- 1: Velocity adjust is approached
BOOL2 = Direction flip
- 0: False
- 1: True
- BOOL3 = Toggle help only used for triggers and things that don't have a definite ON/OFF.
- 0: Off
- 1: On
- Certain sector object effects, like SO_SCALE_INFO
(hitag 100) and SO_KILLABLE (hitag 80), can be
triggered by a match tag event. This is accomplished using SO_MATCH_EVENT. The adjustment
values are added when the event is ON, and they are subtracted when the event is OFF. You
may need to experiment with this a bit, since we didn't use it very much in the game.
EXAMPLES: EE in EXAMPLE.MAP
- Hitag 71: SO_SLOPE_FLOOR_TO_POINT
- Aligns a sloping floor sector in a sector object to a point tagged as
TAG_WALL_ALIGN_SLOPE_TO_POINT (walltag 550). Generally used with a spike or drill effect
rising up from the floor. See also SO_SLOPE_CEILING_TO_POINT (hitag 72).
- Hitag 72: SO_SLOPE_CEILING_TO_POINT
- Aligns a sloping floor sector in a sector object to a point tagged as
TAG_WALL_ALIGN_SLOPE_TO_POINT (walltag 550). Generally used with a tornado or whirlpool
effect coming down from the ceiling. See also SO_SLOPE_FLOOR_TO_POINT (hitag 71).
EXAMPLES: ED in EXAMPLE.MAP
- Hitag 73: SO_TORNADO
- This sets up a sector object to behave like a tornado.
EXAMPLES: ED in EXAMPLE.MAP
SEE ALSO: SO_AMOEBA (hitag 75), SO_AUTO_TURRET (hitag
81)
- Hitag 75: SO_AMOEBA
- This sets up a sector object to behave like an amoeba.
EXAMPLES: EC in EXAMPLE.MAP
SEE ALSO: SO_TORNADO (hitag 73), SO_AUTO_TURRET
(hitag 81), SO_SCALE_INFO (hitag 100)
- Hitag 76: SO_MAX_DAMAGE
- TAG2 = Max amount of damage a sector object can take before breaking
- TAG3 = Always set to 0
- TAG5 = Initial damage setting (-1 is broken) - if this value is 0 it is set to the value
of TAG2 (full health)
- Damage for operational and auto turret sector objects. Sector objects only take damage
from explosive type weapons, not machine gun types. Be sure to add a SPAWN_SPOT (hitag 69) with TAG3 set to 3 for the smoke
effect. When the driveable is broken, it will trigger the smoke, and when the object is
repaired, the smoke will go away again.
EXAMPLES: EE in EXAMPLE.MAP
SEE ALSO: SO_KILLABLE (hitag 80)
- Hitag 77: SO_RAM_DAMAGE
- TAG2 = Damage amount
- Damage amount done by ramming with an operational sector object. Not needed for running
over actors, since this is done by default. This is usually used for ramming killable
sector objects or other operational sector objects.
- Hitag 80: SO_KILLABLE
- Marks a sector object as killable. Make sure the center sector of the sector object has
a sector lotag of 95. A sector object can be killed either when it receives enough damage,
set by SO_MAX_DAMAGE (hitag 76), or when a match event occurs, set by SO_MATCH_EVENT (hitag 70). A killable sector object is
actually completely deleted by becoming part of the sector surrounding the sector object.
EXAMPLES: EE in EXAMPLE.MAP
- Hitag 81: SO_AUTO_TURRET
- A sector object with a SO_AUTO_TURRET ST1 will always turn to face the player. Useful
for a variety of effects, since it won't shoot the player unless you give it a SHOOT_POINT (hitag 62). A SHOOT_POINT on an auto turret
will only fire the machine gun ammo type. The sector object center must have a sector
hitag of 96 or 98 for this to work properly.
EXAMPLES: EE in EXAMPLE.MAP
SEE ALSO: SO_AMOEBA (hitag 75), SO_TORNADO (hitag 73)
- Hitag 82: SECT_DAMAGE
- TAG2 = Damage done per second
- BOOL1 = 0, Does damage when touching floor of sector
- BOOL1 = 1, Does damage above sector - like swimming in lava
- Causes a sector to do damage to players and actors.
EXAMPLES: CD in EXAMPLE.MAP
- Hitag 84: WARP_TELEPORTER
- TAG2 = Match
- TAG3 = Type
- 0 = (default) Always teleports you to the matching sprite location at the angle the
sprite is facing
- 1 = (offset) Always teleports you by the offset. Does not affect the angle.
- TAG4 = Angle
- TAG5-8 = Random match locations in addition to TAG2
- TAG10 = Teleport or don't
- 0 = (two-way) Teleport when you enter this sector
- 1 = (one-way) Don't teleport when you hit this sector
- Magic teleporter warps just about anything from one sector to another. If TAG3 is
"0", then a magic shimmering effect and sound will occur. It is very important
that the destination sector be at least as large as the source sector, or the game may
quit with an error.
EXAMPLES: CD in EXAMPLE.MAP
SEE ALSO: WARP_CEILING_PLANE (hitag 85), WARP_FLOOR_PLANE (hitag 86), WARP_COPY_SPRITE1
(hitag 87), WARP_COPY_SPRITE2 (hitag 88)
- Hitag 85: WARP_CEILING_PLANE
- TAG2 = Match
- If the player's view (or a NPC Z coordinate) goes ABOVE the Z position of this ST1
sprite then a warp to the Z coordinate of the matching WARP_FLOOR_PLANE (hitag 86) will
occur.
EXAMPLES: CE in EXAMPLE.MAP
SEE ALSO: WARP_TELEPORTER (hitag 84), WARP_FLOOR_PLANE (hitag 86), WARP_COPY_SPRITE1
(hitag 87), WARP_COPY_SPRITE2 (hitag 88),
- Hitag 86: WARP_FLOOR_PLANE
- TAG2 = Match
- If the player's view (or a NPC Z coordinate) goes BELOW the Z position of this ST1
sprite then a warp to the Z coordinate of the matching WARP_CEILING_PLANE will occur.
EXAMPLES: CE in EXAMPLE.MAP
SEE ALSO: WARP_CEILING_PLANE (hitag 85), WARP_TELEPORTER (hitag 84), WARP_COPY_SPRITE1
(hitag 87), WARP_COPY_SPRITE2 (hitag 88)
- Hitag 87: WARP_COPY_SPRITE1
- TAG2 = Match WARP_COPY_SPRITE2 tag
- Any sprite that enters a sector marked with WARP_COPY_SPRITE1 will cause a duplicate
image to appear in the sector marked with a WARP_COPY_SPRITE2 (hitag 88) with matching
TAG2.
EXAMPLES: CE in EXAMPLE.MAP
SEE ALSO: WARP_CEILING_PLANE (hitag 85), WARP_FLOOR_PLANE (hitag 86), WARP_TELEPORTER
(hitag 84), WARP_COPY_SPRITE2 (hitag 88)
- Hitag 88: WARP_COPY_SPRITE2
- TAG2 = Match WARP_COPY_SPRITE1 tag
- Any sprite that enters a sector marked with WARP_COPY_SPRITE2 will cause a duplicate
image to appear in the sector marked with a WARP_COPY_SPRITE2 (hitag 87) with matching
TAG2.
EXAMPLES: CE in EXAMPLE.MAP
SEE ALSO: WARP_CEILING_PLANE (hitag 85), WARP_FLOOR_PLANE (hitag 86), WARP_COPY_SPRITE1
(hitag 87), WARP_TELEPORTER (hitag 84)
- Hitag 90: PLAX_GLOB_Z_ADJUST
- TAG2 = Ceiling z movement in pixels
- TAG3 = Floor z movement in pixels
- Global parallax ceiling and floor adjustment. Default is 500 pixels. This affects how
far past the actual surface height a sprite can move in sectors with parallax ceilings and
floors.
SEE ALSO: FLOOR_Z_ADJUST (hitag 98), CEILING_Z_ADJUST (hitag 97), SECT_SINK (hitag 0)
- Hitag 92: SECT_VATOR
- TAG2 = Match
- TAG3 = Type
- 0 = Manual/Switch/Trigger - Primarily used for a basic manually operated door. If a
manual type has a match tag that is not 0 then ALL vators with the same match type will be
operated on. Manual operation - works from either within the sector or alongside of the
sector. Switch operation - switch resets when the vator goes to default position. Trigger
operation - same as switch but it's a floor trigger.
- 1 = Switch/Trigger Only - Cannot be operated manually ALL vator types with the same
matching tag get operated on
- 2 = Automatic - Starts Active
- 3 = Automatic - Starts Inactive - must be turned on with a switch or trigger
- TAG4 = Speed
- TAG5 = Acceleration at which door approaches TAG4
- TAG6 = Match at destination - when a vator reaches its destination it will trigger any
event with this match tag
- TAG9 = Auto return time - 1/8th of a second resolution - if non 0 then the vator will
return to default position after alloted time - if 0 then it will stay in the on position
until operated again
- BOOL1 =
- 0: Start in the off position
- 1: Start in the on position
- BOOL2 =
- 0: Toggle
- 1: Operate once only
- BOOL3 =
- 0: Crush player
- 1: Don't crush player
- BOOL4 =
- 0: Operate in WangBang games
- 1: Not allowed to operate in WangBang games
- BOOL5 =
- 0: Don't call TAG6 match when moving to OFF position
- 1: Call TAG6 match when moving to the ON or OFF position
- BOOL6 =
- 0: Wait until motion is complete before it can be operated again
- 1: Can be operated again while sector is in motion
- BOOL7 =
- 0: Actors are allowed to operate this vator
- 1: Actors can't operate this vator
- BOOL11 = 1: Displays "Single play only" message when operated in WangBang. Use
with BOOL4.
- Elevators, stompers, doors, lifts and other tricks are collectively called
"vators." The "off" position is the position of the sector in BUILD,
the "on" position is the height of the ST1 sprite. Flip the ST1 sprite upside
down (by pressing "F" twice on it) to do a ceiling vator like a door or stomper.
Any vator can be locked by placing a SECT_LOCK_DOOR
(hitag 29) in the same sector. Two SECT_VATOR sprites can be placed in a sector to operate
the ceiling and floor separately.
EXAMPLES: DB in EXAMPLE.MAP
SEE ALSO: SECT_ROTATOR (hitag 143), SECT_SLIDOR (hitag 145), SECT_SPIKE (hitag 106)
- Hitag 97: CEILING_Z_ADJUST
- TAG2 = Amount
- Allows the player and actors to 'sink' into the ceiling of a sector by the amount in
TAG2. The player view will probably be strange unless the ceiling texture is a parallax
sky.
EXAMPLES: $VOLCANO.MAP
SEE ALSO: PLAX_GLOB_Z_ADJUST (hitag 90),
FLOOR_Z_ADJUST (hitag 98), SECT_SINK (hitag 0)
- Hitag 98: FLOOR_Z_ADJUST
- TAG2 = Amount
- Allows the player and actors to sink into the floor of a sector by the amount in TAG2.
EXAMPLES: AB and CE in EXAMPLE.MAP
SEE ALSO: PLAX_GLOB_Z_ADJUST (hitag 90),
CEILING_Z_ADJUST (hitag 97), SECT_SINK (hitag 0)
- Hitag 99: FLOOR_SLOPE_DONT_DRAW
- Use this ST1 in any sector with a sloped floor and the slope angle will be set to 0 when
the scene is drawn. The sector will still act like a slope for all movement purposes.
EXAMPLES: CE in EXAMPLE.MAP
- Hitag 100: SO_SCALE_INFO
- TAG2 = Speed
- TAG3 = Start position
- 0 = start at min
- 1 = start at max
- TAG4 = Initial type
- 0 = None
- 1 = Hold
- 2 = Destination
- 3 = Random
- 4 = Cycle
- 5 = Random point Needs SO_SCALE_POINT_INFO (hitag 101)
- TAG5 = Min dist - distance from default size to scale inward
- TAG6 = Max dist - distance from default size to scale outward
- TAG7 = Activate type - same types as TAG4, but this what happens after the sector object
is activated with a SO_MATCH_EVENT (hitag 70)
- TAG8 = Random frequency (0-64) - The lower the number the slower the random direction
change.
- This allows you to scale simple sector objects. "Hold" type maintains the
default scale. "Destination" moves either to the minimum or maximum scaling
size. "Random" is just that - the sector object scales larger and smaller
randomly. "Cycle" continuously scales from min to max and back again.
"Random point" is just like a SO_AMOEBA (hitag 75), except that SO_SCALE_INFO
gives you greater control over its behavior.
EXAMPLES: EE in EXAMPLE.MAP, the amoeba in $SHRINE.MAP
SEE ALSO: SO_AMOEBA (hitag 75), SO_SCALE_POINT_INFO
(hitag 101)
- Hitag 101: SO_SCALE_POINT_INFO
- TAG2 = Speed
- TAG4 = Random freqency - 0 to 1024 - the lower the number the slower the direction
change
- TAG5 = Min dist - dist from default size to scale inward
- TAG6 = Max dist - dist from default size to scale outward
- SO_SCALE_POINT_INFO is used with a SO_SCALE_INFO (hitag 100) ST1 to provide information
about how the vertices should behave. TAG5 and TAG6 are used to designate how far in and
out the individual vertices should move at the speed in TAG2. Be careful; when wall points
cross each other, strange and unpredictable sector behavior can occur.
EXAMPLES: The amoeba in $SHRINE.MAP
SEE ALSO: SO_AMOEBA (hitag 75), SO_SCALE_INFO (hitag
100)
- Hitag 102: SO_SCALE_XY_MULTIPLY
- TAG5 = x multiply value; 256 is equal to 1
- TAG6 = y multiply value; 256 is equal to 1
- Use in conjunction with SO_SCALE_INFO (hitag 100) and SO_SCALE_POINT_INFO (hitag 101).
Try experimenting with this to see what kind of effects you can achieve.
- Hitag 103: SECT_WALL_MOVE
- TAG2 = Match - triggering one of these will trigger all SECT_WALL_MOVE ST1's with the
same matching tags. This will also trigger SPAWN_SPOT ST1's.
- TAG3 = Match with a SECT_WALL_MOVE_CANSEE (hitag 104)
- TAG4 = Angle - point in the direction you want the wall point to move
- TAG5 = Pic 1 - Next wall texture
- TAG6 = Pic 2 - Previous wall texture
- TAG7 = Shade 1 - Next wall shade
- TAG8 = Shade 2 - Previous wall shade
- TAG9 = Number of times the point can be shot
- TAG10 = Random angle difference - 1 to 128 - the larger the number the greater the angle
deviance.
- TAG13 = Distance to move point each time it's shot
- BOOL1 =
- 0: Can work independently
- 1: Only activated as part of a TAG3 group
- This creates a dentable wall. Every time the wall vertex is shot with an explosive
weapon, it will move the distance in TAG13, up to TAG9 times. Place the ST1 sprite on TOP
of the vertex to move. One vertex will move. Every vertex is associated with two walls:
the next wall and the previous wall. If TAG5 or TAG6 are non-zero, then that wall will
take on the specified texture when the vertex is shot. If TAG7 or TAG8 are non-zero, then
that wall will take on the new shade value specified. This will work for sector object
walls with one limitation: you cannot tag the outside wall loop tagged with a 504 to be
moveable. NOTE: Changing the value of TAG13 will cause the ST1 sprite to move strangely in
3D editing mode. Don't worry. If 2D mode says it's on the vertex, then it's on the vertex.
EXAMPLES: DA in EXAMPLE.MAP
SEE ALSO: SECT_WALL_MOVE_CANSEE (hitag 104), SPAWN_SPOT
(hitag 69), SECT_EXPLODING_CEIL_FLOOR (hitag 57)
- Hitag 104: SECT_WALL_MOVE_CANSEE
- TAG2 = Match with TAG3 of SECT_MOVE_WALL (hitag 103)
- Placing sprites on wall points renders them somewhat unreliable for certain engine
routines. If there is a problem activating a SECT_MOVE_WALL, set up one of these off of
the wall point for the engine to use for detection purposes. I have never needed to use
this.
EXAMPLES: DA in EXAMPLE.MAP
- Hitag 106: SECT_SPIKE
- TAG2 = Match
- TAG3 = Type
- 0 = Manual/Switch/Trigger - primarily used for manual type. If a manual type has a match
tag that is not 0 then ALL spikes with the same match type will be operated on. A spike
can be manually operated from either within the sector, or to the side. With switch
operation, the switch resets when the spike goes to default position. With trigger
operation, it's the same as a switch but it's a floor trigger.
- 1 = Switch/Trigger Only - cannot be operated manually ALL spike types with the same
matching tag get operated on by the switch or trigger.
- 2 = Automatic - Starts active
- 3 = Automatic - Starts inactive, must be activated with a switch or trigger.
- TAG4 = Speed
- TAG5 = Acceleration at which TAG4 speed is approached
- TAG6 = Match at destination - when a spike reaches its destination it will trigger any
event with this match tag
- TAG7 = Sector object number to operate on. Set to -1 if the SECT_SPIKE is not in a
sector object.
- TAG9 = Auto return time - 1/8th of a second resolution - if non 0 then the spike will
return to its default position after the alloted time. If 0 then it will stay in the ON
position until the spike is operated again.
- BOOL1 =
- 0: Start in the off position
- 1: Start in the on position
- BOOL2 =
- 0: Toggle
- 1: Operate once only
- BOOL3 =
- 0: Crush player
- 1: Don't crush player
- BOOL4 =
- 0: Operate in WangBang games
- 1: Not allowed to operate in WangBang games
- BOOL5 =
- 0: Don't call TAG6 match when moving to OFF position
- 1: Call TAG6 match when moving to the ON or OFF position
- BOOL6 =
- 0: Wait until motion is complete before it can be operated again
- 1: Can be operated again while sector is in motion
- BOOL7 =
- 0: Actors are allowed to operate this spike
- 1: Actors can't operate this spike
- BOOL11 = 1: Displays "Single play only" message when operated in WangBang. Use
with BOOL4.
- A "spike" is the term for a dynamic slope in Shadow Warrior. Useful for
tilting ramps and slides, or special ceiling effects like a drill. A spike behaves pretty
much like a vator, except instead of the floor height moving to the ST1, the floor instead
slopes to the height of the ST1. Remember that slopes always hinge on the "first
wall" of a sector (set with Alt-F). To do a spike from the ceiling, flip the ST1
sprite upside down (press "F" twice on the sprite in 3D mode). "Off"
position is the position of the sector, "on" position is the height of the ST1
sprite. WARNING: Don't forget to put that -1 in TAG7! Shadow Warrior will usually crash if
you forget to do this.
EXAMPLES: DC in EXAMPLE.MAP
SEE ALSO: SECT_ROTATOR (hitag 143), SECT_SLIDOR (hitag 145), SECT_VATOR (hitag 92), SLIDE_SECTOR
(hitag 135)
- Hitag 108: LIGHTING
- TAG2 = Match
- TAG3 = Type
- 0 = Constant
- 1 = Flicker
- 2 = Fade
- 3 = Flicker ON
- 4 = Fade to ON/OFF
- TAG4 = Timing - the smaller the number, the faster a light flickers or fades
- TAG5 = Brighten amount - This is not an actual shade amount, instead, this is the value
the ST1 will subtract from the sector's shade value (QUOTE-S in 3D mode) when it is turned
on.
- TAG6 = Darken amount - This is not an actual shade amount, instead, this is the value
the ST1 will add to the sector's shade value when it is turned off.
- TAG7 = Shade increment/decrement for fading lights - default is 1
- BOOL1 =
- 0: Light is off
- 1: Light is on
- BOOL2 = 1: Don't affect floor
- BOOL3 = 1: Don't affect ceiling
- BOOL4 = 1: Don't shade walls
- BOOL5 = 1: Shade outer walls - red sectors have inner and outer walls - by default
LIGHTING will not shade the outer walls
- BOOL6 = 1: Don't affect the palette of the sector
- BOOL8 = 1: Invert intensity. This means that the sector will be brightened by TAG6
amount when the light is on, and darkened by TAG5 amount when the light is off. This is
useful for making lights that flicker when they are broken.
- BOOL10= Direction to start a fade
- The sector will have the same palette as the LIGHTING sprite, even if the light is
turned off. All LIGHTING ST1's with the same match tags will operate together. WARNING:
Every LIGHTING sprite tends to have its own independent rate of fade or flicker. This
means that if you a have a room comprised of multiple sectors and you put a flickering
LIGHTING ST1 in every sector, they will all flicker at different rates and look really bad
even if their TAG2's match. If you want a room of uniform flickering or fading, you need
to place a single LIGHTING sprite in one sector and use LIGHTING_DIFFUSE (hitag 109) in
all the sectors you want to share that lighting effect.
EXAMPLES: DD in EXAMPLE.MAP
SEE ALSO: LIGHTING_DIFFUSE (hitag 109)
- Hitag 109: LIGHTING_DIFFUSE
- TAG2 = Match
- TAG3 = Shade multiplier - the higher this number, the more quickly the light grows dark
with distance from the light source
- TAG4 = Distance - 1 to 20 for diffuse lighting - The larger the number the more distant,
and therefore darker the shade from the source.
- BOOL2 = 1: Don't affect floor
- BOOL3 = 1: Don't affect ceiling
- BOOL4 = 1: Don't affect walls
- BOOL5 = 1: Shade outer walls - red sectors have inner and outer walls - by default
LIGHTING_DIFFUSE will not shade outer walls
- BOOL6 = 1: Dont change palette
- Used with LIGHTING (hitag 108) to shade other sectors on a grade. Also used to copy a
lighting effect (flickering, fading, palette) uniformly over multiple sectors. Though its
difference from Duke Nukem's lighting may at first seem confusing, this method is actually
more convenient. Once all the LIGHTING_DIFFUSE sprites are in place, you can change the
lighting effect for an entire group of sectors just by changing the values of one sprite:
the LIGHTING (hitag 108) ST1.
EXAMPLES: DD in EXAMPLE.MAP
SEE ALSO: LIGHTING (hitag 108)
- Hitag 110: VIEW_LEVEL1
- TAG2 = View tag match
- TAG4 =
- Point up to turn it OFF
- Point down to turn it ON
- A matching VIEW_LEVEL sprite must be in both the upper and lower sectors of any
room-over-room areas where the player can look through the ceiling or floor into the other
area. Use VIEW_LEVEL1 in the lower areas. See ADVANCED.TXT for guidelines to building
room-over-room areas.
EXAMPLES: AC, AD, and FC in EXAMPLE.MAP
SEE ALSO: VIEW_LEVEL2 (hitag 111), VIEW_THRU_CEILING (hitag 120), VIEW_THRU_FLOOR (hitag
121), BOUND_FLOOR_BASE_OFFSET (hitag 202), BOUND_FLOOR_OFFSET (hitag 203)
- Hitag 111: VIEW_LEVEL2
- TAG2 = View tag match
- TAG4 =
- Point up to turn it OFF
- Point down to turn it ON
- A matching VIEW_LEVEL sprite must be in both the upper and lower sectors of any
room-over-room areas where the player can look through the ceiling or floor into the other
area. Use VIEW_LEVEL2 in the upper areas. See ADVANCED.TXT for guidelines to building
room-over-room areas.
EXAMPLES: AB, AE, and FE in EXAMPLE.MAP
SEE ALSO: VIEW_LEVEL1 (hitag 110), VIEW_THRU_CEILING (hitag 120), VIEW_THRU_FLOOR (hitag
121), BOUND_FLOOR_BASE_OFFSET (hitag 202), BOUND_FLOOR_OFFSET (hitag 203)
- Hitag 120: VIEW_THRU_CEILING
- TAG2 = View tag match
- Use this in a sector with a floor mirror texture on the ceiling in the lower half of a
room-over-room area. The ST1 sprite must be in the same relative location in the sector as
the VIEW_THRU_FLOOR (hitag 121) sprite in the upper sector. TAG2 will be the same as all
the VIEW_LEVEL sprites and the VIEW_THRU_FLOOR sprite. See ADVANCED.TXT for guidelines to
building room-over-room areas.
EXAMPLES: AC, AD, and FC in EXAMPLE.MAP
SEE ALSO: VIEW_LEVEL1 (hitag 110), VIEW_LEVEL2 (hitag 111), VIEW_THRU_FLOOR (hitag 121), BOUND_FLOOR_BASE_OFFSET (hitag 202), BOUND_FLOOR_OFFSET (hitag 203)
- Hitag 121: VIEW_THRU_FLOOR
- TAG2 = View tag match
- Use this in a sector with a floor mirror texture on the floor in the upper half of a
room-over-room area. The ST1 sprite must be in the same relative location in the sector as
the VIEW_THRU_CEILING (hitag 120) sprite in the lower sector. TAG2 will be the same as all
the VIEW_LEVEL sprites and the VIEW_THRU_CEILING sprite. See ADVANCED.TXT for guidelines
to building room-over-room areas.
EXAMPLES: AB, AE, and FE in EXAMPLE.MAP
SEE ALSO: VIEW_LEVEL1 (hitag 110), VIEW_THRU_CEILING (hitag 120), VIEW_LEVEL2 (hitag 121),
BOUND_FLOOR_BASE_OFFSET (hitag 202), BOUND_FLOOR_OFFSET (hitag 203)
- Hitag 132: BREAKABLE
- TAG2 = Match - used to match up with BREAKABLE_SPRITE (hitag 132 on a non-ST1 sprite) or
TAG_BREAK_WALL (walltag 307)
- TAG5 = Picnum to change to after BROKEN Not needed if TAG8 = "1"
- TAG7 = Number of damage hits to take before a sprite or wall texture is BROKEN. Note
that if this is set to 2 or greater the picnum will increment toward TAG5 until TAG5 is
reached. The graphics in the art file must be imported in the correct order to support
this. Nothing in Shadow Warrior uses this, but the functionality is there for anybody who
feels like importing their own art.
- TAG8 = BROKEN type:
- 0 = Change the picnum only
- 1 = Kill sprite/wallpic when BROKEN For walls this will turn off masking, blocking, and
1-way.
- 2 = Turn off blocking bits when BROKEN For walls this will just turn off blocking bits,
but leave the masking or 1-way alone. Breaking an air vent grate is an example of this.
- Sprites and wall breaking info. There are 2 ways to use this: 1) As ST1 sprite info for
breaking a sprite, or 2) As ST1 sprite info for breaking a wall. NOTE: Can be re-used for
many BREAKABLE_SPRITEs. Example: All chairs that break could use a single ST1 132 to tell
them how to break as long as the same matching TAG2 is used. When hitting a wall tagged
with TAG_WALL_BREAK (307) the code will look for a BREAKABLE_SPRITE ST1 with a matching
tag and use this info if found.
EXAMPLES: DE in EXAMPLE.MAP
- Hitag 132: BREAKABLE_SPRITE
- (This is used with non-ST1 sprites to make them breakable)
- TAG2 = Match - used to match up with BREAKABLE ST1's
- TAG6 = Match - extra match value for activating ST1's like SPAWN_SPOT and LIGHTING. By
this method you can spawn debris or turn off a light when this sprite is broken.
- BOOL1 = 1: Denotes that this is not an ST1 but is tagged like one. IMPORTANT: THIS MUST
BE SET TO "1".
- BOOL2 = 1: Don't break this sprite. Use this to override automatic breakables.
- Use this tagging on the actual sprite you want to break. TAG2 should match the TAG2 of
the BREAKABLE (hitag 132) ST1 that tells this sprite how to break. NOTE: You don't
actually need the ST1 132 if you just want to kill the sprite when its broken. Giving it a
hitag of 132 and setting BOOL1 is sufficient.
EXAMPLES: DE in EXAMPLE.MAP
- Hitag 133: QUAKE_SPOT
- TAG2 = Match
- TAG3 = Shake Z amount - This is the amount the view moves in the Z direction.
- TAG4 = Radius of quake - distance in which quake is felt - this value is multiplied by 8
internally for the distance. The code is set up so that the quake amount decreases from
the epicenter, but this effect can be overridden by setting BOOL1 to "1"
- TAG5 = Duration of quake in seconds
- TAG6 = Timed quake - shake the screen every X seconds, where X = TAG6 multiplied by 10.
- TAG7 = Shake angle amount - amount the view's angle moves
- TAG8 = Shake x,y position amount - multiplied by 8 internally
BOOL1 = 1: Quake does not decrease from epicenter, and will
basically shake the entire level.
- BOOL2 = 1: Only quake once and never again
- BOOL3 = 1: Wait for trigger before starting timed quake code. This is only used for
timed quakes.
- This is used to shake the player's view as though an earthquake were happening.
EXAMPLES: DE in EXAMPLE.MAP
- Hitag 134: SOUND_SPOT
- TAG2 = Match
- TAG4 = 1st Sound #
- TAG5 = 2nd Sound #
- TAG6 = 3rd Sound #
- BOOL1 = 1: Play the sound once and only once
- BOOL2 = 1: Play the sound as a looping sound. The sound will continue to loop until
stopped by STOP_SOUND_SPOT (hitag 150).
1: Also means follow sprite, and needs to be set if the ST1 sprite will be moving (usually
with a sector object.)
- BOOL3 = 1: Random play. When the ST1 is triggered, it will randomly choose between
sounds 1 and 2 or between sounds 1, 2, and 3.
- BOOL4 = 1: Don't pan sound. This is useful when the sound is very near the player.
- BOOL5 = 1: Use doppler effect.
- BOOL6 = 0: Make sure this is always reset to "0".
- BOOL7 = 1: The sound is Lo Wang's voice, heard inside his head at max volume no matter
how far from the SOUND_SPOT he is.
- SOUND_SPOT will play the sound specified in TAG4 when the match tag in TAG2 is
triggered. SOUND_SPOT can also be triggered by operating a vator, spike, sliding door, or
rotating door with the same match tag. Sound numbers can be obtained from the digital
sound index in SWSOUNDS.TXT. Don't confuse these with ambient sounds, which are used with
the AMBIENT_SOUND (hitag 1002) ST1. If SOUND_SPOT is placed in a sector object operational
sector, the 1st sound (TAG4) will be the 'idle' sound. The 2nd sound (TAG5) will be the
'drive' sound. IMPORTANT: The match tag (TAG2) will still need to be a unique value even
though the mapper never sets up a trigger for it. If you do not use a unique value then
other SOUND_SPOTs with the match value will do the same sound processing. This could be
used as a feature - drive something and something else on the level makes a noise. Note
that you can specify 3 different sounds. Some things like vators can have more than one
sound attached for different operations such as moving to the ON and OFF positions. Most
of the time only the 1st sound (TAG4) will be used.
EXAMPLES: DB, DC, DD, and others in EXAMPLE.MAP
SEE ALSO: AMBIENT_SOUND (hitag 1002), STOP_SOUND_SPOT (hitag 150)
- Hitag 135: SLIDE_SECTOR
- TAG2 = Speed value. (0 is fastest, 32 is slowest) Note that the angle of the slope also
has an effect on speed.
- Tag a sloped sector with this and it will cause the player to slide in the direction of
the slope. Actors are not affected. The steeper the slope, and the lower the TAG2 value,
the faster the slide. Lo Wang will slide even if he is in the air over the sector. Use
with SECT_SPIKE (hitag 106) to create a variable
speed slide.
EXAMPLES: DF in EXAMPLE.MAP
- Hitag 136: CEILING_FLOOR_PIC_OVERRIDE
- TAG2 = Picnum (from the "V" menu)
- TAG3 =
- 0: Pic override on the ceiling
- 1: Pic override on the floor
- TAG7 = Draw type
- 0 = normal
- 1 = masked
- 2 = translucent
- 3 = very translucent
- BOOL1 = 1: Block hitscans
- This is primarily used to give a floor or ceiling texture to the floor mirror in
room-over-room areas. This is used in Shadow Warrior to create the translucent water, the
reflective floors, and the masked grating in $VOLCANO.MAP. A sloped floor cannot have a
masked or translucent texture. Use with FLOOR_Z_ADJUST (hitag 98) to keep the player from
falling through into the lower area. Actors can stand on it too, but will usually fall
through when they are killed.
EXAMPLES: AB and AD in EXAMPLE.MAP
SEE ALSO: FLOOR_Z_ADJUST (hitag 98)
- Hitag 140: TRIGGER_SECTOR
- TAG2 = Match
- TAG3 = Type
- 0 = Trip Entering Sector
- 1 = Trip Leaving Sector
- 2 = Continuous as long as you're standing on it
- 3 = Operated with the SPACEBAR
- TAG4 = Angle
- TAG5 = Trigger definition
- 0 = Remote sector object trigger
- 1 = Lava Erupt trigger
- TAG7 = Remote sector object number
- BOOL1 =
- 0: Player's view follows the sector object
- 1: Player's view stays at the angle of TRIGGER_SECTOR
- TRIGGER_SECTOR is only used for two things: driving remote controlled operational sector
objects, and triggering LAVA_ERUPT ST1's. BOOL1 on the LAVA_ERUPT (hitag 56) sprite must
be set to BOOL1 for this trigger to work.
EXAMPLES: BF and EF in EXAMPLE.MAP
SEE ALSO: SECT_OPERATIONAL (hitag 1), LAVA_ERUPT (hitag 56)
- Hitag 141: DELETE_SPRITE
- TAG2 = Match
- BOOL2 = Move with a sector object
- Place a DELETE_SPRITE ST1 at the same x, y location as another sprite. When the TAG2
match is triggered, the sprites at the same x, y will be deleted. Works on most sprites
but not all. Some that can be deleted include decoration sprites, vator ST1's, spike
ST1's, and room-over-room view sprites.
EXAMPLES: DF in EXAMPLE.MAP
SEE ALSO: BREAKABLE (hitag 132)
- Hitag 143: SECT_ROTATOR
- TAG2 = Match
- TAG3 = Type
- 0 = Manual/Switch/Trigger. If a manual type has a TAG2 value that is not 0 then ALL
rotators, vators, spikes, or whatever with the same TAG2 will be operated on. Rotators can
be manually operated from on top of sector or alongside of it. A switch resets when the
rotator returns to its default position. Trigger operation is the same as a switch but its
a floor trigger instead.
- 1 = Switch/Trigger Only. The rotator cannot be operated manually. All rotator types with
the same TAG2 value get operated on.
- TAG5 = Angle move amount (512 = 90 degrees). Use a negative value to make the sector
rotate counter-clockwise.
- TAG6 = Match at destination. When a rotator reaches its destination it will trigger any
event with this match tag.
- TAG7 = Angle increment. The speed at which the sector rotates. Use an unsigned value.
- TAG9 = Auto return time in 1/8th of a second resolution. If non-zero then the sector
will return to its default position after the allotted time. If TAG9=0 then the sector
will remain in the ON position until the SECT_ROTATOR is operated again.
- BOOL2 = 1: Can be operated only once.
- BOOL4 =
- 0: Can be operated during a WangBang game.
- 1: Cannot be operated during a WangBang game.
- BOOL5 = 1: Trigger the TAG6 match when moving to the OFF position as well as when moving
to the ON position.
- BOOL6 =
- 0: SECT_ROTATOR cannot be operated again until it's finished moving.
- 1: Can operate it again while it's moving.
- BOOL11 = 1: Displays "Single play only" message when operated in WangBang. Use
with BOOL4.
- SECT_ROTATOR is used primarily to create rotating (swinging) doors, although it has many
other potential uses. Any number of red sector walls of any shape can be rotated
simultaneously around a single pivot point, defined by SECT_ROTATOR_PIVOT (hitag 144).
EXAMPLES: EA in EXAMPLE.MAP
SEE ALSO: SECT_ROTATOR_PIVOT (hitag 144), SECT_VATOR
(hitag 92), SECT_SPIKE (hitag 106), SECT_SLIDOR
(hitag 145).
- Hitag 144: SECT_ROTATOR_PIVOT
- TAG2 = Match
- The CLOSEST SECT_ROTATOR (hitag 143) with same matching TAG2 will rotate about this
sprite.
EXAMPLES: EA in EXAMPLE.MAP
SEE ALSO: SECT_ROTATOR (hitag 143)
- Hitag 145: SECT_SLIDOR
- TAG2 = Match
- TAG3 = Type
- 0 = Manual/Switch/Trigger - primarily used for manual type. If a manual type has a match
tag that is not 0 then ALL slidors with the same match type will be operated on. A slidor
can be manually operated from either within the sector, or to the side. With switch
operation, the switch resets when the slidor goes to default position. With trigger
operation, it's the same as a switch but it's a floor trigger.
- 1 = Switch/Trigger Only - cannot be operated manually ALL slidors with the same matching
tag get operated on by the switch or trigger.
- TAG5 = Distance to move (largest grid square is 1024).
- TAG6 = Match at destination. When a slidor reaches its destination it will trigger any
event with this match tag.
- TAG7 = Move speed
- TAG8 = Acceleration at which slidor approaches TAG7 speed.
- TAG9 = Auto return time - 1/8th of a second resolution - if non 0 then the slidor will
return to its default position after the allotted time. If 0 then it will stay in the ON
position until the slidor is operated again.
- BOOL2 = 1: Can only operate the slidor once.
- BOOL3 = 1: Don't crush the player. WARNING: Never let a white walled slidor crush the
player, or the game will quit with an error.
- BOOL4 =
- 0: Slidor can be operated during a WangBang game.
- 1: Slidor cannot be operated during a WangBang game.
- BOOL5 = 1: Insta-Close(TM) feature. Tired of not being able to run through sliding doors
in BUILD 3D mode? Leave them open and let Shadow Warrior close them for you. BOOL5 uses
the position of the SECT_SLIDOR sprite to close the doors.
- BOOL6 =
- 0: Slidor cannot be operated again until it stops moving.
- 1: Can operate the slidor again while it's in motion.
- BOOL7 = 1: Call the TAG6 match when moving to the OFF position as well as when moving to
the ON position.
- BOOL11 = 1: Displays "Single play only" message when operated in WangBang. Use
with BOOL4.
- Use SECT_SLIDOR to create sliding or split doors. Several different types can be built,
both with red walls and with white walls. Look to the game maps for various examples.
IMPORTANT: The walls that form the edges of the door must be tagged properly in order for
the slidor to work. If, in 2D mode, the door slides to the left, tag the wall
TAG_WALL_SLIDOR_LEFT (walltag 220), if it slides to the right, tag the wall
TAG_WALL_SLIDOR_RIGHT (walltag 221), if it slides upwards, tag it TAG_WALL_SLIDOR_TOP
(walltag 222), and if it slides downwards, tag it TAG_WALL_SLIDOR_BOTTOM (walltag 223).
EXAMPLES: EA in EXAMPLE.MAP
SEE ALSO: SECT_ROTATOR (hitag 143), SECT_VATOR (hitag 92), SECT_SPIKE
(hitag 106)
- Hitag 146: SECT_CHANGOR
- TAG2 = Match
- TAG4 = New picnum
- TAG5 = Z adjustment in pixels - can be negative
- TAG6 = Slope adjustment - can be negative
- TAG7 = New shade value - can be negative
- TAG8 = New palette value
- TAG9 = New visibility value - can be negative
- BOOL1 =
- 0: Affect the floor
- 1: Affect the ceiling
- BOOL2 = 1: Do not kill this sprite after using once. By default it is killed after one
use.
- Change attibutes of sector when match code is called. Can be used to create breakable
floor or ceiling textures, or other special effects. Most commonly used for shootable
lights.
EXAMPLES: EB in EXAMPLE.MAP
SEE ALSO: SECT_COPY_DEST>/a> (hitag 58), SECT_COPY_SOURCE (hitag 59)
- Hitag 147: SO_DRIVABLE_ATTRIB
- TAG2 = Angle speed (1 to 16384) 0 provides a default speed
- TAG3 = Angle "slide" amount (1 to 100)
- TAG5 = Match triggered when the driveable is operated with the SPACEBAR.
- TAG6 = Movement speed (1 to 16384) 0 provides a default speed
- TAG7 = Movement "slide" amount (1 to 100)
- BOOL1 = 1: Don't shake the screen when running into something
- BOOL2 = 1: Trigger match tag TAG5 + 1 when the player presses SPACEBAR to stop driving
the sector object
- BOOL3 = 1: Sector object can only be driven from a remote TRIGGER_SECTOR (hitag 140)
- BOOL4 = 1: Rectangular clipping - the outer 504 bounding wall loop of the sector object
serves as the clipping box. The wall loop MUST be a 4 wall rectangle. This is the only
alternative to the default clipping provided by the operational code. This clipping is
better behaved because it never allows the sector object to cross sector lines.
- This ST1 provides some additional control over the behavior of driveable sector objects.
It allows speed and angle velocities to be scaled, and adds momentum with TAG3 and TAG7 to
make the driving a little more realistic. Must be placed in the center tagged sector of
the sector object. EXAMPLES: EF in EXAMPLES.MAP SEE ALSO: SECT_OPERATIONAL
(hitag 1), SECT_SO_DONT_ROTATE (hitag 45), SO_LIMIT_TURN (hitag 68), SO_TURN_SPEED (hitag 55)
- Hitag 148: WALL_DONT_STICK
- TAG4 = Point sprite at wall
- Point this at a wall, and nothing will stick to that wall. This keeps bullet holes,
blood, sticky bombs, and so forth from landing on the wall.
EXAMPLES: BB in EXAMPLE.MAP
- Hitag 149: SPAWN_ITEMS
- TAG2 = Match
- TAG3 = Item to spawn:
- 0 or 32 = Uzi
- 1 = Red Key
- 2 = Blue Key
- 3 = Green Key
- 4 = Yellow Key
- 5 = Red Card
- 6 = Blue Card
- 7 = Green Card
- 8 = Yellow Card
- 9 = Gold Skeleton Key
- 10 = Silver Skeleton Key
- 11 = Bronze Skeleton Key
- 12 = Red Skeleton Key
- 20 = Uzi for Floor
- 40 = Repair Kit
- 41 = Shurikens
- 42 = Sticky Mines
- 43 = Rocket Launcher
- 44 = Rocket Battery
- 45 = Grenade Launcher
- 46 = Grenades
- 47 = Rail Gun
- 48 = Rail Ammo
- 51 = Shotgun
- 52 = Shotgun Ammo
- 53 = Head
- 55 = Heart
- 57 = Gray Armor (can't spawn red armor)
- 58 = Portable Medkit
- 59 = Small Medkit
- 60 = Chem Bomb
- 61 = Flash Bomb
- 62 = Nuke
- 63 = Caltrops
- 64 = Cookie
- 65 = Heat seeker card
- 66 = Cloak
- 67 = Night Vision
- 90 = Boy Bunny
- 91 = Girl Bunny
- 92 = Random Bunny
- TAG4 = Angle to throw the item
- TAG7 = Velocity 0 to 255 Set to 0 and the item stays in place
- TAG8 = Jump velocity 0 to 255
- BOOL1 =
- 0: Kill the ST1 after it's triggered
- 1: Don't kill after it's triggered
- BOOL2 = 1: Don't spawn another item if a sprite exists in the exact position of the
SPAWN_ITEMS sprite.
- This is used to spawn an item when the TAG2 match is triggered. Used for placing items
in trash cans, dropping items from the sky, and any number of cool uses. Flag the ST1 as a
Multiplayer only item (F8 menu, option 2), and the item will only spawn during a WangBang
game.
EXAMPLES: EB in EXAMPLE.MAP
SEE ALSO: SPAWN_SPOT (hitag 69)
- Hitag 150: STOP_SOUND_SPOT
- TAG2 = Match
- TAG5 = Matched sound spot to stop
- Use this to stop a looping sound when TAG2 is triggered. TAG5 is the TAG2 match tag of
the SOUND_SPOT (hitag 134) to be stopped.
EXAMPLES: EB in EXAMPLE.MAP
SEE ALSO: SOUND_SPOT (hitag 134)
- Hitag 202: BOUND_FLOOR_BASE_OFFSET
- TAG2 = Bound Floor # - First one is 0, then 1, 2, etc.
- All areas with this tag in them set up a new BASE OFFSET to move other areas to. TAG2 is
the order in which they are processed. Consider this to be the "anchor" to which
BOUND_FLOOR_OFFSET (hitag 203) areas are moved. EXAMPLES: AB, AC, FB, and FC in
EXAMPLE.MAP SEE ALSO: BOUND_FLOOR_OFFSET (hitag 203), VIEW_LEVEL1
(hitag 110), VIEW_LEVEL2 (hitag 111)
- Hitag 203: BOUND_FLOOR_OFFSET
- TAG2 = Bound Floor # = First one is 0, then 1, 2, etc.
- All bound areas with this tag in them are moved to the last BOUND_FLOOR_BASE_OFFSET
sprite. "Bound" areas means all sectors that are either directly or indirectly
attached to the sector with BOUND_FLOOR_OFFSET in it. This allows you to build stacked
sectors separately and let Shadow Warrior overlap them for you. Useful mainly for
room-over-room and special dive sector cases. If a sector object is part of a bound floor
group, it can have a matching 504 wall loop in the bound floor base group, which will move
and behave exactly like the sector object. This is incredibly useful for a variety of
effects, like the bottom of a boat in the underwater sector stays with the boat in the
upper sector, and so on.
EXAMPLES: AD, AE, FE, and FF in EXAMPLE.MAP
SEE ALSO: BOUND_FLOOR_BASE_OFFSET (hitag 202), VIEW_LEVEL1
(hitag 110), VIEW_LEVEL2 (hitag 111)
- Hitag 500-596: SECT_SO_BOUNDING
- Bounding sprites for sector objects. Every sector object needs bounding sprites, one in
the upper left corner (BOUND_SO_UPPER) and one in the lower right corner (BOUND_SO_LOWER).
These two sprites form the opposing points of an imaginary rectangle that must encompass
the entire sector object, plus any sprites you want to move with it (like a gun barrel.)
You are allowed to have a maximum of 20 sector objects in a level. The BOUND_SO_UPPER
sprite hitag of a sector object is calculated as 500 + (5 * sector object #). The
BOUND_SO_LOWER sprite hitag of a sector object is calculated as 501 + (5 * sector object
#). So, sector object 0 uses BOUND_SO_UPPER 500 and BOUND_SO_LOWER 501. Sector object 1
uses BOUND_SO_UPPER 505 and BOUND_SO_LOWER 506. This goes up in increments of 5 all the
way to sector object 19, which uses BOUND_SO_UPPER 595 and BOUND_SO_LOWER 596.
EXAMPLES: EC, ED, EE, EF, FA, FB, and FC in EXAMPLE.MAP
- Hitag 1000: MIRROR_CAM
- TAG2 = Match tag
- TAG4 = Angle of camera
- TAG6 = Camera maximum turn angle from 0-2048. This is the angle from center that the
camera will rotate back and forth. (512 = 90 degrees each way for 180 degrees range of
motion)
- TAG7 = Camera look up/down amount. Valid values (5-195).
- BOOL1 =
- 0: Draw monitor to look like a magic view into another place, looks more like reality.
- 1: Draw monitor using draw to tile. This makes it look like a TV screen.
- BOOL2 =
- 0: Don't rotate the camera.
- 1: Rotate the camera by angle specified in TAG6 from current camera angle.
- BOOL3 =
- 0: Negative turn direction
- 1: Positive turn direction
- BOOL11 = When BOOL1 is set to "1":
- 0: Do normal TV camera view
- 1: Cycle through all players' views in 5 second increments on this monitor.
- The camera's view can be displayed in a monitor built using a mirror. Tag the mirror
wall with lotag 306 and a hitag equal to the MIRROR_CAM TAG2 match tag. NOTE: Mirrors MUST
be built using one way walls, not masked walls or they won't operate. A TV monitor
requires a TV monitor sprite (picnums 3830-3837) with a hitag equal to the MIRROR_CAM TAG2
match tag. The TV monitor sprite must be placed in front of a mirror.
EXAMPLES: GB and GC in EXAMPLE.MAP
- Hitag 1002: AMBIENT_SOUND
- TAG2 = Ambient sound number
- Plays an ambient sound. Look at the ambient sound index in SWSOUNDS.TXT to find the
ambient sound number you want.
EXAMPLES: EC and ED in EXAMPLE.MAP
SEE ALSO: SOUND_SPOT (hitag 134)
- Hitag 1005: ECHO_SPOT
- TAG2 = Reverb setting from 100 - 200
- TAG4 = Radius that the reverb effect can be heard
- Causes all sounds in the area around the ECHO_SPOT to reverb by the amount set in TAG2.
Note that there is no reverb available when using a Soundscape.
EXAMPLES: $YAMATO.MAP, plus many other game maps
- Hitag 1006: DRIP_GENERATOR
- TAG2 = Delay in seconds. If 0, then it uses internally programmed delays (quite fast),
otherwise it drips every TAG2 seconds.
- BOOL1 = Drip type
- 0: Blood drips
- 1: Water drips
- BOOL2 =
- 0: Drips
- 1: No drips, do a bubble instead
- Used to create a dripping or bubbling spot. The Z height of the ST1 is important,
because that's the height where the drip or bubble will spawn.
EXAMPLES: AA in EXAMPLE.MAP
2. The Shadow Warrior Track Sprite
Tracks are a powerful feature of Shadow Warrior. Similar to the "Locators" in
Duke Nukem 3D, tracks are a series of sprites which determine the path certain game
objects can follow. Sector objects, sprite objects, and some actors can follow tracks.
2.1 Meet the Track sprites:
You can find the track sprites in the tileset starting at tile 1900 and proceeding all
the way up to tile 1999. They are blue numbers counting up from 0 to 99. A single track
uses one of these tiles, (i.e. track #0 only uses tile 1900), so this means you can have
up to 100 different tracks in a single level. In 2D mode, the sprite will have a sign that
reads "T0", "T1", or whatever depending on which track # it is.
2.2 Building a track:
Build a track by placing track sprites all along the route you want an object to take.
All of the track sprites in a single track use the same tile (i.e. the sprites for track
#0 will all use tile 1900). When an object follows a track, it will move in a straight
line from one track sprite to the next, then change direction and move in a straight line
to the next track sprite. It will do this around the entire track until it reaches the
end, then it will head in a straight line back to the start and begin the process all over
again. All tracks must loop like this, and a track can never cross its own path.
2.3 Tagging a track sprite:
Track sprites only make use of their hitag and lotag. Not all track sprites need a
lotag, if you want the object to travel to that point, but don't want to alter its
behavior.
- 2.3.1 Lotag
- The track sprite's lotag is its "tracktag." It identifies what kind of
behavior should occur at that point when an object reaches it while following the track.
Different tracktag values allow for changing speeds, bobbing, firing, waiting, and much
more.
- 2.3.2 Hitag
- The hitag is used to give additional information for those tracktags that need it. For
instance, TRACK_SET_SPEED (tracktag 702) uses its hightag as the actual speed value.
2.4 Using a track:
Some tracktags only work for sector object, while others only work for actors. Most
tracktags work for both sector objects and actors.
- 2.4.1 Sector and sprite objects
- To make a sector object (or a sector object tagged as a sprite object) follow a track,
just set the sector hitag of the center sector to the number of the track. So if you've
got a track #5 in your level, you can make a sector object follow that track by setting
the center sector hitag to 5.
- 2.4.2 Actors
- Some actors will follow a track, with varying degrees of success. To make an actor
follow a track, give the actor sprite a lotag of 30000 + the track number. So to make a
green guardian follow track #10, you would give him a lotag of 30010. Angle the actor to
the right to make him move in the forward direction (from start to end) or angle the actor
to the left to make him move in the backward direction (from end to start.)
2.5 Tracktag function reference:
Examples of most of these can be found throughout Shadow Warrior. A few simple
tracktags are also demonstrated in EXAMPLE.MAP.
- Lotag 700: TRACK_START
- Every track needs a TRACK_START and a TRACK_END (tracktag 701). This is the first sprite
on a track, and it marks the beginning.
- Lotag 701: TRACK_END
- Every track needs a TRACK_START (tracktag 700) and a TRACK_END. This is the last sprite
on a track. When an object encounters this, it loops back to the TRACK_START.
- Lotag 702: TRACK_SET_SPEED
- Hitag = Target speed (0 to 128)
- Set the target speed at this point. Setting the hitag to 0 is a good way to make sure
the object stops moving once it reaches this point. (See the boat in $WHIRL.MAP)
- Lotag 703: TRACK_STOP
- Hitag = Seconds to stop
- Object will pause at this point on the track for the number of seconds in the hitag.
- Lotag 704: TRACK_REVERSE
- Reverses the object's direction. It will now travel along the track in the opposite
direction. Causes some tags to have an opposite effect (e.g. tracktags 705 and 706)
- Lotag 705: TRACK_SPEED_UP
- Hitag = Speed offset (0 to 128)
- Target speed will increase by the amount in the hitag.
- Lotag 706: TRACK_SLOW_DOWN
- Hitag = Speed offset (0 to 128)
- Target speed will decrease by the amount in the hitag.
- Lotag 707: TRACK_VEL_RATE
- Hitag = Acceleration(1 to 12, default 6)
- The rate at which the actual speed approaches the target speed.
- Lotag 709: TRACK_ZUP
- Hitag = Pixel amount
- Moves the floor of the object up by the number of pixels in the hitag.
- Lotag 710: TRACK_ZDOWN
- Hitag = Pixel amount
- Moves the floor of the object down by the number of pixels in the hitag.
- Lotag 711: TRACK_ZRATE
- Hitag = Rate
- Sets the rate at which TRACK_ZUP/TRACK_ZDOWN moves. Defaults to 256.
- Lotag 712: TRACK_ZDIFF_MODE
- Hitag = Z offset
- Special mode where the object looks at the Z-height of the next track point and moves up
or down to achieve the destination. In the hitag is a negative delta Z from the placement
of the track sprites Z value.
- Lotag 715: TRACK_SPIN
- Hitag = Spin speed
- Object spins clockwise as it goes along its track.
- Lotag 716: TRACK_SPIN_STOP
- Hitag = Angle (0 to 2048)
- Object stops spinning. It will then point in the direction indicated by the hitag.
- Lotag 717: TRACK_BOB_START
- Hitag = Pixel height to bob
- Causes a sector object to start bobbing up and down like a cork.
- Lotag 718: TRACK_BOB_SPEED
- Hitag = Speed at which to bob
- Sets the speed at which a sector object will bob.
- Lotag 719: TRACK_BOB_STOP
- The sector object will stop bobbing.
- Lotag 720: TRACK_SPIN_REVERSE
- Hitag = Spin speed
- Object spins counter-clockwise as it goes along its track.
- Lotag 723: TRACK_SO_SINK
- Hitag = Speed of sinking
- Start sector object sinking to ST1 SECT_SO_SINK_DEST
(hitag 33). Will sink at the speed in the hitag. Look at the boat in $WHIRL.MAP for an
example.
- Lotag 724: TRACK_SO_FORM_WHIRLPOOL
- Will cause a sector object to lower the sectors tagged with SECT_SO_FORM_WHIRLPOOL (hitag 37) ST1. Look at the boat
in $WHIRL.MAP for an example.
- Lotag 725: TRACK_MOVE_VERTICAL
- Hitag = Speed of movement - default is 256
- Move sprite objects (not sector objects) straight up or down in the Z direction to the
next point's Z height then continue along the track.
- Lotag 726: TRACK_WAIT_FOR_EVENT
- Hitag = Match
- Object will wait at this point on the track for a trigger or switch to be activated.
Most types of triggers and switches with the same match tag can be used to free the sector
object to continue. Look at the moving crane in $SEABASE.MAP for an example.
- Lotag 728: TRACK_MATCH_EVERYTHING
- Hitag = Match
- When the object or actor reaches this point, it will trigger everything with this match
tag.
- Lotag 729: TRACK_MATCH_EVERYTHING_ONCE
- Hitag = Match
- When the object or actor reaches this point, it will trigger everything with this match
tag once, and never again.
- Lotag 751: TRACK_ACTOR_STOP
- Hitag = Seconds
- Causes an actor to stop for the number of seconds in the hitag.
- Lotag 752: TRACK_ACTOR_REVERSE
- Reverses the actor's direction. It will now travel along the track in the opposite
direction. Note that tracktags 753 and 754 will have the opposite effect when traveling
the reverse direction
- Lotag 753: TRACK_ACTOR_SPEED_UP
- Hitag = Speed offset (0 to 128)
- The actor's target speed will increase by the amount in the hitag.
- Lotag 754: TRACK_ACTOR_SLOW_DOWN
- Hitag = Speed offset (0 to 128)
- The actor's target speed will decrease by the amount in the hitag.
- Lotag 755: TRACK_ACTOR_VEL_RATE
- Hitag = Acceleration (1 to 12, default 6)
- The rate at which the actor's actual speed approaches the target speed.
- Lotag 771: TRACK_ACTOR_JUMP
- Hitag = Height to jump (default 384)
- Actor will jump. Only works with actors who can jump, like evil ninjas, rippers, and
bunnies.
- Lotag 772: TRACK_ACTOR_CRAWL
- Causes an actor to crawl. Only works with evil ninjas.
- Lotag 780: TRACK_ACTOR_CLOSE_ATTACK1
- An actor will do his close range attack, like the sword attack in the case of the green
guardian.
- Lotag 782: TRACK_ACTOR_ATTACK1
- An actor will do his long range attack, like shooting fireballs in the case of the green
guardian.
- Lotag 791: TRACK_ACTOR_OPERATE
- Point the track sprite angle in the direction of the operable sector, wall, or switch.
Actor will operate the switch, door, or whatever, just like a player pressing SPACEBAR.
May only work in certain cases.
- Lotag 792: TRACK_ACTOR_CLIMB_LADDER
- The track sprite angle must be facing the ladder. Only evil ninjas can climb ladders.
- Lotag 799: TRACK_ACTOR_WAIT_FOR_PLAYER
- Hitag = Range (Largest grid square = 1024)
- The actor will wait for the player to come into range before moving from this point.
Look at the rabbit on the mountain in $SHRINE.MAP for an example of this.
3. Other Important Sprites
3.1 Actors:
- 3.1.1 Hornets (picnum 800)
- Use a sprite with picnum 800 to place a hornet in your map.
- 3.1.2 Bouncing Betty (picnum 817)
- This sprite also comes in voxel (3D sprite) format. This actor is functionally the same
as an "Accursed Head." A betty can be tagged to produce different effects. Set
the HITAG to these values for the following effects:
- Hitag 0: Explosion (The betty just explodes)
- Hitag 1: ChemBombs
- Lotag = # of chembombs to spawn (max 3, default 2)
- Hitag 2: Caltrops
- Lotag = # of caltrops to spawn (max 10, default 5)
- Hitag 3: Flash effect (blinds the player like a FlashBomb)
- Hitag 4: Grenades
- Lotag = # of grenades to spawn (max 10, default 5)
- 3.1.3 Accursed Head (picnum 820)
- These are functionally the same as a bouncing betty and can be tagged similarly. (see
above)
- 3.1.4 Sumo Boss (picnum 1210)
- If you set the sprite's palette to 16, he will be a "mini-boss," which is
smaller and less powerful.
- 3.1.5 Serpent Boss (picnum 1300)
- If you set the sprite's palette to 16, he will be a "mini-boss," which is
smaller and less powerful.
- 3.1.6 Coolie (picnum 1400)
- Use a sprite with picnum 1400 to place a coolie in your map.
- 3.1.7 Coolie Ghost (picnum 1441)
- Use a sprite with picnum 1441 to place a coolie ghost in your map.
- 3.1.8 Green Guardian (picnum 1469)
- Use a sprite with picnum 1469 to place a guardian in your map.
- 3.1.9 Little Ripper (picnum 1580)
- If you set the sprite's palette to 7, he will become a big boss ripper.
- 3.1.10 Fish (picnum 3780)
- Use a sprite with picnum 3780 to place a fish in your map.
- 3.1.11 Evil Ninja (picnum 4096)
- You can set the palette on an Evil Ninja to make him fire different kinds of weaponry.
- Palette 0: Default. His pants appear blue in BUILD, but will be brown in the game. This
ninja throws shurikens.
- Palette 17: Gray ninja. He's tough and fires grenades.
- Palette 19: Red ninja. He's tough and fires rockets.
- Palette 21: Shadow ninja. He's really tough and can fire two kinds of napalm, plus uses
flash bombs.
- Palette 24: Orange ninja. Like a red ninja but fires heat seeking rockets.
- 3.1.12 Crouching Evil Ninja (picnum 4162)
- This type of ninja stays crouched except to fire at the player. This is great for
ducking behind crates and whatnot. His palette can be set just like the regular evil
ninja, and he will take on the toughness of that color, but he won't fire the heavy
weaponry.
- 3.1.13 Big Ripper (picnum 4320)
- If you set the sprite's palette to 7, he will become a big boss ripper.
- 3.1.14 Bunny (picnum 4550)
- Bunnies come in three flavors. Set their palette to define which kind the actor is. You
can also scale a bunny down to make it younger. It will grow into an adult before mating.
- Palette 0: Female bunny. Appears blue in BUILD but will be light brown in the game.
- Palette 17: White bunny. Monty Python style killer rabbit.
- Palette 24: Male bunny. Orange-brown colored.
- 3.1.15 Female Warrior (picnum 5162)
- Use a sprite with picnum 5162 to place a female warrior in your map.
- 3.1.16 Zilla Boss (picnum 5426)
- Use a sprite with picnum 5426 to place a Zilla boss in your map. There is no mini-boss
version of Zilla.
- 3.1.17 Leaders and Followers
- Give an actor a hitag of 1008 and it will be part of a group mentality. If the actor has
a lotag of 1, it will be a follower, while if it has a lotag of 2, it will be a leader.
Followers will hover around the nearest leader unless the player is within range. This
works especially well with rippers and fish.
- 3.1.18 Spawning Actors with a Trigger
- Give any actor TAG_SPAWN_ACTOR (lotag 203), and it
will not appear in the map immediately when you start out. The hitag of the actor is a
match tag. When that match tag is triggered, with a floor trigger or a switch or whatever,
the actor will be magically teleported in.
3.2 Cracks (TAG_SPRITE_HIT_MATCH):
Any sprite in the game can be given a lotag of 257 and it will then become a
TAG_SPRITE_HIT_MATCH. This means that when the sprite is shot by the player, it will
trigger any event matched to the hitag of the TAG_SPRITE_HIT_MATCH sprite. By default, the
sprite will be invisible, unless it uses picnum 80, in which case it will be visible.
Picnum 188 is another crack sprite, designed to be usable on ceilings or floors, but it
will still be invisible by default. Here's the info:
- Lotag 257: TAG_SPRITE_HIT_MATCH
- Hitag = Match. Can trigger anything.
- TAG3 = Default is 32. The larger this number, the more sensitive the sprite is to
explosion radius.
- TAG7 = Reacts to ammo type:
- 0: Default. React only to explosions with radius damage.
- 1: React only to a direct hit by a weapon with explosive radius. (e.g. Hit it directly
with a rocket)
- 2: React to any explosive weapon or any hitscan weapon (uzis or shotgun).
- 3: React to any weapon hit, including shurikens, sword, and fist.
- 4: React only to sector object weapon fire. This means any type of sector object weapon,
including machine gun.
TAG8 = Just add the numbers of the effects you want together and put the total in TAG8:
- +1: Force the sprite to be invisible
- +2: Force the sprite to be visible
- +4: Do not kill this sprite when it is hit. Can be triggered over and over again
- +8: Bouncing a grenade off of the sprite counts as a hit
- EXAMPLES: Rooms CA and EB in EXAMPLE.MAP.
3.3 Switches: (picnums 551 - 584)
Any sprite can be tagged as a switch, but it will only animate if it's using one of the
picnums (551-584). There are several different switch tags, used to activate different
types of events. A switch sprite's lotag identifies what kind of switch it is, while its
hitag is a match tag to the event you wish to trigger. In most cases a switch will not
make a sound. You must place a SOUND_SPOT (hitag 134) ST1 nearby with a TAG2 that matches
the switch's hitag. I recommend sound #201 for most switches. Here is a list of the
different switch lotags you can use:
- Lotag 206: TAG_SPRITE_SWITCH_VATOR
- Hitag = Match
- This switch is used to activate vators, spikes, rotators, and slidors - basically any
kind of door. This is the best switch to use with a door because multiple switches with
the same match will animate, and the switch pays attention to auto-closing doors, doors
that have a player holding them open, etc. etc. When placing the switch in the BUILD
editor, be sure to use the frame that matches the door's starting position. For instance,
if BOOL1 is set to "1" on a vator, be sure to use the second frame of a switch,
because that door considers itself to be "on." Otherwise, the switch might not
animate the first time you operate it.
- Lotag 210: TAG_LIGHT_SWITCH
- Hitag = Match
- This switch can only be used to activate LIGHTING
(hitag 108) ST1's, but there's no real good reason to do this, since a
TAG_SWITCH_EVERYTHING (lotag 211) will work just as well. It's only included here because
you'll find it in several Shadow Warrior maps.
- Lotag 211: TAG_SWITCH_EVERYTHING
- Hitag = Match
- This switch is the one you will use most often, because it can trigger any event in the
game.
- Lotag 212: TAG_SWITCH_EVERYTHING_ONCE
- Hitag = Match
- This is the same as TAG_SWITCH_EVERYTHING (lotag 211) in that it can be used to trigger
any event, but this switch can only be activated once, and never again.
- Lotag 213: TAG_COMBO_SWITCH_EVERYTHING
- Hitag = Match
- TAG3 = Trigger type
- 0: The switch must be off to trigger the event
- 1: The switch must be on to trigger the event
- Every COMBO switch in the level with the same hitag must be in the state specified by
their TAG3 before the event will be triggered. This switch can trigger any event. COMBO
switches make sound automatically, without a SOUND_SPOT
(hitag 134) ST1.
- Lotag 214: TAG_COMBO_SWITCH_EVERYTHING_ONCE
- Hitag = Match
- TAG3 = Trigger type
- 0: The switch must be off to trigger the event
- 1: The switch must be on to trigger the event
- Every COMBO switch in the level with the same hitag must be in the state specified by
their TAG3 before the event will be triggered. This switch can trigger any event. COMBO
switches make sound automatically, without a SOUND_SPOT
(hitag 134) ST1. Once the combo is properly triggered, it can never be triggered again.
- Lotag 216: TAG_SPAWN_ACTOR_SWITCH
- Hitag = Match
- This switch can only be used to spawn actors with a lotag of 203. The actors and the
switch must have the same hitag.
- Lotag 304: TAG_ROTATE_SO_SWITCH
- Hitag = # of the sector object to rotate
- Operating this switch causes a sector object to rotate smoothly clockwise 90 degrees. We
never found a place to use this in Shadow Warrior, but it's a pretty cool feature
nevertheless. This switch has an automatic sound associated with it, and is demonstrated
in EXAMPLE.MAP, room FD.
- 3.3.1 Shootable switch (picnum 577)
- Switch tile 577 is unique, because it can be shot by the player to activate and
deactivate. Don't match this switch to a locked door, though, because the door can be
activated by shooting the switch, despite its locked status.
- 3.3.2 Exit switch (picnum 2470)
- An exit switch causes the level to end when the player operates it, and the bonus or
frag screen is displayed. Any switch can be tagged as an exit switch, but tile 2470 is the
graphic that Shadow Warrior usually uses. An exit switch must have a lotag of 116. The
hitag specifies which level to go to next, but this only works if the map has the same
filename as one of the official Shadow Warrior game maps. For a standard external map, a
hitag of 0 will suffice.
3.4 Keys and Keyholes:
- 3.4.1 Keys (picnums 1765 - 1779)
- These are the keys used to unlock doors (ignore the little dog sprites.) You can mix and
match key types in a level, but be aware that some keys will overwrite the others in the
status bar when the player picks it up. A gold master key will overwrite a red keycard, a
silver master key will overwrite a blue keycard, a bronze master key will overwrite a
green keycard, and a red master key will overwrite a yellow keycard.
- 3.4.2 Keyholes (picnums 1846, 1850, and 1852)
- These are the sprites the player operates to unlock a door with a key. Always set the
lotag to 29. Set the hitag equal to the lotag of the SECT_LOCK_DOOR (hitag 29) ST1. The
BUILD editor will automatically set the palette of the keyhole when you re-enter 3D mode
from 2D mode. Use the correct style of keyhole to match the desired key.
3.5 TV Monitors: (picnums 3830 - 3837)
These sprites are used in conjunction with mirrors and MIRROR_CAM (hitag 1000) ST1. Rotate the monitor sprite
flat and place it in front of the mirror, facing out away from the wall. Give it a hitag
equal to TAG2 of the MIRROR_CAM. This is only necessary for TV monitors, not for magic
monitors.
See EXAMPLE.MAP for a demonstration of how to build this.
3.6 QuickJump and QuickJumpDown
- 3.6.1 QuickJump (picnum 2309)
- This is a special sector effector. When an actor steps on the QJ sprite, he will jump in
the direction the sprite is pointing. This is a good way to get actors to jump up onto
ledges, and it looks pretty cool. Only jumping actors (ninjas, bunnies, and rippers) are
affected by this.
- 3.6.2 QuickJumpDown (picnum 2310)
- This is another special sector effector, similar to QuickJump. When an actor steps on
the QJD sprite, he will jump down off a ledge in the direction the sprite is pointing.
Make ninjas leap down on the player from high ledges. Only jumping actors (ninjas,
bunnies, and rippers) are affected by this.
3.7 Gratings
Gratings can be tagged so the player can operate them by pressing the SPACEBAR on them.
Point the grating sprite in the direction you want it to move. The lotag must be 200. The
hitag is the distance the sprite will move, 1024 is a good distance. This feature may have
other applications.
3.8 DeathFlag(tm) Capture tho Flag
Shadow Warrior has a pretty cool Capture the Flag facility that we didn't really take
advantage of in the game.
- 3.8.1 The Flag Sprite (picnum 2520)
- Hitag = 0: Default. Flag explodes if carried for longer than 30 seconds, or if carrier
dies. The flag respawns every 30 seconds.
1003: Flag carrier must die or score before the flag will respawn back at the base.
- Lotag = Match. When the carrier scores with this flag, this match tag will be triggered.
Reward a score with free items, trigger a sound, whatever.
- TAG5 = If non-zero, the match in TAG6 will be triggered when this flag is scored this
many times. Make a special reward happen every ten points, or open a secret passage to the
exit when the score reaches 25.
- TAG6 = Secondary match. Used with TAG5.
- BOOL1 = Score type
- 0: The score is incremented when the carrier enters the score sector.
- 1: Do not score when entering the score sector. This feature can be used for a flag that
you just want to trigger things with, but not score. For example: a map might have a red
base and a blue base, and a neutral yellow flag. Teams race to get the yellow flag which
when returned to their base, causes the path to the opposing team's flag to open up.
- PAL:
- 16: Brown (you must set the flag's palette)
- 17: Gray
- 18: Purple
- 19: Red
- 20: Yellow
- 21: Olive
- 22: Green
- 23: Blue
- A level can have multiple flags of any type or color, allowing for a variety of
possibilities, including up to eight teams. NOTE: A flag will automatically tag the sector
it's in with a sector hitag 9000, and a sector lotag equal to the flag's palette. You can
create a scoring sector anywhere in the map in addition to the flag's sector just by using
these tags.