Merge lp:~ab-tools/widelands/minimap into lp:widelands

Proposed by Andreas Breitschopp
Status: Merged
Merged at revision: 5569
Proposed branch: lp:~ab-tools/widelands/minimap
Merge into: lp:widelands
Diff against target: 378 lines (+159/-85)
2 files modified
src/graphic/render/gameview.cc (+93/-20)
txts/developers (+66/-65)
To merge this branch: bzr merge lp:~ab-tools/widelands/minimap
Reviewer Review Type Date Requested Status
SirVer Approve
Review via email: mp+27998@code.launchpad.net

Description of the change

It's a little bit different as in my feature request now, but - as I think - a good solution.

I've implemented following additions for the minimap:
- target cross in the center of the display area.
- dotted map borders (just like you could display it in Settlers 1).

Both make the orientation in the minimap much easier.

To post a comment you must log in.
Revision history for this message
SirVer (sirver) wrote :

is this working with the opengl renderer as well?

Revision history for this message
Timowi (timo-wingender) wrote :

It should work with opengl as well. The minimap is drawn offscreen by direct pixel access. The same code is used for OpenGL and SDL.

I liked the original idea. (rectangle around the current displayed area) For me these map borders are a bit confusing (as they have no meaning in widelands) and do not help me to orientate in the minimap.

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

@SirVer: yes, I tested it with both renderers.

