X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fbakapee.c;h=c7e43966bda4816e9e8dadd153fc25829589c70a;hb=a565be31ce92d6168ae6983042da75b0b683e52b;hp=389a815993bc5a3760d4b5fb50b56b5547130993;hpb=6c9e6f3b81c3daae1085654eeb822d1fb6c1db74;p=16.git diff --git a/src/lib/bakapee.c b/src/lib/bakapee.c index 389a8159..c7e43966 100755 --- a/src/lib/bakapee.c +++ b/src/lib/bakapee.c @@ -1,5 +1,5 @@ /* Project 16 Source Code~ - * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover + * Copyright (C) 2012-2019 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover * * This file is part of Project 16. * @@ -22,19 +22,464 @@ #include "src/lib/bakapee.h" -/* clrstdin() clear any leftover chars tha may be in stdin stream */ +//static word far* clockw= (word far*) 0x046C; /* 18.2hz clock */ +//char global_temp_status_text[512]; +//char global_temp_status_text2[512]; + +//========================================================================== + +/* +=================== += += FizzleFade += += returns true if aborted += +=================== +*/ + +//extern ControlInfo c; +#define PIXPOSX gvar->video.page[0].sw/2 +#define PIXPOSY gvar->video.page[0].sh/2 + +/* +=================== += += FizzleFade += += returns true if aborted += +=================== +*/ + +//extern ControlInfo c; +//#define PIXPOSX gvar->video.page[0].sw/2 +//#define PIXPOSY gvar->video.page[0].sh/2 +#ifdef BAKAFIZZUNSIGNED +boolean baka_FizzleFade (unsigned source, unsigned dest, unsigned width, unsigned height, unsigned frames, boolean abortable, global_game_variables_t *gvar) +{ + word p,pixperframe; + unsigned drawofs,pagedelta; + byte mask,maskb[8] = {1,2,4,8}; + unsigned x,y,frame; + long rndval; + word screenseg; +#ifdef __WATCOMC__ + unsigned esorig;//,q; +#endif + + pagedelta = dest-source; + rndval = 1; +#ifdef __WATCOMC__ + esorig = 0;// q = 16; +#endif + x = y = 0; + pixperframe = (dword)(gvar->video.page[0].width*gvar->video.page[0].height)/frames;//64000/(dword)frames; + screenseg = SCREENSEG; + +// IN_StartAck (gvar); + +// modexClearRegion(&(gvar->video.page[0]), 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 0); +// modexClearRegion(&(gvar->video.page[1]), 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 15); + +#ifdef __WATCOMC__ + __asm { + mov [esorig],es + } +#endif +// TimeCount= + frame=0; + do // while (1) + { + if (abortable && kbhit())//IN_CheckAck (gvar) ) + return true; + + __asm { + mov es,[screenseg] + } + + for (p=0;pwidth || y>height) +// if ((x>width || y>height) && (xvideo.ofs.ylookup[y]) + (x>>2); + drawofs = source+(y*gvar->video.page[0].stridew) + (x>>2); +/* +sprintf(global_temp_status_text, "draw - %Fp", drawofs); +modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "pdet - %Fp", pagedelta); +modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "srce - %Fp", source); +modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "dest - %Fp", dest); +modexprint(&(gvar->video.page[0]), PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q=16; +*/ + + // + // copy one pixel + // + mask = x&3; + VGAREADMAP(mask); + mask = maskb[mask]; + VGAMAPMASK(mask); + + __asm { + mov di,[drawofs] + mov al,[es:di] + add di,[pagedelta] + mov [es:di],al + } + + if (rndval == 1) // entire sequence has been completed + return false; + } + frame++; +//-- while (TimeCountdata); dest = ((word)destpage->data); + + pagedelta = dest-source; + rndval = 1; esorig = 0; q = 16; + x = y = 0;//destpage->dx; + pixperframe = 76800/(dword)frames; + +// IN_StartAck (); + +// VL_ShowPage(&(gvar->video.page[0]), 1, 0); +// VL_ShowPage(&(gvar->video.page[1]), 1, 0); + +// modexClearRegion(&(gvar->video.page[0]), 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 0); +// modexClearRegion(&(gvar->video.page[1]), 0, 0, gvar->video.page[0].width, gvar->video.page[0].height, 15); +// VL_SetLineWidth(80, gvar); + + __asm { + mov [esorig],es + } +// TimeCount= + frame=0; + do // while (1) + { +sprintf(global_temp_status_text, "%u", frame); +modexprint(destpage, PIXPOSX, PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); + if (abortable && kbhit())//IN_CheckAck () ) + return true; + + __asm { + mov es,[screenseg] + } + + for (p=0;pdestpage->width || y>destpage->height) +// if (xsw || ysh) + if ((x>width || y>height) && (xvideo.ofs.ylookup[y]) + (x>>2); +sprintf(global_temp_status_text, "draw - %Fp", drawofs); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "pdet - %Fp", pagedelta); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "srcp - %Fp", sourcepage->data); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "desp - %Fp", destpage->data); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "srce - %Fp", source); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "dest - %Fp", dest); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q=16; + + // + // copy one pixel + // +/* + mask = x&3; + VGAREADMAP(mask); + mask = maskb[mask]; + VGAMAPMASK(mask); +/*/ +// modexputPixel(&(gvar->video.page[0]), x, y, rand()); +// VL_Plot (x, y, 15, &(gvar->video.ofs)); + modexCopyPageRegion(destpage, sourcepage, x, y, x, y, 4, 4); + + __asm { + mov di,[drawofs] + mov al,[es:di] + add di,[pagedelta] + mov [es:di],al + } + + if (rndval == 1) // entire sequence has been completed + return false; + } + frame++; +//-- while (TimeCountdata); dest = ((word)destpage->data); + + pagedelta = dest-source;//(word)(source->data - dest->data);//(dest->data - source->data) + rndval = 1; esorig = 0; q = 16; + x = y = destpage->dx; + pixperframe = /*76800*/64000/(dword)frames; + +// IN_StartAck (); + +// VL_ShowPage(destpage, 1, 0); +// VL_ShowPage(sourcepage, 1, 0); + +// modexClearRegion(destpage, 0, 0, (destpage->width), (destpage->height), 12); + modexClearRegion(sourcepage, 0, 0, (sourcepage->width), (sourcepage->height), 64); + + __asm { + mov [esorig],es + } +// TimeCount= + frame=0; + do // while (1) + { +sprintf(global_temp_status_text, "%u", frame); +modexprint(destpage, PIXPOSX, PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); + if (abortable && kbhit())//IN_CheckAck () ) + return true; + + __asm { + mov es,[screenseg] + } + + for (p=0;pdestpage->width || y>destpage->height) +// if (xsw || ysh) + if (x>width || y>height) + continue; + drawofs = source+(gvar->video.ofs.ylookup[y]) + (x>>2); +sprintf(global_temp_status_text, "draw - %Fp", drawofs); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "pdet - %Fp", pagedelta); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "srcp - %Fp", sourcepage->data); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "desp - %Fp", destpage->data); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "srce - %Fp", source); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q+=8; +sprintf(global_temp_status_text, "dest - %Fp", dest); +modexprint(destpage, PIXPOSX, q+PIXPOSY, 1, 0, 47, 0, 1, global_temp_status_text); q=16; + + // + // copy one pixel + // + mask = x&3; + VGAREADMAP(mask); + mask = maskb[mask]; + VGAMAPMASK(mask); + + __asm { + mov di,[drawofs] + mov al,[es:di] + add di,[pagedelta] + mov [es:di],al + } + + if (rndval == 1) // entire sequence has been completed + return false; + } + frame++; +//-- while (TimeCountDLStarted) + return; + + // DOSLIB: check our environment + probe_dos(); + + // DOSLIB: what CPU are we using? + // NTS: I can see from the makefile Sparky4 intends this to run on 8088 by the -0 switch in CFLAGS. + // So this code by itself shouldn't care too much what CPU it's running on. Except that other + // parts of this project (DOSLIB itself) rely on CPU detection to know what is appropriate for + // the CPU to carry out tasks. --J.C. + cpu_probe(); + + // DOSLIB: check for VGA + if (!probe_vga()) { + printf("VGA probe failed\n"); + return; + } + // hardware must be VGA or higher! + if (!(vga_state.vga_flags & VGA_IS_VGA)) { + printf("This program requires VGA or higher graphics hardware\n"); + return; + } + + textInit(); + gvar->DLStarted = true; +} + //color ‚Ä‚·‚Æ void colortest(page_t *page, bakapee_t *pee) { //if(pee->coor < 256) //{ - modexcls(page, pee->coor, VGA); +// modexcls(page, pee->coor, VGA); + VL_ClearVideo (pee->coor); pee->coor++; //}else pee->coor = 0; } @@ -44,7 +489,8 @@ void colorz(page_t *page, bakapee_t *pee) { if(pee->coor <= pee->hgq) { - modexcls(page, pee->coor, VGA); +// modexcls(page, pee->coor, VGA); + VL_ClearVideo (pee->coor); pee->coor++; }else pee->coor = pee->lgq; } @@ -296,13 +742,15 @@ void ding(page_t *page, bakapee_t *pee, word q) colorz(page, pee); modexprint(page, page->sw/2, page->sh/2, 1, 0, 47, 0, 1, "bakapi"); break; - case 9: - if(pee->coor <= pee->hgq) - { - ssd(page, pee, q); - pee->coor++; - }else pee->coor = pee->lgq; - break; +/* case 9: + modexClearRegion(&(ggvv->video.page[0]), 0, 0, ggvv->video.page[0].width/2, ggvv->video.page[0].height/2, 15); +#ifdef BAKAFIZZUNSIGNED +// baka_FizzleFade (ggvv->video.ofs.bufferofs, ggvv->video.ofs.displayofs, vga_state.vga_width, vga_state.vga_height, 70, true, ggvv); + baka_FizzleFade (ggvv->video.ofs.bufferofs, ggvv->video.ofs.displayofs, ggvv->video.page[0].width, ggvv->video.page[0].height, 70, true, ggvv); +#else + baka_FizzleFade (&ggvv->video.page[1], &ggvv->video.page[0], vga_state.vga_width, vga_state.vga_height, 70, true, ggvv); +#endif + break;*/ case 10: ssd(page, pee, q); /*printf("%d\n", pee->coor);*/ break;