Game Struct
From CloudModding OoT Wiki
						(Redirected from Global Context)
						
						
						
						
| Version | VRam | |
|---|---|---|
| Debug | 80212020 | 802120C4 | 
| NTSC 1.0 | 801C84A0 | 801C8544 | 
| NTSC 1.1 | 801C8660 | 801C8704 | 
| NTSC 1.2 | 801C8D60 | 801C8E04 | 
| PAL 1.0 | 801C64E0 | 801C6584 | 
| PAL 1.1 | 801C6520 | 801C65C4 | 
See also: Ram Map
For documentation of the game_play Game State, historically known as the Global Context, see Game Play Struct.
The Game Struct is a shared struct used by the dynamically allocated Game States. It contains the barebones variables needed to make a custom game state; a reference to the Graphics Context, state variables for initializing/executing/swapping Game States, input, memory allocations, and provides access to number of update cycles. By chance, Game States happen to always be allocated to the same memory address.
Addresses
| Offset | Type | Debug | NTSC 1.0 | NTSC 1.1 | NTSC 1.2 | PAL 1.0 | PAL 1.1 | Description | 
|---|---|---|---|---|---|---|---|---|
| 00 | ptr | 80212020 | 801C84A0 | 801C8660 | 801C8D60 | 801C64E0 | 801C6520 | Graphics Context | 
| 04 | ptr | 80212024 | 801C84A4 | 801C8664 | 801C8D64 | 801C64E4 | 801C6524 | Game State's "Update" function, called once every frame | 
| 08 | ptr | 80212028 | 801C84A8 | 801C8668 | 801C8D68 | 801C64E8 | 801C6528 | Game State's "Deconstructor" function, called when the state should run clean-up code | 
| 0C | ptr | 8021202C | 801C84AC | 801C866C | 801C8D6C | 801C64EC | 801C652C | Stores next Game State's "Constructor" when swapping Game States | 
| 10 | ptr | 80212030 | 801C84B0 | 801C8670 | 801C8D70 | 801C64F0 | 801C6530 | [Game State] struct's size (never read, set to 0 after initialization is complete) | 
| 14 | input_struct | 80212034 | 801C84B4 | 801C8674 | 801C8D74 | 801C64F4 | 801C6534 | Controller Port 1 | 
| 2C | input_struct | 8021204C | 801C84CC | 801C868C | 801C8D8C | 801C650C | 801C654C | Controller Port 2 | 
| 44 | input_struct | 80212064 | 801C84E4 | 801C86A4 | 801C8DA4 | 801C6524 | 801C6564 | Controller Port 3 | 
| 5C | input_struct | 8021207C | 801C84FC | 801C86BC | 801C8DBC | 801C653C | 801C657C | Controller Port 4 | 
| 74 | u32 | 80212094 | 801C8514 | 801C86D4 | 801C8DD4 | 801C6554 | 801C6594 | Size of Game State's heap | 
| 78 | ptr | 80212098 | 801C8518 | 801C86D8 | 801C8DD8 | 801C6558 | 801C6598 | Game State's heap pointer | 
| 7C | ptr | 8021209C | 801C851C | 801C86DC | 801C8DDC | 801C655C | 801C659C | Heap Append Start pointer | 
| 80 | ptr | 802120A0 | 801C8520 | 801C86E0 | 801C8DE0 | 801C6560 | 801C65A0 | Heap Append End pointer | 
| 84 | ptr | 802120A4 | 801C8524 | 801C86E4 | 801C8DE4 | 801C6564 | 801C65A4 | Pointer to Main Heap node storing the Game State's memory heap | 
| 88 | ptr | 802120A8 | 801C8528 | 801C86E8 | 801C8DE8 | 801C6568 | 801C65A8 | Pointer to Main Heap node storing the Game State's memory heap | 
| 94 | ptr | 802120B4 | 801C8534 | 801C86F4 | 801C8DF4 | 801C6574 | 801C65B4 | Pointer to Main Heap node storing the Game State's memory heap | 
| 98 | s32 | 802120B8 | 801C8538 | 801C86F8 | 801C8DF8 | 801C6578 | 801C65B8 | Execute Game State. If zero, swaps game state based on "Constructor" pointer | 
| 9C | s32 | 802120BC | 801C853C | 801C86FC | 801C8DFC | 801C657C | 801C65BC | Frames run while current Game State has been alive | 
| A0 | s32 | 802120C0 | 801C8540 | 801C8700 | 801C8E00 | 801C6580 | 801C65C0 | Unknown | 
Input Struct
  00: InputInfo InputCurrent;     //Joystick Input is less than InputReleaseEdge?
  06: InputInfo InputLast;        //computed at 60 fps, thus can appear equal to Current
  0C: InputInfo InputPressEdge;   //Joystick info is actually change in position
  12: InputInfo InputReleaseEdge; //Joystick Info is real-time input
InputInfo Struct (0x06 bytes) is as follows:
  00: //short = Buttons
    0001 = C-Right
    0002 = C-Left
    0004 = C-Down
    0008 = C-Up
    0010 = R Button
    0020 = L Button
    0800 = D-Up button
    1000 = Start Button
    2000 = Z Button
    4000 = B Button
    8000 = A Button
  02: sbyte = X axis. right is positive, left is negative
  03: sbyte = Y axis. up is positive, down is negative
  04: ? //N64 Mouse?