From 0c1a4c05395a754bc4530721246e5ae91cbdc8a6 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Thu, 25 Jul 2019 22:32:31 -0400 Subject: [PATCH] fix graphical artifacts, add eyedropper --- game.exe | Bin 98581 -> 99224 bytes game.prj | Bin 5522 -> 5522 bytes jiles.jor | 14 ++++++++++---- testbed.c | 54 ++++++++++++++++++++++++++++++++++++++++++++---------- video.h | 6 +++++- 5 files changed, 59 insertions(+), 15 deletions(-) diff --git a/game.exe b/game.exe index 52629cdfd6b962ae5412e3edc41db778255ae6ba..dd98a259e50ceb3d771d7e1764adf90e18acb355 100755 GIT binary patch delta 17272 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 M&)PO)F1;rGANc0RmjD0& delta 16787 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 W{GtMZ-*iqF_*Li5hqLJ|>Hh&Jrypqm diff --git a/game.prj b/game.prj index add6b58959956a931f6efc9daada0d614e9a88b8..9f925f245d1dc9f908d1e6afbf2996be4996be52 100755 GIT binary patch delta 266 zcmbQFJxP0mIvca$)}NcT*tj@YwHX>W|D0^em&x0;`KRA64hDv99tH;1$?N$}vZ^rj z0Oe}=Gnw^(%3tzFGS=%d^)VMS|7H6B|0dHDrbg!dOz)Xgm^U%`GXMV{3B-m#?8y|y zB+kqQWF;`bT&85kH?7?c@6 zA}kCF95G_73~E5P01X04Gca&42s4N zVNBx8T+DwM{{L@be8VWgc!D8-F_~!xsprpos 3 >> swap 3 >> swap ; - +: mousexys mousepos mousepos>sprpos spriteindex @ ; : tick - MOUSEL clicked if - color @ mousepos mousepos>sprpos spriteindex @ putpixel + MOUSEL mousedown if + mousexys getpixel color @ != if + color @ mousexys putpixel + refresh + then + then + MOUSER clicked if + mousexys getpixel color ! then tick-debounce ; diff --git a/testbed.c b/testbed.c index 4d745d0..a4404df 100755 --- a/testbed.c +++ b/testbed.c @@ -264,31 +264,53 @@ void f_glitch() { } /* JILES */ -#define SCREEN_STRIDE 320 +#define SCREEN_STRIDE 40 +void f_mousehide() { + mouse_hide(); +} void f_mouseshow() { setLogicalWidth(SCREEN_STRIDE >> 1); mouse_show(); } +int getpixel(int x, int y, unsigned int far *spr) { + int shift = (15 - x); + int b = (spr[y + 0] & (1 << shift)) >> shift; + int g = (spr[y + 16] & (1 << shift)) >> shift; + int r = (spr[y + 32] & (1 << shift)) >> shift; + int i = (spr[y + 48] & (1 << shift)) >> shift; + return b | (g << 1) | (r << 2) | (i << 3); +} + void f_drawfatsprite() { int isprite = TOP().i; unsigned int dst = 0; unsigned int far *spr = &sprites[isprite * SPRITE_STRIDE]; - int x, y, faty; + int x, y, faty, resetEnabled; DROP(1); setWriteMode(0); + setAllPlanes(); + setResetEnabled(0x0f); + resetEnabled = 1; for ( y = 0; y < 16; y ++ ) { for ( x = 0; x < 16; x ++ ) { - int shift = (15 - x); - int b = (spr[y + 0] & (1 << shift)) >> shift; - int g = (spr[y + 16] & (1 << shift)) >> shift; - int r = (spr[y + 32] & (1 << shift)) >> shift; - int i = (spr[y + 48] & (1 << shift)) >> shift; - int colour = b | (g << 1) | (r << 2) | (i << 3); - int fill1 = (spr[y + 64] & (1 << shift)) ? 0xff : 0x55; + int color = getpixel(x, y, spr); + int fill1 = color & 0x10 ? 0xff : 0x55; int fill2 = fill1 == 0xff ? 0xff : 0xaa; - setPlaneColor(colour); + + if (color >= 0x0f) { + if (resetEnabled) { + setResetEnabled(0); + resetEnabled = 0; + } + } else { + if (!resetEnabled) { + setResetEnabled(0x0f); + resetEnabled = 1; + } + setResetMask(color); + } for ( faty = 0; faty < 8; faty ++) { VID[dst + x + (SCREEN_STRIDE * faty)] = (faty % 2) ? fill1 : fill2; } @@ -322,6 +344,16 @@ void f_putpixel() { spr[y + 64] = (spr[y + 64] & ~(1 << shift)) | (v << shift); } +void f_getpixel() { + int isprite = TOP().i; + unsigned int far *spr = &sprites[isprite * SPRITE_STRIDE]; + int x = ST2().i; + int y = ST1().i; + DROP(2); + + TOP().i = getpixel(x, y, spr); +} + /* INIT */ void game_f_init(char *exe, char *bootjor) { f_init(exe); @@ -349,8 +381,10 @@ void game_f_init(char *exe, char *bootjor) { CDEF("unfuck", tile_init); CDEF("mouseshow", f_mouseshow); + CDEF("mousehide", f_mousehide); CDEF("drawfatsprite", f_drawfatsprite); CDEF("putpixel", f_putpixel); + CDEF("getpixel", f_getpixel); f_loadjor(bootjor); diff --git a/video.h b/video.h index 505d39d..c468472 100755 --- a/video.h +++ b/video.h @@ -18,7 +18,11 @@ #define setPlaneColor(c) outport(REG_TS, 2 | (c << 8)) #define setAllPlanes() setPlaneColor(0x0f) -#define setWriteMode(m) outport(REG_GDC, 0x05 | m << 8) +#define setWriteMode(m) outport(REG_GDC, 0x05 | (m << 8)) +#define setBitMask(m) outport(REG_GDC, 0x08 | (m << 8)) + +#define setResetEnabled(m) outport(REG_GDC, 0x01 | (m << 8)) +#define setResetMask(m) outport(REG_GDC, m << 8) #define VID ((volatile char far *)MK_FP(0xa000, 0)) #define WVID ((volatile int far *)MK_FP(0xa000, 0))