ref: 30ac819359e5d6de7f6622ba6c01e79457fe8277
parent: 671c2cac38ffada7f9185b87ec27b84566db8c2b
author: rodri <rgl@antares-labs.eu>
date: Fri Nov 15 17:28:23 EST 2024
bts: add a cover image.
binary files /dev/null b/assets/vfx/battleship.png differ
--- a/bts.c
+++ b/bts.c
@@ -135,6 +135,7 @@
Font *titlefont;
char winspec[32];
char uid[8+1], oid[8+1];
+Image *coverimg;
Sprite *spritetab[NVFX];
Vfx vfxqueue;
Channel *drawchan;
@@ -353,6 +354,7 @@
static char s[] = "BATTLESHIP";
string(dst, Pt(SCRW/2 - stringwidth(titlefont, s)/2, 0), pal[PCWhite], ZP, titlefont, s);
+ draw(dst, rectaddpt(coverimg->r, subpt(dst->r.max, subpt(coverimg->r.max, coverimg->r.min))), coverimg, nil, ZP);
}
void
@@ -612,6 +614,8 @@
{
char aux[64];
+ snprint(aux, sizeof aux, "%s/%s", assetdir, "vfx/battleship.png");
+ coverimg = readpngimage(aux);
snprint(aux, sizeof aux, "%s/%s", assetdir, "vfx/hit.png");
spritetab[VFXHit] = readpngsprite(aux, ZP, Rect(0, 0, 32, 32), 12, 100);
snprint(aux, sizeof aux, "%s/%s", assetdir, "vfx/miss.png");
--- a/fns.h
+++ b/fns.h
@@ -40,6 +40,7 @@
*/
Sprite *newsprite(Image*, Point, Rectangle, int, ulong);
Sprite *readsprite(char*, Point, Rectangle, int, ulong);
+Image *readpngimage(char*);
Sprite *readpngsprite(char*, Point, Rectangle, int, ulong);
void delsprite(Sprite*);
--- a/sprite.c
+++ b/sprite.c
@@ -90,27 +90,44 @@
close(pfd[1]);
execl("/bin/png", "png", "-t9", nil);
- threadexitsall("execl: %r");
+ sysfatal("execl: %r");
}
-Sprite *
-readpngsprite(char *sheetfile, Point sp, Rectangle r, int nframes, ulong period)
+Image *
+readpngimage(char *path)
{
- Image *sheet;
+ Image *i;
int fd, pfd[3];
if(pipe(pfd) < 0)
sysfatal("pipe: %r");
- fd = open(sheetfile, OREAD);
+ fd = open(path, OREAD);
if(fd < 0)
- sysfatal("readpngsprite: %r");
+ sysfatal("open: %r");
pfd[2] = fd;
- procrfork(decproc, pfd, mainstacksize, RFFDG|RFNAMEG|RFNOTEG);
- close(pfd[1]);
- sheet = readimage(display, pfd[0], 1);
- close(pfd[0]);
- close(fd);
+ switch(fork()){
+ case -1:
+ sysfatal("fork: %r");
+ case 0:
+ decproc(pfd);
+ default:
+ close(pfd[1]);
+ i = readimage(display, pfd[0], 1);
+ close(pfd[0]);
+ close(fd);
+ }
+ return i;
+}
+
+Sprite *
+readpngsprite(char *sheetfile, Point sp, Rectangle r, int nframes, ulong period)
+{
+ Image *sheet;
+
+ sheet = readpngimage(sheetfile);
+ if(sheet == nil)
+ sysfatal("readpngimage: %r");
return newsprite(sheet, sp, r, nframes, period);
}