/* * pop_flow.h — таблица маршрута уровней и pre-level cutscene (FG9). * * Здесь нет механики rooms/guards: номер назначения превращается в правило * оболочки один раз на границе уровня. Поэтому добавить особый маршрут не * означает разбрасывать условия по горячему игровому кадру. */ #ifndef POP_FLOW_H #define POP_FLOW_H #include typedef enum { POP_PRE_NONE = 0, POP_PRE_2_6, POP_PRE_4, POP_PRE_8, POP_PRE_9, POP_PRE_12, POP_PRE_12_SHORT } pop_pre_cutscene_t; typedef struct { uint8_t level; uint8_t pre_cutscene; uint8_t show_level_number; uint8_t ending_rule; } pop_level_flow_t; /* Нулевой указатель означает некорректный номер назначения. Сцена 12 * выбирается по тем же границам SDLPoP: при <=5 оставшихся минутах короткая. */ const pop_level_flow_t *pop_flow_level(uint8_t level) __banked; pop_pre_cutscene_t pop_flow_pre_cutscene(uint8_t level, uint8_t remaining_minutes) __banked; /* Победная комната не принадлежит механике movement: это правило маршрута * оболочки. Сейчас оно есть только у скрытого уровня 14. */ uint8_t pop_flow_is_ending(uint8_t level, uint8_t room) __banked; #endif /* POP_FLOW_H */