From 28f98c20b25eb7a1589da7d7d4555dd40aa3c381 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Fri, 18 Jan 2019 23:02:56 -0500 Subject: [PATCH] Refactor scrolling, added road tile, first sprites drawn but not implemented --- sprite.tif | Bin 0 -> 4078 bytes testbed.c | 106 ++++++++++++++++++++++++++++++---------------------- testbed.exe | Bin 30331 -> 38897 bytes tiles.tif | Bin 4078 -> 4078 bytes 4 files changed, 62 insertions(+), 44 deletions(-) create mode 100755 sprite.tif diff --git a/sprite.tif b/sprite.tif new file mode 100755 index 0000000000000000000000000000000000000000..784583f73a7061e268543837169cead41c2abad1 GIT binary patch literal 4078 zcmeHEu?_)25S?=(B$A_1sTC@ppqK=WYkY$*5T~P1T<0&uXZQ-W;-YnhL?c;mc9)!z zpqkmt&AWNK`)=NiMqR2BQH>}FDFA991CNhrlsqn@A9^hNDjtWxO<>^<$d>OffZK)r zec&E?bL2C2VP_+4yXfv Mc3@AmT2)iJ0}ZseG5`Po literal 0 HcmV?d00001 diff --git a/testbed.c b/testbed.c index 62a37ee..00c53d0 100755 --- a/testbed.c +++ b/testbed.c @@ -461,25 +461,39 @@ typedef struct { unsigned int h; int scrollX; int scrollY; - unsigned int pageOffset; - unsigned char *tiles; -} TilePage_t; + unsigned int pageOffset[2]; + unsigned char currentPage; + unsigned int tilesOffset; + unsigned int *memTiles; + unsigned char *map; +} TiledScreen_t; -#define OFF_TILES 0x4840 +TiledScreen_t screen = { 0, 0, 0, 0, { 0x0400, 0x2620 }, 0, 0, NULL, NULL }; -void scrollPage(TilePage_t *page, int x, int y) { - x = min(max(x, 0), (page->w << 4) - 320); - y = min(max(y, 0), (page->h << 4) - 176); - page->scrollX = x; - page->scrollY = y; +void loadTiles(unsigned int tilesOffset, unsigned int *memTiles) { + screen.tilesOffset = tilesOffset; + screen.memTiles = memTiles; } -void drawPage(TilePage_t *page) { - unsigned int startX = page->scrollX >> 4; - unsigned int startY = page->scrollY >> 4; - unsigned int offsetX = page->scrollX - (startX << 4); - unsigned int offsetY = page->scrollY - (startY << 4); - unsigned int drawOffset = page->pageOffset; +void loadMap(unsigned char *map, unsigned int w, unsigned int h) { + screen.map = map; + screen.w = w; + screen.h = h; +} + +void scroll(int x, int y) { + x = min(max(x, 0), (screen.w << 4) - 320); + y = min(max(y, 0), (screen.h << 4) - 176); + screen.scrollX = x; + screen.scrollY = y; +} + +void drawScreen() { + unsigned int startX = screen.scrollX >> 4; + unsigned int startY = screen.scrollY >> 4; + unsigned int offsetX = screen.scrollX - (startX << 4); + unsigned int offsetY = screen.scrollY - (startY << 4); + unsigned int drawOffset = screen.pageOffset[screen.currentPage]; unsigned int scrollOffset = drawOffset + (offsetX >> 3) + (offsetY * PAGE_STRIDE); unsigned int x, y; @@ -487,47 +501,44 @@ void drawPage(TilePage_t *page) { for (y = startY; y < startY + 13; y ++) { for (x = startX; x < startX + 21; x ++) { - blitTile(OFF_TILES + page->tiles[x + (y * page->w)], drawOffset); + blitTile(screen.tilesOffset + screen.map[x + (y * screen.w)], drawOffset); drawOffset += 2; } drawOffset += PAGE_STRIDE * 15; } setDisplayOffset(scrollOffset); + screen.currentPage ^= 1; } /*** S C R A T C H ***/ -unsigned char tiles[10000]; -TilePage_t pages[2] = { - { 100, 100, 0, 0, 0x0400, tiles }, - { 100, 100, 0, 0, 0x2620, tiles } -}; +unsigned int tiles[2*16 * 128]; +#define OFF_TILES 0x4840 -void fillTiles() { +unsigned char map[10000]; + +void fillMap() { unsigned int x, y, z; z = 0; for (y = 0; y < 100; y ++) { for (x = 0; x < 100; x ++) { - tiles[x + (y * 100)] = (((x + y + z) >> 2) % 3) << 5; + map[x + (y * 100)] = (((x + y + z) >> 2) % 4) << 5; } } } -int main() { +void game_init() { FILE *f; TifImageMeta_t meta; - int plane; - int x; - int y; - int z = 0; - unsigned int drawOffset; - unsigned int page = 0; setEGAMode(); atexit(vid_cleanup); + tile_init(); + fillMap(); + f = fopen("FOOTER.TIF", "rb"); meta = tifLoadMeta(f); tifLoadEGA(f, meta, 0, 24, 336); @@ -536,28 +547,35 @@ int main() { f = fopen("TILES.TIF", "rb"); meta = tifLoadMeta(f); tifLoadEGA(f, meta, OFF_TILES, 256, 16); + tifLoad(f, meta, tiles, 128 * 16, 16); fclose(f); - kbd_init(); - tile_init(); setSplitScreen(351); - fillTiles(); + loadTiles(OFF_TILES, tiles); + loadMap(map, 100, 100); + scroll(0, 0); +} + +int main() { + int x; + int y; + int z = 0; + + game_init(); + kbd_init(); while (!keyPressed(K_ESC)) { - page ^= 1; - x = pages[page].scrollX; - y = pages[page].scrollY; - if (keyPressed(K_LEFT)) x -= 4; - if (keyPressed(K_RIGHT)) x += 4; - if (keyPressed(K_UP)) y -= 4; - if (keyPressed(K_DOWN)) y += 4; - scrollPage(&pages[0], x, y); - scrollPage(&pages[1], x, y); - drawPage(&pages[page]); + x = screen.scrollX; + y = screen.scrollY; + if (keyPressed(K_LEFT)) x -= 8; + if (keyPressed(K_RIGHT)) x += 8; + if (keyPressed(K_UP)) y -= 8; + if (keyPressed(K_DOWN)) y += 8; + scroll(x, y); + drawScreen(); -// kbd_wait(); z++; } diff --git a/testbed.exe b/testbed.exe index 0ccbaaf12abef0385d2a2d84272e2ae66a82fb99..ad63d16c3bced37db13e733b087c3907020096c5 100755 GIT binary patch delta 6723 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 delta 6305 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 diff --git a/tiles.tif b/tiles.tif index 2e2f5df7c6ed478a2164b0054a30c2ac96668d44..ebfcf60d8dba9efdd59bcce0de67f8aa44add4f8 100755 GIT binary patch delta 279 zcmZ9Eu@QhU3s8*CwKOdJ~%>8xg*3t6O;h71cs- delta 154 zcmaDS|4x3xGsgPQP+$)QP_D7PF-XAJ_%jfJ0J1zt1S|<8Kyn}ekvE3&jg7(D!HVGW hU?Ct6Y$8OxJ)`~Rk4#^ACNXz&9AIE*XyE8z007xSPVoQ$