Giter VIP home page Giter VIP logo

wesnoth / wesnoth Goto Github PK

View Code? Open in Web Editor NEW
5.2K 153.0 969.0 3.97 GB

An open source, turn-based strategy game with a high fantasy theme.

Home Page: https://www.wesnoth.org/

License: GNU General Public License v2.0

Python 8.93% CMake 0.96% Lua 11.52% Makefile 0.05% CSS 0.02% Shell 0.68% Emacs Lisp 2.15% HTML 0.03% JavaScript 0.04% C++ 74.46% C 0.34% Objective-C++ 0.08% PHP 0.06% Perl 0.39% Batchfile 0.01% NSIS 0.06% Objective-C 0.01% sed 0.02% Dockerfile 0.01% TypeScript 0.18%
opensource game free strategy-game turn-based-strategy fantasy

wesnoth's Introduction

License: GPL v2

Branch CI status
Master CI
1.16 CI

About

The Battle for Wesnoth is an Open Source, turn-based tactical strategy game with a high fantasy theme, featuring both singleplayer and online/hotseat multiplayer combat. Fight a desperate battle to reclaim the throne of Wesnoth, search for the key to immortality, or take part in any number of other adventures.

Community

The official Battle for Wesnoth Forums: https://forums.wesnoth.org/

Discord: https://discord.gg/battleforwesnoth

IRC: https://wiki.wesnoth.org/Support#IRC

Mastodon: https://fosstodon.org/@wesnoth

Steam forums: https://steamcommunity.com/app/599390/discussions/

Features

  • A variety of different campaigns, each with their own tactical challenges, emotionally charged story, and multiple difficulty levels.
  • A detailed world and storytelling with hundreds of sprites, animations, and characters.
  • Many different unit skills and traits across several factions.
  • A map editor with multiple tools, hundreds types of terrain, and the ability for you to save and share maps with others. Create your own scenarios/battles for near infinite replayability.
  • Highly moddable, allowing a wide array of community created map packs, eras, and entire campaigns.
  • Online and local multiplayer gameplay to play with friends, strangers, or against the AI.
  • Changeable settings for base gameplay, with nearly limitless options for different hotkey configurations.
  • Beautifully composed playlist that captures the era and grandiosity of this lore-filled high-fantasy world.

Installing

Wesnoth can be played on Windows, macOS, and Linux, and can be installed using:

Additionally, Wesnoth is available for iOS and Android.

To build the game from source, see INSTALL for instructions.

Contributing

Wesnoth is most in need of skilled C++ developers (C++14 and later), however there are things that nearly anyone can help with:

  • Simple tasks in C++.
  • The Lua and WML used for content scripting.
  • Python used by various external tools.
  • Even play testing and giving feedback on updated campaigns!

Additionally, Wesnoth lacks art for a variety of unit animations - anyone who would be interested in lending a hand in updating existing unit sprites or creating animations should take a look at the Art Contributions forum as well as contact our current art director.

See also: CONTRIBUTING

For any questions, the best place to start is to simply join Wesnoth's forums, Discord, or IRC and start asking!

Donations

Donations can be sent via Software in the Public Interest, Liberapay, as well as when downloading through itch.io. All money donated is used to pay for project expenses such as server rent and art commissions, and is very much appreciated.

License

All source code is licensed under the GNU GPL v2+. Most art and music is also licensed under the GNU GPL v2+, however new contributions are now licensed under the Creative Commons BY-SA v4.0. For more detailed information on Wesnoth's licensing, see the wiki:

https://wiki.wesnoth.org/Wesnoth:Copyrights

More Information

For extensive documentation about all aspects of the game, see the official Battle for Wesnoth web site:

https://www.wesnoth.org/ https://wiki.wesnoth.org/

A (translated) description of how to play the game can be found in doc/manual/manual.*.html, or online at:

https://wiki.wesnoth.org/WesnothManual

For information on creating your own maps, scenarios, and other content, see:

https://wiki.wesnoth.org/Create

Gallery

screenshot_main_menu scrreenshot_isars_cross screenshot_campaign_menu screenshot_map

wesnoth's People

Contributors

ai0867 avatar alarantalara avatar alinkmaze avatar anonymissimus avatar boucman avatar cbeck88 avatar celticminstrel avatar davewx7 avatar eleazzaar avatar elvish-hunter avatar eric-s-raymond avatar gab avatar gfgtdf avatar irydacea avatar ivanovic avatar jyrkive avatar ln-zookeeper avatar loonycyborg avatar mattsc avatar mordante avatar nemaara avatar ott2 avatar pentarctagon avatar rkettering avatar sapientn3t avatar silene avatar soliton- avatar timotei avatar vultraz avatar ydirson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wesnoth's Issues

