]> 4ch.mooo.com Git - 16.git/blobdiff - src/scroll.c
modified: Project 16.bfproject
[16.git] / src / scroll.c
index 5275fc69119c7b4acbfa4b58a2ffe67a9d9d9870..1656134034b70dbf43b7a461a801f3accc952219 100644 (file)
@@ -46,14 +46,16 @@ struct {
 
 map_t allocMap(int w, int h);
 void initMap(map_t *map);
-void mapScrollRight(map_view_t *mv, byte offset);
-void mapScrollLeft(map_view_t *mv, byte offest);
-void mapScrollUp(map_view_t *mv, byte offset);
-void mapScrollDown(map_view_t *mv, byte offset);
+void mapScrollRight(map_view_t *mv, byte offset, short lp);
+void mapScrollLeft(map_view_t *mv, byte offest, short lp);
+void mapScrollUp(map_view_t *mv, byte offset, short lp);
+void mapScrollDown(map_view_t *mv, byte offset, short lp);
 void mapGoTo(map_view_t *mv, int tx, int ty);
 void mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y);
-void mapDrawRow(map_view_t *mv, int tx, int ty, word y);
-void mapDrawCol(map_view_t *mv, int tx, int ty, word x);
+void mapDrawRow(map_view_t *mv, int tx, int ty, word y, word poopoffset);
+void mapDrawCol(map_view_t *mv, int tx, int ty, word x, word poopoffset);
+void mapDrawWRow(map_view_t *mv, int tx, int ty, word y);
+void mapDrawWCol(map_view_t *mv, int tx, int ty, word x);
 void animatePlayer(map_view_t *src, map_view_t *dest, /*map_view_t *top, */short d1, short d2, int x, int y, int ls, int lp, bitmap_t *bmp);
 
 #define TILEWH 16
@@ -121,8 +123,8 @@ void main() {
        //TODO: erase player initial draw
        modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 64, 24, 32, &ptmp);
        //temp draw trigger box
-       modexClearRegion(spri->page, player.triggerx*16, player.triggery*16, 16, 16, 0);
-       modexClearRegion(bg->page, player.triggerx*16, player.triggery*16, 16, 16, 0);
+       modexClearRegion(spri->page, player.triggerx*16, player.triggery*16, 16, 16, 1);
+       modexClearRegion(bg->page, player.triggerx*16, player.triggery*16, 16, 16, 1);
        modexShowPage(spri->page);
        while(!keyp(1))//!keyp(1))
        {
@@ -172,8 +174,8 @@ break;
                                INC_PER_FRAME;
                                //animatePlayer(bg, spri, mask, 1, 1, player.x, player.y, persist_aniframe, q, &ptmp);
                                animatePlayer(bg, spri, 1, 1, player.x, player.y, persist_aniframe, q, &ptmp);
-                               mapScrollRight(bg, SPEED);
-                               mapScrollRight(spri, SPEED);
+                               mapScrollRight(bg, SPEED, q);
+                               mapScrollRight(spri, SPEED, q);
                                //mapScrollRight(mask, SPEED);
                                modexShowPage(spri->page);
                        }
@@ -210,8 +212,8 @@ break;
                                INC_PER_FRAME;
                                //animatePlayer(bg, spri, mask, 3, 1, player.x, player.y, persist_aniframe, q, &ptmp);
                                animatePlayer(bg, spri, 3, 1, player.x, player.y, persist_aniframe, q, &ptmp);
-                               mapScrollLeft(bg, SPEED);
-                               mapScrollLeft(spri, SPEED);
+                               mapScrollLeft(bg, SPEED, q);
+                               mapScrollLeft(spri, SPEED, q);
                                //mapScrollLeft(mask, SPEED);
                                modexShowPage(spri->page);
                        }
@@ -248,8 +250,8 @@ break;
                                INC_PER_FRAME;
                                //animatePlayer(bg, spri, mask, 2, 1, player.x, player.y, persist_aniframe, q, &ptmp);
                                animatePlayer(bg, spri, 2, 1, player.x, player.y, persist_aniframe, q, &ptmp);
