diff beeplite.c @ 1:ff5e05767bd3 ALPHA

Empty changelog
author darius
date Sat, 06 Dec 1997 05:41:28 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/beeplite.c	Sat Dec 06 05:41:28 1997 +0000
@@ -0,0 +1,227 @@
+/* $Id: beeplite.c,v 1.1.1.1 1997/12/06 05:41:28 darius Exp $ */
+
+#ifdef BEEPLITE
+/*
+ * beeplite.c
+ */
+#include "copyright.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <ctype.h>
+#ifndef SERVER
+#include "Wlib.h"
+#endif
+#include "defs.h"
+#include "struct.h"
+#include "data.h"
+
+void
+rcdlite(dist)
+    struct distress *dist;	/* the info */
+{
+    char    message[100];
+    int     len = 0;
+
+    if (!F_allow_beeplite)
+	return;
+
+    if ((dist == NULL) ||
+	(dist->sender == me->p_no) ||
+	(distlite[dist->distype] == NULL))
+	return;
+
+    len = makedistress(dist, message, distlite[dist->distype]);
+
+    if (len <= 0)
+	return;
+
+    makelite(dist, message);
+}
+
+void
+litedefaults()
+{
+    if (distlite[take] == NULL)
+	distlite[take] = "/c/l";
+    if (distlite[base_ogg] == NULL)
+	distlite[base_ogg] = "/g/m";
+    if (distlite[pickup] == NULL)
+	distlite[pickup] = "/p";
+    if (distlite[generic] == NULL)
+	distlite[generic] = "%?%S=SB%{/c%}";
+}
+
+void
+liteplanet(l, col)
+    struct planet *l;
+    W_Color col;
+{
+    if (!(F_beeplite_flags & LITE_PLANETS))
+	return;
+
+    emph_planet_seq_n[l->pl_no] = beep_lite_cycle_time_planet;
+    emph_planet_color[l->pl_no] = col;
+    l->pl_flags |= PLREDRAW;	/* Leave redraw on until done highlighting */
+#if 0
+    l->pl_flags |= PLCLEAR;	/* Leave redraw on until done highlighting */
+#endif
+}
+
+void
+liteplayer(j, col)
+    struct player *j;
+    W_Color col;
+{
+    if (!(F_beeplite_flags & (LITE_PLAYERS_MAP | LITE_PLAYERS_LOCAL)) &&
+	!((j == me) && (F_beeplite_flags & LITE_SELF)))
+	return;
+
+    if (!j || (j->p_flags & PFCLOAK))
+	return;
+
+    redrawPlayer[j->p_no] = 1;
+
+    emph_player_seq_n[j->p_no] = beep_lite_cycle_time_player;
+    emph_player_color[j->p_no] = col;
+}
+
+
+/* small permutation on makedistress.  Searches for the highliting
+** arguments, ignores everything else.
+*/
+
+makelite(dist, pm)
+    struct distress *dist;	/* the info */
+    char   *pm;			/* macro to parse, used for distress and
+				   macro */
+{
+    struct player *sender;
+    struct player *j;
+    struct planet *l;
+    char   *strcap();
+    char    c;
+    W_Color lcol;
+
+    sender = &players[dist->sender];
+
+    if (!(*pm)) {
+	return (0);
+    }
+    /* first step is to substitute variables */
+    while (*pm) {
+	if (*pm == '/') {
+	    pm++;
+
+	    if (!pm)
+		continue;
+
+	    if (F_beeplite_flags & LITE_COLOR) {
+		/* color lite -JR */
+		switch (toupper(*(pm + 1))) {
+		case 'G':
+		    lcol = W_Green;
+		    break;
+		case 'Y':
+		    lcol = W_Yellow;
+		    break;
+		case 'R':
+		    lcol = W_Red;
+		    break;
+		case 'C':
+		    lcol = W_Cyan;
+		    break;
+		case 'E':
+		    lcol = W_Grey;
+		    break;
+		case 'W':
+		default:
+		    lcol = W_White;
+		    break;
+		}
+	    } else
+		lcol = W_White;
+
+	    switch (c = *(pm++)) {
+
+	    case 'P':		/* push player id into buf */
+	    case 'G':		/* push friendly player id into buf */
+	    case 'H':		/* push enemy target player id into buf */
+
+	    case 'p':		/* push player id into buf */
+	    case 'g':		/* push friendly player id into buf */
+	    case 'h':		/* push enemy target player id into buf */
+
+		switch (c) {
+		case 'p':
+		    j = &players[dist->tclose_j];
+		    break;
+		case 'g':
+		    j = &players[dist->tclose_fr];
+		    break;
+		case 'h':
+		    j = &players[dist->tclose_en];
+		    break;
+		case 'P':
+		    j = &players[dist->close_j];
+		    break;
+		case 'G':
+		    j = &players[dist->close_fr];
+		    break;
+		default:
+		    j = &players[dist->close_en];
+		    break;
+		}
+		liteplayer(j, lcol);
+		break;
+
+	    case 'B':		/* highlites planet nearest sender */
+	    case 'b':
+		l = &planets[dist->close_pl];
+		liteplanet(l, lcol);
+		break;
+	    case 'L':		/* highlites planet nearest pointer */
+	    case 'l':
+		l = &planets[dist->tclose_pl];
+		liteplanet(l, lcol);
+		break;
+	    case 'U':		/* highlites enemy nearest pointer */
+	    case 'u':
+		j = &players[dist->tclose_en];
+		liteplayer(j, lcol);
+		break;
+	    case 'c':		/* highlites sender */
+	    case 'I':
+	    case 'i':
+		liteplayer(sender, lcol);
+		break;
+	    case 'M':		/* highlites me */
+	    case 'm':
+		liteplayer(me, lcol);
+		break;
+	    case '0':
+		if (F_beeplite_flags & LITE_SOUNDS)
+		    W_Beep();
+		break;
+	    default:
+/* try to continue
+** bad macro character is skipped entirely,
+** the message will be parsed without whatever argument has occurred. - jn
+*/
+		warning("Bad Macro character in distress!");
+		fprintf(stderr, "Unrecognizable special character in distress pass 1: %c\n", *(pm - 1));
+		break;
+	    }
+	} else {
+	    pm++;
+	}
+
+    }
+
+
+    return (1);
+}
+
+
+#endif				/* BEEPLITE */