]> 4ch.mooo.com Git - 16.git/blobdiff - src/lib/bakapee.c
p16 is being worked on a bunch by me wwww [16_ca needs huge amounts of work and I...
[16.git] / src / lib / bakapee.c
index 3b45f105c1a5ceeccfe40a360b4b95a226263899..d9fd1e5c3226e0237dfbec27b0cb4eba6a9b07e9 100755 (executable)
@@ -1,5 +1,5 @@
 /* Project 16 Source Code~\r
- * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
+ * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
  *\r
  * This file is part of Project 16.\r
  *\r
 \r
 #include "src/lib/bakapee.h"\r
 \r
+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
+/*\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
+#ifdef BAKAFIZZUNSIGNED\r
+boolean baka_FizzleFade (unsigned source, unsigned dest, unsigned width, unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar)\r
+{\r
+       word            p,pixperframe;\r
+       unsigned        drawofs,pagedelta;\r
+       byte            mask,maskb[8] = {1,2,4,8};\r
+       unsigned        x,y,frame               ,esorig,q;\r
+       dword           rndval;\r
+       word screenseg = SCREENSEG;\r
+\r
+       pagedelta = dest-source;\r
+       rndval = 1;     esorig = 0; q = 16;\r
+       x = y = 0;\r
+       pixperframe = /*64000*/76800/(dword)frames;\r
+\r
+//     IN_StartAck ();\r
+\r
+//     VL_ShowPage(&(gvar->video.page[0]), 1, 0);\r
+//     VL_ShowPage(&(gvar->video.page[1]), 1, 0);\r
+\r
+//     modexClearRegion(&(gvar->video.page[0]), 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 0);\r
+//     modexClearRegion(&(gvar->video.page[1]), 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 15);\r
+//     VL_SetLineWidth(44, gvar);\r
+\r
+       __asm {\r
+               mov     [esorig],es\r
+       }\r
+//     TimeCount=\r
+       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
+#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>destpage->width || y>destpage->height)\r
+//                     if (x<destpage->sw || y<destpage->sh)\r
+                       if ((x>width || y>height) && (x<width*2 && y<height*2))\r
+                               continue;\r
+                       //drawofs = source+(gvar->video.ofs.ylookup[y]) + (x>>2);\r
+                       //drawofs = source+((y+1)*gvar->video.page[0].stridew) + (x>>2);\r
+                       drawofs = source+(y*gvar->video.page[0].stridew) + (x>>2);\r
+/*\r
+sprintf(global_temp_status_text, "draw - %Fp", drawofs);\r
+modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "pdet - %Fp", pagedelta);\r
+modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "srce - %Fp", source);\r
+modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "dest - %Fp", dest);\r
+modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q=16;\r
+*/\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
+\r
+#else\r
+boolean baka_FizzleFade (page_t *sourcepage, page_t *destpage, unsigned width, unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar)\r
+{\r
+       word            p,pixperframe;\r
+       unsigned        drawofs,pagedelta;\r
+//     byte            mask,maskb[8] = {1,2,4,8};\r
+       unsigned        x,y,frame               ,esorig,q;\r
+       dword           rndval;\r
+       unsigned        source,dest;\r
+       word screenseg = SCREENSEG;\r
+       source = ((word)sourcepage->data); dest = ((word)destpage->data);\r
+\r
+       pagedelta = dest-source;\r
+       rndval = 1;     esorig = 0; q = 16;\r
+       x = y = 0;//destpage->dx;\r
+       pixperframe = 76800/(dword)frames;\r
+\r
+//     IN_StartAck ();\r
+\r
+//     VL_ShowPage(&(gvar->video.page[0]), 1, 0);\r
+//     VL_ShowPage(&(gvar->video.page[1]), 1, 0);\r
+\r
+//     modexClearRegion(&(gvar->video.page[0]), 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 0);\r
+//     modexClearRegion(&(gvar->video.page[1]), 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 15);\r
+//     VL_SetLineWidth(80, gvar);\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(destpage, 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>destpage->width || y>destpage->height)\r
+//                     if (x<destpage->sw || y<destpage->sh)\r
+                       if ((x>width || y>height) && (x<width*2 && y<height*2))\r
+                               continue;\r
+                       drawofs = source+(gvar->video.ofs.ylookup[y]) + (x>>2);\r
+sprintf(global_temp_status_text, "draw - %Fp", drawofs);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "pdet - %Fp", pagedelta);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "srcp - %Fp", sourcepage->data);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "desp - %Fp", destpage->data);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "srce - %Fp", source);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "dest - %Fp", dest);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q=16;\r
+\r
+                       //\r
+                       // copy one pixel\r
+                       //\r
+/*\r
+                       mask = x&3;\r
+                       VGAREADMAP(mask);\r
+                       mask = maskb[mask];\r
+                       VGAMAPMASK(mask);\r
+/*/\r
+//                     modexputPixel(&(gvar->video.page[0]), x, y, rand());\r
+//                     VL_Plot (x, y, 15, &(gvar->video.ofs));\r
+                       modexCopyPageRegion(destpage, sourcepage, x, y, x, y, 4, 4);\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
+#endif\r
+\r
+#if 0\r
+boolean baka_FizzleFade (page_t *sourcepage, page_t *destpage, unsigned width, unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar)\r
+{\r
+       word            p,pixperframe;\r
+       unsigned        drawofs,pagedelta;\r
+       byte            mask,maskb[8] = {1,2,4,8};\r
+       unsigned        x,y,frame               ,esorig,q;\r
+       dword           rndval;\r
+       unsigned        source,dest;\r
+//     word TimeCount = *clockw;\r
+       word screenseg = SCREENSEG;\r
+       source = ((word)sourcepage->data); dest = ((word)destpage->data);\r
+\r
+       pagedelta = dest-source;//(word)(source->data - dest->data);//(dest->data - source->data)\r
+       rndval = 1;     esorig = 0; q = 16;\r
+       x = y = destpage->dx;\r
+       pixperframe = /*76800*/64000/(dword)frames;\r
+\r
+//     IN_StartAck ();\r
+\r
+//     VL_ShowPage(destpage, 1, 0);\r
+//     VL_ShowPage(sourcepage, 1, 0);\r
+\r
+//     modexClearRegion(destpage, 0, 0, (destpage->width), (destpage->height), 12);\r
+       modexClearRegion(sourcepage, 0, 0, (sourcepage->width), (sourcepage->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(destpage, 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>destpage->width || y>destpage->height)\r
+//                     if (x<destpage->sw || y<destpage->sh)\r
+                       if (x>width || y>height)\r
+                               continue;\r
+                       drawofs = source+(gvar->video.ofs.ylookup[y]) + (x>>2);\r
+sprintf(global_temp_status_text, "draw - %Fp", drawofs);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "pdet - %Fp", pagedelta);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "srcp - %Fp", sourcepage->data);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "desp - %Fp", destpage->data);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "srce - %Fp", source);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8;\r
+sprintf(global_temp_status_text, "dest - %Fp", dest);\r
+modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q=16;\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
+#endif\r
 /* clrstdin() clear any leftover chars tha may be in stdin stream */\r
 void clrstdin()\r
 {\r
@@ -34,7 +433,8 @@ void colortest(page_t *page, bakapee_t *pee)
 {\r
        //if(pee->coor < 256)\r
        //{\r
-               modexcls(page, pee->coor, VGA);\r
+//             modexcls(page, pee->coor, VGA);\r
+               VL_ClearVideo (pee->coor);\r
                pee->coor++;\r
        //}else pee->coor = 0;\r
 }\r
@@ -42,11 +442,12 @@ void colortest(page_t *page, bakapee_t *pee)
 //color \82Ä\82·\82Æ\r
 void colorz(page_t *page, bakapee_t *pee)\r
 {\r
-       if(pee->coor <= HGQ)\r
+       if(pee->coor <= pee->hgq)\r
        {\r
-               modexcls(page, pee->coor, VGA);\r
+//             modexcls(page, pee->coor, VGA);\r
+               VL_ClearVideo (pee->coor);\r
                pee->coor++;\r
-       }else pee->coor = LGQ;\r
+       }else pee->coor = pee->lgq;\r
 }\r
 \r
 //slow spectrum down\r
