]> 4ch.mooo.com Git - 16.git/commitdiff
Merge branch 'master' of github.com:sparky4/16
authoryakui-lover <yakui-lover@yandex.ru>
Fri, 25 Nov 2016 18:12:14 +0000 (03:12 +0900)
committeryakui-lover <yakui-lover@yandex.ru>
Fri, 25 Nov 2016 18:12:14 +0000 (03:12 +0900)
12 files changed:
16/zcroll16.c
16/zcroll16.h
WHAT_WAS_CHANGED [new file with mode: 0644]
makefile
src/lib/16_entity.h [new file with mode: 0644]
src/lib/16_in.c
src/lib/16_in.h
src/lib/16_map.h
src/lib/16_sprit.c
src/lib/tst.c [new file with mode: 0644]
src/lib/typdefst.h
src/zcroll.c

index 12a5ee1b591d8f14bc6479caa66ae8e9bad95a37..52182f2bd79b46283041966024e468a7c3c273bc 100755 (executable)
@@ -30,17 +30,16 @@ boolean boundary_check(int x, int y, int dx, int dy, int h, int w){
 \r
 boolean coll_check(int x, int y, int dx, int dy, map_view_t *map_v){\r
        // Assume everything crosses at most 1 tile at once\r
-       return dx && crossable_tile(x + dx, map_v) || dy && crossable_tile(y + dy, map_v);\r
+       return dx && 1;//crossable_tile(x + dx, map_v) || dy && crossable_tile(y + dy, map_v);\r
 }\r
 \r
-boolean walk(entity_t *ent, map_view_t *map_v)\r
-{\r
+boolean walk(entity_t *ent, map_view_t *map_v){\r
+       return 1;\r
        int dx = 1;\r
        int dy = 1;\r
-       switch(ent->d)\r
-       {\r
+       switch(ent->d){\r
                case STOP:\r
-                       return;\r
+                       return 0;\r
                case LEFT:\r
                        dx = -dx;\r
                case RIGHT:\r
@@ -58,18 +57,23 @@ boolean walk(entity_t *ent, map_view_t *map_v)
                // Start animation\r
                // Mark next tile as occupied\r
                // Mark this tile as vacant\r
-               return true;\r
+               return 1;\r
        }\r
-       return false;\r
+       return 0;\r
 }\r
 \r
 void player_walk(player_t *player, map_view_t *map_v){\r
+       int dx, dy;\r
        if(walk(player->ent, map_v) && boundary_check(map_v->tx, map_v->ty, dx, dy, map_v->map->width - 2*map_v->page->tilesw, map_v->map->height - 2*map_v->page->tilesh)){\r
                mapScroll(map_v, player);\r
                // (Un)load stuff?\r
        }\r
 }\r
 \r
+void mapGoTo(map_view_t *mv, int tx, int ty)\r
+{\r
+       return;\r
+}\r
 \r
 void near mapScroll(map_view_t *mv, player_t *player){\r
        word x, y;  /* coordinate for drawing */\r
@@ -106,24 +110,10 @@ void near mapScroll(map_view_t *mv, player_t *player){
 \r
 sword chkmap(map_t *map, word q)\r
 {\r
+       /*\r
 //     bitmap_t bp;\r
        static byte x[(MAPW*MAPH)+1] =\r
 { 1, 2, 3, 4, 0, 3, 3, 3, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 8, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 10, 11, 12, 4, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 14, 15, 16, 0, 1, 1, 1, 5, 8, 1, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 0, 0, 0, 8, 8, 1, 11, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 2, 3, 4, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 5, 6, 7, 8, 6, 6, 6, 6, 6, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 9, 10, 11, 12, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 13, 14, 15, 16, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10 };\r
-/*1,   2,      3,      4,      0,      3,      3,      3,      3,      3,      3,      3,      3,      4,      1,      1,      1,      1,      1,      1,      \\r
-5,     6,      7,      8,      0,      1,      0,      1,      0,      0,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      \\r
-9,     10,     11,     12,     4,      1,      0,      1,      0,      0,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      \\r
-13,    14,     15,     16,     0,      1,      1,      1,      5,      8,      1,      11,     11,     1,      1,      1,      1,      1,      1,      1,      \\r
-0,     0,      4,      0,      0,      0,      0,      0,      8,      8,      1,      11,     11,     3,      1,      1,      1,      1,      1,      1,      \\r
-1,     1,      1,      1,      0,      0,      0,      0,      8,      8,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      \\r
-1,     1,      1,      1,      0,      0,      0,      0,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      \\r
-1,     1,      1,      1,      0,      0,      0,      0,      1,      1,      1,      1,      1,      1,      1,      1,      3,      1,      1,      1,      \\r
-1,     1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      \\r
-1,     1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      \\r
-1,     1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      3,      1,      1,      1,      \\r
-1,     1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      \\r
-1,     1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      3,      1,      1,      1,      \\r
-1,     1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      \\r
-1,     1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      3,      3,      3,      3,      1,      2,      3,      4 };*/\r
        //check for failed to load map\r
        if((map->width == map->height == 0) && (q>0))\r
        {\r
@@ -143,46 +133,11 @@ sword chkmap(map_t *map, word q)
                map->tiles->cols = 1;\r
                map->tiles->debug_text = true;\r
        }\r
-       else map->tiles->debug_text = false;\r
+       else map->tiles->debug_text = false;*/\r
        return 0;\r
 }\r
 \r
 //TODO: player position here\r
-void mapGoTo(map_view_t *mv, int tx, int ty)\r
-{\r
-       int px, py;\r
-       unsigned int i;\r
-\r
-       /* set up the coordinates */\r
-       mv->tx = tx;\r
-       mv->ty = ty;\r
-       mv->page->delta = 0;\r
-\r
-       /* set up the thresholds */\r
-       mv->dxThresh = mv->map->tiles[0]->tileWidth * 2;\r
-       mv->dyThresh = mv->map->tiles[0]->tileHeight * 2;\r
-\r
-       /* draw the tiles */\r
-       modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 0);\r
-       py=0;\r
-       i=mv->ty * mv->map->width + mv->tx;\r
-/*     for(ty=mv[0].ty-1; py < mv[0].page->sh+mv->dyThresh && ty < mv[0].map->height; ty++, py+=mv[0].map->tiles->tileHeight) {\r
-               mapDrawWRow(&mv[0], tx-1, ty, py);\r
-       i+=mv->map->width - tx;\r
-       }\r
-       if(!pageploop) modexCopyPageRegion(mv[1].page, mv[0].page, 0, 0, 0, 0, mv[0].page->width, mv[0].page->height);\r
-//     {\r
-//             unsigned int k,j,o;\r
-//             // fill screen with a distinctive pattern \r
-//             for (k=0;k < vga_state.vga_width;k++) {\r
-//                     o = k >> 2;\r
-//                     vga_write_sequencer(0x02/*map mask*//*,1 << (k&3));\r
-//                             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)\r
-//                                     vga_state.vga_graphics_ram[o] = (k^j)&15; // VRL samples put all colors in first 15!\r
-//             }\r
-//     }\r
-       modexCopyPageRegion(mv[3].page, mv[0].page, 0, 0, 0, 0, 24, 32);*/\r
-}\r
 \r
 void near\r
 mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y)\r
@@ -261,14 +216,15 @@ void shinku(global_game_variables_t *gv)
                        gv->kurokku.frames_per_second=60;\r
                break;\r
        }\r
+       /*\r
        if(pageflipflop){\r
-       if(gv->video.r){\r
-               if(!pageploop) 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);\r
-               modexShowPage(&(gv->video.page[gv->video.p]));\r
-               if(!pageploop) gv->video.p=!gv->video.p;\r
-               gv->video.r=!gv->video.r;\r
-       }\r
-       }\r
+               if(gv->video.r){\r
+                       if(!pageploop) 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);\r
+                       modexShowPage(&(gv->video.page[gv->video.p]));\r
+                       if(!pageploop) gv->video.p=!gv->video.p;\r
+                       gv->video.r=!gv->video.r;\r
+               }\r
+       }*/\r
 }\r
 \r
 void near animatePlayer(map_view_t *pip, player_t *player,  sword scrollswitch)\r
@@ -291,7 +247,7 @@ void near animatePlayer(map_view_t *pip, player_t *player,  sword scrollswitch)
                break;\r
        }\r
        //x-=4;\r
