• Work continues

General Info
Main Page
Latest News
Schedule
What is it?
About Matt
About This Site

Duke Enhancements
Latest Features
Older Features
Cheat Codes

Duke Insider
Language Basics
Compile Time
Room over Room
Player Structures
UserDef Explanations

More Information
Features Database
E Duke Forum

WW2GI Enhancements
Variables
Weapon Changes
Weapon Settings
System Variables
Events
All

Older Features

Features as of 06/20/00.   Newer features are on the features page.

Build 23 (06/20/00)

Build Source is release by Ken!

http://www.advsys.net/ken/buildsrc/default.htm

(Note that this is NOT the Duke Source)

Changes:

Saved files were not being detected correctly on initialization.

esample.con changed to only show 'user' level-load screen when a user map is being loaded

Previous Build Notes

Build 22 (06/19/00)

Added /Z1 flag to disable Reverb. It is enabled by default.

Build 21 (06/19/00)

Add 'reverb' bug fix from Ken.

Fix 'load games' hanging

Fix expander shooting

Known bugs:

1) pistol firing animation shows one frame too many

Build 20 (06/18/00)

Increase maximum sounds from 450 to 900

 

Build 19 (06/17/00)

More corrections to weapon behavior.

Known bugs:

1) pistol firing animation shows one frame too many

2) expander doesn't show projectile

3) firing freeze doesn't update the ammo count in the small display

Build 18 (06/17/00)

All default weapons to work basically like Duke's (per email from Photon Man)

Build 17 (06/17/00)

Slow down pistol fire rate (default weapon settings)

Build 16 (06/11/00)

Added variable

myconnectindex

player ID of 'local' player

screenpeek

player ID of player view shown on local screen (not always same as myconnectindex)

Added commands

addvar

addvarvar

To compliment subvar and subvarvar

Added

ifvarvarn, ifvarn

if var not equal

to compliment ifvare, l and g

 

Build 15 (04/29/00)

Ah, weekends...

Added more global variables. These ones are per-sprite, so I've just added them to the sprite labels.

They are from the global hittype structure. They duplicate some of the names from the sprite data, so I've prefixed them all with 'ht'

They are:

htcgg
Control when to get new globalz data. Set to 6 after data is calculated and counted down after that.
Initialized to zero.

htpicnum
The picture number.
This is what is compared when checking to see 'ifwasweapon' and 'ifspawnedby'

htang
angle used sometimes instead of sprite's angle.

htextra
Varius uses depending on state...
Seems related to amount of damage
. -1 if no damage to process.

htowner
Set to sprite's owner. set to who 'caused' damage

htmovflag
Saved results from trying to move the sprite.
ifnotmoving checks for : (hittype[g_i].movflag&49152) > 16384 );

httempang
varied uses depending on instance.
set to old pal when 'spritepal'

htactorstayput
-1 means stay.
>=0 means sector ID to stay in.
set for current actor when you call addkills

htdispicnum
Set to -4 to don't show shadows on actors.

httimetosleep
if >1, then this is counted down.
When it reaches 1, the sprite is changed to statlist 2 (active)
set by many things internally.
Directly set by 'sleeptime'

htfloorz
htceilingz
set when cgg <=0. Current sectors information.

htlastvx
htlastvy
Where target player was last known to be.
Used in 'seeking' player.

htbposx
htbposy
htbposz
'bob' position???

gt[0]
moving angle used to calculating 'turning towards player', etc.
set directly by 'count' command.
Checked by 'ifcount' command

gt[1]
The moveptr. What movement isdesired. (from move command)

gt[2]
The action counter. used by ifactioncount.

gt[3]
temp used in processing of action

gt[4]
The current action to perform. (from move command) (and action command)
if > 0 then action is counted and performed. and lotag is incremented by TICSPERFRAME

gt[5]
The current AI id


Build 14 (04/29/00)

Fixed bug in SQRT, findnearactor that caused mis-interpret internally.

Added espawnvar. Works like espawn, but takes a VAR argument.

Added access to global data structure USERDEFS. This is used for lots of control over how the game works.

Structure:


typedef struct user_defs
{
    char god,warp_on,cashman,eog,showallmap;
    char show_help,scrollmode,clipping;
    char user_name[MAXPLAYERS][32];
    char ridecule[10][40];
    char savegame[10][22];
    char pwlockout[128],rtsname[128];
    char overhead_on,last_overhead,showweapons;

    short pause_on,from_bonus;
    short camerasprite,last_camsprite;
    short last_level,secretlevel;

    long const_visibility,uw_framerate;
    long camera_time,folfvel,folavel,folx,foly,fola;
    long reccnt;

    int32 entered_name,screen_tilting,shadows,fta_on,executions,auto_run;
    int32 coords,tickrate,m_coop,coop,screen_size,lockout,crosshair;
    int32 wchoice[MAXPLAYERS][MAX_WEAPONS],playerai;

    int32
respawn_monsters,respawn_items,respawn_inventory,recstat,monsters_off,bright
ness;
    int32
m_respawn_items,m_respawn_monsters,m_respawn_inventory,m_recstat,m_monsters_
off,detail;
    int32
m_ffire,ffire,m_player_skill,m_level_number,m_volume_number,multimode;
    int32 player_skill,level_number,volume_number,m_marker,marker,mouseflip;

};


  

