void display_minimap() { window_info *win; minimap_size = 256 * minimap_size_coefficient; float_minimap_size = 256.0 * minimap_size_coefficient; if(minimap_tiles_distance < 48) minimap_tiles_distance = 48; if(minimap_tiles_distance > 144) minimap_tiles_distance = 144; if(minimap_win < 0) { //init minimap minimap_win = create_window(win_minimap, windows_on_top?-1:game_root_win, 0, minimap_win_x, minimap_win_y, minimap_size, minimap_size+ELW_TITLE_HEIGHT, ELW_CLICK_TRANSPARENT|ELW_SHOW|ELW_TITLE_NAME|ELW_ALPHA_BORDER|ELW_SWITCHABLE_OPAQUE|ELW_DRAGGABLE); set_window_handler(minimap_win, ELW_HANDLER_DISPLAY, &display_minimap_handler); set_window_handler(minimap_win, ELW_HANDLER_CLICK, &click_minimap_handler); set_window_handler(minimap_win, ELW_HANDLER_MOUSEOVER, &mouseover_minimap_handler); set_window_handler(minimap_win, ELW_HANDLER_KEYPRESS, &keypress_minimap_handler ); win = &(windows_list.window[minimap_win]); win->owner_drawn_title_bar = 1; change_minimap(); if (!cm_valid(win->cm_id)) { win->cm_id = cm_create(cm_title_menu_str, cm_minimap_title_handler); cm_grey_line(win->cm_id, 1, 1); cm_bool_line(win->cm_id, 2, &windows_on_top, "windows_on_top"); } cm_add(win->cm_id, cm_minimap_menu_str, NULL); cm_add_region(win->cm_id, minimap_win, win->len_x/2-32, 0, 64, ELW_TITLE_HEIGHT ); cm_bool_line(win->cm_id, ELW_CM_MENU_LEN+1, &rotate_minimap, "rotate_minimap"); cm_bool_line(win->cm_id, ELW_CM_MENU_LEN+2, &pin_minimap, "pin_minimap"); cm_bool_line(win->cm_id, ELW_CM_MENU_LEN+3, &open_minimap_on_start, NULL); } else { show_window(minimap_win); select_window(minimap_win); } }
void change_map (const char *mapname) { #ifndef MAP_EDITOR remove_all_bags(); remove_all_mines(); #endif //MAP_EDITOR set_all_intersect_update_needed(main_bbox_tree); object_under_mouse=-1;//to prevent a nasty crash, while looking for bags, when we change the map #ifndef MAP_EDITOR2 #ifdef EXTRA_DEBUG ERR(); #endif close_dialogue(); // close the dialogue window if open close_storagewin(); //if storage is open, close it destroy_all_particles(); ec_delete_all_effects(); #ifdef NEW_SOUND stop_all_sounds(); #endif //NEW_SOUND missiles_clear(); if (!el_load_map(mapname)) { char error[255]; safe_snprintf(error, sizeof(error), cant_change_map, mapname); LOG_TO_CONSOLE(c_red4, error); LOG_TO_CONSOLE(c_red4, empty_map_str); LOG_ERROR(cant_change_map, mapname); load_empty_map(); } else { locked_to_console = 0; } load_map_marks(); #ifdef NEW_SOUND get_map_playlist(); setup_map_sounds(get_cur_map(mapname)); #endif // NEW_SOUND have_a_map=1; //also, stop the rain weather_clear(); if ( get_show_window (map_root_win) ) { hide_window(map_root_win); show_window(game_root_win); } #else // !MAP_EDITOR2 destroy_all_particles(); #ifdef NEW_SOUND stop_all_sounds(); #endif //NEW_SOUND if (!load_map(mapname)) { char error[255]; safe_snprintf(error, sizeof(error), cant_change_map, mapname); LOG_TO_CONSOLE(c_red4, error); LOG_TO_CONSOLE(c_red4, empty_map_str); LOG_ERROR(cant_change_map, mapname); load_empty_map(); } #ifdef NEW_SOUND get_map_playlist(); setup_map_sounds(get_cur_map(mapname)); #endif // NEW_SOUND have_a_map=1; #endif //MAP_EDITOR2 change_minimap(); #ifdef PAWN run_pawn_map_function ("change_map", "s", mapname); #endif }
void init_video() { char str[400]; int rgb_size[3]; setup_video_mode(full_screen, video_mode); /* Detect the display depth */ if(!bpp) { if ( SDL_GetVideoInfo()->vfmt->BitsPerPixel <= 8 ) { bpp = 8; } else if ( SDL_GetVideoInfo()->vfmt->BitsPerPixel <= 16 ) { bpp = 16; /* More doesn't seem to work */ } else bpp=32; } //adjust the video mode accordingly if (video_mode == 0) { //do nothing } else if(bpp==16) { if(!(video_mode%2)) video_mode-=1; } else { if(video_mode%2) video_mode+=1; } /* Initialize the display */ switch (bpp) { case 8: rgb_size[0] = 2; rgb_size[1] = 3; rgb_size[2] = 3; break; case 15: case 16: rgb_size[0] = 5; rgb_size[1] = 5; rgb_size[2] = 5; break; default: rgb_size[0] = 8; rgb_size[1] = 8; rgb_size[2] = 8; break; } // Mac OS X will always use 8-8-8-8 ARGB for 32-bit screens and 5-5-5 RGB for 16-bit screens #ifndef OSX SDL_GL_SetAttribute( SDL_GL_RED_SIZE, rgb_size[0] ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, rgb_size[1] ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, rgb_size[2] ); #endif #ifdef OSX // enable V-SYNC SDL_GL_SetAttribute( SDL_GL_SWAP_CONTROL, 1 ); #endif SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 0 ); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 24 ); SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ); #ifdef FSAA if (fsaa > 1) { SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, fsaa); glDisable(GL_MULTISAMPLE); } #endif /* FSAA */ check_gl_mode(); #ifdef OTHER_LIFE SDL_WM_SetIcon(SDL_LoadBMP("ol_icon.bmp"), NULL); #else SDL_WM_SetIcon(SDL_LoadBMP("icon.bmp"), NULL); #endif /* Set the window manager title bar */ #ifdef FSAA if (fsaa > 1) { if (!SDL_SetVideoMode(window_width, window_height, bpp, flags)) { safe_snprintf(str, sizeof(str), "Can't use fsaa mode x%d, disabling it.", fsaa); LOG_TO_CONSOLE(c_yellow1, str); LOG_WARNING("%s\n", str); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 0); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 0); fsaa = 0; } } #endif /* FSAA */ //try to find a stencil buffer (it doesn't always work on Linux) if(!SDL_SetVideoMode(window_width, window_height, bpp, flags)) { LOG_TO_CONSOLE(c_red1,no_hardware_stencil_str); LOG_ERROR("%s\n",no_hardware_stencil_str); if(bpp!=32) { LOG_TO_CONSOLE(c_grey1,suggest_24_or_32_bit); LOG_ERROR("%s\n",suggest_24_or_32_bit); } SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,16); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE,0); if(!SDL_SetVideoMode( window_width, window_height, bpp, flags)) { LOG_ERROR("%s: %s\n", fail_opengl_mode, SDL_GetError()); SDL_Quit(); exit(1); } have_stencil=0; } #ifdef WINDOWS //try to see if we get hardware acceleration, or the windows generic shit { int len; GLubyte *my_string; int have_hardware; my_string=(GLubyte *)glGetString(GL_RENDERER); if (my_string == NULL) { len = 0; have_hardware = 0; LOG_TO_CONSOLE(c_red1,"glGetString(GL_RENDERER) failed"); LOG_ERROR("%s\n","glGetString(GL_RENDERER) failed"); } else { len=strlen(my_string); have_hardware=get_string_occurance("gdi generic",my_string,len,0); } if(have_hardware != -1) { //let the user know there is a problem LOG_TO_CONSOLE(c_red1,stencil_falls_back_on_software_accel); LOG_ERROR("%s\n",stencil_falls_back_on_software_accel); //first, shut down this mode we have now. SDL_GL_SetAttribute( SDL_GL_RED_SIZE, rgb_size[0] ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, rgb_size[1] ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, rgb_size[2] ); SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 0); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 24); SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 0); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1); if(full_screen)flags=SDL_OPENGL|SDL_FULLSCREEN; SDL_SetVideoMode(window_width, window_height, bpp, flags); have_stencil=0; my_string=(GLubyte *)glGetString(GL_RENDERER); if (my_string == NULL) { len = 0; have_hardware = 0; LOG_TO_CONSOLE(c_red1,"glGetString(GL_RENDERER) failed"); LOG_ERROR("%s\n","glGetString(GL_RENDERER) failed"); } else { len=strlen(my_string); have_hardware=get_string_occurance("gdi generic",my_string,len,0); } if(have_hardware != -1) { //wtf, this really shouldn't happen.... //let's try a default mode, maybe Quake 2's mode, and pray it works LOG_TO_CONSOLE(c_red1,last_chance_str); LOG_ERROR("%s\n",last_chance_str); SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 ); SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 0); SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 24); SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, 0); SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1); flags=SDL_OPENGL|SDL_FULLSCREEN; full_screen=1; video_mode=2; window_width=640; window_height=480; bpp=32; SDL_SetVideoMode(window_width, window_height, bpp, flags); //see if it worked... my_string=(GLubyte *)glGetString(GL_RENDERER); if (my_string == NULL) { len = 0; have_hardware = 0; LOG_TO_CONSOLE(c_red1,"glGetString(GL_RENDERER) failed"); LOG_ERROR("%s\n","glGetString(GL_RENDERER) failed"); } else { len=strlen(my_string); have_hardware=get_string_occurance("gdi generic",my_string,len,0); } if(have_hardware != -1) { //wtf, this really shouldn't happen.... //let's try a default mode, maybe Quake 2's mode, and pray it works LOG_TO_CONSOLE(c_red1,software_mode_str); LOG_ERROR("%s\n",software_mode_str); } } } } #endif glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); //glDepthFunc(GL_LEQUAL); glEnable(GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glFrontFace(GL_CCW); glCullFace(GL_BACK); glEnable(GL_NORMALIZE); glClearStencil(0); #ifdef ANTI_ALIAS if (anti_alias) { glHint(GL_POINT_SMOOTH_HINT, GL_NICEST); glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST); glEnable(GL_POINT_SMOOTH); glEnable(GL_LINE_SMOOTH); glEnable(GL_POLYGON_SMOOTH); } else { glHint(GL_POINT_SMOOTH_HINT, GL_FASTEST); glHint(GL_LINE_SMOOTH_HINT, GL_FASTEST); glHint(GL_POLYGON_SMOOTH_HINT, GL_FASTEST); glDisable(GL_POINT_SMOOTH); glDisable(GL_LINE_SMOOTH); glDisable(GL_POLYGON_SMOOTH); } #endif SDL_EnableKeyRepeat(200, 100); SDL_EnableUNICODE(1); build_video_mode_array(); SDL_GL_GetAttribute(SDL_GL_STENCIL_SIZE, &have_stencil); last_texture=-1; //no active texture #ifdef OPENGL_TRACE CHECK_GL_ERRORS(); #endif //OPENGL_TRACE change_minimap(); check_options(); }