]> 4ch.mooo.com Git - 16.git/blobdiff - 16/modex16/scroll.c
deleted: 16.bat
[16.git] / 16 / modex16 / scroll.c
index 55ca2cedc07bab235cc820f4f0500a1c2b104e1d..03d4b2c87989d03173f45f50b215bf6e1ffac066 100644 (file)
@@ -28,8 +28,6 @@ typedef struct {
        page_t *page;\r
        int tx; //appears to be the top left tile position on the viewable screen map\r
        int ty; //appears to be the top left tile position on the viewable screen map
-//     int ttx; //bottem right tile
-//     int tty; //bottem left tile\r
        word dxThresh; //????\r
        word dyThresh; //????\r
 } map_view_t;\r
@@ -38,7 +36,8 @@ struct {
        int x; //player exact position on the viewable map\r
        int y; //player exact position on the viewable map\r
        int tx; //player tile position on the viewable map\r
-       int ty; //player tile position on the viewable map\r
+       int ty; //player tile position on the viewable map
+       int hp; //hitpoints of the player\r
 } player;\r
 \r
 \r
@@ -51,7 +50,8 @@ void mapScrollDown(map_view_t *mv, byte offset);
 void mapGoTo(map_view_t *mv, int tx, int ty);\r
 void mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y);\r
 void mapDrawRow(map_view_t *mv, int tx, int ty, word y);\r
-void mapDrawCol(map_view_t *mv, int tx, int ty, word x);\r
+void mapDrawCol(map_view_t *mv, int tx, int ty, word x);
+void animatePlayer(map_view_t *mv, short d1, short d2, int x, int y, int ls, bitmap_t *bmp);\r
 \r
 #define TILEWH 16\r
 #define QUADWH (TILEWH/4)
@@ -60,14 +60,14 @@ void mapDrawCol(map_view_t *mv, int tx, int ty, word x);
 //place holder definitions
 #define MAPX 40
 #define MAPY 30\r
