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>
24 lines
707 B
C
24 lines
707 B
C
/*
|
|
* pop_geom.c — общая геометрия + PRNG оригинала. См. pop_geom.h.
|
|
*/
|
|
#include "pop_geom.h"
|
|
|
|
/* data.h: шаг 14 (ширина тайла в координатах персонажа), [5] = col 0. */
|
|
const int16_t pop_x_bump[20] = {
|
|
-12, 2, 16, 30, 44, 58, 72, 86, 100, 114,
|
|
128, 142, 156, 170, 184, 198, 212, 226, 240, 254
|
|
};
|
|
const int16_t pop_y_land[5] = {-8, 55, 118, 181, 244};
|
|
|
|
int8_t pop_y_to_row(int16_t y)
|
|
{
|
|
return (int8_t)((y + 60) / TILE_SIZEY % 4 - 1);
|
|
}
|
|
|
|
uint16_t pop_prandom(unsigned long *seed, uint16_t maxv)
|
|
{
|
|
unsigned long s = *seed * 214013UL + 2531011UL;
|
|
*seed = s;
|
|
return (uint16_t)((uint16_t)(s >> 16) % (uint16_t)(maxv + 1));
|
|
}
|