]> git.pond.sub.org Git - empserver/blob - src/lib/commands/vers.c
Add some missing declarations to headers. Remove some redundant
[empserver] / src / lib / commands / vers.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  *  vers.c: Print out the Empire version
29  * 
30  *  Known contributors to this file:
31  *     Dave Pare
32  *     Jeff Bailey
33  *     Thomas Ruschak
34  *     Ken Stevens
35  *     Steve McClure
36  */
37
38 #include <stdio.h>
39 #include <time.h>
40 #include "gamesdef.h"
41 #include "misc.h"
42 #include "player.h"
43 #include "deity.h"
44 #include "nat.h"
45 #include "version.h"
46 #include "ship.h"
47 #include "optlist.h"
48 #include "commands.h"
49
50 int
51 vers(void)
52 {
53     struct option_list *op;
54
55     time_t now;
56     int j;
57
58     (void)time(&now);
59     pr("Empire %d.%d.%d\n(KSU distribution %2.2f, Chainsaw version %2.2f, Wolfpack version %2.2f)\n\n", EMP_VERS_MAJOR, EMP_VERS_MINOR, EMP_VERS_PATCH, (float)KSU_DIST, (float)CHAINSAW_DIST, (float)WOLFPACK_DIST);
60     pr("The following parameters have been set for this game:\n");
61     pr("World size is %d by %d.\n", WORLD_X, WORLD_Y);
62     pr("There can be up to %d countries.\n", MAXNOC);
63     pr("By default, countries use %s coordinate system.\n",
64        (players_at_00) ? "the deity's" : "their own");
65     pr("\n");
66     pr("An Empire time unit is %d second%s long.\n",
67        s_p_etu, s_p_etu != 1 ? "s" : "");
68     pr("Use the 'update' command to find out the time of the next update.\n");
69     pr("The current time is %19.19s.\n", ctime(&now));
70     pr("An update consists of %d empire time units.\n", etu_per_update);
71     pr("Each country is allowed to be logged in %d minutes a day.\n",
72        m_m_p_d);
73     pr("It takes %.2f civilians to produce a BTU in one time unit.\n",
74        (1.0 / (btu_build_rate * 100.0)));
75     pr("\n");
76
77     pr("A non-aggi, 100 fertility sector can grow %.2f food per etu.\n",
78        100.0 * fgrate);
79     pr("1000 civilians will harvest %.1f food per etu.\n",
80        1000.0 * fcrate);
81     pr("1000 civilians will give birth to %.1f babies per etu.\n",
82        1000.0 * obrate);
83     pr("1000 uncompensated workers will give birth to %.1f babies.\n",
84        1000.0 * uwbrate);
85     pr("In one time unit, 1000 people eat %.1f units of food.\n",
86        1000.0 * eatrate);
87     pr("1000 babies eat %.1f units of food becoming adults.\n",
88        1000.0 * babyeat);
89     if (opt_NOFOOD)
90         pr("No food is needed!!\n");
91
92     pr("\n");
93
94     pr("Banks pay $%.2f in interest per 1000 gold bars per etu.\n",
95        bankint * 1000.0);
96     pr("1000 civilians generate $%.2f, uncompensated workers $%.2f each time unit.\n", 1000.0 * money_civ, 1000.0 * money_uw);
97     pr("1000 active military cost $%.2f, reserves cost $%.2f.\n",
98        -money_mil * 1000.0, -money_res * 1000.0);
99     if (opt_SLOW_WAR)
100         pr("Declaring war will cost you $%i\n\n", War_Cost);
101     pr("Happiness p.e. requires 1 happy stroller per %d civ.\n",
102        (int)hap_cons / etu_per_update);
103     pr("Education p.e. requires 1 class of graduates per %d civ.\n",
104        (int)edu_cons / etu_per_update);
105     pr("Happiness is averaged over %d time units.\n", (int)hap_avg);
106     pr("Education is averaged over %d time units.\n", (int)edu_avg);
107     if (opt_ALL_BLEED == 0)
108         pr("The technology/research boost you get from your allies is %.2f%%.\n", 100.0 / ally_factor);
109     else                        /* ! ALL_BLEED */
110         pr("The technology/research boost you get from the world is %.2f%%.\n", 100.0 / ally_factor);
111
112     pr("Nation levels (tech etc.) decline 1%% every %d time units.\n",
113        (int)(level_age_rate));
114
115     pr("Tech Buildup is ");
116 /*      if (tech_log_base <= 1.0 && hard_tech == 0.0) { */
117     if (tech_log_base <= 1.0) {
118         pr("not limited\n");
119     }
120     if (tech_log_base > 1.0) {
121         pr("limited to logarithmic growth (base %.2f)", tech_log_base);
122         if (easy_tech == 0.0)
123             pr(".\n");
124         else
125             pr(" after %0.2f.\n", easy_tech);
126     }
127     /*else {
128        pr("limited to asymptotic growth towards %.2f",
129        hard_tech + easy_tech);
130        if (easy_tech == 0.00) 
131        pr(".\n");
132        else
133        pr("after %.2f\n",easy_tech);
134        } */
135     pr("\n");
136     pr("\t\t\t\tSectors\tShips\tPlanes\tUnits\n");
137     pr("Maximum mobility\t\t%d\t%d\t%d\t%d\n", sect_mob_max,
138        ship_mob_max, plane_mob_max, land_mob_max);
139     pr("Max mob gain per update\t\t%d\t%d\t%d\t%d\n",
140        (int)(sect_mob_scale * (float)etu_per_update),
141        (int)(ship_mob_scale * (float)etu_per_update),
142        (int)(plane_mob_scale * (float)etu_per_update),
143        (int)(land_mob_scale * (float)etu_per_update));
144     pr("Max eff gain per update\t\t--\t%d\t%d\t%d\n",
145        min(ship_grow_scale * etu_per_update, 100),
146        min(plane_grow_scale * etu_per_update, 100),
147        min(land_grow_scale * etu_per_update, 100));
148     pr("\n");
149     pr("Ships on autonavigation may use %i cargo holds per ship.\n", TMAX);
150     if (opt_TRADESHIPS) {
151         pr("Trade-ships that go at least %d sectors get a return of %.1f%% per sector.\n", trade_1_dist, (float)(trade_1 * 100.0));
152         pr("Trade-ships that go at least %d sectors get a return of %.1f%% per sector.\n", trade_2_dist, (float)(trade_2 * 100.0));
153         pr("Trade-ships that go at least %d sectors get a return of %.1f%% per sector.\n", trade_3_dist, (float)(trade_3 * 100.0));
154         pr("Cashing in trade-ships with an ally nets you a %.1f%% bonus.\n", trade_ally_bonus * 100.0);
155         pr("Cashing in trade-ships with an ally nets your ally a %.1f%% bonus.\n\n", trade_ally_cut * 100.0);
156     }
157     if (opt_MARKET) {
158         pr("The tax you pay on selling things on the trading block is %.1f%%\n", (1.00 - tradetax) * 100.0);
159         pr("The tax you pay on buying commodities on the market is %.1f%%\n\n", (buytax - 1.00) * 100.0);
160     }
161
162     if (opt_NONUKES)
163         pr("Nukes are disabled.\n");
164     else if (opt_DRNUKE) {      /* NUKES && DRNUKE enabled */
165         pr("In order to build a nuke, you need %1.2f times the tech level in research\n", drnuke_const);
166         pr("\tExample: In order to build a 300 tech nuke, you need %d research\n\n", (int)(300.0 * drnuke_const));
167     }
168
169     pr("Fire ranges are scaled by %.2f\n", fire_range_factor);
170
171     pr("\nOptions enabled in this game:\n        ");
172     for (j = 0, op = Options; op->opt_key; op++) {
173         if (*op->opt_valuep == 0)
174             continue;
175
176         j += strlen(op->opt_key) + 2;
177         if (j > 70) {
178             pr("\n        ");
179             j = strlen(op->opt_key) + 2;
180         }
181         pr("%s%s", op->opt_key, op[1].opt_key == NULL ? "" : ", ");
182     }
183     pr("\n\nOptions disabled in this game:\n        ");
184     for (j = 0, op = Options; op->opt_key; op++) {
185         if (!(*op->opt_valuep == 0))
186             continue;
187
188         j += strlen(op->opt_key) + 2;
189         if (j > 70) {
190             pr("\n        ");
191             j = strlen(op->opt_key) + 2;
192         }
193         pr("%s%s", op->opt_key, op[1].opt_key == NULL ? "" : ", ");
194     }
195     pr("\n\n\"info Options\" for a detailed list of options and descriptions");
196     pr("\n\n");
197     pr("The person to annoy if something goes wrong is:\n\t%s\n\t(%s).\n",
198        privname, privlog);
199     pr("You can get your own copy of the source %s\n", GET_SOURCE);
200     return RET_OK;
201 }