@Timowi: in Settlers 1 these map borders could be enabled and disabled (that's not easily possible in Widelands, because there is not space for a 7th button below the minimap) and I have to say that I always enabled them, because I just have problems to see where I am in an endless map. ;-)

Especially if the map is big for me the orientation is much easier when you know the (virtual) map borders. To make these borders as less eye-catching as possible, I only dotted every 5th pixel. So it's only an additional hint and should not bother anyone, I hope.

Revision history for this message
David Fendt (david-hundertachtzehn) wrote :

The idea to show the borders of the map is very good in my opinion. I missed it, in particular because I'm familiar with this feature from Settlers I. Showing the center of the current display area is a good addition.

Revision history for this message
Nicolai Hähnle (nha) wrote :

What if, instead of showing a "border of the map" (which conceptually doesn't exist) you showed a cross that goes through the player's original HQ? Would that be a good solution for those who prefer to have the border?

I have to admit that having the map scroll like this can be a little confusing. What if the map didn't scroll, but was always centered on the player's original HQ?

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

@Nicolai: only a cross through the HQ would not help very much as I think. The other option to always center the map at the HQ would help, of course, but I'm afraid this might confuse all other users that are used to the map centered at the current position?

Anyway, I've attached a screenshot of the minimap as I implemented it now. This way all can see it without needing to compile with my changes. As you can see the virtual map borders are not very conspicuous.

But if there are still many users that don't like these map borders, I could add two more option buttons: one for enabling/disabling the map borders and one for enabling/disabling the red center cross. This way there would be 8 buttons (4 each row) below the map, which should look good again. Because the buttons are quite wide at the moment, it should not be a big problem to make the current buttons smaller and and add two more.

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

I thought I could add a file here, but obviously I can't. :-(

So you can find the screenshot of the minimap here:
http://www.ab-tools.com/temp/widelands1.png

Revision history for this message
Kiscsirke (csirkeee) wrote :

3 small comments:

Wideness of the buttons depend on the size of the map, on small maps
(I think maybe 64x64 maps are the smallest at the moment) they are
quite small (because the minimap window itself is smaller), that
should be taken into consideration.

The buttons aligning "nicely" isn't much of an issue I think, before I
added the zoom feature to the minimap, it only had 5 buttons, an one
empty space.

I think (correct me if I'm wrong) in settlers 1 it usually showed the
map 4 times (I mean the minimap was twice the size of the map in both
directions). Or maybe it could be resized at will, I don't remember
exactly. Anyway, while it can be useful, I think with our minimap
always being the size of the map, the borders are less useful then in
Settlers 1.

Kiscsirke (Andras)

On 20 June 2010 22:10, Andreas Breitschopp <email address hidden> wrote:
> I thought I could add a file here, but obviously I can't. :-(
>
> So you can find the screenshot of the minimap here:
> http://www.ab-tools.com/temp/widelands1.png
> --
> https://code.launchpad.net/~ab-tools/widelands/minimap/+merge/27998
> You are subscribed to branch lp:widelands.
>

Revision history for this message
David Fendt (david-hundertachtzehn) wrote :

Adding 2 more buttons to the minimap is a solution, I agree. Though the map is showed exactly one time, the orientation on the minimap would be much easier for me with borders.

Revision history for this message
SirVer (sirver) wrote :

I somewhat dislike the borders. They are quite ugly (no offense meant, they just disturb the beauty of the map) and are somewhat arbitrary: the location of the borders have no special for widelands-the-game (and only internal meaning for for widelands-the-engine). And I'd prefer a special graphic for the target cross in the middle, the red dot is to FPS like for my tastes.

I encourage this effort, this critic is meant to be constructive and not to discourage this effort.

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

@SirVer: OK, if you really don't want this map borders at all, I would suggest to implement it in that way as I originally wrote in my feature request:
display a dotted rectangle with the visible screen area in the minimap.

This way we would not need the red cross anymore.

Would that solution be OK for you?

Revision history for this message
SirVer (sirver) wrote :

I'd much prefer it, it also feels more logical to me. But it like to put this to a vote. Are others okay with this?

+1 for visible screen area in minimap
-1 for map borders in minimap

Revision history for this message
Chuck Wilder (chuckw20) wrote :

I think I'd prefer a depiction of the visible screen area in the minimap.

I agree that border indicators in the minimap lose significance in light of
the "borderless", wrapping scroll nature of the map and game play. Because
of this scrolling feature, however, some marker to indicate the location of
the player's HQ in the minimap would be valuable in my estimation.

On Mon, Jun 21, 2010 at 4:03 AM, SirVer <email address hidden> wrote:

> I'd much prefer it, it also feels more logical to me. But it like to put
> this to a vote. Are others okay with this?
>
> +1 for visible screen area in minimap
> -1 for map borders in minimap
> --
> https://code.launchpad.net/~ab-tools/widelands/minimap/+merge/27998<https://code.launchpad.net/%7Eab-tools/widelands/minimap/+merge/27998>
> You are subscribed to branch lp:widelands.
>

Revision history for this message
David Fendt (david-hundertachtzehn) wrote :

To mark the HQ in the same way as above the borders are marked and instead of the borders would also prevent my disorientation on the minimap. I only need the 2 doted lines across the entire minimap independent of the lines marks the border or the HQ.

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

Hello together again,

just to finalize that:
as I understand nobody (beside David and me) wants to have the map borders, but adding a dotted rectangle as the visible screen area would be OK. So I'll do that this way now, because that's better than nothing.

To prevent me from having to search though the whole Widelands code:
does someone have a tip for me which code object does provide the info about the size of the visible screen area?

Revision history for this message
SirVer (sirver) wrote :

The g_gr object might be what you are looking for. Alternativly you can also access the MapView object of InteractiveBase.

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

Hello together again,

sorry, it took a while till I found the time to look at this again, but now I've got the change ready as desired:
only a display rectangle of the currently visible map area.

But before I commit the new code, I wanted to ask if you prefer a full or just a dotted border. I've uploaded a sample image with some alternatives here:
http://www.ab-tools.com/temp/widelands2.png

So the questions are:
- full border or dotted border?
- if dotted, every how many pixels?
- is the white color OK or do you prefer another color?

Let me know your thoughts.

Best regards
Andreas

Revision history for this message
Chuck Wilder (chuckw20) wrote :

My favorite is the dotted white border at every 2 pixels. Thanks for your efforts. :)

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

Hello Chuck,

thanks for your fast answer.

I'll wait for a few more replies and then commit the corresponding code.

Best regards
Andreas

Revision history for this message
Nasenbaer (nasenbaer) wrote :

I prefer the undotted on (the first), but like the second (every 2 pixels) as well. :)

Revision history for this message
SirVer (sirver) wrote :

2 pixels for me!

Revision history for this message
Timowi (timo-wingender) wrote :

I like the 2 pixels variant most. The white is ok and I think it is the best on your images. But the roads and flags are white too. Is it possible to see the frame over a road network?

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

Hello together,

thanks for all the feedback:
I see the 2 pixels variant is the most favored one.

@Timewi: I've uploaded an image comparing different color variants over a road network here:
http://www.ab-tools.com/temp/widelands3.png

(Don't be confused about the still visible map borders: I know nobody wants them, so they won't be there when I commit the final code. They are just for testing purpose now.)

Revision history for this message
Chuck Wilder (chuckw20) wrote :

The white frame on the white roads and flags IS more confusing than I first thought it would be. The red frame is easiest for me to distinguish followed close by the green and cyan.

Does the frame change its dimensions for monitors with different aspect ratios/resolutions in order to depict the actual area in view? Your vertical rectangle for the frame in the examples makes me think you are using a similarly oriented screen. Are your examples mock-ups or is the aspect ratio in the mini-map actually independent from the user's monitor and that difference then results in the rectangle taking on a different shape. (Sorry if I confused matters. I just don't know that much about coding for displays.) :P

