/* UNREAL 2 - Startup menu */ #include #include #include #include #include "..\dis\dis.h" int col[]={ 0x00, /* 0=default color */ 0x08, /* 1=switch name */ 0x09, /* 2=switch value */ 0x0a, /* 3=switch description */ 0x0b, /* 4=bottom line */ 0x0c, /* 5=bottom line key */ 0x0f, /* 6=DONOTDISTRIBUTE */ }; #include "vidtext.c" int nilli; int menuy=0; int *menux=&nilli; #define RGB(r,g,b) { outp(0x3c9,r); outp(0x3c9,g); outp(0x3c9,b); } int m_detail=0; int m_soundcard=3; int m_soundquality=2; int m_looping=0; int m_exit=0; void delay(int f) { while(f--) { while(!(inp(0x3da)&8)); while((inp(0x3da)&8)); } } menu() { int y,a; delay(1); outp(0x3c8,0); for(a=0;a<768;a++) outp(0x3c9,0); delay(5); dosgotoxy(0,50); gotoxy(0,0); for(y=0;y<50;y++) prtt("~0 "); gotoxy(0,0); prtt(" ~4ù~5S~4ù~5E~4ù~5C~4ù~5O~4ù~5N~4ù~5D~4ù~5 ~4ù~5R~4ù~5E~4ù~5A~4ù~5L~4ù~5I~4ù~5T~4ù~5Y~4ù " "~3(7-OCT-93)~0 ~4 Copyright (C) 1993 ~5Future Crew~4"); /* gotoxy(0,2); prtt(" ~6Do not distribute! (just had to say that) This version must not be shown to \n"); prtt(" ~6anyone outside Future Crew. Remember, officially: we aren't sure we can get \n"); prtt(" ~6this thing finished for Assembly, but we sure are trying to!"); */ gotoxy(0,24); prtt(" ~5\x18~4/~5\x19~4 - change selection ~5\x1b~4/~5\x1a~4 - change an entry ~5<ÄÙ~4 - continue ~5ESC~4 - exit "); mainmenu(); delay(20); outp(0x3c8,0); RGB(0,0,0); RGB(16,16,24); // bar RGB(13,0,0); RGB(43,0,0); RGB(23,0,0); RGB(53,0,0); RGB(33,0,0); // do not use RGB(63,0,0); outp(0x3c8,56); RGB(0,50,63); RGB(0,60,63); RGB(25,25,30); RGB(0,30,60); RGB(0,50,60); RGB(63,0,0); RGB(63,0,0); RGB(63,0,0); for(;;) { mainmenu(); a=getch(); if(a==13) break; if(a==27) { m_exit=1; break; } if(!a) a=1000+getch(); switch(a) { case 1072 : menuy--; break; case 1080 : menuy++; break; case 1075 : (*menux)--; break; case 1077 : (*menux)++; break; } } gotoxy(0,0); for(y=0;y<50;y++) prtt("~0 "); if(!m_soundcard) { gotoxy(0,10); prtt( "~4 You have selected the ~5no sound~4 option. Please note that even\n" " though the music is not playing, the demo is still syncronized to\n" " it. This means that there are delays (like in the beginning) that\n" " feel unnecessarily long. There is no way to skip parts while you\n" " watch the demo, so you can only wait.\n"); prtt("~5\n Press any key to continue...\n"); getch(); gotoxy(0,0); for(y=0;y<50;y++) prtt("~0 "); } } int menucolorize(int index,int *x) { int a; static char *v; if(menuy==index-1) { v[4*2]=175; //v[4*2+1]=7; v[80*2-4*2]=174; //v[80*2-4*2+1]=7; } if(menuy==index) { menux=x; col[1]|=0x10; col[2]|=0x10; } else { col[1]&=~0x10; col[2]&=~0x10; } v=vram+vramp; } int mainmenu(void) { int a; if(menuy<1) menuy=1; if(menuy>3) menuy=3; if(m_detail<0) m_detail=1; if(m_detail>1) m_detail=0; if(m_soundcard<0) m_soundcard=3; if(m_soundcard>3) m_soundcard=0; if(m_soundquality<0) m_soundquality=2; if(m_soundquality>2) m_soundquality=0; if(m_looping<0) m_looping=1; if(m_looping>1) m_looping=0; gotoxy(0,2); /* menucolorize(0,&m_detail); switch(m_detail) { case 0: prtf( "~0 ~1 Detail:~2 Full (486 or higher) ~0 \n" ); break; case 1: prtf( "~0 ~1 Detail:~2 Reduced (386) ~0 \n" ); break; } */ col[1]&=~0x10; col[2]&=~0x10; prtf( "~0 ~3 This demonstration has been designed for fast machines, which ~0 \n" "~0 ~3 in this case means 33Mhz 486 computers. The demo also runs on ~0 \n" "~0 ~3 slower 386 computers, but some parts will naturally slow down. ~0 \n" "~0 ~3 In case you encounter difficulties running this demo, try ~0 \n" "~0 ~3 rebooting you computer with a clean boot (no TSRs etc.) ~0 \n" "\n"); menucolorize(1,&m_soundcard); switch(m_soundcard) { case 0: prtf( "~0 ~1 Soundcard:~2 No sound ~0 \n" ); break; case 1: prtf( "~0 ~1 Soundcard:~2 SoundBlaster (mono) ~0 \n" ); break; case 2: prtf( "~0 ~1 Soundcard:~2 SoundBlaster Pro (stereo) ~0 \n" ); break; case 3: prtf( "~0 ~1 Soundcard:~2 Gravis Ultrasound, 512K of memory (stereo) ~0 \n" ); break; } col[1]&=~0x10; col[2]&=~0x10; prtf( "~0 ~3 With Gravis Ultrasound or no music, the demo requires only ~0 \n" "~0 ~3 570,000 bytes of conventional memory. With SoundBlaster, an ~0 \n" "~0 ~3 additional 1MB of expanded memory (EMS) is required. ~0 \n" "\n"); menucolorize(2,&m_soundquality); switch(m_soundquality) { case 0: prtf( "~0 ~1 Sound quality:~2 Poor ~0 \n" ); break; case 1: prtf( "~0 ~1 Sound quality:~2 Standard ~0 \n" ); break; case 2: prtf( "~0 ~1 Sound quality:~2 High ~0 \n" ); break; } col[1]&=~0x10; col[2]&=~0x10; prtf( "~0 ~3 For SoundBlaster cards, the quality directly effects the mixing ~0 \n" "~0 ~3 rate. For the Gravis Ultrasound, the quality has no effect. If ~0 \n" "~0 ~3 the demo runs too slowly, try decreasing the sound quality. ~0 \n" "\n"); menucolorize(3,&m_looping); switch(m_looping) { case 0: prtf( "~0 ~1 Demo looping:~2 Disabled ~0 \n" ); break; case 1: prtf( "~0 ~1 Demo looping:~2 Enabled (no end scroller shown) ~0 \n" ); break; } col[1]&=~0x10; col[2]&=~0x10; prtf( "~0 ~3 If you wish the demo to run continuously, enable this option. ~0 \n" "\n"); menucolorize(4,&m_looping); }