view death.c @ 2:fba0b6e6cdc7

Added tag ALPHA for changeset ff5e05767bd3
author darius@midget.dons.net.au
date Tue, 23 Oct 2007 10:09:09 +0930
parents ff5e05767bd3
children
line wrap: on
line source

/* $Id: death.c,v 1.1.1.1 1997/12/06 05:41:28 darius Exp $ */

/*
 * death.c
 */
#include "copyright.h"

#include <stdio.h>
#include <signal.h>
#include <setjmp.h>
#include <sys/types.h>
#ifdef hpux
#include <time.h>
#else				/* hpux */
#include <sys/time.h>
#endif				/* hpux */
#include <string.h>
#include "Wlib.h"
#include "defs.h"
#include "struct.h"
#include "data.h"
#include "proto.h"
#include "gameconf.h"

extern jmp_buf env;

static char *teamstring[4] = { /* "", */ "and the Federation",
    "and the Romulan Empire",	/* "", */
    "and the Klingon Empire",	/* "", "", "", */
"and the Orions"};

void
redraw_death_messages()
{
    char    buf[256];
    int     len;

    switch (me->p_whydead) {
    case KNOREASON:
	strcpy(buf, "You were not killed");
	break;
    case KQUIT:
	strcpy(buf, "You have self-destructed.");
	break;
    case KTORP:
	sprintf(buf, "You were killed by a photon torpedo from %s (%c%c).",
		players[me->p_whodead].p_name,
		teaminfo[players[me->p_whodead].p_teami].letter,
		shipnos[me->p_whodead]);
	break;
    case KPLASMA:
	sprintf(buf, "You were killed by a plasma torpedo from %s (%c%c)",
		players[me->p_whodead].p_name,
		teaminfo[players[me->p_whodead].p_teami].letter,
		shipnos[me->p_whodead]);
	break;
    case KPHASER:
	sprintf(buf, "You were killed by a phaser shot from %s (%c%c)",
		players[me->p_whodead].p_name,
		teaminfo[players[me->p_whodead].p_teami].letter,
		shipnos[me->p_whodead]);
	break;
    case KPLANET:
	sprintf(buf, "You were killed by planetary fire from %s (%c)",
		planets[me->p_whodead].pl_name,
	     teaminfo[mask_to_idx(planets[me->p_whodead].pl_owner)].letter);
	break;
    case KSHIP:
	sprintf(buf, "You were killed by an exploding ship formerly owned by %s (%c%c)",
		players[me->p_whodead].p_name,
		teaminfo[players[me->p_whodead].p_teami].letter,
		shipnos[me->p_whodead]);
	break;
    case KDAEMON:
	strcpy(buf, "You were killed by a dying daemon.");
	break;
    case KWINNER:
	if (me->p_whodead >= 0)
	    sprintf(buf, "Galaxy has been conquered by %s (%c%c) %s",
		    players[me->p_whodead].p_name,
		    teaminfo[players[me->p_whodead].p_teami].letter,
		    shipnos[players[me->p_whodead].p_no],
		    teamstring[players[me->p_whodead].p_teami]);
	else
	    sprintf(buf, "Galaxy has been conquered by %s",
		    teamstring[-1 - me->p_whodead]);
	break;
    case KGHOST:
	sprintf(buf, "You were ghostbusted.");
	break;
    case KGENOCIDE:
	sprintf(buf, "Your team was genocided by %s (%c%c) %s.",
		players[me->p_whodead].p_name,
		teaminfo[players[me->p_whodead].p_teami].letter,
		shipnos[me->p_whodead],
		teamstring[players[me->p_whodead].p_teami]);
	break;
    case KPROVIDENCE:
	sprintf(buf, "You were removed from existence by divine mercy.");
	break;
    case KTOURNEND:
	strcpy(buf, "The tournament has ended.");
	break;
    case KOVER:
	strcpy(buf, "The game has gone into overtime!");
	break;
    case KTOURNSTART:
	strcpy(buf, "The tournament has begun.");
	break;
    case KBADBIN:
	sprintf(buf, "Your netrek executable didn't verify correctly.");
	W_WriteText(mapw, 50, 70, textColor, buf, strlen(buf), W_RegularFont);
	sprintf(buf, "(could be an old copy or illegal cyborg)");
	W_WriteText(mapw, 50, 110, W_Yellow, buf, strlen(buf), W_RegularFont);
	*buf = 0;
	break;
    case KMISSILE:
	sprintf(buf, "You were killed by a missile from %s (%c%c).",
		players[me->p_whodead].p_name,
		teaminfo[players[me->p_whodead].p_teami].letter,
		shipnos[me->p_whodead]);
	break;

    case KASTEROID:
	strcpy(buf, "You were smashed to bits by an asteroid.");
	W_WriteText(mapw, 50, 70, textColor, buf, strlen(buf), W_RegularFont );
	break;

    default:
	sprintf(buf, "You were killed by something unknown to this game (%d).",
		me->p_whydead);
	break;
    }
    len = strlen(buf);
    W_WriteText(mapw, 250 - len * W_Textwidth / 2, 11 * W_Textheight, W_Yellow, buf,
		len, W_RegularFont);
    /* First we check for promotions: */
    if (promoted) {
	if (!paradise) {
	    sprintf(buf, "Congratulations!  You have been promoted to %s",
		    ranks[mystats->st_rank].name);
	    W_WriteText(mapw, 150, 23 * W_Textheight, W_Yellow, buf, strlen(buf), W_BoldFont);
	} else {
	    sprintf(buf, "Congratulations!  You have been promoted to %s",
		    ranks2[mystats->st_rank].name);
	    W_WriteText(mapw, 150, 23 * W_Textheight, W_Yellow, buf, strlen(buf), W_BoldFont);
	}
	promoted = 0;
    }
}

void
death()
{
    W_Event event;

#ifdef AUTOKEY
    if (autoKey)
	autoKeyAllOff();
#endif				/* AUTOKEY */


    W_ClearWindow(mapw);
    W_ClearWindow(iconWin);
    if (oldalert != PFGREEN) {
	if (extraBorder)
	    W_ChangeBorder(w, gColor);
	W_ChangeBorder(baseWin, gColor);
	oldalert = PFGREEN;
	if(autoUnZoom>0)
	    blk_zoom = 0;
    }
    if (W_IsMapped(statwin)) {
	W_UnmapWindow(statwin);
	showStats = 1;
    } else {
	showStats = 0;
    }
    if (infomapped)
	destroyInfo();
    W_UnmapWindow(planetw);
    W_UnmapWindow(planetw2);
    W_UnmapWindow(rankw);
    W_UnmapWindow(war);
    if (optionWin)
	optiondone();

    redraw_death_messages();

    while (W_EventsPending()) {
	W_NextEvent(&event);
    }
    longjmp(env, 0);
}