]> 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 5c8c4dd282d4981a19a3880314da2a1eb932e7da..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;
@@ -488,8 +555,9 @@ mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y)
                                modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, ((t->debug_data[i])+1));
                                //cannot print number value du to it being slow as bakapee
 #else
-                               //PBUFBFUN              (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));
-
+                               PBUFBFUN                (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));
+                               /* then the sprite. note modding ram ptr means we just draw to (x&3,0) */
+                               //draw_vrl1_vgax_modex(x-rx,y-ry,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));
                                //modexDrawBmpRegion    (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));
 #endif
                        break;
@@ -585,40 +653,62 @@ 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(map_view_t *pip, global_game_variables_t *gv)
+void shinku(global_game_variables_t *gv)
 {
-       //float t;
+       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 = (8+16);
-               word col = 15;
-               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("%f fps", (double)gv->kurokku.tiku/ticktock(gv));
-               //modexprint(pip[1].page, 16, 16, 1, 15, 0, gv->pee, 1);
-               //(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:
                        //turn this off if XT
-                       //modexWaitBorder();
-                       vga_wait_for_vsync();
+                       modexWaitBorder();
+                       //vga_wait_for_vsync();
                        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)
@@ -677,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