From 08e8926abbf26c39e12b56995286d1aa98417cf0 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Fri, 15 Feb 2019 19:39:50 -0500 Subject: [PATCH] Implement text drawing --- game.exe | Bin 108864 -> 108505 bytes game.jor | 2 +- game.prj | Bin 5265 -> 5150 bytes testbed.c | 133 ++++++++++++++++++------------------------------------ tiles.c | 6 +-- tiles.h | 5 ++ 6 files changed, 50 insertions(+), 96 deletions(-) diff --git a/game.exe b/game.exe index 89f507c06d75fa8efc5549cfedb5259f97469a8c..8a7e26c84c3f112713f450a435e61a16398faece 100755 GIT binary patch delta 12681 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

mDmAD32K2U7!Yp4us+X_>I96pdSpV zCkB$0!3#<$Lw&#=25-P#1|PtF246D>Z~N}l0Fckn5KzR>2r!MIF<=%$6Tn=Crhs`2 z%>eTm`~V9X`~iy?0sxB{0s%`HngfT7(xK67(xN78Cn9? zFth@!V+aFmWC#~tw3Q)3EX2|Qh!pQ)o&%!9>$Hm@T7=Oah8RFOL#!w^(_W@Hv5IUA z@nRG0XGjp=(Ln}{D4;_Oi6W0G8MI;&9brfkD*Bm02Z&4sv=%`km!XY_5h^2~t&nIQ zLp#x3%x7pX`in&j9ngDo^bk--P%J|yK)eai8K7b40?;zxNu6{I$$H}01ZQLfR>?;xIxBT!1E$k3aD4bUf=np7mFaY>)9{})X$YiA2~e&aE~E^(RebN94P5#^6s~jZDx9=Zy$;?MKR6Wz?vgk6 zH5N;xa&5<&nbwG3sCf`B?$zRF8UqM;4~<3hI=T+PrRiNjJi}V?D`^Hj0A+q{#qy=NVS>2j?0p5Y?y=9t1JwNdfiL}c=m(bei9hH8!+vp>eqrEh zJgdDApmcL~)j{+lfZ<~(ehgfg&&+Fr_?Pos524IYT>UWMXNF3EV(=4yos}bi8xFKD z9TlEb&C)SQw;0Alxy|q@;CF^k0e2V*0e>(Y7x(Bc!wGSpdN7<6-p<}{h8^Wn{0yK> z>dyg+W4-_=j&Yrj`TyyJzC<+)3wfOa{M`*-i9i3%4G*5U;XCdbyWs)@yFu|ZyWtE&-H_s%~64i|?o2oTXe;mxYIN!FyeC75;bSCuAuX zFps@5VXq2LGtL&{`oHEmvwp@OrSvs`Qur5)lro!s1w3Xq+F?-{sp|k`e%%oDln$x> zy?Pbw@H2rIUna`=dvPJ9Yutv?*iGRDM4@W@QO4ybfHE%Z1}>wzg~pVA{3hxPrPUe2 zTPXebTN~`+|I~z;^Vp)&{H9vdUN?mg5Lvffjr|T#OmknAR=KZAtN*3?o!aVNe*hGN zH-xX#F?XTdbD(|cUm)ca@4=scu|MxaQQCL_P}*Qa+`M<4p+9l<%7m{5D9gq}fZ~|V z0A>By1W=ZZ8=`?wrukn`l;!Uc00wdYc??pTuK_3?=HXPDuNzLa6od(f8_ZB-{rv{x zp?tMLmKQ*|*`wNq$}$wsP*tk6jo|Am1<9{89+HPKY(&#d8n=!H0Ozq&MSx4bEO*h zQ5k7}lvd8;Z)Ldq-T|&G?xJ!+>}sXfe$h!N&YvJUJ4ZSY->sC!>dwBo)J-hmGyEP; zGS4{nO)=J~Jar4_mjHOU&eaoZ%Xkdp{ylXVg{YS$+)>#1%SC!O(h|}fmLq*k)Wcv1 zCA@Ej@C{x)RS-CAN7`Rf6Pw`hPozhq|7tLYdXlL33ep~64vmoJ_IboPG(p-TdEf&R z$|5|+Ck7=EuTrZdL|wAOgjAU>57H9Vt`xQ!NRh!SH>_Q z4m_W+Ox)YtGh@9-+}I&woA?y*KSZ++GBP}+zB@W(G?eCU=#bG^I`~fiinSv}gs-_7 zm52LLMYum53lF5@;m^_O@E|%D-h%Am!SpCRl-whdsa`}k@{UNM#u42qAR?8TN2F1U zh@KP{p{JOLbV`iqMcpI%P-?{U^n65LdMTnG6-8vw?1=tU5@DcC5d-Lhh)g;VF_0=F z2GRA1!3bI8XO0{~L6ONr0mGiG%Ruqy&5@|CP$8=`H|!4&B&K%S>(&K zCUOF8ihPAiBPUXMBPuh9>Yh2$AkMBY(TC?IMoHIJG`Eu*GWMAQuG z5H*X&M49QOsJT=WHIHUQy-xF@=9774)B@TXwUBm2Eh1Z#g+7Z~Ojn}bpg*IQP(buj z3XWbzG11FuWVB2xqE{eT$rine4oAOD7ou0w?dW&N5xs`gG4GO3%vyx^C_ZLACB|%^ zjxif4HD)V~jM+xxVzyIW%nr(r*-6u4N@-rqhqNSSmzmba?55I~J#-+ZjLygGrC(zz z=x)qD60!TqE%pG_k3C3DVn3$P*uw~)PXC~qSzBOEA}M475f>jjs2Xq z$9_S(W51-YVo%YH*wfS`?hJ*-eM?bs=SUa#9d(L3PbqO1C@t;>8X4z7Lu`3zU{Pf<`93NMjR6QBmS(TAnzD$`i-YzQpl# zJn<#EkoYoPO?-vyi4&Y$xUowU=at9CjK z(#{~Gb|#s$vuLK)Os{Ka(*o@rTBMyz?`n%_lXf0$(Y{XGwex9@b^(=Z7gB|`gg)0U zqBGjXbXNNYo!2g*Keca?NLos6Ny|u`w4CZC$z}>lT0x0PZ&8n=l{7fXO5>7N(e$LZ zX-U#*TA#Fr%9GxugGukvp``ceSkgxNDrpmam$aFFO4>qKleW^eq-}IF=>w`x+Cg`c zO6g(Jhxp*Ki`;d)$y>LFn(E3ZNLNlFx{s)(ZX-qNY^2ler}nx7)JYe2koxLArvAE0 z8l?M#vUEo%TX&R(>5kE8-KR88cbF#WPSP~pXEe*2TqFX02J#0#963@;8e|<+B*M&t zYo*dq?)=lq!()SaOfkz zKG36}kF3?(Lw^z60D33rqnvs>>Vu5YNHju5KV*!ltuPGwSa1{QFF+qxt51SH-r8ld zm~4ItQV6mSyG0>(9>2K7)639XB3bp6-dGh+dC>V?)nE0be6lJ5`v`&}pr@*$okkG9 ztZIu*1VLPKk_vkXwZ}T>6QSb`*G!w9$~cFNNyy-*i65TQz1-W6|x zJWYq*9eSw86FnXJ4CtxQ`#z<==Apr-7(x7reToNvI&dEAq0fSzj^yU2^shbql>*ie zr;3fjY#lUBB#PPAdDFz?z&ZFDFdDfd>%}{bAYM{WPsP@z(?xpk`7k#DlFEy{;ygNI z&t?ItO++%qi{0)#UiEsON}#`rWRaKNCDTDK3t6lir;9ML#Cj4|#Zqg-8Nxqs8H~?D zF)wePWX>bOJCc@LQ;;oW>yQ~@vRGmLW(NBE*2f)YptQPQ0hJFxLM-7SZ7T!!`%9cNoKr{iA~livqf0MR@CJq zy-5UZ1M@aXpC+yNQA^SDz#mvEXN&Z}9gu#3SlZ-?=g&8Zq@C8#Ip{?xvX$={P5EWq zd9-NSkv_B<=7=}NF6-qvqVtHoDD@bb`9bZdLhxfZc1nT{(tbP#;^l(&1npHcj>fgn z(qWXxKgw$nPn8TfR<#JGPrz2<`wXo@SBZb3Ja08*hU&##<$)Rd zEiDg8Lh@5K92_k_!v9VY%AUi)RtLmGl)<)xwMVgNfu~33%jVK(D!n~-})W6nfaP%ON1&)Ls6Wv=3 zLis4LEqXf*u!hdVY%^Iq%)`tXZyh&Jr29<3>9#?EDe;-~vh^T7VEW`k;^S=mXnM_h z6Oy^GRvMk4r6MqI5R6MmpvkrRTX+VU0_JUkRd_CO9UmlQ(o~#Rcj&tl`r>Q4(}#}} zo~Jor-ZF5^D@yg1RogjPAVyPN|+PQ#Vk$K7PkJlObqa- zEo9A=(aHo_H1^<6bSdOz)hrh=)(@8pW71d=G7;-1rPa1Gw$_B?OiM4eUEB&fyDR5q`@VYGFI(EZ{iwUGc zJlh@7f42W$&IH%x7=cZ@|J_I91bj3ecS7-!fRFMjQr;46)zSPvXoin}Wqbh*S8!DR zh{-g3%=o;#ej_H)@UbH%j8?L(pS>f7s>djWDq5`(r7E8>6JJ5Cu_N+Fju<=I`qet| xUB&kGVzGM+XY?O4hWPKm(PMFwtyNwdU4Wh5q7iw8qbYCvE2ArxZxN;9e*oIFKS}@q delta 12890 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 diff --git a/game.jor b/game.jor index cbbc587..e29a9cb 100755 --- a/game.jor +++ b/game.jor @@ -1,7 +1,7 @@ : blah ' seremit task-emit ! ' log-emit task-echo ! ; -blah + ' seremit task-emit ! : start-repl activate blah diff --git a/game.prj b/game.prj index dca032a993458f6c01e40b9205a6566e96bf58cc..0919c51b53d003cedee88105ccccb45183ef90f7 100755 GIT binary patch delta 194 zcmbQJIZtDQIvewe+5Vfg*eW=9rB?g-ZDC_zSSZB6aA)&+K2t_k28QFa{U^WVzZ@#e ztik}4V!Fxro#_?RGsZJaYneVX@-zJhf~ichOq&=wfNXcBY9?(aFNPGx{R{^g|NlSB zSjf1P(T_2bQHqh5k%93HLmh(`&>Rj1VFuCFev^HLC58AI8dmxF{r`VZcH@5qjuuEBa94F4H-d;4uZDA>+8xklKK8KiZC@IwF^KtJOE delta 307 zcmbQIF;R1aIvX?JZtu-nY!w{550_f_ZDC_zSSZB6aDVf9K2t_kNe1^F-jiSQU-oHZ zR$*XZ5Mh>J%3_XXR%NnhR$w+_@?-iB1RTsUOph3TGrecn#q^FTi>ZxiG2=f52Bta& z9;OY9PZ)a{XD~)G`Y_rvax;1{cri@25j3f1U=UysWN=>V?Z?ibz!4+H0VY|%BrAj3 zLJL1xhUzsIe#{IqODz1D7@C13KLfYDs~;D`;-#*BiVU-tc=(Ai)NJwg`~RP9r}(S8 zmJBiFP7FK6c^LQ^*nv3oKS+6qr;lr}o(IE!kX<3J!68nrE_%*v3?P^P-`phF&d4gv nuyCoxWI;hmq5uDZ4iRM#J}A5KKgd;jdXrg&O_@Q`w!#kqH0)Ow diff --git a/testbed.c b/testbed.c index 3d8ecf7..13d46e3 100755 --- a/testbed.c +++ b/testbed.c @@ -11,6 +11,42 @@ #include "timer.h" #include "jorth.h" +/*** T E X T ***/ +char far *font = NULL; + +void text_init() { + unsigned int fontSeg, fontOff; + asm { + push es + push bp + mov ah, 11h + mov al, 30h + mov bh, 3 + int 10h + mov ax, bp + pop bp + mov fontSeg, es + mov fontOff, ax + pop es + } + font = MK_FP(fontSeg, fontOff); +} + +void text_draw_char(unsigned int vidOffset, unsigned char c) { + unsigned int fontOffset = c << 3; + int i; + for (i = 0; i < 8; i ++) { + VID[vidOffset] = font[fontOffset++]; + vidOffset += PAGE_STRIDE; + } +} + +void text_draw(unsigned int vidOffset, unsigned char *s) { + while (*s) { + text_draw_char(vidOffset++, *s++); + } +} + /*** S C R A T C H ***/ #define NUM_TILES 128 @@ -34,68 +70,16 @@ void fillMap() { } } -#define DIR_N 0 -#define DIR_E 1 -#define DIR_W 2 -#define DIR_S 3 - -#define STATE_MAP 0 -#define STATE_DIALOG 1 - -struct entity; -typedef struct entity Entity_t; - -struct entity { - int x; - int y; - int dir; - int sprites[4]; -}; - -void drawEntity(Entity_t *entity) { - int isprite = entity->sprites[entity->dir]; - drawSprite(&sprites[isprite * SPRITE_STRIDE], entity->x, entity->y); -} - -void playerThink(Entity_t *self) { - if (keyIsDown(K_LEFT)) { self->x -= 3; self->dir = DIR_W; } - if (keyIsDown(K_RIGHT)) { self->x += 3; self->dir = DIR_E; } - if (keyIsDown(K_UP)) { self->y -= 3; self->dir = DIR_N; } - if (keyIsDown(K_DOWN)) { self->y += 3; self->dir = DIR_S; } -} - -typedef struct { - int dy; - int y; -} Footer_t; - -typedef struct { - Entity_t player; - Footer_t footer; - int state; -} Game_t; - -Game_t game; - void game_init() { FILE *f; TifImageMeta_t meta; - game.player.x = 100; - game.player.y = 100; - game.player.dir = DIR_E; - game.player.sprites[DIR_E] = 0; - game.player.sprites[DIR_N] = 1; - game.player.sprites[DIR_W] = 2; - game.player.sprites[DIR_S] = 3; - game.footer.y = 0; - game.state = STATE_MAP; - setEGAMode(); atexit(vid_cleanup); kbd_init(); timer_init(TIMER_30HZ); + text_init(); tile_init(); fillMap(); @@ -121,34 +105,6 @@ void game_init() { scroll(0, 0); } -void showDialog() { - game.state = STATE_DIALOG; - game.footer.dy = 1; -} - -void dialogThink() { - if (keyWasPressed(K_SPACE)) { - game.footer.dy = -1; - } - game.footer.y += game.footer.dy; - if (game.footer.dy > 0 && game.footer.y > 24) { - game.footer.y = 24; - game.footer.dy = 0; - } else if (game.footer.dy < 0 && game.footer.y < 0) { - game.footer.y = 0; - game.footer.dy = 0; - game.state = STATE_MAP; - } - setSplitScreen(399 - (game.footer.y << 1)); -} - -void overworldThink() { - if (keyWasPressed(K_SPACE)) { - showDialog(); - } - playerThink(&game.player); - scroll(game.player.x - 152, game.player.y - 92); -} void f_seremit() { ser_write_byte(TOP().i); @@ -179,6 +135,11 @@ void f_splitscreen() { setSplitScreen(399 - (TOP().i << 1)); DROP(1); } + +void f_text() { // ( col y s -- ) + text_draw(ST2().u + (ST1().u * PAGE_STRIDE), TOP().s); + DROP(3); +} void game_f_init() { f_init(); CDEF("seremit", f_seremit); @@ -189,6 +150,7 @@ void game_f_init() { CDEF("draw-screen", drawScreen); CDEF("split-screen", f_splitscreen); CDEF("ticks", f_ticks); + CDEF("text", f_text); f_loadfile("game.jor"); } @@ -232,15 +194,6 @@ int main() { f_runstring("tick"); f_taskloop(); f_runstring("draw"); - -/* if (game.state == STATE_MAP) { - overworldThink(); - } else if (game.state == STATE_DIALOG) { - dialogThink(); - } - drawEntity(&game.player); - drawScreen();*/ - } return 0; diff --git a/tiles.c b/tiles.c index 66ccc6a..92435aa 100755 --- a/tiles.c +++ b/tiles.c @@ -2,6 +2,7 @@ #include #include #include "video.h" +#include "tiles.h" /*** T I L E S ***/ @@ -17,11 +18,6 @@ // which is wrong. So instead we do: // 89ABCDEF 01234567 << 3 => BCDEFXXX 3456789A byteswap => 3456789A BCDEFXXX -#define PAGE_TILES_W 21 -#define PAGE_TILES_H 14 -#define PAGE_TILES_COUNT (PAGE_TILES_H * PAGE_TILES_W) -#define PAGE_STRIDE (PAGE_TILES_W << 1) - void tile_init() { setLogicalWidth(PAGE_STRIDE >> 1); } diff --git a/tiles.h b/tiles.h index 98b83fb..16ce566 100755 --- a/tiles.h +++ b/tiles.h @@ -7,3 +7,8 @@ void loadMap(unsigned char *map, unsigned int w, unsigned int h); void drawSprite(unsigned int *sprite, int x, int y); void scroll(int newX, int newY); void drawScreen(); + +#define PAGE_TILES_W 21 +#define PAGE_TILES_H 14 +#define PAGE_TILES_COUNT (PAGE_TILES_H * PAGE_TILES_W) +#define PAGE_STRIDE (PAGE_TILES_W << 1)