@@ -75,12 +476,7 @@ void dingpp(page_t *page, bakapee_t *pee)
 {\r
        if(pee->tile)\r
        {\r
-#ifndef MXLIB\r
-       //fill_block(pee->xx, pee->yy, pee->xx+TILEWH, pee->yy+TILEWH, pee->coor);\r
-               mxFillBox(pee->xx, pee->yy, TILEWH, TILEWH, pee->coor, OP_SET);\r
-#else\r
                modexClearRegion(page, pee->xx, pee->yy, TILEWH, TILEWH, pee->coor);\r
-#endif\r
        }\r
        else\r
                modexputPixel(page, pee->xx, pee->yy, pee->coor);\r
@@ -107,7 +503,7 @@ void dingo(page_t *page, bakapee_t *pee)
 //assigning values from randomizer\r
 void dingas(bakapee_t *pee)\r
 {\r
-       if(pee->gq == BONK) dingu(pee);\r
+       if(pee->gq == pee->bonk) dingu(pee);\r
        if(!pee->bakax)\r
        {\r
                if(pee->tile)\r
@@ -136,7 +532,7 @@ void dingas(bakapee_t *pee)
 \r
 void dingaso(bakapee_t *pee)\r
 {\r
-       if(pee->gq == BONK) dingu(pee);\r
+       if(pee->gq == pee->bonk) dingu(pee);\r
        if(!pee->bakax)\r
        {\r
                if(pee->tile)\r
@@ -165,19 +561,19 @@ void dingaso(bakapee_t *pee)
 \r
 void dingu(bakapee_t *pee)\r
 {\r
-       if(pee->coor < HGQ && pee->coor < LGQ) pee->coor = LGQ;\r
-       if(pee->coor < HGQ)\r
+       if(pee->coor < pee->hgq && pee->coor < pee->lgq) pee->coor = pee->lgq;\r
+       if(pee->coor < pee->hgq)\r
        {\r
                pee->coor++;\r
        }else{\r
-               pee->coor = LGQ;\r
+               pee->coor = pee->lgq;\r
        }\r
 }\r
 \r
 //randomizer\r
 void dingq(bakapee_t *pee)\r
 {\r
-       if(pee->gq<BONK)\r
+       if(pee->gq<pee->bonk)\r
        {\r
                pee->gq++;\r
        }\r
@@ -191,7 +587,7 @@ void dingq(bakapee_t *pee)
 \r
 void dingqo(bakapee_t *pee)\r
 {\r
-       if(pee->gq<BONK)\r
+       if(pee->gq<pee->bonk)\r
        {\r
                pee->gq++;\r
                pee->bakax = rand()%3; pee->bakay = rand()%3;\r
@@ -211,7 +607,7 @@ void ding(page_t *page, bakapee_t *pee, word q)
 {\r
        word tx=0,ty=0;//d3y,\r
 \r
-//++++  if(q <= 4 && q!=2 && gq == BONK-1) coor = rand()%HGQ;\r
+//++++  if(q <= 4 && q!=2 && gq == pee->bonk-1) coor = rand()%pee->hgq;\r
        switch(q)\r
        {\r
                case 1:/*\r
@@ -285,26 +681,28 @@ void ding(page_t *page, bakapee_t *pee, word q)
                        colortest(page, pee);\r
                break;\r
                case 6:\r
-                       pee->coor = rand()%256;\r
-                       modexcls(page, pee->coor, VGA);\r
+//                     pee->coor = rand()%256;\r
+//                     modexcls(page, pee->coor, VGA);\r
+                       colorz(page, pee);\r
+                       modexprint(page, page->sw/2, page->sh/2, 1, 0, 47, 0, 1, "bakapi");\r
                break;\r
                case 7:\r
-                       if(pee->coor <= HGQ)\r
+                       if(pee->coor <= pee->hgq)\r
                        {\r
                                ssd(page, pee, q);\r
                                pee->coor++;\r
-                       }else pee->coor = LGQ;\r
+                       }else pee->coor = pee->lgq;\r
                break;\r
                case 8:\r
                        colorz(page, pee);\r
-                       modexprint(page, page->sw/2, page->sh/2, 1, 47, 0, "bakapi");\r
+                       modexprint(page, page->sw/2, page->sh/2, 1, 0, 47, 0, 1, "bakapi");\r
                break;\r
                case 9:\r
-                       if(pee->coor <= HGQ)\r
-                       {\r
-                               ssd(page, pee, q);\r
-                               pee->coor++;\r
-                       }else pee->coor = LGQ;\r
+#ifdef BAKAFIZZUNSIGNED\r
+                       baka_FizzleFade (ggvv->video.ofs.bufferofs, ggvv->video.ofs.displayofs, vga_state.vga_width, vga_state.vga_height, 70, true, ggvv);\r
+#else\r
+                       baka_FizzleFade (&ggvv->video.page[1], &ggvv->video.page[0], vga_state.vga_width, vga_state.vga_height, 70, true, ggvv);\r
+#endif\r
                break;\r
                case 10:\r
                        ssd(page, pee, q); /*printf("%d\n", pee->coor);*/\r
@@ -332,5 +730,6 @@ void ding(page_t *page, bakapee_t *pee, word q)
                default:\r
                break;\r
        }\r
+       //printf("      %dx%d   %dx%d\n", pee->xx, pee->yy, tx, ty);\r
        //pee->coor++;\r
 }\r