merged syncpoint_gettext1_3 from trunk

This commit is contained in:
Yann Dirson 2004-06-29 20:40:09 +00:00
parent 205fd7eb12
commit 508df62a2b
17 changed files with 4134 additions and 3184 deletions

View file

@ -1,19 +1,42 @@
CVS HEAD:
Version 0.7.11:
* various help browser improvements
* user interface improvements
* improved clipboard functions and support for X11
* scenario balancing for 'Heir to the Throne' campaign:
* Scepter of Fire
* A Choice Must Be Made
* Elven Council
* Home North Elves
* Swamp of Dread
* Valley of Statues
* multiplayer improvements:
* chat log
* allowed spaces in usernames
* new map: Battle for Weslin Bridge
* new map: Forest of Fear
* clipboard support for X11
* new rightside panel
* improved lite buttons
* improved clipboard functions
* various help browser improvements
* new map: Castles
* translation updates:
* hungarian
* made The Eastern Invasion campaign translatable
* added icons for preferences and multiplayer dialogs
* fixed crash when loading an empty map
* fixed transition problems with forests
* fixed missing multiplayer map: Castles
* fixed wesnothd crashes
* fixed underlining bug
* fixed bugs where some objects were not working properly
* fixed human village not fitting within the mask
* fixed clashing msg ids
* fixed isolated keeps having void graphics
* fixed tile overlays not displaying in grey if the tile is out of range of the selected unit's movement
* fixed bugs with roles not working properly
* fixed coherence of usage for elves:
* Archer, Marksman, Sharpshooter -> archer
* Ranger, Avenger -> mixed fighter
* Hero, Captain, Champion, Marshal -> fighter
* non-editable multi-line textboxes can have areas of text highlighted (and thus copied and pasted)
* support for defensive animations
* tweaks to terrain graphic ordering
* added engine support for max-level units advancing further
* code refactoring
Version 0.7.10:

View file

@ -5,7 +5,7 @@
#######################################################################
AC_PREREQ([2.57])
AC_INIT([Battle for Wesnoth], [0.7.11-CVS], [davidnwhite@optusnet.com.au], [wesnoth])
AC_INIT([Battle for Wesnoth], [0.7.12-CVS], [davidnwhite@optusnet.com.au], [wesnoth])
AC_REVISION([$Revision$])

View file

@ -80,7 +80,7 @@ id=era_default
[/multiplayer_side]
[multiplayer_side]
name=&drake-fighter.png,Drakes
name=&drake-warrior.png,Drakes
type=Drake Warrior
recruit=Drake Fighter,Drake Slave,Drake Petit,Drake Burner,Drake Mage,Drake Clasher
terrain_liked=hm
@ -155,7 +155,7 @@ id=era_classic
[/multiplayer_side]
[multiplayer_side]
name=&drake-fighter.png,Drakes
name=&drake-warrior.png,Drakes
type=Drake Warrior
recruit=Drake Fighter,Drake Slave,Drake Petit,Drake Burner,Drake Mage,Drake Clasher
terrain_liked=hm
@ -228,4 +228,15 @@ id=era_heroes
recruitment_pattern=fighter,fighter,fighter,archer
[/ai]
[/multiplayer_side]
[multiplayer_side]
name=&drake-warrior.png,Drakes
type=Drake Warrior
recruit=Drake Fighter,Drake Warrior,Drake Guard,Drake Slave,Drake Worker,Drake Petit,Drake Beak,Drake Burner,Fire Drake,Drake Mage,Drake Clasher,Drake Slasher
terrain_liked=hm
[ai]
recruitment_pattern=fighter,fighter,archer,scout
[/ai]
[/multiplayer_side]
[/era]

View file

