Габариты спрайтов в байтах: uint16_t -> uint8_t в слоте отрисовки
Замечание пользователя: спрайты наших атласов не крупнее 64x64, а w/h почти везде были uint16_t. Это уже записано в памяти проекта (pop_sprite_size_limits: весь игровой кадр PoP <= 56x63; больше 255 только восемь полноэкранных подложек титров, а они через слот персонажа не проходят). Переведены в uint8_t: w/h, ow/oh, fpw/fph, cw/ch в pop_cdraw_t, параметры cd_overlay_add и cd_clip_add, локали w/h/vis_w в pop_char_draw и cd_splash, и чтение габарита из шапки ленты (было двухбайтным сложением со сдвигом). Эффект: лёгкая позиция 438 600 -> 438 324 (там персонажи не рисуются, поэтому почти ничего), тяжёлая — циан 181 404 -> 180 270. Плюс 24 байта _DATA на двух слотах. Скромно, но код от этого не запутаннее, а честнее: тип теперь отражает реальный диапазон. Проверено в MAME — бой идёт, хвостов и обрезков нет. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -51,21 +51,21 @@ typedef struct {
|
||||
* видео-ОЗУ и своя ОЗУ-копия, поэтому heal обязан стирать спрайт именно
|
||||
* той страницы, в которую сейчас рисуем */
|
||||
int x[2], y[2];
|
||||
uint16_t w[2], h[2];
|
||||
uint8_t w[2], h[2]; /* габарит: спрайты игры не крупнее 64x64 */
|
||||
uint8_t valid[2];
|
||||
/* НАКЛАДНЫЕ спрайты (клинок + брызги урона) — свой прямоугольник, не
|
||||
* объединение с персонажем: объединение сильно больше суммы двух
|
||||
* (клинок уходит вперёд-вверх), а heal стоит ровно по площади */
|
||||
int ox[2], oy[2];
|
||||
uint16_t ow[2], oh[2];
|
||||
uint8_t ow[2], oh[2];
|
||||
uint8_t ovalid[2];
|
||||
/* габарит кадра для fore-прохода: fpx — ЛОГИЧЕСКАЯ X (до ×8/7),
|
||||
* fpy — низ спрайта; fpw == 0 — в этом кадре рисовать было нечего */
|
||||
int fpx, fpy;
|
||||
uint16_t fpw, fph;
|
||||
uint8_t fpw, fph;
|
||||
/* окно fore-клипа слота (объединение «спрайт + накладные»), КОМНАТНЫЙ y */
|
||||
int cx, cy;
|
||||
uint16_t cw, ch;
|
||||
uint8_t cw, ch;
|
||||
/* straddle: рендерное смещение по ЛОГИЧЕСКОЙ X, когда комната персонажа
|
||||
* не совпадает с отрисованной (порт xpos_in_drawn_room) */
|
||||
int render_dx;
|
||||
|
||||
Reference in New Issue
Block a user