DUKE PLUS MAP EFFECTS
last updated Novemer 3, 2010 (for version 2.14)

Before attempting to make DP map effects, you should be familiar with using Mapster (the map editor that comes with EDuke32). Enough said about that.
Most of the map effects in DP are achieved by placing sprites and setting various tags on them. In principle it is no different from the BUILD effects you are already familiar with. The main difference is that DP uses more than just hitag, lotag, shade and pal, it also requires setting sprite tags that aren't normally changed (EXTRA, XVEL, YVEL, ZVEL).
Set the EXTRA on a sprite by pressing 'M on the selected sprite (works in both 2D or 3D modes). Setting XVEL, YVEL and ZVEL is a little more complicated. First, you must be in 2D mode. Highlight the sprite so it is flashing, then press F8 on it. This allows you to edit all of the sprite's properties manually, and you will see that the XVEL, YVEL and ZVEL are in the right column of editable properties. Setting these to different values does nothing at all in regular Duke 3D, but in DP they are used to control various effects.
I have divided the DP map effects into three categories: New Sector Effector Features, Duke Plus Sprites, and Special Tags. The New Sector Effector Features are SE effects exclusive to DP. The number following SE refers to the lotag of the SE needed for the effect. The DP Sprites are specific tiles that have special effects when certain tags are set on them. Most of these tiles are in the original art files. Special Tags are used to create effects on just about any sprite in the game (not just on specific tile numbers).
NEW SECTOR EFFECTOR FEATURES
POINT LIGHT = SE 49

This is a hardcoded SE that works without DukePlus. It only works with the Polymer renderer. Hitag is the distance the light will travel. XVEL/YVEL/ZVEL are the RGB values (0-255). In DP, point lights have additional features:

Oscillating light