Some of these are self-explanatory.

m_ prefix means multi-player.

As with the other structures, there isn't currently access to the member vars that are arrays.

This is almost the last structure that needs to get 'published' to allow almost complete control from CONs.

I'll document what some of these members do a little later.

Have fun.


Build 13 (04/26/00)

Add SQRT command:

sqrt [invar] [outvar]

Puts sqrt([invar]) into [outvar])

Fixed bug in get/setplayer that may have been cause other player's data to get set.

And the biggie:

Added eventloadactor

eventloadactor [tile]
{
}
  

Works like 'useractor', but only takes tile number. Code is executed when actor is first loaded into the map.

sizeat should work here....

I'll probably need to expand it to deal with spawn(), too (it currently doesn't)


Build 12 (04/14/00)

Another big update.

You can now use THISACTOR to get the actor ID of the current actor (read-only)

Also:
getplayer
setplayer

These allow direct control of player-specific data.

You can get the current player by using THISACTOR as the index.

This is another big step in allowing CONs to have complete control over the action.

My goal is to be able to have all of the weapon processing code moved into the CONs.

There are a TON of player variables. Here's a (long) list:


zoom
exitx
exity
loogiex[64]
loogiey[64]
numloogs
loogcnt
posx
posy
posz
horiz
ohoriz
ohorizoff
invdisptime
bobposx
bobposy
oposx
oposy
oposz
pyoff
opyoff
posxv
posyv
poszv
last_pissed_time
truefz
truecz
player_par
visibility
bobcounter
weapon_sway
pals_time
randomflamex
crack_time
aim_mode
ang
oang
angvel
cursectnum
look_ang
last_extra
subweapon
ammo_amount[MAX_WEAPONS]
wackedbyactor
frag
fraggedself
curr_weapon
last_weapon
tipincs
horizoff
wantweaponfire
holoduke_amount
newowner
hurt_delay
hbomb_hold_delay
jumping_counter
airleft
knee_incs
access_incs
fta
ftq
access_wallnum
access_spritenum
kickback_pic
got_access
weapon_ang
firstaid_amount
somethingonplayer
on_crane
i
one_parallax_sectnum
over_shoulder_on
random_club_frame
fist_incs
one_eighty_count
cheat_phase
dummyplayersprite
extra_extra8
quick_kick
heat_amount
actorsqu
timebeforeexit
customexitsound
weaprecs[16]
weapreccnt
interface_toggle_flag
rotscrnang
dead_flag
show_empty_weapon
scuba_amount
jetpack_amount
steroids_amount
shield_amount
holoduke_on
pycount
weapon_pos
frag_ps
transporter_hold
last_full_weapon
footprintshade
boot_amount
scream_voice
gm
on_warping_sector
footprintcount
hbomb_on
jumping_toggle
rapid_fire_hold
on_ground
name[32]
inven_icon
buttonpalette
jetpack_on
spritebridge
lastrandomspot
scuba_on
footprintpal
heat_on
holster_weapon
falling_counter
gotweapon[MAX_WEAPONS]
refresh_inventory
palette
toggle_key_flag
knuckle_incs
walking_snd_toggle
palookup
hard_landing
max_secret_rooms
secret_rooms
pals[3]
max_actors_killed
actors_killed
return_to_center

  

As of this build, the array-based variables are not supported.

In addition, palette is not supported (it's a pointer...)


Build 11 (04/05/00)

findnearactorxx changes

  • bug fixed in findnearactor that cause infinite loop

  • Changed to search ALL actors, not just those in same sector

Added espawn

This is just like spawn, but returns the actor ID in the var RETURN


Build 10 (04/04/00)

findnearactor <type> <maxdist> <actorID>
findnearactorvar <type> <maxdistvar> <ActorID>

This gets the sprite ID of the nearest actor (sprite) of type type into <ActorID>. If none are found, then <var> will be -1

This currently only searches the current sector while looking.

And then we have:

setactorvar[<actorID>].<avar> <var>
getactorvar[<actorID>].<avar> <var>

These get and set  the per-actor variables <avar> belonging to the actor <actorID> to/from <var>

You can safely pass an <actorID> of -1, but nothing will get set; You'll probably want to check for that case in your code anyway...

This is a bit complicated. You should have seen the processing code.... I almost got a headache :)

These should allow easy inter-actor communication.

You can get <actorID> from other places (like .owner). These actorIDs never change unless the actor dies. (they are set when the actor is spawned...)

So, you can save the actorID across calls in a variable.... That should make for some fun stuff...

Build 09 (03/03/00)

 

  • Access to Wall, Sector and Actor (sprite) structures

  • Access to 'ME' actor and sector



Syntax:

getwall[<var>].member <var2>

Gets the value of the member of the wall structure into var2

setwall[<var>].member <var2>

setactor
getactor
setsector
getsector

WARNING: no error checking or game checking is (currently) done on
the settings. You can easily set things that can cause the game to crash.


Structures:

