]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/scroll16.c
optimized scrolling ww
[16.git] / src / lib / scroll16.c
index 0e9949425c037d794f20db0e9c2ad2ff94dfb96f..735b76fc1950d69274828bc43691db087f5fafcc 100755 (executable)
@@ -380,12 +380,12 @@ void near mapScrollRight(map_view_t *mv, player_t *player, word id, word plid)
        /* draw the next column */
        x= mv[0].page->sw + mv[id].map->tiles->tileWidth;
        if(player[plid].q%4)
-               if(!pageflipflop){
                if(id==0)
                        mapDrawCol(&mv[0], mv[0].tx + mv[0].page->tw, mv[0].ty-1, x, player, mv->page->dx);
                else
-                       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));
-               }else mapDrawCol(&mv[(!mv[0].video->p)], mv[0].tx + mv[0].page->tw, mv[0].ty-1, x, player, mv->page->dx);
+                       if(!pageflipflop)
+                               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));
+                       else    mv[0].video->r=1;
 }
 
 
@@ -401,7 +401,6 @@ void near mapScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
        {
        /* go backward one tile */
        mv[id].tx--;
-
        /* Snap the origin backward */
        mv[id].page->data -= 4;
        mv[id].page->dx = mv[id].map->tiles->tileWidth;
@@ -410,12 +409,12 @@ void near mapScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
        /* draw the next column */
        x= 0;
        if(player[plid].q%4)
-               if(!pageflipflop){
                if(id==0)
                        mapDrawCol(&mv[0], mv[0].tx - 1, mv[0].ty-1, x, player, mv->page->dx);
                else
-                       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));
-       }else mapDrawCol(&mv[(!mv[0].video->p)], mv[0].tx - 1, mv[0].ty-1, x, player, mv->page->dx);
+                       if(!pageflipflop)
+                               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));
+                       else    mv[0].video->r=1;
 }
 
 
@@ -439,12 +438,12 @@ void near mapScrollUp(map_view_t *mv, player_t *player, word id, word plid)
        /* draw the next row */
        y= 0;
        if(player[plid].q%3)
-               if(!pageflipflop){
                if(id==0)
                        mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty-1, y, player, mv->page->dy);
                else
-                       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);
-       }else mapDrawRow(&mv[(!mv[0].video->p)], mv[0].tx - 1, mv[0].ty-1, y, player, mv->page->dy);
+                       if(!pageflipflop)
+                               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);
+                       else    mv[0].video->r=1;
 }
 
 void near mapScrollDown(map_view_t *mv, player_t *player, word id, word plid)
@@ -467,12 +466,12 @@ void near mapScrollDown(map_view_t *mv, player_t *player, word id, word plid)
        /* draw the next row */
        y= mv[0].page->sh + mv[id].map->tiles->tileHeight;
        if(player[plid].q%3)
-               if(!pageflipflop){
                if(id==0)
                        mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty+mv[0].page->th, y, player, mv->page->dy);
                else
-                       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);
-       }else mapDrawRow(&mv[(!mv[0].video->p)], mv[0].tx - 1, mv[0].ty+mv[0].page->th, y, player, mv->page->dy);
+                       if(!pageflipflop)
+                               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);
+                       else    mv[0].video->r=1;
 }
 
 
@@ -487,6 +486,13 @@ void near ScrollRight(map_view_t *mv, player_t *player, word id, word plid)
        {
                /* block copy pattern to where we will draw the sprite */
                vga_setup_wm1_block_copy();
+//             {
+//                     word i;
+//                     byte o,o2;
+//                     o2 = *mv[0].video->page[id].data+4;
+//                     o = *mv[0].video->page[id].data;
+//                     for (i=0;i < mv[0].video->page[id].height;i++,o += mv[0].video->page[id].width+vga_state.vga_stride,o2 += (*mv[0].video->page[id].data >> 2)) vga_wm1_mem_block_copy(o2,o,*mv[0].video->page[id].data >> 2);
+//             }
                _fmemmove(mv[0].video->page[id].data+4, mv[0].video->page[id].data, mv[0].video->page[id].pagesize);
                /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
                vga_restore_rm0wm0();
@@ -496,7 +502,6 @@ void near ScrollRight(map_view_t *mv, player_t *player, word id, word plid)
        }
 }
 
