diff options
-rwxr-xr-x | assets/vfx/battleship.png | bin | 0 -> 131400 bytes | |||
-rw-r--r-- | bts.c | 4 | ||||
-rw-r--r-- | fns.h | 1 | ||||
-rw-r--r-- | sprite.c | 39 |
4 files changed, 33 insertions, 11 deletions
diff --git a/assets/vfx/battleship.png b/assets/vfx/battleship.png Binary files differnew file mode 100755 index 0000000..e085e83 --- /dev/null +++ b/assets/vfx/battleship.png @@ -135,6 +135,7 @@ char titlefontpath[] = "font/gunmetal/gunmetal.48.font"; 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 @@ drawtitle(Image *dst) 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 @@ initvfx(void) { 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"); @@ -40,6 +40,7 @@ void delmenulist(Menulist*); */ 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*); @@ -90,27 +90,44 @@ decproc(void *arg) 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); } |