/*
* This file is part of Crossfire TRT, the Roguelike Realtime MORPG.
*
* Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team
* Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
* Copyright (©) 1992,2007 Frank Tore Johansen
*
* Crossfire TRT is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
* The authors can be reached via e-mail to
*/
/* Send bug reports to Raphael Quinet (quinet@montefiore.ulg.ac.be) */
/**
* \file
* Sound-related functions.
*
* \date 2003-12-02
*/
#include
#include
#include
/**
* Maximum distance a player may hear a sound from.
* This is only used for new client/server sound. If the sound source
* on the map is farther away than this, we don't sent it to the client.
*/
#define MAX_SOUND_DISTANCE 10
/**
* Plays a sound for specified player only
*/
void
play_sound_player_only (player *pl, short soundnum, sint8 x, sint8 y)
{
char soundtype;
if (!pl->ns->sound)
return;
/* Do some quick conversion to the sound type we want. */
if (soundnum >= SOUND_CAST_SPELL_0)
{
soundtype = SOUND_SPELL;
soundnum -= SOUND_CAST_SPELL_0;
}
else
soundtype = SOUND_NORMAL;
packet sl;
sl << "sound "
<< uint8 (x)
<< uint8 (y)
<< uint16 (soundnum)
<< uint8 (soundtype);
pl->ns->send_packet (sl);
}
/** Plays some sound on map at x,y. */
void
play_sound_map (maptile *map, int x, int y, short sound_num)
{
if (sound_num >= NROF_SOUNDS)
{
LOG (llevError, "Tried to play an invalid sound num: %d\n", sound_num);
return;
}
for_all_players (pl)
{
if (pl->ob->map == map)
{
int distance = idistance (pl->ob->x - x, pl->ob->y - y);
if (distance <= MAX_SOUND_DISTANCE)
play_sound_player_only (pl, sound_num, x - pl->ob->x, y - pl->ob->y);
}
}
}