DUKE PLUS

A GAME ENHANCER AND CUSTOMIZER FOR THE EDUKE32 PORT OF DUKE NUKEM 3D

TO INSTALL AND PLAY:

- EXTRACT THE CONTENTS OF DUKEPLUS.RAR INTO A DIRECTORY THAT CONTAINS THE FILE “DUKE3D.GRP”

- CLICK ON “dukeplus.bat” to START A GAME.

- TO USE THE HRP WITH DUKE PLUS: PLACE “duke3d_hrp.zip” INTO A FOLDER NAMED “autoload” IN YOUR EDUKE32 DIRECTORY

DUKE PLUS VERSION 1.15 FEATURES

Game Fixes

- ducking pigcop has correct hittable area, pigcops will duck incoming projectiles

- ducking liztroop has correct hittable area

- water fountains only give up to MAXWATERFOUNTAINHEALTH

- enemies move backwards when hit by explosives, instead of forward

HRP Fixes

- Monsters do not turn to face the player when dead

- Rockets have correct pitch

- Frozen and inactive monsters do not animate

- Turrets spin randomly when damaged

- RECON planes have correct roll (and roll smoothly)

Player Movement and abilities

- Akimbo pistols (optional)

  When this feature is on, Duke will wield two pistols at once after picking up a second pistol. Once you have a second pistol, you can toggle between using one or two by pressing the TOGGLE DUAL PISTOLS key (which must be assigned in the keyboard setup). Note that this function replaces the LOOK UP key (sorry keyboard users). If the akimbo pistols feature is off, the TOGGLE DUAL PISTOLS key functions as LOOK UP. Akimbo pistols are less accurate than a single pistol, but of course the firing rate is doubled.

- Enhanced Inventory items (optional):

  If STOREHEALTH is set to YES in USERPLUS.CON, unused health items are stored in the first aid kit.

  If STEROIDKICKS is set to YES, kicks do 4X damage when the player is using steroids.

  If HOLODUKELIGHTNING is set to YES, the HoloDuke hologram will electrocute monsters who wander close to it.

  IF GOGGLESWITCHES is set to YES, the nightvision goggles will reveal which dip switches need to be set.

- Bullet spread

  Change the degree to the player's bullets spread in USERPLUS.CON (pistol, shotgun and chaingun may be set separately)

- footstep sounds which depend on the type of surface

- realistic running acceleration (optional)

- realistic jumping height with mantling ability (optional)

When this feature is on, Duke will automatically grab onto ledges. He can hang, there, move sideways (if the ledge allows), or press JUMP to climb up.

- dodge moves (optional)

Double tap on a direction key to quickly dodge in that direction. Jump while in mid-dodge to perform a long jump. While touching a wall, jump up and dodge away from it (i.e. if the wall is directly behind you, double-tap forward) to perform a wall jump.

To toggle an optional feature ON or OFF:

Open USERPLUS.CON with a text editor and change the relevant field to YES or NO. Various numbers may also be changed, just like in USER.CON

Visual effects

- shell casings roll realistically and stay on the ground for a while (and they are spawned by monsters)

- exploded monsters leave jibs on the ground, which can be destroyed

- rockets have glowing exhaust

- Level of Detail hack – when this optional feature is on, sprites will replace models in low framerate situations

Map effects

- Transparent water

  In Duke Plus, you can make underwater areas in sectors that are not lotag 2. Place a SECTOREFFECTOR at the height that you want the water to be, and give it a lotag of 102. Any sprite that goes below that height in the sector will be underwater. To complete the effect, place some flat WATERTILE2 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. To change the appearance of the water, change the pal of the SECTOREFFECTOR: 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). To make moving water, set the XVEL of the SECTOREFFECTOR to the desired speed (96 is about the speed that the player can swim). The water will move in the direction that the SECTOREFFECTOR is facing. To make water that rises/falls in response to a switch, set the YVEL of the water sector effectors to some number that is not being used as a lotag for any other effects. Then place a switch and set the YVEL of the switch to that number. The lotag of the switch does not matter, and can be used for something else if you like. Set the ZVEL of the SECTOREFFECTOR to the height that the water will end up at after the switch is thrown.

- Rain and Snow in outdoor areas.

  MAPSTER INSTRUCTIONS FOR RAIN AND SNOW:

Place a WATERDRIP sprite (tile #660) somewhere in the map. Then, using 'M in 3D mode or F8 in 2D mode in mapster, change the EXTRA tag of the sprite to a value between 1 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 the EXTRA on one of them).

- Ladders.

USING LADDERS:

In the game, simply walk up to 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. As long as you don't RUN backwards, you should grab on with no problem. 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. In the included demo map, the vent crawling sound plays.

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 will be 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.

- Jump Pads

  To make a jump pad in mapster, 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). Next, press F8 on the sprite in 2D mode to edit its properties. 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). 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. Finally, 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).

- 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.

- Activation by Monsters

  Set the YVEL of a monster to make it activate all ACTIVATOR, ACTIVATORLOCKED and MASTERSWITCH that have lotag equal to the YVEL you set (must be nonzero). The activation occurs when the monster dies. To set YVEL, press F8 on the sprite in 2D mode and you'll find it (next to XVEL).

- 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.

- Coronas.

  To add a corona to an object (such as a street light) place either a tile 1632 or 1633 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.

- 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.

- Monster bodies placed in the map can be blown up (like normal monster bodies of actual slain monsters).

- Spawners

