Mercurial > ~darius > hgwebdir.cgi > paradise_client
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 */