Con Editing Information v1.3
This document includes D3D v1.3D information, which is relevent to later
versions, it does not however contain material relevent only to v1.4 and/or v1.5.
If at all possible, use the WYSIWYG version (RTF), that is if you
download it.
This file has been tested using:
MSIE 4.0
Netscape 4.1
© James Ferry, 10th February 1999
http://
(mind the capitals at the end, it is case sensitive)
Contents
^
IntroductionThis document was written to clear up any misinformation from other sources regarding this subject. No diagrams were included, as they display differently in different programs.
The topics may not be ordered very well, but it suffices, and it will
provide you with all the information that you need to edit the con files in Duke Nukem 3D
v1.3D. These commands should still be in v1.4/v1.5, although there are also newer commands
included in v1.4/v1.5. I am not sure what version, and how compatible the Macintosh
versions are.
^
1 Con files
The con files are files that can be modified by the user to change the way the program behaves. These don't have to be con files, they can be any name that you want them to be, it is just that the default name is game.con, which is where the name came from.
You may be wondering why you would want to modify/rewrite the con files, the answer might be you don't want to, another would be don't bother, and one more would be why not?.
Con editing can be useful just to change some of the values in D3D to
make it a bit more fun, or just when you get bored, or if you need a few modifications to
make some map you made just that bit more like how you wanted it to be. The other reason
is when for larger projects such as total conversions (TC from here on). Many
people/groups try to pass off a bunch of maps with some new graphics and some minor
changes to the original con files as a TC, but all it is just a map package. A proper TC
should consist of major overhauls to the game. Even if there are no new maps, and barely
any or graphics changes at all, as long as there is major changes in the game play, done
via the con editing, it will become a TC. On the other hand, a package containing many
maps and lots of new graphics, while using no or barely any con editing, would not really
be a TC, it would be more of a patch for D3D.
^
2 Printing
In case you want to print this document out, you might want to remove
the page breaks, and make the margins smaller, and maybe remove/shrink the header/footer
so that you don't use as much paper. Double sided printing helps. If you are using a laser
printer or some other large/heated printer, don't feed the paper back into the machine, as
they may jam if a fresh print is feed back into it, similar to photocopiers, because the
paper can curl, and will not feed correctly through the machine.
Unfortunately, because different viewers/editors may have different page
sizes, pagination is very difficult, so some of the tables and information will cross over
to the next page.
^
3 Internal functions^ 3.1 Listing
This list of functions is directly extracted from duke3d.exe.
^ 3.2 Details
Firstly, the format for the parameters of some of these functions, is as follows.
Square brackets ( [ ] ) represent optional parameters.
Braces represent ( { } ) optionally repeated parameters.
The pipe ( | ) represents an or between the previous and next set of parameters.
Some explanations on structures are written in pseudo code and C code.
I have tried to make the function names bold and the function
parameters italic.
^ //, /* and */
Standard C style comments.
These commenting symbols can not be adjacent to other letters, otherwise they will be considered names of handles and functions.
ie; resetplayer // Return player to starting point
will work, but
resetplayer //Return player to starting point
will fail.
^ { and }
Standard C style function operators.
Separate different objects in a function. Similar to C/C++ and Pascal. It pretty much makes whatever is between them get treated like one function by anything outside the braces.
These are restricted to the same problems that the comments are.
^ action
External
action name [ relative [ frame face increment delay ]]
Defines the action/animation/image to the handle name.
With no parameters, it will create a still image of the current actors first frame. This is the equivalent of action name 0. If relative is given a number, it will set the first frame/still image to a relative tile from the current actor. e.g.; if the current actor is 1405, and the action's relative parameter is, let's say, -100, when called, the animation/image will start from tile 1305.
The parameter frame defines the number of frames are in the animation (set it to 0 if there are none).
The parameter face sets the number of directions that the images appear from when not a wall or floor sprite
Valid values are: (all angles are viewed from above)
Value | Description |
0 | Single image - It always faces the player no matter where they look from. |
5 | Five images - The first image is looking from the front, the second is 45 degrees from the front, the third is from the side, the fourth is 45 degrees from the rear (135 degrees from the front) and the last/fifth value is looking from the rear. The second, third and fourth are used for either side of the image. |
7 | Seven images - Same as 5, except there are seven images, with images 2, 3, 4, 5 and 6 are on both sides. image 4 is the side images, 1 and 7 are the front and rear respectively. These increment every 30 degrees instead of 45 degrees. |
8 | Eight images - The first image is looking from the front, the second is 45 degrees from the front to the left, the third is from the left side, the fourth is 135 degrees from the front to the left, the last/fifth value is looking from the rear, the sixth is 135 degrees from the front to the right, the third is from the right side and the fourth is 45 degrees from the front to the right. |
The images for the faces must be consecutive tiles following the first image of each frame.
The parameter increment is the value that is added to the current image in an animation that will move it to the next image.
The parameter delay is the amount of time that each image will pause/wait for before incrementing.
I am not sure about the timing, it could be a value of 128 is one second, or a value of 64, or a value of 100. Trial and error.
Internal
action name
Starts the action/animation/image identified by a predefined handle name.
^ actor name [ strength [ action [ movement | speedxy [ speedz ] [ { directions } ] ] ] ]
Creates the code for an actor.
Parameter name is a handle/number for the actor. If a handle is used, it is a definition of a number (or the number is it's definition, either way).
Parameter strength defines the strength that the actor will start at, unless it is created with cactor, where this parameter and the following are ignored.
The parameter action sets the actor's initial action to the predefined action given by the handle.
The parameter movement | speedxy [ speedz ] [ { directions } ] sets the actor's initial movement to either the predefined handle movement, or to a velocity of speedxy along the ground (horizontal plane/x-y vector), with the optional speedz for velocity in the vertical direction (up and down/z vector) and the optional directions (see the Directions section)
This should be ended with an enda function.
^ addammo weapon amount
Add the value of amount to the current player's, or the closest player's, ammunition level for the weapon given by weapon. This will call a break if the ammunition level is full.
^ addinventory item amount
Either sets or adds the value of amount to the current player's, or the closest player's, inventory level for the item given by item. See the following for details
Value |
Common name |
Description |
0 |
GET_STEROIDS |
Steroids - will set the inventory level to amount. If the amount is not set to the maximum value, then the steroids will automatically start running. |
1 |
GET_SHIELD |
Armour - will add amount to the current inventory level |
2 |
GET_SCUBA |
Airtank/scuba gear - will set the inventory level to amount. |
3 |
GET_HOLODUKE |
Holoduke - will set the inventory level to amount. |
4 |
GET_JETPACK |
Jet pack - will set the inventory level to amount. |
6 |
GET_ACCESS |
Access cards - bit status (on/off) of which cards the player has. The actor giving the player the card's palette determines which card to give the player. |
7 |
GET_HEATS |
Night vision goggles - will set the inventory level to amount. |
9 |
GET_FIRSTAID |
First aid - will set the inventory level to amount. |
10 |
GET_BOOTS |
Boots - will set the inventory level to amount. |
^ addkill
Adds 1 to the nearest players kill count..
^ addphealth param
Adds the value of param to the current player's, or the closest player's, health level.
^ addweapon weapon amount
Add the weapon given by weapon with the ammunition of amount to the current player's, or the closest player's, ammunition level. This will call a break if the ammunition level is full.
Look at the weapon section for more details.
^ ai
External
ai name action movement directions { directions }
Creates a new AI called name which uses the animation/action called action. The AI uses the parameter movement for its velocity, and its direction is set by the parameters directions (see the Directions section).
Internal
ai name
Makes the AI name the current actor's current AI.
^ betaname
I have no idea.
^ break
Stops processing code in the current actor or state.
^ cactor name
Change the current actor to the actor defined by name. This will use the current strength, movement, palette, size, action, and AI of the original actor, and ignore any of the initialization values of the new actor.
^ count param
Sets the current actors count to param.
^ cstat param
Changes the current status of the actor to that of param. This uses a 16 bit, unsigned integer value for param. To select multiple values, just add the values together. Look at the following for details.
Value |
Description |
1 |
blocking sprite (used for distances from other actors) |
2 |
translucent |
4 |
x-flipped |
8 |
y-flipped |
16 |
wall sprite (vertical) |
32 |
floor sprite (horizontal, I think it will ignore16|wall if this one is set) |
64 |
1-sided sprite |
128 |
real centering |
256 |
blocking sprite (use with hitscan / cliptype 1) |
512 |
translucence reversing (more translucent than 2|translucent, I think 2|translucent is ignored if this is set) |
1,024 |
reserved |
2,048 |
reserved |
4,096 |
reserved |
8,192 |
reserved |
16,384 |
reserved |
32,768 |
invisible (I think it will also make it unable to be hit) |
^ debris actor amount
Creates amount pieces of flying debris in the form of actor. The actors that I know that can be used are as follows.
Value |
Common name |
2,390 |
SCRAP6 |
2,400 |
SCRAP1 |
2,404 |
SCRAP2 |
2,408 |
SCRAP3 |
2,412 |
SCRAP4 |
2,416 |
SCRAP5 |
^ debug param
Prints the value of param to the output buffer.
If a standard game is loaded, with the default output buffer being used, it will print the value to the screen.
If output buffer is changed, e.g.; the command line of
"duke3d.exe -map test.map /q8 > test.log"
will change the output buffer to test.log, then the standard output will be sent to the new output buffer. If this is a file, then the file can be opened and read later, if it is a printer, it will be printed out etc..
^ define handle value
Defines the handle with the definition of the number given by value. This is a useful way of referencing the actor and values s by a descriptive name instead of by their number.
This is called externally.
^ definelevelname episode level map time1 time2 name
Parameter episode is the episode number that the map should be in (0 for the first episode, 1 for the second and 2 for the third).
Parameter level is the level number that the map should take (0 for the first level, 1 for the second and so on).
Parameter map is the file name of the map that you wish to use. This can not be more than thirteen characters - ie; eight characters for the name, a full stop, and the three character extension.
Parameter time1 is the par time. This can not exceed five characters (it uses the format of mm:ss, where mm is minutes and ss is seconds).
Parameter time2 is 3D Realms time. This can not exceed five characters (it uses the format of mm:ss, where mm is minutes and ss is seconds).
Parameter name is a null terminated string that contains the name of the level that you wish to use. This can not be greater than 32 characters in length.
This is called externally.
^ definequote value string
Changes the definition of the string referenced by value to that of the null terminated string given by string. This can be later called with the quote function to display the text on the players screen if they have messages enabled.
This is called externally.
^ definesound value file pitch1 pitch2 priority type volume
Defines the sound value with the following parameters.
file is a VOC (voice) or WAV (wave) file that the program will attempt to find to use for the sound.
I found that 8bit, 8000hz MONO sounds will work happily.
pitch1 and pitch2 are random pitch variations. These are signed (negative and positive).
priority sets the importance (the preferance of sounds if to many are available). It seems to be the higher the number the more important the sound. It also seems to be a 1 byte, unsigned number (0 to 255 inclusive).
type is the type of sound it is in the game - I can't be sure what the value mean, but they follow a pattern. Trial and error.
volume is the adjustment on the sound leve/volume/loudness that the sound should use. A negative number means louder, a positive number means softer. This seems to be a signed integer (-32767 to 32767 inclusive).
This is called externally.
^ else
Returns true if the last function returned false.
^ enda
Closes an actor function.
^ endofgame param
Ends the current volume. I am not sure what param should be, but the original con files use 52, and I use 51. Trial and error.
^ ends
Closes a state function
^ fall
Accelerates the actor downwards.
^ gamestartup
default_visibility - visibility of the game
generic_impact_damage - I have no idea
maximum_player_health_and_armour_level - maximum level of health and armour
start_armour_health - initial armour level
respawn_actor_time - time for an actor to respawn
respawn_item_time - time for an item to respawn
running_speed - speed that the player will run at, default is 53200, too high a value will cause the player to keep on sliding
rpg_blast_radius - blast radius of the RPG
pipebomb_blast_radius - blast radius of the pipebomb
shrinker_blast_radius - blast radius of the shrinker
tripbomb_blast_radius - blast radius of the tripbomb
morter_blast_radius - blast radius of the morters
bounce_mine_blast_radius - blast radius of the magnetic mine (sea mine)
seenine_blast_radius - blast radius of the C9 canisters
pistol_ammo - maximum ammunition of the pistol
shotgun_ammo - maximum ammunition of the shotgun
chaingun_ammo - maximum ammunition of the chaingun
rpg_ammo - maximum ammunition of the rpg
handbomb_ammo - maximum amount of pipebombs
shrinker_ammo - maximum ammunition of the shrinker
devistator_ammo - maximum ammunition of the devistator
tripbomb_ammo - maximum amount of tripbombs
freezer_ammo - maximum ammunition of the freezer
destructable_cameras - set to 1 if you wish security cameras to be destructable, or 0 if not
number_of_freeze_bounces - a value of 0 to 255 inclusive. This defines how many paths a blast from a freezer can follow. 0 means it doesn't go anywhere, 1 means it will last until it hits a wall or object, 2 means it will bounce once, 3 (default) will bounce twice, and so on.
freezer_hurt_owner - set to 1 if the freezer can hurt it's owner/thing that fired it, 0 if not
This function sets the initial values for the game, they can not be changed after they have been set.
This is called externally.
^ getlastpal
Changes the current actors palette back to its previous palette
^ globalsound param
Plays the sound param so that it can be heard at the same volume everywhere on the map.
^ guts param value
The current actor will create value amount of the actor param. It will normally spawn an actor, but in certain cases, they will use special effects instead. The actors that I know of are as follows.
Value |
Common name |
Brief Description |
1,520 |
DUKETORSO |
flying body part (Duke's upper torso) |
1,528 |
DUKEGUN |
flying body part (Duke's forearm and gun) |
1,536 |
DUKELEG |
flying body part (Duke's leg) |
1,768 |
HEADJIB1 |
flying body part (Liztroop's head) |
1,772 |
ARMJIB1 |
flying body part (Liztroop's arm) |
1,776 |
LEGJIB1 |
flying body part (Liztroop's leg) |
1,860 |
INNERJAW |
no image, causes damage to player if close enough |
2,201 |
LIZMANHEAD1 |
flying body part (Lizman's head) |
2,205 |
LIZMANARM1 |
flying body part (Lizman's arm) |
2,209 |
LIZMANLEG1 |
flying body part (Lizman's leg) |
2,245 |
JIBS1 |
flying internal body part |
2,250 |
JIBS2 |
flying internal body part |
2,255 |
JIBS3 |
flying internal body part |
2,260 |
JIBS4 |
flying internal body part |
2,265 |
JIBS5 |
flying internal body part |
2,286 |
JIBS6 |
flying internal body part |
^ hitradius rad max third half first
Makes the actor/weapon 1670 (RADIUSEXPLOSION) with a maximum radius of rad, using strength defined by the following four parameters.
The parameter max is the strength that will be used in the outermost quater (area) of the circle, ie; between the radius of 3*rad/4 and rad.
The parameter third is the strength that will be used in the second outermost quater (area) of the circle, ie; between the radius of rad/2 and 3*rad/4.
The parameter half is the strength that will be used in the second quater (area) of the circle, ie; between the radius of rad/4 and rad/2.
The parameter first is the strength that will be used in the first quater (area) of the circle, ie; between the centre/origin of the circle and rad/2.
^ ifaction name
Returns true if the current actor is using the action defined as name.
^ ifactioncount value
Returns true if the current animation has reached the frame number value.
^ ifactor value
Returns true if the current actor is the actor value.
^ ifactornotstayput
Returns true if the current actor has been activated. To activate an actor, it either activates immediately (such as 487 and 489) or it waits until it is spotted by, or has spotted the player.
^ ifai name
Returns true if the current actor is using the ai defined as name.
^ ifawayfromwall
Seems to return true when ever the current actor exists in two sectors at once, such as the boundary between two sectors, like the shore of a water sector, and a dry sector, or on the boundary of a two sectors joining at a ceiling and floor, such as the surface of two water sectors, one sector being above the surface, and the other below.
^ ifbulletnear
Seems to return true if there is a bullet or other projectile (that uses impact damage) near the current actor.
^ ifcansee
Seems to returns true if the current actor can see its target.
^ ifcanseetarget
Seems to returns true if the current actor can see its target. The target seems to be the player.
^ ifcanshoottarget
Seem to returns true if the current actor can shoot its target. The target seems to be the player.
^ ifceilingdistl param
Returns true if the distance between the current actor's centre and the ceiling is less than param.
^ ifcount param
Returns true if the current actor's local counter has reached param counts.
^ ifdead
Returns true if the current actor is dead. As far as I remember, the actor must have started with some strength to become dead. It sometimes seemed to also need to have ifhitweapon called before this function was called to work.
^ iffloordistl param
Returns true if the distance between the current actor's centre and the floor is less than param.
^ ifgapzl param
Returns true if the distance between the floor and ceiling of the current actor's location is less than param.
^ ifgotweaponce param
If param is set to 0, in multiplayer settings of cooperative and dukematch with no spawn, it will only let the player retrieve the weapon if they don't already have it.
If param is set to 1, in multiplayer settings of cooperative and dukematch with no spawn, the player may not retrieve it.
^ ifhitspace
Tests if the player (if it is the player actor (1405|APLAYER)) or the nearest player (if it is any other actor) is pressing the use key. The default key is the space bar.
^ ifhitweapon
Returns true if the current actor has been hit by some weapon. This does not check which weapon it was.
Look at the weapon section for more details.
^ ifinouterspace
Returns true if the actor is in a sector with a parallaxed, outer space (84-89 inclusive) texture surface. Not quite sure. Trial and error.
^ ifinspace
Returns true if the actor is in a sector with a parallaxed, space (80-89 inclusive) texture surface. Not quite sure. Trial and error.
^ ifinwater
Returns true if the actor is in a sector with a lotag of 2.
^ ifmove param
Returns true if the current actor is using the movement defined by param or was set with the same value as param.
^ ifmultiplayer
Returns true if it is a cooperative game.
^ ifnotmoving
Returns true if the current actor has stopped moving.
^ ifonwater
Returns true if the actor is in a sector with a lotag of 1 and is on/near the surface.
^ ifoutside
Returns true if the actor is in a sector with a parallaxed surface.
^ ifp { param }
Returns true if any of the parameters param are true.
Value |
Common name |
Brief description |
1 |
pstanding |
standing |
2 |
pwalking |
walking |
4 |
prunning |
running (needs the run key, auto run will not work) |
8 |
pducking |
ducking |
16 |
pfalling |
falling |
32 |
pjumping |
jumping |
64 |
phigher |
higher than current actor |
128 |
pwalkingback |
walking backwards |
256 |
prunningback |
running backwards |
512 |
pkicking |
kicking (needs to be weapon one, not quick kick) |
1,024 |
pshrunk |
smaller than the normal size by a certain amount |
2,048 |
pjetpack |
using a jetpack |
4,096 |
ponsteroids |
using steroids |
8,192 |
ponground |
on the ground/surface (this includes anything that can be stood on, including solid sprites) |
16,384 |
palive |
alive (not dead) |
32,568 |
pdead |
dead (not alive anymore) |
65,536 |
pfacing |
looking at the current actor |
^ ifpdistl value
Returns true if the closest player's distance to the current actor is less than value.
^ ifpdistg value
Returns true if the closest player's distance to the current actor is greater than value.
^ ifphealthl value
Returns true if the current player's, or the closest player's health is less than or equal to value.
^ ifpinventory param value
This is a function that is commonly misdiscribed, where it is thought of as "return true if inventory param is less than value. This is incorrect.
This real use of this function is as follows.
param is the inventory item that is to be tested. To test the access cards, the current actor has to be the same palette as the access card that you wish to test. 0 for blue, 21 for red, and 23 for yellow, the same as giving the player a coloured access card.
value is the amount to test.
The function will return true when the inventory param is not equal to the amount value.
It does not test a less than, it tests a not equal to.
In the original con files, you can't tell this as it appears to be a test if it is less than, but it is really testing a not equal to.
If you want to test if the player has a given amount of inventory, then you can use the following code.
ifpinventory param value { } else { Enter the code if that you want here }
The following is an example, that was pulled out of NW3TC v1.3. The TC also contains many other longer example of this type of function (about 1000 lines or so), to control the flame-thrower's fuel, the credit clips, and the buying/purchasing, as well as the persuading. This is the code for the blue flag in capture the flag games, that checks whether the player is the other team (gives them the red flag) or its own team (takes the red flag away). The sections that are not necessary have been removed.
ifpdistl FLAG_CAPTURE_DIST ifhitspace // close enough and hitting space
{ ifpinventory GET_FIRSTAID 2 { } else // is the team red { addinventory GET_FIRSTAID 4 quote 163 } // if so, give flag
ifpinventory GET_FIRSTAID 3 { } else // is the team blue and has flag
{ addinventory GET_FIRSTAID 1 // take the red flag away
quote 164 // and tell them they have scored
}
}
^ ifrespawn
Seems to test that if the actor calling the function is an item, and the item respawning is enabled, it will return true, r if it is an AI actor, and monster respawn is enabled, it will also return true, otherwise it will return false.
^ ifrnd param
Has a param in 256 (param/256) chance of returning true. Use this for random events.
^ ifspawnedby value
Returns true if the current actor was spawned by an actor of type value.
^ ifspritepal value
Returns true if the actor's current palette is that of value.
^ ifsquished
Returns true if the actor has been squished by being shrunken in size and too close to another actor, by being in a space to small exist in, teleporting to a killer shaped sector, or in a squishing sector.
^ ifstrength value
Returns true if the current actor has value amount or less strength left.
^ ifwasweapon param
Returns true if the current actor has been hit by the weapon param. It is best to call this after ifhitweapon, to let it function properly
Look at the weapon section for more details.
^ include file
Includes the contents of the file file into the location where this function is called when it is being compiled.
^ killit
"Kills" the current actor. Removes the actor from the game.
^ lotsofglass value
The actor creates value amount of glass pieces, like that of a shattered glass pane.
^ mikesnd
"Plays the sound assigned to the microphone sprite in Build (the microphone sprite's hitag is the sound number to be played)."
This was from The Duke Nukem 3D Con Editing FAQ. I haven't used this yet.
^ money number
The actor will drop number amount of notes (money), which will float to the ground.
^ move
External
move movement [ speedxy [ speedz ] ]
Assignes the handle movement the horizontal velocity speedxy and the vertical velocity speedz.
Internal
move movement | [ speedxy [ speedz ] ] [ { directions } ]
Activates either the the handle movement or the the horizontal velocity speedxy with the vertical velocity speedz, using the optional directions if available. (see the Directions section)
^ music param { file }
Sets the MIDI music for the game.
param sets the location of the file (into/ending/volume number).
file sets the MID (MIDI) file that is to be used.
If param is 0, then the first file it comes across will be the introduction music, the second file will be the ending/closing music.
If param is 1, then it will define the music for volume 1, if it is 2, then for volume 2, and if it is 3, it will set the music for volume 3.
if param is 1,2 or 3, then the parameters of file that it comes across will be used for each level starting from level 1 of the current volume and increase with each new file.
^ operate
When this function is called, if a door is close enough to the current actor, it will open. This seems to work on swinging doors only.
^ palfrom [ intensity [ red [ green [ blue ] ] ] ]
The current screen palette of the current player, or closest player, will start from the palette with the parameters of red, green, and blue mixed in with an intensity of parameter intensity, and drop one level of intensity per count. The default values of each parameter is 0. For maximum colour or intensity, use 64. Using a negative number is treated as 0, using a number greater than 64 can be used for special effects as the palette spills into another region.
^ pkick
The current player, or the closest player, will do a quick kick.
^ pstomp
The current players, or the nearest player view will swing down, and the nearest actor will be squished. The player's view will then swing back to normal again.
^ quote value
The function will output the quote already defined by value on the players view. definequote is used to define the string to the value.
^ resetactioncount
Sets the action counter to 0.
^ resetcount
Sets the actor's local counter to 0.
^ resetplayer
In multiplayer games, it will return the player to a starting location, give them the default weaponry, the starting amour level, and the starting health level, and then lets them run around again.
In single player games, it will restart the map.
^ respawnhitag
This function will activate any 9 (RESPAWN) actors who have the same lotag as the current actor's hitag.
^ shoot param
Shoots/fires/ejects the projectile/shootable item given by param.
Look at the weapon information at the top of this file for more details.
^ sizeto x y
Change the size to x,y over a period of time. I think it changes it to x,y, it may be relative though. Trial and error.
^ sound param
Plays the sound param as a local sound.
^ soundonce param
Plays the sound param as a local sound, but it will can be played again until it has finished.
^ spawn value
Creates the actor with number value.
^ spritepal value
Changes the current actors image palette to that of the palette value.
^ state handle
External
Creates a function called handle, that can contain more information. This has to be closed with the ends function.
Internal
Calls the predifined state called handle, it is just treated as a function.
^ stopsound param
Stops the sound param from playing.
^ strength value
Changes the current actors strength to that of value.
^ tip
Starts the current player's, or the closest player's, animation routine.
^ wackplayer
Tilts the players viewpoint (tilts their head).
^
4 DirectionsThe actor seems to see if it will end in a water sector at the end of
its movement, and if so, it will treat the boundry of the water and the dry sector as a
wall. It can be useful to stop them from walking into the water. It might also stop them
from jumping into the water, but I am not sure.
Value |
Common name |
Description |
1 |
faceplayer |
faces the player. |
2 |
geth |
travels in a horizontal direction. |
4 |
getv |
travels in a vertical direction. |
8 |
randomangle |
faces a random angle when ever it touches a wall or is shot at. This seems to only face random angles when the actor is an actor such as a monster, not an item or object. |
16 |
faceplayerslow |
faces the player a bit slower than 1 (faceplayer) |
32 |
spin |
spins in circles |
64 |
faceplayersmart |
faces slightly towards where the player is heading |
128 |
fleeenemy |
faces directly away from the player |
257 |
jumptoplayer |
attempts to jump |
512 |
seekplayer |
trys to find the player |
1,024 |
furthestdir |
faces the furthest distance from the closest player |
2,048 |
similar to 8 (randomangle), except that once it is called, if it spins or faces another angle and returns to using this value, it will go back to using the angle that this value last used, unless the cause for the change in angle was bumping into a wall or being shot at. This seems to only face random angles when the actor is an actor such as a monster, not an item or object. |
|
4,096 |
dodgebullet |
attempts to avoid a projectile nearby |
^
5 Weaponsnumber is the tile/actor number, name is the original name assigned to the actor, shoot refers to if the actor is able to be created using the shoot funtion, hit refers to if the weapon can be tested with ifwasweapon, strength refers to if the actor has a strength value or not. The actors strength is the amount of damage that it will cause. Asterixes mean that the note should be used, otherwise the note is a general note about the actor.
The second table is the listing for the players weapon inventory.
Number |
Name |
Shoot |
Hit |
Strength |
Notes |
26 |
HEAVYHBOMB |
no |
no |
yes |
*creates 1670 damage |
916 |
FIREEXT |
no |
yes |
yes* |
*preset strength |
940 |
BOUNCEMINE |
yes |
no |
yes |
*creates 1670 damage |
1,360 |
COOLEXPLOSION1 |
yes |
yes |
yes |
|
1,625 |
FIRELASER |
yes |
yes |
yes |
|
1,636 |
SPIT |
yes |
yes |
yes |
|
1,641 |
FREEZEBLAST |
yes |
yes |
yes |
|
1,642 |
DEVISTATORBLAST |
no |
no |
yes |
uses 2605 code, *creates 2605 damage |
1,646 |
SHRINKSPARK |
yes |
yes |
yes |
|
1,650 |
MORTER |
yes |
no |
yes |
*creates 1670 damage |
1,670 |
RADIUSEXPLOSION |
no* |
yes |
yes* |
*use hitradius or other weapon |
2,296 |
BLOODSPLAT1 |
yes |
no |
no |
|
2,297 |
BLOODSPLAT2 |
yes |
no |
no |
|
2,298 |
BLOODSPLAT3 |
yes |
no |
no |
|
2,299 |
BLOODSPLAT4 |
yes |
no |
no |
|
2,521 |
KNEE |
yes |
yes |
yes* |
*adds rnd(5)+1 |
2,536 |
CHAINGUN |
yes |
no |
yes* |
uses 2595 code, *adds rnd(5)+1 |
2,566 |
TRIPBOMB |
no |
no* |
yes |
*creates 1670 damage |
2,595 |
SHOTSPARK1 |
yes |
yes |
yes* |
code can be modified, *adds rnd(5)+1 |
2,605 |
RPG |
yes |
yes |
yes* |
*doubles damage for direct hits |
2,613 |
SHOTGUN |
yes |
no |
yes* |
uses 2595 code, adds rnd(5)+1 |
Number |
Common Name |
0 |
KNEE_WEAPON |
1 |
PISTOL_WEAPON |
2 |
SHOTGUN_WEAPON |
3 |
CHAINGUN_WEAPON |
4 |
RPG_WEAPON |
5 |
HANDBOMB_WEAPON |
6 |
SHRINKER_WEAPON |
7 |
DEVISTATOR_WEAPON |
8 |
TRIPBOMB_WEAPON |
9 |
FREEZE_WEAPON |
^
6 Interesting notes
Actor 1890 (EXPLOSION2) has a very interesting effect. When it is
created, on it's very first count it will produce light. This can be used to create
lighting effects. This is just one of the actors that has a very useful effect that is
worth pointing out.
If actor 3400 (BLIMP) uses the debris funtion, it will through out the
weaponry, ammunition and inventory actors instead of the debris actors.
If actor 100 (ATOMICHEALTH) uses the addphealth function, it is able to
raise the health above the players normal health limit.
When actor 3999 (FRAMEEFFECT1) is spawned, it will take the image of the
actor that spawned hit, and then disappear. This can be used to make a blurred image.
If you remove an actors image from the art file, they can not be
spawned, and BUILD will replace them with actor 0 (the brick wall). I am not sure what
happens if you remove the brick wall though.
Removing the defines from your confiles and replacing all the names with
their corresponding numbers will increase the loading time of D3D. The pauses during
loading are from either loading the multimedia drivers, reading the definitions, and any
external factor such as pressing pause, or the hard drive/cdrom/modem working over time in
the background.
^
7 The if structureThis is a discription of the structure of the if statments. This derived
from what was is commonly thought to be a big bug, but proves that if you had any idea of
programming or simple logic (what women say we men have none of) you could clearly see
that it is correct.
The misconception is that people think a statement such as
ifcansee
ifai
AIDUKEWANTTOSTOMP { }else ai AIDUKEWANTTOSTOMP
is a bug because they think that it should be equal to
ifcansee
{
ifai
AIDUKEWANTTOSTOMP { }else ai
AIDUKEWANTTOSTOMP}
The misconception in this is that these are two different structures. These are not the same because if you no how these functions work in conjunction with each other, you will find that two consequetive if statements are equal to an if-and-if statement,
ie: "if this is true and if that is true"
In pseudo code the first structure is
IF cansee AND IF ai is
AIDUKEWANTTOSTOMPdo nothing
ELSE
ai
AIDUKEWANTTOSTOMPENDIF
and in C it would be
if(!cansee||ai!=AIDUKEWANTTOSTOMP)
ai=AIDUKEWANTTOSTOMP;
When writing the con files, it would be better to write the first
structure as follows
ifcansee ifai
AIDUKEWANTTOSTOMP { }else ai AIDUKEWANTTOSTOMP
The second structure in pseudo code is actually
IF cansee
IF ai is
AIDUKEWANTTOSTOMPdo nothing
ELSE
ai
AIDUKEWANTTOSTOMPENDIF
ENDIF
and in C it is
if(cansee)
if(ai!=AIDUKEWANTTOSTOMP)
ai=AIDUKEWANTTOSTOMP;
This structuring of the if statement is not incorrect.