]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/scroll16.c
==== PRE SHOWPAGE TO SHOWMV CONVERSION ==== i am going to work on a really big area...
[16.git] / src / lib / scroll16.c
index 8d0f49c9cc1760fcefd25cbb48d78825c2f755e0..0bc42e7e1261d27878eeddcb0a52681d08d51b12 100755 (executable)
@@ -214,157 +214,138 @@ void walk(map_view_t *pip, player_t *player, word pn)
 }\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[0].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[0].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[0].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[0].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[0].dx+=4;\r
-                                       //modexShowPageVsync(pip[pip[0].pan->pn].page);\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
-               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[0].dx-=4;\r
-                                       //modexShowPageVsync(pip[pip[0].pan->pn].page);\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
-               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[0].dy+=4;\r
-                                       //modexShowPageVsync(pip[pip[0].pan->pn].page);\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
+                               } 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
-                       {\r
-                               if(player[pn].q<=player[pn].spt)\r
-                               {\r
-                                       pip[pip[0].pan->pn].page[0].dy-=4;\r
-                                       //modexShowPageVsync(pip[pip[0].pan->pn].page);\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
-                       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
+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
        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
+       ZC_MVInit(pip, 1, 1);\r
 \r
-       for(i=1;i<gv->video.num_of_pages;i++)\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
-               pip[i].tx       =       1;\r
-               pip[i].ty       =       1;\r
+//             if(i>ZC_MVI) {\r
+               pip[i].tx =     1;\r
+               pip[i].ty =     1;\r
+//             }\r
        }\r
 }\r
 \r
-void modexMVInit(map_view_t *pip, int tx, int ty)\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
+       /* calculate crtcOffset according to virtual width */\r
+       switch(sr)\r
+       {\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
@@ -642,6 +623,16 @@ void near ScrollDown(map_view_t *mv, player_t *player, word id, word plid)
        }\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