#include "demo.h"
#include "globvars.h"
#include "graphics.h"
#include "harness/trace.h"
#include "input.h"
#include "loading.h"
#include "pd/sys.h"
#include "s3/s3.h"
#include "sound.h"
#include "utility.h"
#include <stdlib.h>
int gLast_demo;
// IDA: void __cdecl DoDemo()
void DoDemo(void) {
tS32 start_time;
tS32 frame_time;
FILE* f;
tPath_name the_path;
int i;
int count;
char s[256];
//char* str; // Pierre-Marie Baty -- unused variable
tS3_sound_tag song_tag;
LOG_TRACE("()");
PathCat(the_path, gApplication_path, "DEMOFILE.TXT");
f = DRfopen(the_path, "rt");
if (f == NULL) {
return;
}
count = GetAnInt(f);
gLast_demo++;
if (gLast_demo >= count) {
gLast_demo = 0;
}
for (i = 0; i <= gLast_demo; i++) {
GetALineAndDontArgue(f, s);
}
PathCat(the_path, gApplication_path, s);
f = DRfopen(the_path, "rb");
if (f == NULL) {
return;
}
ClearEntireScreen();
song_tag = S3StartSound(gEffects_outlet, 10000);
DRSetPalette(gRender_palette);
FadePaletteUp();
while (1) {
SoundService();
start_time = PDGetTotalTime();
frame_time = ReadS32(f);
fread(gBack_screen
->pixels
, gBack_screen
->height
* gBack_screen
->width
, 1, f
);
PDScreenBufferSwap(0);
while (frame_time > PDGetTotalTime() - start_time && !AnyKeyDown() && !EitherMouseButtonDown()) {
// FIXME: sleep? SoundService?
}
if (!S3SoundStillPlaying(song_tag)) {
song_tag = S3StartSound(gEffects_outlet, 10000);
}
if (AnyKeyDown
() || EitherMouseButtonDown
() || feof(f
)) {
break;
}
}
S3StopSound(song_tag);
S3StopOutletSound(gEffects_outlet);
S3StopAllOutletSounds();
FadePaletteDown();
WaitForNoKeys();
}