summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Veresov <aleksey@veresov.pro>2021-03-04 13:05:26 +0300
committerAleksey Veresov <aleksey@veresov.pro>2021-03-04 13:05:26 +0300
commitd4f3fdaf9c5a852a4426c9501e72ed1db334f0c8 (patch)
tree460aba0b7653e6ca839d6af211113a1af8ba378d
parentf9cc5b35e228eec935b15eb7575ffb0ef826111f (diff)
downloadtakethis-d4f3fdaf9c5a852a4426c9501e72ed1db334f0c8.tar
takethis-d4f3fdaf9c5a852a4426c9501e72ed1db334f0c8.tar.xz
takethis-d4f3fdaf9c5a852a4426c9501e72ed1db334f0c8.zip
Music position is now saved too.
-rw-r--r--src/game.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/game.c b/src/game.c
index 1b693a9..f04d3b0 100644
--- a/src/game.c
+++ b/src/game.c
@@ -12,6 +12,7 @@ static int first_gulag = 1;
static int fullscreen = 0;
static int lenin_grib = 0;
static int lenin_until_hadouken = 3;
+static int music_start = 0;
static int ticks;
@@ -81,6 +82,7 @@ static void save()
fputs("l\n", f);
else
fputs("0\n", f);
+ outnum(f, SDL_GetTicks() - music_start);
fputc(ttplayer.room - ttmap, f);
fputc('\n', f);
outnum(f, ttplayer.x);
@@ -197,6 +199,9 @@ static void load()
Mix_PauseMusic();
}
fgetc(f);
+ int music_diff = readnum(f);
+ Mix_SetMusicPosition((double)music_diff / 1000);
+ music_start = SDL_GetTicks() - music_diff;
ttplayer.room = ttmap + fgetc(f);
fgetc(f);
ttplayer.x = readnum(f);
@@ -293,6 +298,7 @@ static void directly_gulag(tt_body *b)
gulagmsg = " Communism is Indestructable";
magic = tt_gotogulag;
Mix_PlayMusic(ussr, -1);
+ music_start = SDL_GetTicks();
}
static void togulag(tt_body *b)
@@ -312,6 +318,7 @@ static void gribtake(tt_body *b)
{
curmus = grib;
Mix_PlayMusic(grib, -1);
+ music_start = SDL_GetTicks();
b->collision_act = 0;
b->anim = 1;
b->txrrow = 0;
@@ -430,13 +437,15 @@ static void step(int d)
if (first_gulag) {
first_gulag = 0;
Mix_PlayMusic(stalin, -1);
- curmus = stalin;
+ music_start = SDL_GetTicks();
+ curmus = stalin;
}
ttplayer.until_gulag -= d;
if (ttplayer.until_gulag <= 0) {
magic = tt_gotogulag;
Mix_PlayMusic(ussr, -1);
- curmus = ussr;
+ music_start = SDL_GetTicks();
+ curmus = ussr;
}
}
if (xw && yw) {
@@ -759,6 +768,7 @@ static void mausoleum()
ticks = newticks;
newticks = SDL_GetTicks();
Mix_PlayMusic(lenin, -1);
+ music_start = SDL_GetTicks();
while (!q && newticks < ticks + 14300) {
int delta = newticks - ticks;
SDL_Event e;
@@ -1369,10 +1379,13 @@ void changeroom(int out)
magic = 0;
}
+void music_restart() { music_start = SDL_GetTicks(); }
+
void tt_mainloop()
{
keyw = keya = keys = keyd = arru = arrr = arrd = arrl = 0;
ticks = SDL_GetTicks();
+ Mix_HookMusicFinished(music_restart);
while (!q) {
SDL_Event e;
while (SDL_PollEvent(&e)) {