123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661 |
- #ifndef _ABOUT_H_
- #define _ABOUT_H_
- #include <math.h>
- #pragma warning(disable : 4731)
- static HWND about_hwnd;
- #ifndef NO_ABOUT_EGG
- #define BITMAP_W 100
- #define BITMAP_H 64
- static HDC m_hdc;
- static HBITMAP m_hbm;
- static char *m_dib;
- static char ge_fbuf[(BITMAP_H+1)*BITMAP_W+1];
- static int ge_tmp;
- #define M_NUM_FX 9
- static int m_effect;
- #define BLOBS_NPOINTS 8
- static int BLOBPOINTS[4*BLOBS_NPOINTS];
- static int fire_textcnt,fire_textpos;
- static char *fire_texts[]={
- "nsvplay",
- "Nullsoft 2003-8",
- "",
- "greets to",
- "winamp forums",
- "#nullsoft",
- "britney spears",
- "p.s.",
- "DrO was here",
- " <3",
- "",
- };
- static HDC scrolldc;
- static HBITMAP scrollbitmap;
- static char *scrolldib;
- static const char scrolltext[]="nullsoft presents you nSVpLAY hidden part! cracked by rOn +5 trainer by deadbeef ";
- static int scrolloffs;
- static char *rototmp;
- #endif //NO_ABOUT_EGG
- static INT_PTR CALLBACK aboutProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_INITDIALOG:
- #ifndef NO_ABOUT_EGG
- {
- HBITMAP about_bmp = NULL;
- m_effect=M_NUM_FX-1;
- // try to use the localised image and then revert to the normal dll image
- about_bmp = (HBITMAP)LoadImage((HINSTANCE)lParam,MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_SHARED);
- if(about_bmp == NULL){
- about_bmp = (HBITMAP)LoadImage(g_hInstance,MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_SHARED);
- }
- // set on control with id of -1 (0xFFFFFFFF) or 0xFFFF (not sure how/why this happened)
- SendDlgItemMessage(hwndDlg,0xFFFF,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)about_bmp);
- SendDlgItemMessage(hwndDlg,-1,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)about_bmp);
- }
- #endif
- SetDlgItemText(hwndDlg,IDC_VERSION,WNDMENU_CAPTION);
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam))
- {
- case IDCANCEL:
- case IDOK:
- #ifndef MODAL_ABOUT
- DestroyWindow(hwndDlg);
- #else
- EndDialog(hwndDlg,1);
- #endif
- return FALSE;
- }
- break;
- case WM_DESTROY:
- about_hwnd=NULL;
- #ifndef NO_ABOUT_EGG
- if (m_hbm) DeleteObject(m_hbm);
- if (m_hdc) DeleteDC(m_hdc);
- if (scrollbitmap) DeleteObject(scrollbitmap);
- if (scrolldc) DeleteDC(scrolldc);
- m_hbm=0;
- m_hdc=0;
- scrollbitmap=0;
- scrolldc=0;
- if (rototmp) free(rototmp);
- rototmp=NULL;
- #endif
- break;
- #ifndef NO_ABOUT_EGG
- case WM_LBUTTONDBLCLK :
- //easter eggs :)
- if (++m_effect >= M_NUM_FX) m_effect=1;
- KillTimer(hwndDlg,0x1234);
- if (m_hbm) DeleteObject(m_hbm);
- if (m_hdc) DeleteDC(m_hdc);
- if (scrollbitmap) DeleteObject(scrollbitmap);
- if (scrolldc) DeleteDC(scrolldc);
- scrollbitmap=0;
- scrolldc=0;
- if (rototmp) free(rototmp);
- rototmp=NULL;
- {
- struct
- {
- BITMAPINFO bmi;
- RGBQUAD more_bmiColors[256];
- LPVOID data;
- } m_bitmap;
- m_hdc = CreateCompatibleDC(NULL);
- m_bitmap.bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- m_bitmap.bmi.bmiHeader.biPlanes = 1;
- m_bitmap.bmi.bmiHeader.biBitCount = 8;
- m_bitmap.bmi.bmiHeader.biCompression = BI_RGB;
- m_bitmap.bmi.bmiHeader.biSizeImage = 0;
- m_bitmap.bmi.bmiHeader.biClrUsed = 256;
- m_bitmap.bmi.bmiHeader.biClrImportant = 256;
- m_bitmap.bmi.bmiHeader.biWidth = BITMAP_W;
- m_bitmap.bmi.bmiHeader.biHeight = -BITMAP_H;
- m_bitmap.bmi.bmiHeader.biSizeImage = BITMAP_W*BITMAP_H;
- memset(ge_fbuf,0,BITMAP_W*(BITMAP_H+1));
- fire_textcnt=0;
- if (m_effect < 3)
- {
- unsigned char *t=(unsigned char *)m_bitmap.bmi.bmiColors;
- int x=255;
- int adj=!!m_effect;
- t[0]=t[1]=t[2]=0;
- t+=4;
- while (x)
- {
- if (m_effect == 2)
- {
- if (x > 128)
- {
- t[0]=0;
- t[1]=((256-x)*2)/3;
- t[2]=(256-x)*2;
- }
- else
- {
- t[0]=256-x*2;
- t[1]=255/3 + ((256-x)*2)/3;
- t[2]=255;
- }
- }
- else
- {
- int a=x*2;
- if (a>255) a=255;
- t[0]=a;
- t[2-adj]=a;
- a+=a;
- if (a > 255) a=255;
- t[1+adj]=a;
- }
- t+=4;
- x--;
- }
- }
- if(m_effect==0)
- {
- //sine scroll
- struct
- {
- BITMAPINFO bmi;
- RGBQUAD more_bmiColors[1];
- LPVOID data;
- } m_bitmap;
- scrolldc = CreateCompatibleDC(NULL);
- m_bitmap.bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- m_bitmap.bmi.bmiHeader.biPlanes = 1;
- m_bitmap.bmi.bmiHeader.biBitCount = 8;
- m_bitmap.bmi.bmiHeader.biCompression = BI_RGB;
- m_bitmap.bmi.bmiHeader.biSizeImage = 0;
- m_bitmap.bmi.bmiHeader.biClrUsed = 1;
- m_bitmap.bmi.bmiHeader.biClrImportant = 1;
- m_bitmap.bmi.bmiHeader.biWidth = 128;
- m_bitmap.bmi.bmiHeader.biHeight = -32;
- m_bitmap.bmi.bmiHeader.biSizeImage = 128*32;
- scrollbitmap = CreateDIBSection(scrolldc,&m_bitmap.bmi,DIB_RGB_COLORS, &m_bitmap.data, NULL, 0);
- SelectObject(scrolldc,scrollbitmap);
- SetBkMode(scrolldc,TRANSPARENT);
- scrolldib = (char *)m_bitmap.data;
- scrolloffs = 0;
- }
- if (m_effect == 1)
- {
- int *t=BLOBPOINTS;
- int a=BLOBS_NPOINTS;
- while (a)
- {
- t[0]=(rand()&127) - 64;
- t[2]=(rand()&127) - 64;
- t[1]=t[3]=a;
- t+=4;
- a--;
- }
- }
- if((m_effect >= 3 && m_effect <= 8)) //rotozooms
- {
- rototmp=(char *)malloc(65536+256);
- //generate noise texture
- memset(rototmp,0xd0,65536+256);
- __asm
- {
- mov cx,0ffffh
- xor ax,ax
- xor ebx,ebx
- xor dx,dx
- mov edi,[rototmp]
- TEXGEN:
- mov bx,cx
- add ax,cx
- rol ax,cl
- mov dh,al
- sar dh,5
- adc dl,dh
- adc dl,[edi+ebx+255]
- shr dl,1
- mov [edi+ebx],dl
- not bh
- mov [edi+ebx],dl
- loop TEXGEN
- }
- if ((!!(GetAsyncKeyState(VK_SHIFT)&0x8000)) ^ (m_effect==5)) // secondary easter egg, hah!
- for (int x = 0; x < 256*256; x ++) rototmp[x] = 0x40 + ((x^(x>>8)) & 0x1F);
- rototmp[0]=rototmp[1];
- rototmp[0xff00]=rototmp[0xff01];
- //generate palette
- unsigned char *t=((unsigned char *)(&m_bitmap.bmi.bmiColors[0x40]));
- for(int i=0;i<0x20;i++)
- {
- int r,g,b;
- switch(m_effect)
- {
- case 3: r=i*4; g=i*5; b=i*8; break;
- case 4: r=i*4; g=i*7; b=i*8; break;
- case 5: r=i*8; g=i*2; b=i*2; break;
- case 6: r=i*6; g=i*8; b=i*6; break;
- case 7: r=i*8; g=i*6; b=i*8; break;
- case 8: r=i*6; g=i*6; b=i*8; break;
- }
- t[0]=b;
- t[1]=g;
- t[2]=r;
- t+=4;
- }
- }
- m_hbm = CreateDIBSection(m_hdc,&m_bitmap.bmi,DIB_RGB_COLORS, &m_bitmap.data, NULL, 0);
- SelectObject(m_hdc,m_hbm);
- m_dib = (char *)m_bitmap.data;
- SetTimer(hwndDlg,0x1234,35,NULL);
- }
- break;
- case WM_TIMER:
- {
- int nomemcpy=0;
- static float inc=0;
- inc++;
- if (m_effect == 0) // oldsk00l sine scroll
- {
- double blah=3.14/BITMAP_W;
- double val1=1;
- double val2=(BITMAP_H-16)/2;
- static double vinc=0;
- __asm
- {
- mov edi, offset ge_fbuf
- mov ecx, BITMAP_W*BITMAP_H
- xor eax, eax
- rep stosb
- }
- for(int j=0;j<8;j++) {
- for(int k=0;k<16;k++) {
- int col=255-k*(256/16);
- if(col<128) col=128+(128-col);
- memset(ge_fbuf+(k+(int)((BITMAP_H-16)*(cos(vinc+(j*8)*3.14/50)+1)/2))*BITMAP_W,col,BITMAP_W);
- }
- }
- __asm
- {
- mov edi, offset ge_fbuf
- mov ecx, 0
- mov esi, dword ptr [scrolldib]
- SINELOOP:
- mov [ge_tmp], ecx
- fild dword ptr [ge_tmp]
- fmul qword ptr [blah]
- fadd qword ptr [vinc]
- fcos
- fadd qword ptr [val1]
- fmul qword ptr [val2]
- fistp dword ptr [ge_tmp]
- mov eax, [ge_tmp]
- mov ebx, eax
- mov edx, BITMAP_W
- mul edx
- mov dh, bl
- push ecx
- mov ebx, 0
- mov ecx, 16
- SINELOOP2:
- cmp byte ptr [esi+ebx],0
- je SINECONT
- mov dl,0ffh
- sub dl,dh
- sub dl,cl
- mov [edi+eax], dl
- SINECONT:
- add eax, BITMAP_W
- add ebx, 128
- loop SINELOOP2
- pop ecx
- inc esi
- inc edi
- inc ecx
- cmp ecx, BITMAP_W
- jl SINELOOP
- mov edi, [scrolldib]
- mov esi, edi
- inc esi
- mov ebx, 32
- SINESCROLL:
- mov ecx, 127
- rep movsb
- inc edi
- inc esi
- dec ebx
- jnz SINESCROLL
- }
- vinc+=0.2;
- scrolloffs++;
- if((scrolloffs&7)==7)
- {
- int o=scrolloffs/8;
- if(!scrolltext[o]) scrolloffs=0;
- else TextOutA(scrolldc,100,0,&scrolltext[o],1);
- }
- }
- else if (m_effect == 1) // blobs
- {
- int *blobptr=BLOBPOINTS;
- int i=BLOBS_NPOINTS*2;
- while (i--)
- {
- if (blobptr[0] > 0) blobptr[1]--;
- else blobptr[1]++;
- int a=blobptr[1];
- if (rand()&1) a++;
- else a--;
- blobptr[0]+=a/8;
- blobptr+=2;
- }
- int y=BITMAP_H;
- unsigned char *p=(unsigned char *)ge_fbuf;
- while (y--)
- {
- int x=BITMAP_W;
- while (x--)
- {
- blobptr=BLOBPOINTS;
- i=BLOBS_NPOINTS;
- double sum=0.0;
- while (i--)
- {
- double as=(x-(BITMAP_W/2)) - blobptr[0];
- double bs=(y-(BITMAP_H/2)) - blobptr[2];
- sum+=sqrt(as*as + bs*bs);
- blobptr+=4;
- }
- sum *= 6.0/BLOBS_NPOINTS;
- int a=(int)sum;
- if (a > 0xff) a= 0xff;
- *p++=a;
- }
- }
- }
- else if(m_effect==2) //gayfire
- {
- unsigned char *p=(unsigned char *)ge_fbuf;
- int x;
- unsigned char *t=p + BITMAP_W*BITMAP_H;
- for (x = 0; x < BITMAP_W; x ++)
- {
- int a=*t - 10;
- if ((rand()&0x7) == 7) a+=100;
- if (a < 0) a=0;
- else if (a > 192) a=192;
- *t++=a;//rand()&0xf0;
- }
- int y;
- for (y = 0; y < BITMAP_H; y ++)
- {
- *p++=p[0]/4 + p[BITMAP_W]/2 + p[BITMAP_W+1]/4;
- for (x = 1; x < BITMAP_W-1; x ++)
- *p++=p[0]/4 + p[BITMAP_W]/4 + p[BITMAP_W-1]/4 + p[BITMAP_W+1]/4;
- *p++=p[0]/4 + p[BITMAP_W]/2 + p[BITMAP_W-1]/4;
- }
- if (fire_textcnt-- <= 0)
- {
- memcpy(m_dib,ge_fbuf,BITMAP_W*BITMAP_H);
- SetBkMode(m_hdc,TRANSPARENT);
- SetTextColor(m_hdc,RGB(255,255,255));
- RECT r={0,0,BITMAP_W,BITMAP_H};
- DrawTextA(m_hdc,fire_texts[fire_textpos%(sizeof(fire_texts)/sizeof(fire_texts[0]))],-1,&r,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
- if (fire_textcnt < -30)
- {
- memcpy(ge_fbuf,m_dib,BITMAP_W*BITMAP_H);
- fire_textpos++;
- fire_textcnt=30;
- }
- else nomemcpy=1;
- }
- }
- else if (m_effect == 3) //rotozoom
- {
- char *p=ge_fbuf;
- static float angle=0;
- for(int j=-32;j<32;j++)
- for(int i=-50;i<50;i++)
- {
- //rotozoom
- double x=(i*cosf(angle)-j*sinf(angle))*(2+cosf(angle*1.4f));
- double y=(i*sinf(angle)+j*cosf(angle))*(2+cosf(angle*1.4f));
- //slime
- x+=cos(angle*x)*4;
- y+=sin(angle*y)*4;
- int x2=(int)x & 0xff;
- int y2=(int)y & 0xff;
- *p++=rototmp[256*y2+x2];
- }
-
- angle+=0.01f;
- }
- else if (m_effect == 4) //rotozoom 2
- {
- char *p=ge_fbuf;
- double angle=cos(inc*0.01f)*2;
- for(int j=-32;j<32;j++)
- for(int i=-50;i<50;i++)
- {
- //position
- double x=i-cos(inc*0.013f)*64;
- double y=j+sin(inc*0.013f)*64;
- //slime
- x+=cos((angle+i)*50)*cos(angle)*4;
- y+=sin((angle+j)*50)*cos(angle)*4;
- //rotozoom
- double x3=(x*cos(angle)-y*sin(angle))*(2+cos(angle*1.4f));
- double y3=(x*sin(angle)+y*cos(angle))*(2+cos(angle*1.4f));
- int x2=(int)x3 & 0xff;
- int y2=(int)y3 & 0xff;
- *p++=rototmp[256*y2+x2];
- }
- }
- else if (m_effect == 5) //3d rotozoom
- {
- char *p=ge_fbuf;
- static float angle=0;
- const double b=50;
- for(int j=-32;j<32;j++)
- for(int i=-50;i<50;i++)
- {
- //rotozoom
- double x=(i*cos(angle)+j*sin(angle));//*(2+cos(angle*1.4f));
- double y=(i*sin(angle)-j*cos(angle));//*(2+cos(angle*1.4f));
- //gay z-projection
- x*=b/(((double)j+32));
- y*=b/(((double)j+32));
- //position
- x-=cos(inc*0.013f)*64;
- y+=sin(inc*0.013f)*64;
-
- int x2=(int)x & 0xff;
- int y2=(int)y & 0xff;
- char c=rototmp[256*y2+x2];
- *p++=0x40+((c-0x40)*(j+32)/56);
- }
-
- angle+=0.01f;
- //b++;
- }
- else if (m_effect == 6) //tunnel
- {
- const double TINYNUM=1.0E-6;
- const double CONE_RADIUS=128;
- const double FOV=120.0;
- #define sqr(a) ((a)*(a))
-
- char *p=ge_fbuf;
- for(int y=-32;y<32;y++)
- for(int x=-50;x<50;x++)
- {
- double originx=cos(inc*0.025f)*20;
- double originy=sin(inc*0.04f)*20;
- double originz=inc*4;
- double dirx=x/FOV;
- double diry=y/FOV;
- double dirz=1;
- //normalize dir vector
- {
- double l=1.0f/sqrt(sqr(dirx)+sqr(diry)+sqr(dirz));
- dirx*=l;
- diry*=l;
- dirz*=l;
- }
- //y-axis rotation
- {
- double rot=inc*0.015f;
- double dirx2=dirx*cos(rot)+dirz*sin(rot);
- dirz=dirx*sin(rot)-dirz*cos(rot);
- dirx=dirx2;
- }
- //tunnel algo shit
- double a=sqr(dirx)+sqr(diry);
- double b=2*(originx*dirx + originy*diry);
- double c=sqr(originx)+sqr(originy)-sqr(CONE_RADIUS);
- double delta=sqrt(sqr(b)-(4*a*c));
- double t1=(-b+delta)/(2*a+TINYNUM);
- double t2=(-b-delta)/(2*a+TINYNUM);
- double t=t1>0?t1:t2;
- double intx=originx+dirx*t;
- double inty=originy+diry*t;
- double intz=originz+dirz*t;
- //tex. coords
- int u=(int)(fabs(intz)*0.6);
- int v=(int)(fabs(atan2(inty,intx)*256/3.14159265));
- //depth
- t=20000.0/t;
- int z=(int)(t>63?63:t);
- u&=0xff;
- v&=0xff;
- z&=0xff;
- {
- char c=rototmp[256*u+v];
- *p++=0x40+((c-0x40)*z/64);
- }
- }
- }
- else if(m_effect==7) //washing machine
- {
- char *p=ge_fbuf;
- for(int j=-32;j<32;j++)
- for(int i=-50;i<50;i++)
- {
- double dist=sqrt(double(sqr(i)+sqr(j))); // pythagoras rules :)
- double angle=cos(dist*0.05f)*(cos(inc*0.1f)) + inc*0.07f;
- //rotozoom
- double x=(i*cos(angle)-j*sin(angle));
- double y=(i*sin(angle)+j*cos(angle));
- int x2=(int)x & 0xff;
- int y2=(int)y & 0xff;
- *p++=rototmp[256*y2+x2];
- }
- }
- else if(m_effect==8) //reflection-like(?) effect
- {
- char *p=ge_fbuf;
- for(int j=-32;j<32;j++)
- for(int i=-50;i<50;i++)
- {
- double dist=sqrt(double(sqr(i)+sqr(j)));
- double zoom=cos(dist*0.05f)*(cos(inc*0.02f)*8)+1;
- //rotozoom
- double x=i*zoom+inc;
- double y=j*zoom+inc;
- int x2=(int)x & 0xff;
- int y2=(int)y & 0xff;
- *p++=rototmp[256*x2+y2];
- }
- }
- if (!nomemcpy) memcpy(m_dib,ge_fbuf,BITMAP_W*BITMAP_H);
- if (hwndDlg != NULL)
- {
- HDC h = GetDC(hwndDlg);
- BitBlt(h, 11, 11, BITMAP_W, BITMAP_H, m_hdc, 0, 0, SRCCOPY);
- ReleaseDC(hwndDlg, h);
- }
- }
- break;
- #endif
- }
- return 0;
- }
- static void do_about(HWND hwnd, HINSTANCE hinst) {
- #ifndef MODAL_ABOUT
- if(about_hwnd) {
- SetForegroundWindow(about_hwnd);
- return;
- }
- about_hwnd=CreateDialogParam((!hinst?g_hInstance:hinst),MAKEINTRESOURCE(IDD_ABOUT),hwnd,aboutProc,(LPARAM)hinst);
- ShowWindow(about_hwnd,SW_SHOW);
- #else
- #ifdef LOC_MODAL_ABOUT
- WASABI_API_DIALOGBOXPARAMW(IDD_ABOUT,hwnd,aboutProc,(LPARAM)hinst);
- #else
- DialogBoxParam((!hinst?g_hInstance:hinst),MAKEINTRESOURCE(IDD_ABOUT),hwnd,aboutProc,(LPARAM)hinst);
- #endif
- #endif
- }
- #endif//_ABOUT_H_
|