Skip to main content
This page documents the main global state structures used by Crimsonland for game configuration, timing, and high-level state management.

Config Blob

Base: 0x00480348 (config_blob)
Size: 0x480 bytes (1152 bytes)
Type: crimson_cfg_t
The runtime configuration structure loaded from crimson.cfg. See Config File Format for complete layout.

Key Fields

OffsetFieldTypeUsage
0x1bcscreen_widthi32Display resolution
0x1c0screen_heighti32Display resolution
0x1c8keybinds_p1i32[13]Player 1 input bindings
0x208keybinds_p2i32[13]Player 2 input bindings
0x464sfx_volumefloatSound effects volume (0-1)
0x468music_volumefloatMusic volume (0-1)

Save Status Blob

Base: 0x00485540 (game_status_blob)
Size: 0x268 bytes (616 bytes)
Type: game_status_t
Save game progress loaded from game.cfg (obfuscated on disk). See Save File Format for complete layout.

Key Fields

OffsetFieldTypeUsage
0x000quest_unlock_indexu16Max unlocked quest
0x004weapon_usage_countsu32[53]Per-weapon usage stats
0x0d8quest_play_countsu32[91]Per-quest attempt counts
0x244mode_play_survivalu32Survival mode play count

Game State Machine

Base: 0x00480850 (game_state)
Type: i32
Current game mode/screen:
ValueStateDescription
0x01Main MenuTitle screen
0x02Play MenuMode selection
0x03PlayingActive gameplay
0x04PausedGame paused
0x0aGame OverDeath/completion screen
0x0cQuest SelectQuest menu
0x15CreditsCredits screen

Timing Globals

Delta Time

Base: 0x00480840 (delta_time)
Type: float
Frame delta time in seconds (typically 1/60 ≈ 0.0167). Usage: Multiply by this value for frame-rate independent movement:
pos_x += vel_x * delta_time;

Tick Counter

Base: 0x00480850 (game_tick)
Type: i32
Monotonically increasing tick counter (incremented each frame during gameplay).

RNG State

Base: 0x00491234 (rng_seed)
Type: u32
CRT rand() state. Updated by crt_rand() @ 0x00461746:
int crt_rand(void) {
    rng_seed = rng_seed * 214013 + 2531011;
    return (rng_seed >> 16) & 0x7fff;
}
Seeding: Initialized with time(NULL) or explicit seed for deterministic replays.

Input State

Movement Scheme

Base: 0x00480364 (player_movement_scheme)
Type: i32
ValueScheme
0Keyboard (WASD)
1Mouse movement
2Static (no movement)
3Analog stick

Aim Scheme

Base: 0x0048038c (player_aim_scheme)
Type: i32
ValueScheme
0Keyboard (Q/E)
1Mouse aim
4Computer aim (auto-target)
5Analog stick

Score and Stats

Current Score

Base: 0x00480890 (player_score)
Type: i32
Current score (kills, bonuses, quest objectives).

Kill Count

Base: 0x00480894 (kill_count)
Type: i32
Total creatures killed this session.

Mode-Specific State

Survival Wave

Base: 0x004808a0 (survival_wave)
Type: i32
Current wave number in Survival mode.

Quest Info

Base: 0x004808b0 (current_quest_major)
Type: i32
Base: 0x004808b4 (current_quest_minor)
Type: i32
Currently active quest (major-minor index).

Weapon Tables

Weapon Data Table

Base: 0x004d7a00 (weapon_table)
Entry size: 0x48 bytes
Count: 54 weapons
Per-weapon static data (damage, fire rate, ammo, projectile type). See Weapon Structures for layout.

Weapon Ammo Class

Base: 0x004d7a28 (weapon_ammo_class)
Type: i32[54]
Ammo class for each weapon (affects reload behavior and hit effects).

Perk State

Perk Counts

Base: player_health + 0x94 (within player struct)
Type: i32[0x80] (128 entries)
Per-player perk acquisition counts (indexed by perk ID).

Perk Metadata Table

Base: 0x004d8000 (perk_table)
Entry size: 0x20 bytes
Count: 128 perks
Per-perk metadata (name offset, icon, rarity, flags). See Perk Structures for layout.

Creature Type Table

Base: 0x00482764 (creature_type_table)
Entry size: 0x44 bytes
Count: 32 creature types
Per-type data (health, speed, size, sprite frames). See Entity Structures for layout.

Entity Structures

Creature, projectile, and effect pools

Weapon Structures

Weapon table and player weapon state

Perk Structures

Perk counts and metadata

Config Format

crimson.cfg binary layout

Build docs developers (and LLMs) love