This is similar to a CYCLER. Set HITAG to the brightness you want at the peak of the cycle. Extra will determine the length of the cycle, and must be > 0. Higher Extra = a faster cycle (64 is a good default value). Finally, the shade of the SE is a timing offset (1 tic per shade). You can have different cyclers oscillating at the same rate, but at different times. You can use this, for example, to make a an emergency light that switches between red and blue (you would put two SEs on the same spot, give them different colors, and give one a shade so that its light starts as the other's fades).

Flickering lights

Pal 1 is a broken light. When it blinks on, it will be at the full hitag brightness. How frequently it blinks on depends on the shade. The higher the shade, the more frequently it blinks. You may want to use this effect in conjunction with a light model that has a glow map, but in that case you don't want glow map to show unless the light is on. In your def file, define the model twice, on two different tile numbers, one with the glow map and one without. Place the non-glowing tile in the same sector as the SE 49, and give it an extra of 4911. Then set the model's hitag to the tile number of the glowing version. It will glow only when the light is on. Note: There is a small amount of lag between the light changing and the model changing which can't be prevented.
Pal 2 is a partially flickering light. Set Extra to the base brightness of the light. This value should be lower than hitag. The light brightness will randomly vary between the base brightness and the full brightness (hitag). You can leave extra at 0 for a completely random brightness, or set it closer to the hitag value for more of a flickering flame effect. Note that surfaces close to the light will tend to look fully lit even if the light is flickering, and I can't prevent that.

Making dynamic lights switch on or off

Place an SE150 in the same sector with the SE49 or SE50 that you want to be switchable. It only takes one SE150 per sector, and it work on all the lights in that sector, no matter how many there are. The HITAG of the SE150 will be the activation number for the light or lights. If you want the light(s) to start off instead of on, then give the SE150 an EXTRA of 1.
How to activate the lights: To make it work with a switch sprite, you tag the switch sprite with the activation number on both the LOTAG and the YVEL of the switch. If you set the YVEL on the switch, you do not need to place an ACTIVATOR. You can make the switch activate the light without setting YVEL, but in that case you must make the switch also do something else that works with an activator (like open a door). Lights can also be activated by dying monsters, DPTOUCHPLATE, and other DP effects that cause activations. Finally, they should work with other non-DP effects that use activators (but I have not tested them).

If you have an SE49 or SE50 that is set up to be switched ON/OFF (that is you have the corresponding SE150 in the sector), then you can also place a sprite tagged with Extra 4911 in that sector and it will be the linked model (e.g. a lamp or some other model representing the light source). As with the flickering effect, the Hitag on the Extra 4911 model will be the alternate glowmap picnum that gets switched to when the light is activated. For this effect, you can have the light start either off or on. It will be off by default, but if you want it to start as on, give the 4911 model a lotag of 1. Obviously, for this to work you must have a light source model and the same model with the glowmap defined in the defs on different tile numbers (picnums). There are some limitations. You can only have one 4911 tagged model per sector You could have more than one light linked to the model (simply by placing more than one SE49 or SE50 in that sector along with the SE150, but keep in mind that each SE that switches is going to flip the model. So if you have two lights that get switched off, each will flip the model and it will be like the model didn't flip. In other words, it should work if there is an odd number of lights in the sector.

BROADCASTER = SE 88

SHOWS A SCENE FROM A DIFFERENT PART OF THE MAP. THE SCENE IS “BROADCAST” IN THE BACKGROUND, AND IS VISIBLE WHEREVER THERE ARE BLANK TEXTURES (WALLS, FLOORS OR CEILINGS WITH BLANK TEXTURES) NEAR THE SE. PLACE TWO SE88 AND GIVE THEM THE SAME HITAG. ONE WILL BROADCAST THE POV OF THE OTHER.

OPTIONS: GIVE THE SE A YVEL, AND THAT WILL BE ITS ACTIVATION NUMBER, IN WHICH CASE IT WILL NOT BROADCAST UNTIL AN ACTIVATOR OR GAME EFFECT (SUCH AS MONSTER ACTIVATION) TURNS IT ON. MAKE SURE TO HIDE THE BLANK TEXTURES UNTIL THE ACTIVATION USING A SLIDING DOOR OR SOME OTHER TRICK.

THE SE WILL BROADCAST FROM ITS OWN ANGLE. BY DEFAULT, IT WILL USE THE PLAYER’S CURRENT Z ANGLE (LOOK UP/DOWN ANGLE). TO SET A FIXED Z ANGLE, SET EXTRA ON THE SE. 100 = STRAIGHT AHEAD. HIGHER VALUES LOOK UP, LOWER VALUES LOOK DOWN (IN POLYMOST, MAX 299, MIN -199).

TELEPORTER = SE 89

SIMILAR TO THE NORMAL TELEPORTER SE7, BUT WITH MORE OPTIONS. LIKE SE7, IT TAKES THE PLAYER TO ANOTHER SE OF THE SAME HITAG WHEN HE ENTERS ITS SECTOR (BUT THERE CAN ONLY BE ONE DESTINATION).

OPTIONS: GIVE THE SE A YVEL, AND THAT WILL BE ITS ACTIVATION NUMBER, IN WHICH CASE IT WILL NOT TELEPORT UNTIL AN ACTIVATOR OR GAME EFFECT (SUCH AS MONSTER ACTIVATION) TURNS IT ON. NOTE THAT TWO SE89 WITH THE SAME HITAG COULD HAVE DIFFERENT ACTIVATION NUMBERS. THIS COULD BE USED TO MAKE A ONE WAY TELEPORTER. LEAVE YVEL AT 0 AND IT WILL START UNLOCKED.

SET XVEL TO THE SOUND NUMBER TO PLAY UPON TELEPORTATION (LEAVE 0 FOR NO SOUND).

CERTAIN PALS ON THE SE WILL CAUSE A COLORED FLASH WHEN THE PLAYER TELEPORTS: PAL 1=BLUE, PAL2=RED, PAL3=WHITE, PAL4=BLACK, PAL7=YELLOW, PAL8=GREEN. PALS NOT LISTED DO NOTHING.

Cutscene camera = LOTAG 90

This SE can be used to change the player’s view to the view from the SE. It can be triggered by an event in the game, or it can occur when the level starts. Cutscene cameras can be either stationary or moving, and they can be chained together to show a sequence of views. The view can be displayed on the entire screen, or it can be displayed in a box in the corner. By default, the player is paralyzed while this effect is ongoing. Tags on the SE control different aspects of the effect:

Hitag: Set to 0 to switch to the SE view at level start. Otherwise, hitag is the activation number. The SE can be activated by an activator having a lotag equal to the SE’s hitag, or by a switch, monster, or other DP sprite which has a YVEL equal to the SE’s hitag. The player will view from the SE immediately upon activation.

Pal: 0 = stationary camera, 1 = moving camera. A moving camera will not work unless there is another SE 90 which has a hitag equal to the YVEL of the moving camera.

Shade: The up/down view angle. 0 looks straight ahead, negative numbers look up and positive numbers look down. The exact formula is camerahoriz = shade*2 +100

XVEL: In a stationary camera, this is the number of game tics that the camera’s view will last. In a moving camera, XVEL is the speed at which the camera travels. If not set, XVEL will default to 130 (five seconds of view time for a stationary camera, and about ½ of Duke’s running speed for a moving camera).

YVEL: This is the number that the camera activates upon completion. In a stationary camera, completion occurs when its time runs out. In a moving camera, completion occurs when it has traveled all the way to the next camera in the sequence. The camera will activate any respawns, activators, masterswitches, or DP sprites which have activation numbers equal to the camera’s YVEL. This includes other cutscene cameras. If the camera is stationary, it does not have to be set to activate anything. If it is a moving camera, it must be set to activate another SE 90 (see Pal, above).

ANG: The angle of the SE sprite will be the angle that the camera faces. If it is a moving camera, then it will start at this angle and gradually turn to face the angle that the next camera is facing.

EXTRA: This is a bitfield which determines some additional camera functions. Add together the numbers you want, or leave EXTRA at its default value (-1) if you don’t want any of the options.

1 does a quick fade to black right before the camera’s view time ends (does not work with moving cameras)

2 shows the view in a box in the lower right corner of the screen (the rest of the player’s view is normal)

4 if this bit is set, the player will be moved to the camera’s position.

8 allow the player to move (best used in combination with 2)

16 transition effect: when camera activates, its view starts in the center and quickly expands to fill the screen (do not use with 2)

LOTAG 102 Transparent water sector

THE BASIC EFFECT: Place a SE with lotag 102 at the height that you want the water surface to be. Any sprite that goes below that height in the sector will be underwater. If the sector is going to be entirely underwater, you should set the EXTRA of the SECTOREFFECTOR to 1 (this will ensure that anything in that sector is considered underwater, regardless of the height of the effector sprite). To complete the effect, place some flat WATERTILE2, 889, or the new 6866 sprites at the water level and make them transparent and non-blocking (see sample maps for examples). An underwater player will be able to see out of the water from below, and vice versa.

WATER COLOR AND FOG: To change the appearance of the water, change the pal of the lotag 102 SE.

Pal 0 = normal water, no fog,

Pal 27 = red liquid,

Pal 28 = green liquid

Pal 29 = blue liquid

Pal 30 = normal water with fog

Pal 31 = dark water with fog

Pal 32 = very dark water with fog.

In addition, the shade of the SE alters the visibility of the underwater area (higher shade = less visibility, shade 127 is the maximum).

WATER WITH A CURRENT: To make water with a current, set the XVEL of the SE to the desired speed (96 is about the speed that the player can swim). The water will move in the direction that the SE is facing.

BOBBING WATER: To make water that is able to rise and fall, you must place a red H sprite (tile 2947) in the sector and give the H sprite a lotag of 1. The H should be placed at the same height as the SE. The hitag of the H will determine how far up and down the water moves (it will move 8 z units for every 1 hitag, so a hitag of 1000 will make if move about one player body length), and the ZVEL of the H deterimines how fast the water moves (numbers < 1000 are best).

WATER THAT RISES OR FALLS ON SWITCH ACTIVATION: To make water that rises/falls in response to a switch, set the YVEL of the SE (or however many SEs you want controlled) to some number that is not being used as a lotag for any other effects. Then place a switch and set the YVEL and lotag of the switch to that number. The height that the water will end up at after the switch is thrown will be the height of the H sprite that you placed (which could be either higher or lower than the water SE). If the switch is activated again, the water will move back to its original position. To prevent this, set the hitag on the SE to 1, and the water will only move once.

New animated water texture: Tile 6866 is an animated water texture which looks good in Polymer and was included for use with the transparent water effect. It automatically replaces the standard Duke 3D water texture when used as a sprite if Polymer is on.

LOTAG 104 FLOOR AND CEILING TEXTURE PANNING

Set the SE to lotag 104. XVEL of the SE determines the x panning speed (can be positive or negative). YVEL determines y panning speed. Leave ZVEL at 0 if you want only the floor to pan. Set ZVEL to 1 if you want only the ceiling to pan. Set ZVEL to 2 if you want both the floor and ceiling to pan. Note that different sectors may automatically pan in different directions -- this seems to be determined by the direction that the firstwall of the sector is facing.

LOTAG 105 SLEEPING EFFECT

This effect will make the screen fade to black and freeze the player in place when he enters the sector. The screen will then fade back in with the player in a new location. To make the effect, place two lotag 105 SEs in different sectors, and give them each the same hitag. When the player reaches one of these, he will "sleep" and then wake up at the other one, facing the angle of the destination SE.

Additional options:

Fade colors (set on both SEs)

Pal 1 – fade to blue

Pal 2 – fade to red

Pal 3 or 13 – fade to white

Pal 4 – fade to black (default, same as pal 0)

Pal 8 – fade to green

Set EXTRA on the SE as a bitfield (add the desired values together)

1 – set on destination SE to take away all of the player's weapons and inventory.

2 – set on origin SE to lock the player’s view to straight forward position when effect begins

4 – set on destination SE to lock the player’s view to straight forward position as player is waking up

8 – set on origin SE to make the effect work only if the player presses the use key with an angle opposite of the SE angle

Set XVEL on the SE if you want a longer delay before the player falls asleep (XVEL 26 = 1 second).

Set YVEL on the SE to the sound you want it to play when the effect begins (0 means no sound; sorry, you can’t play KICK_HIT)

If you set ZVEL on the SE, then it will be destination only (the player will be able to move through the sector without sleeping, but he can be taken there by another SE).

LOTAG 107 TRANSITION EFFECT

This effect is just like the sleeping effect (see above), but it can be used more than once. If the player reenters the destination sector, he will be taken back to the origin sector, and vice versa. The transition effect has the same pal EXTRA options as the sleeping effect (see above). The XVEL option is different and controls the speed of the transition:

XVEL -1 slow (about 10 seconds total)

XVEL 0 default (about 5 seconds total)

XVEL 1 faster (about 3.3 seconds total)

XVEL 2 about 2.5 seconds total

XVEL 3 about 2 seconds

…and so on

Set YVEL on the SE to the sound you want it to play when the effect begins (0 means no sound; sorry, you can’t play KICK_HIT)

LOTAGS 116 AND 118 ELEVATORS WITH MORE THAN TWO STOPPING POINTS

INSTRUCTIONS:

(1)Place a SECTOREFFECTOR in the elevator sector. Give it a lotag of 116 if you want only the floor of the elevator sector to move, and give it a lotag of 118 if you want the ceiling to move as well.

(2)Set the hitag of the SE to the number of the sound you want it to play when the elevator is activated (#71 is the standard sound).

(3)The shade of the SE is the number of different stops the elevator will make. You probably want the shade to be 3 or higher, since otherwise there is no point in using this effect (the elevator will not function at all if shade is less than 2).

(4)The XVEL of the SE determines the distance the elevator travels between stops. The higher the number, the greater the distance: XVEL * 64 = Z units. This means if you want the elevator to move 32768 Z units between floors (or about three times the player’s height), set XVEL to 512.

(5)The ZVEL of the SE determines the elevator’s speed and initial direction. If ZVEL is negative, the elevator’s initial position in the map editor will be its highest point; if ZVEL is positive the start position is the lowest point. Magnitudes between 256 and 1024 will serve for most purposes. For example, a ZVEL of -1024 means that the elevator starts in the up position and will move pretty quickly between stopping points when activated. IF YOU DON'T WANT THE ELEVATOR TO BE ACTIVATED BY A SWITCH, THEN YOU ARE DONE.

(6)There are two ways to set up elevator operation: operation via the open key, and operation via switches. If you do nothing further, the elevator will be operated by the open key. The disadvantage to the open key method is there is no way to control whether the elevator goes up or down – it must be cycled through all of its positions. Thus, you will probably want to make the elevator operated by switches. To do this, start by assigning a nonzero YVEL to the SE.

(7)Next, place two switch sprites (any of the switch tiles should work). Assign one lotag to the switch that will move the elevator up, and a different lotag to the switch that will move it down. In addition to the normal switches, you can use the Duke Plus buttons with animated up and down arrows. The down switch is tile 8032, the up switch is 8037. These function just like the normal switches, except that you don’t have to set a lotag on them.

(8)Now assign both switches the same YVEL that you assigned to the elevator SE. The YVEL does not need to equal either of the lotag values you gave the switches.

(9)Finally, assign one and only one of the switches an XVEL of 1 – that will make it move the elevator in the opposite direction from the other switch. At this point, your elevator should be operational. Test it in game to see which switch moves it up and which moves it down (you can then reverse the switches by trading their XVEL values, if necessary). You can make another pair of switches for the same elevator. Give the new pair of switches the same lotags as the first pair, and the same YVEL, and make sure one has XVEL of 0 while the other has XVEL of 1. The switches can be placed inside of the elevator and they will move along with it. For best results, use the DP elevator buttons mentioned above.

LOTAG 666 SECTOR OF DEATH

Place an SE and give it a lotag of 666, and any actor killable actor (player, monster, etc.) that falls below the SE in that sector will be annihilated. Useful in multiplayer maps, if you want players to die in a certain area, but don't want to make them fall a great height. If you want the SE to only kill in a certain zone below it (it kills things below it, but only up to a certain distance), then set its ZVEL to the desired distance of death. The distance you set is multiplied by 8 -- e.g. set ZVEL to 1024 and anything up to 8192 build z units below the SE in that sector will be killed.

Duke Plus Sprites

The following effects are created by sprites other than SEs..

Customizable Monsters

- All the bosses now function like BOSS1 -- use a spritepal other than 0 to make them "minibosses" which will have about 1000 hit points and will not end the game. (Note that the miniboss version of BOSS4 will spawn baby aliens, not full-sized ones, and has a new attack to replace electrocution) Known issue: There are a few old maps that used a non zero pal BOSS4 to end the game; these levels will not end in DP.
- All monster bodies, including both those of slain monsters and those in the map at start, can be shot or blown up.
- Duke Plus Recon Cars. The RECONDP actor (tile 1966) can be used as an alternative to the hardcoded RECON. Like the RECON one, RECONDP will use LOCATORS to fly along a path (it can use the exact same locator trails as the RECON). Unlike the hardcoded one, it can function in maps or areas of maps that do not have LOCATORS, and you do not have set hitag on the RECONDP sprites to make them work. Instead of using the normal RECON attack, the RECONDP uses a variety of weapons as specified by the monster flags (and of course it can drop items and do all of the other special Duke Plus things). By default, it uses a machine gun and mortars. It also has the ability to ram enemies, squishing them.
- Monsters can drop anything. Set the XVEL of the monster to the tile number that you want it to spawn when it dies. You can also set XVEL on a RESPAWN sprite to make the monster it spawns drop whatever you want. In addition to setting drops on specific monsters by editing maps, you can edit USERPLUS.CON to set monsters of certain types to drop certain items by default.

Keycards are a special case:

Set XVEL to 60 and the monster will drop a pal 0 ACCESSCARD.

For a pal 21 ACCESSCARD, use an XVEL of 62

For a pal 23 ACCESSCARD, use an XVEL of 63

- Groups: If a monster is part of a group, then it will not activate its yvel tag when it dies, unless all of the other monsters of the same group are already dead. This means you can create a situation where the player has to kill an entire group of monsters in order to activate something. The monster’s ZVEL is its group number. The tag that gets activated is the one belonging to the last monster that dies (normally you would give the same yvel to every monster in the group, but this isn't strictly necessary). Group number are global. That means that there can only be one group of that number in the entire episode. If you use zvel 1 on a group of monsters in level 1, then you must not use group 1 in level 2, etc.

- Customizable monsters. To customize a monster in a map, set the EXTRA field on the monster or the RESPAWN sprite that spawns it. The value acts as a bitfield (like cstat). Just add up all the numbers of the features you want, and then set the EXTRA to that sum. You can also set monsters of certain types to have certain values by default. These can be edited in USERPLUS.CON

MONSTER FLAGS

BIT | EFFECT
1 | AWAKE AT START, NEVER SLEEPS
2* | DOUBLE STRENGTH
4* | TRIPLE STRENGTH
8** | INCREASED ATTACK POWER
16 | ATTACK VARIATION 1
32 | ATTACK VARIATION 2
64 | ATTACK VARIATION 3
128*** | TELEPORTS
256**** | IMMUNE TO MONSTERS OF SAME TYPE + SPECIAL (DEPENDS ON MONSTER)
512 | EXPLOSIVES RESISTANCE
1024 | SHRINKER, EXPANDER, LASER IMMUNE
2048 | SMART TACTICS
4096***** | BACKS AWAY FROM PLAYER
8192****** | DOES NOT WALK OFF LEDGES
16384 | PLAYER ALLY

*If bits 2 and 4 are both set, then the monster will have x6 normal hit points.

**Increasing attack power will have different effects depending on the monster. On a Sentry Drone, for example, this bit will cause its explosion to do double damage. On other monsters, it will cause the monster to fire two shots instead of one. In some monsters, the monster will fire one shot for double the normal damage. Sharks with increased attack power will become killer sharks and will behave differently from normal sharks.

***The monster will sometimes try to teleport behind its target if the target is facing it. This is more likely to happen in open spaces. If the monster cannot find a good spot to teleport to, it will not teleport.

****On NEWBEAST, this flag will cause it to use only is claws to attack. On LIZTROOP, this flag will make it a suicide bomber: it will rarely shoot, and will detonate itself when close to an enemy. On ROTATEGUN, this flags will make it shoot at double the normal rate. On PIGCOP, it will give the pig a double-barreled shotgun.

*****The monster will try to back away from the player if the player is in sight, but it will keep shooting.

******This can be used as a substitute for STAYPUT type monsters – the monster can still walk around but will not walk off ledges. DO NOT PLACE MONSTERS WITH THIS FLAG ON SPRITE BRIDGES. Also, it does not work on DRONE, OCTABRAIN or COMMANDER.

Examples: Press 'M on a PIGCOP sprite in mapster and set the EXTRA of a PIGCOP to 10 (2+8), and it will have double hit points and double attack power. A LIZTROOP with an EXTRA of 196 (4+64+128) will have x4 hit points, shoot railgun shots, and be able to teleport.

Table of monster attack variations

MONSTER | ATTACK VARIATION 1 | ATTACK VARIATION 2 | ATTACK VARIATION 3
LIZTROOP | STARPROJ | FIREBALL | RAILGUN
LIZMAN | STARPROJ | FIREBULLET | RAILGUN
PIGCOP | STARPROJ | FIREBULLET | RAILGUN/MORTAR
COMMANDER | FIREBALL | ELECTRONET |
SENTRY DRONE | FIRELASER TURRET | BULLET TURRET | ROCKET TURRET
NEWBEAST | FIREBALL | ELECTRONET | EXPANDER
TURRET | BULLETS | ROCKETS | RAILGUN
EGG | SPAWNS NEWBEAST |  |
OCTABRAIN | ELECTRONET | SHRINKER | FIREBALL
TANK | STARPROJ/FIREBULLET |  |
RECONDP* | STARPROJ/MORTARS | BULLETS/FIREBALL |
BOSS1 | STARPROJ/MORTAR | FIREBULLET/MORTAR | RAILGUN/MORTAR
BOSS2 | FIREBALL/FIRELASER |  |
BOSS3 | FIREBALL | ELECTRONET |
BOSS4** | EXPANDER |  |

*note that these variations can be used together (add flags)
**the normal attack of BOSS4 for pals other than 0 is the- ELECTRONET

New projectile descriptions:

FIREBULLET -- A fast moving projectile with a red smoke puff trail. Bounces off walls.
STARPROJ -- Resembles a shooting star, breaks up into shrapnel on impact.
ELECTRONET -- An electrical net that spawns lightning bolts on impact.
FIREBALL -- A slow moving fireball that tracks the player, can be shot out of the air with hitscan weapons.
RAILGUN -- A railgun shot.

Breakable glass pane sprites.

Place a GLASS sprite (tile #503) and give it a lotag of 1. In game, the first hit from a weapon will crack the glass, and the second will shatter it. (Though the first hit can shatter it if it does enough damage). Rockets can break through the glass and keep going. Glass sprites can be linked by hitag, if the hitag is greater than 0. For example, if you place four glass sprites and give them all a hitag of 1, damaging one will cause all of them to be damaged. This is useful if you want to create a large pane of glass without stretching the sprites.

Invisible Blocking Sprites

Place a sprite of tile #507 and give it a lotag of 1. In game, the sprite will be invisible and blocking, but allow hitscan (bullets) to pass through it. Useful for constructing barriers to prevent the player from entering certain areas without adding walls to the map.

Cracks with more activation abilities

Set the YVEL of any of the crack sprites (CRACK1, CRACK2, CRACK3, CRACK4) to a tag number that is to be activated when the crack is destroyed. It should cause all activators, masterswitches and respawns with that tag to work.

Rain and Snow in outdoor areas.

Place a WATERDRIP sprite (tile #660) somewhere in the map. Then, change the EXTRA tag of the sprite to a nonzero value between -32 and 32 (positive values for rain, negative for snow). The greater the magnitude of this value, the greater the density of the rain or snow. The rain or snow will have the palette and transparency level of the WATERDRIP sprite. You should only place one such sprite in the map (you can place other WATERDRIP sprites, but only set EXTRA on one of them).

You may want it to rain/snow in some outdoor areas but not others. To prevent rain/snow from spawning in a sector, give the sector a hitag of 101. This is also useful if the sector has a parallaxed ceiling but is not outdoors.

Flying helicopters that drop stuff.

Place the second helicopter tile (tile #1338) and set its lotag to the number of things it will spawn (this must be higher than 0 or it will not work at all). Set hitag to the number of ticks it will travel before dropping the spawned items. Set XVEL to the tile number that it will drop (only one tile number per helicopter). This could be the tile number of a monster, item, or anything else. Set EXTRA to the flag value that the spawned sprites will have (useful if it spawns Dukebots or monsters). Spawned sprites will have the same pal as the helicopter as well. Set ZVEL to the quote number that will be displayed when the drop occurs (leave this value at 0 to display no quote). Last but not least, set YVEL to the activation number of the helicopter. It can be activated by an ACTIVATOR or ACTIVATORLOCKED, or any DP sprite that uses activation and has its YVEL set to that number. For example, you could activate the helicopter with a DPTOUCHPLATE that has a YVEL set to the YVEL of the helicopter (but not a regular TOUCHPLATE). Once activated, the helicopter will appear and will move at a slow speed that is not adjustable, and it will move in a straight line until it is unable to move, at which time it will disappear. The angle it will move at is 512 build degrees clockwise of the angle of the sprite (this was necessary because the original sprite is facing sideways).

Blackhawk: For the Blackhawk helicopter, use tile 6865 instead. Everything else is the same.

DukeBots (1431)

- You can tag sectors as bot retirement zones, meaning that if the player enters those sectors all his bots willl teleport out of the map. This is necessary if you want to make sure that the player is alone by a certain point in the level. To do this, simply give the desired sector(s) a hitag of 666.
- Bots have the ability to follow paths made of "waypoints", similar to locator paths for RECON.

WAYPOINT BASICS:

A bot will follow a path only if 256 has been added to its EXTRA in Mapster (setting EXTRA on a RESPAWN or SPAWNER that spawns the bot has the same effect). A bot trail is made of of WAYPOINT sprites (tile # 1490 in the Duke Plus tiles05.art). The first WAYPOINT must be given a lotag of 1 (NOT 0!), and they must be placed in sequence with ascending lotags. The path can be made to loop -- in that case, make sure that the first WAYPOINT in the path is accessible from the final waypoint in the path (just as you would do with a RECON path). Instead of being a loop, the path can be made to end by adding 1 to the EXTRA of a WAYPOINT. Once a bot reaches a WAYPOINT that has 1 as part of the EXTRA bitfield, it will stop following waypoints and resume its normal behavior of attempting to follow the player.

ADVANCED USES OF WAYPOINTS:

If YVEL is set on a WAYPOINT sprite, then the first bot who reaches that WAYPOINT will activate any ACTIVATOR, ACTIVATORLOCKED, MASTERSWITCH, RESPAWN, SPAWNER, FUSE or SE that is triggered by that tag. This can be used to make a bot open a locked door, etc.

If ZVEL is set on a WAYPOINT, then a bot who reaches it will stop and wait there. He will not move from that spot (except to fight monsters) unless the WAYPOINT has been activated by a switch, SPAWNER or DPTOUCHPLATE that has a YVEL equal to the ZVEL of the WAYPOINT. This is useful, for example, if you want a bot to wait patiently at a door until the player unlocks it, and then continue on his path.

If 1024 is added to the EXTRA of a bot (and is used in combination with 256), then the bot will be in lead player mode. When in leading mode and on a path, the bot will automatically stop to wait for the player if the player is not close to him. To disable this feature only on certain WAYPOINTs, add 2 to the EXTRA of those WAYPOINTs. This is useful if, for example, you want the bot to start on his path when he is still far away from the player, but then you want him to lead the player when he reaches a certain area.

In addition to the BOT ASSISTANCE option, bots can be placed directly in a map. Place a BOTALLY (tile 1431) in the map and give it a lotag of 1. Then determine its attributes by setting its EXTRA ('M on the sprite in mapster to set EXTRA). As with monsters (see below), this acts as a bitfield:

BIT | EFFECT
1 | AWAKE AT START, NEVER SLEEPS
2 | DOUBLE STRENGTH
4 | QUADRUPLE STRENGTH
8 | MEDIC
16 | HAS SHOTGUN
32 | HAS CHAINGUN
64 | HAS RPG
128 | HAS FREEZER
256 | FOLLOWS WAYPOINTS IF AVAILABLE, DOES NOT CHEAT TO FOLLOW PLAYER
512 | WILL PATROL STARTING POINT
1024 | LEAD THE PLAYER MODE (use with 256)

Add together the bits that you want to get the desired effects. For example, a BOTALLY with an EXTRA set to 26 (16 + 8 + 2 ) will be a medic with double strength and a shotgun.

CIVILIANS

Currently (as of versions 2.20) there is one civilian who is fully coded, and can be killed, rescued, talked to, annoyed, etc.

She has two different tiles:

6613 – starts in a sitting position

6650 – starts in a standing position

Like all the civilians, she has several skin variations (see civilians.def in the DP graphics folder)

Her behavior can be modified in a few ways by setting EXTRA on her model. Add the desired values together:

1 extra tough (100 hit points instead of 50)

2 brave, will not get scared just because the player fires a gun

4 will not walk or run

256 will follow the player in an attempt to reach safety (overrides 4)

Flag 256 can be used in conjunction with the CIVILIANRESCUE sprite (tile 6230). If that sprite is placed in a sector, then any civilian with flag 256 is considered rescued when reaching that sector, until the rescue sprite reaches its capacity. Set the capacity of the rescue sprite by setting its EXTRA (e.g. set EXTRA to 5, and it will take 5 civilians to exhaust the sprite). You can set the sprite to activate something when it reaches its capacity by setting either its LOTAG or YVEL to the activation number. Use it to activate RESPAWNs, open a door, or otherwise do something to reward the player.

Other civilians (not yet coded), are on tiles 6600-6626, and tiles 6665-6672. They will display a single animation but do nothing else.

LOTS OF MODELS FOR CARS AND OTHER STUFF

Tiles 5240 to around 5400 are various models that have been added to give mappers more resources. Many vehicle models are included, and these have correct blocking thanks to the included clipshape map by DanM. Most of the vehicles are coded as actors so that they can be destroyed by weapons. There are too many to list here, but you can see them by placing them in mapster and get a good idea of what they are by looking in dukeplus.def and DUKEPLUS_RESOURCES/GRAPHICS/MAP_EFFECTS/models

Breakable Chains

The chain sprite (tile# 920) can be made breakable by hitscan weapons (bullets). To do this, give it a lotag of 1. You can also make the chain activate something when it is destroyed. Set YVEL to the activation number. It will activate ACTIVATOR, ACTIVATORLOCKED, MASTERSWITCH, RESPAWN, and various DP sprites.

Coronas

To add a corona to an object (such as a street light) place either a tile 1632, 1633 or 1634 where you want the corona to be, and give the sprite a lotag of 1. In game, the corona will be transparent and will change size depending on the distance from the player. By default, a corona has a minimum size of 12 (xrepeat/yrepeat). If you want the minimum size to be different, set the hitag of the sprite to the desired minimum.

DUKE PLUS TOUCHPLATES.

To make a DPTOUCHPLATE, place a red A sprite (tile #2940) and give it a lotag of 1. Set YVEL on the DPTOUCHPLATE to the tag number that you want it to activate (just like you would set lotag on a normal TOUCHPLATE). It will activate ACTIVATOR, ACTIVATORLOCKED, MASTERSWITCH, RESPAWN, and various DP sprites. DPTOUCHPLATEs are useful for two reasons: 1) it is more compatible with DP effects than a regular TOUCHPLATE. For example, DPTOUCHPLATE can activate a WAYPOINT (see section on bot allies in DPdoc) while a regular TOUCHPLATE cannot. 2) the DPTOUCHPLATE can be made to be triggered only when the player is below it, instead of triggering the moment the player enters its sector. For this feature, give the DPTOUCHPLATE an EXTRA of 1. This is useful if you want the player to be at or near the ground when the activation occurs, instead of just anywhere in the sector. Finally, a DPTOUCHPLATE can be made dormant. To do this, set its XVEL to an activation number. Once set, the DPTOUCHPLATE will do nothing when the player enters its sector until that number has been activated.

DISABLE MENU

To disable the DukePlus menu in your map (thereby completing preventing the player from changing DP settings), place a red B sprite (tile #2941) and give it a lotag of 66. The disabling will remain in effect for the duration of the game, unless your map is linked to the DP hub, in which case the menu will be enabled when the player finishes the level.

CHECK POINTS

To add a check point to your level, place a red C sprite (tile #2942) and give it a lotag of 1. Set Hitag to the save slot that will be used (0-9) when the player enters the check point sector. If you want it to play a sound, set Extra to the number of the sound. It will only work the first time the player enters the sector.

Gust Spawner

This creates the effect of small clouds or smoke puffs blowing past. It could be used to make a map that takes place inside of a moving airplane, with the clouds visible through the windows, or it could be used to add atmosphere to any map. The effect is created by placing tile #2946 (the red 'G') and giving it a lotag of 1. The size of the sprite will determine the size of the smoke puffs that it spawns. Pal and shade are transferred to the spawned smoke as well. The puffs will move in the direction that the sprite is facing, and disappear when they hit a wall. The hitag of the sprite is the number of ticks between spawns (26 = one second). The XVEL of the sprite determines the speed at which the smoke will move: valid numbers are between 1 and 100. If you want the smoke clouds to disappear before they hit a wall, set YVEL on the spawner to the number of ticks that the smoke clouds will last.

Jump Pads

To make a jump pad, place a sprite #2949 (the red 'J') in the map, and give it a lotag of 1. The hitag of the sprite will determine the activation distance (if you leave hitag at 0, it will activate when the player gets within 640 BUILD units). The XVEL of the sprite will determine the horizontal velocity of the player when he is jumped by the pad (values between 128 and 1024 are good in most cases). The YVEL of the sprite will determine for how long, in ticks, the jump from the pad will exert a force on the player while he is airborne. If you leave YVEL at 0, it will default to 26 ticks (1 second). It is important to set YVEL to the correct number; if it is too low, the player will not reach the intended destination. The ZVEL of the sprite is the most important and delicate setting; it determines the vertical velocity of the player's jump. Depending on the desired height, this will probably be a value between 512 and 2048. The angle of the sprite will determine the direction that the player moves in (of course, if XVEL is very low, then this won't matter). Finally, set the EXTRA of the jump pad sprite to 1, and it will emit energy pulses showing the trajectory that the player will follow.

Sparker

A sparker will periodically spawn sparks and make random short-circuit sounds. To make a sparker, place a tile #2950 (the red 'K') and give it a lotag of 1. Give it a hitag for the delay, in ticks, between sparks (the delay will still be random, but the higher the number the longer the delay).
Ladders

USING LADDERS IN GAME:

Approach the ladder and press forward while facing the general direction of the ladder to go up. Move backwards to come down. You can also grab on to a ladder by jumping to it. If you are at the top of the ladder, you must move backwards, with your back to the ladder, to get on it. Crouching while moving backwards is safe, as is walking, but if you run backwards you will usually miss. Once on the ladder, you can stop any time. But if you turn around too much, you will fall off. If you hold the jump key while on a ladder, you will slide down.

MAKING LADDERS IN MAPSTER:

To make a ladder, you need to place two sprites of tile number 2951 (the letter 'L' in the red font). If these are tagged as ladders, they will become invisible once the game starts.

Set the EXTRA of each sprite to 1, and make sure the pair of sprites has the same hitag.

Place one of the sprites above the other. The higher sprite will be the top of the ladder, the lower sprite the base of the ladder. Make sure that the ladder top is where you want Duke to get off the ladder. That means it must be almost a full Duke height above the ledge, or else Duke will simply fall back down when reaching the top of the ladder. Of course, the graphics you use to represent the ladder do not need to extend above the ledge, only the special sprite defining the ladder top does.

If you want a sound to play while the player is going up and down the ladder, set the lotag of the base ladder sprite to the number of the sound you want played. The vent crawling sound is a good choice.

Additional notes: The x and y coordinates of the base of the ladder will determine the ladder's actual position (the sprite for the top of the ladder is only referenced for its z coordinate, so technically it doesn't matter where you put it, as long as it is above the base). That means that ladders are strictly up and down affairs and cannot be sloped. The angle of the base of the ladder determines the angle that the player is supposed to face when using the ladder. So, if the ladder is up against a wall, then point the ladder sprites at the wall.

Movement Option Controller
If this sprite is placed, then the player will have the movement options specified when playing the map, and will not be able to change them in-game using the menu. This is useful if you have designed your map for ledge grabbing, or you don't want the player to have dodge jumps, etc. Place the red 'M' (tile #2952) and give it a lotag of 1. Next, set the EXTRA on the sprite to the desired movement options. EXTRA on this sprite functions as a bitfield, so you add together the values for the different movements:
1 = realistic running acceleration on
2 = mantling (ledge grabbing) on
4 = dodge moves and wall jumping on
8 = player can pick up and throw objects

16 = turns off Duke’s extra lip movement (blocks the Duke Taunts Plus option)
Add together the numbers corresponding to the options you want for the map. For example, if you want mantling and object grabbing, but not realistic running or dodging, then you would set EXTRA to 12. If you do not place this sprite, the player will have whatever moves he has selected in the Duke Plus menu.
Model and/or Model Animation Disabling
In Duke Plus there is a special sprite that can disable model rendering or model animation on specified tile numbers. This is useful if you have a certain sprite in your map that does not animate in 8-bit mode, but when used with the HRP is replaced by a model with animation. You can specify that certain tile numbers will not have animation, and you can also specify that certain tile numbers will not be replaced by models at all (they will remain as sprites). To do this, place a sprite of tile # 2953 (the red 'N') in your map and give it a lotag of 1. To make the sprite disable models, set the hitag, XVEL, YVEL, ZVEL and EXTRA to the tile numbers that you want to disable (each model disabling sprite can disable up to 5 different tile numbers). For example, if you wanted to disable models on tile 2002, you could set the hitag of the sprite to 2002 (say, if you wanted to use a pigcop tile as flat piece of art, and didn't want the pigcop model walking in the painting). If you also wanted to disable 2003 and 2004, you could set the XVEL and YVEL of that sprite to those values. To allow the tile to be rendered as a model but disable its animation, set the pal of the disabling sprite to 1.
Noise Sprite
Place a sprite of tile #2954 (the red "O") and give it a lotag of 1. Set the hitag to the number of the sound you want it to play when it is triggered by the player entering its sector. If you want there to be a delay before the sound is played, set EXTRA of the sprite to the number of ticks you want the sound to be delayed. You can place multiple noise sprites in the same sector with different delays. And, if you want the sprite to play the sound on activation, instead of when the player enters its sector, set YVEL to the activation number.

Temp Sprite

Temp sprites are visual props that can be made to appear upon activation, and then later disappear with another activation. These are useful for making areas that change appearance after certain events. All temp sprites are tile number 2955 (the red P). They become invisible when the map loads, and upon activation they change to look like another tile specified by the mapper. Note that these are not like RESPAWN; they do not spawn another tile, they just look like it. This is important to remember, because they will not run any of the code specific to the tiles they are made to look like (for example, they will not take damage if you shoot them). Also, they may not block like the other tile because tile 2955 is very small (so, for example, it would be inadvisable to use the effect to make s sprite bridge appear, unless it is purely decorative and the player never has to walk on it).

HITAG: This is the activation number that makes the temp sprite visible. Hitag 0 temp sprites are visible when the game starts.

LOTAG: This is the activation number that makes the temp sprite die (note that it cannot die unless it has been activated first).

EXTRA: This is the tile number that the temp sprite looks like when it has been activated. Note that it will not display animation unless the animation is defined on the tile in an .art file or a def file.

When temp sprites become visible, they retain the cstat, pal, angle, xrepeat and yrepeat given them in the map.

Quoter Sprite
A Quoter sprite will display a quote or picture of your choice when the player enters its sector. Place a sprite of tile #2956 (the red "Q"). Give it a lotag of 1 if you want it to display a quote using your own customized settings for size, positions, etc. Give it a lotag of 2 if you want to display a picture. Give it a lotag of 3 to display a quote using the standard Duke 3D quote system (at the top of the screen in white text for five seconds, or until another quote is displayed). Set the hitag to the number of the quote you want displayed, or to the tile number you want displayed if the quoter has lotag 2. If you use lotag 3, then no other settings are required. Otherwise: EXTRA is the number of ticks that the quote or picture is displayed. XVEL and YVEL are the X and Y coordinate offsets, which can be postive or negative. Leave XVEL at 0 on lotag 1 Quoters and the quote will be centered. ZVEL is the size offset. Note that the values needed for X and Y offsets will change depending on the size, and are different for quotes and pictures. The quote or picture displayed will have the pal and transparency of the quoter sprite. A quote and a picture can be displayed at the same time, but this requires two different sprites.
Spawner
A Duke Plus Spawner is similar to a RESPAWN sprite, but with many more options. Once activated, a spawner will periodically spawn a sprite of a certain tile (such as a monster) a certain number of times. Upon spawning the last one, it can operate activators, masterswitches and respawns if you desire. It is highly customizable.

Mapster instructions:
Place a sprite of tile number 2958 (the red S). In game, the Spawner can be activated in three ways. If you give the Spawner a lotag of -1, it will activate as soon as it can "see" the player (just like a monster). With a lotag of 1, it will activate when the player enters its sector. If the Spawner has a lotag higher than 1, then it will be triggered by an ACTIVATOR, ACTIVATORLOCKED, DUKE PLUS TOUCHPLATE or other DP activation with a YVEL equal to that lotag. If you leave the lotag at 0, it will not work at all.

Now that you have set the lotag, set the hitag to the tile number of the sprite (e.g. 2000 for PIGCOP) you want it to spawn. Set its shade to the total number of sprites you want it to spawn, or set the shade to a negative value to spawn without end. Setting its pal lower than 26 will make the spawned sprites have that pal. If pal is 26 or higher, then it acts as a delay (in number of ticks) until the first sprite is spawned (this is not the same as the delay between spawns). If the spawned sprites are monsters, you can set the XVEL of the spawner to the tile number of something you want the monsters to spawn when they die (just like you would set it on individual monsters). Normally, spawned sprites use the TRANSPORTERSTAR effect when they spawn in, but you can disable this by setting XVEL on the spawner to -1 (useful if you are spawning something that isn't a monster, such as TRASH). You can also set the EXTRA on the Spawner to set the monster flags of the spawned monsters (again, just like you would set it on the monster sprites). Set ZVEL to the number of ticks in between spawns (130 would be five seconds). Finally, set YVEL if you want it to operate activators and master switches when the last sprite is spawned (YVEL = the lotag it activates).

A spawner can made to spawn jibs, but you must use one of the following hitags:
2246 // spine

2251 // eyeball

2256 // heart

2261 // intestines

2266 // ribs

Shooter
A Duke Plus Shooter will periodically fire a projectile of your choice, with various options. The Shooter sprite is invisible in-game and indestructible (unless set otherwise). Place tile #2959 (the red T) and give it a lotag of 1 or higher. Lotag 1 is for activation on sight, 2 or higher is an activation number (set it off with an activator DPTOUCHPLATE, etc.) Hitag is the tile number of the projectile it shoots (see below for complete list). Set shade to the total number of shots you want it to fire, or -1 to make it fire forever.
EXTRA is a bitfield that determines how it aims (add the desired numbers together):

-1 or 0 means it always fires where it is initally pointed,
2 = aims at player and player allies
4 = aims at bad guys
8 = trajectory of projectiles is slightly random.

16 = timing of the shots is moderately random (you still use ZVEL to determine the basic timing)

32 = makes a sound when it fires (the sound is appropriate to the projectile)

64 = destroyed by explosives

256 = projectiles do not emit dynamic light

ZVEL is the number of ticks between shots (higher numbers = lower rate of fire). Finally, YVEL is the vertical component of its aim (used only if it does not aim at friends or enemies). Positive values make it aim down, negative up.
List of Projectiles:

From original game (see DEFS.CON for tile numbers):

FIRELASER

SPIT

SHRINKER

EXPANDER

COOLEXPLOSION1

RPG

FREEZEBLAST

SHOTSPARK1

SHOTGUN

CHAINGUN

DukePlus projectiles:

ELECTROPROJ 1387 (electrical net that spawns lightning on impact)
FREEZENOAIM 1410 (freezer shots that do not autoaim at the player)
STARPROJ 1660 (glittery flak that spawns bouncing shrapnel on impact)
FIREBALLPROJ 1669 (Tracks targets)
FIREBULLET 2328 (fiery projectile)
RPGNOAIM 2611 (rockets that do not autoaim at the player)
GRAVPROJ2 3496 (leaves trail of sparks)

DPCANNONBALL 6179 (smashes through multiple enemies)

ICESHARD 6422 (fast moving chunk of ice)
RAILSLUG 8000 (medium strength blaster weapon with trail)
SAWBLADE_PROJ 8007 (deadly blades that bounce around)
MP5BULLET 8834 (powerful bullets)

MORTER2 1652

Weapon Options Controller
If this sprite is placed, then the player will have the weapon options specified when playing the map, and will not be able to change them in-game using the. This is useful if you have designed your map for the gravity gun, etc. Place the red 'W' (tile #2962) and give it a lotag of 1. Next, set the EXTRA on the sprite to the desired weapon options. EXTRA on this sprite functions as a bitfield, so you add together the values for the different movements:
1 = akimbo pistols
2 = Cruizer shotgun
4 = MP5 sub-machine gun
8 = heavy rocket launcher
16 = mind blast alt-shrinker
32 = karate kicks

64 = gravity gun replaces expander

128 = dukemon capsules replace tripbombs

256 = freezer plus

512 = BFG replaces devastator

1024 = Heavy Pistols

Add together the numbers corresponding to the weapon options you set for the map. f you do not place this sprite, the player will have whatever weapon options he has selected in the Duke Plus menu.

INVENTORY OPTIONS CONTROLLER
If this sprite is placed, then the player will have the inventory options specified when playing the map, and will not be able to change them in-game using the Place tile #2948 and give it a lotag of 1. Next, set the EXTRA on the sprite to the desired inventory options. EXTRA on this sprite functions as a bitfield, so you add together the values for the different options:
1 health items can be stored in medkit

2 holoduke spawns bot

4 enhanced steroids

8 goggles show dipswitch patterns

16 enhanced armor

32 double-jump can start jetpack

Upgrade Items

HEALTHUPGRADE 6222 – increases max health by the amount of EXTRA on the upgrade sprite (or 10 by default)

ARMORUPGRADE 6223 – increases max armor by the amount of EXTRA on the upgrade sprite (or 10 by default)

WOUNDUPGRADE 6224 – after picking this up, bullets cause bleeding wounds in monsters

BURNINGUPGRADE 6225 – after picking this up, explosives will start fires and burn monsters

STUNUPGRADE 6226 – after picking this up, the player’s weapons will stun monsters (time depending on damage)

PIERCINGUPGRADE 6227 – after picking this up, bullets can pierce multiple enemies

Boxes that can be picked up, dropped, thrown, piled and stood on

The small box (not so small, really) is tile 6314 and the big box is tile 6316 Pal 0 is the metal version and pal 30 is the wood version. Press use to pick up a small box: then press fire to throw it or press use again to place it. The large boxes cannot be picked up, but they can be pushed (press use while pressing forward against the large box).

Fuses
Duke Plus fuses (tile #6319) are a special actor that can be picked up and carried, then placed in designated spots in order to trigger activators, masterswitches, or respawns. In some respects they are similar to ACCESSCARDs. The main difference is that fuses can be set up so that several of them have to be placed before an effect occurs. For example, you could make a fuse box that has four missing fuses, and the player has to find and place four fuses in order to return power to an area.
How fuses work: First, decide where the player is supposed to insert the fuse sprites (make a fuse box in a wall or some other suitable destination). At the places where the fuses are to be inserted, place fuse sprites. Make them look just the way you want them to look after the player has placed them. Give them all a lotag of 1 (this tells the game that the sprites are functional and not just decorations). Now, give these destination fuses an EXTRA of 1. This will designate them as destination points and make them invisible in the game (the fuses that the player actually picks up and places are different sprites). Next, make sure that all of the destination fuses that are part of the same group share the same hitag, which must be less than 10 (the only time you would need to set hitag is if there is more than one group of fuses in your map; otherwise, you can leave hitag at 0). The point of the fuses is to activate something; to make them do this you must set YVEL on all of the destination fuses to the tag number that you want them to activate. For example, if you set YVEL on the destination fuses to 13, then once the fuses are placed, any ACTIVATOR, ACTIVATORLOCKED, MASTERSWITCH or RESPAWN of lotag 13 will activated. There is one more thing you need to do to prepare the destination fuses, and that is to tell the game how many different fuses must be placed to cause the activation. Do this by setting XVEL on each destination fuse in the group to the total number of fuses that need to be placed. For example, if there are 4 fuses in a group (4 sharing a hitag), and the player must fill each of the 4 destination sockets to cause the activation, then you would set the XVEL of each destination fuse to 4. On the other hand, you could set the XVEL to 3, and this would mean that only 3 out of 4 sockets need be filled to cause the activation. (If you set XVEL to 5, that would make the activation impossible). Now that the destination points are set up, it is time to place the fuses that the player actually sees in the game and picks up. For the pick up fuses, all you have to do is place the sprites (same tile # as before) give them a lotag of 1, and if applicable give them the hitag corresponding to the fuse group. Do NOT set EXTRA on the pick up fuses, and you do not need to set YVEL. With this done, the player will be able to pick up the fuses in-game and place them in the "sockets" defined by the destination fuses you set up earlier.

Fireflies

These small glowing balls float around randomly and can add atmosphere to a map. Place a tile 4884 in the map and give it a lotag of 1, and it will become a firefly when the game starts (it will automatically be resized). They work well with different palettes.

DP Cannon

This is an old-fashioned cannon which can be controlled by the player. It is tile # 6172. It does not require any special tags to work. As an option, you can limit its turning radius. Set EXTRA to the number of degrees (in BUILD units) it is able to turn. For example, if you set EXTRA to 512 (which equals 90 real degrees), then the cannon will be able to swing 90 degrees in either direction. In game, the player takes control of the cannon by getting behind it and pressing the open key. It has an unlimited number of shots. The cannonballs it fires will bounce off of floors, explode on walls, and can smash through multiple weaker enemies before exploding.

DP weapon tile numbers

DB Shotgun 6324

Cruizer shotgun* 8830

MP5 SMG* 8833

*These do not need to be placed in maps, since they will automatically replace the regular shotgun and chaingun, if the option is selected in the menu or by the mapper.

Duke’s Skycar

Tile #6412 is a vehicle that the player can get in and control. It does not require any special tags to work. Just place the tile in the map, then Duke can fly it. Once in the Skycar, the mouse controls steering, forward accelerates, backwards decelerates, strafe left/right does barrel rolls, primary fire shoots explosive bullets, secondary fire drops big bombs, and the open key ejects.

Making a Skycar crash sequence. A crash sequence will only work at the start of a map. Place tile #6410 in the air, along with the player start position. Place a series of LOCATORS, creating a path for the crashing skycar to follow. The final locator in the sequence should have a lotag of 0, with previous ones counting up. Give the skycar a lotag equal to that of the first locator in the sequence. For example, if you have placed 16 locators, then give the first locator and the skycar both a lotag of 15. The next locator will have a lotag of 14, and so on until you get down to 0. The locators can be as far away from each other as you like. However, keep in mind that the crashing skycar cannot make tight turns. If you have placed the sprites correctly, then the map will begin with Duke in the skycar as it follows the path and random explosions surround it. When it reaches the lotag 0 locator, it will crash, Duke will get out and say “That’s the second time those alien bastards have shot up my ride!”. Ironically, Duke cannot be harmed while in the crashing skycar, although he can be harmed in the controllable skycar.

Skycar Bonus Rings

These are the glowing rings (tile #6419) that the Skycar flies through in the demo level. Place them in the sequence you want, with ascending lotags, starting at lotag 0 (see Skycar1.map in dpmaps). Rings with pal 33 will act as boosters. Set YVEL on the ring to make it activate ACTIVATOR, ACTIVATORLOCKED, MASTERSWITCH, RESPAWN, and various DP sprites when the ring is completed in game. You can make the level impossible to exit until a certain ring has been flown through. To do this, choose the exit sector, but instead of giving it a lotag of -1 (or 65535), place a SE in that sector and give the SE a lotag of -1. Finally, set EXTRA on the final ring (or whichever one you want to enable the exit) to 1. Completing that ring in game will cause any sectors with lotag -1 SEs to become exit sectors.

The Dukebike

Tile 7584 is Duke’s motorcycle, the masterpiece creation of “Muelsa”. It was originally released it as a separate mod., and has now been incorporated into DukePlus with some enhancements. Use the forward, backward, strafe left, and strafe right keys to drive, press use to get on the bike and jump to get off. It has a headlight when used in Polymer. Set EXTRA on the bike sprite to 1 and it will be indestructible (though the player can still take damage when on it).

Saw Blades

In addition to being normal objects that can be picked up by the player, saw blades (tile # 8006) are especially effective when fired from the gravity gun. They do a large amount of damage and bounce off of walls several times as they lose momentum and eventually come to rest.

A Warning about activation tags...

Many Duke Plus sprites use the YVEL tag as an activation number, similar to how switches and other standard sprites use lotag. It is recommended that, whenever possible, the activation number on DP sprites not be shared with the activation number on the regular hardcoded sprites. For example, suppose you have a switch with a lotag of 53, and it opens a door. But you also want the switch to activate a SPAWNER. You could give the switch and the SPAWNER a YVEL of 53, and it should work. But it would be safer to give the switch and SPAWNER a separate YVEL, such as 54 (assuming that 54 is not being used as a lotag or YVEL somewhere else). So in this case, you would give the switch and the door activators a lotag of 53, and you would give the same switch and the SPAWNER a YVEL of 54.

Special Tags

Slippery floors

To make the floor of a sector slippery, give the sector a lotag of 50. Sprite surfaces can be made slippery by setting the lotag of the sprites to 50 (sprites must be floor aligned for this to work)..

Activation by Monsters

Set the YVEL of a monster to make it activate all ACTIVATOR, RESPAWN, ACTIVATORLOCKED and MASTERSWITCH that have lotag equal to the YVEL you set (must be nonzero). The activation occurs when the monster dies.

Sprites that can only be seen when the nightvision goggles are used

Give a sprite a pal of 66, and it will be not be visible or solid unless the goggles are on.
This works on enemies, pickup items, sprite bridges – any sprite at all.

Pulsating sprites

To make a sprite pulsate in-game (the shade of the sprite will rise and fall), add 70 to its pal. For example, if you want the pulsating sprite to be pal 0 in-game, give it a pal of 70 in mapster. To make a pal 2 pulsating sprite, give it a pal of 72. Next, to change the rate of pulse, set the hitag of the sprite. A hitag of 0 will give a rapid pulse, while 1 is slower, 2 is even slower, and so on. Obviously, do not use this effect on sprites that already have a hitag set for some other purpose.

Tree Cstats

Give a tree sprite (tile #908 or #910) a nonzero lotag, and it will retain whatever cstat you give it in the map (flat, nonblocking, etc.) Normally, trees are hardcoded to become blocking and non flat in-game.