-//#define SWAP(a, b) tmp=a; a=b; b=tmp;\r
+#define SWAP(a, b) tmp=a; a=b; b=tmp;\r
 void main() {\r
-       bitmap_t bmp;\r
+       bitmap_t ptmp; // player sprite\r
        int q=0;\r
-       page_t screen;//,screen2;\r
+       page_t screenscreen2;\r
        map_t map;\r
-       map_view_t mv;//, mv2;\r
-       map_view_t *draw;//, *show, *tmp;\r
+       map_view_t mv, mv2;\r
+       map_view_t *draw, *show, *tmp;\r
        byte *ptr;\r
 \r
        setkb(1);\r
@@ -75,28 +75,28 @@ void main() {
        map = allocMap(MAPX,MAPY); //20x15 is the resolution of the screen you can make maps smaller than 20x15 but the null space needs to be drawn properly\r
        initMap(&map);\r
        mv.map = ↦
-//     mv2.map = ↦\r
+       mv2.map = ↦\r
 \r
        /* draw the tiles */\r
        ptr = map.data;
-       bmp = bitmapLoadPcx("ptmp.pcx"); // load sprite
-       modexPalUpdate(bmp.palette);\r
-       modexEnter();\r
+       ptmp = bitmapLoadPcx("ptmp.pcx"); // load sprite\r
+       modexEnter();
+       modexPalUpdate(ptmp.palette);\r
        screen = modexDefaultPage();\r
        screen.width += (TILEWH*2);\r
        mv.page = &screen;\r
-//     screen2=modexNextPage(mv.page);\r
-//     mv2.page = &screen2;\r
-//     mapGoTo(&mv2, 16, 16);\r
-//     modexShowPage(mv.page);\r
+       screen2=modexNextPage(mv.page);\r
+       mv2.page = &screen2;\r
+       modexShowPage(mv.page);\r
 \r
        /* set up paging */\r
-//     show = &mv;\r
-//     draw = &mv2;\r
-       draw = &mv;
+       show = &mv;\r
+       draw = &mv2;\r
+//     draw = &mv;
 
 //TODO: LOAD map data and position the map in the middle of the screen if smaller then screen
-       mapGoTo(draw, 0, 0);\r
+       mapGoTo(draw, 0, 0);
+       mapGoTo(show, 0, 0);\r
 
        //TODO: put player in starting position of spot\r
        //default player position on the viewable map
@@ -104,24 +104,29 @@ void main() {
        player.ty = draw->ty + 8;
        player.x = player.tx*TILEWH;
        player.y = player.ty*TILEWH;
-
+       modexDrawSpriteRegion(draw->page, player.x-4, player.y-TILEWH, 24, 64, 24, 32, &ptmp);
+       
        modexShowPage(draw->page);\r
        while(!keyp(1))
        {\r
        //top left corner & bottem right corner of map veiw be set as map edge trigger since maps are actually square\r
        //to stop scrolling and have the player position data move to the edge of the screen with respect to the direction\r
        //when player.tx or player.ty == 0 or player.tx == 20 or player.ty == 15 then stop because that is edge of map and you do not want to walk of the map
+       
+       //TODO: render the player properly with animation and sprite sheet
        if(keyp(77))
        {
+//             modexDrawSpriteRegion(draw->page, player.x-4, player.y-TILEWH, 24, 32, 24, 32, &ptmp);
                if(draw->tx >= 0 && draw->tx+20 < MAPX && player.tx == draw->tx + 10)
                {
                        for(q=0; q<(TILEWH/SPEED); q++)
                        {\r
-                               modexDrawBmp(draw->page, player.x+((q+1)*SPEED), player.y, &bmp);
+//                             modexDrawBmp(draw->page, &bmp);
+                               animatePlayer(draw, 1, 1, player.x, player.y, q, &ptmp);
                                mapScrollRight(draw, SPEED);
                                modexShowPage(draw->page);\r
-//             mapScrollRight(draw, 1);\r
-//             SWAP(draw, show);\r
+//                             mapScrollRight(show, SPEED);\r
+//                             SWAP(draw, show);\r
                        }
                        player.tx++;
                }
@@ -130,33 +135,40 @@ void main() {
                        for(q=0; q<(TILEWH/SPEED); q++)
                        {
                                player.x+=SPEED;
-                               modexDrawBmp(draw->page, player.x, player.y, &bmp);
+//                             modexDrawBmp(draw->page, player.x, player.y, &bmp);
+                               animatePlayer(draw, 1, 0, player.x, player.y, q, &ptmp);
                                modexShowPage(draw->page);
+                               SWAP(draw, show);
                        }
                        player.tx++;
                }\r
        }\r
 \r
-       if(keyp(75)){
+       if(keyp(75))
+       {
+//             modexDrawSpriteRegion(draw->page, player.x-4, player.y-TILEWH, 24, 96, 24, 32, &ptmp);
                if(draw->tx > 0 && draw->tx+20 <= MAPX && player.tx == draw->tx + 10)
-               {\r
+               {
                        for(q=0; q<(TILEWH/SPEED); q++)
                        {
-                               modexDrawBmp(draw->page, player.x-((q+1)*SPEED), player.y, &bmp);
+//                             modexDrawBmp(draw->page, player.x-((q+1)*SPEED), player.y, &bmp);
+                               animatePlayer(draw, 3, 1, player.x, player.y, q, &ptmp);
                                mapScrollLeft(draw, SPEED);
                                modexShowPage(draw->page);\r
-//             mapScrollLeft(show, 1);\r
-//             SWAP(draw, show);\r
+//                             mapScrollLeft(show, SPEED);\r
+//                             SWAP(draw, show);\r
                        }
                        player.tx--;\r
                }
-               else if(player.tx > 0)
+               else if(player.tx > 1)
                {
                        for(q=0; q<(TILEWH/SPEED); q++)
                        {
                                player.x-=SPEED;
-                               modexDrawBmp(draw->page, player.x, player.y, &bmp);
+//                             modexDrawBmp(draw->page, player.x, player.y, &bmp);
+                               animatePlayer(draw, 3, 0, player.x, player.y, q, &ptmp);
                                modexShowPage(draw->page);
+                               SWAP(draw, show);
                        }
                        player.tx--;
                }
@@ -164,15 +176,17 @@ void main() {
 \r
        if(keyp(80))
        {
+//             modexDrawSpriteRegion(draw->page, player.x-4, player.y-TILEWH, 24, 64, 24, 32, &ptmp);
                if(draw->ty >= 0 && draw->ty+15 < MAPY && player.ty == draw->ty + 8)
                {\r
                        for(q=0; q<(TILEWH/SPEED); q++)
                        {
-                               modexDrawBmp(draw->page, player.x, player.y+((q+1)*SPEED), &bmp);
+//                             modexDrawBmp(draw->page, player.x, player.y+((q+1)*SPEED), &bmp);
+                               animatePlayer(draw, 2, 1, player.x, player.y, q, &ptmp);
                                mapScrollDown(draw, SPEED);
                                modexShowPage(draw->page);\r
-//             mapScrollDown(show, 1);\r
-//             SWAP(draw, show);\r
+//                             mapScrollDown(show, SPEED);\r
+//                             SWAP(draw, show);\r
                        }
                        player.ty++;
                }
@@ -181,8 +195,10 @@ void main() {
                        for(q=0; q<(TILEWH/SPEED); q++)
                        {
                                player.y+=SPEED;
-                               modexDrawBmp(draw->page, player.x, player.y, &bmp);
+//                             modexDrawBmp(draw->page, player.x, player.y, &bmp);
+                               animatePlayer(draw, 2, 0, player.x, player.y, q, &ptmp);
                                modexShowPage(draw->page);
+//                             SWAP(draw, show);
                        }
                        player.ty++;
                }\r
@@ -194,26 +210,29 @@ void main() {
                {\r
                        for(q=0; q<(TILEWH/SPEED); q++)
                        {\r
-                               modexDrawBmp(draw->page, player.x, player.y-((q+1)*SPEED), &bmp);
+//                             modexDrawBmp(draw->page, player.x, player.y-((q+1)*SPEED), &bmp);
+                               animatePlayer(draw, 0, 1, player.x, player.y, q, &ptmp);
                                mapScrollUp(draw, SPEED);
                                modexShowPage(draw->page);
-//             mapScrollUp(show, 1);\r
-//             SWAP(draw, show);\r
+//                             mapScrollUp(show, SPEED);\r
+//                             SWAP(draw, show);\r
                        }
                        player.ty--;
                }
-               else if(player.ty > 0)// && player.ty <= draw->ty + 8)// && player.ty >= draw->ty+8)
+               else if(player.ty > 1)
                {
                        for(q=0; q<(TILEWH/SPEED); q++)
                        {
                                player.y-=SPEED;
-                               modexDrawBmp(draw->page, player.x, player.y, &bmp);
+//                             modexDrawBmp(draw->page, player.x, player.y, &bmp);
+                               animatePlayer(draw, 0, 0, player.x, player.y, q, &ptmp);
                                modexShowPage(draw->page);
+//                             SWAP(draw, show);
                        }
                        player.ty--;
                }\r
        }\r
-       //modexDrawBmp(draw->page, player.x, player.y, &bmp);\r
+//     modexDrawBmp(draw->page, player.x, player.y, &bmp);\r
        //modexShowPage(draw->page);\r
 \r
        }\r
@@ -446,3 +465,43 @@ mapDrawCol(map_view_t *mv, int tx, int ty, word x) {
        i += mv->map->width;\r
        }\r
 }\r
+
+void animatePlayer(map_view_t *mv, short d1, short d2, int x, int y, int ls, bitmap_t *bmp)
+{
+       int qq;
+
+       if(d2==0) qq = 0;
+       else qq = ((ls+1)*SPEED);
+       switch (d1)
+       {
+               case 0:
+                       //up
+                       if(ls<2) modexDrawSpriteRegion(mv->page, x-4, y-qq-TILEWH, 24, 0, 24, 32, bmp);
+                       if(4>ls && ls>=2) modexDrawSpriteRegion(mv->page, x-4, y-qq-TILEWH, 0, 0, 24, 32, bmp);
+                       if(6>ls && ls>=4) modexDrawSpriteRegion(mv->page, x-4, y-qq-TILEWH, 48, 0, 24, 32, bmp);
+                       if(ls>6) modexDrawSpriteRegion(mv->page, x-4, y-qq-TILEWH, 24, 0, 24, 32, bmp);
+               break;
+               case 1:
+                       // right
+               //right
+                       if(ls<2) modexDrawSpriteRegion(mv->page, x+qq-4, y-TILEWH, 24, 32, 24, 32, bmp);
+                       if(4>ls && ls>=2) modexDrawSpriteRegion(mv->page, x+qq-4, y-TILEWH, 0, 32, 24, 32, bmp);
+                       if(6>ls && ls>=4) modexDrawSpriteRegion(mv->page, x+qq-4, y-TILEWH, 48, 32, 24, 32, bmp);
+                       if(ls>6) modexDrawSpriteRegion(mv->page, x+qq-4, y-TILEWH, 24, 32, 24, 32, bmp);
+               break;
+               case 2:
+                       //down
+                       if(ls<2) modexDrawSpriteRegion(mv->page, x-4, y+qq-TILEWH, 24, 64, 24, 32, bmp);
+                       if(4>ls && ls>=2) modexDrawSpriteRegion(mv->page, x-4, y+qq-TILEWH, 0, 64, 24, 32, bmp);
+                       if(6>ls && ls>=4) modexDrawSpriteRegion(mv->page, x-4, y+qq-TILEWH, 48, 64, 24, 32, bmp);
+                       if(ls>6) modexDrawSpriteRegion(mv->page, x-4, y+qq-TILEWH, 24, 64, 24, 32, bmp);
+               break;
+               case 3:
+                       //left
+                       if(ls<2) modexDrawSpriteRegion(mv->page, x-qq-4, y-TILEWH, 24, 96, 24, 32, bmp);
+                       if(4>ls && ls>=2) modexDrawSpriteRegion(mv->page, x-qq-4, y-TILEWH, 0, 96, 24, 32, bmp);
+                       if(6>ls && ls>=4) modexDrawSpriteRegion(mv->page, x-qq-4, y-TILEWH, 48, 96, 24, 32, bmp);
+                       if(ls>6) modexDrawSpriteRegion(mv->page, x-qq-4, y-TILEWH, 24, 96, 24, 32, bmp);
+               break;
+       }
+}