animatePlayer(pip, player, pn, 1);\r
ScrollRight(pip, player, 3, pn);\r
ScrollRight(pip, player, 2, pn);\r
- mapScrollRight(pip, player, !(pip[0].video->p), pn);\r
+ //mapScrollRight(pip, player, !(pip[0].video->p), pn);\r
mapScrollRight(pip, player, (pip[0].video->p), pn);\r
if(!pageflipflop) modexShowPage(pip[1].page);\r
player[pn].q++;\r
animatePlayer(pip, player, pn, 1);\r
ScrollLeft(pip, player, 3, pn);\r
ScrollLeft(pip, player, 2, pn);\r
- mapScrollLeft(pip, player, !(pip[0].video->p), pn);\r
+ //mapScrollLeft(pip, player, !(pip[0].video->p), pn);\r
mapScrollLeft(pip, player, (pip[0].video->p), pn);\r
if(!pageflipflop) modexShowPage(pip[1].page);\r
player[pn].q++;\r
animatePlayer(pip, player, pn, 1);\r
ScrollDown(pip, player, 3, pn);\r
ScrollDown(pip, player, 2, pn);\r
- mapScrollDown(pip, player, !(pip[0].video->p), pn);\r
+ //mapScrollDown(pip, player, !(pip[0].video->p), pn);\r
mapScrollDown(pip, player, (pip[0].video->p), pn);\r
if(!pageflipflop) modexShowPage(pip[1].page);\r
player[pn].q++;\r
animatePlayer(pip, player, pn, 1);\r
ScrollUp(pip, player, 3, pn);\r
ScrollUp(pip, player, 2, pn);\r
- mapScrollUp(pip, player, !(pip[0].video->p), pn);\r
+ //mapScrollUp(pip, player, !(pip[0].video->p), pn);\r
mapScrollUp(pip, player, (pip[0].video->p), pn);\r
if(!pageflipflop) modexShowPage(pip[1].page);\r
player[pn].q++;\r
}\r
\r
//panning page\r
-void panpagemanual(map_view_t *pip, player_t *player, word pn)\r
+void panPageManual(map_view_t *pip, player_t *player, word pn)\r
{\r
switch(player[pn].d)\r
{\r
{\r
if(player[pn].q<=player[pn].spt)\r
{\r
- pip[pip[0].pan->pn].page->dx+=4;\r
+ pip[pip[0].pan->pn].page[0].dx+=4;\r
modexShowPage(pip[pip[0].pan->pn].page);\r
player[pn].q++;\r
} else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].tx++; }\r
{\r
if(player[pn].q<=player[pn].spt)\r
{\r
- pip[pip[0].pan->pn].page->dx-=4;\r
+ pip[pip[0].pan->pn].page[0].dx-=4;\r
modexShowPage(pip[pip[0].pan->pn].page);\r
player[pn].q++;\r
} else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].tx--; }\r
{\r
if(player[pn].q<=player[pn].spt)\r
{\r
- pip[pip[0].pan->pn].page->dy+=4;\r
+ pip[pip[0].pan->pn].page[0].dy+=4;\r
modexShowPage(pip[pip[0].pan->pn].page);\r
player[pn].q++;\r
} else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].ty++; }\r
{\r
if(player[pn].q<=player[pn].spt)\r
{\r
- pip[pip[0].pan->pn].page->dy-=4;\r
+ pip[pip[0].pan->pn].page[0].dy-=4;\r
modexShowPage(pip[pip[0].pan->pn].page);\r
player[pn].q++;\r
} else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].ty--; }\r
- }\r
+ }//tx ty dx dy th tw\r
break;\r
}\r
//if (player[pn].d!=2) printf("player[%u].d=%u player[%u].q=%u\n", pn, player[pn].d, pn, player[pn].q);\r
}\r
\r
+/*\r
+ * modex mv setup\r
+*/\r
+void modexMVSetup(map_view_t *pip, map_t *map, pan_t *pan, global_game_variables_t *gv)\r
+{\r
+ nibble i;\r
+ // 1st page\r
+ pip[0].page = &gv->video.page[0];\r
+ pip[0].map = map;\r
+ pip[0].video = &gv->video;\r
+ pip[0].pan = pan;\r
+ modexMVInit(pip, 1, 1);\r
+\r
+ for(i=1;i<gv->video.num_of_pages;i++)\r
+ {\r
+ pip[i].page = &gv->video.page[i];\r
+ pip[i].map = pip[0].map;\r
+ pip[i].video = pip[0].video;\r
+ pip[i].pan = pip[0].pan;\r
+ //pip[i].tx = 1;\r
+ //pip[i].ty = 1;\r
+ }\r
+}\r
+\r
+void modexMVInit(map_view_t *mv, int tx, int ty)\r
+{\r
+ mv[0].tx = tx;\r
+ mv[0].ty = ty;\r
+ //mv[0].tx = mv[1].tx = tx;\r
+ //mv[0].ty = mv[1].ty = ty;\r
+}\r
+\r
/*map_t\r
allocMap(int w, int h) {\r
map_t result;\r
word x;//, y; /* coordinate for drawing */\r
\r
/* increment the pixel position and update the page */\r
- mv[id].page->dx += player[plid].speed;\r
+ mv[id].page[0].dx += player[plid].speed;\r
\r
/* check to see if this changes the tile */\r
- if(mv[id].page->dx >= mv[id].dxThresh )\r
+ if(mv[id].page[0].dx >= mv[id].dxThresh )\r
{\r
/* go forward one tile */\r
mv[id].tx++;\r
/* Snap the origin forward */\r
mv[id].page->data += 4;\r
\r
- mv[id].page->dx = mv[id].map->tiles->tileWidth;\r
+ mv[id].page[0].dx = mv[id].map->tiles->tileWidth;\r
}\r
\r
/* draw the next column */\r
x= mv[0].page->sw + mv[id].map->tiles->tileWidth;\r
if(player[plid].q%4)\r
if(id==0)\r
- mapDrawCol(&mv[0], mv[0].tx + mv[0].page->tw, mv[0].ty-1, x, player, mv->page->dx);\r
+ mapDrawCol(&mv[0], mv[0].tx + mv[0].page->tw, mv[0].ty-1, x, player, mv->page[0].dx);\r
else\r
if(!pageflipflop && !pageploop)\r
modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*(mv[0].page->th+2));\r
word x;//,y; /* coordinate for drawing */\r
\r
/* decrement the pixel position and update the page */\r
- mv[id].page->dx -= player[plid].speed;\r
+ mv[id].page[0].dx -= player[plid].speed;\r
\r
/* check to see if this changes the tile */\r
- if(mv[id].page->dx == 0)\r
+ if(mv[id].page[0].dx == 0)\r
{\r
/* go backward one tile */\r
mv[id].tx--;\r
/* Snap the origin backward */\r
mv[id].page->data -= 4;\r
\r
- mv[id].page->dx = mv[id].map->tiles->tileWidth;\r
+ mv[id].page[0].dx = mv[id].map->tiles->tileWidth;\r
}\r
\r
/* draw the next column */\r
x= 0;\r
if(player[plid].q%4)\r
if(id==0)\r
- mapDrawCol(&mv[0], mv[0].tx - 1, mv[0].ty-1, x, player, mv->page->dx);\r
+ mapDrawCol(&mv[0], mv[0].tx - 1, mv[0].ty-1, x, player, mv->page[0].dx);\r
else\r
if(!pageflipflop && !pageploop)\r
modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*(mv[0].page->th+2));\r
word y;//x, /* coordinate for drawing */\r
\r
/* decrement the pixel position and update the page */\r
- mv[id].page->dy -= player[plid].speed;\r
+ mv[id].page[0].dy -= player[plid].speed;\r
\r
/* check to see if this changes the tile */\r
- if(mv[id].page->dy == 0 )\r
+ if(mv[id].page[0].dy == 0 )\r
{\r
/* go down one tile */\r
mv[id].ty--;\r
/* Snap the origin downward */\r
mv[id].page->data -= mv[id].page->pi;\r
\r
- mv[id].page->dy = mv[id].map->tiles->tileHeight;\r
+ mv[id].page[0].dy = mv[id].map->tiles->tileHeight;\r
}\r
\r
/* draw the next row */\r
y= 0;\r
if(player[plid].q%3)\r
if(id==0)\r
- mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty-1, y, player, mv->page->dy);\r
+ mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty-1, y, player, mv->page[0].dy);\r
else\r
if(!pageflipflop && !pageploop)\r
modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*(mv[0].page->tw+2), mv[id].map->tiles->tileHeight);\r
word y;//x, /* coordinate for drawing */\r
\r
/* increment the pixel position and update the page */\r
- mv[id].page->dy += player[plid].speed;\r
+ mv[id].page[0].dy += player[plid].speed;\r
\r
/* check to see if this changes the tile */\r
- if(mv[id].page->dy >= mv[id].dyThresh )\r
+ if(mv[id].page[0].dy >= mv[id].dyThresh )\r
{\r
/* go down one tile */\r
mv[id].ty++;\r
/* Snap the origin downward */\r
mv[id].page->data += mv[id].page->pi;\r
\r
- mv[id].page->dy = mv[id].map->tiles->tileHeight;\r
+ mv[id].page[0].dy = mv[id].map->tiles->tileHeight;\r
}\r
\r
/* draw the next row */\r
y= mv[0].page->sh + mv[id].map->tiles->tileHeight;\r
if(player[plid].q%3)\r
if(id==0)\r
- mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty+mv[0].page->th, y, player, mv->page->dy);\r
+ mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty+mv[0].page->th, y, player, mv->page[0].dy);\r
else\r
if(!pageflipflop && !pageploop)\r
modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*(mv[0].page->tw+2), mv[id].map->tiles->tileHeight);\r
}\r
}\r
\r
+//===========================================================================\r
+//TODO: put player in starting position of assigned spot on map\r
+//default player position on the viewable map\r
+void playerXYpos(int x, int y, player_t *player, map_view_t *pip, nibble pn)\r
+{\r
+ player[pn].tx = x + pip[0].tx + pip[0].page->tilemidposscreenx;\r
+ player[pn].ty = y + pip[0].ty + pip[0].page->tilemidposscreeny;\r
+}\r
+//===========================================================================\r
+\r
sword chkmap(map_t *map, word q)\r
{\r
// bitmap_t bp;\r
//fix this to be far~\r
// bp = bitmapLoadPcx("data/ed.pcx");\r
// map->tiles->data = &bp;\r
- map->tiles->debug_data = map->data;\r
+#ifdef __DEBUG_MAP__\r
+ dbg_mapdata = map->data;\r
+#endif\r
map->tiles->tileHeight = 16;\r
map->tiles->tileWidth = 16;\r
map->tiles->rows = 1;\r
map->tiles->cols = 1;\r
- map->tiles->debug_text = true;\r
+#ifdef __DEBUG_MAP__\r
+ dbg_maptext = true;\r
+#endif\r
}\r
- else map->tiles->debug_text = false;\r
+#ifdef __DEBUG_MAP__\r
+ else dbg_maptext = false;\r
+#endif\r
return 0;\r
}\r
\r
int py;//px,\r
unsigned int i;\r
\r
- /* set up the coordinates */\r
- mv[0].tx = mv[1].tx = tx;\r
- mv[0].ty = mv[1].ty = ty;\r
- mv[0].page->dx = mv[1].page->dx = mv[2].page->dx = mv[3].page->dx = mv->map->tiles->tileWidth;\r
- mv[0].page->dy = mv[1].page->dy = mv[2].page->dy = mv[3].page->dy = mv->map->tiles->tileHeight;\r
-\r
- /* set up the thresholds */\r
- mv[0].dxThresh = mv[1].dxThresh = mv[2].dxThresh = mv[3].dxThresh = mv->map->tiles->tileWidth * 2;\r
- mv[0].dyThresh = mv[1].dyThresh = mv[2].dxThresh = mv[3].dxThresh = mv->map->tiles->tileHeight * 2;\r
+ mapinitmapview(mv, tx, ty);\r
\r
/* draw the tiles */\r
modexClearRegion(mv[0].page, 0, 0, mv[0].page->width, mv[0].page->height, 0);\r
modexCopyPageRegion(mv[3].page, mv[0].page, 0/**/, 0/**/, 0, 0, 24, 32);\r
}\r
\r
+void mapinitmapview(map_view_t *mv, int tx, int ty)\r
+{\r
+ /* set up the coordinates */\r
+ mv[0].tx = mv[1].tx = tx;\r
+ mv[0].ty = mv[1].ty = ty;\r
+ mv[0].page->dx = mv[1].page->dx = mv[2].page->dx = mv[3].page->dx = mv->map->tiles->tileWidth;\r
+ mv[0].page->dy = mv[1].page->dy = mv[2].page->dy = mv[3].page->dy = mv->map->tiles->tileHeight;\r
+\r
+ /* set up the thresholds */\r
+ mv[0].dxThresh = mv[1].dxThresh = mv[2].dxThresh = mv[3].dxThresh = mv->map->tiles->tileWidth * 2;\r
+ mv[0].dyThresh = mv[1].dyThresh = mv[2].dxThresh = mv[3].dxThresh = mv->map->tiles->tileHeight * 2;\r
+}\r
+\r
void near\r
mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y)\r
{\r
rx = (((i-1) % ((t->data->width)/t->tileWidth)) * t->tileWidth);\r
ry = (((i-1) / ((t->data->height)/t->tileHeight)) * t->tileHeight);\r
////0000printf("i=%d\n", i);\r
- switch(t->debug_text)\r
+#ifdef __DEBUG_MAP__\r
+ switch(dbg_maptext)\r
{\r
case 0:\r
+#endif\r
#ifndef TILERENDER\r
- modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, ((t->debug_data[i])+1));\r
+ modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, ((dbg_mapdata[i])+1));\r
//modexprint(page, x, y, 1, 15, 0, (char const *)(t->debug_data[i]));\r
#else\r
PBUFBFUN (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));\r
//draw_vrl1_vgax_modex(x-rx,y-ry,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
//modexDrawBmpRegion (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));\r
#endif\r
+#ifdef __DEBUG_MAP__\r
break;\r
case 1:\r
- modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, (t->debug_data[i])+1);\r
+ modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, (dbg_mapdata[i])+1);\r
//modexprintbig(page, x, y, 1, 15, 0, (t->debug_data));\r
/*for(texty=0; texty<2; texty++)\r
{\r
}*/\r
break;\r
}\r
+#endif\r
}\r
}\r
\r
//printf("x=%d y=%d bx=%d by=%d\n", x, y, bx, by);\r
pip->video->r=1;\r
}\r
+\r
+/*\r
+ * from zcroll16.c\r
+*/\r
+\r
+boolean boundary_check(int x, int y, int dx, int dy, int h, int w)\r
+{\r
+ return (dx > 0 && (x + dx) < w) || (dx < 0 && (x + dx) >= 0) || (dy > 0 && (y + dy) < h) || (dy < 0 && (y + dy) >= 0) || (dx == dy && dx == 0);\r
+}\r
+\r
+boolean coll_check(int x, int y, int dx, int dy, map_view_t *map_v)\r
+{\r
+ // Assume everything crosses at most 1 tile at once\r
+ return dx && 1;//crossable_tile(x + dx, map_v) || dy && crossable_tile(y + dy, map_v);\r
+}\r
+\r
+boolean ZC_walk(entity_t *ent, map_view_t *map_v)\r
+{\r
+ //return 1;\r
+ int dx = 1;\r
+ int dy = 1;\r
+ switch(ent->d)\r
+ {\r
+ case 2:\r
+ return 0;\r
+ case 1:\r
+ dx = -dx;\r
+ case 3:\r
+ dy = 0;\r
+ break;\r
+ case 0:\r
+ dy = -dy;\r
+ case 4:\r
+ dx = 0;\r
+ break;\r
+ }\r
+ if(coll_check(ent->x, ent->y, dx, dy, map_v))\r
+ {\r
+ // Allow movement\r
+ // Set speed\r
+ // Start animation\r
+ // Mark next tile as occupied\r
+ // Mark this tile as vacant\r
+ return 1;\r
+ }\r
+ return 0;\r
+}\r
+\r
+void player_walk(player_t *player, map_view_t *map_v){\r
+ int dx=16, dy=16;\r
+ if(ZC_walk(player->ent, map_v) && boundary_check(map_v->tx, map_v->ty, dx, dy, map_v->map->width - 2*map_v->page->tilesw, map_v->map->height - 2*map_v->page->tilesh))\r
+ {\r
+ mapScroll(map_v, player);\r
+ // (Un)load stuff?\r
+ }\r
+}\r
+\r
+void near mapScroll(map_view_t *mv, player_t *player)\r
+{\r
+ //word x, y; /* coordinate for drawing */\r
+ int c = 1;\r
+ int delta;\r
+ mv->delta += player->dx | player->dy;\r
+ delta = mv->delta;\r
+ mv->d = (player->dx) ? (player->dx > 0) ? 3 : 1 : (player->dy) ? (player->dy > 0) ? 4 : 0 : 2;\r
+ switch(mv->d){\r
+ case 4:\r
+ c = -1;\r
+ delta = -delta;\r
+ case 0:\r
+ if(!(delta + mv->dxThresh))\r
+ {\r
+ mv->delta = 0;\r
+ mv->ty += c;\r
+ }\r
+ break;\r
+ case 3:\r
+ c = -1;\r
+ delta = -delta;\r
+ case 1:\r
+ if(!(delta + mv->dyThresh))\r
+ {\r
+ mv->delta = 0;\r
+ mv->tx += c;\r
+ }\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+\r
+ mv->video->r=1;\r
+}\r