-       y-=pip->map->tiles->tileHeight;\r
+       //y-=pip->map->tiles->tileHeight;\r
        switch (player->d)\r
        {\r
                case 0:\r
index ca730c232684357da36f425f214c23a4e2167b16..89b4b7b1b952018502038979813ef151d2cda258 100755 (executable)
@@ -24,6 +24,7 @@
 #define __ZCROLL16_H_\r
 \r
 #include "src/lib/16_head.h"\r
+#include "src/lib/16_entity.h"\r
 //#include "src/lib/bakapee.h"\r
 #include "src/lib/16_vl.h"\r
 //#include "src/lib/16_in.h"\r
 #define PBUFBFUN               modexDrawBmpRegion\r
 #define PLAYERBMPDATA  player->data\r
 \r
+\r
+#define MAPW   40\r
+#define MAPH   30\r
+\r
+extern boolean pageflipflop, pageploop;\r
+extern unsigned char shinku_fps_indicator_page;\r
+\r
 typedef struct {\r
        map_t *map;\r
        page_t *page;\r
@@ -55,36 +63,8 @@ typedef struct {
        word dyThresh; //Threshold for physical tile switch\r
        video_t *video; //pointer to game variables of the video\r
        pan_t *pan;             //pointer the the page panning debug system\r
+       int dx, dy, delta, d;\r
 } map_view_t;\r
-\r
-#define MAPW   40\r
-#define MAPH   30\r
-\r
-enum direction {STOP, UP, DOWN, LEFT, RIGHT};\r
-typedef struct {\r
-       word id;        /* the Identification number of the page~ For layering~ */\r
-       byte far* data; /* the data for the page */\r
-       word sw;                /* screen width */\r
-       word sh;                /* screen heigth */\r
-       word tw;                /* screen width in tiles */\r
-       word th;                /* screen height in tiles */\r
-       word width;             /* virtual width of the page */\r
-       word height;    /* virtual height of the page */\r
-       word tilesw;            /* virtual screen width in tiles */\r
-       word tilesh;            /* virtual screen height in tiles */\r
-       sword tilemidposscreenx;        /* middle tile position */\r
-       sword tilemidposscreeny;        /* middle tile position */\r
-       sword tileplayerposscreenx;     /* player position on screen */\r
-       sword tileplayerposscreeny;     /* player position on screen */\r
-       word stridew;                   /*width/4*/\r
-       word pagesize;                  /* page size */\r
-       word pi;                                /* incremention page by this much to preserve location */\r
-       word delta;                     // How much should we shift the page for smooth scrolling\r
-       direction d;                    // Direction we should shift the page\r
-} page_t;\r
-extern boolean pageflipflop, pageploop;\r
-extern unsigned char shinku_fps_indicator_page;\r
-\r
 /* Map is presumed to:\r
  * 1. Have all the required layers and tilesets within itself\r
  * 2. Have a 'fence' around accessible blocks to simplify boundary logic\r
diff --git a/WHAT_WAS_CHANGED b/WHAT_WAS_CHANGED
new file mode 100644 (file)
index 0000000..b081de5
--- /dev/null
@@ -0,0 +1,10 @@
+Please, refer for the actual diff for the commit the file was introoduced.
+
+Basically, I was aiming to:
+1. Rewrite scroll16 to use only one player, instead of 1 of 4 possible.
+2. Group panning and movement functions togeather, instead of using different functions for each move.
+3. Make map struct store the initial map, and the current map to be stored in map_view struct. That is calculated based on several layers of original map and NPC movement. Current map is (potentially) of 1 layer only, and directly represents what is to be drawn (applied z-ordering! Yay!).
+4. Also, I have tried to clean zcroll.c a bit.
+5. Also also, tried to separate movement functions from player and to generalize it to a movable npc/entity.
+6. Instead of drawing map as a rectangle of tiles and a few strips to fill the black area of partially visible tiles, draw just a slightly bigger rectangle, with it's edges a bit out of the screen. That shouldn't be too resourse-consuming, I believe, but requires less explicit calls and reads. Probably.
+7. As stuff did not quite initialize properly, I have disabled keyboard interrupt vector override to be able to shut down program prematurely in case something goes wrong. So, in case you just want to replace these new files with the older and working ones, please remember to re-enable that, or you won't be able to controll the game without it.
index 36bfef081f510ea52abdfd01a2ff4a85bc62b8e1..478641222e156f807288f5eb315aa8bb58dd30b3 100755 (executable)
--- a/makefile
+++ b/makefile
@@ -109,7 +109,6 @@ VGMSNDOBJ = vgmSnd.$(OBJ) 16_snd.$(OBJ)
 OLDLIBOBJS=bitmap.$(OBJ) mapread.$(OBJ) 16render.$(OBJ)
 GFXLIBOBJS = 16_vl.$(OBJ) 16text.$(OBJ) bakapee.$(OBJ) scroll16.$(OBJ) 16_vrs.$(OBJ) 16_sprit.$(OBJ) $(OLDLIBOBJS)
 16LIBOBJS = 16_mm.$(OBJ) 16_pm.$(OBJ) 16_ca.$(OBJ) 16_tail.$(OBJ) 16_in.$(OBJ) 16_head.$(OBJ) 16_dbg.$(OBJ) kitten.$(OBJ) 16_hc.$(OBJ) wcpu.$(OBJ) 16_timer.$(OBJ) jsmn.$(OBJ)
-####++++ 16_map.$(OBJ)
 #16planar.$(OBJ) planar.$(OBJ)
 DOSLIBOBJ = adlib.$(OBJ) 8254.$(OBJ) 8259.$(OBJ) dos.$(OBJ) cpu.$(OBJ)
 !ifeq DEBUGSERIAL 1
diff --git a/src/lib/16_entity.h b/src/lib/16_entity.h
new file mode 100644 (file)
index 0000000..17ee10f
--- /dev/null
@@ -0,0 +1,25 @@
+#ifndef __16_NPC__
+#define __16_NPC__
+
+#include "src/lib/16_sprit.h"
+#include "src/lib/16_head.h"
+#include "src/lib/16_in.h"
+
+
+typedef        struct
+{
+       int x; // exact position on the viewable map
+       int y; // exact position on the viewable map
+       int tx; // tile position on the viewable map
+       int ty; // tile position on the viewable map
+       int triggerx; // trigger box tile position on the viewable map
+       int triggery; // trigger box tile position on the viewable map
+       byte d;         // direction the NPC faces
+       struct sprite *spri; // sprite used by NPC
+       sword hp; // hitpoints of the NPC
+       byte near pdir; // previous direction~
+       word speed;             // NPC's speed
+       word spt;               // speed per tile
+} entity_t;
+
+#endif
index 72dcadf54b6bcb5f74e5f214bd01bf2cf0b87ec1..ef0f1fa65660ae238dd057c88b82054a60736e53 100755 (executable)
@@ -53,8 +53,8 @@ static word far* clockw= (word far*) 0x046C; /* 18.2hz clock */
 */\r
 struct inconfig\r
 {\r
-       boolean                 MousePresent;\r
-       boolean                 JoysPresent[MaxJoys];\r
+       boolean         MousePresent;\r
+       boolean         JoysPresent[MaxJoys];\r
        boolean         Keyboard[NumCodes];\r
        boolean         Paused;\r
        char            LastASCII;\r
@@ -510,7 +510,7 @@ INL_StartKbd()
        IN_ClearKeysDown();\r
 \r
        OldKeyVect = _dos_getvect(KeyInt);\r
-       _dos_setvect(KeyInt,INL_KeyService);\r
+       //_dos_setvect(KeyInt,INL_KeyService);\r
 }\r
 \r
 ///////////////////////////////////////////////////////////////////////////\r
@@ -705,9 +705,8 @@ IN_Default(boolean gotit,player_t *player,ControlType nt)
        //in.KbdDefs[0].downleft = 0x4f;\r
        inpu.KbdDefs[0].down = 0x50;\r
        //in.KbdDefs[0].downright = 0x51;\r
-       IN_SetControlType(0,player,nt);\r
-       for(i=0; i>MaxPlayers;i++)\r
-               player[i].d=2;\r
+       IN_SetControlType(player,nt);\r
+       player->d=2;\r
 }\r
 \r
 ///////////////////////////////////////////////////////////////////////////\r
@@ -818,7 +817,7 @@ IN_ReadCursor(CursorInfo *info)
 //\r
 ///////////////////////////////////////////////////////////////////////////\r
 void near\r
-IN_ReadControl(int pn,player_t *player)\r
+IN_ReadControl(player_t *player)\r
 {\r
                        boolean         realdelta;\r
 #if DEMO0\r
@@ -858,7 +857,7 @@ register    KeyboardDef     *def;
        else\r
        {\r
 #endif\r
-               switch (type = player[pn].Controls)\r
+               switch (type = player->Controls)\r
                {\r
                case ctrl_Keyboard1:\r
                case ctrl_Keyboard2:\r
@@ -873,7 +872,7 @@ register    KeyboardDef     *def;
                        else if (Keyboard[def->downright])\r
                                mx = motion_Right,my = motion_Down;*/\r
 //TODO: make this into a function that the joystick AND keyboard can use wwww\r
-                       if(DIRECTIONIFELSE)//(player[pn].info.dir == 2)\r
+                       if(DIRECTIONIFELSE)//(player->info.dir == 2)\r
                        {\r
                        if(!inpu.Keyboard[def->left] && !inpu.Keyboard[def->right]){\r
                                if((inpu.Keyboard[def->up] && !inpu.Keyboard[def->down]))\r
@@ -886,7 +885,7 @@ register    KeyboardDef     *def;
                                if((inpu.Keyboard[def->right] && !inpu.Keyboard[def->left]))\r
                                        mx = motion_Right;\r
                        }else{  //2 keys pressed\r
-                                       switch (player[pn].pdir)\r
+                                       switch (player->pdir)\r
                                        {\r
                                                case 0:\r
                                                case 4:\r
@@ -902,7 +901,7 @@ register    KeyboardDef     *def;
                                                break;\r
                                        }\r
 #ifdef __DEBUG_InputMgr__\r
-                                       //if(dbg_testcontrolnoisy > 0){ printf("dir=%c ", dirchar(dir)); printf("pdir=%c        ", dirchar(player[pn].pdir)); }\r
+                                       //if(dbg_testcontrolnoisy > 0){ printf("dir=%c ", dirchar(dir)); printf("pdir=%c        ", dirchar(player->pdir)); }\r
 #endif\r
                                }\r
                        }\r
@@ -940,23 +939,23 @@ register  KeyboardDef     *def;
                dy = my;// * 127;\r
        }\r
 \r
-       player[pn].info.x = dx;\r
-       player[pn].info.xaxis = mx;\r
-       player[pn].info.y = dy;\r
-       player[pn].info.yaxis = my;\r
-       player[pn].info.button0 = buttons & (1 << 0);\r
-       player[pn].info.button1 = buttons & (1 << 1);\r
-       player[pn].info.button2 = buttons & (1 << 2);\r
-       player[pn].info.button3 = buttons & (1 << 3);\r
-//     player[pn].info.dir = DirTable[((my + 1) * 3) + (mx + 1)];\r
+       player->info.x = dx;\r
+       player->info.xaxis = mx;\r
+       player->info.y = dy;\r
+       player->info.yaxis = my;\r
+       player->info.button0 = buttons & (1 << 0);\r
+       player->info.button1 = buttons & (1 << 1);\r
+       player->info.button2 = buttons & (1 << 2);\r
+       player->info.button3 = buttons & (1 << 3);\r
+//     player->info.dir = DirTable[((my + 1) * 3) + (mx + 1)];\r
        conpee=(((my + 1) * 2) + (mx + 1))-1;\r
-       player[pn].info.dir = DirTable[conpee];\r
+       player->info.dir = DirTable[conpee];\r
 \r
-       if(DirTable[conpee]!=2) player[pn].pdir=DirTable[conpee];\r
-       if(player[pn].q==1 &&( dir!=2 || (mx!=motion_None || my!=motion_None)))\r
+       if(DirTable[conpee]!=2) player->pdir=DirTable[conpee];\r
+       if(player->q==1 &&( dir!=2 || (mx!=motion_None || my!=motion_None)))\r
        {\r
-               if(dir==2) player[pn].d = player[pn].info.dir;\r
-               else player[pn].d = DirTable[dir];\r
+               if(dir==2) player->d = player->info.dir;\r
+               else player->d = DirTable[dir];\r
        }\r
 \r
 #if DEMO0\r
@@ -986,13 +985,13 @@ register  KeyboardDef     *def;
 #endif\r
 #ifdef __DEBUG_InputMgr__\r
 if(dbg_testcontrolnoisy > 0)\r
-if(player[pn].info.dir!=2/*(inpu.Keyboard[def->up] || inpu.Keyboard[def->down] || inpu.Keyboard[def->left] || inpu.Keyboard[def->right])*/ || player[pn].q>1)\r
+if(player->info.dir!=2/*(inpu.Keyboard[def->up] || inpu.Keyboard[def->down] || inpu.Keyboard[def->left] || inpu.Keyboard[def->right])*/ || player->q>1)\r
 {\r
-       //printf("b1=%u b2=%u b3=%u b4=%u       ", player[pn].info.button0, player[pn].info.button1, player[pn].info.button2, player[pn].info.button3);\r
-       //printf("q=%d ", player[pn].q);\r
+       //printf("b1=%u b2=%u b3=%u b4=%u       ", player->info.button0, player->info.button1, player->info.button2, player->info.button3);\r
+       //printf("q=%d ", player->q);\r
        //printf("cpee=%c ", dirchar(conpee));\r
-       printf("pdir=%c d=%c dir=%c ", dirchar(player[pn].pdir), dirchar(player[pn].d), dirchar(player[pn].info.dir));\r
-       /*if(realdelta) */printf("dx=%d dy=%d   mx=%d   my=%d", player[pn].info.x, player[pn].info.y, player[pn].info.xaxis, player[pn].info.yaxis);\r
+       printf("pdir=%c d=%c dir=%c ", dirchar(player->pdir), dirchar(player->d), dirchar(player->info.dir));\r
+       /*if(realdelta) */printf("dx=%d dy=%d   mx=%d   my=%d", player->info.x, player->info.y, player->info.xaxis, player->info.yaxis);\r
        //else if(!realdelta) printf("%c%d %c%d %c%d %c%d", dirchar(0), inpu.Keyboard[def->up], dirchar(4), inpu.Keyboard[def->down], dirchar(1), inpu.Keyboard[def->left], dirchar(3), inpu.Keyboard[def->right]);\r
        printf("\n");\r
 }\r
@@ -1006,10 +1005,10 @@ if(player[pn].info.dir!=2/*(inpu.Keyboard[def->up] || inpu.Keyboard[def->down] |
 //\r
 ///////////////////////////////////////////////////////////////////////////\r
 void\r
-IN_SetControlType(word pn,player_t *player,ControlType type)\r
+IN_SetControlType(player_t *player,ControlType type)\r
 {\r
        // DEBUG - check that requested type is present?\r
-       player[pn].Controls = type;\r
+       player->Controls = type;\r
 }\r
 \r
 #if DEMO0\r
@@ -1271,20 +1270,16 @@ boolean IN_qb(byte kee)
 }\r
 \r
 //init player!\r
-void IN_initplayer(player_t *player, word pn)\r
+void IN_initplayer(player_t *player)\r
 {\r
-       player[pn].x = player[pn].tx*TILEWH;\r
-       player[pn].y = player[pn].ty*TILEWH;\r
-       player[pn].triggerx = player[pn].tx;\r
-       player[pn].triggery = player[pn].ty+1;\r
-/*     player[0].info.x = player[0].tx;\r
-       player[0].info.xaxis = player[0].tx*TILEWH;\r
-       player[0].info.y = player[0].ty;\r
-       player[0].info.yaxis = player[0].ty*TILEWH;*/\r
-       player[pn].q=1;\r
-       player[pn].d=2;\r
-       player[pn].hp=4;\r
-       player[pn].speed=4;\r
-       player[pn].persist_aniframe=0;\r
-       player[pn].spt=(TILEWH/(player[pn].speed));     //speed per tile wwww\r
+       player->x = player->tx*TILEWH;\r
+       player->y = player->ty*TILEWH;\r
+       player->triggerx = player->tx;\r
+       player->triggery = player->ty+1;\r
+       player->q=1;\r
+       player->d=2;\r
+       player->hp=4;\r
+       player->speed=4;\r
+       player->persist_aniframe=0;\r
+       player->spt=(TILEWH/(player->speed));   //speed per tile wwww\r
 }\r
index eb1650e46cbcbe3bcc6d309caa6c27eb07119389..de0bf36df2147e23044d185f71ee594538b6c086 100755 (executable)
@@ -53,7 +53,7 @@ extern boolean dbg_testkeyin,dbg_testcontrolnoisy;
 #define        JoyScaleShift   8\r
 #define        MaxJoyValue             5000\r
 \r
-#define        MaxPlayers      4\r
+#define        MaxPlayers      1\r
 #define        MaxKbds         2\r
 #define        MaxJoys         2\r
 #define        MaxPads         2\r
@@ -234,6 +234,8 @@ typedef     struct
        int persist_aniframe;    /* gonna be increased to 1 before being used, so 0 is ok for default */\r
        CursorInfo      info;\r
        ControlType     Controls;\r
+       entity_t *ent;\r
+       int dx, dy, delta;\r
 } player_t;\r
 \r
 /*\r
@@ -286,8 +288,8 @@ extern void IN_SetKeyHook(void (*hook)());
 extern void IN_ClearKeysDown();\r
 //static void INL_AdjustCursor(CursorInfo *info,word buttons,int dx,int dy);\r
 extern void IN_ReadCursor(CursorInfo *info);\r
-extern void near IN_ReadControl(int pn,player_t *player);\r
-extern void IN_SetControlType(word pn,player_t *player,ControlType type);\r
+extern void near IN_ReadControl(player_t *player);\r
+extern void IN_SetControlType(player_t *player,ControlType type);\r
 #if DEMO0\r
 extern boolean IN_StartDemoRecord(word bufsize);\r
 extern void IN_StartDemoPlayback(byte /*__segment*/ *buffer,word bufsize);\r
@@ -304,6 +306,6 @@ extern boolean IN_UserInput(dword delay,boolean clear);
 extern boolean IN_KeyDown(byte code);\r
 extern void IN_ClearKey(byte code);\r
 extern boolean IN_qb(byte kee);\r
-void IN_initplayer(player_t *player, word pn);\r
+void IN_initplayer(player_t *player);\r
 \r
 #endif\r
index 90eb789be895c0b0423a724b8b91b31d39b7076a..bac162c9371df7e9545c9c7e02e3883408bc4355 100755 (executable)
@@ -39,10 +39,10 @@ typedef struct {
        word tileWidth;\r
        unsigned int rows;\r
        unsigned int cols;\r
-#ifdef __DEBUG__\r
+       #ifdef __DEBUG__\r
        boolean debug_text;     //show the value of the tile! wwww\r
        byte *debug_data;\r
-#endif\r
+       #endif\r
 } tiles_t;\r
 \r
 //TODO: 16_mm and 16_ca must handle this\r
@@ -52,7 +52,7 @@ typedef struct {
        //unsigned      planelength[3];\r
        byte    * huge *data;   //TODO: 16_mm and 16_ca must handle this\r
        tiles_t **tiles;                //TODO: 16_mm and 16_ca must handle this\r
-       int width, height;              //this has to be signed!\r
+       unsigned int width, height;             //this has to be positive\r
        char            name[16];\r
 } map_t;\r
 \r
index c59590cefe640158f0ac0ee4455574506b971d8d..89d38906d40a0c1d26168dc97d267e7350e6f2e2 100755 (executable)
@@ -66,11 +66,11 @@ void print_anim_ids(struct sprite *spri)
                                         vrs->offset_table[VRS_HEADER_OFFSET_ANIMATION_ID_LIST]);\r
 \r
        if(!anim_ids[new_anim_index])\r