Bottom line - I prefer a frame in a contrasting color from the white details regardless of the shape of the frame. :D

Cheers!

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

Hello Chuck,

thanks for your comment.

I also think that the white frame color is not the best solution, but I have to admit that the cyan one looks really ugly. ;-)

I would also prefer the red one followed by the green one. But maybe also the yellow one would be possible: that's not so eye-catching as the red/green ones, but still a little bit different to the white roads. That could be already different enough to not confuse the player.

But let's wait what the other guys say about that. :-)

Regarding your aspect ratio question:
yes that are really screenshots (no mock-ups) and that's also the correct ratio. But no, I don't have such a monitor, Widelands ran in 800x600 Pixel resolution for testing and making these screenshots. The reason why the display area is a vertical (instead of a horizontal) rectangle in the mini-map is that a map field is defined with a width of 64 pixels and a height of only 32 pixels in Widelands. That results in this display ratio of the map.

Best regards
Andreas

Revision history for this message
Chuck Wilder (chuckw20) wrote :

Thanks for the explanation, Andreas. Now I can sleep tonight. :)

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

Yes, I'll just wait which color the other guys prefer now and then I'll commit the final code with the color that received the most votes.

Revision history for this message
SirVer (sirver) wrote :

I prefer the red one! I think that it has the best contrast for all world tilesets.

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

OK, because I saw that the red one seems to be preferred by most of the people (incl. me), I've committed it with a red dotted frame border now.

I've tested the code with and without OpenGL rendering in the normal and the zoomed mini map and it worked without problems in all cases.

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

Just committed some improvements to the code some minutes ago to make it cleaner and faster.

Is there anything else I need to do from my side before it can be merged into trunk?

Revision history for this message
SirVer (sirver) wrote :

You could add yourself to the developers file so I do not have to do it :). Alternatively you could state with what name you want to appear in the file. Otherwise, the patch looks nice to me and I will merge it as soon as I know how to reference you.

review: Approve
Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

Hello SirVer,

didn't expected to get listed in the developer file when doing only such a small change, but thank you. :-)

I've added myself ("Andreas Breitschopp (ab-tools)") to the developer file now and cleaned up the (pseudo) HTML code meanwhile:
it results in the same output, but the HTML code is cleaner now (there is no reason to add a "<br>" before a "</p>" tag).

Thanks again for all the support here:
Widelands is a great project! :-)

Best regards
Andreas

Revision history for this message
SirVer (sirver) wrote :