@ -109,6 +109,20 @@
K
#enddef
# Default keep floor. This is a kludgy hack.
[terrain_graphics]
[tile]
x=0
y=0
type={KEEP_TILE}
# not_flag=terrain-base
# set_flag=terrain-base
[image]
z_index=-99
name=dirt
[/image]
[/tile]
[/terrain_graphics]
# Castle floor tiles.
{CASTLE_FLOOR C {KEEP_TILE} castle}
{CASTLE_FLOOR n {KEEP_TILE} dirt}
@ -116,6 +130,7 @@ K
{BUILDING_FLAG {KEEP_TILE} tent keep-of-n} # Keeps flagged "keep-of-n" should have a tent
{CASTLE_AND_COMPOSED_KEEP C {KEEP_TILE} castle keep}
#{CASTLE_AND_SIMPLE_KEEP C {KEEP_TILE} gravewall}
{CASTLE_AND_SIMPLE_KEEP n {KEEP_TILE} encampment}
#{BUILDING_PROBABILITY n tent1 30}

View file

@ -64,6 +64,8 @@
x=0
y=0
type={CASTLE}
# not_flag=terrain-base
# set_flag=terrain-base
[image]
z_index=-99
name={IMAGE}
@ -75,6 +77,8 @@
x=0
y=0
type={KEEP}
# not_flag=terrain-base
# set_flag=terrain-base
has_flag=keep-of-{CASTLE}
[image]
z_index=-99

View file

@ -177,14 +177,12 @@ height=600
yanchor=fixed
[/time_of_day]
[comment]
[observers]
font_size=12
rect=156,4,172,20
rect=1004,3,1020,19
xanchor=proportional
yanchor=fixed
[/observers]
[/comment]
#put the side playing indicator next to the turn indicator
[side_playing]
@ -252,7 +250,7 @@ height=600
[/comment]
[position]
font_size=12
rect=895,4,1020,20
rect=855,4,1000,20
xanchor=proportional
yanchor=fixed
[/position]
@ -518,14 +516,12 @@ height=768
yanchor=fixed
[/time_of_day]
[comment]
[observers]
font_size=12
rect=156,4,172,20
rect=1004,3,1020,19
xanchor=proportional
yanchor=fixed
[/observers]
[/comment]
#put the side playing indicator next to the turn indicator
[side_playing]
@ -591,7 +587,7 @@ height=768
[/terrain]
[position]
font_size=12
rect=895,4,1020,20
rect=895,4,1000,20
xanchor=proportional
yanchor=fixed
[/position]

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -3,10 +3,11 @@ name=Drake Burner
race=drake
image=drake-burner.png
image_defensive=drake-burner-defend.png
image_moving=drake-burner-flying.png
hitpoints=48
movement_type=drakefly
movement=5
experience=56
experience=54
level=1
alignment=neutral
advanceto=Fire Drake

View file

@ -6,11 +6,10 @@ image_defensive=drake-clasher-defend.png
hitpoints=45
movement_type=drakefoot
movement=6
experience=45
experience=46
level=1
alignment=neutral
advanceto=null
#advanceto=Drake Dualclash
advanceto=Drake Slasher
cost=19
usage=fighter
unit_description=""

View file

@ -3,10 +3,11 @@ name=Drake Fighter
race=drake
image=drake-fighter.png
image_defensive=drake-fighter-defend.png
image_moving=drake-fighter-flying.png
hitpoints=45
movement_type=drakefly
movement=5
experience=50
experience=48
level=1
alignment=neutral
advanceto=Drake Warrior,Drake Guard

View file

@ -3,6 +3,7 @@ name=Drake Warrior
race=drake
image=drake-warrior.png
image_defensive=drake-warrior-defend.png
image_moving=drake-warrior-flying.png
hitpoints=50
movement_type=drakefly
movement=5

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 2 KiB

View file

@ -26,7 +26,7 @@ namespace game_config
int recall_cost = 20;
int kill_experience = 8;
int leadership_bonus = 25;
const std::string version = "0.7.11-CVS";
const std::string version = "0.7.12-CVS";
bool debug = false, editor = false;
std::string game_icon = "wesnoth-icon.png", game_title, game_logo, title_music;

View file