SECTOR:

wallptr
wallnum
ceilingz
floorz
ceilingstat
floorstat
ceilingpicnum
ceilingheinum
ceilingshade
ceilingpal
ceilingxpanning
ceilingypanning
floorpicnum
floorheinum
floorshade
floorpal
floorxpanning
floorypanning
visibility
filler
lotag
hitag
extra

WALL:

x
y
point2
nextwall
nextsector
cstat
picnum
overpicnum
shade
pal
xrepeat
yrepeat
xpanning
ypanning
lotag
hitag
extra

SPRITE (ACTOR):

x
y
z
cstat
picnum
shade
pal
clipdist
filler
xrepeat
yrepeat
xoffset
yoffset
sectnum
statnum
ang
owner
xvel
yvel
zvel
lotag
hitag
extra


Build 08 (02/01/00)

  • Testing Team expanded

  • lockplayer required an unused third parameter.

  • multiplayer game names still had WW2GI names (GI Match, etc)


Build 07 (01/24/00)

  • bug fix to processing of ifvarvar? commands.   Optional else parsing was not correct and caused script to go into space.

  • MAJOR bug in processing of gamevar.  It was using "initial value" for 'flags'.  This caused per-actor and per-player variables to, well, not be. 

Special thanks to Veldrik for helping me find these bugs.

 


Build 06 (01/23/00)

  • control names back to Duke names

  • ifp prunning should return TRUE for both RUN and auto-run (113)

  • numerous CON commands added:

mulvar <VAR1> <value>
    <VAR1> = <VAR1> * <value>
mulvarvar <VAR1> <VAR2>
    <VAR1> = <VAR1> * <VAR2>
    multiplication with result in <VAR1>

divvar <VAR1> <value>
    <VAR1> = <VAR1> / <value>
divvarvar <VAR1> <VAR2>
    <VAR1> = <VAR1> / <VAR2>
    division with result in <VAR1>

modvar <VAR1> <value>
    <VAR1> = <VAR1> % <value>
modvarvar <VAR1> <VAR2>
    <VAR1> = <VAR1> % <VAR2>
    modulo (remainder) with result in <VAR1>

andvar <VAR1> <value>
    <VAR1> = <VAR1> & <value>
andvarvar <VAR1> <VAR2>
    <VAR1> = <VAR1> & <VAR2>
    logical AND with result in <VAR1>

orvar <VAR1> <value>
    <VAR1> = <VAR1> | <value>
orvarvar <VAR1> <VAR2>
    <VAR1> = <VAR1> | <VAR2>
    logical OR with result in <VAR1>

getplayerangle <VAR>
setplayerangle <VAR>
    gets and sets the current player's angle

lockplayer <VAR>
    locks the player movement for <VAR> count. This is the same as 'transporter hold' where the player can't move for a while after moving through a transporter.


Build 05 (2.00.05) (01/14/00)

  • re-enabled all Duke cheats (some were disabled in WW2GI) (names are still WW2GI names (ie, 'blood' for Duke's 'stuff')

  • change cheat pre-fix to 'MS' instead of 'WW' (it's 'DN' for Duke 1.x)o Set weapon defaults back to Duke defaults

  • Set save-game default name to be different from Duke saved games so that they don't conflict.

  • fixed bug with setvarvar if second var was read-only

  • fix bug with ifsound not processing 'else'

 

New Commands:

getangletotarget <VAR>
setactorangle <VAR>
getactorangle <VAR>

These allows, 'facetarget', by calling:

getangletotarget ANGLE
setactorangle ANGLE

Since the angle is not directly set by a 'face target'-like command, the CON programmer has control over how fast the actor can face the player. The actor can also face AWAY from the target by adding 1024 to the angle.

Future commands will also allow more usage of these commands... ('facewall' is next. This will probably be 'getangletowall', or something...)

 


Build 04 (01/10/00)

   gettexturefloor
gets the texture (tile #) of the sector of the current actor into 'TEXTURE'

    gettextureceiling
gets the texture (tile #) of the sector of the current actor into 'TEXTURE'

    gettexturewall
gets the texture (tile #) of the nearest wall to the current actor into 'TEXTURE'
NOT YET IMPLEMENTED. YOU WILL GET A COMPILE ERROR IF YOU TRY TO USE.

    starttrack <value>
Starts the track playing. This is the list for this episode (volume). Tracks are specified by the 'music' command. The value is the offset into the list to use.  This is zero based (ie, zero is the first midi file listed)

    randvar <var> <value>
generates a random number from 0 to <value> and places it into <var>    

Default CON defaults to 'eduke.con'.  If this is not found, then it tries older 'game.con'.  This allows 'enhanced' CONs to co-exist with un-modified Duke CON


Build 03 (01/08/00)

   spgetlotag
gets the current sprite's (actor) lotag into the variable LOTAG

   spgethitag
gets the current sprite's (actor) hitag into the variable HITAG

   sectgetlotag
gets the current sector (where the actor current is located) into the variable LOTAG

   sectgethitag
gets the current sector (where the actor current is located) into the variable HITAG

    ifsound <sound>
    checks to see if sound is currently playing