-                               mapScrollDown(bg, SPEED);
-                               mapScrollDown(spri, SPEED);
+                               mapScrollDown(bg, SPEED, q);
+                               mapScrollDown(spri, SPEED, q);
                                //mapScrollDown(mask, SPEED);
                                modexShowPage(spri->page);
                        }
@@ -286,8 +288,8 @@ break;
                                INC_PER_FRAME;
                                //animatePlayer(bg, spri, mask, 0, 1, player.x, player.y, persist_aniframe, q, &ptmp);
                                animatePlayer(bg, spri, 0, 1, player.x, player.y, persist_aniframe, q, &ptmp);
-                               mapScrollUp(bg, SPEED);
-                               mapScrollUp(spri, SPEED);
+                               mapScrollUp(bg, SPEED, q);
+                               mapScrollUp(spri, SPEED, q);
                                //mapScrollUp(mask, SPEED);
                                modexShowPage(spri->page);
                        }
@@ -340,7 +342,9 @@ break;
        printf("player.triggy: %d\n", player.triggery);
        printf("dxThresh: %d\n", bg->dxThresh);
        printf("dyThresh: %d\n", bg->dyThresh);
-       printf("temporary player sprite http://www.pixiv.net/member_illust.php?mode=medium&illust_id=45556867\n");
+       printf("temporary player sprite 0: http://www.pixiv.net/member_illust.php?mode=medium&illust_id=45556867\n");
+       printf("temporary player sprite 1: http://www.pixiv.net/member_illust.php?mode=medium&illust_id=44606385\n");
+       printf("\n");
        switch(detectcpu())
        {
                case 0: cpus = "8086/8088 or 186/88"; break;
@@ -386,9 +390,9 @@ initMap(map_t *map) {
        for(y=0; y<TILEWH; y++) {
        for(x=0; x<(TILEWH*2); x++) {
                if(x<TILEWH)
-                 map->tiles->data->data[i] = 0x24;
+                 map->tiles->data->data[i] = 28;//0x24;
                else
-                 map->tiles->data->data[i] = 0x34;
+                 map->tiles->data->data[i] = 0;//0x34;
                i++;
        }
        }
@@ -406,7 +410,7 @@ initMap(map_t *map) {
 
 
 void
-mapScrollRight(map_view_t *mv, byte offset) {
+mapScrollRight(map_view_t *mv, byte offset, short lp) {
        word x, y;  /* coordinate for drawing */
 
        /* increment the pixel position and update the page */
@@ -419,17 +423,18 @@ mapScrollRight(map_view_t *mv, byte offset) {
        /* Snap the origin forward */
        mv->page->data += 4;
        mv->page->dx = mv->map->tiles->tileWidth;
-
+       }
 
        /* draw the next column */
        x= SCREEN_WIDTH + mv->map->tiles->tileWidth;
-               mapDrawCol(mv, mv->tx + 20 , mv->ty-1, x);
-       }
+       if(lp%2)
+               mapDrawCol(mv, mv->tx + 20 , mv->ty-1, x, mv->page->dx);
+       //}
 }
 
 
 void
-mapScrollLeft(map_view_t *mv, byte offset) {
+mapScrollLeft(map_view_t *mv, byte offset, short lp) {
        word x, y;  /* coordinate for drawing */
 
        /* increment the pixel position and update the page */
@@ -443,15 +448,16 @@ mapScrollLeft(map_view_t *mv, byte offset) {
        /* Snap the origin backward */
        mv->page->data -= 4;
        mv->page->dx = mv->map->tiles->tileWidth;
-
-       /* draw the next column */
-               mapDrawCol(mv, mv->tx-1, mv->ty-1, 0);
        }
+       /* draw the next column */
+       if(lp%2)
+               mapDrawCol(mv, mv->tx-1, mv->ty-1, 0, mv->page->dx);
+       //}
 }
 
 
 void
-mapScrollUp(map_view_t *mv, byte offset) {
+mapScrollUp(map_view_t *mv, byte offset, short lp) {
        word x, y;  /* coordinate for drawing */
 
        /* increment the pixel position and update the page */
@@ -464,17 +470,18 @@ mapScrollUp(map_view_t *mv, byte offset) {
        /* Snap the origin downward */
        mv->page->data -= mv->page->width*4;
        mv->page->dy = mv->map->tiles->tileHeight;
-
+       }
 
        /* draw the next row */
        y= 0;
-               mapDrawRow(mv, mv->tx-1 , mv->ty-1, y);
-       }
+       if(lp%3)
+               mapDrawRow(mv, mv->tx-1 , mv->ty-1, y, mv->page->dy);
+       //}
 }
 
 
 void
-mapScrollDown(map_view_t *mv, byte offset) {
+mapScrollDown(map_view_t *mv, byte offset, short lp) {
        word x, y;  /* coordinate for drawing */
 
        /* increment the pixel position and update the page */
@@ -487,12 +494,13 @@ mapScrollDown(map_view_t *mv, byte offset) {
        /* Snap the origin downward */
        mv->page->data += mv->page->width*4;
        mv->page->dy = mv->map->tiles->tileHeight;
-
+       }
 
        /* draw the next row */
        y= SCREEN_HEIGHT + mv->map->tiles->tileHeight;
-               mapDrawRow(mv, mv->tx-1 , mv->ty+15, y);
-       }
+       if(lp%3)
+               mapDrawRow(mv, mv->tx-1 , mv->ty+15, y, mv->page->dy);
+       //}
 
 }
 
@@ -517,7 +525,7 @@ mapGoTo(map_view_t *mv, int tx, int ty) {
        py=0;
        i=mv->ty * mv->map->width + mv->tx;
        for(ty=mv->ty-1; py < SCREEN_HEIGHT+mv->dyThresh && ty < mv->map->height; ty++, py+=mv->map->tiles->tileHeight) {
-               mapDrawRow(mv, tx-1, ty, py);
+               mapDrawWRow(mv, tx-1, ty, py);
        i+=mv->map->width - tx;
        }
 }
@@ -534,13 +542,14 @@ mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y) {
 
 
 void 
-mapDrawRow(map_view_t *mv, int tx, int ty, word y) {
+mapDrawRow(map_view_t *mv, int tx, int ty, word y, word poopoffset) {
        word x;
        int i;
+       poopoffset%=6;
 
        /* the position within the map array */
        i=ty * mv->map->width + tx;
-       for(x=0; x<SCREEN_WIDTH+mv->dxThresh && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
+       for(x=poopoffset*TILEWH; x<(SCREEN_WIDTH+mv->dxThresh)/(poopoffset+1) && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
        if(i>=0) {
                /* we are in the map, so copy! */
                mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
@@ -551,7 +560,43 @@ mapDrawRow(map_view_t *mv, int tx, int ty, word y) {
 
 
 void 
-mapDrawCol(map_view_t *mv, int tx, int ty, word x) {
+mapDrawCol(map_view_t *mv, int tx, int ty, word x, word poopoffset) {
+       int y;
+       int i;
+       poopoffset%=4;
+
+       /* location in the map array */
+       i=ty * mv->map->width + tx;
+
+       /* We'll copy all of the columns in the screen, 
+          i + 1 row above and one below */
+       for(y=poopoffset*TILEWH; y<(SCREEN_HEIGHT+mv->dyThresh)/(poopoffset+1) && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {
+       if(i>=0) {
+               /* we are in the map, so copy away! */
+               mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
+       }
+       i += mv->map->width;
+       }
+}
+
+void 
+mapDrawWRow(map_view_t *mv, int tx, int ty, word y) {
+       word x;
+       int i;
+
+       /* the position within the map array */
+       i=ty * mv->map->width + tx;
+       for(x=0; x<SCREEN_WIDTH+mv->dxThresh && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
+       if(i>=0) {
+               /* we are in the map, so copy! */
+               mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
+       }
+       i++; /* next! */
+       }
+}
+
+void 
+mapDrawWCol(map_view_t *mv, int tx, int ty, word x) {
        int y;
        int i;