ecf5ecfc14
Сведены дубли, разъехавшиеся по модулям: - x_bump[20] был в pop_kid (uint8_t!) и в pop_map (int16_t) — теперь одна таблица int16_t; - y_land[5] — две копии; - y_to_row_mod4 — в pop_bg и pop_map; - 32-битный LCG оригинала (prandom) — в pop_bg и pop_trob; функция теперь одна, а СИДЫ остались раздельными (у раскладки кладки и у фаз факелов свои последовательности, смешивать нельзя — иначе поедет рисунок стен). Экономия по коду скромная (_CODE 24462 -> 24421, W3 11643 -> 11632: часть выигрыша съели межмодульные вызовы). Главное здесь другое: pop_geom лежит в W1/W2 и не трогает графику, то есть это тот самый «чистый» слой, который сможет звать __banked-код стражей (docs/layout_plan_v2.md §4, §5.2). Проверено в MAME: комната 1 после пересборки отрисована ПОБАЙТОВО так же, как до правки (0 различающихся пикселей в области комнаты) — значит последовательности PRNG и геометрия не поехали; Kid бегает. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
35 lines
1.9 KiB
C
35 lines
1.9 KiB
C
/*
|
|
* pop_geom.h — общая геометрия PoP и PRNG оригинала.
|
|
*
|
|
* Сюда сведено то, что раньше дублировалось по модулям (x_bump/y_land в
|
|
* pop_kid и pop_map, y_to_row в pop_bg и pop_map, 32-битный LCG в pop_bg и
|
|
* pop_trob). Кроме экономии это ФУНДАМЕНТ bank-safe API: модуль живёт в
|
|
* W1/W2 и не трогает графику, поэтому его может звать и главный цикл, и
|
|
* резидент W3, и будущий __banked-код стражей (docs/layout_plan_v2.md §4).
|
|
*/
|
|
#ifndef POP_GEOM_H
|
|
#define POP_GEOM_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#define FIRST_ONSCREEN_COLUMN 5 /* индекс col 0 комнаты в x_bump */
|
|
#define TILE_SIZEX 14 /* ширина тайла в координатах персонажа */
|
|
#define TILE_SIZEY 63 /* высота ряда */
|
|
|
|
/* x_bump (data.h): левая граница колонки в координатах персонажа; колонка
|
|
* комнаты col = x_bump[col + FIRST_ONSCREEN_COLUMN]. y_land: пол ряда
|
|
* (индекс row+1; [0] — ряд «над комнатой»). */
|
|
extern const int16_t pop_x_bump[20];
|
|
extern const int16_t pop_y_land[5];
|
|
|
|
/* y_to_row_mod4 (seg006): ряд по координате y с оборотом mod 4 (−1 = полоса
|
|
* над комнатой, 3 = под комнатой). */
|
|
int8_t pop_y_to_row(int16_t y);
|
|
|
|
/* prandom (seg009:321) — 32-битный LCG оригинала. Сид ВНЕШНИЙ: у стен
|
|
* (раскладка кладки) и у анимаций тайлов (фаза факелов) свои
|
|
* последовательности, смешивать их нельзя. */
|
|
uint16_t pop_prandom(unsigned long *seed, uint16_t maxv);
|
|
|
|
#endif
|