]> 4ch.mooo.com Git - 16.git/commitdiff
See WHAT_WAS_CHANGED for details
authoryakui-lover <yakui-lover@yandex.ru>
Fri, 25 Nov 2016 17:54:22 +0000 (02:54 +0900)
committeryakui-lover <yakui-lover@yandex.ru>
Fri, 25 Nov 2016 17:56:05 +0000 (02:56 +0900)
12 files changed:
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/lib/zcroll16.c
src/lib/zcroll16.h
src/zcroll.c

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 2d44a1b8e84fa7a08ae02b19e9e8d4e3b1cb04e1..705665de297a860b06fefed850a2c59fddb1b0b3 100755 (executable)
--- a/makefile
+++ b/makefile
@@ -106,7 +106,7 @@ LIBFLAGS=$(WLIBQ) -b -n
 # objects
 #
 VGMSNDOBJ = vgmSnd.$(OBJ) 16_snd.$(OBJ)
-GFXLIBOBJS = modex16.$(OBJ) bitmap.$(OBJ) 16text.$(OBJ) bakapee.$(OBJ) scroll16.$(OBJ) 16render.$(OBJ) 16_vrs.$(OBJ) 16_sprit.$(OBJ)
+GFXLIBOBJS = modex16.$(OBJ) bitmap.$(OBJ) 16text.$(OBJ) bakapee.$(OBJ) zcroll16.$(OBJ) 16render.$(OBJ) 16_vrs.$(OBJ) 16_sprit.$(OBJ)
 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)
 #16planar.$(OBJ) planar.$(OBJ)
 DOSLIBOBJ = adlib.$(OBJ) 8254.$(OBJ) 8259.$(OBJ) dos.$(OBJ) cpu.$(OBJ)
@@ -193,7 +193,7 @@ bakapi.exe:       bakapi.$(OBJ) gfx.lib $(DOSLIBLIBS)
 #
 scroll.exe:       scroll.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIB) gfx.lib $(DOSLIBLIBS)
 scroll.$(OBJ):    $(SRC)/scroll.c
-zcroll.exe:       zcroll.$(OBJ) mapread.$(OBJ) jsmn.$(OBJ) $(16LIB) gfx.lib $(DOSLIBLIBS)
+zcroll.exe:       zcroll.$(OBJ) 16_map.$(OBJ) jsmn.$(OBJ) $(16LIB) gfx.lib $(DOSLIBLIBS)
 zcroll.$(OBJ):    $(SRC)/zcroll.c
 tesuto.exe:       tesuto.$(OBJ) 16_head.$(OBJ) gfx.lib $(DOSLIBLIBS)
 tesuto.$(OBJ):    $(SRC)/tesuto.c
@@ -286,8 +286,9 @@ bakapee.$(OBJ):   $(SRCLIB)/bakapee.c $(SRCLIB)/bakapee.h
 16_sprit.$(OBJ):  $(SRCLIB)/16_sprit.c $(SRCLIB)/16_sprit.h
 bitmap.$(OBJ):    $(SRCLIB)/bitmap.c $(SRCLIB)/bitmap.h
 planar.$(OBJ):    $(SRCLIB)/planar.c $(SRCLIB)/planar.h
-scroll16.$(OBJ):  $(SRCLIB)/scroll16.c $(SRCLIB)/scroll16.h
 16text.$(OBJ):    $(SRCLIB)/16text.c
+scroll16.$(OBJ):  $(SRCLIB)/scroll16.c $(SRCLIB)/scroll16.h
+zcroll16.$(OBJ):  $(SRCLIB)/zcroll16.c $(SRCLIB)/zcroll16.h
 mapread.$(OBJ):   $(SRCLIB)/mapread.c $(SRCLIB)/mapread.h
 16_map.$(OBJ):   $(SRCLIB)/16_map.c $(SRCLIB)/16_map.h
 16_timer.$(OBJ):  $(SRCLIB)/16_timer.c $(SRCLIB)/16_timer.h
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 85709c5e00c53fc90dd649a8698984b3741005ba..363b588b2e30254c7bd54bef28dd1b6688ba1b81 100755 (executable)
@@ -51,8 +51,8 @@ boolean dbg_testkeyin=0,dbg_testcontrolnoisy=0;
 */\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
@@ -508,7 +508,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
@@ -703,9 +703,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
@@ -816,7 +815,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
                        byte            dbyte;\r
@@ -854,7 +853,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
@@ -869,7 +868,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
@@ -882,7 +881,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
@@ -898,7 +897,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
@@ -936,23 +935,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
@@ -982,13 +981,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
@@ -1002,10 +1001,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
@@ -1267,20 +1266,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 29ecc130e1f91616bf870bd9f88a895c6ea30f90..b2170176335c5498d265f205629be345150b3bf2 100755 (executable)
@@ -32,8 +32,9 @@
 #include "src/lib/16_timer.h"\r
 #ifdef __WATCOMC__     //borland C BCEXMM.EXE\r
 #include "src/lib/16_dbg.h"\r
-#include "src/lib/16_sprit.h"\r
 #include "src/lib/bitmap.h"    //old format\r
+#include "src/lib/16_sprit.h"\r
+#include "src/lib/16_entity.h"\r
 #endif\r
 #ifdef __DEBUG__\r
 #define        __DEBUG_InputMgr__\r
@@ -41,10 +42,7 @@ extern boolean dbg_testkeyin,dbg_testcontrolnoisy;
 #endif\r
 \r
 //if else for gfxtesting and direction\r
-//player[pn].d == 2 ||\r
-//player[pn].d != 2 ||\r
-#define DIRECTIONIFELSE        (player[pn].info.dir == 2)\r
-//#define NDIRECTIONIFELSE     (player[pn].info.dir != 2)\r
+#define DIRECTIONIFELSE        (player->info.dir == 2)\r
 \r
 #define        KeyInt  9       // The keyboard ISR number\r
 \r
@@ -53,7 +51,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 +232,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 +286,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 +304,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 cd3f934973e594404de32fdfa41701b8ec782d10..4fd0442967ee63cb39c49791b6cb37852e1b2d9f 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 32aaed26247dff50ca141cc0ad730a5930ceb65f..4242f6c4ff8920a9cc05924e7be64438c44bf844 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 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 6f66342967ca388e630e2d1528f6e1359c812541..8e07c2c0d3ff4f89281880aa5cc0701c926742ee 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/modex16.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
index 3162336759841b37722be8febc8497033898c6a3..f7603e8d2c31d3454a4ea86ba46d5b175a032e1c 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
 \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
        byte *mesg=malloc(sizeof(dword));\r
+       int i;\r
 \r
        if(argv[1]) bakapee = atoi(argv[1]);\r
        else bakapee = 1;\r
 \r
        Startup16(&gvar);\r
 \r
-       pan.pn=1;\r
+       pan.pn=0;\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
@@ -161,97 +150,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
@@ -263,18 +232,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
@@ -287,7 +256,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