diff --git a/data/translations/english.cfg b/data/translations/english.cfg index 5e10af0a55b..c1e4fccfb44 100644 --- a/data/translations/english.cfg +++ b/data/translations/english.cfg @@ -145,6 +145,9 @@ save_game="Save Game" end_turn="End Turn" full_or_windowed="Full Screen or Windowed?" +choose_resolution="Choose Resolution" +video_mode="Video Mode" +video_mode_unavailable="There are no alternative video modes available" video_mode_fail="The video mode could not be changed. Your window manager must be set to 16 bits per pixel to run the game in windowed mode. Your display must support 1024x768x16 to run the game full screen." display_type="Display:" full_screen="Full Screen" diff --git a/src/display.cpp b/src/display.cpp index bacd27f9c20..68cada0bbcb 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -150,7 +150,7 @@ gamemap::location display::hex_clicked_on(int xclick, int yclick) const double xtile = xpos_/(zoom_*0.75) + static_cast(xclick)/(zoom_*0.75) - 0.25; const double ytile = ypos_/zoom_ + static_cast(yclick)/zoom_ - + (is_odd(xtile) ? -0.5:0.0); + + (is_odd(int(xtile)) ? -0.5:0.0); return gamemap::location(static_cast(xtile),static_cast(ytile)); } diff --git a/src/game.hpp b/src/game.hpp index 26379db94af..71ba1082103 100644 --- a/src/game.hpp +++ b/src/game.hpp @@ -13,7 +13,4 @@ #ifndef GAME_H_INCLUDED #define GAME_H_INCLUDED -#define is_odd(x) (static_cast(x) & 1) -#define is_even(x) (!is_odd(x)) - #endif diff --git a/src/map.cpp b/src/map.cpp index 9cb202638fc..a9685a99671 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -12,6 +12,7 @@ */ #include "game.hpp" #include "map.hpp" +#include "util.hpp" #include #include diff --git a/src/pathfind.cpp b/src/pathfind.cpp index 4b5ff0380c9..1dae927e96e 100644 --- a/src/pathfind.cpp +++ b/src/pathfind.cpp @@ -12,6 +12,7 @@ */ #include "game.hpp" #include "pathfind.hpp" +#include "util.hpp" #include #include @@ -155,7 +156,7 @@ void find_routes(const gamemap& map, const game_data& gamedata, } //iterate over all adjacent tiles - for(int i = 0; i != locs.size(); ++i) { + for(size_t i = 0; i != locs.size(); ++i) { const gamemap::location& currentloc = locs[i]; //check if the adjacent location is off the board diff --git a/src/playturn.cpp b/src/playturn.cpp index f2ac85dc4b3..3fbb2b9f450 100644 --- a/src/playturn.cpp +++ b/src/playturn.cpp @@ -137,7 +137,7 @@ void play_turn(game_data& gameinfo, game_state& state_of_game, std::vector units_list; - for(int a = 0; a != attacks.size(); ++a) { + for(size_t a = 0; a != attacks.size(); ++a) { const battle_stats stats = evaluate_battle_stats( map,selected_hex,hex, a,units,status,gameinfo); @@ -193,7 +193,7 @@ void play_turn(game_data& gameinfo, game_state& state_of_game, string_table["choose_weapon"]+":\n", gui::OK_CANCEL,&items,&units_list); - if(res >= 0 && res < attacks.size()) { + if(size_t(res) < attacks.size()) { undo_stack.clear(); redo_stack.clear(); @@ -208,7 +208,7 @@ void play_turn(game_data& gameinfo, game_state& state_of_game, enemy = units.find(hex); if(u == units.end() || enemy == units.end() || - res >= u->second.attacks().size()) + size_t(res) >= u->second.attacks().size()) continue; gui.invalidate_all(); diff --git a/src/preferences.cpp b/src/preferences.cpp index c57499fe83e..02c47caf034 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -275,7 +275,7 @@ void show_preferences_dialog(display& disp) grid_button.set_x(slider_left); grid_button.set_y(sound_pos + 80 + 100); - gui::button resolution_button(disp,"Video Mode"); + gui::button resolution_button(disp,string_table["video_mode"]); resolution_button.set_x(slider_left); resolution_button.set_y(sound_pos + 80 + 150); @@ -363,8 +363,10 @@ void show_video_mode_dialog(display& disp) CVideo& video = disp.video(); SDL_Rect** modes = SDL_ListModes(video.getSurface()->format,FULL_SCREEN); - if(reinterpret_cast(modes) == -1 || modes == NULL) + if(reinterpret_cast(modes) == -1 || modes == NULL) { + gui::show_dialog(disp,NULL,"",string_table["video_mode_unavailable"]); return; + } for(int i = 0; modes[i] != NULL; ++i) { if(modes[i]->w >= 1024 && modes[i]->h >= 768) { @@ -380,12 +382,15 @@ void show_video_mode_dialog(display& disp) } } - if(resolutions.size() < 2) + if(resolutions.size() < 2) { + gui::show_dialog(disp,NULL,"",string_table["video_mode_unavailable"]); return; + } - const int result = gui::show_dialog(disp,NULL,"","Choose Resolution", + const int result = gui::show_dialog(disp,NULL,"", + string_table["choose_resolution"], gui::MESSAGE,&options); - if(result >= 0 && result < resolutions.size()) { + if(size_t(result) < resolutions.size()) { set_resolution(resolutions[result]); } } diff --git a/src/replay.cpp b/src/replay.cpp index 88d7b2864a7..0f1a31f43f8 100644 --- a/src/replay.cpp +++ b/src/replay.cpp @@ -294,7 +294,7 @@ bool do_replay(display& disp, const gamemap& map, const game_data& gameinfo, const std::vector& options = u->second.type().advances_to(); - if(val < 0 || val >= options.size()) { + if(size_t(val) >= options.size()) { std::cerr << "illegal advancement type\n"; throw replay::error(); } @@ -436,7 +436,7 @@ bool do_replay(display& disp, const gamemap& map, const game_data& gameinfo, throw replay::error(); } - if(weapon_num < 0 || weapon_num >= u->second.attacks().size()) { + if(size_t(weapon_num) >= u->second.attacks().size()) { std::cerr << "illegal weapon type in attack\n"; throw replay::error(); } diff --git a/src/sdl_utils.cpp b/src/sdl_utils.cpp index d4bbc1c3c2c..b6a42c1f852 100644 --- a/src/sdl_utils.cpp +++ b/src/sdl_utils.cpp @@ -15,6 +15,7 @@ #include "game.hpp" #include "sdl_utils.hpp" +#include "util.hpp" SDL_Surface* scale_surface(SDL_Surface* surface, int w, int h) { diff --git a/src/unit.cpp b/src/unit.cpp index db7d4f278d0..6f143a9d989 100644 --- a/src/unit.cpp +++ b/src/unit.cpp @@ -42,9 +42,9 @@ bool compare_unit_values::operator()(const unit& a, const unit& b) const } //constructor for reading a unit -unit::unit(game_data& data, config& cfg) : moves_(0), facingLeft_(true), +unit::unit(game_data& data, config& cfg) : state_(STATE_NORMAL), + moves_(0), facingLeft_(true), recruit_(false), - state_(STATE_NORMAL), guardian_(false) { read(data,cfg); @@ -52,25 +52,25 @@ unit::unit(game_data& data, config& cfg) : moves_(0), facingLeft_(true), //constructor for creating a new unit unit::unit(const unit_type* t, int side, bool use_traits) : - type_(t), facingLeft_(side != 1), state_(STATE_NORMAL), + type_(t), state_(STATE_NORMAL), hitpoints_(t->hitpoints()), - experience_(0), side_(side), moves_(0), - recruit_(false), attacks_(t->attacks()), - backupAttacks_(t->attacks()), maxHitpoints_(t->hitpoints()), - backupMaxHitpoints_(t->hitpoints()), - maxMovement_(t->movement()), - backupMaxMovement_(t->movement()), + backupMaxHitpoints_(t->hitpoints()), experience_(0), maxExperience_(t->experience_needed()), backupMaxExperience_(t->experience_needed()), + side_(side), moves_(0), facingLeft_(side != 1), + maxMovement_(t->movement()), + backupMaxMovement_(t->movement()), + recruit_(false), attacks_(t->attacks()), + backupAttacks_(t->attacks()), guardian_(false) { //calculate the unit's traits std::vector traits = t->possible_traits(); - const int num_traits = 2; + const size_t num_traits = 2; if(use_traits && traits.size() >= num_traits) { std::set chosen_traits; - for(int i = 0; i != num_traits; ++i) { + for(size_t i = 0; i != num_traits; ++i) { int num = recorder.get_random()%(traits.size()-i); while(chosen_traits.count(num)) { ++num; @@ -98,18 +98,19 @@ unit::unit(const unit_type* t, int side, bool use_traits) : //constructor for advancing a unit from a lower level unit::unit(const unit_type* t, const unit& u) : - type_(t), facingLeft_(u.facingLeft_), state_(STATE_NORMAL), + type_(t), state_(STATE_NORMAL), hitpoints_(t->hitpoints()), - experience_(0), side_(u.side()), moves_(u.moves_), - recruit_(u.recruit_), description_(u.description_), - role_(u.role_), statusFlags_(u.statusFlags_), - attacks_(t->attacks()), backupAttacks_(t->attacks()), maxHitpoints_(t->hitpoints()), backupMaxHitpoints_(t->hitpoints()), - maxMovement_(t->movement()), - backupMaxMovement_(t->movement()), + experience_(0), maxExperience_(t->experience_needed()), backupMaxExperience_(t->experience_needed()), + side_(u.side()), moves_(u.moves_), facingLeft_(u.facingLeft_), + maxMovement_(t->movement()), + backupMaxMovement_(t->movement()), + description_(u.description_), recruit_(u.recruit_), + role_(u.role_), statusFlags_(u.statusFlags_), + attacks_(t->attacks()), backupAttacks_(t->attacks()), modifications_(u.modifications_), traitsDescription_(u.traitsDescription_), guardian_(false) diff --git a/src/unit.hpp b/src/unit.hpp index 363f9fa38f5..22cb06ec35c 100644 --- a/src/unit.hpp +++ b/src/unit.hpp @@ -98,8 +98,6 @@ public: private: const unit_type* type_; - bool facingLeft_; - enum STATE { STATE_NORMAL, STATE_ATTACKING, STATE_DEFENDING }; STATE state_; const attack_type* attackType_; @@ -114,6 +112,7 @@ private: //is set to the number of moves left, and -1 if the unit has attacked int moves_; + bool facingLeft_; int maxMovement_, backupMaxMovement_; std::string description_; diff --git a/src/unit_types.cpp b/src/unit_types.cpp index 5e45709652d..c8aa6133cf2 100644 --- a/src/unit_types.cpp +++ b/src/unit_types.cpp @@ -307,7 +307,7 @@ const std::map& unit_movement_type::damage_table() cons unit_type::unit_type(config& cfg, const movement_type_map& mv_types, std::vector& traits) - : cfg_(cfg), possibleTraits_(traits), alpha_(1.0) + : cfg_(cfg), alpha_(1.0), possibleTraits_(traits) { if(has_ability("heals")) { heals_ = game_config::healer_heals_per_turn; diff --git a/src/util.hpp b/src/util.hpp index 83dca2771cc..073195fcba6 100644 --- a/src/util.hpp +++ b/src/util.hpp @@ -29,4 +29,10 @@ T& maximum(T& a, T& b) { return a < b ? b : a; } template const T& maximum(const T& a, const T& b) { return a < b ? b : a; } +template +inline bool is_odd(T num) { return (static_cast(num)&1) == 1; } + +template +inline bool is_even(T num) { return !is_odd(num); } + #endif diff --git a/src/widgets/button.cpp b/src/widgets/button.cpp index 3a3f5114754..24638004f04 100644 --- a/src/widgets/button.cpp +++ b/src/widgets/button.cpp @@ -24,8 +24,9 @@ const int vertical_padding = 10; button::button(display& disp, const std::string& label, button::TYPE type, const std::string& button_image_name) : label_(label), display_(&disp), - x_(0), y_(0), button_(true), state_(UNINIT), - image_(NULL), pressedImage_(NULL), type_(type) + image_(NULL), pressedImage_(NULL), + x_(0), y_(0), button_(true), + state_(UNINIT), type_(type) { SDL_Surface* button_image = disp.getImage("buttons/button.png",display::UNSCALED); diff --git a/src/widgets/slider.cpp b/src/widgets/slider.cpp index 21d3d3a2591..1fa5b5009a3 100644 --- a/src/widgets/slider.cpp +++ b/src/widgets/slider.cpp @@ -20,8 +20,8 @@ namespace gui { slider::slider(display& disp, SDL_Rect& rect, double value) : disp_(disp), image_(disp.getImage("buttons/slider.png",display::UNSCALED)), selectedImage_(disp.getImage("buttons/slider-selected.png",display::UNSCALED)), - area_(rect), buffer_(NULL), value_(value), drawn_(false), - clicked_(true), dragging_(false), highlight_(false) + buffer_(NULL), area_(rect), value_(value), drawn_(false), + highlight_(false), clicked_(true), dragging_(false) { background_changed(); diff --git a/src/widgets/textbox.cpp b/src/widgets/textbox.cpp index e2c6647aee7..883b3e5d97e 100644 --- a/src/widgets/textbox.cpp +++ b/src/widgets/textbox.cpp @@ -23,9 +23,10 @@ const int font_size = 16; textbox::textbox(display& disp, int width, const std::string& text) : disp_(disp), text_(text), firstOnScreen_(0), - cursor_(text.size()), height_(-1), width_(width), x_(-1), y_(-1), + cursor_(text.size()), height_(-1), width_(width), + buffer_(NULL), x_(-1), y_(-1), lastLArrow_(false), lastRArrow_(false), - lastDelete_(false), lastBackspace_(false), buffer_(NULL) + lastDelete_(false), lastBackspace_(false) { std::fill(previousKeyState_, previousKeyState_+CHAR_LENGTH,false); @@ -83,7 +84,7 @@ void textbox::draw() const static const SDL_Rect clip = {0,0,1024,768}; //draw the text - for(int i = firstOnScreen_; i < text_.size(); ++i) { + for(size_t i = firstOnScreen_; i < text_.size(); ++i) { str[0] = text_[i]; const SDL_Rect area = font::draw_text(NULL,clip,font_size,font::NORMAL_COLOUR,str,0,0);