@ -47,6 +47,7 @@ namespace {
const int menu_font_size = 14;
const int title_size = 18;
const int title2_size = 15;
const int box_width = 2;
const int normal_font_size = 12;
const unsigned max_history = 100;
const std::string topic_img = "help/topic.png";
@ -202,8 +203,8 @@ help_manager::help_manager(const config *cfg, game_data *gameinfo) {
help_manager::~help_manager() {
game_config = NULL;
game_info = NULL;
toplevel = section();
hidden_sections = section();
toplevel.clear();
hidden_sections.clear();
}
bool section_is_referenced(const std::string &section_id, const config &cfg) {
@ -716,7 +717,7 @@ void section::clear() {
help_menu::help_menu(display& disp, const section &toplevel, int max_height)
: menu(disp, empty_string_vector, false, max_height), disp_(disp),
toplevel_(toplevel), chosen_topic_(NULL), internal_width_(0), selected_item_(&toplevel, ""),
clicked_(false) {
selected_(false) {
bg_backup();
update_visible_items(toplevel_);
display_visible_items();
@ -806,10 +807,16 @@ void help_menu::handle_event(const SDL_Event &event) {
if (mousex < get_rect().x + item_area_width()) {
// See to that only clicks on items are noticed, not
// scrollbar clicks.
clicked_ = true;
selected_ = true;
}
}
}
else if (event.type == SDL_KEYDOWN) {
if (event.key.keysym.sym == SDLK_RETURN) {
// Select items on return press too.
selected_ = true;
}
}
menu::handle_event(event);
}
}
@ -875,8 +882,8 @@ int help_menu::process(int x, int y, bool button,bool up_arrow,bool down_arrow,
if (!visible_items_.empty() && selection() >= 0
&& (unsigned)selection() < visible_items_.size()) {
selected_item_ = visible_items_[selection()];
if (clicked_) {
clicked_ = false;
if (selected_) {
selected_ = false;
if (selected_item_.sec != NULL) {
// Open or close a section if it is clicked.
expanded(*selected_item_.sec) ? contract(*selected_item_.sec)
@ -958,21 +965,22 @@ void help_text_area::show_topic(const topic &t) {
help_text_area::item::item(shared_sdl_surface surface, int x, int y, const std::string _text,
const std::string reference_to, bool _floating,
ALIGNMENT alignment)
: surf(surface), text(_text), ref_to(reference_to), floating(_floating), align(alignment) {
bool _box, ALIGNMENT alignment)
: surf(surface), text(_text), ref_to(reference_to), floating(_floating), box(_box),
align(alignment) {
rect.x = x;
rect.y = y;
rect.w = surface->w;
rect.h = surface->h;
rect.w = box ? surface->w + box_width * 2 : surface->w;
rect.h = box ? surface->h + box_width * 2 : surface->h;
}
help_text_area::item::item(shared_sdl_surface surface, int x, int y, bool _floating,
ALIGNMENT alignment)
: surf(surface), text(""), ref_to(""), floating(_floating), align(alignment) {
bool _box, ALIGNMENT alignment)
: surf(surface), text(""), ref_to(""), floating(_floating), box(_box), align(alignment) {
rect.x = x;
rect.y = y;
rect.w = surface->w;
rect.h = surface->h;
rect.w = box ? surface->w + box_width * 2 : surface->w;
rect.h = box ? surface->h + box_width * 2 : surface->h;
}
void help_text_area::set_items(const std::vector<std::string> &parsed_items,
@ -1083,10 +1091,14 @@ void help_text_area::handle_img_cfg(const config &cfg) {
const std::string src = cfg["src"];
const std::string align = cfg["align"];
const bool floating = get_bool(cfg["float"]);
bool box = true;
if (cfg["box"] != "" && !get_bool(cfg["box"])) {
box = false;
}
if (src == "") {
throw parse_error("Img markup must have src attribute.");
}
add_img_item(src, align, floating);
add_img_item(src, align, floating, box);
}
void help_text_area::handle_bold_cfg(const config &cfg) {
@ -1275,7 +1287,7 @@ void help_text_area::add_text_item(const std::string text, const std::string ref
}
void help_text_area::add_img_item(const std::string path, const std::string alignment,
const bool floating) {
const bool floating, const bool box) {
shared_sdl_surface surf(image::get_image(path, image::UNSCALED));
if (surf == NULL) {
std::stringstream msg;
@ -1288,6 +1300,7 @@ void help_text_area::add_img_item(const std::string path, const std::string alig
std::cerr << "Floating image with align HERE, aligning left." << std::endl;
align = LEFT;
}
const int width = surf->w + (box ? box_width * 2 : 0);
int xpos;
int ypos = curr_loc_.second;
switch (align) {
@ -1298,25 +1311,25 @@ void help_text_area::add_img_item(const std::string path, const std::string alig
xpos = 0;
break;
case MIDDLE:
xpos = text_width() / 2 - surf->w / 2;
xpos = text_width() / 2 - width / 2 - (box ? box_width : 0);
break;
case RIGHT:
xpos = text_width() - surf->w;
xpos = text_width() - width - (box ? box_width * 2 : 0);
break;
}
if (curr_loc_.first != get_min_x(curr_loc_.second, curr_row_height_)
&& (xpos < curr_loc_.first || xpos + surf->w > text_width())) {
&& (xpos < curr_loc_.first || xpos + width > text_width())) {
down_one_line();
add_img_item(path, alignment, floating);
add_img_item(path, alignment, floating, box);
}
else {
if (!floating) {
curr_loc_.first = xpos;
}
else {
ypos = get_y_for_floating_img(surf->w, xpos, ypos);
ypos = get_y_for_floating_img(width, xpos, ypos);
}
add_item(item(surf, xpos, ypos, floating, align));
add_item(item(surf, xpos, ypos, floating, box, align));
}
}
@ -1325,9 +1338,9 @@ int help_text_area::get_y_for_floating_img(const int width, const int x, const i
for (std::list<item>::const_iterator it = items_.begin(); it != items_.end(); it++) {
const item& itm = *it;
if (itm.floating) {
if ((itm.rect.x + itm.surf->w > x && itm.rect.x < x + width)
if ((itm.rect.x + itm.rect.w > x && itm.rect.x < x + width)
|| (itm.rect.x > x && itm.rect.x < x + width)) {
min_y = maximum<int>(min_y, itm.rect.y + itm.surf->h);
min_y = maximum<int>(min_y, itm.rect.y + itm.rect.h);
}
}
}
@ -1339,8 +1352,8 @@ int help_text_area::get_min_x(const int y, const int height) {
for (std::list<item>::const_iterator it = items_.begin(); it != items_.end(); it++) {
const item& itm = *it;
if (itm.floating) {
if (itm.rect.y < y + height && itm.rect.y + itm.surf->h > y && itm.align == LEFT) {
min_x = maximum<int>(min_x, itm.surf->w);
if (itm.rect.y < y + height && itm.rect.y + itm.rect.h > y && itm.align == LEFT) {
min_x = maximum<int>(min_x, itm.rect.w + 5);
}
}
}
@ -1352,12 +1365,12 @@ int help_text_area::get_max_x(const int y, const int height) {
for (std::list<item>::const_iterator it = items_.begin(); it != items_.end(); it++) {
const item& itm = *it;
if (itm.floating) {
if (itm.rect.y < y + height && itm.rect.y + itm.surf->h > y) {
if (itm.rect.y < y + height && itm.rect.y + itm.rect.h > y) {
if (itm.align == RIGHT) {
max_x = minimum<int>(max_x, text_width() - itm.surf->w);
max_x = minimum<int>(max_x, text_width() - itm.rect.w - 5);
}
if (itm.align == MIDDLE) {
max_x = minimum<int>(max_x, text_width() / 2 - itm.surf->w / 2);
max_x = minimum<int>(max_x, text_width() / 2 - itm.rect.w / 2 - 5);
}
}
}
@ -1368,20 +1381,20 @@ int help_text_area::get_max_x(const int y, const int height) {
void help_text_area::add_item(const item &itm) {
items_.push_back(itm);
if (!itm.floating) {
curr_loc_.first += itm.surf->w;
curr_row_height_ = maximum<int>(itm.surf->h, curr_row_height_);
curr_loc_.first += itm.rect.w;
curr_row_height_ = maximum<int>(itm.rect.h, curr_row_height_);
contents_height_ = maximum<int>(contents_height_, curr_loc_.second + curr_row_height_);
last_row_.push_back(&items_.back());
}
else {
if (itm.align == LEFT) {
curr_loc_.first = itm.surf->w;
curr_loc_.first = itm.rect.w + 5;
}
contents_height_ = maximum<int>(contents_height_, itm.rect.y + itm.surf->h);
contents_height_ = maximum<int>(contents_height_, itm.rect.y + itm.rect.h);
}
}
help_text_area::ALIGNMENT help_text_area::str_to_align(const std::string &s) {
const std::string cmp_str = to_lower(s);
if (cmp_str == "left") {
@ -1410,7 +1423,7 @@ void help_text_area::down_one_line() {
void help_text_area::adjust_last_row() {
for (std::list<item *>::iterator it = last_row_.begin(); it != last_row_.end(); it++) {
item &itm = *(*it);
const int gap = curr_row_height_ - itm.surf->h;
const int gap = curr_row_height_ - itm.rect.h;
itm.rect.y += gap / 2;
}
}
@ -1444,9 +1457,17 @@ void help_text_area::draw() {
for (it = items_.begin(); it != items_.end(); it++) {
SDL_Rect dst = (*it).rect;
dst.y -= get_scroll_offset();
if (dst.y < (int)height() && dst.y + (*it).surf->h > 0) {
if (dst.y < (int)height() && dst.y + (*it).rect.h > 0) {
dst.x += location().x;
dst.y += location().y;
if ((*it).box) {
for (int i = 0; i < box_width; i++) {
gui::draw_rectangle(dst.x, dst.y, (*it).rect.w - i * 2, (*it).rect.h - i * 2,
0, screen);
dst.x++;
dst.y++;
}
}
SDL_BlitSurface((*it).surf, NULL, screen, &dst);
}
}
@ -1555,6 +1576,11 @@ help_browser::help_browser(display &disp, const section &toplevel)
back_button_(disp, _("< Back"), gui::button::TYPE_PRESS),
forward_button_(disp, _("Forward >"), gui::button::TYPE_PRESS),
shown_topic_(NULL) {
// Hide the buttons at first since we do not have any forward or
// back topics at this point. They will be unhidden when history
// appears.
back_button_.hide(true);
forward_button_.hide(true);
// Set sizes to some default values.
set_location(1, 1);
set_width(400);

View file

@ -178,7 +178,7 @@ private:
topic const *chosen_topic_;
int internal_width_;
visible_item selected_item_;
bool clicked_;
bool selected_;
};
/// Thrown when the help system fails to parse something.
@ -225,13 +225,14 @@ private:
item(shared_sdl_surface surface, int x, int y, const std::string text="",
const std::string reference_to="", bool floating=false,
ALIGNMENT alignment=HERE);
bool box=false, ALIGNMENT alignment=HERE);
item(shared_sdl_surface surface, int x, int y,
bool floating, ALIGNMENT=HERE);
bool floating, bool box=false, ALIGNMENT=HERE);
/// Relative coordinates of this item.
SDL_Rect rect;
shared_sdl_surface surf;
// If this item contains text, this will contain that text.
@ -244,6 +245,7 @@ private:
// If this item is floating, that is, if things should be filled
// around it.
bool floating;
bool box;
ALIGNMENT align;
};
@ -294,7 +296,8 @@ private:
SDL_Color color=font::NORMAL_COLOUR);
/// Add an image item with the specified attributes.
void add_img_item(const std::string path, const std::string alignment, const bool floating);
void add_img_item(const std::string path, const std::string alignment, const bool floating,
const bool box);
/// Move the current input point to the next line.
void down_one_line();

View file

@ -65,7 +65,7 @@ exploder_SOURCES = exploder.cpp \
../sdl_utils.cpp \
../log.cpp
cutter_SOURCES = cutter.cpp \
cutter_SOURCES = cutter.cpp \
exploder_utils.cpp \
exploder_cutter.cpp \
../server/variable.cpp \