]> 4ch.mooo.com Git - 16.git/commitdiff
16_ca needs huge amounts of work and I should remember what needs to be done soon...
authorsparky4 <sparky4@cock.li>
Wed, 3 May 2017 18:31:28 +0000 (13:31 -0500)
committersparky4 <sparky4@cock.li>
Wed, 3 May 2017 18:31:28 +0000 (13:31 -0500)
19 files changed:
XCROLL.LOG
data/chistnd.pcx [new file with mode: 0755]
data/spri/CHUBFCW0.VRL
data/spri/chistnd.h [new file with mode: 0755]
data/spri/chistnd.pal [new file with mode: 0755]
data/spri/chistnd.sht [new file with mode: 0755]
data/spri/chistnd.vrl [new file with mode: 0755]
data/spri/chistnd.vrs [new file with mode: 0755]
src/lib/16_ca.c
src/lib/16_dbg.c
src/lib/16_in.h
src/lib/16_spri.c
src/lib/16_spri.h
src/lib/16_t.h
src/lib/16_tail.c
src/lib/16_tdef.h
src/lib/16_vrs.c
src/lib/16_vrs.h
src/xcroll.c

index 6bc68838e4e6a1a8c769416bfd7f22cf524bb814..b1501b6af321aa636852117993231484f4145ec5 100755 (executable)
@@ -9,9 +9,42 @@ Object 4's name: 'stump'
                      "walkable":"0"\r
                     }\r
                walkable: 0\r
+DrawVRL:\r
+[00]   85\r
+[01]   00\r
+[02]   0b\r
+[03]   86\r
+[04]   00\r
+[05]   02\r
+[06]   88\r
+[07]   01\r
+[08]   0b\r
+[09]   88\r
+[10]   04\r
+[11]   0b\r
+[12]   ff\r
+[13]   84\r
+[14]   00\r
+[15]   0b\r
+[16]   06\r
+[17]   00\r
+[18]   02\r
+[19]   06\r
+[20]   04\r
+[21]   04\r
+[22]   03\r
+[23]   02\r
+[24]   87\r
+[25]   01\r
+[26]   0b\r
+[27]   01\r
+[28]   02\r
+[29]   05\r
+[30]   02\r
+[31]   01\r
 \r
 Project 16 xcroll.exe. This is just a test file!\r
-version May  1 2017 13:37:18\r
+version May  3 2017 13:29:21\r
 page[0]dxy: 16x16\r
 \r
 player vars:\r
diff --git a/data/chistnd.pcx b/data/chistnd.pcx
new file mode 100755 (executable)
index 0000000..39a969d
Binary files /dev/null and b/data/chistnd.pcx differ
index 75d5a6e46e90a41bbe26dff7c9165d175947ab34..af1b4956a34a98069b8280b017a10db336d03294 100755 (executable)
Binary files a/data/spri/CHUBFCW0.VRL and b/data/spri/CHUBFCW0.VRL differ
diff --git a/data/spri/chistnd.h b/data/spri/chistnd.h
new file mode 100755 (executable)
index 0000000..fa9eae8
--- /dev/null
@@ -0,0 +1,9 @@
+// header file for sprite sheet. AUTO GENERATED, do not edit
+// 
+// source PCX: ../chistnd.pcx
+// sheet script: chistnd.sht
+// palette file: chistnd.pal
+
+#define _chistnd_CHUBFCW0 11U
+
+// end list
diff --git a/data/spri/chistnd.pal b/data/spri/chistnd.pal
new file mode 100755 (executable)
index 0000000..38ec968
Binary files /dev/null and b/data/spri/chistnd.pal differ
diff --git a/data/spri/chistnd.sht b/data/spri/chistnd.sht
new file mode 100755 (executable)
index 0000000..a4f5780
--- /dev/null
@@ -0,0 +1,26 @@
+# CHISTND.PCX demo sprite sheet compiler script\r
+# (C) 2016 Jonathan Campbell\r
+\r
+# *spritesheet declares the section used by the sprite sheet cutting tool\r
+#\r
+# Sprites are declared by name (which becomes the .VRL file) at the + in the form:\r
+# +NAME@ID\r
+#\r
+# Sprite names are meant for temporary use when compiling the sprite sheet into VRLs.\r
+# At some point a longer name might be provided for use in your code.\r
+# This will fill the CURRENT WORKING DIRECTORY with .VRL files as directed when you\r
+# run PCXSSCUT, make sure your makefile does this in a temporary directory when\r
+# you integrate into your build and that your cleanup commands delete these files,\r
+# and that your .gitignore does not attempt to commit these files.\r
+\r
+# this format is a bit crap, but we'll improve it as needed. be patient.\r
+\r
+# begin spritesheet section\r
+*spritesheet\r
+\r
+# ---------------- player, walking, blue shirt with white cross. Frame 2/3 could be used for standing still\r
+\r
+# player, forward, frame 1/3\r
++CHUBFCW0@11\r
+xy=0,0\r
+wh=16,32\r
diff --git a/data/spri/chistnd.vrl b/data/spri/chistnd.vrl
new file mode 100755 (executable)
index 0000000..af1b495
Binary files /dev/null and b/data/spri/chistnd.vrl differ
diff --git a/data/spri/chistnd.vrs b/data/spri/chistnd.vrs
new file mode 100755 (executable)
index 0000000..401ca63
Binary files /dev/null and b/data/spri/chistnd.vrs differ
index ccab39ba8c97e10a7b11703e903d5522ac6f207e..f6ffafb66eef177fa5e2f94a7eee813dad09a076 100755 (executable)
@@ -1451,7 +1451,7 @@ cachein:
 //===========================================================================\r
 \r
 //????#if GRMODE == EGAGR\r
-#if 0\r
+#if 1\r
 \r
 /*\r
 ======================\r
@@ -1465,9 +1465,10 @@ cachein:
 \r
 unsigned       static  sheight,swidth;\r
 boolean static dothemask;\r
+unsigned       *shifttabletable[8];\r
 \r
 void CAL_ShiftSprite (unsigned segment,unsigned source,unsigned dest,\r
-       unsigned width, unsigned height, unsigned pixshift, boolean domask)\r
+       unsigned width, unsigned height, unsigned pixshift, boolean domask, global_game_variables_t *gvar)\r
 {\r
 \r
        sheight = height;               // because we are going to reassign bp\r
@@ -1484,6 +1485,7 @@ void CAL_ShiftSprite (unsigned segment,unsigned source,unsigned dest,
                mov     bp,[pixshift]\r
                shl     bp,1\r
                mov     bp,WORD PTR [shifttabletable+bp]        // bp holds pointer to shift table\r
+//             mov     bp,WORD PTR [gvar->video.shifttabletable+bp]    // bp holds pointer to shift table\r
 \r
                cmp     [ss:dothemask],0\r
                je              skipmask\r
@@ -1593,8 +1595,8 @@ dodatabyte:
 =\r
 ======================\r
 */\r
-/*++++\r
-void CAL_CacheSprite (int chunk, byte far *compressed)\r
+\r
+void CAL_CacheSprite (int chunk, byte far *compressed, global_game_variables_t *gvar)\r
 {\r
        int i;\r
        unsigned shiftstarts[5];\r
@@ -1602,11 +1604,12 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
        spritetabletype far *spr;\r
        spritetype _seg *dest;\r
 \r
-#if GRMODE == CGAGR\r
+#if 0\r
+//GRMODE == CGAGR\r
 //\r
 // CGA has no pel panning, so shifts are never needed\r
 //\r
-       spr = &spritetable[chunk-STARTSPRITES];\r
+       spr = &gvar->video.spritetable[chunk-STARTSPRITES];\r
        smallplane = spr->width*spr->height;\r
        MM_GetPtr (&grsegs[chunk],smallplane*2+MAXSHIFTS*6);\r
        if (mmerror)\r
@@ -1624,12 +1627,12 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
 #endif\r
 \r
 \r
-#if GRMODE == EGAGR\r
+//#if GRMODE == EGAGR\r
 \r
 //\r
 // calculate sizes\r
 //\r
-       spr = &spritetable[chunk-STARTSPRITES];\r
+       spr = &gvar->video.spritetable[chunk-STARTSPRITES];\r
        smallplane = spr->width*spr->height;\r
        bigplane = (spr->width+1)*spr->height;\r
 \r
@@ -1640,10 +1643,10 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
        shiftstarts[4] = shiftstarts[3] + bigplane*5;   // nothing ever put here\r
 \r
        expanded = shiftstarts[spr->shifts];\r
-       MM_GetPtr (&grsegs[chunk],expanded);\r
-       if (mmerror)\r
+       MM_GetPtr (MEMPTRCONV gvar->ca.grsegs[chunk],expanded, gvar);\r
+       if (gvar->mm.mmerror)\r
                return;\r
-       dest = (spritetype _seg *)grsegs[chunk];\r
+       dest = (spritetype _seg *)gvar->ca.grsegs[chunk];\r
 \r
 //\r
 // expand the unshifted shape\r
@@ -1677,8 +1680,8 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
                        dest->planesize[i] = bigplane;\r
                        dest->width[i] = spr->width+1;\r
                }\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[2],spr->width,spr->height,4,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[2],spr->width,spr->height,4,true,gvar);\r
                break;\r
 \r
        case    4:\r
@@ -1689,20 +1692,20 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
                dest->sourceoffset[1] = shiftstarts[1];\r
                dest->planesize[1] = bigplane;\r
                dest->width[1] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[1],spr->width,spr->height,2,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[1],spr->width,spr->height,2,true,gvar);\r
 \r
                dest->sourceoffset[2] = shiftstarts[2];\r
                dest->planesize[2] = bigplane;\r
                dest->width[2] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[2],spr->width,spr->height,4,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[2],spr->width,spr->height,4,true,gvar);\r
 \r
                dest->sourceoffset[3] = shiftstarts[3];\r
                dest->planesize[3] = bigplane;\r
                dest->width[3] = spr->width+1;\r
-               CAL_ShiftSprite ((unsigned)grsegs[chunk],dest->sourceoffset[0],\r
-                       dest->sourceoffset[3],spr->width,spr->height,6,true);\r
+               CAL_ShiftSprite ((unsigned)gvar->ca.grsegs[chunk],dest->sourceoffset[0],\r
+                       dest->sourceoffset[3],spr->width,spr->height,6,true,gvar);\r
 \r
                break;\r
 \r
@@ -1710,8 +1713,8 @@ void CAL_CacheSprite (int chunk, byte far *compressed)
                Quit (gvar, "CAL_CacheSprite: Bad shifts number!");\r
        }\r
 \r
-#endif\r
-}*/\r
+//#endif\r
+}\r
 \r
 //===========================================================================\r
 \r
index 28cc6d0116070161981de6009228f2aa9762eb5b..5a9173f7e807a914ec25576d171eb3200e7b66e2 100755 (executable)
@@ -252,10 +252,8 @@ static     char    buf[10];
 //#define SHOWPALVARIMODQUAD   ((spv.i)%QUADWH)\r
 #define SHOWPALVARIMOD                 ((spv.i)%TILEWH)\r
 #define SHOWPALVARIDIV                 ((spv.i)/TILEWH)\r
-#define SHOWPALVARIMODCOND             (!SHOWPALVARIMOD)\r
-#define SHOWPALVARIDIVCOND             (!SHOWPALVARIDIV)\r
-#define SHOWPALVARIMODIFCOND   if(SHOWPALVARIMODCOND && spv.i)\r
-#define SHOWPALVARIDIVIFCOND           if(SHOWPALVARIDIVCOND && spv.i)\r
+#define SHOWPALVARIMODIFCOND   if((!SHOWPALVARIMOD) && spv.i)\r
+#define SHOWPALVARIDIVIFCOND           if((!SHOWPALVARIDIV) && spv.i)\r
 //<PAL_SIZE/3 && spv.i)\r
 #define SHOWPALVARPALSIZELIMIT 255\r
 \r
index aa57e3955c0b58772fd5f0e2957ed4a094218620..c2b4b622ca1ef45acaf9477ac8dff43c6ccdbdcf 100755 (executable)
 #define        key_LSuper                      0x5b\r
 #define        key_RSuper                      0x5c\r
 #define        key_Menu                        0x5d\r
-#define        sc_LBrkt\r
-#define        sc_RBrkt\r
+#define        sc_LBrkt                0x1a    //      [\r
+#define        sc_RBrkt                0x1b    //      ]\r
+#define        sc_BackSlash    0x2b    //      |\r
+#define        sc_ForeSlash    0x35    //      / ?\r
 \r
 //     Stuff for the mouse\r
 #define        MReset          0\r
index 62c01aa44980ce3401d2f35c2639d8282667d3c1..c7c2b99d6b7895871d3329d27c8e011645798573 100755 (executable)
  */\r
 \r
 #include "src/lib/16_spri.h"\r
+#include <hw/vga/vrl1xdrc.h>\r
+//void draw_vrl1_vgax_modex_strip(unsigned char far *draw,unsigned char far *s);\r
+\r
+//===========================================================================\r
+\r
+//#define NEWVRSDRAWFUN\r
+void DrawVRL (unsigned int x,unsigned int y,struct vrl1_vgax_header *hdr,vrl1_vgax_offset_t *lineoffs/*array hdr->width long*/,unsigned char *data,unsigned int datasz) {\r
+       unsigned char far *draw;\r
+       unsigned int vram_offset = (y * vga_state.vga_draw_stride) + (x >> 2),sx;\r
+       unsigned int vramlimit = vga_state.vga_draw_stride_limit;\r
+       unsigned char vga_plane = (x & 3);\r
+       unsigned char *s;\r
+\r
+//     byte    outputvars[72][128];\r
+       word a;//,by,bxmax,bymax;\r
+\r
+       printf("DrawVRL:\n");\r
+\r
+       /* draw one by one */\r
+       for (sx=0;sx < hdr->width;sx++) {\r
+               draw = vga_state.vga_graphics_ram + vram_offset;\r
+               vga_write_sequencer(0x02/*map mask*/,1 << vga_plane);\r
+               s = data + lineoffs[sx];\r
+               draw_vrl1_vgax_modex_strip(draw,s);\r
+\r
+               if(!sx)\r
+               for(a=0;a<hdr->height;a++)//hdr->width*\r
+               {\r
+//                     if((*(s+a)==0x0) && (*(s+(a+1))==0x20) && (*(s+(a+2))==0xff)) a+=2;\r
+//                     if(*(s+a)<=13)\r
+//                             if (!(a%4) && a ) printf("\n");\r
+//                             sprintf(outputvars[sx][by], "%02x", *(s+a));\r
+                               printf("[%02u]  %02x\n", a, *(s+a));\r
+//                             by++;\r
+               }\r
+\r
+               /* end of a vertical strip. next line? */\r
+               if ((++vga_plane) == 4) {\r
+                       if (--vramlimit == 0) break;\r
+                       vram_offset++;\r
+                       vga_plane = 0;\r
+               }\r
+       }\r
+#if 0\r
+       bxmax = sx; bymax = by;\r
+       for(by=0;by<bymax;by++)\r
+       {\r
+               for(sx=0;sx<bxmax;sx++)\r
+               {\r
+//                     if (!(sx%hdr->width) && sx ) printf("\n ");\r
+                       printf("%02x ", outputvars[sx][by]);\r
+               }\r
+               printf("\n      ");\r
+       }\r
+#endif\r
+}\r
+\r
+//===========================================================================\r
 \r
 char* get_curr_anim_name(struct sprite *spri)\r
 {\r
@@ -188,7 +246,12 @@ void animate_spri(entity_t *enti, video_t *video)
 #ifndef SPRITE\r
        modexClearRegion(&video->page[0], x, y, 16, 32, 1);\r
 #else\r
-       draw_vrl1_vgax_modex(\r
+#ifndef NEWVRSDRAWFUN\r
+       draw_vrl1_vgax_modex\r
+#else\r
+       DrawVRL\r
+#endif\r
+       (\r
                x-rx,\r
                y-ry,\r
                enti->spri.sprite_vrl_cont.vrl_header,\r
index 0e29ebebc4a78778aedd12e9fbf49881077d380a..a170795a52e1b8ddc94c873a5b6a707f91903980 100755 (executable)
@@ -25,6 +25,8 @@
 #include "src/lib/16_vrs.h"\r
 #include "src/lib/scroll16.h"\r
 \r
+void DrawVRL (unsigned int x,unsigned int y,struct vrl1_vgax_header *hdr,vrl1_vgax_offset_t *lineoffs/*array hdr->width long*/,unsigned char *data,unsigned int datasz);\r
+\r
 //moved to 16_tdef.h\r
 // struct sprite\r
 // {\r
index 764bf51e7d5387e979d18d8dc36eaa5a50ad0eb2..ff73865751b57b0a984f94756819344b50a5bd76 100755 (executable)
@@ -89,6 +89,7 @@ typedef void _seg * memptr;
 \r
 #define _argv __argv\r
 #define _argc __argc\r
+#define EINVFMT EMFILE\r
 #define geninterrupt(n) int86(n,&CPURegs,&CPURegs);\r
 \r
 #define peekb(segm,ofs) (*(byte far*)MK_FP((segm),(ofs)))\r
index b56a6600b921f896880cf19f6da268ef9958bab5..b92facef9b250980b369eeb2f45ab753afb9b9b9 100755 (executable)
@@ -450,6 +450,128 @@ void DebugMemory_(global_game_variables_t *gvar, boolean q)
 //     if(q) MM_ShowMemory (gvar);\r
 }\r
 \r
+/*\r
+===================\r
+=\r
+= TestSprites\r
+=\r
+===================\r
+*/\r
+\r
+#if 0\r
+#define DISPWIDTH      110\r
+#define        TEXTWIDTH   40\r
+void TestSprites(void)\r
+{\r
+       int hx,hy,sprite,oldsprite,bottomy,topx,shift;\r
+       spritetabletype far *spr;\r
+       spritetype _seg *block;\r
+       unsigned        mem,scan;\r
+\r
+\r
+       VW_FixRefreshBuffer ();\r
+       US_CenterWindow (30,17);\r
+\r
+       US_CPrint ("Sprite Test");\r
+       US_CPrint ("-----------");\r
+\r
+       hy=PrintY;\r
+       hx=(PrintX+56)&(~7);\r
+       topx = hx+TEXTWIDTH;\r
+\r
+       US_Print ("Chunk:\nWidth:\nHeight:\nOrgx:\nOrgy:\nXl:\nYl:\nXh:\nYh:\n"\r
+                         "Shifts:\nMem:\n");\r
+\r
+       bottomy = PrintY;\r
+\r
+       sprite = STARTSPRITES;\r
+       shift = 0;\r
+\r
+       do\r
+       {\r
+               if (sprite>=STARTTILE8)\r
+                       sprite = STARTTILE8-1;\r
+               else if (sprite<STARTSPRITES)\r
+                       sprite = STARTSPRITES;\r
+\r
+               spr = &spritetable[sprite-STARTSPRITES];\r
+               block = (spritetype _seg *)grsegs[sprite];\r
+\r
+               VWB_Bar (hx,hy,TEXTWIDTH,bottomy-hy,WHITE);\r
+\r
+               PrintX=hx;\r
+               PrintY=hy;\r
+               US_PrintUnsigned (sprite);US_Print ("\n");PrintX=hx;\r
+               US_PrintUnsigned (spr->width);US_Print ("\n");PrintX=hx;\r
+               US_PrintUnsigned (spr->height);US_Print ("\n");PrintX=hx;\r
+               US_PrintSigned (spr->orgx);US_Print ("\n");PrintX=hx;\r
+               US_PrintSigned (spr->orgy);US_Print ("\n");PrintX=hx;\r
+               US_PrintSigned (spr->xl);US_Print ("\n");PrintX=hx;\r
+               US_PrintSigned (spr->yl);US_Print ("\n");PrintX=hx;\r
+               US_PrintSigned (spr->xh);US_Print ("\n");PrintX=hx;\r
+               US_PrintSigned (spr->yh);US_Print ("\n");PrintX=hx;\r
+               US_PrintSigned (spr->shifts);US_Print ("\n");PrintX=hx;\r
+               if (!block)\r
+               {\r
+                       US_Print ("-----");\r
+               }\r
+               else\r
+               {\r
+                       mem = block->sourceoffset[3]+5*block->planesize[3];\r
+                       mem = (mem+15)&(~15);           // round to paragraphs\r
+                       US_PrintUnsigned (mem);\r
+               }\r
+\r
+               oldsprite = sprite;\r
+               do\r
+               {\r
+               //\r
+               // draw the current shift, then wait for key\r
+               //\r
+                       VWB_Bar(topx,hy,DISPWIDTH,bottomy-hy,WHITE);\r
+                       if (block)\r
+                       {\r
+                               PrintX = topx;\r
+                               PrintY = hy;\r
+                               US_Print ("Shift:");\r
+                               US_PrintUnsigned (shift);\r
+                               US_Print ("\n");\r
+                               VWB_DrawSprite (topx+16+shift*2,PrintY,sprite);\r
+                       }\r
+\r
+                       VW_UpdateScreen();\r
+\r
+                       scan = IN_WaitForKey ();\r
+\r
+                       switch (scan)\r
+                       {\r
+                       case sc_UpArrow:\r
+                               sprite++;\r
+                               break;\r
+                       case sc_DownArrow:\r
+                               sprite--;\r
+                               break;\r
+                       case sc_LeftArrow:\r
+                               if (--shift == -1)\r
+                                       shift = 3;\r
+                               break;\r
+                       case sc_RightArrow:\r
+                               if (++shift == 4)\r
+                                       shift = 0;\r
+                               break;\r
+                       case sc_Escape:\r
+                               return;\r
+                       }\r
+\r
+               } while (sprite == oldsprite);\r
+\r
+  } while (1);\r
+\r
+\r
+}\r
+\r
+#endif\r
+\r
 /*\r
 ==========================\r
 =\r
index ffc4ae6f136988396310a5131cc10386c694624a..b1e68e10f379c53c32ac9b3fabbf2e9a456ed9c1 100755 (executable)
@@ -360,9 +360,29 @@ typedef struct
 } kurokku_t;\r
 \r
 //===================================//\r
-#define PALSIZE        768\r
-#define NUMCHUNKS      416     //keen\r
-#define MAXSCANLINES   240                     // size of ylookup table\r
+#define PALSIZE                        768     //vga\r
+#define NUMCHUNKS              416     //keen\r
+#define MAXSCANLINES   240     // size of ylookup table\r
+\r
+#define MAXSHIFTS              4\r
+#define STARTSPRITES   0       //temp\r
+\r
+typedef struct\r
+{\r
+       int     width,\r
+               height,\r
+               orgx,orgy,\r
+               xl,yl,xh,yh,\r
+               shifts;\r
+} spritetabletype;\r
+\r
+typedef        struct\r
+{\r
+       unsigned        sourceoffset[MAXSHIFTS];\r
+       unsigned        planesize[MAXSHIFTS];\r
+       unsigned        width[MAXSHIFTS];\r
+       byte            data[];\r
+} spritetype;          // the memptr for each sprite points to this\r
 \r
 typedef struct\r
 {\r
@@ -434,6 +454,8 @@ typedef struct
        boolean fastpalette;\r
        byte            far     palette1[256][3],far palette2[256][3];\r
        pictabletype    _seg *pictable;\r
+       spritetabletype _seg *spritetable;\r
+       unsigned        *shifttabletable[8];\r
 } video_t;\r
 \r
 //from scroll16\r
@@ -751,7 +773,10 @@ typedef struct {
        vidsw_t vsw;\r
 } sw_t;*/\r
 \r
-\r
+#ifdef __WATCOMC__\r
+extern char global_temp_status_text[512];\r
+extern char global_temp_status_text2[512];\r
+#endif\r
 \r
 typedef struct glob_game_vars\r
 {\r
@@ -768,9 +793,4 @@ typedef struct glob_game_vars
        boolean DLStarted;\r
 } global_game_variables_t;\r
 \r
-#ifdef __WATCOMC__\r
-extern char global_temp_status_text[512];\r
-extern char global_temp_status_text2[512];\r
-#define EINVFMT EMFILE\r
-#endif\r
 #endif /* _TYPEDEFSTRUCT_H_ */\r
index 6e733c585d4ac3e0c73ba7adbd81d5910a91e71f..834754dddc2928f7b548465ebee63f6fed20ea13 100755 (executable)
  */\r
 #include "src/lib/16_vrs.h"\r
 \r
+#define VRS_USECAMMPM\r
+\r
 void VRS_ReadVRS(char *filename, entity_t *enti, global_game_variables_t *gvar){       VRS_OpenVRS(filename, enti, 1, gvar);   }\r
 void VRS_LoadVRS(char *filename, entity_t *enti, global_game_variables_t *gvar){       VRS_OpenVRS(filename, enti, 0, gvar);   }\r
 void VRS_OpenVRS(char *filename, entity_t *enti, boolean rlsw, global_game_variables_t *gvar)\r
 {\r
+#ifndef VRS_USECAMMPM\r
        vrl1_vgax_offset_t **vrl_line_offsets;\r
+#endif\r
        uint16_t far *vrl_id_iter;\r
        uint32_t far *vrl_headers_offsets;\r
        struct vrl1_vgax_header far *curr_vrl;\r
@@ -53,9 +57,12 @@ void VRS_OpenVRS(char *filename, entity_t *enti, boolean rlsw, global_game_varia
        }\r
 \r
        // Allocate memory for vrl line offsets table\r
-//     MM_GetPtr(MEMPTRCONV gvar->ca.grsegs[0], sizeof(vrl1_vgax_offset_t *)*num_of_vrl, gvar);\r
-//     enti->spri.spritesheet.vrl_line_offsets = (vrl1_vgax_offset_t **)gvar->ca.grsegs[0];\r
+#ifndef VRS_USECAMMPM\r
        vrl_line_offsets = malloc(sizeof(vrl1_vgax_offset_t *)*num_of_vrl);//TODO: USE MM_ CA_ AND PM_\r
+#else\r
+       MM_GetPtr(MEMPTRCONV gvar->ca.grsegs[0], sizeof(vrl1_vgax_offset_t *)*num_of_vrl, gvar);\r
+       enti->spri.spritesheet.vrl_line_offsets = (vrl1_vgax_offset_t **)gvar->ca.grsegs[0];\r
+#endif\r
 \r
        vrl_headers_offsets = (uint32_t far *)(enti->spri.spritesheet.buffer + enti->spri.spritesheet.vrs_hdr->offset_table[VRS_HEADER_OFFSET_VRS_LIST]);\r
        // Calculate line offsets for each vrl\r
@@ -70,10 +77,85 @@ void VRS_OpenVRS(char *filename, entity_t *enti, boolean rlsw, global_game_varia
                else{\r
                        vrl_size = enti->spri.spritesheet.vrs_hdr->offset_table[VRS_HEADER_OFFSET_SPRITE_ID_LIST] - vrl_headers_offsets[i] - sizeof(struct vrl1_vgax_header);\r
                }\r
+#ifndef VRS_USECAMMPM\r
                vrl_line_offsets[i] = vrl1_vgax_genlineoffsets(curr_vrl, (byte *)curr_vrl + sizeof(struct vrl1_vgax_header), vrl_size);\r
-//             enti->spri.spritesheet.vrl_line_offsets[i] = vrl1_vgax_genlineoffsets(curr_vrl, (byte *)curr_vrl + sizeof(struct vrl1_vgax_header), vrl_size);\r
+#else\r
+               enti->spri.spritesheet.vrl_line_offsets[i] = vrl1_vgax_genlineoffsets(curr_vrl, (byte *)curr_vrl + sizeof(struct vrl1_vgax_header), vrl_size);\r
+#endif\r
        }\r
+#ifndef VRS_USECAMMPM\r
        enti->spri.spritesheet.vrl_line_offsets = vrl_line_offsets;\r
+#endif\r
+}\r
+\r
+void VRS_ReadVRL(char *filename, entity_t *enti, global_game_variables_t *gvar){       VRS_OpenVRL(filename, enti, 1, gvar);   }\r
+void VRS_LoadVRL(char *filename, entity_t *enti, global_game_variables_t *gvar){       VRS_OpenVRL(filename, enti, 0, gvar);   }\r
+void VRS_OpenVRL(char *filename, entity_t *enti, boolean rlsw, global_game_variables_t *gvar)\r
+{\r
+       vrl1_vgax_offset_t *vrl_line_offsets;\r
+//     struct vrl1_vgax_header *vrl_header;\r
+//     uint16_t far *vrl_id_iter;\r
+//     uint32_t far *vrl_headers_offsets;\r
+//     struct vrl1_vgax_header far *curr_vrl;\r
+       uint32_t vrl_size;\r
+//     int num_of_vrl,i;\r
+       int size=0;\r
+\r
+       switch(rlsw)\r
+       {\r
+               case 1:\r
+                       CA_ReadFile(filename, &gvar->ca.spribuff, gvar);\r
+               break;\r
+               case 0:\r
+                       CA_LoadFile(filename, &gvar->ca.spribuff, gvar);\r
+               break;\r
+       }\r
+\r
+       // Insert sanity cheks later\r
+       enti->spri.sprite_vrl_cont.buffer = gvar->ca.spribuff;\r
+       enti->spri.sprite_vrl_cont.data_size = size - sizeof(struct vrl1_vgax_header);\r
+\r
+       vrl_size = enti->spri.sprite_vrl_cont.buffer - enti->spri.sprite_vrl_cont.buffer - sizeof(struct vrl1_vgax_header);\r
+//     vrl_header = (struct vrl1_vgax_header far *)(enti->spri.sprite_vrl_cont.buffer + enti->spri.sprite_vrl_cont.buffer);\r
+#if 0\r
+       num_of_vrl = 0;\r
+       while(vrl_id_iter[num_of_vrl]){\r
+               num_of_vrl++;\r
+       }\r
+\r
+       // Allocate memory for vrl line offsets table\r
+//#ifndef VRS_USECAMMPM\r
+       vrl_line_offsets = malloc(sizeof(vrl1_vgax_offset_t *)*num_of_vrl);//TODO: USE MM_ CA_ AND PM_\r
+//#else\r
+       MM_GetPtr(MEMPTRCONV gvar->ca.grsegs[0], sizeof(vrl1_vgax_offset_t *)*num_of_vrl, gvar);\r
+       enti->spri.sprite_vrl_cont.vrl_line_offsets = (vrl1_vgax_offset_t **)gvar->ca.grsegs[0];\r
+//#endif\r
+\r
+       vrl_headers_offsets = (uint32_t far *)(enti->spri.sprite_vrl_cont.buffer + enti->spri.sprite_vrl_cont.vrs_hdr->offset_table[VRS_HEADER_OFFSET_VRS_LIST]);\r
+       // Calculate line offsets for each vrl\r
+       for(i = 0; i < num_of_vrl; i++){\r
+               curr_vrl = (struct vrl1_vgax_header far *)(enti->spri.sprite_vrl_cont.buffer + vrl_headers_offsets[i]);\r
+\r
+               // Calc. vrl size as (next_offset - curr_offset)\r
+               if (i != num_of_vrl - 1){\r
+                       vrl_size = vrl_headers_offsets[i+1] - vrl_headers_offsets[i] - sizeof(struct vrl1_vgax_header);\r
+               }\r
+               // If it's the last vrl, size is (next_vrs_struct_offset - curr_offset)\r
+               else{\r
+                       vrl_size = enti->spri.sprite_vrl_cont.vrs_hdr->offset_table[VRS_HEADER_OFFSET_SPRITE_ID_LIST] - vrl_headers_offsets[i] - sizeof(struct vrl1_vgax_header);\r
+               }\r
+#ifndef VRS_USECAMMPM\r
+               vrl_line_offsets = vrl1_vgax_genlineoffsets(curr_vrl, (byte *)curr_vrl + sizeof(struct vrl1_vgax_header), vrl_size);\r
+#else\r
+               enti->spri.sprite_vrl_cont.vrl_line_offsets[i] = vrl1_vgax_genlineoffsets(curr_vrl, (byte *)curr_vrl + sizeof(struct vrl1_vgax_header), vrl_size);\r
+#endif\r
+       }\r
+#endif\r
+\r
+               vrl_line_offsets = vrl1_vgax_genlineoffsets(enti->spri.sprite_vrl_cont.vrl_header,      (byte *)enti->spri.sprite_vrl_cont.buffer + sizeof(struct vrl1_vgax_header),    vrl_size);\r
+#ifndef VRS_USECAMMPM\r
+       enti->spri.sprite_vrl_cont.vrl_line_offsets = vrl_line_offsets;\r
+#endif\r
 }\r
 \r
 // Seek and return a specified .vrl blob from .vrs blob in far memory\r
index 07e75321f767d7a95795474ee4f1ae6341a2b58d..eae13673e04709473537f21e6625fa0805d201ba 100755 (executable)
@@ -64,6 +64,9 @@ struct vrl_container{
 void VRS_ReadVRS(char *filename, entity_t *enti, global_game_variables_t *gvar);\r
 void VRS_LoadVRS(char *filename, entity_t *enti, global_game_variables_t *gvar);\r
 void VRS_OpenVRS(char *filename, entity_t *enti, boolean rlsw, global_game_variables_t *gvar);\r
+void VRS_ReadVRL(char *filename, entity_t *enti, global_game_variables_t *gvar);\r
+void VRS_LoadVRL(char *filename, entity_t *enti, global_game_variables_t *gvar);\r
+void VRS_OpenVRL(char *filename, entity_t *enti, boolean rlsw, global_game_variables_t *gvar);\r
 \r
 /* Seek and return a specified .vrl blob from .vrs blob in memory\r
 * In:\r
index cea177952143b533421527c59e0c2945e720a43b..e31ff558c51125bcf315ccce367c9905bea395db 100755 (executable)
@@ -27,7 +27,6 @@
 #define FADE\r
 //#define NOMAPLOAD\r
 \r
-//map_view_t mv[4];\r
 static map_t map;\r
 float t;\r
 \r
@@ -47,21 +46,26 @@ memptr pal;
 #define FILENAME_1P    "data/spri/chikyuu.pal"\r
 #define FILENAME_2     "data/spri/me.vrs"\r
 #define FILENAME_2P    "data/spri/me.pal"\r
+#define FILENAME_3     "data/spri/chistnd.vrl"\r
 \r
 void main(int argc, char *argv[])\r
 {\r
        static global_game_variables_t gvar;\r
        struct glob_game_vars *ggvv;\r
-       char bakapee1[64] = FILENAME_1;\r
-       char bakapee1p[64] = FILENAME_1P;\r
+\r
+//     static entity_t enti;\r
+\r
+       char bakapee[64] = FILENAME_1;\r
+       char bakapeep[64] = FILENAME_1P;\r
+       char bakapee3[64] = FILENAME_3;\r
 \r
        Startup16(&gvar);\r
 \r
        ggvv=&gvar;\r
 \r
        if (argc >= 2) {\r
-               if(argv[1]){ strcpy(bakapee1, argv[1]);\r
-               if(argv[2]) strcpy(bakapee1p, argv[2]); }\r
+               if(argv[1]){ strcpy(bakapee, argv[1]);\r
+               if(argv[2]) strcpy(bakapeep, argv[2]); }\r
        }\r
 \r
        // OK, this one takes hellova time and needs to be done in farmalloc or MM_...\r
@@ -81,7 +85,8 @@ void main(int argc, char *argv[])
        //initMap(&map);\r
 #endif\r
        // data\r
-       VRS_LoadVRS(bakapee1, &gvar.player[0].enti, &gvar);\r
+       VRS_LoadVRS(bakapee, &gvar.player[0].enti, &gvar);\r
+//     VRS_LoadVRS(bakapee3, &enti, &gvar);\r
 \r
        // input!\r
        IN_Default(0, &gvar.player[0],ctrl_Keyboard1, &gvar);\r
@@ -104,7 +109,7 @@ void main(int argc, char *argv[])
        //printf("1:    %d\n", paloffset);\r
        map.tiles->data->offset=(paloffset/3);\r
        modexPalUpdate(map.tiles->data, &paloffset, 0, 0);*/\r
-       VL_LoadPalFile(bakapee1p, &gvar.video.palette, &gvar);\r
+       VL_LoadPalFile(bakapeep, &gvar.video.palette, &gvar);\r
        //VL_LoadPalFile("data/default.pal", &gvar.video.palette);\r
 \r
 #ifdef FADE\r
@@ -121,7 +126,7 @@ void main(int argc, char *argv[])
        modexFadeOn(4, &gvar.video.palette);\r
 #endif\r
 \r
-//     IN_StartAck (&gvar);    MM_ShowMemory(&gvar);   while (!IN_CheckAck (&gvar)){}\r
+//0000 IN_StartAck (&gvar);    MM_ShowMemory(&gvar);   while (!IN_CheckAck (&gvar)){}\r
 #ifdef FADE\r
        modexPalBlack();        //so player will not see loadings~\r
 #endif\r
@@ -191,29 +196,43 @@ void main(int argc, char *argv[])
 \r
                TAIL_FUNCTIONKEYFUNCTIONS\r
                TAIL_FUNCTIONKEYDRAWJUNK\r
-//             if(gvar.in.inst->Keyboard[sc_L]){ modexClearRegion(&gvar.video.page[0], gvar.player[0].enti.x, gvar.player[0].enti.y, 16, 16, 1); }\r
-               if(gvar.in.inst->Keyboard[sc_L]){ ShowPalVal (&gvar);                                                           IN_UserInput(1, &gvar); }\r
+               if(gvar.in.inst->Keyboard[sc_L]){ modexClearRegion(&gvar.video.page[0], gvar.player[0].enti.x, gvar.player[0].enti.y, 16, 16, 1); }\r
+               if(gvar.in.inst->Keyboard[sc_LBrkt]){ ShowPalVal (&gvar);                                                               IN_UserInput(1, &gvar); }\r
+\r
+//===============================================================================\r
+\r
+               if(gvar.in.inst->Keyboard[sc_BackSlash]){\r
+                       VRS_ReadVRL(bakapee3, &gvar.player[0].enti, &gvar);\r
+                       DrawVRL(\r
+                               gvar.player[0].enti.x,\r
+                               gvar.player[0].enti.y,\r
+                               gvar.player[0].enti.spri.sprite_vrl_cont.vrl_header,\r
+                               gvar.player[0].enti.spri.sprite_vrl_cont.line_offsets,\r
+                               gvar.player[0].enti.spri.sprite_vrl_cont.buffer + sizeof(struct vrl1_vgax_header),\r
+                               gvar.player[0].enti.spri.sprite_vrl_cont.data_size\r
+                       );      while (!IN_CheckAck (&gvar)){}\r
+                       VRS_ReadVRS(bakapee, &gvar.player[0].enti, &gvar);\r
+               IN_UserInput(1, &gvar); }\r
+\r
+//===============================================================================\r
+\r
                if(gvar.in.inst->Keyboard[sc_J] || gvar.in.inst->Keyboard[sc_K])\r
                {\r
                        if(gvar.in.inst->Keyboard[sc_J])\r
                        {\r
-//                             bakapee1=FILENAME_1;\r
-//                             bakapee1p=FILENAME_1P;\r
-                               strcpy(bakapee1, FILENAME_1);\r
-                               strcpy(bakapee1p, FILENAME_1P);\r
+                               strcpy(bakapee, FILENAME_1);\r
+                               strcpy(bakapeep, FILENAME_1P);\r
                                gvar.player[0].enti.overdraww=0;\r
                        }\r
                        if(gvar.in.inst->Keyboard[sc_K])\r
                        {\r
-//                             bakapee1=FILENAME_2;\r
-//                             bakapee1p=FILENAME_2P;\r
-                               strcpy(bakapee1, FILENAME_2);\r
-                               strcpy(bakapee1p, FILENAME_2P);\r
+                               strcpy(bakapee, FILENAME_2);\r
+                               strcpy(bakapeep, FILENAME_2P);\r
                                gvar.player[0].enti.overdraww=2;\r
                        }\r
-                       //read_vrs(&gvar, bakapee1, gvar.player[0].enti.spri->spritesheet);\r
-                       VRS_ReadVRS(bakapee1, &gvar.player[0].enti, &gvar);\r
-                       VL_LoadPalFile(bakapee1p, &gvar.video.palette, &gvar);\r
+                       //read_vrs(&gvar, bakapee, gvar.player[0].enti.spri->spritesheet);\r
+                       VRS_ReadVRS(bakapee, &gvar.player[0].enti, &gvar);\r
+                       VL_LoadPalFile(bakapeep, &gvar.video.palette, &gvar);\r
                }//JK\r
 #ifdef FADE\r
                if(gvar.in.inst->Keyboard[10]){ modexPalOverscan(rand()%56); modexPalUpdate(gvar.video.dpal); IN_UserInput(1, &gvar); }\r