diff options
author | Aleksey Veresov <aleksey@veresov.pro> | 2021-03-04 13:05:26 +0300 |
---|---|---|
committer | Aleksey Veresov <aleksey@veresov.pro> | 2021-03-04 13:05:26 +0300 |
commit | d4f3fdaf9c5a852a4426c9501e72ed1db334f0c8 (patch) | |
tree | 460aba0b7653e6ca839d6af211113a1af8ba378d | |
parent | f9cc5b35e228eec935b15eb7575ffb0ef826111f (diff) | |
download | takethis-d4f3fdaf9c5a852a4426c9501e72ed1db334f0c8.tar takethis-d4f3fdaf9c5a852a4426c9501e72ed1db334f0c8.tar.xz takethis-d4f3fdaf9c5a852a4426c9501e72ed1db334f0c8.zip |
Music position is now saved too.
-rw-r--r-- | src/game.c | 17 |
1 files changed, 15 insertions, 2 deletions
@@ -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)) { |