-               exit(3);\r
+               return;\r
        // Loop through animation id untill match or end of list\r
        while(iter_id = anim_ids[new_anim_index])\r
        {\r
-               // Return on successful match\r
+               printf("s%d ", iter_id);\r
                new_anim_index++;\r
        }\r
 }\r
diff --git a/src/lib/tst.c b/src/lib/tst.c
new file mode 100644 (file)
index 0000000..44100e6
--- /dev/null
@@ -0,0 +1,102 @@
+#include "stdio.h"
+#include "stdlib.h"
+#include "jsmn/jsmn.h"
+
+static int dump(const char *js, jsmntok_t *t, size_t count, int indent) {
+       int i, j, k;
+       if (count == 0) {
+               return 0;
+       }
+       if (t->type == JSMN_PRIMITIVE) {
+               printf("%.*s", t->end - t->start, js+t->start);
+               return 1;
+       } else if (t->type == JSMN_STRING) {
+               printf("'%.*s'", t->end - t->start, js+t->start);
+               return 1;
+       } else if (t->type == JSMN_OBJECT) {
+               printf("\n");
+               j = 0;
+               for (i = 0; i < t->size; i++) {
+                       for (k = 0; k < indent; k++) printf("  ");
+                       j += dump(js, t+1+j, count-j, indent+1);
+                       printf(": ");
+                       j += dump(js, t+1+j, count-j, indent+1);
+                       printf("\n");
+               }
+               return j+1;
+       } else if (t->type == JSMN_ARRAY) {
+               j = 0;
+               printf("\n");
+               for (i = 0; i < t->size; i++) {
+                       for (k = 0; k < indent-1; k++) printf("  ");
+                       printf("   - ");
+                       j += dump(js, t+1+j, count-j, indent+1);
+                       printf("\n");
+               }
+               return j+1;
+       }
+       return 0;
+}
+
+long int
+filesize(FILE *fp)
+{
+       long int save_pos, size_of_file;
+
+       save_pos = ftell(fp);
+       fseek(fp, 0L, SEEK_END);
+       size_of_file = ftell(fp);
+       fseek(fp, save_pos, SEEK_SET);
+       return(size_of_file);
+}
+
+
+int loadmap(char *mn/*, map_t *map*/)
+{
+       char *js;
+       char js_ss[16];
+
+       jsmn_parser p;
+       jsmntok_t *tok = NULL;
+       size_t tokcount, file_s;
+
+       FILE *fh = fopen(mn, "r");
+
+       /* Prepare parser */
+       jsmn_init(&p);
+
+       file_s = filesize(fh);
+       js = malloc(file_s);
+       if(js == NULL){
+               fprintf(stderr, "malloc(): errno = %d", 2);
+               fclose(fh);
+               return 3;
+       }
+       if(fread(js, 1, file_s, fh) != file_s){
+               fprintf(stderr, "Map read error");
+               free(js);
+               fclose(fh);
+               return 1;
+       }
+
+       tokcount = jsmn_parse(&p, js, file_s, NULL, 0);
+       tok = malloc(tokcount*sizeof(jsmntok_t));
+       jsmn_parse(&p, js, file_s, tok, tokcount);
+       #ifdef DEBUG_DUMPVARS
+       fprintf(stdout, "running dump~\n");
+       #endif
+       dump(js, tok, p.toknext, 0);
+
+       free(js);
+       free(tok);
+       fclose(fh);
+       
+       return 0;
+}
+
+int main()
+{
+       puts("3");
+       loadmap("../../data/0es0.map");
+       return 0;
+}
index 7571ffd9c34c9b4838514a6b1199a4dfe528a7a9..a27b6b8599374f6950e0939fbb37e215dd5114a7 100755 (executable)
@@ -64,11 +64,12 @@ typedef struct {
        byte *palette;\r
 } planar_buf_t;\r
 \r