Less snow in random summer scenarios (GNA #4077)

Original submission by anonymous on 2005-04-21

Sometimes one wants to leave a unit alone and not have it in a N cycle. Particularly if one has lots of garrison troops in a large game. As one cycles thru using the N button it would be easier and quicker if the garrisoned units had a setting to opt out. [One of many nice features about Civilization and other games.]

The randomly generated maps have too much snow for the non-winter scenarios. Certainly hexes of mountains that are surrounded by 5+ mountains should have snow. Also those mountains with 3+ snow adjacent. Non-mountains with 4? or 5+ adjacent snow hexes could also be snow/glacier.

(Reproduced on All)
Release: future
Priority: 3 - Low
Severity: 2 - Minor

Add replay editor capability (GNA #4426)

Original submission by anonymous on 2005-09-25

It often occurs, that in a game there is one particularly interesting set of moves, that you would want to show other people too. (I had one done against me just recently, in which I lost my leader and several other units. :-)

To be able to show this (without having to watch the whole replay), and save this "part-replay", which could be called a "snippet", in a separate file would provide great material to illustrate strategy guides.

What I have in mind would require this:

  1. Add code that allows to track a game in such way that it is possible, at any point in time, to provide a snapshot of the current situation - just like if it was a frozen save-game. This would also go a long way towards providing a way to skip the replay in mp (bug #3057), and the related item (bug #3391).

  2. Add viewing / editing capability, which consists of:

a) adjusting the speed the replay is viewed,

b) pausing the replay (bug #3978),

c) forward & backward motion for viewing the replay, at a speed of e.g. 1 move+attack, 10 moves+attacks, (and possibly at intervals of 1 turn). -> These will also help the one editing the replay to get to the point where he wants his snapshot taken, i.e. where he wants his replay demonstration to start.

  1. To protect the innocent, replay editor functionality would need a way to strip the file, optionally, of

a) observers' chat messages,

b) all, including players', chat messages.

a) To provide for the intended use as illustration for training, a way to insert chat messages preceded by "" in any given point in the replay would be welcome.

b) As an addition to this facility, a way to insert a pause (that the user can skip, if he so wishes) of N (e.g. 2000) milliseconds, to enhance the replay snippet's educational value.

[NOTE: In replay mode, the "Actions" menu could include the functions "pause", "forward (insert speed)", "backward (insert speed)", "start replay snippet", "end replay snippet", "remove observer messages", "remove all messages", "add narrator message", "add narrative pause", and finally "save replay snippet as".]

Feel free to separate these into several tasks / feature requests, if that is your preferred way to deal with these.

(Reproduced on all)
Release: 1.1
Priority: 5 - Normal
Severity: 3 - Normal

