157 lines
3.1 KiB
C
157 lines
3.1 KiB
C
#include <stdio.h>
|
|
#include <conio.h>
|
|
#include <fcntl.h>
|
|
#include <dos.h>
|
|
#include <math.h>
|
|
#include "i:\u2\dis\dis.h"
|
|
|
|
extern void tw_opengraph();
|
|
extern void tw_closegraph();
|
|
extern void tw_putpixel(int x, int y, int color);
|
|
extern int tw_getpixel(int x, int y);
|
|
extern void tw_setpalette(void far *pal);
|
|
extern void tw_setpalarea(void far *pal,int start,int cnt);
|
|
extern void tw_setrgbpalette(int pal, int r, int g, int b);
|
|
extern void tw_setstart(int start);
|
|
extern void tw_pictovmem(void far *pic, int to, int len);
|
|
extern void tw_crlscr();
|
|
|
|
#define _LOADER_
|
|
|
|
extern copyline(char far *from, char far *to, int count);
|
|
|
|
#ifndef _LOADER_CALLS
|
|
char far kuva[65000];
|
|
#endif
|
|
char far kuvapal[768];
|
|
char far pal[768];
|
|
char fadepals[64][768];
|
|
|
|
main() {
|
|
int fff,x,y;
|
|
|
|
dis_partstart();
|
|
|
|
#ifndef _LOADER_
|
|
tw_opengraph();
|
|
tw_setstart(80);
|
|
fff=open("monster.u",O_BINARY|O_RDONLY);
|
|
read(fff,kuva,64000);
|
|
close(fff);
|
|
fff=open("monster.pal",O_BINARY|O_RDONLY);
|
|
read(fff,kuvapal,768);
|
|
close(fff);
|
|
|
|
for(y=0;y<200;y++) for(x=0;x<320;x++)
|
|
{
|
|
tw_putpixel(x+320,y*2,kuva[y*320+x]);
|
|
tw_putpixel(x+320,y*2+1,kuva[y*320+x]);
|
|
}
|
|
tw_setpalette(kuvapal);
|
|
#else
|
|
getpal(kuvapal);
|
|
#endif
|
|
shutdown();
|
|
}
|
|
|
|
shutdown()
|
|
{
|
|
int x,y,a,b;
|
|
|
|
for(a=0;a<320;a++) tw_putpixel(a,0,0);
|
|
for(a=0;a<64;a++) for(b=3;b<768;b++) fadepals[a][b]=(a*63+kuvapal[b]*(64-a))/64;
|
|
for(y=0;y<100;y++) for(x=0;x<320;x++)
|
|
tw_putpixel(x,y+150,tw_getpixel(x+320,y*4));
|
|
tw_setstart(100*160);
|
|
dis_waitb();
|
|
asm {
|
|
mov dx, 3d4h
|
|
mov ax, 4109h
|
|
out dx, ax
|
|
|
|
mov dx, 03ceh
|
|
mov ax, 4105h
|
|
out dx, ax // latch transfer mode
|
|
|
|
mov dx, 03c4h
|
|
mov ax, 0f02h // map mask 1111
|
|
out dx, ax
|
|
}
|
|
tw_setpalette(fadepals[3]);
|
|
tw_setrgbpalette(0,63,63,63);
|
|
tw_setstart(0);
|
|
dis_waitb();
|
|
tw_setpalette(fadepals[20]);
|
|
asm {
|
|
mov dx, 3d4h
|
|
mov ax, 0a013h
|
|
out dx, ax
|
|
}
|
|
dis_waitb();
|
|
for(a=32;a>2;a=a*5/6)
|
|
{
|
|
dis_waitb();
|
|
tw_setpalette(fadepals[63-a]);
|
|
for(b=a/2;b<=a;b++)
|
|
{
|
|
copyline(MK_FP(0x0a000,0),MK_FP(0x0a000,200*160-(b*320)),80);
|
|
copyline(MK_FP(0x0a000,0),MK_FP(0x0a000,200*160+(b*320)),80);
|
|
}
|
|
for(b=0;b<a;b++)
|
|
copyline(MK_FP(0x0a000,80+(400*b/a)*160),MK_FP(0x0a000,200*160+(b-a/2)*320),80);
|
|
}
|
|
|
|
copyline(MK_FP(0x0a000,0),MK_FP(0x0a000,202*160),80);
|
|
copyline(MK_FP(0x0a000,0),MK_FP(0x0a000,198*160),80);
|
|
asm {
|
|
mov dx, 03ceh
|
|
mov ax, 4005h
|
|
out dx, ax // latch transfer mode
|
|
|
|
mov dx, 03c4h
|
|
mov ax, 0f02h // map mask 1111
|
|
out dx, ax
|
|
}
|
|
|
|
for(x=20;x<=160;x+=3)
|
|
{
|
|
dis_waitb();
|
|
tw_putpixel(x,200,0);
|
|
tw_putpixel(320-x,200,0);
|
|
tw_putpixel(x+1,200,0);
|
|
tw_putpixel(319-x,200,0);
|
|
tw_putpixel(x+2,200,0);
|
|
tw_putpixel(318-x,200,0);
|
|
tw_putpixel(x+3,200,0);
|
|
tw_putpixel(317-x,200,0);
|
|
}
|
|
|
|
tw_putpixel(160,200,1);
|
|
for(a=0;a<60;a++)
|
|
{
|
|
dis_waitb();
|
|
b=cos(a/120.0*3*2*3.1415926535)*31.0+32;
|
|
tw_setrgbpalette(1,b,b,b);
|
|
}
|
|
sleep(1);
|
|
}
|
|
|
|
getpal(char far *pal)
|
|
{
|
|
asm {
|
|
push di
|
|
push es
|
|
|
|
les di, pal
|
|
mov cx, 768d
|
|
mov dx, 3c7h
|
|
mov al, 0d
|
|
out dx, al
|
|
inc dx
|
|
inc dx
|
|
rep insb
|
|
|
|
pop es
|
|
pop di
|
|
}
|
|
}
|