2 * Empire - A multi-player, client/server Internet based war game.
3 * Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
4 * Ken Stevens, Steve McClure
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 * See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
23 * related information and legal notices. It is expected that any future
24 * projects/authors will amend these files as needed.
28 * empmod.c: List all commands for Empire
30 * Known contributors to this file:
33 * Thomas Ruschak, 1992
35 * Steve McClure, 1996-2000
58 extern int show_motd(void);
62 extern int echo(void);
77 extern int head(), news();
133 extern int explore();
149 extern int sail(); /* Forsman's hacks */
150 extern int foll(); /**/
151 extern int mobq(); /**/
156 extern int multifire();
172 extern int landmine();
176 extern int mission();
185 extern int setsector();
191 * Undeclared functions
193 extern int quit(void);
198 extern int execute(void);
199 extern int explain(void);
201 extern int flash(void);
225 extern int mobupdate();
228 extern int improve();
233 struct cmndstr player_coms[] = {
234 /* command form cost addr permit */
235 { "accept [as-COUNTRY]", 0, acce, C_MOD, NORM },
236 { "add <NAT> <NAME> <REP> <STATUS> <c|w|i>",0, add, C_MOD, GOD },
237 { "announce {message}", 0, tele, C_MOD, VIS },
238 { "anti <SECT>", 3, anti, C_MOD, NORM+MONEY+CAP },
239 { "apropos <topic>", 0, apro, 0, VIS },
240 { "arm <PLANE> <NUKETYPE> <airburst?>", 3, arm, C_MOD, NORM+MONEY+CAP },
241 { "army <ARMY> <UNITS>", 0, army, C_MOD, NORM },
242 { "assault <to-SECT> <from-SHIP> [<forts?> <ships?> <arty?> <planes?>]",3,assa,C_MOD, NORM+MONEY+CAP },
243 { "attack <SECT> [<forts?> <ships?> <arty?> <planes?>]",3,atta,C_MOD, NORM+MONEY+CAP },
244 { "bdes <SECTS> <type>", 0, bdes, C_MOD, NORM },
245 { "bestpath <SECTS> <SECTS>", 0, best, 0, NORM },
246 { "bestdistpath <SECTS> <SECTS>", 0, best, 0, NORM },
247 { "bmap <SECTS|UNIT> [s|l|p|r|t*]", 0, map, C_MOD, NORM },
248 { "board <to-SHIP> [<from-SHIP>|<from-sector>]", 3, boar, C_MOD, NORM+MONEY+CAP },
249 { "bomb <bomber-PLANES> <fighter-PLANES> <pin|strat> <ap-SECT> <PATH|DESTINATION>",2,bomb,C_MOD, NORM+MONEY+CAP },
250 { "break {sanctuary}", 1, brea, C_MOD, SANCT },
251 { "budget [<sector type|P|S|L|A|M|N|C> <PRIORITY|~>]",1,budg,0, NORM },
252 { "build <s|l|b|p|n|t> <SECTS> <type|dir> [<number> <tech> <sure?>]",1, buil, C_MOD, NORM+MONEY+CAP },
253 { "buy <COMM> <LOT#> <BID/UNIT> <DEST>", 1, buy, C_MOD, CAP+NORM+MONEY },
254 { "bye {log-off}", 0, quit, 0, VIS },
255 { "capital <SECT>", 0, capi, C_MOD, NORM },
256 { "cargo <SHIPS>", 0, carg, 0, NORM },
257 #ifdef CEDE_IS_ALLOWED
258 { "cede <SECTS|SHIPS> <COUNTRY> [se|sh]", 639, cede, C_MOD, NORM },
259 #endif /* CEDE_IS_ALLOWED */
260 { "census <SECTS>", 0, cens, 0, VIS },
261 { "change <country|representative> <NAME>",0, chan, C_MOD, VIS },
262 { "coastwatch <SECTS>", 1, coas, C_MOD, NORM+CAP },
263 { "collect <LOAN> <SECT>", 2, coll, C_MOD, NORM+MONEY+CAP },
264 { "commodity <SECTS>", 0, comm, 0, VIS },
265 { "consider <loan|treaty> <LOAN/TREATY> <acc|decl|post>",1,cons,C_MOD, NORM+CAP },
266 { "convert <SECTS> <NUM> [sure?]", 2, conv, C_MOD, NORM+MONEY+CAP },
267 { "country <NATS>", 0, coun, 0, NORM },
268 { "cutoff <SECTS>", 0, cuto, C_MOD, NORM },
269 { "declare <all|friend|neut|hos|war> <NATS>", 2, decl, C_MOD, NORM+CAP },
270 { "deliver <COMM> <SECTS> [q|<THRESH>] [<DIR>]",1, deli, C_MOD, NORM },
271 { "demobilize <SECTS> <NUM> <active-reserve?> [sure?]",1, demo, C_MOD, NORM+CAP },
272 { "designate <SECTS> <type> [sure?]", 1, desi, C_MOD, NORM },
273 { "disable", 0, disa, C_MOD, GOD },
274 { "disarm <PLANE>", 2, arm, C_MOD, NORM+MONEY+CAP },
275 { "dissolve <really dissove?>", 0, diss, C_MOD, GOD },
276 { "distribute <SECTS> <DISTSECT|.|h>", 1, dist, C_MOD, NORM },
277 { "drop <cargo-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION> <COMM>",1,drop,C_MOD, NORM+MONEY+CAP },
278 { "dump <SECTS> [<fields>]", 0, dump, 0, NORM },
279 { "echo [<string>]", 0, echo, 0, NORM },
280 { "edit <country|land|unit|ship|plane|nuke>", 0, edit, C_MOD, GOD },
281 { "enable", 0, enab, C_MOD, GOD },
282 { "enlist <SECTS> <NUM>", 2, enli, C_MOD, NORM+MONEY+CAP },
283 { "execute <INPUT FILE>", 0, execute,0, VIS },
284 { "explore <c|m> <SECT> <NUM> <PATH|DESTINATION>",1,explore, C_MOD, NORM+MONEY+CAP },
285 { "financial", 0, fina, 0, NORM },
286 { "fire <land, ship or sect> <from-SECTS | SHIPS | UNITS> [TO-SECT | SHIP]",1,multifire,C_MOD, NORM+MONEY+CAP },
287 { "flash <COUNTRY> [<message>]", 0, flash, 0, VIS },
288 { "fleetadd <FLEET> <SHIPS>", 0, flee, C_MOD, NORM },
289 { "fly <cargo-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION> <COM>",2,fly,C_MOD, NORM+MONEY+CAP },
290 { "follow <leader> <SHIPS>", 1, foll, C_MOD, NORM+CAP },
291 { "force <delay time>", 0, force, C_MOD, GOD },
292 { "fortify <UNITS> <MOB>", 1, fort, C_MOD, NORM },
293 { "fuel <s|l> <SHIP/FLEET | UNIT/ARMY> <AMOUNT> [<OILER>]", 1, fuel, C_MOD, NORM },
294 { "give <COMM> <SECT> <NUM>", 0, give, C_MOD, GOD },
295 { "grind <SECT> <NUM>", 1, grin, C_MOD, NORM+MONEY+CAP },
296 { "harden <PLANES> <NUM>", 2, hard, C_MOD, NORM+MONEY+CAP },
297 { "help <topic>", 0, info, 0, VIS },
298 { "headlines [days]", 0, head, C_MOD, VIS },
299 { "hidden <SECTS>", 0, hidd, 0, GOD },
300 { "improve <road|rail|defense> <SECTS> <NUM>",1, improve,C_MOD, NORM+MONEY+CAP },
301 { "info <topic>", 0, info, 0, VIS },
302 { "land <UNITS>", 0, land, C_MOD, NORM },
303 { "launch <PLANES>", 3, laun, C_MOD, NORM+MONEY+CAP },
304 { "lboard <to-LAND> [<from-sector>]", 3, lboa, C_MOD, NORM+MONEY+CAP },
305 { "lcargo <UNITS>", 0, lcarg, 0, NORM },
306 { "ledger <LOANS>", 0, ledg, 0, NORM },
307 { "level <SECTS>", 0, leve, 0, NORM },
308 { "list of commands", 0, explain,0, VIS },
309 { "lbmap <SECTS|UNIT> [s|l|p|*]", 0, map, C_MOD, NORM },
310 { "ldump <UNITS> [<fields>]", 0, ldump, 0, NORM },
311 { "lload <COMM|\"land\"|\"plane\"> <UNITS> <NUM|UNITS|PLANES>",1, lload, C_MOD, NORM+CAP },
312 { "llookout <UNITS>", 1, llook, 0, NORM+CAP },
313 { "lmap <SECTS|UNIT> [s|l|p|*]", 0, map, C_MOD, NORM },
314 { "lmine <UNITS>", 2, landmine,C_MOD, NORM+MONEY+CAP },
315 { "load <COMM|\"land\"|\"plane\"> <SHIPS> <NUM|UNITS|PLANES>",1,load,C_MOD, NORM+CAP },
316 { "lookout <SHIPS>", 1, look, 0, NORM+CAP },
317 { "lost", 0, lost, 0, NORM },
318 { "lradar <UNITS | SECTS>", 1, rada, 0, NORM+CAP },
319 { "lrange <UNITS> <range>", 1, lrange, C_MOD, NORM+CAP },
320 { "lretreat <UNITS|ARMY> <PATH> [i|h|b|c]", 1, lretr, C_MOD, NORM+CAP },
321 { "lstats <UNITS>", 0, lstats, C_MOD, NORM },
322 { "ltend <COMM> <tender-SHIPS> <NUM> <UNITS>",1, ltend, C_MOD, NORM+CAP },
323 { "lunload <COMM|\"land\"|\"plane\"> <UNITS> <NUM|UNITS|PLANES>",1,lload, C_MOD, NORM+CAP },
324 { "market [COMM]", 0, mark, 0, VIS },
325 { "map <SECTS|SHIP>", 0, map, C_MOD, VIS },
326 { "march <UNITS> <PATH|DESTINATION>", 1, march, C_MOD, NORM+CAP },
327 { "mine <SHIPS>", 2, mine, C_MOD, NORM+MONEY+CAP },
328 { "mission <type> <PLANES|SHIPS|UNITS> <mission type> <op sect> [<radius>]", 2,mission,C_MOD, NORM+CAP },
329 { "mobupdate <MINUTES|check>", 0, mobupdate, C_MOD, GOD },
330 { "morale <UNITS> <retreat%>", 1, morale, C_MOD, NORM+CAP },
331 { "motd", 0, show_motd, C_MOD, VIS },
332 { "move <c|m|s|g|p|i|o|b|f|r|u> <SECT> <NUM> <PATH|DESTINATION>",1,move,C_MOD, NORM+CAP },
333 { "mquota <SHIPS> <value>", 2, mobq, C_MOD, NORM+CAP },
334 { "mult [COUNTRY]", 1, mult, C_MOD, GOD },
335 { "name <SHIPS> <NAME>", 0, name, C_MOD, NORM },
336 { "nation", 0, nati, 0, VIS },
337 { "navigate <SHIPS> <PATH|DESTINATION>", 1, navi, C_MOD, NORM+CAP },
338 { "ndump <SECTS>", 0, ndump, 0, NORM },
339 { "newcap <NAT> [<SECTOR>]", 0, new, C_MOD, GOD },
340 { "neweff <SECTS>", 0, newe, C_MOD, NORM },
341 { "newspaper [days]", 0, news, 0, VIS },
342 { "nmap <SECTS|SHIP>", 0, map, C_MOD, VIS },
343 { "nuke <SECTS>", 0, nuke, 0, NORM },
344 { "offer <loan|treaty> <NAT> [<NUM> <DAYS> <IRATE>]",1,offe,C_MOD, NORM+MONEY+CAP },
345 { "offset <SECT|NAT>", 0, offs, C_MOD, GOD },
346 { "order <SHIPS> <c|s|r|d|l> ", 1, orde, C_MOD, NORM+CAP },
347 { "origin <SECT>", 1, orig, C_MOD, NORM },
348 { "paradrop <cargo-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION>",3,para,C_MOD, NORM+MONEY+CAP },
349 { "path <SECT>", 0, path, 0, NORM },
350 { "payoff <SHIPS>", 0, payo, C_MOD, NORM },
351 { "pbmap <SECTS|UNIT> [s|l|p|*]", 0, map, C_MOD, NORM },
352 { "pboard <PLANES>", 3, pboa, C_MOD, NORM+MONEY+CAP },
353 { "pdump <PLANES> [<fields>]", 0, pdump, 0, NORM },
354 { "plane <SECTS>", 0, plan, 0, NORM },
355 { "players", 0, play, 0, VIS },
356 { "pmap <SECTS|UNIT> [s|l|p|*]", 0, map, C_MOD, NORM },
357 { "power [[\"new\" [<NUMBER OF COUNTRIES>]] | [\"country\" <COUNTRY NUMBER>]]", 0, powe, C_MOD, VIS },
358 { "pray", 0, tele, C_MOD, NORM },
359 { "production <SECTS>", 0, prod, 0, NORM },
360 { "pstat <PLANES>", 0, pstat, 0, NORM },
361 { "qorder <SHIPS>", 0, qorde, C_MOD, NORM+CAP },
362 { "quit", 0, quit, 0, VIS },
363 { "radar <SHIPS | SECTS>", 1, rada, 0, NORM+CAP },
364 { "range <PLANES> <range>", 1, range, C_MOD, NORM+CAP },
365 { "read", 0, rea, C_MOD, VIS },
366 { "realm <number> [<SECTS>]", 0, real, C_MOD, NORM },
367 { "recon <spy-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION>",3,reco,C_MOD, NORM+MONEY+CAP },
368 { "retreat <SHIPS|FLEET> <PATH> [i|t|s|h|b|d|u|c]", 1,retr, C_MOD, NORM+CAP },
369 { "relations [as-COUNTRY]", 0, rela, 0, VIS },
370 { "reject <reject|accept> <announcements|mail|treaties|loans> <NAT>",2,reje,C_MOD, NORM },
371 { "repay <LOAN> <NUM>", 1, repa, C_MOD, NORM+MONEY+CAP },
372 { "report <NATS>", 0, repo, 0, VIS },
373 { "reset <lot #> <0|price>", 1, rese, C_MOD, NORM+CAP },
374 { "resource <SECTS>", 0, reso, 0, NORM },
375 { "route <COMM> <SECTS>", 1, rout, 0, NORM },
376 { "sabotage <UNITS>", 1, sabo, C_MOD, NORM+MONEY+CAP },
377 { "sail <SHIPS> <PATH>", 1, sail, C_MOD, NORM+CAP },
378 { "satellite <PLANE> [<se|sh|l> [?cond&cond&...]]",1, sate, 0, NORM+MONEY+CAP },
379 { "sbmap <SECTS|UNIT> [s|l|p|*]", 0, map, C_MOD, NORM },
380 { "scrap <s|p|l> <SHIPS|PLANES|UNITS>", 2, scra, C_MOD, NORM+MONEY+CAP },
381 { "scuttle <s|p|l> <SHIPS|PLANES|UNITS>", 5, scut, C_MOD, NORM+CAP },
382 { "sdump <SHIPS> [<fields>]", 0, sdump, 0, NORM },
383 { "sect <SECTS>", 0, sct, 0, NORM },
384 { "sell <COMM> <SECTS> <NUM> <NUM>", 1, sell, C_MOD, NORM+CAP },
385 { "set <TYPE> <LIST> <PRICE>", 1, set, C_MOD, NORM+CAP },
386 { "setsector <TYPE> <SECTS> <NUM>", 0, setsector,C_MOD, GOD },
387 { "setresource <TYPE> <SECTS> <NUM>", 0, setres, C_MOD, GOD },
388 { "shark <LOAN>", 25, shark, C_MOD, NORM+MONEY+CAP },
389 { "sharebmap <CNUM/CNAME> <SECTS> [<des>]", 0, shar, C_MOD, NORM },
390 { "ship <SHIPS>", 0, shi, 0, NORM },
391 { "shoot <c|u> <SECTS> <NUMBER>", 3, shoo, C_MOD, NORM+MONEY+CAP },
392 { "show <TYPE> <\"build\"|\"stats\"|\"cap\"> [<tech>]", 0,show, 0, VIS },
393 { "shutdown [<minutes>] <disable update?>", 0, shut, 0, GOD },
394 { "sinfrastructure <SECTS>", 0, sinfra, 0, VIS },
395 { "skywatch <SECTS>", 1, skyw, C_MOD, NORM+CAP },
396 { "smap <SECTS|UNIT> [s|l|p|*]", 0, map, C_MOD, NORM },
397 { "sonar <SHIPS> <brief?>", 1, sona, C_MOD, NORM+CAP },
398 { "sorder <SHIPS>", 0, sorde, C_MOD, NORM+CAP },
399 { "spy <SECTS>", 1, spy, C_MOD, NORM+CAP },
400 { "sstat <SHIPS>", 0, sstat, 0, NORM },
401 { "start <SECTS>", 1, start, C_MOD, NORM+CAP },
402 { "starvation [<SECTS>|l <UNITS>|s <SHIPS>]", 0, starve, 0, NORM },
403 { "stop <SECTS>", 1, stop, C_MOD, NORM+CAP },
404 { "strength <SECTS>", 1, stre, C_MOD, NORM },
405 { "supply <LAND UNITS>", 1, supp, C_MOD, NORM+CAP },
406 { "survey <COMM|VAR> <SECTS>", 0, surv, 0, NORM+CAP },
407 { "swapsector <SECT> <SECT>", 0, swaps, C_MOD, GOD },
408 { "sweep <sweep-PLANES> <fighter-PLANES> <ap-SECT> <PATH|DESTINATION>",3,reco,C_MOD, NORM+MONEY+CAP },
409 { "telegram <NAT>", 0, tele, C_MOD, NORM },
410 { "tend <COMM|\"land\"> <tender-SHIPS> <NUM|UNIT> <dest-SHIPS>",1,tend, C_MOD, NORM+CAP },
411 { "territory <SECTS> <NUMBER> [<FIELD>]", 0, terr, C_MOD, NORM },
412 { "test <c|m|s|g|p|i|o|b|f|r|u> <SECT> <NUM> <PATH|DESTINATION>",1,move,0, NORM+CAP },
413 { "threshold <COMM> <SECTS> <THRESH>", 1, thre, C_MOD, NORM },
414 { "toggle [inform|flash|beep|coastwatch|sonar|techlists] [on|off]", 0, togg, C_MOD, VIS },
415 { "torpedo <submarine-SHIPS> <target-SHIP>",3, torp, C_MOD, NORM+MONEY+CAP },
416 { "trade", 1, trad, C_MOD, NORM+CAP+MONEY },
417 { "transport <\"nuke\"|\"plane\"> <SECT|PLANES> [<NUKETYPE> <number>] <PATH|DESTINATION>",1,tran,C_MOD, NORM+CAP },
418 { "treaty <TREATIES>", 0, trea, 0, NORM+MONEY+CAP },
419 { "turn <\"on\"|\"off\"|\"mess\">", 0, turn, C_MOD, GOD },
420 { "unload <COMM|\"land\"|\"plane\"> <SHIPS> <NUM|UNIT|PLANE>",1,load,C_MOD, NORM+CAP },
421 { "unsail <SHIPS>", 1, sail, C_MOD, NORM+CAP },
422 { "update", 0, upda, 0, VIS },
423 { "upgrade <SHIPS|LAND UNITS|PLANES>", 1, upgr, C_MOD, NORM+MONEY+CAP },
424 { "version", 0, vers, 0, VIS },
425 { "wait", 0, wai, C_MOD, GOD },
426 { "wall [<message>]", 0, wall, C_MOD, NORM },
427 { "wingadd <WING> <PLANES>", 1, wing, C_MOD, NORM },
428 { "wipe <SECTS>", 1, wipe, C_MOD, NORM },
429 { "wire [yes|no|<days>]", 0, rea, C_MOD, VIS },
430 { "work <LAND UNITS> <AMOUNT>", 1, work, C_MOD, NORM+MONEY+CAP },
431 { "zdone <y|n|c>", 0, zdon, C_MOD, NORM },