/* =========== CDAudio_Activate Called when the main window gains or loses focus. The window have been destroyed and recreated between a deactivate and an activate. =========== */ void CDAudio_Activate (int active) { if (active) CDAudio_Resume (); else CDAudio_Pause (); }
static qboolean CDAudio_SetVolume (cvar_t *var) { if (cdfile == -1 || !enabled) return false; if (var->value < 0.0) Cvar_SetValue (var->name, 0.0); else if (var->value > 1.0) Cvar_SetValue (var->name, 1.0); old_cdvolume = var->value; if (hw_vol_works) { drv_vol.vol[0] = drv_vol.vol[2] = drv_vol.vol[1] = drv_vol.vol[3] = var->value * 255.0; return CD_SetVolume (&drv_vol); } else { if (old_cdvolume == 0.0) CDAudio_Pause (); else CDAudio_Resume(); return false; } }
void CDAudio_Update() { if(!cd_id || !enabled) return; if(cd_volume && cd_volume->value != cdvolume) { if(cdvolume) { Cvar_SetValue("cd_volume",0.0); CDAudio_Pause(); } else { Cvar_SetValue("cd_volume",1.0); CDAudio_Resume(); } cdvolume = cd_volume->value; return; } if(cd_nocd->value) { CDAudio_Stop(); return; } if(playLooping && (SDL_CDStatus(cd_id) != CD_PLAYING) && (SDL_CDStatus(cd_id) != CD_PAUSED)) { CDAudio_Play(lastTrack,true); } }
/* =============== SCR_EndLoadingPlaque ================ */ void SCR_EndLoadingPlaque (void) { scr_disabled_for_loading = qfalse; scr_fullupdate = 0; Con_ClearNotify (); CDAudio_Resume(); }
static qboolean CDAudio_SetVolume (cvar_t *var) { if (!cd_handle || !enabled) return false; if (var->value < 0.0) Cvar_SetValue (var->name, 0.0); else if (var->value > 1.0) Cvar_SetValue (var->name, 1.0); old_cdvolume = var->value; if (hw_vol_works) { /* FIXME: write proper code in here when SDL supports cdrom volume control some day. */ return CD_SetVolume (NULL); } else { if (old_cdvolume == 0.0) CDAudio_Pause (); else CDAudio_Resume(); return false; } }
void CDAudio_Stop (void) { if (!enabled) return; // save the playlist position CDAudio_StopPlaylistTrack(); if (faketrack != -1) { S_StopChannel (faketrack, true); faketrack = -1; } else if (cdPlaying && (CDAudio_SysStop() == -1)) return; else if(wasPlaying) { CDAudio_Resume(); // needed by SDL - can't stop while paused there (causing pause/stop to fail after play, pause, stop, play otherwise) if (cdPlaying && (CDAudio_SysStop() == -1)) return; } wasPlaying = false; cdPlaying = false; }
void CDAudio_Activate (qboolean active) { if (active) CDAudio_Resume (); else CDAudio_Pause (); }
void CDAudio_Update(void) { if (!enabled) return; if (bgmvolume.value != cdvolume) { cdvolume = bgmvolume.value; CDAudio_SetVolume (cdvolume); if (cdvolume) { if(!playing) CDAudio_Resume (); } else { if(playing) CDAudio_Pause (); } }; if(StatusOgg() == OGG_STATUS_EOF) { if(playing) { playing = false; }; }; }
// // VID_ChangeVideoMode // intended only as a callback for VID_Restart_f // static void VID_ChangeVideoMode (int newmode) { int stat, temp; if (!screen) return; temp = scr_disabled_for_loading; scr_disabled_for_loading = true; CDAudio_Pause (); MIDI_Pause (MIDI_ALWAYS_PAUSE); S_ClearBuffer (); stat = VID_SetMode (newmode, vid_curpal); if (!stat) { if (vid_modenum == newmode) Sys_Error ("Couldn't set video mode: %s", SDL_GetError()); // failed setting mode, probably due to insufficient // memory. go back to previous mode. Cvar_SetValue ("vid_mode", vid_modenum); stat = VID_SetMode (vid_modenum, vid_curpal); if (!stat) Sys_Error ("Couldn't set video mode: %s", SDL_GetError()); } CDAudio_Resume (); MIDI_Pause (MIDI_ALWAYS_RESUME); scr_disabled_for_loading = temp; }
void resume() { Con_Printf("Resume requested\n"); // Check each file. for (std::size_t file_index = 0; file_index < file_count; ++file_index) { // Is the file in use? file& file = files[file_index]; if (file.name[0]) { // Reopen the file. This can repeatedly fail, so we keep trying. const char* mode = file.write ? "ab" : "rb"; do { file.handle = fopen(file.name, mode); } while (!file.handle); // Restore the offset; if (fseek(file.handle, file.offset, SEEK_SET) != 0) { throw std::runtime_error("Couldn't seek in file"); } } } CDAudio_Resume(); Con_Printf("Filesystem resumed\n"); }
/* ================ VID_SetMode ================ */ static int VID_SetMode (int width, int height, int bpp, qboolean fullscreen) { int temp; Uint32 flags = DEFAULT_SDL_FLAGS; char caption[50]; if (fullscreen) flags |= SDL_FULLSCREEN; // so Con_Printfs don't mess us up by forcing vid and snd updates temp = scr_disabled_for_loading; scr_disabled_for_loading = true; CDAudio_Pause (); BGM_Pause (); // // swap control (the "before SDL_SetVideoMode" part) // gl_swap_control = true; if (SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL, (vid_vsync.value) ? 1 : 0) == -1) gl_swap_control = false; bpp = SDL_VideoModeOK(width, height, bpp, flags); draw_context = SDL_SetVideoMode(width, height, bpp, flags); if (!draw_context) Sys_Error ("Couldn't set video mode"); q_snprintf(caption, sizeof(caption), "QuakeSpasm %1.2f.%d", (float)FITZQUAKE_VERSION, QUAKESPASM_VER_PATCH); SDL_WM_SetCaption(caption, caption); vid.width = draw_context->w; vid.height = draw_context->h; vid.conwidth = vid.width & 0xFFFFFFF8; vid.conheight = vid.conwidth * vid.height / vid.width; vid.numpages = 2; modestate = draw_context->flags & SDL_FULLSCREEN ? MS_FULLSCREEN : MS_WINDOWED; CDAudio_Resume (); BGM_Resume (); scr_disabled_for_loading = temp; // fix the leftover Alt from any Alt-Tab or the like that switched us away ClearAllStates (); Con_SafePrintf ("Video mode %dx%dx%d initialized\n", draw_context->w, draw_context->h, draw_context->format->BitsPerPixel); vid.recalc_refdef = 1; // no pending changes vid_changed = false; return true; }
static void CLQW_ParseSetPause( QMsg& message ) { cl.qh_paused = message.ReadByte(); if ( cl.qh_paused ) { CDAudio_Pause(); } else { CDAudio_Resume(); } }
void CDAudio_Update(void) { if (!cd_enabled.value || !initialized) // Manoel Kasimier - CD player in menu return; if (bgmvolume.value != cdvolume) { CD_SetVolume(bgmvolume.value ); // Hexen 2 if (cdvolume && !bgmvolume.value) // Manoel Kasimier - just muted CDAudio_Pause (); else if (!cdvolume && bgmvolume.value) // Manoel Kasimier CDAudio_Resume (); cdvolume = bgmvolume.value; } }
void CDAudio_Update(void) { if ( cd_nocd->value != !enabled ) { if ( cd_nocd->value ) { CDAudio_Stop(); enabled = false; } else { enabled = true; CDAudio_Resume (); } } }
static void CDAudio_SetVolume (cvar_t *var) { if (var->value < 0.0) Cvar_SetValue (var->name, 0.0); else if (var->value > 1.0) Cvar_SetValue (var->name, 1.0); old_cdvolume = var->value; #ifdef USE_AUX_API CD_SetVolume (var->value * 0xffff); #endif /* USE_AUX_API */ if (old_cdvolume == 0.0) CDAudio_Pause (); else CDAudio_Resume(); }
void CDAudio_Update () { static int cnt = 0; if ( !cd_id || !enabled ) { return; } if ( cd_volume && ( cd_volume->value != cdvolume ) ) { if ( cdvolume ) { Cvar_SetValue( "cd_volume", 0.0 ); CDAudio_Pause(); } else { Cvar_SetValue( "cd_volume", 1.0 ); CDAudio_Resume(); } cdvolume = cd_volume->value; return; } /* this causes too much overhead to be executed every frame */ if ( ++cnt == 16 ) { cnt = 0; if ( cd_nocd->value ) { CDAudio_Stop(); return; } if ( playLooping && ( SDL_CDStatus( cd_id ) != CD_PLAYING ) && ( SDL_CDStatus( cd_id ) != CD_PAUSED ) ) { CDAudio_Play( lastTrack, true ); } } }
void CDA_Resume (void) { #ifdef UQE_FMOD_CDAUDIO if(SND_InitialisedCD == false || SND_MusicChannel.inuse == false) return; if(SND_MusicChannel.paused == true) { result = FMOD_Channel_SetPaused(SND_MusicChannel.channel, false); FMOD_ERROR(result, true, false); SND_MusicChannel.paused = false; } #else CDAudio_Resume(); #endif }
void CDAudio_Update(void) { struct cdrom_subchnl subchnl; static time_t lastchk; if (!enabled) return; if (bgmvolume.value != cdvolume) { if (cdvolume) { Cvar_SetValue ("bgmvolume", 0.0); cdvolume = bgmvolume.value; CDAudio_Pause (); } else { Cvar_SetValue ("bgmvolume", 1.0); cdvolume = bgmvolume.value; CDAudio_Resume (); } } if (playing && lastchk < time(NULL)) { lastchk = time(NULL) + 2; //two seconds between chks subchnl.cdsc_format = CDROM_MSF; if (ioctl(cdfile, CDROMSUBCHNL, &subchnl) == -1 ) { Con_DPrintf("ioctl cdromsubchnl failed\n"); playing = false; return; } if (subchnl.cdsc_audiostatus != CDROM_AUDIO_PLAY && subchnl.cdsc_audiostatus != CDROM_AUDIO_PAUSED) { playing = false; if (playLooping) CDAudio_Play(playTrack, true); } } }
void CDAudio_Update() { if(!cd_id || !enabled) return; if(bgmvolume.value != cdvolume) { if(cdvolume) { Cvar_SetValue("bgmvolume",0.0); CDAudio_Pause(); } else { Cvar_SetValue("bgmvolume",1.0); CDAudio_Resume(); } cdvolume = bgmvolume.value; return; } if(playLooping && (SDL_CDStatus(cd_id) != CD_PLAYING) && (SDL_CDStatus(cd_id) != CD_PAUSED)) CDAudio_Play(cd_id->cur_track+1,true); }
void CDAudio_Update(void) { if (!enabled) { return; } if (bgmvolume.value != cdvolume) { if (cdvolume) { Cvar_SetValue("bgmvolume", 0.0); cdvolume = bgmvolume.value; CDAudio_Pause(); } else { Cvar_SetValue("bgmvolume", 1.0); cdvolume = bgmvolume.value; CDAudio_Resume(); } } }
void CDAudio_SetVolume (float newvol) { // If the volume hasn't changed if (newvol == cdvolume) return; // If the CD has been muted if (newvol == 0.0f) CDAudio_Pause (); else { // If the CD has been unmuted if (cdvolume == 0.0f) CDAudio_Resume (); if (faketrack != -1) S_SetChannelVolume (faketrack, newvol); else CDAudio_SysSetVolume (newvol); } cdvolume = newvol; }
void CDAudio_Update(void) { if (!enabled) return; if (bgmvolume.value != cdvolume) CD_SetVolume(bgmvolume.value * 0xffff); if ((!bgmvolume.value && cdvolume) || (bgmvolume.value && !cdvolume)) { if (cdvolume) { // Cvar_SetValue ("bgmvolume", 0.0); CDAudio_Pause (); } else { // Cvar_SetValue ("bgmvolume", 1.0); CDAudio_Resume (); } } cdvolume = bgmvolume.value; }
void CLNQ_ParseServerMessage (void) { int cmd; int i; qbool message_with_datagram; // hack to fix glitches when receiving a packet // without a datagram nq_player_teleported = false; // OMG, it's a hack! message_with_datagram = false; cl_entframecount++; if (cl_shownet.value == 1) Com_Printf ("%i ", net_message.cursize); else if (cl_shownet.value == 2) Com_Printf ("------------------\n"); cl.onground = false; // unless the server says otherwise // // parse the message // //MSG_BeginReading (); while (1) { if (msg_badread) Host_Error ("CL_ParseServerMessage: Bad server message"); cmd = MSG_ReadByte (); if (cmd == -1) { SHOWNET("END OF MESSAGE"); if (!message_with_datagram) { cl_entframecount--; } else { VectorCopy (nq_mviewangles[0], nq_mviewangles[1]); VectorCopy (nq_mviewangles_temp, nq_mviewangles[0]); } return; // end of message } // if the high bit of the command byte is set, it is a fast update if (cmd & 128) { SHOWNET("fast update"); NQD_ParseUpdate (cmd&127); continue; } if (cmd < num_svc_strings) SHOWNET(svc_strings[cmd]); // other commands switch (cmd) { default: Host_Error ("CL_ParseServerMessage: Illegible server message"); break; case svc_nop: break; case nq_svc_time: nq_mtime[1] = nq_mtime[0]; nq_mtime[0] = MSG_ReadFloat (); cl.servertime = nq_mtime[0]; message_with_datagram = true; break; case nq_svc_clientdata: i = MSG_ReadShort (); NQD_ParseClientdata (i); break; case nq_svc_version: i = MSG_ReadLong (); if (i != NQ_PROTOCOL_VERSION) Host_Error ("CL_ParseServerMessage: Server is protocol %i instead of %i\n", i, NQ_PROTOCOL_VERSION); break; case svc_disconnect: Com_Printf ("\n======== End of demo ========\n\n"); CL_NextDemo (); Host_EndGame (); Host_Abort (); break; case svc_print: NQD_ParsePrint (); break; case svc_centerprint: SCR_CenterPrint (MSG_ReadString ()); break; case svc_stufftext: NQD_ParseStufftext (); break; case svc_damage: V_ParseDamage (); break; case svc_serverdata: NQD_ParseServerData (); break; case svc_setangle: for (i=0 ; i<3 ; i++) nq_last_fixangle[i] = cl.simangles[i] = cl.viewangles[i] = MSG_ReadAngle (); break; case svc_setview: nq_viewentity = MSG_ReadShort (); if (nq_viewentity <= nq_maxclients) cl.playernum = nq_viewentity - 1; else { // just let cl.playernum stay where it was } break; case svc_lightstyle: i = MSG_ReadByte (); if (i >= MAX_LIGHTSTYLES) Sys_Error ("svc_lightstyle > MAX_LIGHTSTYLES"); strlcpy (cl_lightstyle[i].map, MSG_ReadString(), sizeof(cl_lightstyle[0].map)); cl_lightstyle[i].length = strlen(cl_lightstyle[i].map); break; case svc_sound: NQD_ParseStartSoundPacket(); break; case svc_stopsound: i = MSG_ReadShort(); S_StopSound(i>>3, i&7); break; case nq_svc_updatename: Sbar_Changed (); i = MSG_ReadByte (); if (i >= nq_maxclients) Host_Error ("CL_ParseServerMessage: svc_updatename > NQ_MAX_CLIENTS"); strlcpy (cl.players[i].name, MSG_ReadString(), sizeof(cl.players[i].name)); break; case svc_updatefrags: Sbar_Changed (); i = MSG_ReadByte (); if (i >= nq_maxclients) Host_Error ("CL_ParseServerMessage: svc_updatefrags > NQ_MAX_CLIENTS"); cl.players[i].frags = MSG_ReadShort(); break; case nq_svc_updatecolors: NQD_ParseUpdatecolors (); break; case nq_svc_particle: CL_ParseParticleEffect (); break; case svc_spawnbaseline: i = MSG_ReadShort (); if (i >= NQ_MAX_EDICTS) Host_Error ("svc_spawnbaseline: ent > MAX_EDICTS"); NQD_BumpEntityCount (i); CL_ParseBaseline (&cl_entities[i].baseline); break; case svc_spawnstatic: CL_ParseStatic (); break; case svc_temp_entity: CL_ParseTEnt (); break; case svc_setpause: if (MSG_ReadByte() != 0) cl.paused |= PAUSED_SERVER; else cl.paused &= ~PAUSED_SERVER; if (cl.paused) CDAudio_Pause (); else CDAudio_Resume (); break; case nq_svc_signonnum: i = MSG_ReadByte (); if (i <= nq_signon) Host_Error ("Received signon %i when at %i", i, nq_signon); nq_signon = i; CLNQ_SignonReply (); break; case svc_killedmonster: cl.stats[STAT_MONSTERS]++; break; case svc_foundsecret: cl.stats[STAT_SECRETS]++; break; case svc_updatestat: i = MSG_ReadByte (); if (i < 0 || i >= MAX_CL_STATS) Sys_Error ("svc_updatestat: %i is invalid", i); cl.stats[i] = MSG_ReadLong ();; break; case svc_spawnstaticsound: CL_ParseStaticSound (); break; case svc_cdtrack: cl.cdtrack = MSG_ReadByte (); MSG_ReadByte(); // loop track (unused) if (nq_forcecdtrack != -1) CDAudio_Play ((byte)nq_forcecdtrack, true); else CDAudio_Play ((byte)cl.cdtrack, true); break; case svc_intermission: cl.intermission = 1; cl.completed_time = cl.time; VectorCopy (nq_last_fixangle, cl.simangles); break; case svc_finale: cl.intermission = 2; cl.completed_time = cl.time; SCR_CenterPrint (MSG_ReadString ()); VectorCopy (nq_last_fixangle, cl.simangles); break; case nq_svc_cutscene: cl.intermission = 3; cl.completed_time = cl.time; SCR_CenterPrint (MSG_ReadString ()); VectorCopy (nq_last_fixangle, cl.simangles); break; case svc_sellscreen: break; } } }
/* ===================== CL_ParseServerMessage ===================== */ void CL_ParseServerMessage(void) { unsigned int bits; int i, cmd, prevcmd; int playernum, version, stylenum, signon, statnum; int stopsound, entitynum, channel; byte colors; player_info_t *player; lightstyle_t *style; const char *stylemap, *name; // // if recording demos, copy the message out // if (cl_shownet.value == 1) Con_Printf("%i ", net_message.cursize); else if (cl_shownet.value == 2) Con_Printf("------------------\n"); cl.onground = false; // unless the server says otherwise // // parse the message // prevcmd = svc_bad; MSG_BeginReading(); while (1) { if (msg_badread) Host_Error("%s: Bad server message", __func__); cmd = MSG_ReadByte(); if (cmd == -1) { SHOWNET("END OF MESSAGE"); return; // end of message } // if the high bit of the command byte is set, it is a fast update if (cmd & 128) { SHOWNET("fast update"); CL_ParseUpdate(cmd & 127); continue; } SHOWNET(svc_strings[cmd]); // other commands switch (cmd) { case svc_nop: break; case svc_time: cl.mtime[1] = cl.mtime[0]; cl.mtime[0] = MSG_ReadFloat(); break; case svc_clientdata: CL_ParseClientdata(); break; case svc_version: version = MSG_ReadLong(); if (!Protocol_Known(version)) Host_Error("%s: Server returned unknown protocol version %i", __func__, version); cl.protocol = version; break; case svc_disconnect: Host_EndGame("Server disconnected\n"); case svc_print: Con_Printf("%s", MSG_ReadString()); break; case svc_centerprint: SCR_CenterPrint(MSG_ReadString()); break; case svc_stufftext: Cbuf_AddText("%s", MSG_ReadString()); break; case svc_damage: V_ParseDamage(); break; case svc_serverinfo: CL_ParseServerInfo(); vid.recalc_refdef = true; // leave intermission full screen break; case svc_setangle: for (i = 0; i < 3; i++) cl.viewangles[i] = MSG_ReadAngle(); break; case svc_setview: cl.viewentity = MSG_ReadShort(); break; case svc_lightstyle: stylenum = MSG_ReadByte(); if (stylenum >= MAX_LIGHTSTYLES) Sys_Error("svc_lightstyle > MAX_LIGHTSTYLES"); stylemap = MSG_ReadString(); style = cl_lightstyle + stylenum; snprintf(style->map, MAX_STYLESTRING, "%s", stylemap); style->length = strlen(style->map); break; case svc_sound: CL_ParseStartSoundPacket(); break; case svc_stopsound: stopsound = MSG_ReadShort(); /* 3-bit channel encoded in lsb */ entitynum = stopsound >> 3; channel = stopsound & 7; S_StopSound(entitynum, channel); break; case svc_updatename: Sbar_Changed(); playernum = MSG_ReadByte(); if (playernum >= cl.maxclients) Host_Error("%s: svc_updatename > MAX_SCOREBOARD", __func__); name = MSG_ReadString(); player = cl.players + playernum; snprintf(player->name, MAX_SCOREBOARDNAME, "%s", name); break; case svc_updatefrags: Sbar_Changed(); playernum = MSG_ReadByte(); if (playernum >= cl.maxclients) Host_Error("%s: svc_updatefrags > MAX_SCOREBOARD", __func__); player = cl.players + playernum; player->frags = MSG_ReadShort(); break; case svc_updatecolors: Sbar_Changed(); playernum = MSG_ReadByte(); if (playernum >= cl.maxclients) Host_Error("%s: svc_updatecolors > MAX_SCOREBOARD", __func__); colors = MSG_ReadByte(); player = cl.players + playernum; player->topcolor = (colors & 0xf0) >> 4; player->bottomcolor = colors & 0x0f; /* FIXME - is this the right check for current player? */ if (playernum == cl.viewentity) cl_color.value = colors; CL_NewTranslation(playernum); break; case svc_particle: R_ParseParticleEffect(); break; case svc_spawnbaseline: entitynum = MSG_ReadShort(); // must use CL_EntityNum() to force cl.num_entities up CL_ParseBaseline(CL_EntityNum(entitynum), 0); break; case svc_fitz_spawnbaseline2: /* FIXME - check here that protocol is FITZ? => Host_Error() */ entitynum = MSG_ReadShort(); bits = MSG_ReadByte(); // must use CL_EntityNum() to force cl.num_entities up CL_ParseBaseline(CL_EntityNum(entitynum), bits); break; case svc_spawnstatic: CL_ParseStatic(0); break; case svc_fitz_spawnstatic2: /* FIXME - check here that protocol is FITZ? => Host_Error() */ bits = MSG_ReadByte(); CL_ParseStatic(bits); break; case svc_temp_entity: CL_ParseTEnt(); break; case svc_setpause: cl.paused = MSG_ReadByte(); if (cl.paused) CDAudio_Pause(); else CDAudio_Resume(); break; case svc_signonnum: signon = MSG_ReadByte(); if (signon <= cls.signon) Host_Error("Received signon %d when at %d", signon, cls.signon); cls.signon = signon; CL_SignonReply(); break; case svc_killedmonster: cl.stats[STAT_MONSTERS]++; break; case svc_foundsecret: cl.stats[STAT_SECRETS]++; break; case svc_updatestat: statnum = MSG_ReadByte(); if (statnum < 0 || statnum >= MAX_CL_STATS) Sys_Error("svc_updatestat: %d is invalid", statnum); cl.stats[statnum] = MSG_ReadLong(); break; case svc_spawnstaticsound: CL_ParseStaticSound(); break; case svc_fitz_spawnstaticsound2: /* FIXME - check here that protocol is FITZ? => Host_Error() */ CL_ParseFitzStaticSound2(); break; case svc_cdtrack: cl.cdtrack = MSG_ReadByte(); cl.looptrack = MSG_ReadByte(); if ((cls.demoplayback || cls.demorecording) && (cls.forcetrack != -1)) CDAudio_Play((byte)cls.forcetrack, true); else CDAudio_Play((byte)cl.cdtrack, true); break; case svc_intermission: cl.intermission = 1; cl.completed_time = cl.time; vid.recalc_refdef = true; // go to full screen break; case svc_finale: cl.intermission = 2; cl.completed_time = cl.time; vid.recalc_refdef = true; // go to full screen SCR_CenterPrint(MSG_ReadString()); break; case svc_cutscene: cl.intermission = 3; cl.completed_time = cl.time; vid.recalc_refdef = true; // go to full screen SCR_CenterPrint(MSG_ReadString()); break; case svc_sellscreen: Cmd_ExecuteString("help", src_command); break; /* Various FITZ protocol messages - FIXME - !protocol => Host_Error */ case svc_fitz_skybox: MSG_ReadString(); // FIXME - TODO break; case svc_fitz_bf: Cmd_ExecuteString("bf", src_command); break; case svc_fitz_fog: /* FIXME - TODO */ MSG_ReadByte(); // density MSG_ReadByte(); // red MSG_ReadByte(); // green MSG_ReadByte(); // blue MSG_ReadShort(); // time break; default: Host_Error("%s: Illegible server message. Previous was %s", __func__, svc_strings[prevcmd]); } prevcmd = cmd; } }
static void CD_f (void) { const char *command; int ret, n; if (Cmd_Argc() < 2) { Con_Printf("commands:"); Con_Printf("on, off, reset, remap, \n"); Con_Printf("play, stop, loop, pause, resume\n"); Con_Printf("eject, info\n"); return; } command = Cmd_Argv (1); if (q_strcasecmp(command, "on") == 0) { enabled = true; return; } if (q_strcasecmp(command, "off") == 0) { if (playing) CDAudio_Stop(); enabled = false; return; } if (q_strcasecmp(command, "reset") == 0) { enabled = true; if (playing) CDAudio_Stop(); for (n = 0; n < 100; n++) remap[n] = n; CDAudio_GetAudioDiskInfo(); return; } if (q_strcasecmp(command, "remap") == 0) { ret = Cmd_Argc () - 2; if (ret <= 0) { for (n = 1; n < 100; n++) if (remap[n] != n) Con_Printf (" %u -> %u\n", n, remap[n]); return; } for (n = 1; n <= ret; n++) remap[n] = atoi(Cmd_Argv (n + 1)); return; } if (!cdValid) { CDAudio_GetAudioDiskInfo (); if (!cdValid) { Con_Printf("No CD in player.\n"); return; } } if (q_strcasecmp(command, "play") == 0) { CDAudio_Play((byte)atoi(Cmd_Argv (2)), false); return; } if (q_strcasecmp(command, "loop") == 0) { CDAudio_Play((byte)atoi(Cmd_Argv (2)), true); return; } if (q_strcasecmp(command, "stop") == 0) { CDAudio_Stop(); return; } if (q_strcasecmp(command, "pause") == 0) { CDAudio_Pause(); return; } if (q_strcasecmp(command, "resume") == 0) { CDAudio_Resume(); return; } if (q_strcasecmp(command, "eject") == 0) { if (playing) CDAudio_Stop(); CDAudio_Eject(); cdValid = false; return; } if (q_strcasecmp(command, "info") == 0) { int current_min, current_sec, current_frame; int length_min, length_sec, length_frame; Con_Printf ("%u tracks\n", cd_handle->numtracks); if (playing) Con_Printf ("Currently %s track %u\n", playLooping ? "looping" : "playing", playTrack); else if (wasPlaying) Con_Printf ("Paused %s track %u\n", playLooping ? "looping" : "playing", playTrack); if (playing || wasPlaying) { SDL_CDStatus(cd_handle); FRAMES_TO_MSF(cd_handle->cur_frame, ¤t_min, ¤t_sec, ¤t_frame); FRAMES_TO_MSF(cd_handle->track[playTrack-1].length, &length_min, &length_sec, &length_frame); Con_Printf ("Current position: %d:%02d.%02d (of %d:%02d.%02d)\n", current_min, current_sec, current_frame * 60 / CD_FPS, length_min, length_sec, length_frame * 60 / CD_FPS); } Con_Printf ("Volume is %f\n", bgmvolume.value); return; } }
static void CD_f (void) { char *command; int ret; int n; if (Cmd_Argc() < 2) return; command = Cmd_Argv (1); if (Q_strcasecmp(command, "on") == 0) { enabled = true; return; } if (Q_strcasecmp(command, "off") == 0) { if (playing) CDAudio_Stop(); enabled = false; return; } if (Q_strcasecmp(command, "reset") == 0) { enabled = true; if (playing) CDAudio_Stop(); for (n = 0; n < 100; n++) remap[n] = n; CDAudio_GetAudioDiskInfo(); return; } if (Q_strcasecmp(command, "remap") == 0) { ret = Cmd_Argc() - 2; if (ret <= 0) { for (n = 1; n < 100; n++) if (remap[n] != n) Con_Printf(" %u -> %u\n", n, remap[n]); return; } for (n = 1; n <= ret; n++) remap[n] = Q_atoi(Cmd_Argv (n+1)); return; } if (Q_strcasecmp(command, "close") == 0) { CDAudio_CloseDoor(); return; } if (!cdValid) { CDAudio_GetAudioDiskInfo(); if (!cdValid) { Con_Printf("No CD in player.\n"); return; } } if (Q_strcasecmp(command, "play") == 0) { CDAudio_Play((byte)Q_atoi(Cmd_Argv (2)), false); return; } if (Q_strcasecmp(command, "loop") == 0) { CDAudio_Play((byte)Q_atoi(Cmd_Argv (2)), true); return; } if (Q_strcasecmp(command, "stop") == 0) { CDAudio_Stop(); return; } if (Q_strcasecmp(command, "pause") == 0) { CDAudio_Pause(); return; } if (Q_strcasecmp(command, "resume") == 0) { CDAudio_Resume(); return; } if (Q_strcasecmp(command, "eject") == 0) { if (playing) CDAudio_Stop(); CDAudio_Eject(); cdValid = false; return; } if (Q_strcasecmp(command, "info") == 0) { Con_Printf("%u tracks\n", maxTrack); if (playing) Con_Printf("Currently %s track %u\n", playLooping ? "looping" : "playing", playTrack); else if (wasPlaying) Con_Printf("Paused %s track %u\n", playLooping ? "looping" : "playing", playTrack); Con_Printf("Volume is %f\n", cdvolume); return; } }
void CL_ParseServerMessage (void) { int cmd; int i; // // if recording demos, copy the message out // if (cl_shownet.value == 1) Con_Printf ("%i ",net_message.cursize); else if (cl_shownet.value == 2) Con_Printf ("------------------\n"); cl.onground = false; // unless the server says otherwise // // parse the message // MSG_BeginReading (); while (1) { if (msg_badread) Host_Error ("CL_ParseServerMessage: Bad server message"); cmd = MSG_ReadByte (); if (cmd == -1) { SHOWNET("END OF MESSAGE"); return; // end of message } // if the high bit of the command byte is set, it is a fast update if (cmd & 128) { SHOWNET("fast update"); CL_ParseUpdate (cmd&127); continue; } SHOWNET(svc_strings[cmd]); // other commands switch (cmd) { default: Host_Error ("CL_ParseServerMessage: Illegible server message\n"); break; case svc_nop: // Con_Printf ("svc_nop\n"); break; case svc_time: cl.mtime[1] = cl.mtime[0]; cl.mtime[0] = MSG_ReadFloat (); break; case svc_clientdata: i = MSG_ReadShort (); CL_ParseClientdata (i); break; case svc_version: i = MSG_ReadLong (); if (i != PROTOCOL_VERSION) Host_Error ("CL_ParseServerMessage: Server is protocol %i instead of %i\n", i, PROTOCOL_VERSION); break; case svc_disconnect: Host_EndGame ("Server disconnected\n"); case svc_print: Con_Printf ("%s", MSG_ReadString ()); break; case svc_centerprint: SCR_CenterPrint (MSG_ReadString ()); break; case svc_stufftext: Cbuf_AddText (MSG_ReadString ()); break; case svc_damage: V_ParseDamage (); break; case svc_serverinfo: CL_ParseServerInfo (); vid.recalc_refdef = true; // leave intermission full screen break; case svc_setangle: for (i=0 ; i<3 ; i++) cl.viewangles[i] = MSG_ReadAngle (); break; case svc_setview: cl.viewentity = MSG_ReadShort (); break; case svc_lightstyle: i = MSG_ReadByte (); if (i >= MAX_LIGHTSTYLES) Sys_Error ("svc_lightstyle > MAX_LIGHTSTYLES"); Q_strcpy (cl_lightstyle[i].map, MSG_ReadString()); cl_lightstyle[i].length = Q_strlen(cl_lightstyle[i].map); break; case svc_sound: CL_ParseStartSoundPacket(); break; case svc_stopsound: i = MSG_ReadShort(); S_StopSound(i>>3, i&7); break; case svc_updatename: Sbar_Changed (); i = MSG_ReadByte (); if (i >= cl.maxclients) Host_Error ("CL_ParseServerMessage: svc_updatename > MAX_SCOREBOARD"); strcpy (cl.scores[i].name, MSG_ReadString ()); break; case svc_updatefrags: Sbar_Changed (); i = MSG_ReadByte (); if (i >= cl.maxclients) Host_Error ("CL_ParseServerMessage: svc_updatefrags > MAX_SCOREBOARD"); cl.scores[i].frags = MSG_ReadShort (); break; case svc_updatecolors: Sbar_Changed (); i = MSG_ReadByte (); if (i >= cl.maxclients) Host_Error ("CL_ParseServerMessage: svc_updatecolors > MAX_SCOREBOARD"); cl.scores[i].colors = MSG_ReadByte (); CL_NewTranslation (i); break; case svc_particle: R_ParseParticleEffect (); break; case svc_spawnbaseline: i = MSG_ReadShort (); // must use CL_EntityNum() to force cl.num_entities up CL_ParseBaseline (CL_EntityNum(i)); break; case svc_spawnstatic: CL_ParseStatic (); break; case svc_temp_entity: CL_ParseTEnt (); break; case svc_setpause: { cl.paused = MSG_ReadByte (); if (cl.paused) { CDAudio_Pause (); #ifdef _WIN32 VID_HandlePause (true); #endif } else { CDAudio_Resume (); #ifdef _WIN32 VID_HandlePause (false); #endif } } break; case svc_signonnum: i = MSG_ReadByte (); if (i <= cls.signon) Host_Error ("Received signon %i when at %i", i, cls.signon); cls.signon = i; CL_SignonReply (); break; case svc_killedmonster: cl.stats[STAT_MONSTERS]++; break; case svc_foundsecret: cl.stats[STAT_SECRETS]++; break; case svc_updatestat: i = MSG_ReadByte (); if (i < 0 || i >= MAX_CL_STATS) Sys_Error ("svc_updatestat: %i is invalid", i); cl.stats[i] = MSG_ReadLong ();; break; case svc_spawnstaticsound: CL_ParseStaticSound (); break; case svc_cdtrack: cl.cdtrack = MSG_ReadByte (); cl.looptrack = MSG_ReadByte (); if ( (cls.demoplayback || cls.demorecording) && (cls.forcetrack != -1) ) CDAudio_Play ((byte)cls.forcetrack, true); else CDAudio_Play ((byte)cl.cdtrack, true); break; case svc_intermission: cl.intermission = 1; cl.completed_time = (int) cl.time; vid.recalc_refdef = true; // go to full screen break; case svc_finale: cl.intermission = 2; cl.completed_time = (int) cl.time; vid.recalc_refdef = true; // go to full screen SCR_CenterPrint (MSG_ReadString ()); break; case svc_cutscene: cl.intermission = 3; cl.completed_time = (int) cl.time; vid.recalc_refdef = true; // go to full screen SCR_CenterPrint (MSG_ReadString ()); break; case svc_sellscreen: Cmd_ExecuteString2 ("help", src_command); break; } } }
static void CD_f (void) { const char *command; #ifdef MAXTRACKS int ret; int n; #endif command = Cmd_Argv (1); if (strcasecmp(command, "remap") != 0) Host_StartVideo(); if (strcasecmp(command, "on") == 0) { enabled = true; return; } if (strcasecmp(command, "off") == 0) { CDAudio_Stop(); enabled = false; return; } if (strcasecmp(command, "reset") == 0) { enabled = true; CDAudio_Stop(); #ifdef MAXTRACKS for (n = 0; n < MAXTRACKS; n++) *remap[n] = 0; // empty string, that is, unremapped #endif CDAudio_GetAudioDiskInfo(); return; } if (strcasecmp(command, "rescan") == 0) { CDAudio_Shutdown(); CDAudio_Startup(); return; } if (strcasecmp(command, "remap") == 0) { #ifdef MAXTRACKS ret = Cmd_Argc() - 2; if (ret <= 0) { for (n = 1; n < MAXTRACKS; n++) if (*remap[n]) Con_Printf(" %u -> %s\n", n, remap[n]); return; } for (n = 1; n <= ret; n++) strlcpy(remap[n], Cmd_Argv (n+1), sizeof(*remap)); #endif return; } if (strcasecmp(command, "close") == 0) { CDAudio_CloseDoor(); return; } if (strcasecmp(command, "play") == 0) { if (music_playlist_index.integer >= 0) return; CDAudio_Play_byName(Cmd_Argv (2), false, true, 0); return; } if (strcasecmp(command, "loop") == 0) { if (music_playlist_index.integer >= 0) return; CDAudio_Play_byName(Cmd_Argv (2), true, true, 0); return; } if (strcasecmp(command, "stop") == 0) { if (music_playlist_index.integer >= 0) return; CDAudio_Stop(); return; } if (strcasecmp(command, "pause") == 0) { if (music_playlist_index.integer >= 0) return; CDAudio_Pause(); return; } if (strcasecmp(command, "resume") == 0) { if (music_playlist_index.integer >= 0) return; CDAudio_Resume(); return; } if (strcasecmp(command, "eject") == 0) { if (faketrack == -1) CDAudio_Stop(); CDAudio_Eject(); cdValid = false; return; } if (strcasecmp(command, "info") == 0) { CDAudio_GetAudioDiskInfo (); if (cdValid) Con_Printf("%u tracks on CD.\n", maxTrack); else Con_Print ("No CD in player.\n"); if (cdPlaying) Con_Printf("Currently %s track %u\n", cdPlayLooping ? "looping" : "playing", cdPlayTrack); else if (wasPlaying) Con_Printf("Paused %s track %u\n", cdPlayLooping ? "looping" : "playing", cdPlayTrack); if (cdvolume >= 0) Con_Printf("Volume is %f\n", cdvolume); else Con_Printf("Can't get CD volume\n"); return; } Con_Printf("CD commands:\n"); Con_Printf("cd on - enables CD audio system\n"); Con_Printf("cd off - stops and disables CD audio system\n"); Con_Printf("cd reset - resets CD audio system (clears track remapping and re-reads disc information)\n"); Con_Printf("cd rescan - rescans disks in drives (to use another disc)\n"); Con_Printf("cd remap <remap1> [remap2] [remap3] [...] - chooses (possibly emulated) CD tracks to play when a map asks for a particular track, this has many uses\n"); Con_Printf("cd close - closes CD tray\n"); Con_Printf("cd eject - stops playing music and opens CD tray to allow you to change disc\n"); Con_Printf("cd play <tracknumber> - plays selected track in remapping table\n"); Con_Printf("cd loop <tracknumber> - plays and repeats selected track in remapping table\n"); Con_Printf("cd stop - stops playing current CD track\n"); Con_Printf("cd pause - pauses CD playback\n"); Con_Printf("cd resume - unpauses CD playback\n"); Con_Printf("cd info - prints basic disc information (number of tracks, currently playing track, volume level)\n"); }
static int CDAudio_GetAudioDiskInfo(void) { #if defined(__FreeBSD__) struct ioc_toc_header tochdr; #else struct cdrom_tochdr tochdr; #endif cdValid = false; #if defined(__FreeBSD__) if ( ioctl(cdfile, CDIOREADTOCHEADER, &tochdr) == -1 ) { Com_DPrintf("ioctl cdioreadtocheader failed\n"); #else if ( ioctl(cdfile, CDROMREADTOCHDR, &tochdr) == -1 ) { Com_DPrintf("ioctl cdromreadtochdr failed\n"); #endif return -1; } #if defined(__FreeBSD__) if (tochdr.starting_track < 1) #else if (tochdr.cdth_trk0 < 1) #endif { Com_DPrintf("CDAudio: no music tracks\n"); return -1; } cdValid = true; #if defined(__FreeBSD__) maxTrack = tochdr.ending_track; #else maxTrack = tochdr.cdth_trk1; #endif return 0; } void CDAudio_Play(int track, qboolean looping) { #if defined(__FreeBSD__) struct ioc_read_toc_entry entry; struct cd_toc_entry toc_buffer; struct ioc_play_track ti; #else struct cdrom_tocentry entry; struct cdrom_ti ti; #endif if (cdfile == -1 || !enabled) return; if (!cdValid) { CDAudio_GetAudioDiskInfo(); if (!cdValid) return; } track = remap[track]; if (track < 1 || track > maxTrack) { Com_DPrintf("CDAudio: Bad track number %u.\n", track); return; } #if defined(__FreeBSD__) #define CDROM_DATA_TRACK 4 bzero((char *)&toc_buffer, sizeof(toc_buffer)); entry.data_len = sizeof(toc_buffer); entry.data = &toc_buffer; // don't try to play a non-audio track entry.starting_track = track; entry.address_format = CD_MSF_FORMAT; if ( ioctl(cdfile, CDIOREADTOCENTRYS, &entry) == -1 ) { Com_DPrintf("ioctl cdromreadtocentry failed\n"); return; } if (toc_buffer.control == CDROM_DATA_TRACK) #else // don't try to play a non-audio track entry.cdte_track = track; entry.cdte_format = CDROM_LBA; if ( ioctl(cdfile, CDROMREADTOCENTRY, &entry) == -1 ) { Com_DPrintf("ioctl cdromreadtocentry failed\n"); return; } if (entry.cdte_ctrl == CDROM_DATA_TRACK) #endif { Com_Printf("CDAudio: track %i is not audio\n", track); return; } if (playing) { if (playTrack == track) return; CDAudio_Stop(); } #if defined(__FreeBSD__) ti.start_track = track; ti.end_track = track; ti.start_index = 1; ti.end_index = 99; #else ti.cdti_trk0 = track; ti.cdti_trk1 = track; ti.cdti_ind0 = 0; ti.cdti_ind1 = 0; #endif #if defined(__FreeBSD__) if ( ioctl(cdfile, CDIOCPLAYTRACKS, &ti) == -1 ) #else if ( ioctl(cdfile, CDROMPLAYTRKIND, &ti) == -1 ) #endif { Com_DPrintf("ioctl cdromplaytrkind failed\n"); return; } #if defined(__FreeBSD__) if ( ioctl(cdfile, CDIOCRESUME) == -1 ) #else if ( ioctl(cdfile, CDROMRESUME) == -1 ) #endif Com_DPrintf("ioctl cdromresume failed\n"); playLooping = looping; playTrack = track; playing = true; if (cd_volume->value == 0.0) CDAudio_Pause (); } void CDAudio_Stop(void) { if (cdfile == -1 || !enabled) return; if (!playing) return; #if defined(__FreeBSD__) if ( ioctl(cdfile, CDIOCSTOP) == -1 ) Com_DPrintf("ioctl cdiocstop failed (%d)\n", errno); #else if ( ioctl(cdfile, CDROMSTOP) == -1 ) Com_DPrintf("ioctl cdromstop failed (%d)\n", errno); #endif wasPlaying = false; playing = false; } void CDAudio_Pause(void) { if (cdfile == -1 || !enabled) return; if (!playing) return; #if defined(__FreeBSD__) if ( ioctl(cdfile, CDIOCPAUSE) == -1 ) Com_DPrintf("ioctl cdiocpause failed\n"); #else if ( ioctl(cdfile, CDROMPAUSE) == -1 ) Com_DPrintf("ioctl cdrompause failed\n"); #endif wasPlaying = playing; playing = false; } void CDAudio_Resume(void) { if (cdfile == -1 || !enabled) return; if (!cdValid) return; if (!wasPlaying) return; #if defined(__FreeBSD__) if ( ioctl(cdfile, CDIOCRESUME) == -1 ) Com_DPrintf("ioctl cdiocresume failed\n"); #else if ( ioctl(cdfile, CDROMRESUME) == -1 ) Com_DPrintf("ioctl cdromresume failed\n"); #endif playing = true; } static void CD_f (void) { char *command; int ret; int n; if (Cmd_Argc() < 2) return; command = Cmd_Argv (1); if (Q_stricmp(command, "on") == 0) { enabled = true; return; } if (Q_stricmp(command, "off") == 0) { if (playing) CDAudio_Stop(); enabled = false; return; } if (Q_stricmp(command, "reset") == 0) { enabled = true; if (playing) CDAudio_Stop(); for (n = 0; n < 100; n++) remap[n] = n; CDAudio_GetAudioDiskInfo(); return; } if (Q_stricmp(command, "remap") == 0) { ret = Cmd_Argc() - 2; if (ret <= 0) { for (n = 1; n < 100; n++) if (remap[n] != n) Com_Printf(" %u -> %u\n", n, remap[n]); return; } for (n = 1; n <= ret; n++) remap[n] = atoi(Cmd_Argv (n+1)); return; } if (Q_stricmp(command, "close") == 0) { CDAudio_CloseDoor(); return; } if (!cdValid) { CDAudio_GetAudioDiskInfo(); if (!cdValid) { Com_Printf("No CD in player.\n"); return; } } if (Q_stricmp(command, "play") == 0) { CDAudio_Play((byte)atoi(Cmd_Argv (2)), false); return; } if (Q_stricmp(command, "loop") == 0) { CDAudio_Play((byte)atoi(Cmd_Argv (2)), true); return; } if (Q_stricmp(command, "stop") == 0) { CDAudio_Stop(); return; } if (Q_stricmp(command, "pause") == 0) { CDAudio_Pause(); return; } if (Q_stricmp(command, "resume") == 0) { CDAudio_Resume(); return; } if (Q_stricmp(command, "eject") == 0) { if (playing) CDAudio_Stop(); CDAudio_Eject(); cdValid = false; return; } if (Q_stricmp(command, "info") == 0) { Com_Printf("%u tracks\n", maxTrack); if (playing) Com_Printf("Currently %s track %u\n", playLooping ? "looping" : "playing", playTrack); else if (wasPlaying) Com_Printf("Paused %s track %u\n", playLooping ? "looping" : "playing", playTrack); Com_Printf("Volume is %f\n", cdvolume); return; } }
void CDAudio_Update(void) { #if defined(__FreeBSD__) struct ioc_read_subchannel subchnl; struct cd_sub_channel_info data; #else struct cdrom_subchnl subchnl; #endif static time_t lastchk; if (cdfile == -1 || !enabled) return; if (cd_volume && cd_volume->value != cdvolume) { if (cdvolume) { Cvar_SetValue ("cd_volume", 0.0); cdvolume = cd_volume->value; CDAudio_Pause (); } else { Cvar_SetValue ("cd_volume", 1.0); cdvolume = cd_volume->value; CDAudio_Resume (); } } if (playing && lastchk < time(NULL)) { lastchk = time(NULL) + 2; //two seconds between chks #if defined(__FreeBSD__) subchnl.address_format = CD_MSF_FORMAT; subchnl.data_format = CD_CURRENT_POSITION; subchnl.data_len = sizeof(data); subchnl.track = playTrack; subchnl.data = &data; if (ioctl(cdfile, CDIOCREADSUBCHANNEL, &subchnl) == -1 ) { Com_DPrintf("ioctl cdiocreadsubchannel failed\n"); playing = false; return; } if (subchnl.data->header.audio_status != CD_AS_PLAY_IN_PROGRESS && subchnl.data->header.audio_status != CD_AS_PLAY_PAUSED) { playing = false; if (playLooping) CDAudio_Play(playTrack, true); } #else subchnl.cdsc_format = CDROM_MSF; if (ioctl(cdfile, CDROMSUBCHNL, &subchnl) == -1 ) { Com_DPrintf("ioctl cdromsubchnl failed\n"); playing = false; return; } if (subchnl.cdsc_audiostatus != CDROM_AUDIO_PLAY && subchnl.cdsc_audiostatus != CDROM_AUDIO_PAUSED) { playing = false; if (playLooping) CDAudio_Play(playTrack, true); } #endif } }