/* * pop_settings.h — рантайм-настройки игры (план docs/menu_settings_plan.md * §5, этап MS0). Единственный контракт между UI/файлом настроек и игрой: * gameplay-код читает значения, но не знает про UI-структуры и POP.CFG. * * Экран Settings и загрузчик POP.CFG уже используют эти поля; начальные * значения ставит pop_settings_defaults() из pop_boot() (crt0 зануляет * _DATA, поэтому ненулевые дефолты литералами в данных запрещены). */ #ifndef POP_SETTINGS_H #define POP_SETTINGS_H #include typedef enum { POP_PROFILE_VANILLA = 0, /* текущее поведение roomtest (план §1) */ POP_PROFILE_ENHANCED = 1 /* будущий набор fixes (план §12) */ } pop_gameplay_profile_t; typedef struct { uint8_t sound_enabled; /* 0/1 — зеркало звука (Ctrl+S / pop_sfx) */ uint8_t music_enabled; /* 0/1 — зеркало музыки (Ctrl+M / pop_mus_want) */ uint8_t speed_mode; /* POP_SPEED_* (pop_pace.h), 0..2 */ uint8_t gameplay_profile; /* pop_gameplay_profile_t */ uint8_t cheats_enabled; /* 0/1 — активны ли чит-клавиши */ uint8_t show_build_info; /* 0/1 — build info на title (этап MS8) */ uint16_t enhancement_flags; /* маска будущего ENHANCED (план §12) */ uint8_t time_limit_enabled;/* 0/1 — 60-минутный лимит / unlimited */ uint8_t show_debug_bar; /* 0/1 — отладочная полоса в верхнем борте */ } pop_settings_t; extern pop_settings_t pop_settings; void pop_settings_defaults(void) __banked; /* Применить модель к runtime-владельцам (темп, читы, звук). До окончания * pop_sfx_init() sound_ready=0: звук применится отдельным вызовом после * инициализации набора. */ void pop_settings_apply(uint8_t sound_ready) __banked; #endif