From a4566b318f786ea0dd365fec898f371e9a193873 Mon Sep 17 00:00:00 2001
From: Juan RP <xtraeme@gmail.com>
Date: Mon, 10 Jun 2019 11:22:15 +0200
Subject: [PATCH] New package: lbreakouthd-1.0.4.

Signed-off-by: Juan RP <xtraeme@gmail.com>
---
 srcpkgs/lbreakouthd/patches/musl.patch | 743 +++++++++++++++++++++++++
 srcpkgs/lbreakouthd/template           |  13 +
 2 files changed, 756 insertions(+)
 create mode 100644 srcpkgs/lbreakouthd/patches/musl.patch
 create mode 100644 srcpkgs/lbreakouthd/template

diff --git a/srcpkgs/lbreakouthd/patches/musl.patch b/srcpkgs/lbreakouthd/patches/musl.patch
new file mode 100644
index 00000000000..a4bb38476c7
--- /dev/null
+++ b/srcpkgs/lbreakouthd/patches/musl.patch
@@ -0,0 +1,743 @@
+uint is not portable, use unsigned int instead. Fixes musl.
+	--xtraeme
+
+--- src/clientgame.cpp	2018-12-21 19:43:51.000000000 +0100
++++ src/clientgame.cpp	2019-06-10 11:04:25.230551850 +0200
+@@ -88,7 +88,7 @@ int ClientGame::init(const string& setna
+ ClientPlayer *ClientGame::getNextPlayer()
+ {
+ 	ClientPlayer *p = NULL;
+-	uint startId = curPlayer;
++	unsigned int startId = curPlayer;
+ 
+ 	do {
+ 		curPlayer++;
+@@ -107,7 +107,7 @@ ClientPlayer *ClientGame::getNextPlayer(
+  * pis is what controls have been activated
+  * return flags what has to be rendered new
+  */
+-int ClientGame::update(uint ms, double rx, PaddleInputState &pis)
++int ClientGame::update(unsigned int ms, double rx, PaddleInputState &pis)
+ {
+ 	int oldScore = game->paddles[0]->score;
+ 	int ret = 0;
+--- src/clientgame.h	2019-03-07 15:36:01.000000000 +0100
++++ src/clientgame.h	2019-06-10 11:04:25.226551802 +0200
+@@ -21,19 +21,19 @@
+ 
+ class ClientPlayer {
+ 	string name;
+-	uint lives;
+-	uint maxLives;
++	unsigned int lives;
++	unsigned int maxLives;
+ 	int score;
+-	uint level;
++	unsigned int level;
+ 	Level snapshot;
+ public:
+-	ClientPlayer(const string &n, uint l, uint ml) :
++	ClientPlayer(const string &n, unsigned int l, unsigned int ml) :
+ 			name(n), lives(l), maxLives(ml), score(0), level(0) {
+ 		_loginfo("Added player %s\n",n.c_str());
+ 	};
+ 	const string& getName() { return name; }
+-	uint getLives() { return lives; }
+-	uint getMaxLives() { return maxLives; }
++	unsigned int getLives() { return lives; }
++	unsigned int getMaxLives() { return maxLives; }
+ 	void gainLife() {
+ 		if (lives < maxLives)
+ 			lives++;
+@@ -48,11 +48,11 @@ public:
+ 		score += s;
+ 		return score;
+ 	}
+-	void setLives(uint l) { lives = l; }
++	void setLives(unsigned int l) { lives = l; }
+ 	void setScore(int s) { score = s; }
+-	uint getLevel() { return level; }
+-	uint nextLevel() { return ++level; }
+-	void setLevel(uint l) { level = l; }
++	unsigned int getLevel() { return level; }
++	unsigned int nextLevel() { return ++level; }
++	void setLevel(unsigned int l) { level = l; }
+ 	void setLevelSnapshot(const Level *l) {
+ 		if (l == NULL)
+ 			game_get_level_snapshot(&snapshot);
+@@ -100,7 +100,7 @@ class ClientGame {
+ 	Game *game; /* current game context */
+ 	Hiscores hiscores;
+ 	vector<unique_ptr<ClientPlayer>> players;
+-	uint curPlayer;
++	unsigned int curPlayer;
+ 	ClientPlayer *lastDeadPlayer;
+ 	string msg;
+ 	Timeout frictionTimeout;
+@@ -114,12 +114,12 @@ public:
+ 	ClientGame(Config &cfg);
+ 	~ClientGame();
+ 	int init(const string& setname, int levelid = 0);
+-	int update(uint ms, double rx, PaddleInputState &pis);
++	int update(unsigned int ms, double rx, PaddleInputState &pis);
+ 	Game *getGameContext() { return game; }
+ 	string getLevelsetName() { return levelset->name; }
+ 	void getCurrentLevelNameAndAuthor(string &name, string &author) {
+ 		ClientPlayer *p = players[curPlayer].get();
+-		uint lid = p->getLevel();
++		unsigned int lid = p->getLevel();
+ 		if (lid >= (uint)levelset->count) {
+ 			name = "none";
+ 			author = "none"; /* is done, should not happen */
+@@ -131,8 +131,8 @@ public:
+ 	int getLevelCount() { return levelset->count; }
+ 	HiscoreChart *getHiscoreChart() { return hiscores.get(levelset->name); }
+ 	ClientPlayer* getCurrentPlayer() {return players[curPlayer].get(); }
+-	uint getCurrentPlayerId() {return curPlayer; }
+-	void setCurrentPlayerId(uint id) {
++	unsigned int getCurrentPlayerId() {return curPlayer; }
++	void setCurrentPlayerId(unsigned int id) {
+ 		curPlayer = id;
+ 		/* adjust paddle score */
+ 		game->paddles[0]->score = players[curPlayer]->getScore();
+@@ -143,7 +143,7 @@ public:
+ 	void updateHiscores();
+ 	const string& getPlayerMessage() { return msg; }
+ 	vector<unique_ptr<ClientPlayer>>& getPlayers() { return players; }
+-	void resumePlayer(uint pid, uint lives, int score, uint level) {
++	void resumePlayer(unsigned int pid, unsigned int lives, int score, unsigned int level) {
+ 		players[pid]->setLives(lives);
+ 		players[pid]->setScore(score);
+ 		players[pid]->setLevel(level);
+--- src/menu.cpp	2018-11-24 14:35:44.000000000 +0100
++++ src/menu.cpp	2019-06-10 11:04:25.231551862 +0200
+@@ -24,7 +24,7 @@ extern SDL_Renderer *mrc;
+ Font *MenuItem::fNormal = NULL;
+ Font *MenuItem::fFocus = NULL;
+ Font *MenuItem::fTooltip = NULL;
+-uint MenuItem::tooltipWidth = 300;
++unsigned int MenuItem::tooltipWidth = 300;
+ 
+ /** Helper to render a part of the menu item. Position is determined
+  * by given alignment. */
+--- src/menu.h	2018-12-22 13:30:58.000000000 +0100
++++ src/menu.h	2019-06-10 11:04:25.227551814 +0200
+@@ -59,7 +59,7 @@ protected:
+ 	}
+ public:
+ 	static Font *fNormal, *fFocus, *fTooltip;
+-	static uint tooltipWidth;
++	static unsigned int tooltipWidth;
+ 
+ 	MenuItem(const string &c, const string &tt, int aid = AID_NONE) :
+ 			caption(c), lblNormal(true), lblFocus(true),
+@@ -97,7 +97,7 @@ public:
+ 		}
+ 
+ 	}
+-	virtual void update(uint ms) {
++	virtual void update(unsigned int ms) {
+ 		if (!focus && fadingAlpha > 0) {
+ 			fadingAlpha -= 0.7*ms;
+ 			if (fadingAlpha < 0)
+@@ -211,9 +211,9 @@ public:
+ 		setValue(options[v]);
+ 	}
+ 	MenuItemList(const string &c, const string &tt, int aid,
+-					int &v, const char **opts, uint optNum)
++					int &v, const char **opts, unsigned int optNum)
+ 			: MenuItemRange(c,tt,aid,v,0,optNum-1,1) {
+-		for (uint i = 0; i < optNum; i++)
++		for (unsigned int i = 0; i < optNum; i++)
+ 			options.push_back(opts[i]);
+ 		setValue(options[v]);
+ 	}
+@@ -247,10 +247,10 @@ class MenuItemIntList : public MenuItemR
+ 	vector<int> options;
+ public:
+ 	MenuItemIntList(const string &c, const string &tt,
+-					int &v, const int *opts, uint optNum)
++					int &v, const int *opts, unsigned int optNum)
+ 				: MenuItemRange(c,tt,AID_NONE,idx,0,optNum-1,1), val(v) {
+ 		idx = 0;
+-		for (uint i = 0; i < optNum; i++) {
++		for (unsigned int i = 0; i < optNum; i++) {
+ 			if (opts[i] == val)
+ 				idx = i;
+ 			options.push_back(opts[i]);
+@@ -334,7 +334,7 @@ public:
+ 		int w = theme.menuItemWidth;
+ 		int x = theme.menuX - w/2;
+ 		int y = theme.menuY - h/2;
+-		for (uint i = 0; i < items.size(); i++) {
++		for (unsigned int i = 0; i < items.size(); i++) {
+ 			MenuItemSub *sub = dynamic_cast<MenuItemSub*>(items[i].get());
+ 			items[i]->setGeometry(x, y + i*theme.menuItemHeight,
+ 						w, theme.menuItemHeight);
+@@ -342,7 +342,7 @@ public:
+ 				sub->getSubMenu()->adjust();
+ 		}
+ 	}
+-	void update(uint ms) {
++	void update(unsigned int ms) {
+ 		for (auto& i : items)
+ 			i->update(ms);
+ 	}
+--- src/mixer.h	2019-03-07 20:54:45.000000000 +0100
++++ src/mixer.h	2019-06-10 11:04:25.228551826 +0200
+@@ -63,7 +63,7 @@ public:
+ 			_loginfo("Mixer closed\n");
+ 		}
+ 	}
+-	void setVolume(uint v) { /* v is 0..100 */
++	void setVolume(unsigned int v) { /* v is 0..100 */
+ 		if (v > 100)
+ 			v = 100;
+ 		v = v * MIX_MAX_VOLUME / 100;
+--- src/sdl.cpp	2019-03-07 14:07:05.000000000 +0100
++++ src/sdl.cpp	2019-06-10 11:04:25.231551862 +0200
+@@ -484,7 +484,7 @@ void Font::writeText(int x, int y, const
+ 	SDL_DestroyTexture(tex);
+ }
+ 
+-void Label::setText(Font &font, const string &str, uint maxw)
++void Label::setText(Font &font, const string &str, unsigned int maxw)
+ {
+ 	if (str == "") {
+ 		empty = true;
+--- src/sdl.h	2019-03-07 13:15:07.000000000 +0100
++++ src/sdl.h	2019-06-10 11:04:25.228551826 +0200
+@@ -209,7 +209,7 @@ public:
+ 			return TTF_SizeText(font,str.c_str(),w,h);
+ 		return 0;
+ 	};
+-	int getWrappedTextSize(const string& str, uint maxw, int *w, int *h) {
++	int getWrappedTextSize(const string& str, unsigned int maxw, int *w, int *h) {
+ 		*w = *h = 0;
+ 		SDL_Surface *surf = TTF_RenderUTF8_Blended_Wrapped(
+ 						font, str.c_str(), clr, maxw);
+@@ -275,7 +275,7 @@ public:
+ 			b = -1;
+ 		border = b;
+ 	}
+-	void setText(Font &f, const string &str, uint max = 0);
++	void setText(Font &f, const string &str, unsigned int max = 0);
+ 	void clearText() {
+ 		empty = true;
+ 	}
+@@ -295,12 +295,12 @@ public:
+ 	void setAlpha(int a) {
+ 		img.setAlpha(a);
+ 	}
+-	uint getHeight() {
++	unsigned int getHeight() {
+ 		if (empty)
+ 			return 0;
+ 		return img.getHeight();
+ 	}
+-	uint getWidth() {
++	unsigned int getWidth() {
+ 		if (empty)
+ 			return 0;
+ 		return img.getWidth();
+--- src/selectdlg.cpp	2018-12-21 20:02:48.000000000 +0100
++++ src/selectdlg.cpp	2019-06-10 11:04:25.232551874 +0200
+@@ -31,17 +31,17 @@ SetInfo::SetInfo(const string &n, Theme
+ 	author = "?";
+ 
+ 	/* create empty preview */
+-	uint sw = theme.menuBackground.getWidth();
+-	uint sh = theme.menuBackground.getHeight();
+-	uint bw = theme.bricks.getGridWidth();
+-	uint bh = theme.bricks.getGridHeight();
+-	uint soff = bh/3;
++	unsigned int sw = theme.menuBackground.getWidth();
++	unsigned int sh = theme.menuBackground.getHeight();
++	unsigned int bw = theme.bricks.getGridWidth();
++	unsigned int bh = theme.bricks.getGridHeight();
++	unsigned int soff = bh/3;
+ 	preview.create(MAPWIDTH*theme.bricks.getGridWidth(),
+ 			MAPHEIGHT*theme.bricks.getGridHeight());
+ 	SDL_SetRenderTarget(mrc, preview.getTex());
+ 	Image& wallpaper = theme.wallpapers[rand()%theme.numWallpapers];
+-	for (uint wy = 0; wy < sh; wy += wallpaper.getHeight())
+-		for (uint wx = 0; wx < sw; wx += wallpaper.getWidth())
++	for (unsigned int wy = 0; wy < sh; wy += wallpaper.getHeight())
++		for (unsigned int wx = 0; wx < sw; wx += wallpaper.getWidth())
+ 			wallpaper.copy(wx,wy);
+ 	theme.frameShadow.copy(soff,soff);
+ 
+@@ -64,7 +64,7 @@ SetInfo::SetInfo(const string &n, Theme
+ 	string fpath = getFullLevelsetPath(n);
+ 	string lines[5+EDIT_HEIGHT];
+ 	ifstream ifs(fpath);
+-	uint offset = 0;
++	unsigned int offset = 0;
+ 
+ 	if (!ifs.is_open()) {
+ 		_logerr("Levelset %s not found, no preview created\n",n.c_str());
+@@ -72,7 +72,7 @@ SetInfo::SetInfo(const string &n, Theme
+ 		SDL_SetRenderTarget(mrc, NULL);
+ 		return;
+ 	}
+-	for (uint i = 0; i < 5+EDIT_HEIGHT; i++)
++	for (unsigned int i = 0; i < 5+EDIT_HEIGHT; i++)
+ 		getline(ifs,lines[i]);
+ 	if (lines[0].find("Version") != string::npos) {
+ 		version = trimString(lines[0].substr(lines[0].find(':')+1));
+@@ -89,8 +89,8 @@ SetInfo::SetInfo(const string &n, Theme
+ 
+ 	/* add bricks of first level
+ 	 * XXX direct access to brick conversion table from libgame */
+-	for (uint j = 0; j < EDITHEIGHT; j++)
+-		for (uint i = 0; i < EDITWIDTH; i++) {
++	for (unsigned int j = 0; j < EDITHEIGHT; j++)
++		for (unsigned int i = 0; i < EDITWIDTH; i++) {
+ 			int k = -1;
+ 			for ( k = 0; k < BRICK_COUNT; k++ )
+ 				if (lines[4+offset+j][i] == brick_conv_table[k].c)
+@@ -99,8 +99,8 @@ SetInfo::SetInfo(const string &n, Theme
+ 				theme.bricksShadow.copy(brick_conv_table[k].id,0,
+ 						(i+1)*bw+bh/3, (1+j)*bh+bh/3);
+ 		}
+-	for (uint j = 0; j < EDITHEIGHT; j++)
+-		for (uint i = 0; i < EDITWIDTH; i++) {
++	for (unsigned int j = 0; j < EDITHEIGHT; j++)
++		for (unsigned int i = 0; i < EDITWIDTH; i++) {
+ 			int k = -1;
+ 			for ( k = 0; k < BRICK_COUNT; k++ )
+ 				if (lines[4+offset+j][i] == brick_conv_table[k].c)
+@@ -117,8 +117,8 @@ SetInfo::SetInfo(const string &n, Theme
+ /** Create levelset list and previews + layout. */
+ void SelectDialog::init()
+ {
+-	uint sw = theme.menuBackground.getWidth();
+-	uint sh = theme.menuBackground.getHeight();
++	unsigned int sw = theme.menuBackground.getWidth();
++	unsigned int sh = theme.menuBackground.getHeight();
+ 	vector<string> list, list2;
+ 
+ 	list.push_back(_(TOURNAMENT));
+@@ -185,7 +185,7 @@ void SelectDialog::render()
+ 			font.setColor(theme.menuFontColorNormal);
+ 		font.write(lx, ly-ch, _("<Previous Page>"));
+ 	}
+-	for (uint i = 0; i < vlen; i++, y += ch) {
++	for (unsigned int i = 0; i < vlen; i++, y += ch) {
+ 		if (pos + i < entries.size() && sel == (int)(pos + i))
+ 			font.setColor(theme.menuFontColorFocus);
+ 		else
+--- src/selectdlg.h	2018-10-31 18:49:34.000000000 +0100
++++ src/selectdlg.h	2019-06-10 11:04:25.228551826 +0200
+@@ -21,7 +21,7 @@ class SetInfo {
+ 	string name;
+ 	string version;
+ 	string author;
+-	uint levels;
++	unsigned int levels;
+ 	Image preview;
+ public:
+ 	SetInfo(const string &name, Theme &theme);
+@@ -40,12 +40,12 @@ class SelectDialog {
+ 	bool quitReceived;
+ 	vector<unique_ptr<SetInfo>> entries;
+ 	int sel;
+-	uint pos, max, vlen;
++	unsigned int pos, max, vlen;
+ 	int tx, ty; /* centered title position */
+ 	int lx, ly; /* list start */
+-	uint cw, ch; /* cell size */
++	unsigned int cw, ch; /* cell size */
+ 	int px, py;
+-	uint pw, ph; /* preview geometry */
++	unsigned int pw, ph; /* preview geometry */
+ 
+ 	Image background;
+ 
+--- src/sprite.cpp	2018-09-02 18:47:18.000000000 +0200
++++ src/sprite.cpp	2019-06-10 11:04:25.232551874 +0200
+@@ -24,7 +24,7 @@ extern SDL_Renderer *mrc;
+ Particle::Particle(GridImage &simg, int _gx, int _gy,
+ 					int _sx, int _sy, int _sw, int _sh,
+ 					double px, double py, double vx, double vy,
+-					double vpms, uint lifetime)
++					double vpms, unsigned int lifetime)
+ 	: img(simg), gx(_gx), gy(_gy), sx(_sx), sy(_sy), sw(_sw), sh(_sh),
+ 	  pos(px,py), vel(vx,vy)
+ {
+--- src/sprite.h	2018-09-02 18:47:18.000000000 +0200
++++ src/sprite.h	2019-06-10 11:04:25.229551838 +0200
+@@ -19,21 +19,21 @@
+ class Sprite {
+ public:
+ 	virtual ~Sprite() {};
+-	virtual int update(uint ms) = 0; /* return 1 if to be removed, 0 otherwise */
++	virtual int update(unsigned int ms) = 0; /* return 1 if to be removed, 0 otherwise */
+ 	virtual void render() = 0;
+ };
+ 
+ class Animation : public Sprite {
+ 	GridImage& img;
+-	uint id;
++	unsigned int id;
+ 	int x, y; /* position on screen */
+ 	FrameCounter fc;
+ public:
+-	Animation(GridImage &_img, uint _id, uint delay, int _x, int _y)
++	Animation(GridImage &_img, unsigned int _id, unsigned int delay, int _x, int _y)
+ 				: img(_img), id(_id), x(_x), y(_y) {
+ 		fc.init(img.getGridSizeX(), delay);
+ 	}
+-	int update(uint ms) {
++	int update(unsigned int ms) {
+ 		if (fc.update(ms))
+ 			return 1; /* die */
+ 		return 0;
+@@ -50,8 +50,8 @@ class Particle : public Sprite {
+ 	SmoothCounter sc;
+ public:
+ 	Particle(GridImage &simg, int gx, int gy, int sx, int sy, int sw, int sh,
+-			double px, double py, double vx, double vy, double vpms, uint lifetime);
+-	int update(uint ms) {
++			double px, double py, double vx, double vy, double vpms, unsigned int lifetime);
++	int update(unsigned int ms) {
+ 		pos.add(ms, vel);
+ 		return sc.update(ms);
+ 	}
+--- src/theme.cpp	2019-03-07 15:14:49.000000000 +0100
++++ src/theme.cpp	2019-06-10 11:04:25.233551886 +0200
+@@ -22,12 +22,12 @@ extern SDL_Renderer *mrc;
+ 
+ /** Load resources and scale if necessary using bricks screen height.
+  * Whatever is missing: Fall back to Standard theme. */
+-void Theme::load(string name, uint screenWidth, uint screenHeight,
+-				uint brickScreenWidth, uint brickScreenHeight,
++void Theme::load(string name, unsigned int screenWidth, unsigned int screenHeight,
++				unsigned int brickScreenWidth, unsigned int brickScreenHeight,
+ 				int antialiasing)
+ {
+ 	string path, fpath;
+-	uint iw, ih;
++	unsigned int iw, ih;
+ 
+ 	if (name[0] == '~')
+ 		path = getHomeDir() + "/" + CONFIGDIR + "/themes/" + name.substr(1);
+@@ -376,7 +376,7 @@ void Theme::load(string name, uint scree
+ 
+ 	/* load and scale up to 10 wallpapers */
+ 	string wpath = stdPath;
+-	uint wbfh = sbfh, wbfw = sbfw; /* for scaling */
++	unsigned int wbfh = sbfh, wbfw = sbfw; /* for scaling */
+ 	if (fileExists(path + "/back0.png") || fileExists(path + "/back0.jpg")) {
+ 		wpath = path;
+ 		wbfh = brickFileHeight;
+--- src/theme.h	2019-03-07 15:05:53.000000000 +0100
++++ src/theme.h	2019-06-10 11:04:25.229551838 +0200
+@@ -33,37 +33,37 @@ class Theme {
+ 	string stdPath; /* path to standard theme for fallbacks */
+ 	bool oldTheme;
+ 	int boardX;
+-	uint boardWidth;
++	unsigned int boardWidth;
+ 
+ 	/* loaded from theme.ini */
+ 	string title;
+ 	string author;
+ 	string version;
+-	uint brickFileWidth;
+-	uint brickFileHeight;
++	unsigned int brickFileWidth;
++	unsigned int brickFileHeight;
+ 	int shadowOffset;
+ 	string fontSmallName;
+-	uint fontSmallSize;
++	unsigned int fontSmallSize;
+ 	string fontNormalName;
+-	uint fontNormalSize;
++	unsigned int fontNormalSize;
+ 	SDL_Color fontColorNormal;
+ 	SDL_Color fontColorHighlight;
+-	uint shotFrameNum;
+-	uint shotAnimDelay;
+-	uint weaponFrameNum;
+-	uint weaponAnimDelay;
+-	uint explFrameNum;
+-	uint explAnimDelay;
+-	uint shineFrameNum;
+-	uint shineAnimDelay;
+-	uint menuX, menuY, menuItemWidth, menuItemHeight;
++	unsigned int shotFrameNum;
++	unsigned int shotAnimDelay;
++	unsigned int weaponFrameNum;
++	unsigned int weaponAnimDelay;
++	unsigned int explFrameNum;
++	unsigned int explAnimDelay;
++	unsigned int shineFrameNum;
++	unsigned int shineAnimDelay;
++	unsigned int menuX, menuY, menuItemWidth, menuItemHeight;
+ 	string menuFontNormalName, menuFontFocusName;
+-	uint menuFontNormalSize, menuFontFocusSize;
++	unsigned int menuFontNormalSize, menuFontFocusSize;
+ 	SDL_Color menuFontColorNormal, menuFontColorFocus;
+ 
+ 	Image menuBackground;
+ 	Image wallpapers[MAXWALLPAPERS];
+-	uint numWallpapers;
++	unsigned int numWallpapers;
+ 	Image frame, frameShadow;
+ 	GridImage bricks, bricksShadow;
+ 	GridImage paddles, paddlesShadow;
+@@ -106,8 +106,8 @@ public:
+ 		{
+ 		stdPath = string(DATADIR) + "/themes/Standard";
+ 	}
+-	void load(string name, uint screenWidth, uint screenHeight,
+-				uint brickScreenWidth, uint brickScreenHeight,
++	void load(string name, unsigned int screenWidth, unsigned int screenHeight,
++				unsigned int brickScreenWidth, unsigned int brickScreenHeight,
+ 				int antialiasing);
+ };
+ 
+--- src/tools.cpp	2018-11-04 12:04:17.000000000 +0100
++++ src/tools.cpp	2019-06-10 11:04:25.233551886 +0200
+@@ -94,7 +94,7 @@ int FileParser::get(const string& k, int
+ 		v = stoi(str);
+ 	return ret;
+ }
+-int FileParser::get(const string& k, uint &v)
++int FileParser::get(const string& k, unsigned int &v)
+ {
+ 	string str;
+ 	int ret = get(k,str);
+--- src/tools.h	2018-10-31 12:23:22.000000000 +0100
++++ src/tools.h	2019-06-10 11:04:25.229551838 +0200
+@@ -95,7 +95,7 @@ public:
+ 	FileParser(const string&  fname);
+ 	int get(const string&  k, string &v);
+ 	int get(const string&  k, int &v);
+-	int get(const string&  k, uint &v);
++	int get(const string&  k, unsigned int &v);
+ 	int get(const string&  k, uint8_t &v);
+ 	int get(const string&  k, double &v);
+ };
+@@ -167,7 +167,7 @@ public:
+ 
+ class FrameCounter : public SmoothCounter {
+ public:
+-	void init(uint max, uint delay) {
++	void init(unsigned int max, unsigned int delay) {
+ 		SmoothCounter::init(SCT_REPEAT, 0, -0.01 + max, delay);
+ 	}
+ 	int get() { return SmoothCounter::get(); }
+--- src/view.cpp	2019-03-08 19:13:31.000000000 +0100
++++ src/view.cpp	2019-06-10 11:04:25.234551898 +0200
+@@ -74,7 +74,7 @@ View::View(Config &cfg, ClientGame &_cg)
+ 
+ /** (Re)Initialize window, theme and menu.
+  * t is theme name, r=0 means fullscreen, otherwise vertical resolution. */
+-void View::init(string t, uint r)
++void View::init(string t, unsigned int r)
+ {
+ 	_loginfo("Initializing View (Theme=%s, Resolution=%d)\n",t.c_str(),r);
+ 
+@@ -648,7 +648,7 @@ void View::renderBackgroundImage() {
+ 
+ 	/* lives */
+ 	ClientPlayer *cp = cgame.getCurrentPlayer();
+-	for (uint i = 0; i < cp->getMaxLives(); i++)
++	for (unsigned int i = 0; i < cp->getMaxLives(); i++)
+ 		theme.life.copy(0, i < cp->getLives(), 0, (MAPHEIGHT-i-1)*bh);
+ 
+ 	SDL_SetRenderTarget(mrc,NULL);
+@@ -739,12 +739,12 @@ void View::renderScoreImage()
+ void View::renderExtrasImage()
+ {
+ 	Game *game = cgame.getGameContext();
+-	uint bw = brickScreenWidth, bh = brickScreenHeight;
+-	uint xstart = (imgExtras.getWidth() - 3*bw) / 4;
+-	uint ystart = (imgExtras.getHeight() - 3*bh) / 4;
+-	uint xoff = bw + xstart;
+-	uint yoff = bh + ystart;
+-	uint x = xstart, y = ystart;
++	unsigned int bw = brickScreenWidth, bh = brickScreenHeight;
++	unsigned int xstart = (imgExtras.getWidth() - 3*bw) / 4;
++	unsigned int ystart = (imgExtras.getHeight() - 3*bh) / 4;
++	unsigned int xoff = bw + xstart;
++	unsigned int yoff = bh + ystart;
++	unsigned int x = xstart, y = ystart;
+ 
+ 	SDL_SetRenderTarget(mrc, imgExtras.getTex());
+ 	SDL_SetRenderDrawColor(mrc,0,0,0,0);
+@@ -846,14 +846,14 @@ bool View::showInfo(const vector<string>
+ {
+ 	Font &font = theme.fSmall;
+ 	bool ret = true;
+-	uint h = text.size() * font.getLineHeight();
++	unsigned int h = text.size() * font.getLineHeight();
+ 	int tx = mw->getWidth()/2;
+ 	int ty = (mw->getHeight() - h)/2;
+ 
+ 	darkenScreen();
+ 
+ 	font.setAlign(ALIGN_X_CENTER | ALIGN_Y_TOP);
+-	for (uint i = 0; i < text.size(); i++) {
++	for (unsigned int i = 0; i < text.size(); i++) {
+ 		font.write(tx,ty,text[i]);
+ 		ty += font.getLineHeight();
+ 	}
+@@ -964,12 +964,12 @@ void View::createSprites()
+ 	}
+ }
+ 
+-void View::getBallViewInfo(Ball *ball, int *x, int *y, uint *type)
++void View::getBallViewInfo(Ball *ball, int *x, int *y, unsigned int *type)
+ {
+ 	Game *game = cgame.getGameContext(); /* direct lib game context */
+ 	Paddle *paddle = game->paddles[0]; /* local paddle always at bottom */
+ 
+-	uint bt = 0;
++	unsigned int bt = 0;
+ 	double px = ball->cur.x;
+ 	double py = ball->cur.y;
+ 	if (ball->attached) {
+@@ -1395,7 +1395,7 @@ void View::saveGame()
+ 	ofs << "difficulty=" << config.diff << "\n";
+ 	ofs << "curplayer=" << cgame.getCurrentPlayerId() << "\n";
+ 	ofs << "players=" << players.size() << "\n";
+-	for (uint i = 0; i < players.size(); i++) {
++	for (unsigned int i = 0; i < players.size(); i++) {
+ 		ofs << "player" << i << " {\n";
+ 		ofs << "	name=" << players[i]->getName() << "\n";
+ 		ofs << "	level=" << players[i]->getLevel() << "\n";
+@@ -1432,18 +1432,18 @@ int View::resumeGame()
+ 		fp.get(string("player") + to_string(i) + ".name",config.player_names[i]);
+ 
+ 	/* initialize game to level of current player */
+-	uint pid = 0;
++	unsigned int pid = 0;
+ 	fp.get("curplayer",pid);
+ 	if (pid >= MAX_PLAYERS)
+ 		pid = 0;
+-	uint levid = 0;
++	unsigned int levid = 0;
+ 	fp.get(string("player") + to_string(pid) + ".level",levid);
+ 	cgame.init(setname,levid);
+ 
+ 	/* adjust players */
+ 	for (int i = 0; i < config.player_count; i++) {
+ 		string prefix = string("player") + to_string(i) + ".";
+-		uint level = 0, lives = 3;
++		unsigned int level = 0, lives = 3;
+ 		int score = 0;
+ 		fp.get(prefix + "score",score);
+ 		fp.get(prefix + "level",level);
+@@ -1529,8 +1529,8 @@ void View::renderBalls(bool shadow)
+ 	Ball *ball;
+ 	list_reset(game->balls);
+ 	while ( ( ball = (Ball*)list_next( game->balls ) ) != 0 ) {
+-		uint type;
+-		uint alpha = 255;
++		unsigned int type;
++		unsigned int alpha = 255;
+ 		int px, py;
+ 		getBallViewInfo(ball, &px, &py, &type);
+ 		if (type == 1) /* energy ball */
+@@ -1561,7 +1561,7 @@ void View::updateResumeGameTooltip()
+ 	/* XXX multiple locations... */
+ 	const char *diffNames[] = {_("Kids"),_("Easy"),_("Medium"),_("Hard") } ;
+ 	string text, str;
+-	uint diff, pnum;
++	unsigned int diff, pnum;
+ 	FileParser fp(saveFileName);
+ 	fp.get("levelset",text);
+ 	fp.get("difficulty",diff);
+@@ -1573,10 +1573,10 @@ void View::updateResumeGameTooltip()
+ 	text += to_string(pnum);
+ 	text += _(" player(s)\n");
+ 
+-	for (uint i = 0; i < pnum; i++) {
++	for (unsigned int i = 0; i < pnum; i++) {
+ 		string prefix = string("player") + to_string(i) + ".";
+ 		string name;
+-		uint level = 0, lives = 3;
++		unsigned int level = 0, lives = 3;
+ 		int score = 0;
+ 		fp.get(prefix + "name",name);
+ 		fp.get(prefix + "score",score);
+@@ -1591,7 +1591,7 @@ void View::updateResumeGameTooltip()
+ 	resumeMenuItem->setTooltip(text);
+ }
+ 
+-void View::renderExtraHelp(GridImage &img, uint gx, uint gy, const string &str, int x, int y)
++void View::renderExtraHelp(GridImage &img, unsigned int gx, unsigned int gy, const string &str, int x, int y)
+ {
+ 	img.copy(gx,gy,x,y);
+ 	theme.fSmall.setAlign(ALIGN_X_LEFT | ALIGN_Y_CENTER);
+@@ -1621,7 +1621,7 @@ void View::showHelp()
+ 		;
+ 
+ 	int x = brickScreenWidth, y = brickScreenHeight;
+-	uint maxw = brickScreenWidth * 10;
++	unsigned int maxw = brickScreenWidth * 10;
+ 
+ 	darkenScreen();
+ 
+--- src/view.h	2019-03-07 15:44:36.000000000 +0100
++++ src/view.h	2019-06-10 11:04:25.229551838 +0200
+@@ -105,7 +105,7 @@ class View {
+ 	void showHelp();
+ 	void createParticles(BrickHit *hit);
+ 	void createSprites();
+-	void getBallViewInfo(Ball *ball, int *x, int *y, uint *type);
++	void getBallViewInfo(Ball *ball, int *x, int *y, unsigned int *type);
+ 	void playSounds();
+ 	void createMenus();
+ 	void grabInput(int grab);
+@@ -116,14 +116,14 @@ class View {
+ 	void darkenScreen(int alpha = 32);
+ 	void initTitleLabel();
+ 	void updateResumeGameTooltip();
+-	void renderExtraHelp(GridImage &img, uint gx, uint gy, const string &str, int x, int y);
++	void renderExtraHelp(GridImage &img, unsigned int gx, unsigned int gy, const string &str, int x, int y);
+ 	void runBrickDestroyDlg();
+ 	void waitForInputRelease();
+ 	void getNewShinePosition();
+ public:
+ 	View(Config &cfg, ClientGame &_cg);
+ 	~View();
+-	void init(string t, uint r);
++	void init(string t, unsigned int r);
+ 	void run();
+ 	void render();
+ 	void runMenu();
+--- src/clientgame.cpp.orig	2019-06-10 11:08:55.515756485 +0200
++++ src/clientgame.cpp	2019-06-10 11:09:17.964021355 +0200
+@@ -95,7 +95,7 @@ ClientPlayer *ClientGame::getNextPlayer(
+ 		if (curPlayer == players.size())
+ 			curPlayer = 0;
+ 		p = players[curPlayer].get();
+-		if (p->getLives() > 0 && p->getLevel() < (uint)levelset->count)
++		if (p->getLives() > 0 && p->getLevel() < (unsigned int)levelset->count)
+ 			return p;
+ 	} while (curPlayer != startId);
+ 	return NULL;
+@@ -192,7 +192,7 @@ int ClientGame::update(unsigned int ms,
+ 		ClientPlayer *p = players[curPlayer].get();
+ 		/* bonus levels are just skipped on failure */
+ 		if (game->winner == PADDLE_BOTTOM || game->level_type != LT_NORMAL) {
+-			if (p->nextLevel() < (uint)levelset->count)
++			if (p->nextLevel() < (unsigned int)levelset->count)
+ 				p->setLevelSnapshot(levelset->levels[p->getLevel()]);
+ 			else {
+ 				strprintf(msg,_("Congratulations, %s, you cleared all levels!"),p->getName().c_str());
+--- src/clientgame.h.orig	2019-06-10 11:10:30.500877231 +0200
++++ src/clientgame.h	2019-06-10 11:10:41.972012581 +0200
+@@ -120,7 +120,7 @@ public:
+ 	void getCurrentLevelNameAndAuthor(string &name, string &author) {
+ 		ClientPlayer *p = players[curPlayer].get();
+ 		unsigned int lid = p->getLevel();
+-		if (lid >= (uint)levelset->count) {
++		if (lid >= (unsigned int)levelset->count) {
+ 			name = "none";
+ 			author = "none"; /* is done, should not happen */
+ 		} else {
diff --git a/srcpkgs/lbreakouthd/template b/srcpkgs/lbreakouthd/template
new file mode 100644
index 00000000000..4e09788ae0e
--- /dev/null
+++ b/srcpkgs/lbreakouthd/template
@@ -0,0 +1,13 @@
+# Template file for 'lbreakouthd'
+pkgname=lbreakouthd
+version=1.0.4
+revision=1
+build_style=gnu-configure
+configure_args="--localstatedir=/var/${pkgname}"
+makedepends="SDL2-devel SDL2_mixer-devel SDL2_image-devel SDL2_ttf-devel"
+short_desc="Scalable 16:9 remake of LBreakout2"
+maintainer="Juan RP <xtraeme@voidlinux.org>"
+license="GPL-2.0-or-later"
+homepage="http://lgames.sourceforge.net/LBreakoutHD/"
+distfiles="${SOURCEFORGE_SITE}/lgames/$pkgname-$version.tar.gz"
+checksum=43d2c268b0494d72816e9f106fae17b311fa665a153377e2f0cc0e0362aa30af
