Category:Gamevar manipulation

From EDukeWiki
Jump to navigation Jump to search

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.

Keep in mind that global variables are still global, even when defined within a state block. The variable definition is effectively "hoisted," so the variable will not be reset to the initial value each time its definition is encountered.

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

Flags

The following table shows all currently defined gamevar flags. The first 2 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).


Exposed Value Hex Label Description
Yes 1 0x00000001 GAMEVAR_PERPLAYER Per-player variable.
Yes 2 0x00000002 GAMEVAR_PERACTOR Per-actor variable.
3 0x00000003 GAMEVAR_USER_MASK Bitmask controlling what flags can be set from con; only flags less than this can.
Internal 8 0x00000008 GAMEVAR_RESET
256 0x00000100 GAMEVAR_DEFAULT Allow override (not used, but always cleared for user-defined gamevars).
512 0x00000200 GAMEVAR_FLAG_SECRET Don't dump... (no longer defined in eduke32 source code as of r10016)
Yes 1024 0x00000400 GAMEVAR_NODEFAULT Don't reset on actor spawn. Useful if you want a variable to be set once you start the game (otherwise it's reset each time you start a new game).
2048 0x00000800 GAMEVAR_SYSTEM Cannot change mode flags...(only default value)
4096 0x00001000 GAMEVAR_READONLY Values are read-only (no setvar allowed)
8192 0x00002000 GAMEVAR_INT32PTR plValues is a pointer to an int32_t
16384 0x00004000 GAMEVAR_FLAG_SYNCCHECK check event sync when translating (no longer defined in eduke32 source code as of r10016)
32768 0x00008000 GAMEVAR_INT16PTR plValues is a pointer to a short
Yes 131072 0x00020000 GAMEVAR_NORESET Variable values are not reset when restoring map state
262144 0x00040000 GAMEVAR_SPECIAL Flag for structure member shortcut vars
Yes 524288 0x00080000 GAMEVAR_NOMULTI Don't attach to multiplayer packets
1048576 0x00100000 GAMEVAR_Q16PTR plValues is a pointer to a q16.16
Yes 2097152 0x00200000 GAMEVAR_SERIALIZE Write into permasaves