+\r
+enum direction {STOP, UP, DOWN, LEFT, RIGHT};\r
 typedef struct {\r
+       int dx, dy; //backwards compait\r
        word id;        /* the Identification number of the page~ For layering~ */\r
        byte far* data; /* the data for the page */\r
-       word dx;                /* col we are viewing on the virtual screen */\r
-       word dy;                /* row we are viewing on the virtual screen */\r
        word sw;                /* screen width */\r
        word sh;                /* screen heigth */\r
        word tw;                /* screen width in tiles */\r
@@ -84,8 +85,9 @@ typedef struct {
        word stridew;                   /*width/4*/\r
        word pagesize;                  /* page size */\r
        word pi;                                /* incremention page by this much to preserve location */\r
+       word delta;                     // How much should we shift the page for smooth scrolling\r
+       enum direction d;                       // Direction we should shift the page\r
 } page_t;\r
-\r
 typedef struct\r
 {\r
        //sprite ....\r
index d2786c16357f4f0a1efce6b4889d1ec0c17cdde8..991217ca4c438c40c32566d77ed43c984b79cdf8 100755 (executable)
  *\r
  */\r
 \r
-#include "src/lib/scroll16.h"\r
+#include "src/lib/zcroll16.h"\r
 #include "src/lib/16_timer.h"\r
 #include "src/lib/wcpu/wcpu.h"\r
 #include "src/lib/16render.h"\r
 \r
-//word far *clock= (word far*) 0x046C; /* 18.2hz clock */\r
-//bitmap_t *p;\r
 global_game_variables_t gvar;\r
 static map_t map;\r
-player_t player[MaxPlayers];\r
-map_view_t mv[4];\r
-//word pn=0; //i forgot ww\r
+player_t *player;\r
+map_view_t *mv;\r
 float t;\r
 sword bakapee;\r
 pan_t pan;\r
 //debugswitches\r
 boolean panswitch=0,baka=0;\r
 //extern boolean pageflipflop=1;\r
-       unsigned int i;\r
-       const char *cpus;\r
-       //static int persist_aniframe = 0;    /* gonna be increased to 1 before being used, so 0 is ok for default */\r
+unsigned int i;\r
+const char *cpus;\r
+//static int persist_aniframe = 0;    /* gonna be increased to 1 before being used, so 0 is ok for default */\r
 \r
-       //map_view_db_t pgid[4];\r
-       word pg;\r
+//map_view_db_t pgid[4];\r
+word pg;\r
 //#ifdef FADE\r
-       static word paloffset=0;\r
-       byte *dpal;\r
+static word paloffset=0;\r
+byte *dpal;\r
 //#endif\r
-       byte *gpal;\r
-       byte *ptr;\r
-       byte *mappalptr;\r
+byte *gpal;\r
+byte *ptr;\r
+memptr pal;\r
 \r
 void main(int argc, char *argv[])\r
 {\r
@@ -59,100 +56,92 @@ void main(int argc, char *argv[])
 \r
        Startup16(&gvar);\r
 \r
-       pan.pn=1;\r
+       pan.pn=0;\r
+       // OK, this one takes hellova time and needs to be done in farmalloc or MM_...\r
+       player = malloc(sizeof(player_t));\r
+       player->ent = malloc(sizeof(entity_t));\r
+       player->ent->spri = malloc(sizeof(struct sprite));\r
+       player->ent->spri->spritesheet = malloc(sizeof(struct vrs_container));\r
 \r
-       /* create the map */\r
+       // create the map \r
        fprintf(stderr, "testing map load~      ");\r
        loadmap("data/test.map", &map);\r
        chkmap(&map, 0);\r
        printf("chkmap ok       ");\r
        fprintf(stderr, "yay map loaded~~\n");\r
 \r
-       /* draw the tiles */\r
-       ptr = map.data;\r
-       //mappalptr = map.tiles->btdata->palette;\r
+       // data \r
+       read_vrs(&gvar, "data/spri/chikyuu.vrs", player->ent->spri->spritesheet);\r
 \r
-       /* data */\r
-       if(CA_LoadFile("data/spri/chikyuu.vrs", &(player[0].gr), &gvar)) baka=1; else baka=0;\r
+       //      input!  \r
+       IN_Default(0, player,ctrl_Joystick);\r
 \r
-       /* create the planar buffer */\r
-////++++       (player[0].data) = *planar_buf_from_bitmap(&p);\r
-       /*++++printf("load pee!!        ");\r
-       pp = planar_buf_from_bitmap(&p);\r
-       printf("done!\n");*/\r
-\r
-       /*      input!  */\r
-       IN_Default(0,&player,ctrl_Joystick);\r
-       //IN_Default(1,&player,ctrl_Joystick);\r
-\r
-       /* save the palette */\r
+       // save the palette \r
        dpal = modexNewPal();\r
        modexPalSave(dpal);\r
        modexFadeOff(4, dpal);\r
 \r
        textInit();\r
        VGAmodeX(bakapee, 1, &gvar);\r
-//     printf("%dx%d\n", gvar.video.page[0].sw, gvar.video.page[0].sh);\r
        modexPalBlack();        //reset the palette~\r
 \r
-//     printf("Total used @ before palette initiation:         %zu\n", oldfreemem-GetFreeSize());\r
-//++++ player[0].data.offset=(paloffset/3);\r
-//++++ modexPalUpdate1(&player[0].data, &paloffset, 0, 0);\r
-               modexPalUpdate1(player[0].data->palette);\r
-//++++0000             modexPalUpdate1(map.tiles->btdata->palette);\r
-       //printf("      %d\n", sizeof(ptmp->data));\r
-       //printf("1:    %d\n", paloffset);\r
-//++++ map.tiles->data->offset=(paloffset/3);\r
-       //XTmodexPalUpdate(map.tiles->data, &paloffset, 0, 0);\r
-//     printf("\n====\n");\r
-//     printf("0       paloffset=      %d\n", paloffset/3);\r
-//     printf("====\n\n");\r
+       CA_LoadFile("data/spri/chikyuu.pal", &pal, &gvar);\r
+       modexPalUpdate1(pal);\r
 \r
        gpal = modexNewPal();\r
        modexPalSave(gpal);\r
        modexSavePalFile("data/g.pal", gpal);\r
        modexPalBlack();        //so player will not see loadings~\r
-\r
-       /* setup camera and screen~ */\r
+       // setup camera and screen~\r
        modexHiganbanaPageSetup(&gvar.video);\r
-       for(i=0;i<gvar.video.num_of_pages;i++)\r
-       {\r
-               mv[i].page = &gvar.video.page[i];\r
-               mv[i].map = &map;\r
-               mv[i].video = &gvar.video;\r
-               mv[i].pan       = &pan;\r
-       }\r
+       mv->page = &gvar.video.page[0];\r
+       mv->map = &map;\r
+       mv->video = &gvar.video;\r
+       mv->pan = &pan;\r
+       player->ent->spri->x = player->ent->spri->y = 20;\r
 \r
-       /* set up paging */\r
+       // set up paging\r
        //TODO: LOAD map data and position the map in the middle of the screen if smaller then screen\r
        mapGoTo(mv, 0, 0);\r
-       //_fmemcpy(mv[1].page->data, mv[0].page->data, mv[0].page->pagesize);\r
+       //_fmemcpy(mv[1].page->data, mv->page->data, mv->page->pagesize);\r
 \r
        //TODO: put player in starting position of spot\r
        //default player position on the viewable map\r
-       player[0].tx = mv[0].tx + mv[0].page->tilemidposscreenx;\r
-       player[0].ty = mv[0].ty + mv[0].page->tilemidposscreeny;\r
-       IN_initplayer(&player, 0);\r
+       player->tx = mv->tx + mv->page->tilemidposscreenx;\r
+       player->ty = mv->ty + mv->page->tilemidposscreeny;\r
+       IN_initplayer(player);\r
        //IN_initplayer(&player, 1);\r
 \r
 #ifndef        SPRITE\r
-       modexClearRegion(mv[0].page, player[0].x, player[0].y-TILEWH, 16, 32, 15);\r
-       //modexClearRegion(mv[1].page, player[0].x, player[0].y-TILEWH, 16, 32, 15);\r
+       modexClearRegion(mv->page, player->x, player->y-TILEWH, 16, 32, 15);\r
+       //modexClearRegion(mv[1].page, player->x, player->y-TILEWH, 16, 32, 15);\r
 #else\r
-       //PBUFSFUN(mv[1].page, player[0].x, player[0].y-TILEWH, 16, 64, 24, 32, PLAYERBMPDATA);\r
-       PBUFSFUN(mv[0].page, player[0].x, player[0].y-TILEWH, 16, 64, 16, 32,   player[0].data);\r
+       //PBUFSFUN(mv[1].page, player->x, player->y-TILEWH, 16, 64, 24, 32,     PLAYERBMPDATA);\r
+//     PBUFSFUN(mv->page, player->x, player->y-TILEWH, 16, 64, 16, 32, player->data);\r
+       i = set_anim_by_id(player->ent->spri, 11);\r
+       print_anim_ids(player->ent->spri);\r
+       if (i == -1)\r
+       {\r
+               modexFadeOff(4, gpal);\r
+       VGAmodeX(0, 1, &gvar);\r
+       Shutdown16(&gvar);\r
+       printf("Wrong");\r
+               modexFadeOn(4, dpal);\r
+return;\r
+       }\r
+return;\r
+       //animate_spri(&(player->ent->spri));\r
 #endif\r
 \r
-       if(!pageflipflop)       modexShowPage(mv[1].page);\r
-       else                    modexShowPage(mv[0].page);//!(gvar.video.p)\r
-               shinku_fps_indicator_page = 0; // we're on page 1 now, shinku(). follow along please or it will not be visible.\r
+       modexShowPage(mv->page);//!(gvar.video.p)\r
+       shinku_fps_indicator_page = 0; // we're on page 1 now, shinku(). follow along please or it will not be visible.\r
 \r
-       /* buffer pages */\r
+       // buffer pages \r
 //     modexClearRegion(mv[2].page, 0, 0, mv[2].page->width, mv[2].page->height, 47);\r
 //     modexClearRegion(mv[3].page, 0, 0, mv[3].page->width, mv[3].page->height, 45);\r
 //     {\r
 //             unsigned int k,j,o;\r
-//             /* fill screen with a distinctive pattern */\r
+//             // fill screen with a distinctive pattern \r
 //             for (k=0;k < vga_state.vga_width;k++) {\r
 //                     o = k >> 2;\r
 //                     vga_write_sequencer(0x02/*map mask*/,1 << (k&3));\r
@@ -160,97 +149,77 @@ void main(int argc, char *argv[])
 //                                     vga_state.vga_graphics_ram[o] = (k^j)&15; // VRL samples put all colors in first 15!\r
 //             }\r
 //     }\r
-       modexClearRegion(mv[3].page, 0, 128, 24, 36, 15);\r
 \r
-       modexFadeOn(4, gpal);\r
-       while(!IN_KeyDown(sc_Escape) && player[0].hp>0)\r
+//     modexFadeOn(4, gpal);*/\r
+       while(!IN_KeyDown(sc_Escape) && player->hp>0)\r
        {\r
                shinku(&gvar);\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[0].tx or player[0].ty == 0 or player[0].tx == 20 or player[0].ty == 15 then stop because that is edge of map and you do not want to walk of the map\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\r
 \r
-       //player movement\r
-               IN_ReadControl(0,&player);\r
-       if(!panswitch){\r
-               walk(mv, player, 0);\r
-       }else{\r
-               panpagemanual(mv, player, 0);\r
-               //printf("      player[0].q: %d", player[0].q); printf("        player[0].d: %d\n", player[0].d);\r
-       }\r
+               //player movement\r
+               IN_ReadControl(player);\r
+               if(!panswitch){\r
+                       walk(player->ent, mv);\r
+               }\r
 \r
-       //the scripting stuff....\r
-       //if(((player[0].triggerx == TRIGGX && player[0].triggery == TRIGGY) && IN_KeyDown(0x1C))||(player[0].tx == 5 && player[0].ty == 5))\r
-       if(((mv[0].map->data[(player[0].triggerx-1)+(map.width*(player[0].triggery-1))] == 0) && IN_KeyDown(0x1C))||(player[0].tx == 5 && player[0].ty == 5))\r
-       {\r
-               short i;\r
-               for(i=800; i>=400; i--)\r
+               //the scripting stuff....\r
+/*             if(((mv->map->data[(player->triggerx-1)+(map.width*(player->triggery-1))] == 0) && IN_KeyDown(0x1C))||(player->tx == 5 && player->ty == 5))\r
                {\r
-                       sound(i);\r
+                       short i;\r
+                       for(i=800; i>=400; i--)\r
+                       {\r
+                               sound(i);\r
+                       }\r
+                       nosound();\r
+               }\r
+               if(player->q == (TILEWH/(player->speed))+1 && player->info.dir != 2 && (player->triggerx == 5 && player->triggery == 5)){ player->hp--; }\r
+*/             //debugging binds!\r
+               if(IN_KeyDown(2)){ modexShowPage(mv->page); pan.pn=0; }\r
+               if(IN_KeyDown(25)){ modexpdump(mv->page);\r
+                        IN_UserInput(1,1);\r
+               }       //p\r
+               if(IN_KeyDown(24)){ modexPalUpdate0(gpal); paloffset=0; modexpdump(mv->page); IN_UserInput(1,1); }\r
+               if(IN_KeyDown(22)){\r
+                       printf("2paloffset      =       %d\n", paloffset/3);\r
+                       IN_UserInput(1,1);\r
                }\r
-               nosound();\r
-       }\r
-       if(player[0].q == (TILEWH/(player[0].speed))+1 && player[0].info.dir != 2 && (player[0].triggerx == 5 && player[0].triggery == 5)){ player[0].hp--; }\r
-       //debugging binds!\r
-       if(IN_KeyDown(2)){ modexShowPage(mv[0].page); pan.pn=0; }\r
-       if(IN_KeyDown(3)){ modexShowPage(mv[1].page); pan.pn=1; }\r
-       if(IN_KeyDown(4)){ modexShowPage(mv[2].page); pan.pn=2; }\r
-       if(IN_KeyDown(4+1)){ modexShowPage(mv[3].page); pan.pn=3; }\r
-       if(IN_KeyDown(25)){ modexpdump(mv[0].page); modexpdump(mv[1].page);\r
-                IN_UserInput(1,1);\r
-       }       //p\r
-       if(IN_KeyDown(24)){ modexPalUpdate0(gpal); paloffset=0; modexpdump(mv[0].page); modexpdump(mv[1].page);  IN_UserInput(1,1); }\r
-       if(IN_KeyDown(22)){\r
-       paloffset=0; modexPalBlack(); modexPalUpdate(player[0].data, &paloffset, 0, 0);\r
-       printf("2paloffset      =       %d\n", paloffset/3);\r
-        modexpdump(mv[0].page); modexpdump(mv[1].page);\r
-               IN_UserInput(1,1);\r
-       }\r
 \r
-       //pan switch\r
-       if(IN_KeyDown(88)){panswitch=!panswitch; IN_UserInput(1,1);}    //f12\r
-       if(IN_KeyDown(87))      //f11\r
-       {\r
-               pageflipflop=!pageflipflop;\r
-               IN_UserInput(1,1);\r
-//             VGAmodeX(0, 0, &gvar);\r
-//             IN_Shutdown();\r
-//             __asm\r
-//             {\r
-//                     mov ah,31h\r
-//                     int 21h\r
-//             }\r
-       }\r
-       if(IN_KeyDown(68))      //f10\r
-       {\r
-               gvar.kurokku.fpscap=!gvar.kurokku.fpscap;\r
-               IN_UserInput(1,1);\r
-       }\r
-       if(IN_KeyDown(67))      //f9\r
-       {\r
-               modexClearRegion(mv[1].page, 0, 0, mv[1].page->width, mv[1].page->height, 2);\r
-               modexClearRegion(mv[2].page, 0, 0, mv[2].page->width, mv[2].page->height, 3);\r
-               modexClearRegion(mv[3].page, 0, 0, mv[3].page->width, mv[3].page->height, 4);\r
-               modexClearRegion(mv[3].page, 0, 0, 20, 36, 15);\r
-               //IN_UserInput(1,1);\r
-       }\r
-       if(IN_KeyDown(66))      //f8\r
-       {\r
-//             modexDrawSprite(mv[0].page, 16, 16, p);\r
-               modexDrawSprite(mv[0].page, 32+48, 16, (player[0].data));\r
-       }\r
-       //TODO fmemtest into page\r
-       /*if(IN_KeyDown(4+1))   //4\r
-       {\r
-               pg=1;\r
-               SELECT_ALL_PLANES();\r
-               _fmemset(((mv[pg].page->data+4)+(16*(mv[pg].page->width/4))), 15, 4);\r
-       }*/\r
+               //pan switch\r
+               if(IN_KeyDown(88)){panswitch=!panswitch; IN_UserInput(1,1);}    //f12\r
+               if(IN_KeyDown(87))      //f11\r
+               {\r
+                       pageflipflop=!pageflipflop;\r
+                       IN_UserInput(1,1);\r
+               }\r
+               if(IN_KeyDown(68))      //f10\r
+               {\r
+                       gvar.kurokku.fpscap=!gvar.kurokku.fpscap;\r
+                       IN_UserInput(1,1);\r
+               }\r
+               if(IN_KeyDown(67))      //f9\r
+               {\r
+                       modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 2);\r
+               }\r
+               if(IN_KeyDown(66))      //f8\r
+               {\r
+       //              modexDrawSprite(mv->page, 16, 16, p);\r
+                       modexDrawSprite(mv->page, 32+48, 16, (player->data));\r
+               }\r
+               //TODO fmemtest into page\r
+               /*if(IN_KeyDown(4+1))   //4\r
+               {\r
+                       pg=1;\r
+                       SELECT_ALL_PLANES();\r
+                       _fmemset(((mv[pg].page->data+4)+(16*(mv[pg].page->width/4))), 15, 4);\r
+               }*/\r
 \r
-       //9\r
-       if(IN_KeyDown(10)){ modexPalOverscan(rand()%56); modexPalUpdate1(dpal); IN_UserInput(1,1); }\r
-       //if(IN_KeyDown(11)){ modexPalOverscan(15); }\r
-       if((player[0].q==1) && !(player[0].x%TILEWH==0 && player[0].y%TILEWH==0)) break;        //incase things go out of sync!\r
+               //9\r
+               if(IN_KeyDown(10)){ modexPalOverscan(rand()%56); modexPalUpdate1(dpal); IN_UserInput(1,1); }\r
+               //if(IN_KeyDown(11)){ modexPalOverscan(15); }\r
+               if((player->q==1) && !(player->x%TILEWH==0 && player->y%TILEWH==0)) break;      //incase things go out of sync!\r
+               player->hp = 0;\r
        }\r
 \r
        /* fade back to text mode */\r
@@ -262,18 +231,18 @@ void main(int argc, char *argv[])
        Shutdown16(&gvar);\r
        printf("\nProject 16 scroll.exe. This is just a test file!\n");\r
        printf("version %s\n", VERSION);\r
-       printf("tx: %d  ", mv[0].tx);\r
-       printf("ty: %d\n", mv[0].ty);\r
+       printf("tx: %d  ", mv->tx);\r
+       printf("ty: %d\n", mv->ty);\r
        printf("\n");\r
        printf("player vars:\n");\r
-       printf("        x: %d", player[0].x); printf("  y: %d\n", player[0].y);\r
-       //if(player[0].hp==0) printf("%d wwww\n", player[0].y+8);\r
-       //else printf("\nplayer[0].y: %d\n", player[0].y);\r
-       printf("        tx: %d", player[0].tx); printf("        ty: %d\n", player[0].ty);\r
-       printf("        triggx: %d", player[0].triggerx); printf("      triggy: %d\n", player[0].triggery);\r
-       printf("        hp: %d", (player[0].hp));       printf("        q: %d", player[0].q);   printf("        player.info.dir: %d", player[0].info.dir);      printf("        player.d: %d ", player[0].d);\r
-               printf("        pdir=%d\n", player[0].pdir);\r
-       printf("        tile data value at player trigger position: %d\n\n", mv[0].map->data[(player[0].triggerx-1)+(map.width*(player[0].triggery-1))]);\r
+       printf("        x: %d", player->x); printf("    y: %d\n", player->y);\r
+       //if(player->hp==0) printf("%d wwww\n", player->y+8);\r
+       //else printf("\nplayer->y: %d\n", player->y);\r
+       printf("        tx: %d", player->tx); printf("  ty: %d\n", player->ty);\r
+       printf("        triggx: %d", player->triggerx); printf("        triggy: %d\n", player->triggery);\r
+       printf("        hp: %d", (player->hp)); printf("        q: %d", player->q);     printf("        player.info.dir: %d", player->info.dir);        printf("        player.d: %d ", player->d);\r
+               printf("        pdir=%d\n", player->pdir);\r
+       printf("        tile data value at player trigger position: %d\n\n", mv->map->data[(player->triggerx-1)+(map.width*(player->triggery-1))]);\r
        printf("Virtual Screen: %dx", gvar.video.page[0].width);        printf("%d      ", gvar.video.page[0].height);\r
        printf("Screen: %dx", gvar.video.page[0].sw);   printf("%d\n", gvar.video.page[0].sh);\r
        printf("virtual tile resolution: %dx", gvar.video.page[0].tilesw);      printf("%d      ", gvar.video.page[0].tilesh);\r
@@ -286,7 +255,7 @@ void main(int argc, char *argv[])
        //0000printf("\ngvar.video.tickclk=%f\n", gvar.video.tickclk);\r
        //0000printf("gvar.video.clk=%f", gvar.video.clk);\r
        printf("\n");\r
-       //printf("map.width=%d  map.height=%d   map.data[0]=%d\n", mv[0].map->width, mv[0].map->height, mv[0].map->data[0]);\r
+       //printf("map.width=%d  map.height=%d   map.data[0]=%d\n", mv->map->width, mv->map->height, mv->map->data[0]);\r
 \r
        printf("\n");\r
        switch(detectcpu())\r