1*da121b33Sdholland /* $NetBSD: lose.c,v 1.10 2009/08/12 08:54:54 dholland Exp $ */
2887dd216Scgd
361f28255Scgd /*
4887dd216Scgd * Copyright (c) 1980, 1993
5887dd216Scgd * The Regents of the University of California. All rights reserved.
661f28255Scgd *
761f28255Scgd * Redistribution and use in source and binary forms, with or without
861f28255Scgd * modification, are permitted provided that the following conditions
961f28255Scgd * are met:
1061f28255Scgd * 1. Redistributions of source code must retain the above copyright
1161f28255Scgd * notice, this list of conditions and the following disclaimer.
1261f28255Scgd * 2. Redistributions in binary form must reproduce the above copyright
1361f28255Scgd * notice, this list of conditions and the following disclaimer in the
1461f28255Scgd * documentation and/or other materials provided with the distribution.
15e5aeb4eaSagc * 3. Neither the name of the University nor the names of its contributors
1661f28255Scgd * may be used to endorse or promote products derived from this software
1761f28255Scgd * without specific prior written permission.
1861f28255Scgd *
1961f28255Scgd * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2061f28255Scgd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2161f28255Scgd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2261f28255Scgd * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2361f28255Scgd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2461f28255Scgd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2561f28255Scgd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2661f28255Scgd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2761f28255Scgd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2861f28255Scgd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2961f28255Scgd * SUCH DAMAGE.
3061f28255Scgd */
3161f28255Scgd
32ef383c95Schristos #include <sys/cdefs.h>
3361f28255Scgd #ifndef lint
34887dd216Scgd #if 0
35887dd216Scgd static char sccsid[] = "@(#)lose.c 8.1 (Berkeley) 5/31/93";
36887dd216Scgd #else
37*da121b33Sdholland __RCSID("$NetBSD: lose.c,v 1.10 2009/08/12 08:54:54 dholland Exp $");
38887dd216Scgd #endif
3961f28255Scgd #endif /* not lint */
4061f28255Scgd
41ef383c95Schristos #include <stdio.h>
4261f28255Scgd #include <setjmp.h>
43ef383c95Schristos #include <unistd.h>
44ef383c95Schristos #include "trek.h"
45ef383c95Schristos #include "getpar.h"
4661f28255Scgd
4761f28255Scgd /*
4861f28255Scgd ** PRINT OUT LOSER MESSAGES
4961f28255Scgd **
5061f28255Scgd ** The messages are printed out, the score is computed and
5161f28255Scgd ** printed, and the game is restarted. Oh yeh, any special
5261f28255Scgd ** actions which need be taken are taken.
5361f28255Scgd */
5461f28255Scgd
55b67c82fdSchristos extern jmp_buf env;
56b67c82fdSchristos
57*da121b33Sdholland static const char *const Losemsg[] = {
5861f28255Scgd "You ran out of time",
5961f28255Scgd "You ran out of energy",
6061f28255Scgd "You have been destroyed",
6161f28255Scgd "You ran into the negative energy barrier",
6261f28255Scgd "You destroyed yourself by nova'ing that star",
6361f28255Scgd "You have been caught in a supernova",
6461f28255Scgd "You just suffocated in outer space",
6561f28255Scgd "You could not be rematerialized",
6661f28255Scgd "\n\032\014 ***\07 Ship's hull has imploded\07 ***",
6761f28255Scgd "You have burned up in a star",
6861f28255Scgd "Well, you destroyed yourself, but it didn't do any good",
6961f28255Scgd "You have been captured by Klingons and mercilessly tortured",
7061f28255Scgd "Your last crew member died",
7161f28255Scgd };
7261f28255Scgd
73ef383c95Schristos void
lose(int why)74bf0917b6Sdholland lose(int why)
7561f28255Scgd {
7661f28255Scgd Game.killed = 1;
7761f28255Scgd sleep(1);
7861f28255Scgd printf("\n%s\n", Losemsg[why - 1]);
7950b862e2Sdholland switch (why) {
8061f28255Scgd case L_NOTIME:
8161f28255Scgd Game.killed = 0;
8261f28255Scgd break;
8361f28255Scgd }
8461f28255Scgd Move.endgame = -1;
8561f28255Scgd score();
8661f28255Scgd skiptonl(0);
8761f28255Scgd longjmp(env, 1);
8861f28255Scgd }
89