diff options
author | rodri <rgl@antares-labs.eu> | 2023-05-23 15:45:13 +0000 |
---|---|---|
committer | rodri <rgl@antares-labs.eu> | 2023-05-23 15:45:13 +0000 |
commit | 29c02c33749f9ca21ffa1c22cc2cc37f58584467 (patch) | |
tree | 8b3a096c858f7f8ae48b99009740b62de5a38b29 /musw.c | |
parent | 5a725b7c6a1c22800656f218e46b5b16b0d21884 (diff) | |
download | musw-29c02c33749f9ca21ffa1c22cc2cc37f58584467.tar.gz musw-29c02c33749f9ca21ffa1c22cc2cc37f58584467.tar.bz2 musw-29c02c33749f9ca21ffa1c22cc2cc37f58584467.zip |
integrated cmixer for sound and sfx.
fixed the vfx drawing procedure so that it treats p as the center when rendering the sprite.
Diffstat (limited to 'musw.c')
-rw-r--r-- | musw.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -11,6 +11,7 @@ #include <geometry.h> #include "dat.h" #include "fns.h" +#include "cmixer.h" enum { GSIntro, @@ -676,6 +677,24 @@ State *playing_δ(State *s, void*) } void +soundproc(void *) +{ + Biobuf *aout; + uchar adata[512]; + + threadsetname("soundproc"); + + aout = Bopen("/dev/audio", OWRITE); + if(aout == nil) + sysfatal("Bopen: %r"); + + for(;;){ + cm_process((void *)adata, sizeof(adata)/2); + Bwrite(aout, adata, sizeof adata); + } +} + +void usage(void) { fprint(2, "usage: %s [-dg] server\n", argv0); @@ -690,6 +709,7 @@ threadmain(int argc, char *argv[]) char *server; int fd; Vfx *vfx; + cm_Source *bgsound; Mousectl *mc; Ioproc *io; @@ -717,6 +737,9 @@ threadmain(int argc, char *argv[]) sysfatal("initdraw: %r"); if((mc = initmouse(nil, screen)) == nil) sysfatal("initmouse: %r"); + cm_init(44100); + cm_set_master_gain(0.5); + display->locking = 1; unlockdisplay(display); @@ -751,6 +774,13 @@ threadmain(int argc, char *argv[]) vfxtab[VFX_BULLET_EXPLOSION] = readpngsprite("assets/vfx/bullet.explosion.png", ZP, Rect(0, 0, 32, 32), 12, 100); initvfx(&vfxqueue); + bgsound = cm_new_source_from_file("assets/sfx/intro.wav"); + if(bgsound == nil) + sysfatal("cm_new_source_from_file: %s", cm_get_error()); + cm_play(bgsound); + + proccreate(soundproc, nil, mainstacksize); + gamestates[GSIntro].δ = intro_δ; gamestates[GSConnecting].δ = connecting_δ; gamestates[GSMatching].δ = matching_δ; |