+struct glob_game_vars *ggvv;\r
+//static word far* clockw= (word far*) 0x046C; /* 18.2hz clock */\r
+char global_temp_status_text[512];\r
+char global_temp_status_text2[512];\r
+\r
+//==========================================================================\r
+\r
+/*\r
+===================\r
+=\r
+= FizzleFade\r
+=\r
+= returns true if aborted\r
+=\r
+===================\r
+*/\r
+\r
+//extern ControlInfo c;\r
+#define PIXPOSX gvar->video.page[0].sw/2\r
+#define PIXPOSY gvar->video.page[0].sh/2\r
+\r
+boolean baka_FizzleFade (page_t *source, page_t *dest, unsigned frames, boolean abortable, global_game_variables_t *gvar)\r
+{\r
+ dword p,pixperframe;\r
+ unsigned drawofs,pagedelta;\r
+ byte mask,maskb[8] = {1,2,4,8};\r
+ unsigned x,y,frame ,esorig;\r
+ dword rndval;\r
+// word TimeCount = *clockw;\r
+ word screenseg = SCREENSEG;\r
+\r
+ pagedelta = (word)dest->sw*dest->sh;//(word)(source->data - dest->data);//(dest->data - source->data)\r
+ rndval = 1; esorig = 0;\r
+ x = y = dest->dx;\r
+ pixperframe = 76800/(dword)frames;\r
+\r
+// IN_StartAck ();\r
+\r
+// VL_ShowPage(dest, 1, 0);\r
+// VL_ShowPage(source, 1, 0);\r
+\r
+// modexClearRegion(dest, 0, 0, (dest->width), (dest->height), 12);\r
+ modexClearRegion(source, 0, 0, (source->width), (source->height), 64);\r
+\r
+ __asm {\r
+ mov [esorig],es\r
+ }\r
+// TimeCount=\r
+ frame=0;\r
+ do // while (1)\r
+ {\r
+sprintf(global_temp_status_text, "%u", frame);\r
+modexprint(dest, PIXPOSX, PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text);\r
+ if (abortable && kbhit())//IN_CheckAck () )\r
+ return true;\r
+\r
+ __asm {\r
+ mov es,[screenseg]\r
+ }\r
+\r
+ for (p=0;p<pixperframe;p++)\r
+ {\r
+ __asm {\r
+ //\r
+ // seperate random value into x/y pair\r
+ //\r
+ mov ax,[WORD PTR rndval]\r
+ mov dx,[WORD PTR rndval+2]\r
+ mov bx,ax\r
+ dec bl\r
+ mov [BYTE PTR y],bl // low 8 bits - 1 = y xoordinate\r
+ mov bx,ax\r
+ mov cx,dx\r
+ mov [BYTE PTR x],ah // next 9 bits = x xoordinate\r
+ mov [BYTE PTR x+1],dl\r
+ //\r
+ // advance to next random element\r
+ //\r
+ shr dx,1\r
+ rcr ax,1\r
+ jnc noxor\r
+ xor dx,0x0001\r
+ xor ax,0x2000\r
+#ifdef __BORLANDC__\r
+ }\r
+#endif\r
+noxor:\r
+#ifdef __BORLANDC__\r
+ __asm {\r
+#endif\r
+ mov [WORD PTR rndval],ax\r
+ mov [WORD PTR rndval+2],dx\r
+ }\r
+\r
+ if (x>dest->sw || y>dest->sh)\r
+ continue;\r
+ drawofs = (word)(source->data)+gvar->video.ofs.ylookup[y] + (x>>2);\r
+sprintf(global_temp_status_text, "draw - %Fp", drawofs);\r
+modexprint(dest, PIXPOSX, 16+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text);\r
+sprintf(global_temp_status_text, "pdet - %Fp", pagedelta);\r
+modexprint(dest, PIXPOSX, 24+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text);\r
+sprintf(global_temp_status_text, "srce - %Fp", source->data);\r
+modexprint(dest, PIXPOSX, 32+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text);\r
+sprintf(global_temp_status_text, "dest - %Fp", dest->data);\r
+modexprint(dest, PIXPOSX, 40+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text);\r
+\r
+ //\r
+ // copy one pixel\r
+ //\r
+ mask = x&3;\r
+ VGAREADMAP(mask);\r
+ mask = maskb[mask];\r
+ VGAMAPMASK(mask);\r
+\r
+ __asm {\r
+ mov di,[drawofs]\r
+ mov al,[es:di]\r
+ add di,[pagedelta]\r
+ mov [es:di],al\r
+ }\r
+\r
+ if (rndval == 1) // entire sequence has been completed\r
+ return false;\r
+ }\r
+ frame++;\r
+//-- while (TimeCount<frame){}//; // don't go too fast\r
+ } while (1);\r
+ __asm {\r
+ mov es,[esorig]\r
+ }\r
+ return false;\r
+}\r
+#if 0\r
+boolean baka_FizzleFade (unsigned source, unsigned dest, unsigned width,unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar)\r
+{\r
+ int pixperframe;\r
+ unsigned drawofs,pagedelta;\r
+ byte mask,maskb[8] = {1,2,4,8};\r
+ unsigned x,y,p,frame;\r
+ dword rndval;\r
+ word TimeCount = *clockw;\r
+ word screenseg = SCREENSEG;\r
+\r
+ pagedelta = dest-source;\r
+ rndval = 1;\r
+ x = y = 0;\r
+ pixperframe = 64000/frames;\r
+\r
+ VGAmodeX(0, 0, gvar);\r
+// IN_StartAck ();\r
+// VL_ShowPage((page_t *)dest, 1, 0);\r
+ VGAmodeX(1, 0, gvar);\r
+\r
+ TimeCount=frame=0;\r
+ do // while (1)\r
+ {\r
+ if (abortable && !kbhit())//IN_CheckAck () )\r
+ return true;\r
+\r
+ __asm {\r
+ mov es,[screenseg]\r
+ }\r
+\r
+ for (p=0;p<pixperframe;p++)\r
+ {\r
+ __asm {\r
+ //\r
+ // seperate random value into x/y pair\r
+ //\r
+ mov ax,[WORD PTR rndval]\r
+ mov dx,[WORD PTR rndval+2]\r
+ mov bx,ax\r
+ dec bl\r
+ mov [BYTE PTR y],bl // low 8 bits - 1 = y xoordinate\r
+ mov bx,ax\r
+ mov cx,dx\r
+ mov [BYTE PTR x],ah // next 9 bits = x xoordinate\r
+ mov [BYTE PTR x+1],dl\r
+ //\r
+ // advance to next random element\r
+ //\r
+ shr dx,1\r
+ rcr ax,1\r
+ jnc noxor\r
+ xor dx,0x0001\r
+ xor ax,0x2000\r
+noxor:\r
+ mov [WORD PTR rndval],ax\r
+ mov [WORD PTR rndval+2],dx\r
+ }\r
+\r
+ if (x>width || y>height)\r
+ continue;\r
+ drawofs = source+gvar->video.ofs.ylookup[y] + (x>>2);\r
+\r
+ //\r
+ // copy one pixel\r
+ //\r
+ mask = x&3;\r
+ VGAREADMAP(mask);\r
+ mask = maskb[mask];\r
+ VGAMAPMASK(mask);\r
+\r
+ __asm {\r
+ mov di,[drawofs]\r
+ mov al,[es:di]\r
+ add di,[pagedelta]\r
+ mov [es:di],al\r
+ }\r
+\r
+ if (rndval == 1) // entire sequence has been completed\r
+ return false;\r
+ }\r
+ frame++;\r
+// while (TimeCount<frame){}//; // don't go too fast\r
+ } while (1);\r
+ return false;\r
+}\r
+#endif\r