static void AQBufferCallback(
    void *in,
    AudioQueueRef inQ,
    AudioQueueBufferRef outQB)
{
    AQCallbackStruct * inData;
    short *coreAudioBuffer;
    inData = (AQCallbackStruct *)in;
    coreAudioBuffer = (short*) outQB->mAudioData;

    if (inData->frameCount > 0) {
		AudioQueueSetParameter(inQ, kAudioQueueParam_Volume, __audioVolume);
		sound_callback(NULL, (byte*)coreAudioBuffer, inData->frameCount * 4);
        outQB->mAudioDataByteSize = 4*inData->frameCount;
        AudioQueueEnqueueBuffer(inQ, outQB, 0, NULL);
    }
}
void CBaseMonster::feel_sound_new(CObject* who, int eType, CSound_UserDataPtr user_data, const Fvector &Position, float power)
{
	if (!g_Alive())		return;

	// ignore my sounds
	if (this == who)	return;

	if (user_data)
		user_data->accept	(sound_user_data_visitor());

	// ignore unknown sounds
	if (eType == 0xffffffff) return;

	// ignore distant sounds
	Fvector center;
	Center	(center);
	float dist	= center.distance_to(Position);
	if (dist > db().m_max_hear_dist)	return;

	// ignore sounds if not from enemies and not help sounds
	CEntityAlive* entity = smart_cast<CEntityAlive*> (who);

	// ignore sound if enemy drop a weapon on death
	if (!entity && ((eType & SOUND_TYPE_ITEM_HIDING) == SOUND_TYPE_ITEM_HIDING)) return;

	if (entity && (!EnemyMan.is_enemy(entity))) {
		SoundMemory.check_help_sound(eType, entity->ai_location().level_vertex_id());
		return;
	}
	
	if ((eType & SOUND_TYPE_WEAPON_SHOOTING) == SOUND_TYPE_WEAPON_SHOOTING) power = 1.f;

	if (((eType & SOUND_TYPE_WEAPON_BULLET_HIT) == SOUND_TYPE_WEAPON_BULLET_HIT) && (dist < 2.f)) 
		HitMemory.add_hit(who,eSideFront);

	// execute callback
	sound_callback	(who,eType,Position,power);
	
	// register in sound memory
	if (power >= db().m_fSoundThreshold) {
		SoundMemory.HearSound(who,eType,Position,power,Device.dwTimeGlobal);
 	}
}
bool OSystem_PalmOS5::setSoundCallback(SoundProc proc, void *param) {
	Err e;
	Boolean success = false;

	if (!_sound.active) {
		if (gVars->fmQuality != FM_QUALITY_INI) {
			ConfMan.setBool("FM_medium_quality", (gVars->fmQuality == FM_QUALITY_MED));
			ConfMan.setBool("FM_high_quality", (gVars->fmQuality == FM_QUALITY_HI));
		}

#if defined (COMPILE_OS5)
		CALLBACK_INIT(_soundEx);
#endif
		_sound.proc = proc;
		_sound.param = param;
		_sound.active = true;	// always true when we call this function, false when sound is off

		_soundEx.handle = 0;
		_soundEx.size = 0;		// set by the callback
		_soundEx.set = false;
		_soundEx.dataP = NULL;	// set by the handler

		if (ConfMan.hasKey("output_rate"))
			_samplesPerSec = ConfMan.getInt("output_rate");
		else
			_samplesPerSec = SAMPLES_PER_SEC;

		// try to create sound stream
		if (OPTIONS_TST(kOptPalmSoundAPI)) {
			e = SndStreamCreateExtended(
						&_soundEx.handle,
						sndOutput,
						sndFormatPCM,
						_samplesPerSec,
#ifdef PALMOS_68K
						sndInt16Big,
#else
						sndInt16Little,
#endif
						sndStereo,
						sound_callback(),
						&_soundEx,
						8192
#ifdef PALMOS_68K
						,false
#elif defined (COMPILE_OS5)
						,true
#endif
						);

			e = e ? e : SndStreamStart(_soundEx.handle);
			e = e ? e :	SndStreamSetVolume(_soundEx.handle, 1024L * gVars->palmVolume / 100);
			success = (e == errNone);

		// no Sound API
		} else {
			_soundEx.size = 512;
			_soundEx.dataP = MemPtrNew(_soundEx.size);
		}
	}
	// if not true some scenes (indy3 256,...) may freeze (ESC to skip)
	return true;
}
Beispiel #4
0
//
// D_DoomMain
//
void D_DoomMain(void)
{
    int  p;
    char file[256];

    IdentifyVersion ();

    modifiedgame = false;

    nomonsters = M_CheckParm("-nomonsters");
    respawnparm = M_CheckParm("-respawn");
    fastparm = M_CheckParm("-fast");
    devparm = M_CheckParm("-devparm");
    if (M_CheckParm("-altdeath"))
    {
        deathmatch = 2;
    }
    else if (M_CheckParm ("-deathmatch"))
    {
        deathmatch = 1;
    }

    switch (gamemode)
    {
    case retail:
        sprintf (title,
//		 "                         "
                 "The Ultimate DOOM Startup v%i.%i",
//		 "                           ",
                 VERSION/100,VERSION%100);
        break;
    case shareware:
        sprintf (title,
//		 "                            "
                 "DOOM Shareware Startup v%i.%i",
//		 "                           ",
                 VERSION/100,VERSION%100);
        break;
    case registered:
        sprintf (title,
//		 "                            "
                 "DOOM Registered Startup v%i.%i",
//		 "                           ",
                 VERSION/100,VERSION%100);
        break;
    case commercial:
        sprintf (title,
//		 "                         "
                 "DOOM 2: Hell on Earth v%i.%i",
//		 "                           ",
                 VERSION/100,VERSION%100);
        break;
    /*FIXME
           case pack_plut:
    	sprintf (title,
    		 "                   "
    		 "DOOM 2: Plutonia Experiment v%i.%i"
    		 "                           ",
    		 VERSION/100,VERSION%100);
    	break;
          case pack_tnt:
    	sprintf (title,
    		 "                     "
    		 "DOOM 2: TNT - Evilution v%i.%i"
    		 "                           ",
    		 VERSION/100,VERSION%100);
    	break;
    */
    default:
        sprintf (title,
//		 "                     "
                 "Public DOOM - v%i.%i",
//		 "                           ",
                 VERSION/100,VERSION%100);
        break;
    }

    printf ("%s\n",title);

    // turbo option
    if ( (p=M_CheckParm ("-turbo")) )
    {
        int     scale = 200;
        extern int forwardmove[2];
        extern int sidemove[2];

        if (p<myargc-1)
            scale = atoi (myargv[p+1]);
        if (scale < 10)
            scale = 10;
        if (scale > 400)
            scale = 400;
//	printf ("turbo scale: %i%%\n",scale);
        forwardmove[0] = forwardmove[0]*scale/100;
        forwardmove[1] = forwardmove[1]*scale/100;
        sidemove[0] = sidemove[0]*scale/100;
        sidemove[1] = sidemove[1]*scale/100;
    }

    // add any files specified on the command line with -file wadfile
    // to the wad list
    //
    // convenience hack to allow -wart e m to add a wad file
    // prepend a tilde to the filename so wadfile will be reloadable
    p = M_CheckParm ("-wart");
    if (p)
    {
        myargv[p][4] = 'p';     // big hack, change to -warp

        // Map name handling.
        switch (gamemode )
        {
        case shareware:
        case retail:
        case registered:
            sprintf (file,"~"DEVMAPS"E%cM%c.wad",
                     myargv[p+1][0], myargv[p+2][0]);
            printf("Warping to Episode %s, Map %s.\n",
                   myargv[p+1],myargv[p+2]);
            break;

        case commercial:
        default:
            p = atoi (myargv[p+1]);
            if (p<10)
                sprintf (file,"~"DEVMAPS"cdata/map0%i.wad", p);
            else
                sprintf (file,"~"DEVMAPS"cdata/map%i.wad", p);
            break;
        }
        D_AddFile (file);
    }

    p = M_CheckParm ("-file");
    if (p)
    {
        // the parms after p are wadfile/lump names,
        // until end of parms or another - preceded parm
        modifiedgame = true;            // homebrew levels
        while (++p != myargc && myargv[p][0] != '-')
            D_AddFile (myargv[p]);
    }

    p = M_CheckParm ("-playdemo");

    if (!p)
        p = M_CheckParm ("-timedemo");

    if (p && p < myargc-1)
    {
        sprintf (file,"%s.lmp", myargv[p+1]);
        D_AddFile (file);
        printf("Playing demo %s.lmp.\n",myargv[p+1]);
    }

    // get skill / episode / map from parms
    startskill = sk_medium;
    startepisode = 1;
    startmap = 3;
    autostart = false;

    p = M_CheckParm ("-skill");
    if (p && p < myargc-1)
    {
        startskill = myargv[p+1][0]-'1';
        autostart = true;
    }

    p = M_CheckParm ("-episode");
    if (p && p < myargc-1)
    {
        startepisode = myargv[p+1][0]-'0';
        startmap = 1;
        autostart = true;
    }

    p = M_CheckParm ("-timer");
    if (p && p < myargc-1 && deathmatch)
    {
        int     time;
        time = atoi(myargv[p+1]);
        printf("Levels will end after %d minute",time);
        if (time>1)
            printf("s");
        printf(".\n");
    }

    p = M_CheckParm ("-avg");
    if (p && p < myargc-1 && deathmatch)
        printf("Austin Virtual Gaming: Levels will end after 20 minutes\n");

    p = M_CheckParm ("-warp");
    if (p && p < myargc-1)
    {
        if (gamemode == commercial)
            startmap = atoi (myargv[p+1]);
        else
        {
            startepisode = myargv[p+1][0]-'0';
            startmap = myargv[p+2][0]-'0';
        }
        autostart = true;
    }

    // init subsystems
    printf ("V_Init: allocate screens.\n");
    V_Init ();

    printf ("M_LoadDefaults: Load system defaults.\n");
    M_LoadDefaults ();              // load before initing other systems

    printf ("Z_Init: Init zone memory allocation daemon. \n");
    Z_Init ();

    printf ("W_Init: Init WADfiles.\n");
    W_InitMultipleFiles (wadfiles);

    // Check for -file in shareware
    /*    if (modifiedgame)
        {
    	// These are the lumps that will be checked in IWAD,
    	// if any one is not present, execution will be aborted.
    	char name[23][8]=
    	{
    	    "e2m1","e2m2","e2m3","e2m4","e2m5","e2m6","e2m7","e2m8","e2m9",
    	    "e3m1","e3m3","e3m3","e3m4","e3m5","e3m6","e3m7","e3m8","e3m9",
    	    "dphoof","bfgga0","heada1","cybra1","spida1d1"
    	};
    	int i;

    	if ( gamemode == shareware)
    	    I_Error("\nYou cannot -file with the shareware "
    		    "version. Register!");

    	// Check for fake IWAD with right name,
    	// but w/o all the lumps of the registered version.
    	if (gamemode == registered)
    	    for (i = 0;i < 23; i++)
    		if (W_CheckNumForName(name[i])<0)
    		    I_Error("\nThis is not the registered version.");
        }

        // Iff additonal PWAD files are used, print modified banner
        if (modifiedgame)
        {
    	printf (
    	    "===========================================================================\n"
    	    "ATTENTION:  This version of DOOM has been modified.  If you would like to\n"
    	    "get a copy of the original game, call 1-800-IDGAMES or see the readme file.\n"
    	    "        You will not receive technical support for modified games.\n"
    	    "                      press enter to continue\n"
    	    "===========================================================================\n"
    	    );
    	getchar ();
        }
    */

    // Check and print which version is executed.
    switch ( gamemode )
    {
    case shareware:
    case indetermined:
        printf ( "%s", shareware_banner
                 /*	    "===========================================================================\n"
                 	    "                                Shareware!\n",
                 	    "===========================================================================\n"*/
               );
        break;
    case registered:
    case retail:
    case commercial:
        printf ( "%s", commercial_banner
                 /*	    "===========================================================================\n"
                 	    "                 Commercial product - do not distribute!\n"
                 	    "         Please report software piracy to the SPA: 1-800-388-PIR8\n"
                 	    "===========================================================================\n"*/
               );
        break;

    default:
        // Ouch.
        break;
    }

    printf ("M_Init: Init miscellaneous info.\n");
    M_Init ();

    printf ("R_Init: Init DOOM refresh daemon - ");
    R_Init ();

    printf ("\nP_Init: Init Playloop state.\n");
    P_Init ();

    printf ("I_Init: Setting up machine state.\n");
    I_Init ();

    printf ("D_CheckNetGame: Checking network game status.\n");
    D_CheckNetGame ();

    printf ("S_Init: Setting up sound.\n");
    S_Init (snd_SfxVolume /* *8 */, snd_MusicVolume /* *8*/ );

    printf ("HU_Init: Setting up heads up display.\n");
    HU_Init ();

    printf ("ST_Init: Init status bar.\n");
    ST_Init ();

    /*    // check for a driver that wants intermission stats
        p = M_CheckParm ("-statcopy");
        if (p && p<myargc-1)
        {
    	// for statistics driver
    	extern  void*	statcopy;

    	statcopy = (void*)atoi(myargv[p+1]);
    	printf ("External statistics registered.\n");
        }*/

    /*    // start the apropriate game based on parms
        p = M_CheckParm ("-record");

        if (p && p < myargc-1)
        {
    	G_RecordDemo (myargv[p+1]);
    	autostart = true;
        }*/

    /*    p = M_CheckParm ("-playdemo");
        if (p && p < myargc-1)
        {
    	singledemo = true;              // quit after one demo
    	G_DeferedPlayDemo (myargv[p+1]);
    	D_DoomLoop ();  // never returns
        }*/

    /*    p = M_CheckParm ("-timedemo");
        if (p && p < myargc-1)
        {
    	G_TimeDemo (myargv[p+1]);
    	D_DoomLoop ();  // never returns
        }*/

    /*    p = M_CheckParm ("-loadgame");
        if (p && p < myargc-1)
        {
    	if (M_CheckParm("-cdrom"))
    	    sprintf(file, "c:\\doomdata\\"SAVEGAMENAME"%c.dsg",myargv[p+1][0]);
    	else
    	    sprintf(file, SAVEGAMENAME"%c.dsg",myargv[p+1][0]);
    	G_LoadGame (file);
        }*/

    if (!should_sound)
    {
        // install sound callback
        register_AI_handler(sound_callback);
        set_AI_interrupt(1);
        should_sound = 1;
        sound_callback();
        printf("D_DoomMain: AI interrupt handler installed.\n");
    }


    if (gameaction != ga_loadgame)
    {
        if (autostart || netgame)
        {
            G_InitNew(startskill, startepisode, startmap);
        }
        else
        {
            D_StartTitle(); // start up intro loop
        }
    }

    console_clear();
    console_close();

    D_DoomLoop();  // never returns
}