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