starfighter/src/radio.c

104 lines
2.4 KiB
C

/*
Copyright (C) 2003 Parallel Realities
Copyright (C) 2011, 2012, 2013 Guus Sliepen
Copyright (C) 2015-2019 Julie Marchant <onpon4@riseup.net>
This program 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 <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <string.h>
#include "SDL.h"
#include "defs.h"
#include "structs.h"
#include "engine.h"
#include "gfx.h"
/*
Sets a radio message that appears at the top of the screen. Used for
script events, etc. We send a message priority too, since we don't want
Phoebe or Ursula's banter to interrupt an important message
*/
void radio_setMessage(int face, const char *in, int priority)
{
SDL_Surface *faceShape = NULL;
if ((gfx_textSprites[TS_RADIO].life > 0) && (priority == 0))
return;
gfx_createTextObject(TS_RADIO, in, -1, 50, FONT_WHITE);
gfx_textSprites[TS_RADIO].life = 240;
if (face > -1)
faceShape = gfx_faceSprites[face];
gfx_createMessageBox(faceShape, in, 1);
}
/*
Get a random message from those listed in `messages` (separated by '\n')
and assign it to `choice`. Used for things like taunts and brags.
*/
void radio_getRandomMessage(char *dest, const char *messages)
{
char *msgs;
char *patch;
int nMsg;
int choice;
int i;
msgs = malloc(sizeof(msgs) * strlen(messages));
nMsg = 0;
strcpy(msgs, messages);
patch = strtok(msgs, "\n");
while (patch != NULL)
{
if (strcmp(patch, "") != 0)
nMsg++;
patch = strtok(NULL, "\n");
}
// Now we know how many choices we have, let's make that choice...
choice = rand() % nMsg;
// And go through the search again...
i = 0;
strcpy(msgs, messages);
patch = strtok(msgs, "\n");
while ((i < choice) && (patch != NULL))
{
if (strcmp(patch, "") != 0)
i++;
patch = strtok(NULL, "\n");
}
if (patch != NULL)
{
strcpy(dest, patch);
}
else
{
engine_warn("Failed to grab a message! Is the list empty?");
strcpy(dest, "");
}
free(msgs);
}