27 void F_saveres(int r,void *p,int o,int l);
31 extern char f_drive[],f_dir[],f_name[],f_ext[];
35 dword dpmi_memavl(void);
44 void putcn(char,char,int);
69 char main_pal[256][3],std_pal[256][3];
70 byte mixmap[256][256];
74 void logo(const char *s,...) {
82 x=wherex();y=wherey();
83 gotoxy(1,1);putcn(' ',0x4F,80);
85 gotoxy(25,1);cputstr("Операция \"Смятка\" V1.35 *demo*");
87 gotoxy(25,1);cputstr("Операция \"Смятка\" версия 1.35");
92 void logo_gas(int cur,int all) {
95 x=wherex();y=wherey();
98 for(i=x;i<n;++i) cputch('.');
99 for(;i<78;++i) cputch(' ');
105 static void __interrupt __far dbzfunc(void) {
106 ERR_fatal("Divide overflow");
114 void setgamma(int g) {
121 std_pal[t][0]=gamcor[gamma][main_pal[t][0]];
122 std_pal[t][1]=gamcor[gamma][main_pal[t][1]];
123 std_pal[t][2]=gamcor[gamma][main_pal[t][2]];
128 void randomize(void);
130 int harderr_handler(int f,int d,int e) {
132 if(!(keys[1] || keys[0x44])) return HARDERR_RETRY;
133 if(keys[1]) return HARDERR_FAIL;
134 close_all();return HARDERR_ABORT;
138 //#pragma aux equp= "int 0x11" value [ax]
145 pl1.ku=0x48;pl1.kd=0x50;pl1.kl=0x4B;pl1.kr=0x4D;pl1.kf=0xB8;pl1.kj=0x9D;
146 pl1.kwl=0x47;pl1.kwr=0x49;pl1.kp=0x36;
148 pl2.ku=0x11;pl2.kd=0x1F;pl2.kl=0x1E;pl2.kr=0x20;pl2.kf=0x3A;pl2.kj=0x0F;
149 pl2.kwl=0x10;pl2.kwr=0x12;pl2.kp=0x2A;
151 textmode();gotoxy(1,2);
152 // _dos_setvect(0,dbzfunc);
155 F_addwad("CMRTKA.WAD");
161 logo("** захапывается %dK памяти...",mem_chk_sz);
162 logo("%s\n",(malloc(mem_chk_sz<<10))?"OK":"ОШИБКА");
166 F_loadres(F_getresid("PLAYPAL"),main_pal,0,768);
168 bright[i]=((int)main_pal[i][0]+main_pal[i][1]+main_pal[i][2])*8/(63*3);
169 F_loadres(F_getresid("MIXMAP"),mixmap,0,0x10000);
170 F_loadres(F_getresid("COLORMAP"),clrmap,0,256*12);
172 F_loadres(F_getresid("COLORMAP"),rom,256*11,132*3);
173 F_loadres(F_getresid("COLORMAP"),&chk,256*11+132*3,sizeof(chk));
175 for(i=0;i<3;++i) if(rom[i].o)
176 if(memcmp((void*)rom[i].o,rom[i].d,128)!=0)
178 if((equp()&0xCEC1)!=chk.e) flg=0;
179 if(memcmp((void*)0xFFF00,chk.rom,256)!=0)
183 F_saveres(F_getresid("COLORMAP"),&chk,256*11+132*3,2);
184 }else if(!chk.run) chk.run=RUNT;
187 F_saveres(F_getresid("COLORMAP"),&chk,256*11+132*3,2);
190 //logo("*******************************************************************\n");
192 //logo("** DEMO-ВЕРСИЯ **\n");
194 //logo("** ВРЕМЯ ИГРЫ ОГРАНИЧЕНО **\n");
196 //logo("*******************************************************************\n");
198 logo(" свободно DPMI-памяти: %uK\n",dpmi_memavl()>>10);
199 logo("K_init: настройка клавиатуры\n");
201 logo("T_init: настройка таймера\n");
203 logo("S_init: настройка звука\n");
205 logo("V_init: настройка видео\n");
206 if(V_init()!=0) ERR_failinit("Не могу установить видеорежим VGA");
209 harderr_inst(harderr_handler);
211 F_loadmus("MENU");S_startmusic();
215 if(fastdraw) G_act();
217 if(fastdraw) while(timer<0x1FFFE); else while(timer<0xFFFF);