Files
Sprinter-SDCC/applications/PoP/coltest/coltest.c
T
snark13 cd8d566d82 applications/PoP: порт Prince of Persia — PoC (roomtest) + пайплайн
Порт PoP на Sprinter.  Текущий PoC — applications/PoP/roomtest/:
комната 1 (фон-композиция тайлов) + Kid с управлением на raw-клавиатуре
и коллизией с картой.

- roomtest — pop_bg (фон), pop_kid (спрайты Kid, column-major флип,
  seqtbl-анимация), pop_ctrl (порт control() PoP на held-state
  kbd_raw), pop_map (коллизия seg004/005: бег/стоп у стены,
  падение/приземление, отскок seq_47, вертикальный прыжок K4.1).
  MEMORY=small (DATA сразу за CODE, ~23КБ кода не лезет в huge).
- toolchain (PoP) — pop_pack_kid/pop_pack_bg/render_room/extract —
  распаковка res-графики MSDOS в атласы + композиция комнат.
- toolchain/ (корень) — make_hdd.sh (быстрый HDD-тест вместо FDD),
  png_strip.py / room_compose.py (ассет-пайплайн).
- docs — PORT_PLAN, KID_PLAN, форматы ресурсов (Apple II / MSDOS / DAT).
- bgtest/coltest/poc — ранние PoC (фон, коллизия, первый прототип).

.gitignore: build-артефакты applications/*/*/*; исключены внешние
референс-репозитории (SDLPoP/mininim/PR/Apple-II — свои git-клоны) и
оригинальные game-данные MSDOS/ (копирайт, только для реверса форматов).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 17:51:08 +03:00

65 lines
2.4 KiB
C

/*
* coltest.c — прототип K2a: проверка вертикального accel-COPY
* (gfx_blit_cols) + прозрачности 0xFF + горизонтального флипа.
*
* Спрайт 16x24 column-major, АСИММЕТРИЧНЫЙ:
* левые 8 колонок: верх (row<12) = ПРОЗРАЧНО (0xFF), низ = БЕЛЫЙ (1)
* правые 8 колонок: КРАСНЫЙ (2)
* На синем фоне (3). Ожидаем на MAME:
* normal @ (50,100): слева бело-снизу+прозрачно-сверху, справа красный;
* flip @(120,100): ЗЕРКАЛО — слева красный, справа бело+прозрачно-сверху;
* в прозрачных местах виден СИНИЙ фон.
*/
#include <graphics.h>
#include <gfx.h>
#include <conio.h>
#define W 16
#define H 24
static unsigned char spr[4 + W * H];
int main(void)
{
int col, row;
spr[0] = W; spr[1] = 0;
spr[2] = H; spr[3] = 0;
for (col = 0; col < W; col++)
for (row = 0; row < H; row++) {
/* ФИНАЛ: АСИММЕТРИЧНЫЙ — лево верх прозрачно / низ белый,
* право красное. normal: лево бело+прозрач-верх, право красн;
* flip: ЗЕРКАЛО (лево красн, право бело+прозрач-верх). */
unsigned char v;
if (col < 8)
v = (row < 12) ? 0xFF : 1;
else
v = 2;
spr[4 + col * H + row] = v;
}
initgraph();
gfx_set_draw_page(0);
gfx_set_visible_page(0);
gfx_pal_set(0, 1, 255, 255, 255); /* белый */
gfx_pal_set(0, 2, 224, 32, 32); /* красный */
gfx_pal_set(0, 3, 32, 48, 200); /* синий фон */
gfx_pal_set(0, 255, 0, 224, 0); /* ДИАГ: 0xFF как ЗЕЛЁНЫЙ цвет (bank NORMAL) */
gfx_pal_sync();
setfillstyle(SOLID_FILL, 3);
bar(0, 0, 319, 255);
setcolor(1);
outtextxy(40, 80, "normal");
outtextxy(110, 80, "flip");
gfx_set_bank(GFX_BANK_TRANSPARENT); /* ДИАГ: 0x58 подавление 0xFF (с тенью) */
gfx_blit_cols(50, 100, spr, 0); /* обычный */
gfx_blit_cols(120, 100, spr, 1); /* зеркало */
gfx_set_bank(GFX_BANK_NORMAL);
while (!kbhit())
gfx_wait_vsync();
closegraph();
return 0;
}