Deerportal is a open source (free as a speech, free as a beer) hybrid game which utilize board and card games mechanisms. World of the game is driven by four classical elemets along with Almighty Deer God.
Homepage: https://devcarpet.net/deerportal/
Collect the diamonds, execute actions on cards and survive the chaos of nature! Compete against 3 other players.
Features
--------
* 0-4 players mode
* changing seasons
* open source (zlib / cc-by 4.0)
SFML, Linux, OSX, Windows.

If you would like to see Deer Portal in Debian repositories, there is an opened bug: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=826612 - please help :)
In our [releases](https://github.com/deerportal/deerportal/releases) section we are providing compiled binaries for Ubuntu (Trusty, Xenial) and Windows.
+### Snap install
+
+```
+sudo snap install deerportal --classic
+```
+
#### Ubuntu apt repo
If you want to have an easy installation via system apt, add one of the folowing (depends on your distro) to your /etc/apt/sources.list, if you have Trusty 14.04
- if (!textureCardBases[0].loadFromFile(ASSETS_PATH"assets/img/card-water-2-diam_m.png"))
+ if (!textureCardBases[0].loadFromFile(get_full_path(ASSETS_PATH"assets/img/card-water-2-diam_m.png")))
std::exit(1);
- if (!textureCardBases[1].loadFromFile(ASSETS_PATH"assets/img/card-earth-2-diam_m.png"))
+ if (!textureCardBases[1].loadFromFile(get_full_path(ASSETS_PATH"assets/img/card-earth-2-diam_m.png")))
std::exit(1);
- if (!textureCardBases[2].loadFromFile(ASSETS_PATH"assets/img/card-fire-2-diam_m.png"))
+ if (!textureCardBases[2].loadFromFile(get_full_path(ASSETS_PATH"assets/img/card-fire-2-diam_m.png")))
std::exit(1);
- if (!textureCardBases[3].loadFromFile(ASSETS_PATH"assets/img/card-air-2-diam_m.png"))
+ if (!textureCardBases[3].loadFromFile(get_full_path(ASSETS_PATH"assets/img/card-air-2-diam_m.png")))
std::exit(1);
// if (!textureGameBackground.loadFromFile(ASSETS_PATH"assets/img/game-ackground.png"))
// std::exit(1);
// if (!textureTiles.loadFromFile(ASSETS_PATH"assets/img/zw-tilesets/_MAP.png"))
// std::exit(1);
// if (!textureFaces.loadFromFile(ASSETS_PATH"assets/img/faces.jpg"))
// std::exit(1);
// if (!textureGui.loadFromFile(ASSETS_PATH"assets/img/gui.png"))
// std::exit(1);
// if (!textureSymbols.loadFromFile(ASSETS_PATH"assets/img/symbols.png"))
// std::exit(1);
// if (!textureSeasons.loadFromFile(ASSETS_PATH"assets/img/seasons.png"))
// std::exit(1);
- if (!textureCharacters.loadFromFile(ASSETS_PATH"assets/img/characters-new.png"))
+ if (!textureCharacters.loadFromFile(get_full_path(ASSETS_PATH"assets/img/characters-new.png")))
std::exit(1);
- if (!backgroundDark.loadFromFile(ASSETS_PATH"assets/img/background_dark.png"))
+ if (!backgroundDark.loadFromFile(get_full_path(ASSETS_PATH"assets/img/background_dark.png")))
std::exit(1);
- if (!textureBoardDiamond.loadFromFile(ASSETS_PATH"assets/img/board_diamonds.png"))
+ if (!textureBoardDiamond.loadFromFile(get_full_path(ASSETS_PATH"assets/img/board_diamonds.png")))
std::exit(1);
- if (!textureMenu.loadFromFile(ASSETS_PATH"assets/img/dp_intro_menu.png"))
+ if (!textureMenu.loadFromFile(get_full_path(ASSETS_PATH"assets/img/dp_intro_menu.png")))
std::exit(1);
- if (!textureLetsBegin.loadFromFile(ASSETS_PATH"assets/img/letsbegin.png"))
+ if (!textureLetsBegin.loadFromFile(get_full_path(ASSETS_PATH"assets/img/letsbegin.png")))
std::exit(1);
- if (!textureButtonCpu.loadFromFile(ASSETS_PATH"assets/img/button-cpu.png"))
+ if (!textureButtonCpu.loadFromFile(get_full_path(ASSETS_PATH"assets/img/button-cpu.png")))
std::exit(1);
- if (!textureButtonHuman.loadFromFile(ASSETS_PATH"assets/img/button-human.png"))
+ if (!textureButtonHuman.loadFromFile(get_full_path(ASSETS_PATH"assets/img/button-human.png")))
std::exit(1);
- if (!textureDeerGod.loadFromFile(ASSETS_PATH"assets/img/deer-god.png"))
+ if (!textureDeerGod.loadFromFile(get_full_path(ASSETS_PATH"assets/img/deer-god.png")))
std::exit(1);
- if (!textureBigDiamond.loadFromFile(ASSETS_PATH"assets/img/diamond-big.png"))
+ if (!textureBigDiamond.loadFromFile(get_full_path(ASSETS_PATH"assets/img/diamond-big.png")))
std::exit(1);
int defaultArray[5][8] = {
//Cash Food Energy Faith
{10, 2, 0, 0, 0, 0, 0, 0}, // base
{10, 1, 2, 0, 0, 5, 0, 0}, // windmill
{15, 0, 0, 2, 2, 0, 0, 0}, // granary
{20, 5, 4, 0, 4, 0, 0, 0}, // marketplace
{5, 0, 2, 0, 0, 0, 0, 2} // monasterium
};
int defaultFields[5] = {443, 651, 442, 585, 1100};
/*
* Array with description of the field
* global rule = even indexes are price, odd - monthly cost
* [0] - price in cash
* [1] - monthly cash cost
* [2] - price - in food
* [3] - monthly food cost
* [4] - price in energy
* [5] - monthly energy cost
* [6] - price in faith
* [7] - monthly cost in faith
*
*/
int counter = 0;
for (int i: defaultFields)
{
std::map<int, int> params;
for (int j=0;j<8;j++)
{
params.insert({j, defaultArray[counter][j]});
}
// params.insert({0, 10});
// params.insert({1, 2});
// params.insert({2, 10});
// params.insert({3, 0});
// params.insert({4, 10});
// params.insert({5, 0});
// params.insert({6, 0});
// params.insert({7, 0});
tilesDescription.insert({i, params});
counter++;
};
tilesTxt.insert({443, "Your base."});
tilesTxt.insert({651, "Windmill, produces energy.\nEnergy is a basic resource in a game,\nneeded by other buildings to running them."});
tilesTxt.insert({442, "Granary, food storehouse.\nFood gives your people ability to live.\nWithout the food your people will face\na death by starvation."});