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 ZC_panPageManual(map_view_t *pip, player_t *player, word pn)\r
{\r
+#define SHOWMVFUN_ ZC_ShowMV(pip, 0, 0);\r
switch(player[pn].d)\r
{\r
//right movement\r
case 3:\r
- if(pip[pip[0].pan->pn].tx >= 0 && pip[pip[0].pan->pn].tx+pip[pip[0].pan->pn].page->tw < pip[pip[0].pan->pn].page->tilesw)\r
+ if(pip[0].tx >= 0 && pip[0].tx+pip[0].page->tw < pip[0].page->tilesw)\r
{\r
if(player[pn].q<=player[pn].spt)\r
{\r
- pip[pip[0].pan->pn].page->dx+=4;\r
- modexShowPage(pip[pip[0].pan->pn].page);\r
+ pip[0].page->dx+=4;\r
+ SHOWMVFUN_;\r
player[pn].q++;\r
- } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].tx++; }\r
+ } else { player[pn].q = 1; player[pn].d = 2; pip[0].tx++; }\r
}\r
break;\r
\r
//left movement\r
case 1:\r
- if(pip[pip[0].pan->pn].tx > 0 && pip[pip[0].pan->pn].tx+pip[pip[0].pan->pn].page->tw <= pip[pip[0].pan->pn].page->tilesw)\r
+ if(pip[0].tx > 0 && pip[0].tx+pip[0].page->tw <= pip[0].page->tilesw)\r
{\r
if(player[pn].q<=player[pn].spt)\r
{\r
- pip[pip[0].pan->pn].page->dx-=4;\r
- modexShowPage(pip[pip[0].pan->pn].page);\r
+ pip[0].page->dx-=4;\r
+ SHOWMVFUN;\r
player[pn].q++;\r
- } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].tx--; }\r
+ } else { player[pn].q = 1; player[pn].d = 2; pip[0].tx--; }\r
}\r
break;\r
\r
//down movement\r
case 4:\r
- if(pip[pip[0].pan->pn].ty >= 0 && pip[pip[0].pan->pn].ty+pip[pip[0].pan->pn].page->th < pip[pip[0].pan->pn].page->tilesh)\r
+ if(pip[0].ty >= 0 && pip[0].ty+pip[0].page->th < pip[0].page->tilesh)\r
{\r
if(player[pn].q<=player[pn].spt)\r
{\r
- pip[pip[0].pan->pn].page->dy+=4;\r
- modexShowPage(pip[pip[0].pan->pn].page);\r
+ pip[0].page->dy+=4;\r
+ SHOWMVFUN_;\r
player[pn].q++;\r
- } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].ty++; }\r
+ } else { player[pn].q = 1; player[pn].d = 2; pip[0].ty++; }\r
}\r
break;\r
\r
//up movement\r
case 0:\r
- if(pip[pip[0].pan->pn].ty > 0 && pip[pip[0].pan->pn].ty+pip[pip[0].pan->pn].page->th <= pip[pip[0].pan->pn].page->tilesh)\r
+ if(pip[0].ty > 0 && pip[0].ty+pip[0].page->th <= pip[0].page->tilesh)\r
{\r
if(player[pn].q<=player[pn].spt)\r
{\r
- pip[pip[0].pan->pn].page->dy-=4;\r
- modexShowPage(pip[pip[0].pan->pn].page);\r
+ pip[0].page->dy-=4;\r
+ SHOWMVFUN_;\r
player[pn].q++;\r
- } else { player[pn].q = 1; player[pn].d = 2; pip[pip[0].pan->pn].ty--; }\r
- }\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
-//panning vmem\r
-void panVmemManual(map_view_t *pip, player_t *player, word pn)\r
-{\r
- switch(player[pn].d)\r
- {\r
- //right movement\r
- case 3:\r
- if(pip[pip[0].pan->pn].tx >= 0 && pip[pip[0].pan->pn].tx+pip[pip[0].pan->pn].page->tw < pip[pip[0].pan->pn].page->tilesw)\r
- {\r
- if(player[pn].q<=player[pn].spt)\r
- {\r
- pip[pip[0].pan->pn].page->dx+=4;\r
- modexShowPageVsync(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
- break;\r
-\r
- //left movement\r
- case 1:\r
- if(pip[pip[0].pan->pn].tx > 0 && pip[pip[0].pan->pn].tx+pip[pip[0].pan->pn].page->tw <= pip[pip[0].pan->pn].page->tilesw)\r
- {\r
- if(player[pn].q<=player[pn].spt)\r
- {\r
- pip[pip[0].pan->pn].page->dx-=4;\r
- modexShowPageVsync(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
+ } else { player[pn].q = 1; player[pn].d = 2; pip[0].ty--; }\r
}\r
break;\r
-\r
- //down movement\r
- case 4:\r
- if(pip[pip[0].pan->pn].ty >= 0 && pip[pip[0].pan->pn].ty+pip[pip[0].pan->pn].page->th < pip[pip[0].pan->pn].page->tilesh)\r
- {\r
- if(player[pn].q<=player[pn].spt)\r
- {\r
- pip[pip[0].pan->pn].page->dy+=4;\r
- modexShowPageVsync(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
- break;\r
-\r
- //up movement\r
- case 0:\r
- if(pip[pip[0].pan->pn].ty > 0 && pip[pip[0].pan->pn].ty+pip[pip[0].pan->pn].page->th <= pip[pip[0].pan->pn].page->tilesh)\r
- {\r
- if(player[pn].q<=player[pn].spt)\r
- {\r
- pip[pip[0].pan->pn].page->dy-=4;\r
- modexShowPageVsync(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
- 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 *mv, map_t *map, pan_t *pan, global_game_variables_t *gv)\r
+void ZC_MVSetup(map_view_t *pip, map_t *map, pan_t *pan, global_game_variables_t *gv)\r
{\r
+#define ZC_MVI 1\r
nibble i;\r
// 1st page\r
- mv[0].page = &gv->video.page[0];\r
- mv[0].map = map;\r
- mv[0].video = &gv->video;\r
- mv[0].pan = pan;\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
+ ZC_MVInit(pip, 1, 1);\r
+\r
+ for(i=ZC_MVI;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
+// if(i>ZC_MVI) {\r
+ pip[i].tx = 1;\r
+ pip[i].ty = 1;\r
+// }\r
+ }\r
+}\r
+\r
+void ZC_MVInit(map_view_t *pip, int tx, int ty)\r
+{\r
+ pip[0].tx = tx;\r
+ pip[0].ty = ty;\r
+ //pip[0].tx = pip[1].tx = tx;\r
+ //pip[0].ty = pip[1].ty = ty;\r
+}\r
+\r
+void ZC_ShowMV(map_view_t *moo, boolean vsync, boolean sr)\r
+{\r
+ word high_address, low_address, offset;\r
+ byte crtcOffset;\r
+\r
+ /* calculate offset */\r
+ offset = (word) moo[moo[0].pan->pn].page->data;\r
+ offset += moo[0].page->dy * (moo[0].page->width >> 2 );\r
+ offset += moo[0].page->dx >> 2;\r
\r
- for(i=1;i<gv->video.num_of_pages;i++)\r
+ /* calculate crtcOffset according to virtual width */\r
+ switch(sr)\r
{\r
- mv[i].page = &gv->video.page[i];\r
- mv[i].map = mv[0].map;\r
- mv[i].video = mv[0].video;\r
- mv[i].pan = mv[0].pan;\r
+ case 1:\r
+ crtcOffset = moo[0].page->sw >> 3;\r
+ break;\r
+ default:\r
+ case 0:\r
+ crtcOffset = moo[0].page->width >> 3;\r
+ break;\r
}\r
+\r
+ high_address = HIGH_ADDRESS | (offset & 0xff00);\r
+ low_address = LOW_ADDRESS | (offset << 8);\r
+\r
+ /* wait for appropriate timing and then program CRTC */\r
+ if(vsync) while ((inp(INPUT_STATUS_1) & DISPLAY_ENABLE));\r
+ outpw(CRTC_INDEX, high_address);\r
+ outpw(CRTC_INDEX, low_address);\r
+ outp(CRTC_INDEX, 0x13);\r
+ outp(CRTC_DATA, crtcOffset);\r
+\r
+ /* wait for one retrace */\r
+ if(vsync) while (!(inp(INPUT_STATUS_1) & VRETRACE));\r
+\r
+ /* do PEL panning here */\r
+ outp(AC_INDEX, 0x33);\r
+ outp(AC_INDEX, (moo[0].page->dx & 0x03) << 1);\r
}\r
\r
/*map_t\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