Excellent work and a very deliberate way to add enhancements to widelands, Andreas! Thanks for your contribution, every time again :)

Revision history for this message
SirVer (sirver) wrote :

ooh.. I forgot: I merged this as revision 5569 into trunk.

Revision history for this message
Andreas Breitschopp (ab-tools) wrote :

Thanks for merging!

I hope, I'll be able to contribute more in the future, because I really like this project. :-)

I've set the corresponding issue in the bug tracker to "Fix committed" now.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/graphic/render/gameview.cc'
2--- src/graphic/render/gameview.cc 2010-06-16 17:12:29 +0000
3+++ src/graphic/render/gameview.cc 2010-10-10 09:01:48 +0000
4@@ -24,6 +24,7 @@
5 #include "economy/flag.h"
6
7 #include "wui/minimap.h"
8+#include "wui/mapviewpixelconstants.h"
9
10 #include "logic/field.h"
11 #include "logic/map.h"
12@@ -1083,6 +1084,49 @@
13 return pixelcolor;
14 }
15
16+
17+/*
18+===============
19+Used to draw a dotted frame border on the mini map.
20+===============
21+ */
22+template<typename T>
23+static bool draw_minimap_frameborder
24+ (Widelands::FCoords const f,
25+ Point const ptopleft,
26+ Point const pbottomright,
27+ uint32_t const mapwidth,
28+ uint32_t const mapheight)
29+{
30+ bool isframepixel = false;
31+
32+ if (ptopleft.x <= pbottomright.x) {
33+ if (f.x >= ptopleft.x && f.x <= pbottomright.x
34+ && (f.y == ptopleft.y || f.y == pbottomright.y)
35+ && f.x % 2 == 0)
36+ isframepixel = true;
37+ } else {
38+ if ((f.x >= ptopleft.x && f.x <= mapwidth || f.x >= 0 && f.x <= pbottomright.x)
39+ && (f.y == ptopleft.y || f.y == pbottomright.y)
40+ && f.x % 2 == 0)
41+ isframepixel = true;
42+ }
43+
44+ if (ptopleft.y <= pbottomright.y) {
45+ if (f.y >= ptopleft.y && f.y <= pbottomright.y
46+ && (f.x == ptopleft.x || f.x == pbottomright.x)
47+ && f.y % 2 == 0)
48+ isframepixel = true;
49+ } else {
50+ if ((f.y >= ptopleft.y && f.y <= mapheight || f.y >= 0 && f.y <= pbottomright.y)
51+ && (f.x == ptopleft.x || f.x == pbottomright.x)
52+ && f.y % 2 == 0)
53+ isframepixel = true;
54+ }
55+
56+ return isframepixel;
57+}
58+
59 /*
60 *
61 *
62@@ -1101,6 +1145,25 @@
63 uint32_t const flags)
64 {
65 Widelands::Map const & map = egbase.map();
66+
67+ uint32_t mapheight = (flags & MiniMap::Zoom2 ? rc.h / 2 : rc.h);
68+
69+ // size of the display frame
70+ int32_t xsize = g_gr->get_xres() / TRIANGLE_WIDTH / 2;
71+ int32_t ysize = g_gr->get_yres() / TRIANGLE_HEIGHT / 2;
72+
73+ Point ptopleft; // top left point of the current display frame
74+ ptopleft.x = viewpoint.x + mapwidth / 2 - xsize;
75+ if (ptopleft.x < 0) ptopleft.x += mapwidth;
76+ ptopleft.y = viewpoint.y + mapheight / 2 - ysize;
77+ if (ptopleft.y < 0) ptopleft.y += mapheight;
78+
79+ Point pbottomright; // bottom right point of the current display frame
80+ pbottomright.x = viewpoint.x + mapwidth / 2 + xsize;
81+ if (pbottomright.x >= mapwidth) pbottomright.x -= mapwidth;
82+ pbottomright.y = viewpoint.y + mapheight / 2 + ysize;
83+ if (pbottomright.y >= mapheight) pbottomright.y -= mapheight;
84+
85 if (not player or player->see_all()) for (uint32_t y = 0; y < rc.h; ++y) {
86 Uint8 * pix = pixels + (rc.y + y) * pitch + rc.x * sizeof(T);
87 Widelands::FCoords f
88@@ -1112,37 +1175,47 @@
89 for (uint32_t x = 0; x < rc.w; ++x, pix += sizeof(T)) {
90 if (x % 2 || !(flags & MiniMap::Zoom2))
91 move_r(mapwidth, f, i);
92- *reinterpret_cast<T *>(pix) = static_cast<T>
93- (calc_minimap_color
94- (format, egbase, f, flags, f.field->get_owned_by(), true));
95+
96+ if (draw_minimap_frameborder<T>
97+ (f, ptopleft, pbottomright, mapwidth, mapheight)) {
98+ *reinterpret_cast<T *>(pix) = static_cast<T>
99+ (SDL_MapRGB(&const_cast<SDL_PixelFormat &>(format), 255, 0, 0));
100+ } else {
101+ *reinterpret_cast<T *>(pix) = static_cast<T>
102+ (calc_minimap_color
103+ (format, egbase, f, flags, f.field->get_owned_by(), true));
104+ }
105 }
106 } else {
107 Widelands::Player::Field const * const player_fields = player->fields();
108 for (uint32_t y = 0; y < rc.h; ++y) {
109 Uint8 * pix = pixels + (rc.y + y) * pitch + rc.x * sizeof(T);
110- Widelands::FCoords f;
111- if (flags & MiniMap::Zoom2)
112- f = Widelands::FCoords
113- (Widelands::Coords(viewpoint.x, viewpoint.y + y / 2), 0);
114- else
115- f = Widelands::FCoords
116- (Widelands::Coords(viewpoint.x, viewpoint.y + y), 0);
117+ Widelands::FCoords f
118+ (Widelands::Coords
119+ (viewpoint.x, viewpoint.y + (flags & MiniMap::Zoom2 ? y / 2 : y)));
120 map.normalize_coords(f);
121 f.field = &map[f];
122 Widelands::Map_Index i = Widelands::Map::get_index(f, mapwidth);
123 for (uint32_t x = 0; x < rc.w; ++x, pix += sizeof(T)) {
124 if (x % 2 || !(flags & MiniMap::Zoom2))
125 move_r(mapwidth, f, i);
126- Widelands::Player::Field const & player_field = player_fields[i];
127- Widelands::Vision const vision = player_field.vision;
128-
129- *reinterpret_cast<T *>(pix) =
130- static_cast<T>
131- (vision ?
132- calc_minimap_color
133- (format, egbase, f, flags, player_field.owner, 1 < vision)
134- :
135- 0);
136+
137+ if (draw_minimap_frameborder<T>
138+ (f, ptopleft, pbottomright, mapwidth, mapheight)) {
139+ *reinterpret_cast<T *>(pix) = static_cast<T>
140+ (SDL_MapRGB(&const_cast<SDL_PixelFormat &>(format), 255, 0, 0));
141+ } else {
142+ Widelands::Player::Field const & player_field = player_fields[i];
143+ Widelands::Vision const vision = player_field.vision;
144+
145+ *reinterpret_cast<T *>(pix) =
146+ static_cast<T>
147+ (vision ?
148+ calc_minimap_color
149+ (format, egbase, f, flags, player_field.owner, 1 < vision)
150+ :
151+ 0);
152+ }
153 }
154 }
155 }
156
157=== modified file 'txts/developers'
158--- txts/developers 2010-09-25 12:49:34 +0000
159+++ txts/developers 2010-10-10 09:01:48 +0000
160@@ -18,7 +18,7 @@
161 ""
162 _ "Graphics"
163 "</p></rt>"
164-"<rt image=pics/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12> Chuck Wilder (chuckw)<br></p></rt>"
165+"<rt image=pics/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12> Chuck Wilder (chuckw)</p></rt>"
166 "<rt text-align=left><p font-size=18 font-decoration=underline font-face=FreeSerif font-color=2F9131>"
167 ""
168 _ "Homepage"
169@@ -28,7 +28,7 @@
170 ""
171 _ "Sound"
172 "</p></rt>"
173-"<rt image=pics/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12> Jan Bruns (solatis)<br></p></rt>"
174+"<rt image=pics/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12> Jan Bruns (solatis)</p></rt>"
175 "<rt text-align=left><p font-size=18 font-decoration=underline font-face=FreeSerif font-color=2F9131>"
176 ""
177 "<br><br>"
178@@ -52,18 +52,19 @@
179 "<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Christof Petig</p></rt>"
180 "<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Erik Sigra (sigra)</p></rt>"
181 "<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Nanne Wams</p></rt>"
182-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Surgery<br></p></rt>"
183-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andrius R. (knutux)<br></p></rt>"
184-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Jari Hautio (jarih) <br></p></rt>"
185-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)<br></p></rt>"
186-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Victor Pelt (Dwarik)<br></p></rt>"
187-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Axel Gehlert (dunkelbrauer)<br></p></rt>"
188-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> András Eisenberger (Kiscsirke)<br></p></rt>"
189-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andi <br></p></rt>"
190-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Timo <br></p></rt>"
191-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Hannes <br></p></rt>"
192-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> TimoW <br></p></rt>"
193-"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Jens Beyer (Qcumber-some) <br></p></rt>"
194+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Surgery</p></rt>"
195+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andrius R. (knutux)</p></rt>"
196+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Jari Hautio (jarih)</p></rt>"
197+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
198+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Victor Pelt (Dwarik)</p></rt>"
199+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Axel Gehlert (dunkelbrauer)</p></rt>"
200+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> András Eisenberger (Kiscsirke)</p></rt>"
201+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andi</p></rt>"
202+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Timo</p></rt>"
203+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Hannes</p></rt>"
204+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> TimoW</p></rt>"
205+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Jens Beyer (Qcumber-some)</p></rt>"
206+"<rt image=pics/genstats_nrwares.png image-align=left text-align=left><p font-size=12> Andreas Breitschopp (ab-tools)</p></rt>"
207 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=FreeSerif font-color=f4a131><br><br>"
208 ""
209 ""
210@@ -85,48 +86,48 @@
211 "<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Toralf Bethke (bithunter32)</p></rt>"
212 "<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
213 "<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Alexia Death</p></rt>"
214-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Repsa Jih<br></p></rt>"
215-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Geoffroy Schmitlin (Trimard)<br></p></rt>"
216-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Benedikt Freisen (Objpaswriter)<br></p></rt>"
217-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Stefano Guidoni (Ilguido)<br></p></rt>"
218-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Samith Sandanayake (samithdisal)<br></p></rt>"
219-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Chuck Wilder (chuckw20)<br></p></rt>"
220-"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Astuur<br></p></rt>"
221+"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Repsa Jih</p></rt>"
222+"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Geoffroy Schmitlin (Trimard)</p></rt>"
223+"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Benedikt Freisen (Objpaswriter)</p></rt>"
224+"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Stefano Guidoni (Ilguido)</p></rt>"
225+"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Samith Sandanayake (samithdisal)</p></rt>"
226+"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Chuck Wilder (chuckw20)</p></rt>"
227+"<rt image=pics/genstats_nrbuildings.png image-align=left text-align=left><p font-size=12> Astuur</p></rt>"
228 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=FreeSerif font-color=f4a131><br><br>"
229 ""
230 ""
231 _ "Musicians"
232 "</p></rt>"
233-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Kristian<br></p></rt>"
234-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> MiddleFinger<br></p></rt>"
235-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Valerio Orlandini (Symbiosis)<br></p></rt>"
236-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Barry van Oudtshoorn (barryvan)<br></p></rt>"
237-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Jan Bruns (Solatis)<br></p></rt>"
238-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Nikola Whallon (Saturn)<br></p></rt>"
239+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Kristian</p></rt>"
240+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> MiddleFinger</p></rt>"
241+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Valerio Orlandini (Symbiosis)</p></rt>"
242+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Barry van Oudtshoorn (barryvan)</p></rt>"
243+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Jan Bruns (Solatis)</p></rt>"
244+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Nikola Whallon (Saturn)</p></rt>"
245 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=FreeSerif font-color=f4a131><br><br>"
246 ""
247 ""
248 _ "Sound Effects"
249 "</p></rt>"
250-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Stefan de Konik<br></p></rt>"
251-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)<br></p></rt>"
252-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Stephan<br></p></rt>"
253-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Adam Piggott (_aD)<br></p></rt>"
254-"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Stanisław Gackowski (Soeb)<br></p></rt>"
255+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Stefan de Konik</p></rt>"
256+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
257+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Stephan</p></rt>"
258+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Adam Piggott (_aD)</p></rt>"
259+"<rt image=pics/workarea2cumulative.png image-align=left text-align=left><p font-size=12> Stanisław Gackowski (Soeb)</p></rt>"
260 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=FreeSerif font-color=f4a131><br><br>"
261 ""
262 ""
263 _ "Maps and Missions"
264 "</p></rt>"
265-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Michal Szopa (Winterwind)<br></p></rt>"
266-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Jan-Henrik Kluth (Isch)<br></p></rt>"
267-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)<br></p></rt>"
268-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Sven (deviant)<br></p></rt>"
269-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Tuxlands<br></p></rt>"
270-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Kamil Wilczek (Another Barbarian)<br></p></rt>"
271-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Tarvo Reim (Tarrei)<br></p></rt>"
272-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Manuel Holzmeier (Quappo)<br></p></rt>"
273-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> ivh<br></p></rt>"
274+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Michal Szopa (Winterwind)</p></rt>"
275+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Jan-Henrik Kluth (Isch)</p></rt>"
276+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
277+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Sven (deviant)</p></rt>"
278+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Tuxlands</p></rt>"
279+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Kamil Wilczek (Another Barbarian)</p></rt>"
280+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Tarvo Reim (Tarrei)</p></rt>"
281+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Manuel Holzmeier (Quappo)</p></rt>"
282+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> ivh</p></rt>"
283 "<rt text-align=left><p font-size=24 font-decoration=bold text-align=left font-face=FreeSerif font-color=f4a131><br><br>"
284 ""
285 ""
286@@ -135,13 +136,13 @@
287 "<rt text-align=left><p font-size=18 font-decoration=bold text-align=left font-face=FreeSerif font-color=f4a131>"
288 _ "Barbarian"
289 "</p></rt>"
290-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Bastian Rapp<br></p></rt>"
291-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Alexander Kahl (wolfpac)<br></p></rt>"
292-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)<br></p></rt>"
293+"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Bastian Rapp</p></rt>"
294+"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Alexander Kahl (wolfpac)</p></rt>"
295+"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
296 "<rt text-align=left><p font-size=18 font-decoration=bold text-align=left font-face=FreeSerif font-color=f4a131><br>"
297 _ "Empire"
298 "</p></rt>"
299-"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)<br></p></rt>"
300+"<rt image=pics/ls_wlmap.png image-align=left text-align=left><p font-size=12> Peter Schwanemann (Nasenbaer)</p></rt>"
301 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=FreeSerif font-color=f4a131><br><br>"
302 ""
303 ""
304@@ -233,7 +234,7 @@
305 ""
306 _ "Slovak"
307 "</p></rt>"
308-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Vladímir Tóth (Ike)<br></p></rt>"
309+"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Vladímir Tóth (Ike)</p></rt>"
310 "<rt><p font-size=18 font-decoration=underline font-face=FreeSerif font-color=2F9131>"
311 ""
312 _ "Spanish"
313@@ -243,8 +244,8 @@
314 ""
315 _ "Swedish"
316 "</p></rt>"
317-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Daniel Nylander (yeager)<br></p></rt>"
318-"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Frederik Pettersson (luno)<br></p></rt>"
319+"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Daniel Nylander (yeager)</p></rt>"
320+"<rt image=pics/fsel_editor_set_height.png image-align=left text-align=left><p font-size=12>Frederik Pettersson (luno)</p></rt>"
321 "<rt><p><br><br><br></p></rt>"
322 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=FreeSerif font-color=f4a131><br><br>"
323 ""
324@@ -288,23 +289,23 @@
325 ""
326 _ "Homepage Coders"
327 "</p></rt>"
328-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Holger Rapp (SirVer)<br></p></rt>"
329-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Stanislaw Gackowski (Soeb)<br></p></rt>"
330-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Markus Pfitzner (janus)<br></p></rt>"
331-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Tobi<br></p></rt>"
332+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Holger Rapp (SirVer)</p></rt>"
333+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Stanislaw Gackowski (Soeb)</p></rt>"
334+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Markus Pfitzner (janus)</p></rt>"
335+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Tobi</p></rt>"
336 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=FreeSerif font-color=f4a131><br><br>"
337 ""
338 ""
339 _ "Documentation, Help and Wiki"
340 "</p></rt>"
341-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Erik Sigra (sigra)<br></p></rt>"
342-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Florian Falkner (foldrian)<br></p></rt>"
343-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Florian Weber (bedouin)<br></p></rt>"
344-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Nicolai Haehnle<br></p></rt>"
345-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Holger Rapp (SirVer)<br></p></rt>"
346-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Johannes (nuefke)<br></p></rt>"
347-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Alexander Kahl (wolfpac)<br></p></rt>"
348-"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Stanislaw Gackowski (Soeb)<br></p></rt>"
349+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Erik Sigra (sigra)</p></rt>"
350+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Florian Falkner (foldrian)</p></rt>"
351+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Florian Weber (bedouin)</p></rt>"
352+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Nicolai Haehnle</p></rt>"
353+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Holger Rapp (SirVer)</p></rt>"
354+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Johannes (nuefke)</p></rt>"
355+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Alexander Kahl (wolfpac)</p></rt>"
356+"<rt image=pics/WL-Editor-16.png image-align=left text-align=left><p font-size=12>Stanislaw Gackowski (Soeb)</p></rt>"
357 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=FreeSerif font-color=f4a131><br><br>"
358 ""
359 ""
360@@ -333,13 +334,13 @@
361 ""
362 _ "Translation"
363 "</p></rt>"
364-"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Peter Schwanemann (Nasenbaer)<br></p></rt>"
365-"<rt image=pics/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12> Philipp Niemann (Azagtoth)<br></p></rt>"
366+"<rt image=pics/genstats_enable_plr_04.png text-align=left image-align=left><p font-size=12>Peter Schwanemann (Nasenbaer)</p></rt>"
367+"<rt image=pics/genstats_enable_plr_04.png image-align=left text-align=left><p font-size=12>Philipp Niemann (Azagtoth)</p></rt>"
368 "<rt text-align=left><p font-size=24 font-decoration=bold font-face=FreeSerif font-color=f4a131><br><br>"
369 ""
370 ""
371 _ "Other"
372 "</p></rt>"
373-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Matt Howe (mdhowe)<br></p></rt>""
374-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Samuel Tilly (eldamar)<br></p></rt>""
375-"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> and many, many more (thank you for everything you've done)<br></p></rt>""
376+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Matt Howe (mdhowe)</p></rt>""
377+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> Samuel Tilly (eldamar)</p></rt>""
378+"<rt image=pics/genstats_landsize.png image-align=left text-align=left><p font-size=12> and many, many more (thank you for everything you've done)</p></rt>""

Subscribers

People subscribed via source and target branches

to status/vote changes: