Example #1
0
/*
====================================================================
The frame is a bit complex to be done.
====================================================================
*/
void theme_load_frame()
{
    Uint32 ckey;

    /* load resources */
    frame_left = theme_load_surf( "fr_left.png" );
    frame_top = theme_load_surf( "fr_top.png" );
    frame_right = theme_load_surf( "fr_right.png" );
    /* get colorkey */
    ckey = stk_surface_get_pixel( frame_right, frame_right->w - 1, 0 );
    SDL_SetColorKey( frame_left, SDL_SRCCOLORKEY, ckey );
    SDL_SetColorKey( frame_top, SDL_SRCCOLORKEY, ckey );
    SDL_SetColorKey( frame_right, SDL_SRCCOLORKEY, ckey );
    /* build shadows */
    frame_left_shadow = create_shadow( frame_left, 0, 0, frame_left->w, frame_left->h );
    frame_top_shadow = create_shadow( frame_top, 0, 0, frame_top->w, frame_top->h );
    frame_right_shadow = create_shadow( frame_right, 0, 0, frame_right->w, frame_right->h );
        
    /* build the columns for multiplayer */
    frame_mp_left = theme_load_surf( "fr_mp_left.png" );
    frame_mp_right = theme_load_surf( "fr_mp_right.png" );
    SDL_SetColorKey( frame_mp_left, SDL_SRCCOLORKEY, ckey );
    SDL_SetColorKey( frame_mp_right, SDL_SRCCOLORKEY, ckey );
    frame_mp_left_shadow = create_shadow( frame_mp_left, 0, 0, frame_mp_left->w, frame_mp_left->h );
    frame_mp_right_shadow = create_shadow( frame_mp_right, 0, 0, frame_mp_right->w, frame_mp_right->h );
    
    /* load other resources */
    lamps = theme_load_surf( "life.png" );
    display_font = theme_load_font_fixed( "f_frame.png", 32, 96, 8 );
    display_font->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_CENTER_Y;
    display_highlight_font = theme_load_font_fixed( "f_small_white.png", 32, 96, 8 );
    display_highlight_font->align = STK_FONT_ALIGN_RIGHT | STK_FONT_ALIGN_CENTER_Y;
	
	/* waves */
#ifdef AUDIO_ENABLED
    wav_life_up = theme_load_sound( "gainlife.wav" );
    wav_life_down = theme_load_sound( "looselife.wav" );
#endif
}
Example #2
0
/*
====================================================================
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" );
}
Example #3
0
void render(void) {
	float m[16],im[16];
	
	create_shadow();
	
	glClearColor(0,0,0,0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
	gluPerspective(45,4.0 / 3.0,0.5,100);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
	gluLookAt(camera[0],camera[1],camera[2], mesh[0],mesh[1],mesh[2], 0,0,1);
    glLightfv(GL_LIGHT0,GL_POSITION,light);
	
	/* light */
	glBegin(GL_POINTS);
	glVertex3fv(light);
	glEnd();
	
	/* meshes */
	glEnable(GL_LIGHTING);
	glPushMatrix();
	glTranslatef(mesh[0],mesh[1],mesh[2]);
	glRotatef(angle,0,0,1);
	glRotatef(angle / 3,1,0,0);
	glCallList(mesh_id);
	glPopMatrix();
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D,texture_id);
	glCallList(ground_id);
	glDisable(GL_TEXTURE_2D);
	glDisable(GL_LIGHTING);
	
	/* shadow */
	glEnable(GL_TEXTURE_GEN_S);
	glEnable(GL_TEXTURE_GEN_T);
	glEnable(GL_TEXTURE_GEN_R);
	glEnable(GL_TEXTURE_GEN_Q);
	glGetFloatv(GL_MODELVIEW_MATRIX,m);
	m_inverse(m,im);
	glMatrixMode(GL_TEXTURE);
	glLoadIdentity();
	glTranslatef(0.5,0.5,0);
	glScalef(0.5,0.5,1.0);
	glOrtho(-1,1,-1,1,-1,1);
	gluLookAt(light[0],light[1],light[2], mesh[0],mesh[1],mesh[2], 0,0,1);
    glMultMatrixf(im);
	
    glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D,shadow_id);
	glEnable(GL_BLEND);
	glBlendFunc(GL_DST_COLOR,GL_SRC_COLOR);
    glCallList(ground_id);
	glDisable(GL_BLEND);
	glDisable(GL_TEXTURE_2D);
	
	glLoadIdentity();
	glMatrixMode(GL_MODELVIEW);
	glDisable(GL_TEXTURE_GEN_S);
	glDisable(GL_TEXTURE_GEN_T);
	glDisable(GL_TEXTURE_GEN_R);
	glDisable(GL_TEXTURE_GEN_Q);
	
	SDL_GL_SwapBuffers();
}