-}\r
-\r
-\r
-map_t\r
-allocMap(int w, int h) {\r
- map_t result;\r
-\r
- result.width =w;\r
- result.height=h;\r
- result.data = malloc(sizeof(byte) * w * h);\r
- //result.data = (byte *)alloc_emem(((int)sizeof(byte) * w * h)/1024);\r
- /*if(isEMS() || checkEMS())\r
- {\r
- XMOVE mm;\r
- //emmhandle = mallocEMS(coretotalEMS());//alloc_emem((int)sizeof(map))\r
- mm.length=sizeof(result);\r
- mm.sourceH=0;\r
- mm.sourceOff=ptr2long(&result);\r
- mm.destH=emmhandle;\r
- mm.destOff=0;\r
- ist = move_emem(&mm);\r
- if(!ist){ dealloc_emem(emmhandle); exit(5); }\r
- printf("%d\n", coretotalEMS());\r
- }*/\r
-\r
- return result;\r
-}\r
-\r
-void\r
-initMap(map_t *map) {\r
- /* just a place holder to fill out an alternating pattern */\r
- int x, y, xx, yy;\r
- int i, q;\r
-// int tile = 1;\r
- //if(!isEMS() || !checkEMS())\r
-// map->tiles = malloc(sizeof(tiles_t));\r
- //else\r
- // map->tiles = (tiles_t *)alloc_emem(sizeof(tiles_t));\r
-\r
- /* create the tile set */\r
- //if(!isEMS() || !checkEMS())\r
-// map->tiles->data = malloc(sizeof(bitmap_t));\r
- //else\r
- // map->tiles->data = (bitmap_t *)alloc_emem(sizeof(bitmap_t));\r
-// map->tiles->data->width = (TILEWH/**2*/);\r
-// map->tiles->data->height= TILEWH;\r
- //if(!isEMS() || !checkEMS())\r
-// map->tiles->data->data = malloc((TILEWH*2)*TILEWH);\r
- //else\r
- // map->tiles->data->data = (byte *)alloc_emem((TILEWH*2)*TILEWH);\r
-// map->tiles->tileHeight = TILEWH;\r
-// map->tiles->tileWidth =TILEWH;\r
-// map->tiles->rows = 1;\r
-// map->tiles->cols = 1;//2;\r
-\r
- /*q=0;\r
- //for(y=0; y<map->height; y++) {\r
- //for(x=0; x<map->width; x++) {\r
- i=0;\r
- for(yy=0; yy<TILEWH; yy++) {\r
- for(xx=0; xx<(TILEWH); xx++) {\r
- //if(x<TILEWH){\r
- map->tiles->data->data[i+1] = map->data[q];//28;//0x24;\r
-// printf("[%d]", map->tiles->data->data[i]);\r
- //}else{\r
- //map->tiles->data->data[i] = map->data[q];//0;//0x34;\r
- //printf("]%d[==[%d]", i, map->tiles->data->data[i]);\r
- //}\r
- i++;\r
- }\r
-// printf("\n");\r
- }\r
-// printf("[%d]", map->data[q]);\r
- q++;\r
-// }\r
- //printf("\n\n");\r
-// }*/\r
-\r
- /*i=0;\r
- for(y=0; y<map->height; y++) {\r
- for(x=0; x<map->width; x++) {\r
-// map->data[i]=255;\r
- printf("[%d]", map->data[i]);\r
- //tile = tile ? 0 : 1;\r
- i++;\r
- }\r
- //tile = tile ? 0 : 1;\r
- }*/\r
-}\r
-\r
-\r
-void\r
-mapScrollRight(map_view_t *mv, byte offset) {\r
- word x, y; /* coordinate for drawing */\r
-\r
- /* increment the pixel position and update the page */\r
- mv->page->dx += offset;\r
-\r
- /* check to see if this changes the tile */\r
- if(mv->page->dx >= mv->dxThresh ) {\r
- /* go forward one tile */\r
- mv->tx++;\r
- /* Snap the origin forward */\r
- mv->page->data += 4;\r
- mv->page->dx = mv->map->tiles->tileWidth;\r
- //}\r
-\r
- /* draw the next column */\r
- x= SCREEN_WIDTH + mv->map->tiles->tileWidth;\r
- mapDrawCol(mv, mv->tx + 20 , mv->ty-1, x);\r
- }\r
-}\r
-\r
-\r
-void\r
-mapScrollLeft(map_view_t *mv, byte offset) {\r
- word x, y; /* coordinate for drawing */\r
-\r
- /* increment the pixel position and update the page */\r
- mv->page->dx -= offset;\r
-\r
- /* check to see if this changes the tile */\r
- if(mv->page->dx == 0) {\r
- /* go backward one tile */\r
- mv->tx--;\r
-\r
- /* Snap the origin backward */\r
- mv->page->data -= 4;\r
- mv->page->dx = mv->map->tiles->tileWidth;\r
- //}\r
- /* draw the next column */\r
- mapDrawCol(mv, mv->tx-1, mv->ty-1, 0);\r
- }\r
-}\r
-\r
-\r
-void\r
-mapScrollUp(map_view_t *mv, byte offset) {\r
- word x, y; /* coordinate for drawing */\r
-\r
- /* increment the pixel position and update the page */\r
- mv->page->dy -= offset;\r
-\r
- /* check to see if this changes the tile */\r
- if(mv->page->dy == 0 ) {\r
- /* go down one tile */\r
- mv->ty--;\r
- /* Snap the origin downward */\r
- mv->page->data -= mv->page->width*4;\r
- mv->page->dy = mv->map->tiles->tileHeight;\r
- //}\r
-\r
- /* draw the next row */\r
- y= 0;\r
- mapDrawRow(mv, mv->tx-1 , mv->ty-1, y);\r
- }\r
-}\r
-\r
-\r
-void\r
-mapScrollDown(map_view_t *mv, byte offset) {\r
- word x, y; /* coordinate for drawing */\r
-\r
- /* increment the pixel position and update the page */\r
- mv->page->dy += offset;\r
-\r
- /* check to see if this changes the tile */\r
- if(mv->page->dy >= mv->dyThresh ) {\r
- /* go down one tile */\r
- mv->ty++;\r
- /* Snap the origin downward */\r
- mv->page->data += mv->page->width*4;\r
- mv->page->dy = mv->map->tiles->tileHeight;\r
- //}\r
-\r
- /* draw the next row */\r
- y= SCREEN_HEIGHT + mv->map->tiles->tileHeight;\r
- mapDrawRow(mv, mv->tx-1 , mv->ty+15, y);\r
- }\r
-\r
-}\r
-\r
-\r
-void\r
-mapGoTo(map_view_t *mv, int tx, int ty) {\r
- int px, py;\r
- unsigned int i;\r
-\r
- /* set up the coordinates */\r
- mv->tx = tx;\r
- mv->ty = ty;\r
- mv->page->dx = mv->map->tiles->tileWidth;\r
- mv->page->dy = mv->map->tiles->tileHeight;\r
-\r
- /* set up the thresholds */\r
- mv->dxThresh = mv->map->tiles->tileWidth * 2;\r
- mv->dyThresh = mv->map->tiles->tileHeight * 2;\r
-\r
- /* draw the tiles */\r
- modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 0);\r
- 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) {\r
- mapDrawRow(mv, tx-1, ty, py);\r
- i+=mv->map->width - tx;\r
- }\r
-}\r
-\r
-\r
-void\r
-mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y) {\r
- word rx;\r
- word ry;\r
- //if(i==0) i=2;\r
- if(i==0)\r
- {\r
- //wwww
- modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, 0); //currently the over scan color!\r
- }\r
- else\r
- {\r
- rx = (((i-1) % ((t->data->width)/t->tileWidth)) * t->tileWidth);\r
- ry = (((i-1) / ((t->data->height)/t->tileHeight)) * t->tileHeight);
- printf("i=%d\n", i);\r
- //mxPutTile(t->data, x, y, t->tileWidth, t->tileHeight);\r
- modexDrawBmpRegion(page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));\r
- }\r
-}\r
-\r
-\r
-void\r
-mapDrawRow(map_view_t *mv, int tx, int ty, word y) {\r
- word x;\r
- int i;\r
-\r
- /* the position within the map array */\r
- i=ty * mv->map->width + tx;
- for(x=0; x<SCREEN_WIDTH+mv->dxThresh && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {\r
- if(i>=0) {\r
- /* we are in the map, so copy! */\r
- mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);\r
- }\r
- i++; /* next! */\r
- }\r
-}\r
-\r
-void\r
-mapDrawCol(map_view_t *mv, int tx, int ty, word x) {\r
- int y;\r
- int i;\r
-\r
- /* location in the map array */\r
- i=ty * mv->map->width + tx;\r
-\r
- /* We'll copy all of the columns in the screen, \r
- i + 1 row above and one below */\r
- for(y=0; y<SCREEN_HEIGHT+mv->dyThresh && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {\r
- if(i>=0) {\r
- /* we are in the map, so copy away! */\r
- mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);\r
- }\r
- i += mv->map->width;\r
- }\r
-}\r
-\r
-void qclean()\r
-{\r
- modexLeave();\r
- setkb(0);\r
-}\r
-\r
-void pdump(map_view_t *pee)\r
-{\r
- int mult=(QUADWH);\r
- int palq=(mult)*TILEWH;\r
- int palcol=0;\r
- int palx, paly;\r
- for(paly=0; paly<palq; paly+=mult){\r
- for(palx=0; palx<palq; palx+=mult){\r
- modexClearRegion(pee->page, palx+TILEWH, paly+TILEWH, mult, mult, palcol);\r
- palcol++;\r
- }\r
- }\r
-}\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