📄 menu.c
字号:
{
yh = 35+i*10;
gprintf( "Particles",xh,yh,BLACK,L_GREY,&f,1 );
for ( i=0, wh=yh+10; i<NUM_OF_PARTICLES; i++ )
{
gprintf( "Mass=",xh,wh+3,BLACK,L_GREY,&f,1 );
gprintfi( ParticleMass[i],xh+40,wh+3,BLACK,L_GREY,&f,1 );
putimg( Toon_Particle[i]->img,xh+56,wh,1 );
wh += Toon_Particle[i]->img[0].h+2;
}
gprintf( "Shield",xh,120,BLACK,L_GREY,&f,1 );
gprintf( "Injector",150,yh,BLACK,L_GREY,&f,1 );
putimg( Toon_Syringe->img,280,yh-4,1 );
gprintf( "Rogue Ray",150,yh+25,BLACK,L_GREY,&f,1 );
gprintf( "Rogue Particle",150,yh+50,BLACK,L_GREY,&f,1 );
gprintf( "Neutron Powerup",150,yh+75,BLACK,L_GREY,&f,1 );
gprintf( "Shield Powerup",150,yh+100,BLACK,L_GREY,&f,1 );
}
if ( p==0 ) msg="<Esc> <PgDn>"; else
if ( p==MAX_HELP_PAGES-1 ) msg="<Esc> <PgUp>"; else msg="<Esc> <PgUp> <PgDn>";
Spr_Print( SFont,msg,(VS.mx-Spr_Strlen(SFont,msg)+1)>>1,VS.my-15,PROPORTIONAL,HORIZ,1 );
for ( wh=p, d=key=0; p==wh; )
{
if ( (key=inkey(0))==ESCAPEKEY ) break;
if ( key==PAGEUPKEY && p>0 ) p--; else
if ( key==PAGEDNKEY && p<MAX_HELP_PAGES-1 ) p++;
if ( wh==MAX_HELP_PAGES-1 )
{
waitVR();
if ( d++>3 )
{
d=0;
rect( 285,yh+27,295,yh+37,L_GREY,FILL,1 );
putimg( Toon_Beam->img+rrf,285,yh+27,1 );
if ( ++rrf>=Toon_Beam->frames ) rrf=0;
rect( 280,yh+46,310,yh+76,L_GREY,FILL,1 );
putimg( Toon_Rogue_Particle->img+rpf,280,yh+46,1 );
if ( ++rpf>=Toon_Rogue_Particle->frames ) rpf=0;
rect( 275,yh+71,310,yh+95,L_GREY,FILL,1 );
putimg( Toon_PowerUp->img+npf,275,yh+71,1 );
if ( ++npf>=16 ) npf=8;
rect( 275,yh+94,310,yh+114,L_GREY,FILL,1 );
putimg( Toon_PowerUp->img+nsf,275,yh+94,1 );
if ( ++nsf>=8 ) nsf=0;
rect( xh,135,xh+50,185,L_GREY,FILL,1 );
putimg( Toon_Shield->img+sf,xh,135,1 );
if ( ++sf>=Toon_Shield->frames ) sf=NUM_OF_SHIELDS-2;
}
}
}
}
while ( key!=ESCAPEKEY );
fadeout( &Pal,0 );
showpage( page );
fadein( &Pal,0 );
CONSUME_KEYS;
return( FALSE );
}
int Menu_High_Scores( int page )
{
Hall_Of_Fame( &High_Scores,0L,1 );
return( FALSE );
}
int Menu_Load_Game( int page )
{
char *msgs[2];
char buff[80];
int opt;
Load_Game_Flag = TRUE;
if ( (opt=Select_Game_Slot(&GSlots,FALSE,1)) >= 0 )
{
if ( Load_Level_Data(GSlots.name[opt])==0 ) return( TRUE );
msgs[0] = strsetx( buff,"Failure to load '",GSlots.name[opt],"'!",NULL );
msgs[1] = NULL;
Show_Error_Message( msgs,SFX_ERROR,0,page );
}
return( FALSE );
}
int Menu_New_Game( int page )
{
Cfg.level = 1;
Cfg.score = 0L;
Initialise_Level();
GMenu.m[SAVE_GAME_OPTION].active = GMenu.m[BACK_TO_GAME_OPTION].active = FALSE;
return( TRUE );
}
int Menu_Options( int page )
{
Game_Options( &GOptions,1 );
return( FALSE );
}
void Menu_Postdisplay( int page )
{
/* Nothing required! */
}
void Menu_Predisplay( int page )
{
int i;
Fade_Screen( MODE_320x200x256 );
Draw_Fractal_Background( 0 );
for ( i=0; i<7; i++ )
{
putimg( Toon_Logo[LogoIndex1[i]]->img,LOGO_TL_X+i*30,0,0 );
putimg( Toon_Logo[LogoIndex2[i]]->img,LOGO_BL_X+i*30,VS.my-LogoLetters[LogoIndex2[i]].h,0 );
}
fadein( &Pal,0 );
CONSUME_KEYS;
}
int Menu_Register( int page )
{
char *r="Registration", *p="Press A Key";
int wr=Spr_Strlen(SFont,r), xr=(VS.mx+1-wr)>>1, i;
FONT f;
rom_font( &f,ROM_8x8 );
Draw_Edged_Box( 0,0,VS.mx,VS.my,WHITE,GREY,L_GREY,1 );
Spr_Print( SFont,r,xr,10,PROPORTIONAL,HORIZ,1 );
line( xr-1,19,xr+wr,19,WHITE,1 );
line( xr-2,20,xr+wr+1,20,GREY,1 );
Spr_Print( SFont,p,(VS.mx-Spr_Strlen(SFont,p)+1)>>1,VS.my-15,PROPORTIONAL,HORIZ,1 );
for ( i=0; RegisterMsgs[i]; i++ )
gprintf( RegisterMsgs[i],16,43+i*10,BLACK,L_GREY,&f,1 );
fadeout( &Pal,0 );
showpage( 1 );
CONSUME_KEYS;
fadein( &Pal,0 );
Wait_For_Event( 30 );
fadeout( &Pal,0 );
showpage( page );
fadein( &Pal,0 );
CONSUME_KEYS;
return( FALSE );
}
void Menu_Soundfx( void )
{
Sfx( SFX_MENU_KEY );
}
int Menu_Save_Game( int page )
{
char *msgs[2];
char buff[80];
int opt;
Load_Game_Flag = FALSE;
if ( (opt=Select_Game_Slot(&GSlots,TRUE,1)) >= 0 )
{
if ( Save_Level_Data(GSlots.name[opt]) )
{
msgs[0] = strsetx( buff,"Failure to save '",GSlots.name[opt],"'!",NULL );
msgs[1] = NULL;
Show_Error_Message( msgs,SFX_ERROR,0,page );
}
}
return( FALSE );
}
/*======================[ Game Slot Service Routines ]========================*/
void GSlot_Postdisplay( int page )
{
fadeout( &Pal,0 );
showpage( 0 );
fadein( &Pal,0 );
CONSUME_KEYS;
}
void GSlot_Predisplay( int page )
{
char *msg=(Load_Game_Flag) ? "Load Game":"Save Game";
int l=Spr_Strlen(SFont,msg);
fadeout( &Pal,0 );
showpage( 1 );
Draw_Fractal_Background( 1 );
Spr_Print( SFont,msg,(VS.mx-l+1)>>1,33,PROPORTIONAL,HORIZ,1 );
fadein( &Pal,0 );
CONSUME_KEYS;
}
/*=====================[ High Scores Service Routines ]=======================*/
void High_Scores_Postdisplay( int page )
{
fadeout( &Pal,0 );
showpage( 0 );
fadein( &Pal,0 );
CONSUME_KEYS;
}
void High_Scores_Predisplay( int page )
{
char *msg1="High Score Table";
char *msg2="Press A Key";
if ( VS.slines ) Fade_Screen( MODE_320x200x256 ); else fadeout( &Pal,0 );
showpage( 1 );
Draw_Fractal_Background( 1 );
Spr_Print( SFont,msg1,(VS.mx+1-Spr_Strlen(SFont,msg1))>>1,5,PROPORTIONAL,HORIZ,1 );
Spr_Print( SFont,msg2,(VS.mx+1-Spr_Strlen(SFont,msg2))>>1,VS.my-16,PROPORTIONAL,HORIZ,1 );
fadein( &Pal,0 );
CONSUME_KEYS;
}
void High_Scores_Soundfx( void )
{
Sfx( SFX_FANFARE );
}
/*=====================[ Game Option Service Routines ]=======================*/
void GOptions_Music( int page )
{
if ( !Music_Flag ) SB_abort(0x02); else
{
if ( Sound_Source==SOUND_BLASTER ) SB_play_cmf("SOUNDS\\MUSIC.CMF",40,TRUE);
}
}
void GOptions_No_Sound( int page )
{
if ( No_Sound_Flag )
{
Effects_Flag = Music_Flag = FALSE;
SB_abort(0x03);
}
GOptions.o[ EFFECTS_OPTIONS_TOKEN ].active = !No_Sound_Flag;
if ( Sound_Source==SOUND_BLASTER ) GOptions.o[ MUSIC_OPTIONS_TOKEN ].active = !No_Sound_Flag;
}
void GOptions_Postdisplay( int page )
{
fadeout( &Pal,0 );
showpage( 0 );
fadein( &Pal,0 );
CONSUME_KEYS;
}
void GOptions_Predisplay( int page )
{
char *msg1="Game Options";
char *msg2="Press ESC When Done";
fadeout( &Pal,0 );
showpage( 1 );
Draw_Fractal_Background( 1 );
Spr_Print( SFont,msg1,(VS.mx+1-Spr_Strlen(SFont,msg1))>>1,5,PROPORTIONAL,HORIZ,1 );
Spr_Print( SFont,msg2,(VS.mx+1-Spr_Strlen(SFont,msg2))>>1,VS.my-16,PROPORTIONAL,HORIZ,1 );
fadein( &Pal,0 );
CONSUME_KEYS;
}
/*========================[ End Of Program File ]=============================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -