-
-}*/\r
-\r
-void\r
-animatePlayer(map_view_t *src, map_view_t *dest, /*map_view_t *top, */sword d, short scrolloffsetswitch, int x, int y, int ls, int lp, bitmap_t *bmp)\r
-{\r
- sword dire=32*d; //direction\r
- sword qq; //scroll offset\r
-\r
- if(scrolloffsetswitch==0) qq = 0;\r
- else qq = ((lp)*SPEED);\r
- switch (d)\r
- {\r
- case 0:\r
- //up\r
- x=x-4;\r
- y=y-qq-TILEWH;\r
- break;\r
- case 1:\r
- // right\r
- x=x+qq-4;\r
- y=y-TILEWH;\r
- break;\r
- case 2:\r
- //down\r
- x=x-4;\r
- y=y+qq-TILEWH;\r
- break;\r
- case 3:\r
- //left\r
- x=x-qq-4;\r
- y=y-TILEWH;\r
- break;\r
- }\r
- modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);\r
- if(2>ls && ls>=1) { modexDrawSpriteRegion(dest->page, x, y, 48, dire, 24, 32, bmp); }else\r
- if(3>ls && ls>=2) { modexDrawSpriteRegion(dest->page, x, y, 24, dire, 24, 32, bmp); }else\r
- if(4>ls && ls>=3) { modexDrawSpriteRegion(dest->page, x, y, 0, dire, 24, 32, bmp); }else\r
- if(5>ls && ls>=4) { modexDrawSpriteRegion(dest->page, x, y, 24, dire, 24, 32, bmp); }\r
- //TODO: mask copy //modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);\r
- //modexClearRegion(top->page, 66, 66, 2, 40, 0);\r
- //modexCopyPageRegion(dest->page, top->page, 66, 66, 66, 66, 2, 40);\r
- //turn this off if XT\r
- if(detectcpu() > 0) modexWaitBorder();\r
-}\r
+ word x, y; /* coordinate for drawing */
+
+ /* increment the pixel position and update the page */
+ mv[id].page->dy -= offset;
+
+ /* check to see if this changes the tile */
+ if(mv[id].page->dy == 0 ) {
+ /* go down one tile */
+ mv[id].ty--;
+ /* Snap the origin downward */
+ mv[id].page->data -= mv[id].page->width*4;
+ mv[id].page->dy = mv[id].map->tiles->tileHeight;
+
+ /* draw the next row */
+ y= 0;
+ if(id==0)
+ mapDrawRow(&mv[0], mv[0].tx-1 , mv[0].ty-1, 0);
+ else
+ modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*22, mv[id].map->tiles->tileHeight);
+ }
+}
+
+
+void
+mapScrollDown(map_view_t *mv, byte offset, word id)
+{
+ word x, y; /* coordinate for drawing */
+
+ /* increment the pixel position and update the page */
+ mv[id].page->dy += offset;
+
+ /* check to see if this changes the tile */
+ if(mv[id].page->dy >= mv[id].dyThresh ) {
+ /* go down one tile */
+ mv[id].ty++;
+ /* Snap the origin downward */
+ mv[id].page->data += mv[id].page->width*4;
+ mv[id].page->dy = mv[id].map->tiles->tileHeight;
+
+ /* draw the next row */
+ y= SCREEN_HEIGHT + mv[id].map->tiles->tileHeight;
+ if(id==0)
+ mapDrawRow(&mv[0], mv[0].tx-1 , mv[0].ty+15, y);
+ else
+ modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*22, mv[id].map->tiles->tileHeight);
+ }
+}
+
+
+void
+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 = 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-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;
+ }
+}
+
+
+void
+mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y) {
+ word rx;
+ word ry;
+ //if(i==0) i=2;
+ if(i==0)
+ {
+ //wwww
+ modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, 0); //currently the over scan color!
+ }
+ else
+ {
+ rx = (((i-1) % ((t->data->width)/t->tileWidth)) * t->tileWidth);
+ ry = (((i-1) / ((t->data->height)/t->tileHeight)) * t->tileHeight);
+////0000 printf("i=%d\n", i);
+ //mxPutTile(t->data, x, y, t->tileWidth, t->tileHeight);
+ modexDrawBmpRegion(page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));
+ }
+}
+
+
+void
+mapDrawRow(map_view_t *mv, int tx, int ty, word y) {
+ word x;
+ int i;
+
+ /* the position within the map array */
+ i=ty * mv->map->width + tx;
+ for(x=0; x<SCREEN_WIDTH+mv->dxThresh && 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);
+ }
+ i++; /* next! */
+ }
+}
+
+void
+mapDrawCol(map_view_t *mv, int tx, int ty, word x) {
+ int y;
+ int i;
+
+ /* location in the map array */
+ i=ty * mv->map->width + tx;
+
+ /* We'll copy all of the columns in the screen,
+ i + 1 row above and one below */
+ for(y=0; y<SCREEN_HEIGHT+mv->dyThresh && 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);
+ }
+ i += mv->map->width;
+ }
+}
+
+void qclean()
+{
+ modexLeave();
+ setkb(0);
+}
+
+void pdump(map_view_t *pee)
+{
+ int mult=(QUADWH);
+ int palq=(mult)*TILEWH;
+ int palcol=0;
+ int palx, paly;
+ for(paly=0; paly<palq; paly+=mult){
+ for(palx=0; palx<palq; palx+=mult){
+ modexClearRegion(pee->page, palx+TILEWH, paly+TILEWH, mult, mult, palcol);
+ palcol++;
+ }
+ }
+}
+
+void
+animatePlayer(map_view_t *src, map_view_t *dest, /*map_view_t *top, */sword d, short scrolloffsetswitch, int x, int y, int ls, int lp, bitmap_t *bmp)
+{
+ sword dire=32*d; //direction
+ sword qq; //scroll offset
+
+ if(scrolloffsetswitch==0) qq = 0;
+ else qq = ((lp)*SPEED);
+ switch (d)
+ {
+ case 0:
+ //up
+ x=x-4;
+ y=y-qq-TILEWH;
+ break;
+ case 1:
+ // right
+ x=x+qq-4;
+ y=y-TILEWH;
+ break;
+ case 2:
+ //down
+ x=x-4;
+ y=y+qq-TILEWH;
+ break;
+ case 3:
+ //left
+ x=x-qq-4;
+ y=y-TILEWH;
+ break;
+ }
+ modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);
+ if(2>ls && ls>=1) { modexDrawSpriteRegion(dest->page, x, y, 48, dire, 24, 32, bmp); }else
+ if(3>ls && ls>=2) { modexDrawSpriteRegion(dest->page, x, y, 24, dire, 24, 32, bmp); }else
+ if(4>ls && ls>=3) { modexDrawSpriteRegion(dest->page, x, y, 0, dire, 24, 32, bmp); }else
+ if(5>ls && ls>=4) { modexDrawSpriteRegion(dest->page, x, y, 24, dire, 24, 32, bmp); }
+ //TODO: mask copy //modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);
+ //modexClearRegion(top->page, 66, 66, 2, 40, 0);
+ //modexCopyPageRegion(dest->page, top->page, 66, 66, 66, 66, 2, 40);
+ //turn this off if XT
+ //XTif(detectcpu() > 0)
+ modexWaitBorder();
+}