-
 void near ScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
 {
        /* decrement the pixel position and update the page */
@@ -507,6 +512,13 @@ void near ScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
        {
                /* block copy pattern to where we will draw the sprite */
                vga_setup_wm1_block_copy();
+//             {
+//                     word i;
+//                     byte o,o2;
+//                     o2 = *mv[0].video->page[id].data-4;
+//                     o = *mv[0].video->page[id].data;
+//                     for (i=0;i < mv[0].video->page[id].height;i++,o += mv[0].video->page[id].width+vga_state.vga_stride,o2 += (*mv[0].video->page[id].data >> 2)) vga_wm1_mem_block_copy(o2,o,*mv[0].video->page[id].data >> 2);
+//             }
                _fmemmove(mv[0].video->page[id].data-4, mv[0].video->page[id].data, mv[0].video->page[id].pagesize);
                /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
                vga_restore_rm0wm0();
@@ -526,6 +538,13 @@ void near ScrollUp(map_view_t *mv, player_t *player, word id, word plid)
        {
                /* block copy pattern to where we will draw the sprite */
                vga_setup_wm1_block_copy();
+//             {
+//                     word i;
+//                     byte o,o2;
+//                     o2 = *mv[0].video->page[id].data-mv[0].video->page[id].pi;
+//                     o = *mv[0].video->page[id].data;
+//                     for (i=0;i < mv[0].video->page[id].height;i++,o += mv[0].video->page[id].width+vga_state.vga_stride,o2 += (*mv[0].video->page[id].data >> 2)) vga_wm1_mem_block_copy(o2,o,*mv[0].video->page[id].data >> 2);
+//             }
                _fmemmove(mv[0].video->page[id].data-mv[0].video->page[id].pi, mv[0].video->page[id].data, mv[0].video->page[id].pagesize);
                /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
                vga_restore_rm0wm0();
@@ -545,6 +564,13 @@ void near ScrollDown(map_view_t *mv, player_t *player, word id, word plid)
        {
                /* block copy pattern to where we will draw the sprite */
                vga_setup_wm1_block_copy();
+//             {
+//                     word i;
+//                     byte o,o2;
+//                     o2 = *mv[0].video->page[id].data+mv[0].video->page[id].pi;
+//                     o = *mv[0].video->page[id].data;
+//                     for (i=0;i < mv[0].video->page[id].height;i++,o += mv[0].video->page[id].width+vga_state.vga_stride,o2 += (*mv[0].video->page[id].data >> 2)) vga_wm1_mem_block_copy(o2,o,*mv[0].video->page[id].data >> 2);
+//             }
                _fmemmove(mv[0].video->page[id].data+mv[0].video->page[id].pi, mv[0].video->page[id].data, mv[0].video->page[id].pagesize);
                /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
                vga_restore_rm0wm0();
@@ -622,17 +648,17 @@ void mapGoTo(map_view_t *mv, int tx, int ty)
        i+=mv->map->width - tx;
        }
        modexCopyPageRegion(mv[1].page, mv[0].page, 0, 0, 0, 0, mv[0].page->width, mv[0].page->height);
-       {
-               unsigned int k,j,o;
-               /* fill screen with a distinctive pattern */
-               for (k=0;k < vga_state.vga_width;k++) {
-                       o = k >> 2;
-                       vga_write_sequencer(0x02/*map mask*/,1 << (k&3));
-                               for (j=0;j < (mv[0].page->height)+(mv[1].page->height)+(mv[2].page->height)+(mv[3].page->height);j++,o += vga_state.vga_stride)
-                                       vga_state.vga_graphics_ram[o] = (k^j)&15; // VRL samples put all colors in first 15!
-               }
-       }
-       modexCopyPageRegion(mv[3].page, mv[!(mv->video->p)].page, 0/**/, 0/**/, 0, 128, 24, 36);
+//     {
+//             unsigned int k,j,o;
+//             /* fill screen with a distinctive pattern */
+//             for (k=0;k < vga_state.vga_width;k++) {
+//                     o = k >> 2;
+//                     vga_write_sequencer(0x02/*map mask*/,1 << (k&3));
+//                             for (j=0;j < (mv[0].page->height)+(mv[1].page->height)+(mv[2].page->height)+(mv[3].page->height);j++,o += vga_state.vga_stride)
+//                                     vga_state.vga_graphics_ram[o] = (k^j)&15; // VRL samples put all colors in first 15!
+//             }
+//     }
+       modexCopyPageRegion(mv[3].page, mv[!(mv->video->p)].page, 0/**/, 0/**/, 0, 128, 20, 36);
 }
 
 
@@ -805,24 +831,22 @@ void shinku(global_game_variables_t *gv)
        switch(gv->kurokku.fpscap)
        {
                case 0:
-                       modexprint(&(gv->video.page[shinku_fps_indicator_page]), x, y+8, type, col, bgcol, "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){
        if(gv->video.r){
-               /* block copy pattern to where we will draw the sprite */
-               vga_setup_wm1_block_copy();
-               _fmemcpy((gv->video.page[(gv->video.p)]).data, (gv->video.page[(!gv->video.p)]).data, gv->video.page[(!gv->video.p)].pagesize);
-               //modexCopyPageRegion(&(gv->video.page[(gv->video.p)]), &(gv->video.page[(!gv->video.p)]), 0, 0, 0, 0, gv->video.page[gv->video.p].width, gv->video.page[!gv->video.p].height);
-               /* must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally */
-               vga_restore_rm0wm0();
+               //vga_setup_wm1_block_copy();
+               //_fmemcpy((gv->video.page[(gv->video.p)]).data, (gv->video.page[(!gv->video.p)]).data, gv->video.page[(!gv->video.p)].pagesize);
+               //vga_restore_rm0wm0();
+               modexCopyPageRegion(&(gv->video.page[(gv->video.p)]), &(gv->video.page[(!gv->video.p)]), 0, 0, 0, 0, gv->video.page[gv->video.p].width, gv->video.page[!gv->video.p].height);
                modexShowPage(&(gv->video.page[gv->video.p]));
                gv->video.p=!gv->video.p;
                gv->video.r=!gv->video.r;
@@ -839,8 +863,15 @@ void near animatePlayer(map_view_t *pip, player_t *player, word pn, sword scroll
        sword qq; //scroll offset
        word ls = player[pn].persist_aniframe;
 
-       if(scrollswitch==0) qq = 0;
-       else qq = ((player[pn].q)*(player[pn].speed));
+       switch(scrollswitch)
+       {
+               case 0:
+                       qq = 0;
+               break;
+               default:
+                       qq = ((player[pn].q)*(player[pn].speed));
+               break;
+       }
        //x-=4;
        y-=TILEWH;
        switch (player[pn].d)