]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/scroll16.c
made major changes in code for the future of scroll ^^
[16.git] / src / lib / scroll16.c
index ac3bf7abd0398e699bdd1e8d65996e910e38691a..5e9a866d6027a47b8ed27a0bf71faac84faf02ec 100755 (executable)
@@ -41,7 +41,9 @@ void walk(map_view_t *pip, player_t *player, word pn)
                                        animatePlayer(pip, player, pn, 1);
                                        mapScrollRight(pip, player, 0, pn);
                                        mapScrollRight(pip, player, 1, pn);
-                                       modexShowPage(pip[1].page);
+                                       ScrollRight(pip, player, 2, pn);
+                                       ScrollRight(pip, player, 3, pn);
+                                       if(!pageflipflop) modexShowPage(pip[1].page);
                                        player[pn].q++;
                                } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx++; }
                        }
@@ -52,7 +54,7 @@ void walk(map_view_t *pip, player_t *player, word pn)
                                        INC_PER_FRAME;
                                        player[pn].x+=(player[pn].speed);
                                        animatePlayer(pip, player, pn, 0);
-                                       modexShowPage(pip[1].page);
+                                       if(!pageflipflop) modexShowPage(pip[1].page);
                                        player[pn].q++;
                                } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx++; }
                        }
@@ -64,7 +66,7 @@ void walk(map_view_t *pip, player_t *player, word pn)
 #else
                                modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 14);
 #endif
-                               modexShowPage(pip[1].page);
+                               if(!pageflipflop) modexShowPage(pip[1].page);
                                player[pn].d = 2;
                        }
                        player[pn].triggerx = player[pn].tx+1;
@@ -82,7 +84,9 @@ void walk(map_view_t *pip, player_t *player, word pn)
                                        animatePlayer(pip, player, pn, 1);
                                        mapScrollLeft(pip, player, 0, pn);
                                        mapScrollLeft(pip, player, 1, pn);
-                                       modexShowPage(pip[1].page);
+                                       ScrollLeft(pip, player, 2, pn);
+                                       ScrollLeft(pip, player, 3, pn);
+                                       if(!pageflipflop) modexShowPage(pip[1].page);
                                        player[pn].q++;
                                } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx--; }
                        }
@@ -93,7 +97,7 @@ void walk(map_view_t *pip, player_t *player, word pn)
                                        INC_PER_FRAME;
                                        player[pn].x-=(player[pn].speed);
                                        animatePlayer(pip, player, pn, 0);
-                                       modexShowPage(pip[1].page);
+                                       if(!pageflipflop) modexShowPage(pip[1].page);
                                        player[pn].q++;
                                } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx--; }
                        }
@@ -105,7 +109,7 @@ void walk(map_view_t *pip, player_t *player, word pn)
 #else
                                modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 10);
 #endif
-                               modexShowPage(pip[1].page);
+                               if(!pageflipflop) modexShowPage(pip[1].page);
                                player[pn].d = 2;
                        }
                        player[pn].triggerx = player[pn].tx-1;
@@ -123,7 +127,9 @@ void walk(map_view_t *pip, player_t *player, word pn)
                                        animatePlayer(pip, player, pn, 1);
                                        mapScrollDown(pip, player, 0, pn);
                                        mapScrollDown(pip, player, 1, pn);
-                                       modexShowPage(pip[1].page);
+                                       ScrollDown(pip, player, 2, pn);
+                                       ScrollDown(pip, player, 3, pn);
+                                       if(!pageflipflop) modexShowPage(pip[1].page);
                                        player[pn].q++;
                                } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty++; }
                        }
@@ -134,7 +140,7 @@ void walk(map_view_t *pip, player_t *player, word pn)
                                        INC_PER_FRAME;
                                        player[pn].y+=(player[pn].speed);
                                        animatePlayer(pip, player, pn, 0);
-                                       modexShowPage(pip[1].page);
+                                       if(!pageflipflop) modexShowPage(pip[1].page);
                                        player[pn].q++;
                                } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty++; }
                        }
@@ -146,7 +152,7 @@ void walk(map_view_t *pip, player_t *player, word pn)
 #else
                                modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 9);
 #endif
-                               modexShowPage(pip[1].page);
+                               if(!pageflipflop) modexShowPage(pip[1].page);
                                player[pn].d = 2;
                        }
                        player[pn].triggerx = player[pn].tx;
@@ -164,7 +170,9 @@ void walk(map_view_t *pip, player_t *player, word pn)
                                        animatePlayer(pip, player, pn, 1);
                                        mapScrollUp(pip, player, 0, pn);
                                        mapScrollUp(pip, player, 1, pn);