- Once activated, a spawner will periodically spawn a sprite of a certain tile number (such as a monster) up the number you have specified. Upon spawning the last one, it can operate activators and masterswitches if you desire. It is highly customizable.
  Mapster instructions:
  Place a sprite of tile number 2958 (the red S). Give it a nonzero lotag. Then 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. (Note: Giving the shade a negative value will cause the sprites to spawn without end). Setting its pal will make the spawned sprites have that pal. 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). 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 monster 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). The Spawner can be triggered in two ways. If you give the Spawner a lotag of 1, it will activate as soon as the player enters its sector. If the Spawner has a lotag higher than 1, then it will be triggered by an ACTIVATOR or ACTIVATORLOCKED with the same lotag.

- SECTOREFFECTOR of death. Place an SE and give it a lotag of 666, and anything 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.

HUD Display

- When Duke is holding his breath underwater, a bar appears near the top of the screen showing how much oxygen he has left.

Bot Allies

- If BOTALLIES is set to YES in USERPLUS.CON, then when you start a single player game, a group of friendly Duke bots will fight alongside you. These Duke bots take the place of the player sprites with a lotag of 1, ( the multiplayer starting positions). Therefore, this option only works on maps that have multiplayer starting positions.

- All Duke bots start with pistols, and can have additional weapons. Some are medics (green pants) who can heal themselves, the player, and other bots on contact. Bots do not pick up items. They do have a limited supply of ammo, but it replenishes over time. Medics use up ammo when healing.

- You can order a Duke bot to patrol a certain area. Aim at the Duke bot and press the open key (spacebar by default) to select it. Then point to where you want it to patrol and press the open key again to set a patrol point. To cancel a patrol, press the left and right strafe keys simultaneously while the Duke bot is selected.

- Instead of using the multiplayer starting positions, you can place bots 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 | UNUSED (FOR NOW)
512 | WILL PATROL STARTING POINT

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

Monsters

- Monsters can be knocked backwards a short distance by hits from the shotgun or other powerful weapons.

- 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)

- 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 (use F8 on the sprite in mapster's 2D mode to set XVEL). You can also set XVEL on a RESPAWN sprite to make the monster it spawns drop whatever you want.

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

- Customizable monsters. Set the EXTRA field on the monster or the RESPAWN sprite that spawns it to customize the monster. 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:

BIT | EFFECT
--- | ---
1 | AWAKE AT START, NEVER SLEEPS
2* | DOUBLE STRENGTH
4* | QUADRUPLE STRENGTH
8** | DOUBLE ATTACK POWER
16 | ATTACK VARIATION 1
32 | ATTACK VARIATION 2
64 | ATTACK VARIATION 3
128*** | TELEPORTS
256 | BULLET RESISTANCE
512 | EXPLOSIVES RESISTANCE
1024 | SHRINKER, EXPANDER, LASER IMMUNE
2048 | FREEZER IMMUNE
4096**** | BACKS AWAY FROM PLAYER
8192***** | DOES NOT WALK OFF LEDGES

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

**Doubling 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 double attack power will become killer sharks and will behave differently from normal sharks.

***Generally speaking, the monster will try to teleport behind the player if the player is facing it every now and then.

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

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

This is more likely to happen in open spaces. If the monster cannot find a good spot to teleport to, it will not teleport.

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.

List of attack variations for the various monsters.

Lizard Trooper

variation 1 - STARPROJ

variation 2 - FIREBALLPROJ

variation 3 - RAILGUN

Enforcer

variation 1 - STARPROJ

variation 2 - FIREBULLET

variation 3 - RAILGUN

Pigcop

variation 1 - STARPROJ

variation 2 - FIREBULLET

variation 3 - RAILGUN (also shoots mortars)

Fat Commander

variation 1 - FIREBALLPROJ

variation 2 - ELECTROPROJ

variation 3 - NOT IMPLEMENTED

Sentry Drone

variation 1 - turret that shoots FIRELASER

variation 2 - turret that shoots SHOTSPARK1

variation 3 - turret that shoots RPG

Protector Drone (Alien)

variation 1 - FIREBALLPROJ

variation 2 - ELECTROPROJ

variation 3 - GROWSPARK (expander)

Turret

variation 1 - SHOTSPARK1 (bullets)

variation 2 - RPG (rockets)

variation 3 - RAILGUN

Octabrain

variation 1 - ELECTROPROJ

variation 2 - SHRINKER

variation 3 - FIREBALLPROJ

Battlelord

variation 1 - STARPROJ

variation 2 - FIREBULLET

variation 3 - RAILGUN

Cycloid Emperor

variation 1 - FIREBALLPROJ, and special FIRELASER (for secondary attack)

variation 2 - NOT IMPLEMENTED

variation 3 - NOT IMPLEMENTED

Overlord

variation 1 - FIREBALLPROJ

variation 2 - ELECTROPROJ

variation 3 - NOT IMPLEMENTED

Alien Queen

variation 0 - ELECTROPROJ (for pals other than 0)

variation 1 - GROWSPARK (expander)

variation 2 - NOT IMPLEMENTED

variation 3 - NOT IMPLEMENTED

Tank

variation 1 - STARPROJ, FIREBULLET

variation 2 - NOT IMPLEMENTED

variation 3 - NOT IMPLEMENTED

RECONDP

variation 1 – STARPROJ replaces machine gun

variation 2 – FIREBALLPROJ replaces mortar

note that these variations can be used together (add flags)

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.

ELECTROPROJ -- An electrical ball that spawns lightning bolts on impact.

FIREBALLPROJ -- A slow moving fireball that tracks the player, can be shot out of the air with hitscan weapons.

RAILGUN -- A railgun shot. (It's "weak" because a stronger one will be available for the player later).

THANKS TO:

James Stanfield, for much of the footstep sound code

Hunter_Rus, for some of the HRP fixes

12-07-07

Dan Gaskill (a.k.a. “DeeperThought”)