Category:Gamevar manipulation

From EDukeWiki
Revision as of 09:25, 8 February 2020 by Doom64hunter (talk | contribs) (→‎Gamevar Flags: Updated gamevar flag list to current information taken from source code definitions and comments. It seems to be possible to assign, for instance, the read-only flag to user-defined gamevars, so contrary to what the page stated, flags > 2 can be assigned in CON)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Definition

gamevar <varname> <value> <flags>

var <varname> <value> <flags>

A gamevar is a variable that can be used to store numerical data which can then be referenced between actors, states and events. var is hereby semantically equivalent to gamevar.

The gamevar's flags define a bitmap that determines how the variable is treated by the game. For instance, a gamevar with flags of 0 is known as a global variable. A global variable exists once in the code, and any time a global variable is set, the new value is seen by all actors and events. A gamevar with flag bit 1 set is a per-player variable, which exists once for each player in the game. A gamevar with flag bit 2 set is a per-actor variable, which exists as many times in the code as there are sprites in the map. This means that each sprite has its own copy of a per-actor variable stored in memory. Note that a gamevar can only be defined as either global, per-player, or per-actor, but not as a combination thereof.

Gamevars are stored as signed 32-bit integers and therefore have a value range of -2.147.483.648 (-231) to 2.147.483.647 (231-1). Going above and below this range causes the value to overflow and underflow respectively.

Note that it is possible to omit the <value> and <flags> parameters entirely to define a global variable with an initial value of 0, with no other flags set. Example:

var TEMP1

It is also possible to chain flags separately at the end of the gamevar definition, instead of compiling them into a single value, as follows:

var TEMP2 10 1 4096    // This defines a per-player (1), read-only (4096) variable with initial value 10.

The following pages contain information on basic gamevar operations as well as conditional statements:

Gamevar Flags

The following table shows all currently defined gamevar flags. The first 3 are the only ones needed under normal circumstances, but one can also assign higher flags to user-defined gamevars (given that you know what you are doing).

Name Number Hex Description Page where such variables should be listed
GAMEVAR_GLOBAL 0 0x000000 global variable; this is the default
GAMEVAR_PERPLAYER 1 0x000001 per-player variable
GAMEVAR_PERACTOR 2 0x000002 per-actor variable
GAMEVAR_RESET 8 0x000008 Internal, don't use.
GAMEVAR_DEFAULT 256 0x000100 unused, but always cleared for user-defined gamevars
GAMEVAR_NODEFAULT 1024 0x000400 Don't reset on actor spawn
GAMEVAR_SYSTEM 2048 0x000800 cannot change mode flags...(only default value)
GAMEVAR_READONLY 4096 0x001000 values are read-only (no setvar allowed)
GAMEVAR_INT32PTR 8192 0x002000 plValue is a pointer to an int32_t Constantly updated gamevars
GAMEVAR_FLOATPTR 16384 0x004000 plValue is a pointer to a float Constantly updated gamevars
GAMEVAR_INT16PTR 32768 0x008000 plValue is a pointer to a short (int16_t) Constantly updated gamevars
GAMEVAR_CHARPTR 65536 0x010000 plValue is a pointer to a char Constantly updated gamevars
GAMEVAR_NORESET 131072 0x020000 var values are not reset when restoring map state
GAMEVAR_SPECIAL 262144 0x040000 flag for structure member shortcut vars
GAMEVAR_NOMULTI 524288 0x080000 don't attach to multiplayer packets
GAMEVAR_Q16PTR 1048576 0x100000 plValues is a pointer to a q16.16
GAMEVAR_SERIALIZE 2097152 0x200000 write into permasaves