TREATIES has issues: * Treaties can cover attack, assault, paradrop, board, lboard, fire, build (s|p|l|n) and enlist, but not bomb, launch, torpedo and enlistment centers. * Usability is very poor. While a treaty is in effect, every player action that violates a treaty condition triggers a prompt like this: This action is in contravention of treaty #0 (with Curmudgeon) Do you wish to go ahead anyway? [yn] If you decline, the action is not executed. If you accept, it is. In both cases, your decision is reported in the news. You cannot get rid of these prompts until the treaty expires. * Virtually nobody uses them. * Virtually unused code is buggy code. There is at least one race condition: multifire() reads the firing sector, ship or land unit before the treaty prompt, and writes it back after, triggering a generation oops. Any updates made by other threads while trechk() waits for input are wiped out, triggering a seqno mismatch oops. * The treaty prompts could confuse smart clients that aren't prepared for them. WinACE isn't, but is reported to work anyway at least common usage. Ron Koenderink (the WinACE maintainer) suspects there could be a few situations where it will fail. This feature is not earning its keep. Remove it. Drop command treaty, consider treaty, offer treaty, xdump treaty, reject treaties. Output of accept changed, obviously. Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
170 lines
4.3 KiB
C
170 lines
4.3 KiB
C
/*
|
|
* Empire - A multi-player, client/server Internet based war game.
|
|
* Copyright (C) 1986-2014, Dave Pare, Jeff Bailey, Thomas Ruschak,
|
|
* Ken Stevens, Steve McClure, Markus Armbruster
|
|
*
|
|
* Empire 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/>.
|
|
*
|
|
* ---
|
|
*
|
|
* See files README, COPYING and CREDITS in the root of the source
|
|
* tree for related information and legal notices. It is expected
|
|
* that future projects/authors will amend these files as needed.
|
|
*
|
|
* ---
|
|
*
|
|
* news.h: Definitions for Empire News
|
|
*
|
|
* Known contributors to this file:
|
|
* Dave Pare
|
|
* Thomas Ruschak
|
|
* Steve McClure
|
|
*/
|
|
|
|
/*
|
|
* News codes for new options are not #ifdefed, since defining maxverb
|
|
* would be a pain, and it doesn't hurt to leave them in --ts
|
|
*/
|
|
|
|
#ifndef NEWS_H
|
|
#define NEWS_H
|
|
|
|
#include <time.h>
|
|
#include "nsc.h"
|
|
|
|
struct nwsstr {
|
|
natid nws_ano; /* "actor" country # */
|
|
unsigned char nws_vrb; /* action (verb) */
|
|
natid nws_vno; /* "victim" country # */
|
|
signed char nws_ntm; /* number of times */
|
|
short nws_duration; /* last time at nws_when + nws_duration */
|
|
time_t nws_when; /* time of action */
|
|
};
|
|
|
|
#define NUM_RPTS 2 /* number of story alternates */
|
|
|
|
struct rptstr {
|
|
signed char r_uid;
|
|
int r_good_will; /* how "nice" the action is */
|
|
int r_newspage; /* which page this item belongs on */
|
|
char *r_newstory[NUM_RPTS]; /* texts for fmt( */
|
|
};
|
|
|
|
/* news verbs */
|
|
#define N_WON_SECT 1
|
|
#define N_SCT_LOSE 2
|
|
#define N_SPY_SHOT 3
|
|
#define N_SENT_TEL 4
|
|
/* unused 5 */
|
|
#define N_MAKE_LOAN 6
|
|
#define N_REPAY_LOAN 7
|
|
#define N_MAKE_SALE 8
|
|
#define N_OVFLY_SECT 9
|
|
#define N_SCT_SHELL 10
|
|
#define N_SHP_SHELL 11
|
|
#define N_TOOK_UNOCC 12
|
|
#define N_TORP_SHIP 13
|
|
#define N_FIRE_BACK 14
|
|
#define N_BROKE_SANCT 15
|
|
#define N_SCT_BOMB 16
|
|
#define N_SHP_BOMB 17
|
|
#define N_BOARD_SHIP 18
|
|
#define N_SHP_LOSE 19
|
|
/* unused 20 */
|
|
#define N_SEIZE_SECT 21
|
|
/* unused 22 */
|
|
/* unused 23 */
|
|
/* unused 24 */
|
|
#define N_HIT_MINE 25
|
|
#define N_DECL_ALLY 26
|
|
/* unused 27 */
|
|
#define N_DECL_WAR 28
|
|
#define N_DIS_ALLY 29
|
|
#define N_DIS_WAR 30
|
|
#define N_OUT_PLAGUE 31
|
|
#define N_DIE_PLAGUE 32
|
|
#define N_NAME_CHNG 33
|
|
#define N_DIE_FAMINE 34
|
|
/* unused 35 */
|
|
#define N_DOWN_PLANE 36
|
|
#define N_NUKE 37
|
|
#define N_FREEDOM_FIGHT 38
|
|
#define N_SHOOT_CIV 39
|
|
#define N_LAUNCH 40
|
|
#define N_SAT_KILL 41
|
|
#define N_GIFT 42
|
|
#define N_AIDS 43
|
|
#define N_HURTS 44
|
|
#define N_TAKE 45
|
|
#define N_NUKE_STOP 46
|
|
#define N_SCT_MISS 47
|
|
#define N_SHP_MISS 48
|
|
#define N_TRADE 49
|
|
#define N_PIRATE_TRADE 50
|
|
#define N_PIRATE_KEEP 51
|
|
#define N_SHIP_TORP 52
|
|
#define N_SUB_BOMB 53
|
|
/* unused 54 */
|
|
#define N_UNIT_BOMB 55
|
|
#define N_LHIT_MINE 56
|
|
#define N_FIRE_F_ATTACK 57
|
|
#define N_FIRE_L_ATTACK 58
|
|
#define N_FIRE_S_ATTACK 59
|
|
#define N_SACK_CAP 60
|
|
#define N_UP_FRIENDLY 61
|
|
#define N_DOWN_FRIENDLY 62
|
|
#define N_UP_NEUTRAL 63
|
|
#define N_DOWN_NEUTRAL 64
|
|
#define N_UP_HOSTILE 65
|
|
#define N_DOWN_HOSTILE 66
|
|
#define N_SCT_SMISS 67
|
|
#define N_SHP_SMISS 68
|
|
#define N_START_COL 69
|
|
#define N_NUKE_SSTOP 70
|
|
#define N_LND_MISS 71
|
|
#define N_LND_SMISS 72
|
|
#define N_AWON_SECT 73
|
|
#define N_PWON_SECT 74
|
|
#define N_PARA_UNOCC 75
|
|
#define N_ALOSE_SCT 76
|
|
#define N_PLOSE_SCT 77
|
|
/* unused 78 */
|
|
/* unused 79 */
|
|
#define N_WELCH_DEAL 80
|
|
#define N_LND_LOSE 81
|
|
#define N_BOARD_LAND 82
|
|
#define N_MAX_VERB 82
|
|
|
|
#define N_NOTUSED 0
|
|
#define N_FOR 1
|
|
#define N_FRONT 2
|
|
#define N_SEA 3
|
|
#define N_SKY 4
|
|
#define N_MISS 5
|
|
#define N_ARTY 6
|
|
#define N_ECON 7
|
|
#define N_COLONY 8
|
|
#define N_HOME 9
|
|
#define N_SPY 10
|
|
#define N_TELE 11
|
|
#define N_MAX_PAGE 11
|
|
|
|
#define getnews(n, p) ef_read(EF_NEWS, (n), (p))
|
|
#define putnews(n, p) ef_write(EF_NEWS, (n), (p))
|
|
#define getnewsp(n) ((struct nwsstr *)ef_ptr(EF_NEWS, (n)))
|
|
|
|
extern struct rptstr rpt[N_MAX_VERB + 2];
|
|
extern struct symbol page_headings[N_MAX_PAGE + 2];
|
|
|
|
#endif
|