-                                       modexShowPage(pip[1].page);
+                                       ScrollUp(pip, player, 2, pn);
+                                       ScrollUp(pip, player, 3, pn);
+                                       if(!pageflipflop) modexShowPage(pip[1].page);
                                        player[pn].q++;
                                } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty--; }
                        }
@@ -175,7 +183,7 @@ void walk(map_view_t *pip, player_t *player, word pn)
                                        INC_PER_FRAME;
                                        player[pn].y-=(player[pn].speed);
                                        animatePlayer(pip, player, 0, pn);
-                                       modexShowPage(pip[1].page);
+                                       if(!pageflipflop) modexShowPage(pip[1].page);
                                        player[pn].q++;
                                } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty--; }
                        }
@@ -187,7 +195,7 @@ void walk(map_view_t *pip, player_t *player, word pn)
 #else
                                modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 12);
 #endif
-                               modexShowPage(pip[1].page);
+                               if(!pageflipflop) modexShowPage(pip[1].page);
                                player[pn].d = 2;
                        }
                        player[pn].triggerx = player[pn].tx;
@@ -315,7 +323,7 @@ void near mapScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
 {
        word x, y;  /* coordinate for drawing */
 
-       /* increment the pixel position and update the page */
+       /* decrement the pixel position and update the page */
        mv[id].page->dx -= player[plid].speed;
 
        /* check to see if this changes the tile */
@@ -344,7 +352,7 @@ void near mapScrollUp(map_view_t *mv, player_t *player, word id, word plid)
 {
        word x, y;  /* coordinate for drawing */
 
-       /* increment the pixel position and update the page */
+       /* decrement the pixel position and update the page */
        mv[id].page->dy -= player[plid].speed;
 
        /* check to see if this changes the tile */
@@ -394,6 +402,65 @@ void near mapScrollDown(map_view_t *mv, player_t *player, word id, word plid)
        //}
 }
 
+
+//TODO finish this wwww
+void near ScrollRight(map_view_t *mv, player_t *player, word id, word plid)
+{
+       /* increment the pixel position and update the page */
+       mv[0].video->page[id].dx += player[plid].speed;
+
+       /* check to see if this changes the tile */
+       if(mv[0].video->page[id].dx >= mv[id].dxThresh )
+       {
+               /* Snap the origin forward */
+               mv[0].video->page[id].data += 4;
+               mv[0].video->page[id].dx = mv[0].map->tiles->tileWidth;
+       }
+}
+
+
+void near ScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
+{
+       /* decrement the pixel position and update the page */
+       mv[0].video->page[id].dx -= player[plid].speed;
+
+       /* check to see if this changes the tile */
+       if(mv[0].video->page[id].dx == 0)
+       {
+               /* Snap the origin backward */
+               mv[0].video->page[id].data -= 4;
+               mv[0].video->page[id].dx = mv[0].map->tiles->tileWidth;
+       }
+}
+
+void near ScrollUp(map_view_t *mv, player_t *player, word id, word plid)
+{
+       /* decrement the pixel position and update the page */
+       mv[0].video->page[id].dy -= player[plid].speed;
+
+       /* check to see if this changes the tile */
+       if(mv[0].video->page[id].dy == 0)
+       {
+               /* Snap the origin backward */
+               mv[0].video->page[id].data -= 4;
+               mv[0].video->page[id].dy = mv[0].map->tiles->tileWidth;
+       }
+}
+
+void near ScrollDown(map_view_t *mv, player_t *player, word id, word plid)
+{
+       /* increment the pixel position and update the page */
+       mv[0].video->page[id].dy += player[plid].speed;
+
+       /* check to see if this changes the tile */
+       if(mv[0].video->page[id].dy >= mv[id].dxThresh )
+       {
+               /* Snap the origin forward */
+               mv[0].video->page[id].data += 4;
+               mv[0].video->page[id].dy = mv[0].map->tiles->tileWidth;
+       }
+}
+
 sword chkmap(map_t *map, word q)
 {
 //     bitmap_t bp;
@@ -586,32 +653,51 @@ void mapDrawWCol(map_view_t *mv, int tx, int ty, word x)
        //setkb(0);
 }*/
 
+unsigned char shinku_fps_indicator_page = 0;
+boolean pageflipflop;
+//gv->video.p
+
 /*     sync    */
 void shinku(global_game_variables_t *gv)
 {
+       word x = (0) + gv->video.page[shinku_fps_indicator_page].dx; // follow the screen
+       word y = (0) + gv->video.page[shinku_fps_indicator_page].dy; // follow the screen
+       word w = 64;
+       word h = 8;
+       word col = 7;
+       word bgcol = 0;
+       word type = 1;
+       byte o,o2,i;
        //modexCopyPageRegion(pip[1].page, pip[2].page, 16, 16, 16, 16, (14*8)+4, 8+4);
+       /* block copy to visible RAM from offscreen */
+       vga_setup_wm1_block_copy();
+       modexCopyPageRegion(&(gv->video.page[shinku_fps_indicator_page]), &(gv->video.page[!shinku_fps_indicator_page]), x, y, x+w, 0, w, h);
+//     o =     *(gv->video.page[2].data); // source offscreen
+//     o2 =    *(gv->video.page[shinku_fps_indicator_page].data)+(y * vga_state.vga_stride) + (x >> 2); // dest visible (original stride)
+//     for (i=0;i < h;i++,o += vga_state.vga_draw_stride,o2 += vga_state.vga_stride) vga_wm1_mem_block_copy(o2,o,w >> 2);
+       /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
+       vga_restore_rm0wm0();
        if(elapsed_timer(gv) >= (1.0 / gv->kurokku.frames_per_second))
        {
-               word x = (16);
-               word y = (16);
-               word col = 1;
-               word bgcol = 0;
-               word type = 1;
-               //t=(((*(gv->clock))-gv->clock_start) /18.2);
-               sprintf(gv->pee, "%f fps", (double)gv->kurokku.tiku/ticktock(gv));
-               printf("%s\n", gv->pee);
-               //FIXME PLEASE!!
-               modexprint(&(gv->video.page[0]), 200, 200, type, col, bgcol, gv->pee);
-//++++ modexprint(&(gv->video.page[0]), x, y, type, col, bgcol, gv->pee);
-               //(gv->clock_start)=*(gv->clock);
+               sprintf(gv->pee, "%.0f fps", (double)gv->kurokku.tiku/ticktock(gv));
+               //modexClearRegion(&(gv->video.page[shinku_fps_indicator_page]), x, y, w, h, 45);
+               modexprint(&(gv->video.page[shinku_fps_indicator_page]), x, y, type, col, bgcol, gv->pee);
                gv->kurokku.tiku=0;
-       }
-       //modexprint(page, 16, 16, 1, 15, 0, pee);
+               /* block copy to visible RAM from offscreen */
+               vga_setup_wm1_block_copy();
+//             o =     *(gv->video.page[shinku_fps_indicator_page].data); // source offscreen
+//             o2 =    *(gv->video.page[2].data)+(y * vga_state.vga_stride) + (x >> 2); // dest visible (original stride)
+//             for (i=0;i < h;i++,o += vga_state.vga_draw_stride,o2 += vga_state.vga_stride) vga_wm1_mem_block_copy(o2,o,w >> 2);
+               modexCopyPageRegion(&(gv->video.page[shinku_fps_indicator_page]), &(gv->video.page[!shinku_fps_indicator_page]), x, y, x, 0, w, h);
+               /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
+               vga_restore_rm0wm0();
+       }else //copy dat sheet
        gv->kurokku.tiku++;
+
        switch(gv->kurokku.fpscap)
        {
                case 0:
-                       //modexprint(page, 16, 32, 1, 15, 0, "sanic!");
+                       modexprint(&(gv->video.page[shinku_fps_indicator_page]), x, y+8, type, col, bgcol, "sanic!");
                        gv->kurokku.frames_per_second=1;
                break;
                case 1:
@@ -621,6 +707,8 @@ void shinku(global_game_variables_t *gv)
                        gv->kurokku.frames_per_second=60;
                break;
        }
+       if(pageflipflop) modexShowPage(&(gv->video.page[gv->video.p]));
+       gv->video.p=!gv->video.p;
 }
 
 void near animatePlayer(map_view_t *pip, player_t *player, word pn, sword scrollswitch)
@@ -679,8 +767,11 @@ void near animatePlayer(map_view_t *pip, player_t *player, word pn, sword scroll
 #define FRAME2 modexClearRegion(pip[1].page, x, y, 24, 32, 1+dire);
 #define FRAME3 modexClearRegion(pip[1].page, x, y, 24, 32, dire);
 #define FRAME4 modexClearRegion(pip[1].page, x, y, 24, 32, 1+dire);
-#endif
-       modexCopyPageRegion(pip[1].page, pip[0].page, x-4, y-4, x-4, y-4, 28, 40);
+       #endif
+       if(pageflipflop)
+       modexCopyPageRegion(pip[pip->video->p].page,
+ pip[!(pip->video->p)].page, x-4, y-4, x-4, y-4, 28, 40);
+       else modexCopyPageRegion(pip[1].page, pip[0].page, x-4, y-4, x-4, y-4, 28, 40);
        //modexCopyPageRegion(pip[2].page, pip[1].page, 16, 16, 16, 16, (14*8)+4, 8+4);
        if(2>ls && ls>=1) { FRAME1 }else
        if(3>ls && ls>=2) { FRAME2 }else