From 0d56dc7720f0bcd0bd1c8977f1d6b3e80d5405e6 Mon Sep 17 00:00:00 2001 From: Robert Lowe Date: Fri, 5 Sep 2014 23:03:35 -0400 Subject: [PATCH] Fixed some data type issues. Made left, right, and goto scrolling work with new draw methods. Made goto frame the visible screen with an offscreen area. Started on Downward scrolling, which doesn't quite work right. --- 16/modex16/scroll.c | 109 ++++++++++++++++++++++++------------------ 16/modex16/scroll.exe | Bin 17950 -> 17854 bytes 2 files changed, 63 insertions(+), 46 deletions(-) diff --git a/16/modex16/scroll.c b/16/modex16/scroll.c index 4b9ca122..de8f8f27 100644 --- a/16/modex16/scroll.c +++ b/16/modex16/scroll.c @@ -8,24 +8,26 @@ typedef struct { bitmap_t *data; word tileHeight; word tileWidth; - word rows; - word cols; + unsigned int rows; + unsigned int cols; } tiles_t; typedef struct { byte *data; tiles_t *tiles; - word width; - word height; + int width; + int height; } map_t; typedef struct { map_t *map; page_t *page; - word tx; - word ty; + int tx; + int ty; + word dxThresh; + word dyThresh; } map_view_t; @@ -37,7 +39,7 @@ void mapScrollRight(map_view_t *mv, byte offset); void mapScrollLeft(map_view_t *mv, byte offest); void mapScrollUp(map_view_t *mv, byte offset); void mapScrollDown(map_view_t *mv, byte offset); -void mapGoTo(map_view_t *mv, byte tx, byte ty); +void mapGoTo(map_view_t *mv, int tx, int ty); void mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y); void mapDrawRow(map_view_t *mv, int tx, int ty, word y); void mapDrawCol(map_view_t *mv, int tx, int ty, word x); @@ -63,19 +65,26 @@ void main() { screen.width = 352; mv.page = &screen; mapGoTo(&mv, 0, 0); + modexShowPage(mv.page); - - /* scroll all the way to the right */ - - for(x=0; x<((20)*16-SCREEN_WIDTH); x++) { + /* scroll all the way to the right */ + for(x=0; x<(map.width*16-SCREEN_WIDTH); x++) { mapScrollRight(&mv, 1); modexShowPage(mv.page); } - for(x=0; x<((40/*+0.50625*/)*16-SCREEN_WIDTH); x++) { + + /* scroll all the way to the left */ + for(; x>0; x--) { mapScrollLeft(&mv, 1); modexShowPage(mv.page); } + /* scroll all the way down */ + for(y=0; y<(map.height*16-SCREEN_HEIGHT); y++) { + mapScrollDown(&mv, 1); + modexShowPage(mv.page); + } + /* spin for a time */ for(x=0; x<500; x++) { modexWaitBorder(); @@ -141,55 +150,44 @@ initMap(map_t *map) { void mapScrollRight(map_view_t *mv, byte offset) { word x, y; /* coordinate for drawing */ - unsigned int i; /* increment the pixel position and update the page */ mv->page->dx += offset; /* check to see if this changes the tile */ - if(mv->page->dx >= 16) { + if(mv->page->dx >= mv->dxThresh ) { /* go forward one tile */ mv->tx++; /* Snap the origin forward */ mv->page->data += 4; - mv->page->dx =0; + mv->page->dx = mv->map->tiles->tileWidth; /* draw the next column */ - x= SCREEN_WIDTH; - i= mv->ty * mv->map->width + mv->tx + 20; - for(y=0; ymap->tiles, mv->map->data[i], mv->page, (int)mv->page->dx + x, (int)mv->page->dy+y); - i += mv->map->width; - } + x= SCREEN_WIDTH + mv->map->tiles->tileWidth; + mapDrawCol(mv, mv->tx + 20 , mv->ty-1, x); } } void mapScrollLeft(map_view_t *mv, byte offset) { - word x, y; /* coordinate for drawing */ - unsigned int i; + word x, y; /* coordinate for drawing */ /* increment the pixel position and update the page */ mv->page->dx -= offset; /* check to see if this changes the tile */ - if(mv->page->dx >= 16) { - /* go forward one tile */ - mv->tx++; - /* Snap the origin forward */ + if(mv->page->dx == 0) { + /* go backward one tile */ + mv->tx--; + + /* Snap the origin backward */ mv->page->data -= 4; - mv->page->dx =16; - + mv->page->dx = mv->map->tiles->tileWidth; /* draw the next column */ - x= SCREEN_WIDTH; - i= mv->ty * mv->map->width + mv->tx + 20; - for(y=0; ymap->tiles, mv->map->data[i], mv->page, (int)mv->page->dx + x, (int)mv->page->dy+y); - i += mv->map->width; - } + mapDrawCol(mv, mv->tx-1, mv->ty-1, 0); } } @@ -201,30 +199,49 @@ mapScrollUp(map_view_t *mv, byte offset) { void mapScrollDown(map_view_t *mv, byte offset) { + word x, y; /* coordinate for drawing */ + + /* increment the pixel position and update the page */ + mv->page->dy += offset; + + /* check to see if this changes the tile */ + if(mv->page->dy >= mv->dyThresh ) { + /* go down one tile */ + mv->ty++; + /* Snap the origin downward */ + mv->page->data += SCREEN_WIDTH*4; + mv->page->dy = mv->map->tiles->tileHeight; + + + /* draw the next row */ + y= SCREEN_HEIGHT + mv->map->tiles->tileHeight; + mapDrawRow(mv, mv->tx-1 , mv->ty+15, y); + } + } void -mapGoTo(map_view_t *mv, byte tx, byte ty) { +mapGoTo(map_view_t *mv, int tx, int ty) { int px, py; unsigned int i; /* set up the coordinates */ mv->tx = tx; mv->ty = ty; - mv->page->dx = 0; - mv->page->dy = 0; + mv->page->dx = mv->map->tiles->tileWidth; + mv->page->dy = mv->map->tiles->tileHeight; + + /* set up the thresholds */ + mv->dxThresh = mv->map->tiles->tileWidth * 2; + mv->dyThresh = mv->map->tiles->tileHeight * 2; /* draw the tiles */ modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 0); py=0; i=mv->ty * mv->map->width + mv->tx; - for(ty=mv->ty; py < SCREEN_HEIGHT && ty < mv->map->height; ty++, py+=mv->map->tiles->tileHeight) { - px=0; - for(tx=mv->tx; px < SCREEN_WIDTH+16 && tx < mv->map->width+1; tx++, px+=mv->map->tiles->tileWidth) { - mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, px, py); - i++; - } + for(ty=mv->ty-1; py < SCREEN_HEIGHT+mv->dyThresh && ty < mv->map->height; ty++, py+=mv->map->tiles->tileHeight) { + mapDrawRow(mv, tx-1, ty, py); i+=mv->map->width - tx; } } @@ -247,7 +264,7 @@ mapDrawRow(map_view_t *mv, int tx, int ty, word y) { /* the position within the map array */ i=ty * mv->map->width + tx; - for(x=0; xmap->width; x+=mv->map->tiles->tileWidth, tx++) { + for(x=0; xdxThresh && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) { if(i>=0) { /* we are in the map, so copy! */ mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y); @@ -267,7 +284,7 @@ mapDrawCol(map_view_t *mv, int tx, int ty, word x) { /* We'll copy all of the columns in the screen, i + 1 row above and one below */ - for(y=0; ymap->height; y+=mv->map->tiles->tileHeight, ty++) { + for(y=0; ydyThresh && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) { if(i>=0) { /* we are in the map, so copy away! */ mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y); diff --git a/16/modex16/scroll.exe b/16/modex16/scroll.exe index 8e82eda415c2b002337fda79a192677051dac29a..0fe8502109bd104ba0eb29e16aa7b83b69dd2462 100644 GIT binary patch delta 2695 zcmZ8j3s6&68b0UVn+M^BgonHYdHHI6#_ep?;D8##iijy_c&Nc{>(014PG5xD8AxDQ zrW~)hm9y=PR%<(KD>J&IE>3%mu8oNmAC(1cS1O_wAA2x#2bDp|CanO-a{-Ap6u(kr-+=Db52kyvfoua!RiorH&}1DYo$QLNx5+V~scMjHSG8M* zx4_4d46xWr!*HY7ou@P;JLVtu*W_YXX+(4#FceVhhg;y=@Zc4W=DD1M!zjZHUhFC zsUg=8%?eRoj(bItOI0u6tZx#7LdhQ3#Y*(JPW?2 zt$ESpHCu!l+ze;92Zlp7=2@txp)9hoQ`*EWybJRLI!bwh*`j@Wkz!$Y^%_A+k=z_J ztP&9QNRcWyX`N7aHWx~p)N7>mLcK2z4UuVFg@Z9>$iw2VkzWWS*SiJayso$l!oUjz zDO;*}4tN4A-*hqX51Y&Za!f3pKs)q*XfRJ5=BYMYbZ<+Fh27QWLDe&&9HK50M7g@N zLx2*k_ZukHd`i?k3I;YPHaUhWAeK@A!paKhJhBJTEwo-hnykyOnoPMx$?YwAU#jaKFN-Xl zq^_Ny-h&FqrIaUc2ox6jXpNW@$)Z)!N^O5(xE~_-n{9jtWO< zfOVWQfb>L#+O0vFx<#j=SzCiu{;<)Ur>;3ESwjup>QtpF$Qb0n_MNJQcUh4Yj-so` zM}_MMQSUqfT0^Yb@;GP>Mk?0vz;T-#56Bi=p_-~si=uSOH~Qt7tk&OGWv?C9djOQr z@g$)4+ySzWCxdi_XDdJGJ<&k^jwjdk9ygG`=Si2|)Vt*JJ4SS~>%LS(nC*mqWnj?5 z8CXCoHmc|8>mpy$UYCAE?XV_xORj!2O}v3Y{Y?@?8;KV&fa4CpP?; zH^rUy(83Y+psk{OohRGGR&C{o=Qlw1@}x+lg;n3rclEP7i%1h0*houK0OTcYsh#d; zxC$LqYBeAk+S1~pM!$yxj99$b*h4qVCx4^oiB6;f*yMCTe#SlxfpPe-HVqEr%i1Sg zP=$|Zr*St__*<=v_v@_i2EL;kg?F08I6M?-fL}L@)8W2mF#%_bI=F)^Zxkb7Io>L6 zagTAVub{K0Zn>Q&|5elRB2R|Y=rX+8s98}r4*2Sy1|E+wf>*dA8SrG3L%s&D(ClBYI0b*P7Q=^6!VV2I9oA}88S6g|da+!EwR*F3KQvN{5tXF$dB zA1D#)FE|c0dUy)(v}e--I~_^S+=r1B0S{}HdXDCL(!rmCz>^CYYxlm;K;js)J%Z0{ zUL|lR+~E2kQ-`KPmIJEH1)g-!mjmj6H+Kr*&7oSIR?&W53#$i6DmYaOe{DR-j8wvb z0nI3DcDo=e60B;~(t@HhJ)+af5vtoKfV_#1}QlNOble&xvlP={tmUyJf zG{OSR5skjuesAr#*J)_<*WSrti!-stutIZK&*pvDW|$36;P(u(-~s%ZAqfKPF{HsY z_`0D59>Ol;RM>#`84toNyfk_>d>{WgdO4k+kCveuyJM23xMEr^z+F+7psdgyXCO9% z&69=y9+Q~=N8_$brypyIZAH8OwfmN5uTh4}u4G6(Y30(R;E`1yh>g@9?cD>2Rz$J{R`khmhy;U!5ea4YUhT9fFFFnMd&snY`w=pk9E zA1G7k-W?{TI5)WrevS7f&xJqW_T<@c8y-sjagI)8?3UIRsMBdPHg!L#8kuO@th~K~ld3X@;%E`dP=aSo4H_HWIZ9}u_c&_WkHgQf9A8GrMrn#K84J-cJ{Kaqz z?wh|1Mz&2|@P!CxW1ra$`L?9&ObEYh%U*UJ!mBtTCoTTocl7NN&Vhc6pia`#8F)xK z+X`}i&%^C)M^}6Wc}J|HZJT8eoc?L{r`hyFF@3s$UGL3fS8sUb$b34FbD077A2P3r Aga7~l delta 2903 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 ZKln6mxASrJd_ERsIF|c?&cEbB=s)f1`;-6x -- 2.39.5