Team win to be counted as win for all players (GNA #3779)

Original submission by anonymous on 2004-10-30

Currently when playing co-op, if one of the co-op players lose his leader, but the team still wins, the leaderless player is given a You lose-dialog, while the players with leaders still alive get a You win-dialog. IMO the team win should override the loss of leader.

Either the current You win-dialog could be shown to all members of the team, or a new dialog specifying a team win could be implemented.

(Reproduced on MacOSX 10.3.5)
Release: 0.8.7CVS
Priority: 1 - Later
Severity: 1 - Wish

Display gold in the Load Game dialog (GNA #4180)

Original submission by anonymous on 2005-06-22

As suggested in the Idea forum (http://www.wesnoth.org/forum/viewtopic.php?t=6110):

When playing a campaign it's not unusual (understatement...) that it starts to go bad - gold gets low, favorite units are killed, etc - at and beyond some scenario. You play on, but later you realize that you have to go back a number of scenarios and start over from there and change tactics.

Now, to actually find a scenario among the saved games where you can make a reasonable restart is difficult if you don't remember when it started to go bad; you have to load one scenario after another until you find [the] one where you finished with a reasonable amount of gold and/or nice units.

Therefore, I suggest a change/addition to the Load Game dialog: the savegame summary to the left of the savegame list should also contain the "current" amount of gold.

To make this lenghty post even longer, the savegame summary could also contain some information on the recall list, for instance the number of troups and perhaps (more interesting?) the total level of the troups. But this is secondary to the amount of gold being shown.

(Reproduced on All)
Release: 0.9.2+
Priority: 5 - Normal
Severity: 3 - Normal

Moving unit_height_adjust from [terrain] to [tile] (GNA #5821)

Original submission by zookeeper on 2006-04-19

Currently the unit height adjustment on a terrain has to be the same on every hex that's of the same terrain. This makes for example the height adjustment on keeps difficult, since normal castle keeps need to have much higher height than encampment keeps - but both are of the same terrain, so either one is bound to look silly. Since the amount of height adjustment should obviously be determined by the graphics on a hex, not the terrain itself, it would be logical to move the 'unit_height_adjust' key from [terrain] to [tile]. Actually, the 'submerge' key should get the same treatment, for the same reasons.

So, this is how it should work:

If a [tile] has the 'unit_height_adjust' key present, that value will be added to the value given in the [terrain] tag, but of course just for the one hex that the [tile] refers to. The same for the 'submerge' key. So both keys should still be accepted inside [terrain], both for simplicity and in case the terrain is "uniform" in height and needs either none or only few / small tile-specific adjustments.

I have the WML means to apply the different adjustments for the different keep types if this is implemented, and for example for mountains, too, if such a thing is desired.

(Reproduced on all)
Release: trunk
Priority: 5 - Normal
Severity: 2 - Minor

Game summary dialog (GNA #4459)

Original submission by hogne on 2005-10-02

Dialog to replace the current Scenario dialog which isn't very appropriate for MP or single scenario games. The mock-up was made with MP games in mind, but could also be used for single player games.

See attached mock-up for proposed layout.

The crown is used to indicate that the leader has survived, a skull that the leader has died.

Winning team is colored green, loosing theme red.

Hogne

(Reproduced on any)
Release: svn trunk
Priority: 5 - Normal
Severity: 1 - Wish

Add [object] to units on the recall list. (GNA #4450)

Original submission by anonymous on 2005-09-29

There are three related issues here.

Currently the [object] code in game_events.cpp appears to make the

assumption that the object action is triggered by a moveto event

but doesn't actually check to make sure that is the case.

Currently if no filter is supplied the code tries to apply to

the unit located at the moveto event. This is made use of in a

couple places in the standard campaigns. This isn't documented

and may or may not be desired. An alternative meaning would be to

apply the object action to the first unit found in the unit list

as some other actions do.

The last is really a feature request but it probably isn't too

hard to do.

The object action doesn't apply the filter to units on the recall

list as some other actions do. This makes sense if it really only

applies to moveto events. But giving objects to units as a way to

manipulate their stats is a nice tool to have and it seems the

event and not searching the recall list limitations could be

easily removed.

I am willing to update the wiki documentation to describe the

event limitation, implicit filter and/or the recall list

limitation if I hear back what you guys are planning to do

with this.

For more background, you can read a discussion I had with Ott

about this at:

http://wesnoth.debian.net/%23wesnoth-dev-2005-09-29.log

starting at about 1500.

(Reproduced on Any)
Release: 1.1-svn
Priority: 3 - Low
Severity: 3 - Normal

GUI2 combobox widget

A new widget that combines a text box with a menu button (or listbox). Could probably be a composite widget, like the unit preview pane.

ability to continue with another map in multiplayer (GNA #4201)

Original submission by anonymous on 2005-07-02

This is a very simple proposal that would make the mystery campaign unnecessary.

It'd be good if, at the end of a multiplayer map, it gave you the option to "play another map". This would bring up the multiplayer game dialogue again, defaulting to the play mode you had previously (ai vs. human, online, etc.) but with the option of having your previous units available for recall and your gold reserves available.

This would make multiplayer far more enjoyable, since half the fun of the game is in preserving and using high level units, and would avoid the problem of randomness in the mystery campaign, which quickly gets boring. You could choose how hard to make your enemies each time, rather than having the game try and calculate an even match.

For more see this forum thread:
http://www.wesnoth.org/forum/viewtopic.php?p=87775

(Reproduced on any)
Release: 0.9.3
Priority: 5 - Normal
Severity: 1 - Wish

tests fail to build

clang dev

[ 96%/563/3/583,1903.699] Building CXX object src/CMakeFiles/test.dir/tests/gui/test_gui2.cpp.o
FAILED: src/CMakeFiles/test.dir/tests/gui/test_gui2.cpp.o 
/home/matthias/LLVM/LLVM_dev/stage_2/build/bin/clang++   -DBOOST_TEST_DYN_LINK -DHAS_RELATIVE_LOCALEDIR=1 -DHAVE_CONFIG_H -DHAVE_FRIBIDI -DHAVE_LIBDBUS -DHAVE_LIBPNG -DLUA_USE_POSIX -D_X11 -isystem /usr/include/freetype2 -isystem /usr/include/libpng16 -isystem /usr/include/pango-1.0 -isystem /usr/include/harfbuzz -isystem /usr/include/cairo -isystem /usr/include/glib-2.0 -isystem /usr/lib64/glib-2.0/include -isystem /usr/include/pixman-1 -isystem /usr/include/libdrm -isystem /usr/include/dbus-1.0 -isystem /usr/lib64/dbus-1.0/include -isystem /usr/include/SDL2 -I../src -Isrc -isystem /usr/include/fribidi -std=c++11 -W -Wall -fsanitize=address,undefined -g3 -I/usr/include/boost -Og -fno-omit-frame-pointer -march=native -fsanitize-address-use-after-scope  -fno-optimize-sibling-calls -O3   -I/usr/include/SDL2 -D_REENTRANT -DWESNOTH_PATH=\"/usr/local/share/wesnoth\" -DLOCALEDIR=\"translations\" -DFIFODIR=\"/var/run/wesnothd\" -MD -MT src/CMakeFiles/test.dir/tests/gui/test_gui2.cpp.o -MF src/CMakeFiles/test.dir/tests/gui/test_gui2.cpp.o.d -o src/CMakeFiles/test.dir/tests/gui/test_gui2.cpp.o -c ../src/tests/gui/test_gui2.cpp
../src/tests/gui/test_gui2.cpp:1020:14: error: no matching constructor for initialization of 'gui2::dialogs::editor_new_map'
                return new editor_new_map(width, height);
                           ^              ~~~~~~~~~~~~~
../src/gui/dialogs/editor/new_map.hpp:27:7: note: candidate constructor (the implicit move constructor) not viable: requires 1 argument, but 2 were provided
class editor_new_map : public modal_dialog
      ^
../src/gui/dialogs/editor/new_map.hpp:27:7: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 2 were provided
../src/gui/dialogs/editor/new_map.hpp:45:2: note: candidate constructor not viable: requires 3 arguments, but 2 were provided
        editor_new_map(const t_string& title, int& width, int& height);
        ^
1 error generated.

replace the verbal multiplayer color selector with attached icons (GNA #5199)

Original submission by eleazar on 2006-02-04

Here's an GUI improvement Ivanovich came up with:

Instead of having colored text that of the name of the team color, it would be more useful to have a icon showing what the color is.

Thus the color would be easier to identify and save the translators trouble naming tricky colors.

"color-bulb" is meant to be used in the list, and the other 3 PNGs are a standard buttons.

The TColor parts of the button icons are completely greyscale, equal parts RGB of the following values:

125 medium

255 brightest

15 darkest

240

225

190

175

165

149

145

130

115

95

80

55

35

25

(Reproduced on any)
Release: trunk
Priority: 5 - Normal
Severity: 3 - Normal

untranslatable MP server messages, eg. "has logged into the lobby" (GNA #4355)

Original submission by anonymous on 2005-09-02

there are a couple fo strings that the MP lobby sends to player/observers on some events (like when someone joins the lobby while you are observing a game)

it would be nice to have these translatable.

it would be great to have it in each player's local by either sending the local to the server or having the sentence generated by the client on a server event rather than created by the server

if it can't be done it would be nice to still have them translatable so that "national" servers can be set in different languages

Boucman

(Reproduced on all)
Release: 0.9.6
Priority: 5 - Normal
Severity: 3 - Normal

Please add terrain to the unit list table (GNA #4235)

Original submission by anonymous on 2005-07-12

One thing I am interested in when looking through the unit list

for units that haven't moved is whether or not they are sitting

in villages. It would be helpful to have a new column indicating

the type of terrain the unit is sitting in.

(Reproduced on Any)
Release: 0.9.3
Priority: 5 - Normal
Severity: 3 - Normal

Develop a filter system for traits (GNA #6079)

Original submission by brunowolff on 2006-06-03

Instead of handling special traits (such as dextrous) in unit or race wml, allow for filters as part of the trait definitions.

For example one might put a filter on dextrous so that only unit types with a ranged attack may get it. Or quick may only be

applied to unit types with a speed of at least 4.

Filtering could also be done on the unit type's race for example to handle undead.

The only specification that need stay with the unit type or race wml would be the number of traits that race or unit type gets.

(Reproduced on Any)
Release: 1.3
Priority: 1 - Later
Severity: 1 - Wish

Allow for scheduling actions during animations (GNA #5720)

Original submission by zookeeper on 2006-04-07

While a recruited unit is fading in or when a unit is still moving, it's not possible to select another unit and issue orders to it, which makes playing much less fluid in non-accelerated mode, especially if there are lots of units to move. Such animations should not block UI actions, like selecting another unit, and should therefore be moved to play "in the background".

If an action (like moving, selecting, recruiting or capturing) will trigger an event, it can be known before the actual animation is started, and so if an event will trigger, then the animation can "block" UI actions like selecting another unit and moving it (like it does now whether an event triggers or not). This kind of behaviour is needed to prevent a situation where, for example, the player moves a unit into a location which triggers a name#moveto event, while at the same time selecting another unit which triggers a nameselect event.

(Reproduced on all)
Release: trunk
Priority: 5 - Normal
Severity: 2 - Minor

fixed point macros can't be turned off anymore (GNA #4932)

Original submission by jbreiden on 2005-12-21

in src/util.hpp, there are some macros that allow fixed and floating point calculations to be swapped back and forth. scale_image (in sdl_utils.cpp) and display::draw_bar (in display.cpp) both will break if fixed point is turned off. Can be fixed with some macroificicaion. Maybe it doesn't matter.

(Reproduced on Linux)
Release: head (1.1?)
Priority: 5 - Normal
Severity: 1 - Wish

Import GNA issues

We need to import all the issues from GNA, especially those that are still open.

provide hotkey for switching focus (eg. TAB) (GNA #4340)

Original submission by anonymous on 2005-08-28

Currently the MP lobby (devsrv) behaves like this:

  • If you click on the selected game (that has the red bar), or probably on any game present, you can not input data, unless you return focus on the text by clicking again on the text input row at the bottom of the screen.

  • Clicking on an inactive area of the games' list has no effect.

  • Have not tested, whether clicking on players' list has any effect.

  • This behaviour has not, to my knowledge, been present before, and it restricts the usability of the lobby.

An additional note:

  • I have not tested, whether the same behaviour is currently present on the MP game creation lobby - may be.

(Reproduced on Linux)
Release: 0.9.6+cvs
Priority: 5 - Normal
Severity: 3 - Normal

testrunner crashes

wesnoth @ 81eb23c
running asan instrumented testrunner crashes with stack use after free.

Running 154 test cases...
=================================================================
==28136==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fff47f95f60 at pc 0x000002ad290d bp 0x7fff47f85b70 sp 0x7fff47f85b68
READ of size 8 at 0x7fff47f95f60 thread T0
    #0 0x2ad290c in std::vector<map_generator*, std::allocator<map_generator*> >::begin() const /usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/stl_vector.h:558:45
    #1 0x2ad290c in std::vector<map_generator*, std::allocator<map_generator*> >::empty() const /usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/stl_vector.h:745
    #2 0x2ad0cc8 in gui2::dialogs::editor_generate_map::pre_show(gui2::window&) /home/matthias/vcs/github/wesnoth/build/../src/gui/dialogs/editor/generate_map.cpp:109:2
    #3 0x2c2f564 in gui2::dialogs::modal_dialog::show(CVideo&, unsigned int) /home/matthias/vcs/github/wesnoth/build/../src/gui/dialogs/modal_dialog.cpp:66:2
    #4 0x19eca38 in void (anonymous namespace)::test_resolutions<gui2::dialogs::editor_generate_map>(std::vector<std::pair<unsigned int, unsigned int>, std::allocator<std::pair<unsigned int, unsigned int> > > const&) /home/matthias/vcs/github/wesnoth/build/../src/tests/gui/test_gui2.cpp:209:10
    #5 0x19eca38 in void (anonymous namespace)::test<gui2::dialogs::editor_generate_map>() /home/matthias/vcs/github/wesnoth/build/../src/tests/gui/test_gui2.cpp:343
    #6 0x19eca38 in test_gui2::test_method() /home/matthias/vcs/github/wesnoth/build/../src/tests/gui/test_gui2.cpp:411
    #7 0x19d8cbf in test_gui2_invoker() /home/matthias/vcs/github/wesnoth/build/../src/tests/gui/test_gui2.cpp:377:1
    #8 0x19bd591 in boost::detail::function::void_function_invoker0<void (*)(), void>::invoke(boost::detail::function::function_buffer&) /usr/include/boost/function/function_template.hpp:118:11
    #9 0x7fc24101c9fd in boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke(boost::detail::function::function_buffer&) (/lib64/libboost_unit_test_framework.so.1.60.0+0x439fd)
    #10 0x1a7a000 in boost::function0<int>::operator()() const /usr/include/boost/function/function_template.hpp:770:14
    #11 0x1a79513 in boost::detail::translator_holder<game::error, void (*)(game::error const&)>::operator()(boost::function<int ()> const&) /usr/include/boost/test/execution_monitor.hpp:419:46
    #12 0x1a7c83f in boost::detail::translator_holder<config::error, void (*)(config::error const&)>::operator()(boost::function<int ()> const&) /usr/include/boost/test/execution_monitor.hpp:419:29
    #13 0x7fc24101c079 in boost::execution_monitor::catch_signals(boost::function<int ()> const&) (/lib64/libboost_unit_test_framework.so.1.60.0+0x43079)
    #14 0x7fc24101c227 in boost::execution_monitor::execute(boost::function<int ()> const&) (/lib64/libboost_unit_test_framework.so.1.60.0+0x43227)
    #15 0x7fc24101c875 in boost::execution_monitor::vexecute(boost::function<void ()> const&) (/lib64/libboost_unit_test_framework.so.1.60.0+0x43875)
    #16 0x7fc24103f29a in boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::function<void ()> const&, unsigned int) (/lib64/libboost_unit_test_framework.so.1.60.0+0x6629a)
    #17 0x7fc241026e55 in boost::unit_test::framework::state::execute_test_tree(unsigned long, unsigned int) (/lib64/libboost_unit_test_framework.so.1.60.0+0x4de55)
    #18 0x7fc241027590 in boost::unit_test::framework::state::execute_test_tree(unsigned long, unsigned int) (/lib64/libboost_unit_test_framework.so.1.60.0+0x4e590)
    #19 0x7fc241021330 in boost::unit_test::framework::run(unsigned long, bool) (/lib64/libboost_unit_test_framework.so.1.60.0+0x48330)
    #20 0x7fc24103d23e in boost::unit_test::unit_test_main(bool (*)(), int, char**) (/lib64/libboost_unit_test_framework.so.1.60.0+0x6423e)
    #21 0x1a71a93 in main /usr/include/boost/test/unit_test.hpp:63:12
    #22 0x7fc240610400 in __libc_start_main /usr/src/debug/glibc-2.24-33-ge9e69e4/csu/../csu/libc-start.c:289
    #23 0x18ca699 in _start (/home/matthias/vcs/github/wesnoth/build/test+0x18ca699)

Address 0x7fff47f95f60 is located in stack of thread T0 at offset 64960 in frame
    #0 0x2c2ee9f in gui2::dialogs::modal_dialog::show(CVideo&, unsigned int) /home/matthias/vcs/github/wesnoth/build/../src/gui/dialogs/modal_dialog.cpp:39

  This frame has 11 object(s):
    [32, 160) 'pc' (line 48)
    [192, 224) 'ref.tmp' (line 48)
    [256, 257) 'ref.tmp6' (line 48)
    [272, 304) 'ref.tmp7' (line 49)
    [336, 337) 'ref.tmp8' (line 49)
    [352, 384) 'agg.tmp'
    [416, 448) 'ref.tmp10' (line 50)
    [480, 481) 'ref.tmp11' (line 50)
    [496, 528) 'agg.tmp12'
    [560, 568) 'window' (line 57)
    [592, 600) 'ref.tmp25' (line 68) <== Memory access at offset 64960 overflows this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism or swapcontext
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-use-after-scope /usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/stl_vector.h:558:45 in std::vector<map_generator*, std::allocator<map_generator*> >::begin() const
Shadow bytes around the buggy address:
  0x100068feab90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100068feaba0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100068feabb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100068feabc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x100068feabd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x100068feabe0: 00 00 00 00 00 00 00 00 00 00 00 00[f8]f8 f8 00
  0x100068feabf0: 00 00 00 00 f8 f8 f8 f8 00 00 00 00 f8 00 f8 00
  0x100068feac00: 00 00 f8 00 00 00 f8 f8 f8 f8 00 00 00 00 f8 00
  0x100068feac10: f8 f8 f8 f8 00 00 00 00 f8 00 f8 00 00 00 f8 f8
  0x100068feac20: f8 f8 00 00 00 00 f8 00 f8 00 00 00 f8 f8 f8 00
  0x100068feac30: 00 00 00 00 f8 f8 f8 f8 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==28136==ABORTING

Set up a new set of mailing lists

With GNA going down, the mailing lists will be disappearing too. If I'm not mistaken, some contributors (particularly translators) rely heavily on them, so we need to find a replacement fast.

There are two broad options:

  1. Find a website that provides a free mailing list service. For example, @ln-zookeeper discovered Librelist, which is a very simple service and easy to use, though it has no real administrative functions for the mailing lists (but I don't know if those are needed). It may also be notable that none of the lists hosted by it have seen activity in the past two years.

  2. Set up a mailing list on the Wesnoth servers, or on the servers of some other contributor (for example, the Jenkins server?). There is a variety of different mailing list software to choose from in this case. GNU Mailman is, I believe, the software that GNA used and thus might be more familiar to some members. Mlmmj looks relatively lightweight and easy-to-use, though it hasn't been updated in two years. Other promising-looking possibilities include Sympa and Dada Mail.

Documentation of resource GUI elements (GNA #6164)

Original submission by anonymous on 2006-06-13

As a new player, I find the in-game documentation lacking mention of the GUI elements on the top of the screen - the resource indicators. Specifically the meaning of some of the resource indicators at the top.

I would suggest several things:

  1. Adding a bit more description to the tooltips of the resources. * For example, instead of just "Upkeep", writing something like "Upkeep - the amount of gold deducted each turn. The number in parentheses represents the upkeep if you lose control of all villages" (I admit it's not a very clear description, just to get the idea).
  • Should the flag icon tooltip really give the name of the hero? It should state what the numbers 4/24 mean. For example: "Turn number - The game ends when the maximum turns are reached". With that description, there's no room for the current player's name. Perhaps it should not be a tooltip, but a text that is always displayed near the flag - "Konrad's turn".

  • Tooltips should be activated when hovering over the entire black rectangle, not just the icon.

If the description is too long, maybe "Detailed tooltips" should be a option in the menu for new players to toggle. (I think it worked well in Warcraft III).

  1. Adding a GUI section to the documents that either has a picture of the game area with numbered arrows alongside a description for each, or different pictures of the GUI elements with descriptions on the same line.

  2. Just like the "Time of Day" and "Orb" sections, adding a picture and description of the Income and Upkeep resource indicators to the "Income and Upkeep" section.

I am willing to help implement my suggestions once I play the game some more. Please let me know what you think.

(Reproduced on Linux)
Release: 1.0.2
Priority: 5 - Normal
Severity: 3 - Normal

Show the weapon tooltip in recruit/recall dialogs too (GNA #3698)

Original submission by anonymous on 2004-09-20

The information given in the weapon tooltip on the side panel, that shows how well your known enemies fare against a certain type of weapon, f ex touch -70% vs. Ghost, would come in handy when recruiting and recalling as well.

It would probably be best to keep it as a tooltip, not to clutter the recruit and recall dialogs unnecessarily.

(Reproduced on All)
Release: all
Priority: 3 - Low
Severity: 1 - Wish

support anonymous issues

it would be nice to be have some form to enable users to report bugs without creating a github account. since this is a public repo we could just have a dummy account that doesn't even need access to the wesnoth repo to let a script create issues with it. One of the problems with suhc a solution that is that i am unuse whethe rit also alows user to respons in existent issues

Fix the AI "cheating" on fog/shroud maps (GNA #3379)

Original submission by anonymous on 2004-05-13

Making the AI understand fog is probably not that hard. The trick is to let it "remember" unit positions for at least one turn.

Shroud on the other hand, might prove difficult, because the AI won't know not to "explore" terrains that greatly slow its movement. At the least, we would need a significant new exploration AI.

(Reproduced on GNU Linux)
Release: 0.7.7-CVS
Priority: 3 - Low
Severity: 2 - Minor

Tooltip of items in Menubar should be less picky (GNA #5162)

Original submission by eleazar on 2006-01-27

Currently the tooltip lable only appears when you mouse over the icons in the menubar: i.e. "villages", "income" etc. It wouldn't be hard to miss the fact that there are tooltips for these items at all.

It would be more user friendly if placing the pointer anywhere in the dark box that cointains the icon and number would invoke the tooltip to be displayed.

(Reproduced on any)
Release: trunk
Priority: 5 - Normal
Severity: 2 - Minor

allow MP game list to be sorted (GNA #4694)

Original submission by anonymous on 2005-11-11

New games in multiplayer server (the green ones) should be at begining, to avoid scrolling.

Would be nice too a time per move feature in multiplayer depending on the number of units thah you have and the specified by the user.

(Reproduced on all)
Release: 1.0
Priority: 5 - Normal
Severity: 3 - Normal

Work out new bug protocol

The wiki currently contains the following text:

  • When adding a new bug, please choose either "Bug" or "Feature Request" as its Category; it may not be noticed if you leave the Category as "None".
  • We use the Status values "None" (awaiting action), "Fixed", "Won't Fix", "Invalid" (not a bug), "Works For Me" (unreproducible), or "Need Info".
  • A bug which is fixed is marked "Fixed" by a developer, probably the one committing the fix or reviewing it.
  • A bug present in a release is marked "Closed" only upon a new release containing the fix.
  • Any bug present only in WesnothRepository, and not in any named release, is marked "Closed" as soon as it is fixed.

Do we want to keep this protocol? (This means adding a "fixed" label.) Or do we want to change it? I think using auto-close as appropriate is a good idea here. That wouldn't get in the way of the practice of leaving bugs open until they're in a release, since only commits merged to master can auto-close bugs. On the other hand, it would get in the way for backported fixes, which are merged to master first and then to 1.14.

Also, on GitHub, if I understand correctly, only contributors can assign labels, which means the submitter in general cannot choose between "bug" or "enhancement" as requested.

Provide useful object/weapon displays (GNA #4120)

Original submission by anonymous on 2005-05-10

In 0.9.1, the unit display on the side panel tries to list non-weapon [object]s beside the unit's traits, with the result that they get truncated if they have long names or if there are several with short names.

Moreover, when I filed bug #13036 I was told that even that much display was an accident, and had been removed from 0.9.1+ CVS.

AFAICT, that leaves us without any way to see objects at all, except for units on the recall list. So please provide us with something on the unit display. Preferably a vertical listing, with line wraps on the individual objects, so that we can see everything if there are several or if any have long names.

The weapon display is better, but it truncates longish names and will only show four or five weapons, so it would be nice if you could let this (and the objects) take up as much vertical space as needed, and scroll if they need more space than the screen resolution provides.

Thanks.

(Reproduced on Linux)
Release: 0.9.1
Priority: 5 - Normal
Severity: 3 - Normal

Starting Battle For Wesnoth adds EN-US keyboard layout

When starting Wesnoth, the Keyboard Layout English (United States) - US is added to the available Keyboards (Language Bar). The Keyboard Layout persists upon closing the game and only disappears when restarting the PC.

Steps to reproduce:

  • Make sure the English keyboard layout is not listed in the language bar as available keyboard layout.
  • Start Battle for Wesnoth.

The version of the game is Windows 1.12.6 running on Windows 7.

GUI2 "border-layout" widget

Basically a widget that allows you to push things to one side. Would contain [left], [right], [top], and [bottom]. Possibly also [center]. Each of these would be a subgrid.

The one hosting a game should be able to name local players. (GNA #4154)

Original submission by anonymous on 2005-06-08

When you host a game, you can set Human to the category of the player.

That category allows another local player to play a network with others. Two or more players on the host, and the others on the lan.

But setting that category to aplayer doesn't permit to name him.

Also, during the game, when it is the turn to that player to play, when speaking he doesn't have his flag color to texts, and have the name of the hoster.

(Reproduced on any)
Release: any
Priority: 3 - Low
Severity: 1 - Wish

Having a way to watch chats in the lobby while playing a game would be useful (GNA #4342)

Original submission by anonymous on 2005-08-28

I have noticed a lot of people keep open two games while playing

in order to talk in the lobby while playing a game. It would

be nice if there was a way for people to talk in the lobby while

playing a game.

One possible way this might work is to have lobby chats go down

the right side of the screen and to use a different talk command

than for in game chats. Whether or not the lobby messages show

up should probably be a preference. Talking to the lobby should

turn that preference on but not change the saved setting.

(Reproduced on all)
Release: 0.9.6+cvs
Priority: 3 - Low
Severity: 2 - Minor

Add section in help explaining the use of the current set of hotkeys (GNA #4067)

Original submission by anonymous on 2005-04-15

Many players seem to live in ignorant bliss about the use of hotkeys, and this is aggravated by the fact that the MANUAL seems to be constantly out of date on this particular field.

IMO, this could be remedied by adding a help section going through and explaining in slightly wordier manner than the curt texts given in Preferences for what the hotkeys do.

Preferably this section should read off the current setting of hotkeys, and display that in help.

This section could be located under Gameplay.

(Reproduced on All)
Release: 0.9.0
Priority: 1 - Later
Severity: 2 - Minor

streamlining recall/recruit of multiple units (GNA #5007)

Original submission by eleazar on 2006-01-06

With a large list of units options and recalls, it's unneccesarily annoying to get multiple units in the battle, with all the repeated scrolling through the lists.

2 relatively simple changes would improve things:

  • the recall and recruit dialogs should remember it's last scroll positions.

  • multiple units should be selectable within the recall dialog (using shift?) up to the number of available castle spaces.

(Reproduced on any)
Release: any
Priority: 5 - Normal
Severity: 3 - Normal

Recruit/Recall Hotkeys (GNA #5324)

Original submission by naitsirhc on 2006-02-17

I have numerous suggestions to enhance the game's recruitment action. They are seperate suggestions and do not affect each other, but they are all for one goal; make recruiting/recalling easier, faster and more user-friendly.

Suggestion 1: Recruitment Hotkey

Normally, when you recruit units, you must press ctrl+r or alt+r and then select a unit from the list and click the OK button or double-click it. This is slow when the unit you want to select is far way down the list. It's also annoying when you want a quick game, and you need to recruit numerous units, you have to do so manually.

My suggestion is that when you get to the recruit/recall menu, you should be able to automatically select units by pressing the first letters of their name. E.g. to select Peasant from the recruit menu, you

Recruitment Hotkey

Format: CTRL + R + u = where u is a letter of the unit to select, if there are many options, wait for another letter and do so until the name is unique and satisfied. Backspace cancels the last letter pressed.

I.e.

CTRL+R + p = if there is only one letter p unit on the list

CTRL+R + pe = if there is another p. I.e. Plaguebearers etc.

CTRL+R + pea = and so on, if another unit consumes pe, i.e. Peon

Notes: All instances of u is case insensitive! Even the u variable in the other sections. So a Plaguebearer unit is equal to a plaguebearer unit according to the parser I'm suggesting.

In the recall menu, it would be different since there would be hundreds of units of the same type there, and finding them by name takes time. So it would be like this instead.

Recall Selection Hotkey

Format: ALT + R + u + n + ENTER= where u is a letter of the unit to select, if there are many options, go to the first alphabetical(closer to a in the english alphabet) option, wait for another letter and change page until the name is unique and satisfied. Backspace cancels the last letter pressed. n is a number which of the unit in the list starting from the first unit with the same page letter counting from 1, it's a way to easily recall them with just a glimpse and without touching the mouse.

ALT+R + p = go to the page where all peasants are

ALR+R + pe = another page go to, if there is another p. i.e. Plaguebearers etc.

ALR+R + pl + 3 + ENTER = to select the 3rd plaguebearer from a list of units.

and so on

Typing the number of the unit in the list starting from the first unit with the same page letter counting from 1, you can press the number of the guy you want to recall just by pressing 1 or 2 or any number and ENTER, and he will be recalled.

Suggestion 2: Numbered Recruitment

When you want to get for example 10 peasants, even when the Recruitment Hotkey featured above is implemented, you need to press multiple confusing hotkey or slow mouse combinations. This is slow, and if you discoordinated you might even get the wrong unit. I suggest a number of units to recruit edit box, and a shortcut for it.

I.e. to recruit 10 peasants(mouse mode):

RMB + Recruit + Click mass recruitment edit box + 10 + Double-click peasants

Shortcut Mode:

Format: CTRL + R + x + u = where x is the number of units to fetch and u is the unit name hotkey

I.e. to recruit 10 peasants:

CTRL+R + 10 + p = if there is only one letter p unit on the list

CTRL+R + 10 + pe = if there is another p. i.e. Plaguebearers etc.

etc.

This should also work in recalling. When you do this there, you get the first x number of qualified soldiers. And there should be no problem with this at the current moment, as there are no units yet whose name starts with a number.

Error Checking

If the number exceeds the maximum your current keep can take, your keep will just be filled. If the cost exceeds your current gold, it will just get the maximum number available. If in recall mode and there is less soldiers available than the number specified, all the soldiers available gets recalled.

Suggestion 3: Mass Recruit/Recall

This is a rather awkward feature. It's just a checkbox that says Mass Recall. When you click it (btw. it has a shortcut key, i suggest tilde), it toggles the feature. When the feature is turned on, anytime you recall/recruit a unit, the recall/recruit window will not be lost, but instead, will continue to be showed until you fill your keep. Any time you recall/recruit a unit, another part of the keep is selected clockwise from the last point you have recalled. And even though you recall en masse, you can still undo whatever you recall there one by one.

Suggestion 4: Window Hide

In mass recruit mode, there should also be a shortcut key to hide the window for a while. This is so that the player can see what units he had already recruited, and where will the unit he selects be warped(the location will be masked red). I suggest the '-' key. When the user holds the key the window disappears, and upon release it reappears.

(Reproduced on All)
Release: 1.1.1
Priority: 3 - Low
Severity: 1 - Wish

memory leak

Unfortunately I am not really sure how I got there because I was trying to find out about another issue while this showed up.

Direct leak of 24 byte(s) in 1 object(s) allocated from:
    #0 0x197c4d2 in operator new(unsigned long) /home/matthias/LLVM/LLVM_dev/stage_2/llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:82:35
    #1 0x1ed0f3b in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<sound::music_track*>(sound::music_track*) /usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/shared_ptr_base.h:572:16
    #2 0x1ed0e8e in std::__shared_ptr<sound::music_track, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<sound::music_track>(sound::music_track*) /usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/shared_ptr_base.h:885:24
    #3 0x1ed0db9 in std::shared_ptr<sound::music_track>::shared_ptr<sound::music_track>(sound::music_track*) /usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/shared_ptr.h:117:11
    #4 0x1ed0db9 in void __gnu_cxx::new_allocator<std::shared_ptr<sound::music_track> >::construct<std::shared_ptr<sound::music_track>, sound::music_track*>(std::shared_ptr<sound::music_track>*, sound::music_track*&&) /usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/ext/new_allocator.h:120
    #5 0x1ebd21e in void std::allocator_traits<std::allocator<std::shared_ptr<sound::music_track> > >::construct<std::shared_ptr<sound::music_track>, sound::music_track*>(std::allocator<std::shared_ptr<sound::music_track> >&, std::shared_ptr<sound::music_track>*, sound::music_track*&&) /usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/alloc_traits.h:455:8
    #6 0x1ebd21e in void std::vector<std::shared_ptr<sound::music_track>, std::allocator<std::shared_ptr<sound::music_track> > >::emplace_back<sound::music_track*>(sound::music_track*&&) /usr/lib/gcc/x86_64-redhat-linux/6.3.1/../../../../include/c++/6.3.1/bits/vector.tcc:96
    #7 0x1eb5a38 in sound::play_music_config(config const&, int) /home/matthias/vcs/github/wesnoth/build/../src/sound.cpp:629:23
    #8 0x41fbd82 in gui2::dialogs::story_viewer::display_part(gui2::window&) /home/matthias/vcs/github/wesnoth/build/../src/gui/dialogs/story_viewer.cpp:136:3
    #9 0x41f8e57 in gui2::dialogs::story_viewer::pre_show(gui2::window&) /home/matthias/vcs/github/wesnoth/build/../src/gui/dialogs/story_viewer.cpp:114:2
    #10 0x2179504 in gui2::dialogs::modal_dialog::show(CVideo&, unsigned int) /home/matthias/vcs/github/wesnoth/build/../src/gui/dialogs/modal_dialog.cpp:66:2
    #11 0x3bbccd8 in gui2::dialogs::story_viewer::display(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::iterator_range<config::const_child_iterator> const&, CVideo&) /home/matthias/vcs/github/wesnoth/build/../src/gui/dialogs/story_viewer.hpp:52:36
    #12 0x3ba9eea in playsingle_controller::play_scenario(config const&) /home/matthias/vcs/github/wesnoth/build/../src/playsingle_controller.cpp:238:3
    #13 0x32cc8d0 in campaign_controller::playsingle_scenario(end_level_data&) /home/matthias/vcs/github/wesnoth/build/../src/game_initialization/playcampaign.cpp:194:36
    #14 0x32cdfaf in campaign_controller::play_game() /home/matthias/vcs/github/wesnoth/build/../src/game_initialization/playcampaign.cpp:281:11
    #15 0x20f5d02 in game_launcher::launch_game(game_launcher::RELOAD_GAME_DATA) /home/matthias/vcs/github/wesnoth/build/../src/game_launcher.cpp:949:37
    #16 0x1982555 in do_gameloop(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) /home/matthias/vcs/github/wesnoth/build/../src/wesnoth.cpp:827:10
    #17 0x197fa25 in main /home/matthias/vcs/github/wesnoth/build/../src/wesnoth.cpp:1055:19
    #18 0x7f1732dfd400 in __libc_start_main /usr/src/debug/glibc-2.24-33-ge9e69e4/csu/../csu/libc-start.c:289

Please add terrain to the unit list table (GNA #4235)

Original submission by anonymous on 2005-07-12

One thing I am interested in when looking through the unit list

for units that haven't moved is whether or not they are sitting

in villages. It would be helpful to have a new column indicating

the type of terrain the unit is sitting in.

(Reproduced on Any)
Release: 0.9.3
Priority: 5 - Normal
Severity: 3 - Normal

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.