"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
--- /dev/null
+// 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
--- /dev/null
+# 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
//===========================================================================\r
\r
//????#if GRMODE == EGAGR\r
-#if 0\r
+#if 1\r
\r
/*\r
======================\r
\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
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
=\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
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
#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
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
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
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
Quit (gvar, "CAL_CacheSprite: Bad shifts number!");\r
}\r
\r
-#endif\r
-}*/\r
+//#endif\r
+}\r
\r
//===========================================================================\r
\r
//#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
#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
*/\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
#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
#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
\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
// 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
} 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
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
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
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
*/\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
}\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
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
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
#define FADE\r
//#define NOMAPLOAD\r
\r
-//map_view_t mv[4];\r
static map_t map;\r
float t;\r
\r
#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
//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
//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
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
\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