void open_pause_chat( char *text ) { set_state( CS_PAUSE ); /* clear pause_chatter */ memset( pause_chatter, 0, sizeof( pause_chatter ) ); /* clear global gui widgets */ gui_focused_widget = 0; gui_clicked_widget = 0; gui_key_widget = 0; /* use 'text' as initial chatter */ client_add_pausechatter( text, 1 ); /* gray screen */ stk_surface_gray( stk_display, 0,0,-1,-1, 1 ); /* show pauseroom */ gui_widget_show( dlg_pauseroom ); stk_display_update( STK_UPDATE_ALL ); /* disable event filter */ SDL_SetEventFilter( 0 ); /* disable client_recv which is called as time event */ gui_widget_disable_event( dlg_chatroom, GUI_TIME_PASSED ); }
/* gray screen and display a formatted text, directly update the * screen */ void display_text( StkFont *font, char *format, ... ) { int i, y, x; Text *text; char buf[512]; va_list args; va_start( args, format ); vsnprintf( buf, 512, format, args ); va_end( args ); stk_surface_gray( stk_display, 0,0,-1,-1, 2 ); text = create_text( buf, 60 ); font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_TOP; y = (stk_display->h - text->count * font->height) / 2; x = stk_display->w / 2; for ( i = 0; i < text->count; i++ ) { stk_font_write(font, stk_display, x, y, STK_OPAQUE, text->lines[i]); y += font->height; } delete_text( text ); stk_display_update( STK_UPDATE_ALL ); }
/* ==================================================================== Load theme by name or delete current theme (is done by load too so it might be used to change a theme as well.) ==================================================================== */ void theme_load( char *name ) { SDL_Surface *surf; struct stat filestat; char aux[128]; int i; printf( "Loading theme '%s'\n", name ); /* clear resources */ theme_delete(); /* set theme directory */ theme_set_dir( name ); /* load resources */ /* explosions */ exp_pic = theme_load_surf( "explosions.png" ); exp_dark_pic = theme_load_surf( "explosions_dark.png" ); /* main game font */ font = theme_load_font_fixed( "f_game.png", 32, 96, 10 ); font->align = STK_FONT_ALIGN_CENTER_X | STK_FONT_ALIGN_CENTER_Y; /* normal chat font (messages by server) */ chat_font_normal = theme_load_font_fixed( "f_small_yellow.png", 32, 96, 8 ); /* error font (messages by server) */ chat_font_error = theme_load_font_fixed( "f_small_red.png", 32, 96, 8 ); /* username font (also for server) */ chat_font_name = theme_load_font_fixed( "f_small_white.png", 32, 96, 8 ); /* main game sounds */ #ifdef AUDIO_ENABLED wav_click = theme_load_sound( "click.wav" ); wav_damn = theme_load_sound( "damn.wav" ); wav_dammit = theme_load_sound( "dammit.wav" ); wav_wontgiveup = theme_load_sound( "wontgiveup.wav" ); wav_excellent = theme_load_sound( "excellent.wav" ); wav_verygood = theme_load_sound( "verygood.wav" ); #endif /* brick pics and shadow template */ brick_pic = theme_load_surf( "bricks.png" ); /* default color key is: BLACK but you may specify a special key by adding a column of one pixel width at the end of the file */ if ( brick_pic->w & 1 ) SDL_SetColorKey( brick_pic, SDL_SRCCOLORKEY, stk_surface_get_pixel( brick_pic, brick_pic->w - 1, 0 ) ); brick_shadow = create_shadow( brick_pic, 0, 0, brick_pic->w, brick_pic->h ); /* brick destruction sound */ #ifdef AUDIO_ENABLED wav_boom = theme_load_sound( "exp.wav" ); #endif /* paddle and weapon */ paddle_pic = theme_load_surf( "paddle.png" ); SDL_SetColorKey( paddle_pic, SDL_SRCCOLORKEY, stk_surface_get_pixel( paddle_pic, 0, 0 ) ); if ( paddle_pic->w < 6 * paddle_cw ) { /* no top paddle specified so duplicate first one */ surf = stk_surface_create( SDL_SWSURFACE, paddle_pic->w*2, paddle_pic->h ); SDL_SetColorKey( surf, SDL_SRCCOLORKEY, paddle_pic->format->colorkey ); SDL_FillRect( surf, 0, paddle_pic->format->colorkey ); stk_surface_blit( paddle_pic, 0,0,-1,-1, surf, 0,0 ); stk_surface_blit( paddle_pic, 0,0,-1,-1, surf, paddle_pic->w,0 ); stk_surface_free( &paddle_pic ); paddle_pic = surf; } weapon_pic = theme_load_surf( "weapon.png" ); paddle_shadow = create_shadow( paddle_pic, 0, 0, paddle_pic->w, paddle_pic->h ); weapon_shadow = create_shadow( weapon_pic, 0, 0, weapon_pic->w, weapon_pic->h ); ammo_pic = theme_load_surf( "ammo.png" ); SDL_SetColorKey( ammo_pic, SDL_SRCCOLORKEY, 0x0 ); /* paddle sounds */ #ifdef AUDIO_ENABLED wav_expand = theme_load_sound( "expand.wav" ); wav_shrink = theme_load_sound( "shrink.wav" ); wav_frozen = theme_load_sound( "freeze.wav" ); #endif /* ball gfx */ ball_pic = theme_load_surf( "ball.png" ); SDL_SetColorKey( ball_pic, SDL_SRCCOLORKEY, stk_surface_get_pixel( ball_pic, 0, 0 ) ); ball_shadow = create_shadow( ball_pic, 0, 0, ball_w, ball_h ); /* ball sounds */ #ifdef AUDIO_ENABLED wav_reflect_brick = theme_load_sound( "reflect_brick.wav" ); wav_reflect_paddle = theme_load_sound( "reflect_paddle.wav" ); wav_attach = theme_load_sound( "attach.wav" ); #endif /* shot gfx */ shot_pic = theme_load_surf( "shot.png" ); shot_shadow = create_shadow( shot_pic, 0, 0, shot_w, shot_h ); #ifdef AUDIO_ENABLED wav_shot = theme_load_sound( "shot.wav" ); #endif /* extra pic */ extra_pic = theme_load_surf( "extras.png" ); SDL_SetColorKey( extra_pic, 0, 0 ); /* default color key is: disabled but you may specify a special key by adding a column of one pixel width at the end of the file */ if ( extra_pic->w & 1 ) SDL_SetColorKey( extra_pic, SDL_SRCCOLORKEY, stk_surface_get_pixel( extra_pic, extra_pic->w - 1, 0 ) ); extra_shadow = create_shadow( extra_pic, 0, 0, extra_pic->w, extra_pic->h ); /* extra sounds */ #ifdef AUDIO_ENABLED wav_score = theme_load_sound( "score.wav" ); wav_metal = theme_load_sound( "metal.wav" ); wav_speedup = theme_load_sound( "speedup.wav" ); wav_speeddown = theme_load_sound( "speeddown.wav" ); wav_std = theme_load_sound( "standard.wav" ); wav_wall = theme_load_sound( "wall.wav" ); wav_joker = theme_load_sound( "joker.wav" ); wav_goldshower = theme_load_sound( "goldshower.wav" ); wav_chaos = theme_load_sound( "chaos.wav" ); wav_darkness = theme_load_sound( "darkness.wav" ); wav_ghost = theme_load_sound( "ghost.wav" ); wav_timeadd = theme_load_sound( "timeadd.wav" ); wav_expl_ball = theme_load_sound( "expl_ball.wav" ); wav_weak_ball = theme_load_sound( "weak_ball.wav" ); wav_bonus_magnet = theme_load_sound( "bonus_magnet.wav" ); wav_malus_magnet = theme_load_sound( "malus_magnet.wav" ); wav_disable = theme_load_sound( "disable.wav" ); #endif /* shine pic */ shine_pic = theme_load_surf( "shine.png" ); /* chatroom */ cr_up = theme_load_surf( "scroll_up.png" ); cr_down = theme_load_surf( "scroll_down.png" ); cr_track = theme_load_surf( "scroll_track.png" ); cr_wallpaper = theme_load_surf( "cr_back.png" ); SDL_SetColorKey( cr_wallpaper, 0,0 ); /* frame box */ fr_hori = theme_load_surf( "fr_hori.png" ); fr_vert = theme_load_surf( "fr_vert.png" ); fr_luc = theme_load_surf( "fr_luc.png" ); fr_llc = theme_load_surf( "fr_llc.png" ); fr_ruc = theme_load_surf( "fr_ruc.png" ); fr_rlc = theme_load_surf( "fr_rlc.png" ); /* frame */ theme_load_frame(); /* wall */ sprintf( theme_path, "%s/floor.png", theme_dir ); if ( stat( theme_path, &filestat ) == -1 ) { /* build default floor */ wall_pic = stk_surface_create( SDL_SWSURFACE, stk_display->w - 2 * BRICK_WIDTH, BRICK_HEIGHT ); /* bricks must have been loaded at this point! */ for ( i = 0; i < MAP_WIDTH - 2; i++ ) stk_surface_blit( brick_pic, 0, 0, BRICK_WIDTH, BRICK_HEIGHT, wall_pic, i * BRICK_WIDTH, 0 ); } else { /* load floor */ wall_pic = theme_load_surf( "floor.png" ); } /* backgrounds */ theme_load_bkgnds(); /* build nuke bkgnd */ nuke_bkgnd = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); surf = stk_surface_load( SDL_SWSURFACE, "nukeback.png" ); stk_surface_apply_wallpaper( nuke_bkgnd, 0,0,-1,-1, surf, 128 ); stk_surface_free( &surf ); stk_surface_gray( nuke_bkgnd, 0,0,-1,-1, 0 ); /* manager */ mbkgnd = theme_load_surf( "menuback.png" ); SDL_SetColorKey( mbkgnd, 0, 0 ); mfont = theme_load_font_fixed( "f_small_yellow.png", 32, 96, 8 ); mhfont = theme_load_font_fixed( "f_white.png", 32, 96, 10 ); mcfont = theme_load_font_fixed( "f_yellow.png", 32, 96, 10 ); #ifdef AUDIO_ENABLED wav_menu_click = theme_load_sound( "menu_click.wav" ); wav_menu_motion = theme_load_sound( "menu_motion.wav" ); #endif /* add version to background */ mfont->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_BOTTOM; sprintf( aux, "v%s", VERSION ); stk_font_write( mfont, mbkgnd, mbkgnd->w - 4, stk_display->h - 4 - mfont->height, STK_OPAQUE, aux ); stk_font_write( mfont, mbkgnd, mbkgnd->w - 4, stk_display->h - 4, STK_OPAQUE, "http://lgames.sf.net" ); /* charts */ /* load resources */ cfont = theme_load_font_fixed( "f_small_yellow.png", 32, 96, 8 ); chfont = theme_load_font_fixed( "f_small_white.png", 32, 96, 8 ); ccfont = theme_load_font_fixed( "f_yellow.png", 32, 96, 10 ); /* warp picture */ warp_pic = theme_load_surf( "warp.png" ); }
int confirm( StkFont *font, char *str, int type ) { SDL_Event event; int go_on = 1; int ret = 0; SDL_Surface *buffer = stk_surface_create( SDL_SWSURFACE, stk_display->w, stk_display->h ); SDL_SetColorKey(buffer, 0, 0); #ifdef AUDIO_ENABLED stk_sound_play( wav_click ); #endif event_clear_sdl_queue(); stk_surface_blit( stk_display, 0,0,-1,-1, buffer, 0,0 ); if ( type == CONFIRM_PAUSE ) stk_surface_gray( stk_display, 0,0,-1,-1,0 ); else draw_confirm_screen( font, buffer, str ); stk_display_update( STK_UPDATE_ALL ); while (go_on && !stk_quit_request) { SDL_WaitEvent(&event); /* TEST */ switch ( event.type ) { case SDL_QUIT: stk_quit_request = 1; break; case SDL_MOUSEBUTTONUP: if ( type == CONFIRM_ANY_KEY ) { ret = 1; go_on = 0; } /* else if ( type == CONFIRM_YES_NO ) { if ( event.button.button == LEFT_BUTTON ) ret = 1; else ret = 0; go_on = 0; }*/ break; case SDL_KEYDOWN: if ( type == CONFIRM_ANY_KEY ) { ret = 1; go_on = 0; break; } else if ( type == CONFIRM_PAUSE ) { if ( event.key.keysym.sym == SDLK_p ) { ret = 1; go_on = 0; break; } else if ( event.key.keysym.sym == SDLK_f ) { config.fullscreen = !config.fullscreen; stk_display_apply_fullscreen( config.fullscreen ); draw_confirm_screen( font, buffer, str ); stk_display_update( STK_UPDATE_ALL ); } } else switch (event.key.keysym.sym) { case SDLK_y: go_on = 0; ret = 1; break; case SDLK_ESCAPE: case SDLK_n: go_on = 0; ret = 0; default: break; } break; } } #ifdef AUDIO_ENABLED stk_sound_play( wav_click ); #endif stk_surface_blit( buffer, 0,0,-1,-1, stk_display, 0,0 ); stk_display_update( STK_UPDATE_ALL ); SDL_FreeSurface(buffer); /* reset the relative position so paddle wont jump */ SDL_GetRelativeMouseState(0,0); return ret; }