static void playback_quit(void) { if (!playback_running) playback_start(); memset(playback_buffer[playback_decode_ind] + playback_decode_pos, 0, PLAYBACK_BUFFER_SIZE - playback_decode_pos); playback_running = false; SDL_SemPost(playback_decode_sema); SDL_SemWait(playback_play_sema); SDL_SemWait(playback_play_sema); SDL_Quit(); }
void playback_play (int seek_time, bool_t pause) { g_return_if_fail (! playing); int playlist = playlist_get_playing (); if (playlist < 0) return; int entry = playlist_get_position (playlist); if (entry < 0) return; failed_entries = 0; playback_start (playlist, entry, seek_time, pause); }
void main_loop (void) { clear_all_buttons (); if (botcfg.state == STATE_RECORDING) { fprintf (stdout, "RECORDING\n"); if (record_start () != 0) { fprintf (stderr, "Error setting up record buffer\n"); botcfg.state = STATE_EXITING; } wait_for_snes_powerup (); } else if (botcfg.state == STATE_PLAYBACK) { fprintf (stdout, "PLAYBACK\n"); if (playback_start () != 0) { fprintf (stderr, "Error setting up playback buffer\n"); botcfg.state = STATE_EXITING; } wait_for_snes_powerup (); } interrupt_enable(); if (botcfg.state == STATE_PLAYBACK || botcfg.state == STATE_RECORDING) wait_for_first_latch (); while (botcfg.state != STATE_EXITING) { if (botcfg.state != STATE_PLAYBACK && botcfg.state != STATE_MACRO) { read_joystick_inputs(); } if (!snes_is_on()) { fprintf (stdout, "SNES poweroff detected\n"); botcfg.state = STATE_EXITING; } } //Always attempt a save before exiting record_save (); }
static void playback_pcm(int16_t *pcm, int count) { const char *stream = (const char *)pcm; count *= 4; while (count > 0) { if (playback_decode_pos >= PLAYBACK_BUFFER_SIZE) { if (!playback_running) playback_start(); SDL_SemPost(playback_decode_sema); SDL_SemWait(playback_play_sema); playback_decode_ind = !playback_decode_ind; playback_decode_pos = 0; } char *decode_buffer = playback_buffer[playback_decode_ind]; int copy_len = MIN(count, PLAYBACK_BUFFER_SIZE - playback_decode_pos); memcpy(decode_buffer + playback_decode_pos, stream, copy_len); stream += copy_len; count -= copy_len; playback_decode_pos += copy_len; } }
static bool_t end_cb (void * unused) { g_return_val_if_fail (playing, FALSE); hook_call ("playback end", NULL); if (playback_error) failed_entries ++; else failed_entries = 0; playback_cleanup (); int playlist = playlist_get_playing (); bool_t play; if (get_bool (NULL, "no_playlist_advance")) play = get_bool (NULL, "repeat") && ! failed_entries; else if (! (play = playlist_next_song (playlist, get_bool (NULL, "repeat")))) playlist_set_position (playlist, -1); else if (failed_entries >= 10) play = FALSE; if (get_bool (NULL, "stop_after_current_song")) play = FALSE; if (play) playback_start (playlist, playlist_get_position (playlist), 0, FALSE); else { complete_stop (); hook_call ("playlist end reached", NULL); } return FALSE; }
void playback_input_fire (void) { if (input_keyrepeat () || num_files <= 0) return; playback_start (filelist[file_index]); }
static void initmenu(void) { // Allocate Menu Background backup. menuback = new Back(MENUXS, MENUYS); // Load menu screen. demoTexture.loadPointer(SDL_CreateTexture(render.getBase(), SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, HWXMAX, YMAX), true); clearmenu(); // Take a snapshot of the plain menu screen. menuback->save(MENUX, MENUY); // .. freeze overlapping part of Title. head = (Sprite *)loadfile("pic\\ravage.spr", NULL); sHead.load(head, false); // Load pointer. pointer = (Sprite *)loadfile("pic\\pointer.spr", NULL); sPointer.load(pointer, false); // Set mouse area. //setmouselimits(MENUX, MENUY, MENUX+MENUXS-pointer->xs, MENUY+MENUYS-pointer->ys); setmouselimits(-BORDER, 0, 320, 240); // Initialize POINTER animation buffer. back = new Back(pointer->xs, pointer->ys); // Set events to initial values. pointer_enabled = 1; keys_enabled = 0; joy_enabled = 0; // Several buttons & fonts. blue = new Font("fonts\\blue.fnt"); tiny = new Font("fonts\\tiny.fnt"); addsub = (Sprite *)loadfile("pic\\addsub.spr", NULL); sAddSub.load(addsub, false); yesno = (Sprite *)loadfile("pic\\yesno.spr", NULL); sYesNo.load(yesno, false); // Write version information. #ifdef SHAREWARE tiny->vanilla(215, 65, "shareware 1.1", 10); #else tiny->vanilla(215, 65, "registered 1.1", 10); #endif // Save current game state in case the menu is in SHOP mode. gsave = gstate; psave = player[nowplayer]; psave2 = player[1-nowplayer]; player[1-nowplayer].active = 0; // Deactivate unused player. // Initialize DEMO GAME. cheatsave = cheatlevel; cheatlevel |= CHEAT_INVUL | CHEAT_NOMONEY; playback_start("demo1\\demo1.rec"); player[nowplayer].control = playback_device; gstate.nplayers = 1; gstate.difficulty = 3; newgame(1); newlevel("demo1\\demo1"); weapon_releaseall(nowplayer, STARTX1, STARTY); // Start playing background music. s_loadmod("mods\\menu.uni"); s_startmod(); // Fade In fadein(level.palette); }