Category:Gamevar manipulation: Difference between revisions

From EDukeWiki
Jump to navigation Jump to search
Updated according to the latest available snapshot
Fox (talk | contribs)
No edit summary
(17 intermediate revisions by 7 users not shown)
Line 1: Line 1:
A gamevar is a game variable that can be used to store numerical data which can then be referenced between [[actor]]s.
== Definition ==
'''gamevar''' <varname> <value> <flags>


The syntax for defining a gamevar is 'gamevar <varname> <value> <flags>'
'''var''' <varname> <value> <flags>


A gamevar's flags determine how it is referenced by the game.  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 [[actor]]s.  A gamevar with flags of 1 is a per-player variable.  Per-player variables exist once per player in the game, with each player having their own copy of the variable.  A gamevar with flags of 2 is a per-[[actor]] variable.  A per-[[actor]] variable exists as many times in the code as there are [[sprite]]s in the map. Each [[sprite]] has its own copy of a per-[[actor]] variable in memory.
A gamevar is a variable that can be used to store numerical data which can then be referenced between [[actor]]s, [[state]]s and [[event]]s. '''var''' is hereby semantically equivalent to '''gamevar'''.


{| {{prettytable}}
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 [[actor]]s and [[event]]s.  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 [[sprite]]s 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.'''
!Name!!Number!!Description!!Page where such variables should be listed
|-
|GAMEVAR_FLAG_GLOBAL||0||global variable; this is the default||
|-
|GAMEVAR_FLAG_PERPLAYER||1||per-player variable||
|-
|GAMEVAR_FLAG_PERACTOR||2||per-actor variable||
|-
|GAMEVAR_FLAG_USER_MASK||3||bitmask controling what flags can be set from con||
|-
|GAMEVAR_FLAG_DEFAULT||256||allow override||
|-
|GAMEVAR_FLAG_SECRET||512||don't dump...||
|-
|GAMEVAR_FLAG_NODEFAULT||1024||don't add to 'default' array.||
|-
|GAMEVAR_FLAG_SYSTEM||2048||cannot change mode flags...(only default value)||
|-
|GAMEVAR_FLAG_READONLY||4096||values are read-only (no setvar allowed)||
|-
|GAMEVAR_FLAG_INTPTR||8192||plValue is a pointer to an int||[[Constantly updated gamevars]]
|-
|GAMEVAR_FLAG_SYNCCHECK||16384||check event sync when translating||
|-
|GAMEVAR_FLAG_SHORTPTR||32768||plValue is a pointer to a short||[[Constantly updated gamevars]]
|-
|GAMEVAR_FLAG_CHARPTR||65536||plValue is a pointer to a char||[[Constantly updated gamevars]]
|-
|GAMEVAR_FLAG_NORESET||131072||var values are not reset when restoring map state||
|}


All of the commands in this category are commands that alter the value of one or more gamevars in some way, as opposed to commands which alter [[sprite]]s, [[sector]]s or [[wall]]s.
Gamevars are stored as '''signed 32-bit integers''' and therefore have a value range of ''-2,147,483,648 (-2<sup>31</sup>)'' to ''2,147,483,647 (2<sup>31</sup>-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 operators]]
*[[ifvar conditions]]
 
== 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).
 
{{gamevar flags}}


[[Category:All commands]]
[[Category:All commands]]

Revision as of 10:31, 22 February 2020

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:

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