]> git.pond.sub.org Git - empserver/blob - src/lib/commands/show.c
deity.h is redundant, remove it.
[empserver] / src / lib / commands / show.c
1 /*
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
5  *
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.
10  *
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.
15  *
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
19  *
20  *  ---
21  *
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.
25  *
26  *  ---
27  *
28  *  show.c: Give info on empire objects, planes, boats, nukes, etc.
29  * 
30  *  Known contributors to this file:
31  *     Julian Onions, 1988
32  *     Steve McClure, 1997
33  */
34
35 #include "misc.h"
36 #include "player.h"
37 #include "nat.h"
38 #include "file.h"
39 #include "optlist.h"
40 #include "subs.h"
41 #include "commands.h"
42
43 int
44 show(void)
45 {
46     s_char *p;
47     void (*cfunc) (int);
48     void (*sfunc) (int);
49     void (*bfunc) (int);
50     struct natstr *natp;
51     int tlev;
52     s_char buf[1024];
53     int rlev;
54
55     if (!(p = getstarg(player->argp[1],
56                        "Describe what (plane, nuke, bridge, ship, sect, land unit, tower)? ",
57                        buf))
58         || !*p)
59         return RET_SYN;
60
61     natp = getnatp(player->cnum);
62     rlev = (int)(1.25 * natp->nat_level[NAT_RLEV]);
63
64     if (!player->argp[3]) {
65         tlev = (int)(1.25 * natp->nat_level[NAT_TLEV]);
66         if (player->god)
67             tlev = 1000;
68     } else {
69         tlev = (int)atoi(player->argp[3]);
70         if (tlev > (int)(1.25 * natp->nat_level[NAT_TLEV]) && !player->god)
71             tlev = (int)(1.25 * natp->nat_level[NAT_TLEV]);
72     }
73     if (player->god)
74         rlev = 1000;
75     pr("Printing for tech level '%d'\n", tlev);
76     switch (*p) {
77     case 'b':
78         show_bridge(99999);
79         return RET_OK;
80     case 't':
81         show_tower(99999);
82         return RET_OK;
83     case 'n':
84         if (opt_DRNUKE)
85             tlev = ((rlev / drnuke_const) > tlev ? tlev :
86                     (rlev / drnuke_const));
87         bfunc = show_nuke_build;
88         cfunc = show_nuke_capab;
89         sfunc = show_nuke_stats;
90         break;
91     case 'l':
92         bfunc = show_land_build;
93         sfunc = show_land_stats;
94         cfunc = show_land_capab;
95         break;
96     case 'p':
97         bfunc = show_plane_build;
98         sfunc = show_plane_stats;
99         cfunc = show_plane_capab;
100         break;
101     case 's':
102         if (*(p + 1) == 'e') {
103             bfunc = show_sect_build;
104             sfunc = show_sect_stats;
105             cfunc = show_sect_capab;
106         } else {
107             bfunc = show_ship_build;
108             sfunc = show_ship_stats;
109             cfunc = show_ship_capab;
110         }
111         break;
112     default:
113         return RET_SYN;
114     }
115     if (!(p = getstarg(player->argp[2],
116                        "Build, stats, or capability data (b,s,c)? ", buf))
117         || !*p)
118         return RET_SYN;
119     if (*p == 'B' || *p == 'b')
120         (*bfunc) (tlev);
121     else if (*p == 'C' || *p == 'c')
122         (*cfunc) (tlev);
123     else if (*p == 'S' || *p == 's')
124         (*sfunc) (tlev);
125     return RET_OK;
126 }