gnu: Add barony.

* gnu/packages/games.scm (barony): New variable.
* gnu/packages/patches/barony-fix-textures.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Timotej Lazar 2022-06-26 08:54:39 +02:00 committed by Ludovic Courtès
parent ae1f120181
commit 23cc276aaa
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
3 changed files with 292 additions and 0 deletions

View File

@ -888,6 +888,7 @@ dist_patch_DATA = \
%D%/packages/patches/awesome-4.3-fno-common.patch \
%D%/packages/patches/aws-c-auth-install-private-headers.patch \
%D%/packages/patches/azr3.patch \
%D%/packages/patches/barony-fix-textures.patch \
%D%/packages/patches/bash-completion-directories.patch \
%D%/packages/patches/bash-linux-pgrp-pipe.patch \
%D%/packages/patches/bastet-change-source-of-unordered_set.patch \

View File

@ -504,6 +504,60 @@ regret their insolence.")
;; BY-SA 4.0, and fonts to OFL1.1.
(license (list license:gpl3+ license:cc-by-sa4.0 license:silofl1.1))))
(define-public barony
(package
(name "barony")
(version "3.3.7")
(source
(origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/TurningWheel/Barony")
(commit (string-append "v" version))))
(file-name (git-file-name name version))
(sha256
(base32 "1y72k6zrqqhib3p05zkdklays2d218v51n87k7k68m0s7nnxa4vy"))
;; Fix textures for SDL 2.0.14.
;; See <https://github.com/TurningWheel/Barony/pull/582>.
(patches (search-patches "barony-fix-textures.patch"))))
(build-system cmake-build-system)
(arguments
'(#:configure-flags
(list "-DOPENAL_ENABLED=ON" ; enable sound
"-DEDITOR_EXE_NAME=barony-editor") ; instead of generic "editor"
#:tests? #f ; there are no tests
#:phases
(modify-phases %standard-phases
(add-before 'configure 'fix-installation
(lambda _
(substitute* "CMakeLists.txt"
(("\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/lang")
"${CMAKE_SOURCE_DIR}/lang")))))))
(inputs
(list glu
libpng
libvorbis
openal
physfs
rapidjson
sdl2
sdl2-image
sdl2-net
sdl2-ttf
zlib))
(native-inputs
(list pkg-config))
(home-page "http://baronygame.com")
(synopsis "3D first-person roguelike game")
(description
"Barony is a first-person roguelike role-playing game with cooperative
play. The player must descend a dark dungeon and destroy an undead lich while
avoiding traps and fighting monsters. The game features randomly generated
dungeons, 13 character classes, hundreds of items and artifacts, and
cooperative multiplayer for up to four players. This package does @emph{not}
provide the game assets.")
(license license:bsd-2)))
(define-public bastet
(package
(name "bastet")

View File

@ -0,0 +1,237 @@
From: Sylvain <sylvain.becker@gmail.com>
Date: Sat, 10 Apr 2021 21:33:29 +0200
Subject: [PATCH] Fixed bug 580 - Use 'userdata' instead of 'refcount'
'refcount' is a private SDL_Surface field
---
src/draw.cpp | 22 +++++++++++-----------
src/files.cpp | 2 +-
src/opengl.cpp | 26 +++++++++++++-------------
src/savepng.cpp | 2 +-
4 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/src/draw.cpp b/src/draw.cpp
index 08f95343f..4e62c751a 100644
--- a/src/draw.cpp
+++ b/src/draw.cpp
@@ -443,7 +443,7 @@ void drawImageRotatedAlpha( SDL_Surface* image, SDL_Rect* src, SDL_Rect* pos, re
}
// draw a textured quad
- glBindTexture(GL_TEXTURE_2D, texid[image->refcount]);
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)image->userdata]);
glColor4f(1, 1, 1, alpha / 255.1);
glBegin(GL_QUADS);
glTexCoord2f(1.0 * ((real_t)src->x / image->w), 1.0 * ((real_t)src->y / image->h));
@@ -492,7 +492,7 @@ void drawImageColor( SDL_Surface* image, SDL_Rect* src, SDL_Rect* pos, Uint32 co
}
// draw a textured quad
- glBindTexture(GL_TEXTURE_2D, texid[image->refcount]);
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)image->userdata]);
real_t r = ((Uint8)(color >> mainsurface->format->Rshift)) / 255.f;
real_t g = ((Uint8)(color >> mainsurface->format->Gshift)) / 255.f;
real_t b = ((Uint8)(color >> mainsurface->format->Bshift)) / 255.f;
@@ -546,7 +546,7 @@ void drawImageAlpha( SDL_Surface* image, SDL_Rect* src, SDL_Rect* pos, Uint8 alp
}
// draw a textured quad
- glBindTexture(GL_TEXTURE_2D, texid[image->refcount]);
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)image->userdata]);
glColor4f(1, 1, 1, alpha / 255.1);
glPushMatrix();
glBegin(GL_QUADS);
@@ -596,7 +596,7 @@ void drawImage( SDL_Surface* image, SDL_Rect* src, SDL_Rect* pos )
}
// draw a textured quad
- glBindTexture(GL_TEXTURE_2D, texid[image->refcount]);
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)image->userdata]);
glColor4f(1, 1, 1, 1);
glPushMatrix();
glBegin(GL_QUADS);
@@ -646,7 +646,7 @@ void drawImageRing(SDL_Surface* image, SDL_Rect* src, int radius, int thickness,
}
// draw a textured quad
- glBindTexture(GL_TEXTURE_2D, texid[image->refcount]);
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)image->userdata]);
glColor4f(1, 1, 1, alpha / 255.f);
glPushMatrix();
@@ -771,7 +771,7 @@ void drawImageScaled( SDL_Surface* image, SDL_Rect* src, SDL_Rect* pos )
}
// draw a textured quad
- glBindTexture(GL_TEXTURE_2D, texid[image->refcount]);
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)image->userdata]);
glColor4f(1, 1, 1, 1);
glPushMatrix();
glBegin(GL_QUADS);
@@ -826,7 +826,7 @@ void drawImageScaledPartial(SDL_Surface* image, SDL_Rect* src, SDL_Rect* pos, fl
}
// draw a textured quad
- glBindTexture(GL_TEXTURE_2D, texid[image->refcount]);
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)image->userdata]);
glColor4f(1, 1, 1, 1);
glPushMatrix();
glBegin(GL_QUADS);
@@ -889,7 +889,7 @@ void drawImageScaledColor(SDL_Surface* image, SDL_Rect* src, SDL_Rect* pos, Uint
}
// draw a textured quad
- glBindTexture(GL_TEXTURE_2D, texid[image->refcount]);
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)image->userdata]);
real_t r = ((Uint8)(color >> mainsurface->format->Rshift)) / 255.f;
real_t g = ((Uint8)(color >> mainsurface->format->Gshift)) / 255.f;
real_t b = ((Uint8)(color >> mainsurface->format->Bshift)) / 255.f;
@@ -985,7 +985,7 @@ void drawImageFancy( SDL_Surface* image, Uint32 color, real_t angle, SDL_Rect* s
}
// draw a textured quad
- glBindTexture(GL_TEXTURE_2D, texid[image->refcount]);
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)image->userdata]);
real_t r = ((Uint8)(color >> mainsurface->format->Rshift)) / 255.f;
real_t g = ((Uint8)(color >> mainsurface->format->Gshift)) / 255.f;
real_t b = ((Uint8)(color >> mainsurface->format->Bshift)) / 255.f;
@@ -2186,7 +2186,7 @@ void drawWindowFancy(int x1, int y1, int x2, int y2)
glVertex2f(x2 - 1, yres - y1 - 1);
glEnd();
glColor3f(.75, .75, .75);
- glBindTexture(GL_TEXTURE_2D, texid[fancyWindow_bmp->refcount]); // wood texture
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)fancyWindow_bmp->userdata]); // wood texture
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(x1 + 2, yres - y1 - 2);
@@ -2322,7 +2322,7 @@ SDL_Rect ttfPrintTextColor( TTF_Font* font, int x, int y, Uint32 color, bool out
SDL_BlitSurface(textSurf, NULL, surf, &pos);
// load the text outline surface as a GL texture
allsurfaces[imgref] = surf;
- allsurfaces[imgref]->refcount = imgref;
+ allsurfaces[imgref]->userdata = (void*) imgref;
glLoadTexture(allsurfaces[imgref], imgref);
imgref++;
// store the surface in the text surface cache
diff --git a/src/files.cpp b/src/files.cpp
index 2beb9a6b9..389ade6d1 100644
--- a/src/files.cpp
+++ b/src/files.cpp
@@ -591,7 +591,7 @@ SDL_Surface* loadImage(char const * const filename)
// load the new surface as a GL texture
allsurfaces[imgref] = newSurface;
- allsurfaces[imgref]->refcount = imgref + 1;
+ allsurfaces[imgref]->userdata = (void *)(imgref);
glLoadTexture(allsurfaces[imgref], imgref);
// free the translated surface
diff --git a/src/opengl.cpp b/src/opengl.cpp
index f5b81e77a..3ac225825 100644
--- a/src/opengl.cpp
+++ b/src/opengl.cpp
@@ -500,7 +500,7 @@ void glDrawSprite(view_t* camera, Entity* entity, int mode)
}
if ( mode == REALCOLORS )
{
- glBindTexture(GL_TEXTURE_2D, texid[sprite->refcount]);
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)sprite->userdata]);
}
else
{
@@ -586,7 +586,7 @@ void glDrawSpriteFromImage(view_t* camera, Entity* entity, std::string text, int
//int x, y;
real_t s = 1;
SDL_Surface* image = sprites[0];
- GLuint textureId = texid[sprites[0]->refcount];
+ GLuint textureId = texid[(long int)sprites[0]->userdata];
char textToRetrieve[128];
if ( text.compare("") == 0 )
@@ -603,7 +603,7 @@ void glDrawSpriteFromImage(view_t* camera, Entity* entity, std::string text, int
textToRetrieve[std::min(static_cast<int>(strlen(text.c_str())), 22)] = '\0';
if ( (image = ttfTextHashRetrieve(ttfTextHash, textToRetrieve, ttf12, true)) != NULL )
{
- textureId = texid[image->refcount];
+ textureId = texid[(long int)image->userdata];
}
else
{
@@ -627,7 +627,7 @@ void glDrawSpriteFromImage(view_t* camera, Entity* entity, std::string text, int
SDL_BlitSurface(textSurf, NULL, image, &pos);
// load the text outline surface as a GL texture
allsurfaces[imgref] = image;
- allsurfaces[imgref]->refcount = imgref;
+ allsurfaces[imgref]->userdata = (void *)((long int)imgref);
glLoadTexture(allsurfaces[imgref], imgref);
imgref++;
// store the surface in the text surface cache
@@ -635,7 +635,7 @@ void glDrawSpriteFromImage(view_t* camera, Entity* entity, std::string text, int
{
printlog("warning: failed to store text outline surface with imgref %d\n", imgref - 1);
}
- textureId = texid[image->refcount];
+ textureId = texid[(long int)image->userdata];
}
// setup projection
glMatrixMode(GL_PROJECTION);
@@ -864,7 +864,7 @@ void glDrawWorld(view_t* camera, int mode)
// first (higher) sky layer
glColor4f(1.f, 1.f, 1.f, .5);
- glBindTexture(GL_TEXTURE_2D, texid[tiles[cloudtile]->refcount]); // sky tile
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)tiles[cloudtile]->userdata]); // sky tile
glBegin( GL_QUADS );
glTexCoord2f((real_t)(ticks % 60) / 60, (real_t)(ticks % 60) / 60);
glVertex3f(-CLIPFAR * 16, 64, -CLIPFAR * 16);
@@ -881,7 +881,7 @@ void glDrawWorld(view_t* camera, int mode)
// second (closer) sky layer
glColor4f(1.f, 1.f, 1.f, .5);
- glBindTexture(GL_TEXTURE_2D, texid[tiles[cloudtile]->refcount]); // sky tile
+ glBindTexture(GL_TEXTURE_2D, texid[(long int)tiles[cloudtile]->userdata]); // sky tile
glBegin( GL_QUADS );
glTexCoord2f((real_t)(ticks % 240) / 240, (real_t)(ticks % 240) / 240);
glVertex3f(-CLIPFAR * 16, 32, -CLIPFAR * 16);
@@ -954,13 +954,13 @@ void glDrawWorld(view_t* camera, int mode)
{
if ( map.tiles[index] < 0 || map.tiles[index] >= numtiles )
{
- new_tex = texid[sprites[0]->refcount];
- //glBindTexture(GL_TEXTURE_2D, texid[sprites[0]->refcount]);
+ new_tex = texid[(long int)sprites[0]->userdata];
+ //glBindTexture(GL_TEXTURE_2D, texid[(long int)sprites[0]->userdata]);
}
else
{
- new_tex = texid[tiles[map.tiles[index]]->refcount];
- //glBindTexture(GL_TEXTURE_2D, texid[tiles[map.tiles[index]]->refcount]);
+ new_tex = texid[(long int)tiles[map.tiles[index]]->userdata];
+ //glBindTexture(GL_TEXTURE_2D, texid[(long int)tiles[map.tiles[index]]->userdata]);
}
}
else
@@ -1282,8 +1282,8 @@ void glDrawWorld(view_t* camera, int mode)
// bind texture
if ( mode == REALCOLORS )
{
- new_tex = texid[tiles[mapceilingtile]->refcount];
- //glBindTexture(GL_TEXTURE_2D, texid[tiles[50]->refcount]); // rock tile
+ new_tex = texid[(long int)tiles[mapceilingtile]->userdata];
+ //glBindTexture(GL_TEXTURE_2D, texid[(long int)tiles[50]->userdata]); // rock tile
if (cur_tex!=new_tex)
{
glEnd();
diff --git a/src/savepng.cpp b/src/savepng.cpp
index fa7a5d4e2..59e052a5c 100644
--- a/src/savepng.cpp
+++ b/src/savepng.cpp
@@ -59,7 +59,7 @@ SDL_Surface* SDL_PNGFormatAlpha(SDL_Surface* src)
/* NO-OP for images < 32bpp and 32bpp images that already have Alpha channel */
if (src->format->BitsPerPixel <= 24 || src->format->Amask)
{
- src->refcount++;
+ src->userdata = (void *)((long int) src->userdata + 1);
return src;
}