Commit graph

314 commits

Author SHA1 Message Date
17494e74d1 (SCT_BLD_WORK, SHP_BLD_WORK, PLN_BLD_WORK, LND_BLD_WORK,
NUK_BLD_WORK): New, to encapsulate the formula in one place.

(SCT_MINEFF): New.  Use it instead of literal 20.

(buil): Use CANT_HAPPEN() for internal error.

(build_ship, build_land, build_bridge, build_nuke, build_plane,
build_tower): Simplify avail calculation.

(lupgr, supgr, pupgr): Charge 15% of total build avail instead of an
undocumented amount computed from build lcm and hcm.

(build_ship, build_land, build_bridge, build_nuke, build_plane,
build_tower, lupgr, supgr, pupgr): Fix reporting of required avail
when there's not enough.  Closes #942823.

(lupgr, supgr, pupgr): Code printed cost rounded down, but required
and charged unrounded cost.  Confusing.  Round cost down, like the
build command.  Closes #942811.

(UPGR_COST, UPGR_EFF, lupgr, supgr, pupgr): New UPGR_COST, UPGR_COST replace
literal values.

(show_bridge, show_tower): Don't claim bridge building requires
`workers' (whatever that is), since it doesn't.
2004-05-15 13:23:39 +00:00
6229a7a97a (do_feed): Rev. 1.4 accidentally limited avail after rollover to 999,
even when option ROLLOVER_AVAIL was off.  Previous revision correctly
limits rollover to rollover_avail_max, but missed the limiting after
rollover.  Fix.
2004-05-14 20:21:46 +00:00
79e94bf9d1 (produce, prod): Remove some code related to depletion that has no
effect and makes no sense.
2004-05-14 17:26:53 +00:00
7f4e59fb8d (new_work, do_feed, prod, newe): Factor out calculation of work into
new_work().

(ROLLOVER_AVAIL, opt_ROLLOVER_AVAIL, opt_ROLLOVER_AVAIL, Options,
rollover_avail_max, configkeys, vers, new_work): Replace option
ROLLOVER_AVAIL by configuration parameter rollover_avail_max.
2004-05-10 20:30:38 +00:00
07f5489977 (opt_SHIP_DECAY, Options, shiprepair): Remove option SHIP_DECAY. 2004-05-09 19:06:48 +00:00
b0627a97cb (i_packing): New. Use where appropriate.
(NPKG, WPKG, UPKG, BPKG, NUMPKG): Turn macros into enumeration
constants.
(NPKG, WPKG, UPKG, BPKG): Move from sect.h to item.h.
2004-04-09 06:30:21 +00:00
e42f7e8210 (build_ship, orde, qorde, nav_loadship, load_it, unload_it): Store
item types instead of mnemo characters in shpstr members shp_tstart[]
and shp_tend[].
(com_num): No longer used, remove.

(orde): Simplify swap code.

(prhold): New, factored out of qorde().
2004-04-08 19:14:09 +00:00
b985192f6f (prod, upd_buildeff): Truncated work to even before sector building.
Fix.
2004-04-08 16:31:31 +00:00
392ad15567 Use CANT_HAPPEN() rather than logerror() for some internal errors. 2004-04-06 18:33:40 +00:00
4366c5ac6e Selector rewrite: values other than long, interpret identifiers
according to context, to make `lstat * ?type#spy&spy>1' work.  Closes
bug#825363, #905809, #905814 and #922968.
(nsc_type, packed_nsc_type, nsc_cat, packed_nsc_cat, nsc_flags): New.
(valstr): New.  Old code encoded values in type long, which was
somewhat hard to read and could only support signed integer values.
(nscstr): Redesign.  Use valstr.  Typed operator.
(castr): Split ca_code into ca_type, ca_flags, ca_off.  Tables
changed.
(nstr_comp, nstr_exec): Redesign and rewrite.  Callers changed.  They
used the old design incorrectly, which let players smash the stack
by supplying more than NCOND conditions.
(encode, nstr_comp_val, decode, nstr_exec_val): Rename, redesign, and
rewrite.  Callers changed.
(nstr_coerce_val): New.
(var_ca, sect_ca, ship_ca, land_ca): Checking both var_ca[] and the
object's ca complicates proper recognition of unique abbreviations.
Copy contents of var_ca[] into the ca of objects, remove var_ca[].

(surv): Reject values with category other than NSC_OFF and types that
can't be coerced to NSC_LONG.  Old code happily passed values with
category NSC_VAL to code_char().  The previous version interpreted
them correctly, but earlier versions interpreted them as NSC_OFF, then
logged `bad type in decode: 0' and evaluated them into zero.

(code_char): Used to test category NSC_VAR to decide whether to
display tens or hundreds.  NSC_VAR no longer exists.  Test type
instead.  Makes more sense anyway.
2004-04-02 19:02:12 +00:00
1b30679f05 (growfood): Simplify. Rev. 1.6 made it less robust against overflow;
fix that.
2004-03-16 19:45:38 +00:00
02d380d74f (produce): Fix consumed materials when production hits the 999 limit.
This can't happen currently, because produce() never gets called with
work>999.

(produce): Fix rounding of consumed materials on production backlog.
Broken by the previous revision.
2004-03-16 19:25:13 +00:00
9b7a65b865 (buy, move, prod, dodistribute, produce): Obey ITEM_MAX. Previous
change to move() was incomplete.
2004-03-16 18:56:14 +00:00
b62aca0ecd (produce_sect): Unless player->simulation, work directly on item
arrays instead of copies made by getvec().  This is safe, because the
old code made single copies and always flushed them back into the unit
structures.  Else make copies by hand, not with getvec.
(starv_sects): Replace getvec() by direct, read-only item access.
(upd_buildeff, enlist, materials_charge, materials_cost, produce,
grow_people, growfood, trunc_people, do_feed, feed_people): Change
argument type to match uncopied item arrays.
(growfood): Obey ITEM_MAX.
2004-03-11 22:00:58 +00:00
61d57719c2 (feed_people): Simplify. No functional changes. 2004-03-11 20:20:35 +00:00
eb94c88806 (do_fallout, meltitems): Work directly on item arrays instead of
copies made by getvec().  This is safe, because the old code made
single copies and always flushed them back into the unit structures.

(meltitems): Don't claim more items were lost than existed.
2004-03-11 18:36:43 +00:00
c922b571db (upd_ship, upd_land, do_plague): Work directly on item arrays instead
of copies made by getvec().  This is safe, because the new code
changes the item array precisely when the old code writes back a
changed copy.
(starv_ships, starv_units): Replace getvec() by direct, read-only item
access.
(feed_ship, feed_land): Remove parameter vec, work with sp->shp_item[]
and lp->lnd_item[] instead.
(plague_people): Change argument type to match uncopied item arrays.
2004-03-11 18:10:25 +00:00
979f74709b (infect_people): Remove parameters vec, eff, mobil and work with
sp->sct_item, sp->sct_effic, sp->sct_mobil instead.  This is safe,
because the only caller passed a copy of sp->sct_item created with
getvec(), and infect_people() doesn't change it.  Caller changed.
(infect_people): Rewrite plague risk computation for clarity.
2004-03-11 17:18:05 +00:00
abaf9e06ec (feed_land): Simplify. Amount of food taken from ship could be off by
one due to rounding, fix.  However, the fixed code is currently
unreachable, as caller runs resupply_commod() before feed_land().
(feed_ship): Simplify.  No functional changes.
2004-03-11 15:27:59 +00:00
0652930d67 (upd_ship, upd_land): Simplify. No functional changes. 2004-03-11 13:31:28 +00:00
c7d3a8ffa8 (shiprepair): Remove parameter vec, work with ship->shp_item[]
instead.  This is safe, because the only caller passed a copy of the
latter created with getvec(), and shiprepair() doesn't change it.
Caller changed.
2004-03-11 13:15:02 +00:00
902a1c9f17 (feed_ship): Work directly on land item arrays instead of copies made
by getvec().  This is safe, because the new code changes the item
array precisely when the old code writes back a changed copy.
2004-03-11 13:04:58 +00:00
0716438b5b (landrepair): Remove unused parameter `vec'. Caller changed. 2004-03-11 12:57:33 +00:00
4ea31b120b (feed_land): Work directly on ship item arrays instead of copies made
by getvec().  This is safe, because the new code changes the item
array precisely when the old code writes back a changed copy.
2004-03-11 12:51:34 +00:00
d64fa8d529 (opt_NEWPOWER, Options, gen_power): Remove nooption NEWPOWER.
(opt_NEW_STARVE, Options, feed_ship, feed_people): Remove nooption
NEW_STARVE.

(opt_NEW_WORK, Options, move, explore): Remove nooption NEW_WORK.
2004-03-11 10:36:55 +00:00
4caf8bb440 (get_materials): Work directly on item arrays instead of copies made
by getvec().  This is safe, because the new code changes the item
array precisely when the old code writes back a changed copy.
2004-03-11 09:04:44 +00:00
689f435aff (opt_GRAB_THINGS, Options, get_materials): Remove option GRAB_THINGS. 2004-03-11 08:53:27 +00:00
9ad7afbf17 (dodistribute): Work directly on item arrays instead of copies made by
getvec().  This is safe, because the old code made single copies and
always flushed them back into the unit structures.
2004-03-10 18:32:42 +00:00
d68a0b96c6 (dodeliver): Remove parameter vec, work with sp->sct_item[] instead.
This is safe, because the only caller passed a copy of the latter
created with getvec(), and dodeliver() doesn't change it.  Caller
changed.  Return value no longer needed, remove.
2004-03-10 18:25:05 +00:00
a46cee180a (populace): Remove parameter vec, work with sp->sct_item[] instead.
This is safe, because the only caller passed a copy of the latter
created with getvec(), and populace() doesn't change it.
(tax): Replace getvec() by direct, read-only item access.
2004-03-10 17:59:37 +00:00
e7d75b2279 Use gcc function attribute `format' to catch bad format strings. Fix
them.  From Marc Olzheim.
Type modifier 'l' was missing in many places, probably rendering the
server useless on 64-bit hosts.
(ef_flush, ef_write, ef_extend, lwpCreate, lwpDestroy): Use conversion
specifier 'p' to print pointers.
(check_market): Fix display of loan amount.
(doland): Fix unescaped '%' (undefined behavior).
(ldump, ndump, pdump, sdump): Don't use flag '0' with conversion
specifier 's' (undefined behavior).
(dump, ldump, lost, ndump, pdump, sdump, empth_create, update_sched):
Cast time_t and pthread_t to long for printing.
(lwpStackCheck, lwpStackCheckUsed, finish_sects): Insert cast to fix
argument type on all platforms.
(prod): Remove extra argument.
(perform_mission, airdamage, retreat_land1, lwpReschedule): Format
string missed arguments.
2004-03-09 12:27:40 +00:00
7d7945c3e9 Replace getvec() by direct, read-only item access in some cases where
that's obviously correct.
2004-03-05 12:05:33 +00:00
b1461faea5 Replace getvec() by direct, read-only item access in some cases where
that's obviously correct.
2004-03-05 10:38:58 +00:00
58e93c0ea3 (deli, do_demo, lnd_sweep, guerrilla): Saturate items at ITEM_MAX.
With variables, item increases beyond the capacity of variables
(65535) were ignored here.

This should cover all item changes not going through putvec().
2004-03-05 06:48:57 +00:00
95ef2b139d (ITEM_MAX): New, value 9999.
(give, deliver_it): Use it instead of 9990.
(load_comm_ship, load_comm_land, rese): Use it instead of 9999.
(thre): Use it instead of 10000.
(check_market, explore, move, pln_dropoff): Use it instead of 32767.
(unload_it): Use it instead of 99999 (which couldn't possibly work,
but what do you expect from the autonav code).
2004-03-05 06:34:34 +00:00
abd1fd2c1e (FALLOUT_MAX): New.
(doland, detonate, spread_fallout): Use it.  With variables, fallout
beyond the capacity of variables (65535) was ignored, except in
doland(), where it saturated at 9999, and spread_fallout, where it
could overflow.  Now it always saturates at FALLOUT_MAX.
2004-03-04 16:19:50 +00:00
5bad9875a5 (sctstr): Member sct_che encoded number of che and their target.
Simplify.  Split into member sct_che (number) and sct_che_target.
Users changed.
(get_che_cnum, set_che_cnum, get_che_value, get_che_value): Che
encoding/decoding functions; remove.
(CHE_MAX): Move from var.h to sect.h.
(prsect, doland): Print / edit the new field.
2004-03-04 13:49:25 +00:00
eccc5cb7d7 Sectors need space for items, deliveries and distribution thresholds.
To save space, the ancients invented `variables': a collection of
key-value pairs, missing means zero value, space for `enough' keys.
This complicates the code, as assigning to a `variable' can fail for
lack of space.  Over time, `enough' increased, and for quite some time
now `variables' have been *wasting* space.  This changeset replaces
them, except in struct mchrstr, struct lchrstr and struct pchrstr,
where they are read-only, and will be replaced later.  It is only a
first step; further cleanup is required.  To simplify and minimize
this necessarily huge changeset, the new item[] arrays have an unused
slot 0, and the old variable types V_CIVIL, ... are still defined, but
must have the same values as the item types I_CIVIL, ...
2004-03-03 16:54:22 +00:00
ba86513b01 (plague_people): Log and repair bad plague stage. 2004-03-03 13:20:46 +00:00
42290db8c8 (nameofitem, produce, check, fire_dchrg, send_reacting_units_home,
do_map_set, upd_land, nav_check_atdest, produce, upd_ship): Remove
unused parameters.  Callers changed.
2004-03-03 09:39:50 +00:00
98b392d72c (CHE_MAX): Don't define twice, define once in a header.
(get_che_cnum, set_che_cnum, get_che_value, set_che_value): Remove
redundant definitions.
2004-03-01 13:32:06 +00:00
c1be5d8657 Don't declare things in more than one place. Move some declarations
between headers.  Code is now fully prototyped and compiles cleanly
with gcc -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs
-Wredundant-decls.  Closes #723788.
2004-02-20 20:45:18 +00:00
46da1aec7a deity.h is redundant, remove it. 2004-02-20 20:34:43 +00:00
b4a7d9f022 The (unused) parameter of thread entry points is named `argv', but the
argument is actually the value of global variable `player'.  Rename to
`unused'.
2004-02-20 20:14:53 +00:00
8538b0b605 Portability fix: don't declare library function, include appropriate
header.
2004-02-20 11:17:32 +00:00
4a3f0b8146 Add some missing declarations to headers. Remove some redundant
declarations elsewhere.  Change linkage of some functions to static.
2004-02-20 10:51:03 +00:00
22a356b1e1 New server.h for server startup, control and shutdown, i.e. stuff in
src/server.  Use it.
2004-02-19 19:02:30 +00:00
2c5a4b4563 Declare update related variables in budg.h. Remove some redundant
declarations elsewhere.
2004-02-19 17:28:03 +00:00
6b67276f4f (updating_mob, timestamp_fixing): Inappropriate for global/, move to
update/mobility.c.
(timestamp_fixing, do_upd_checking): Static linkage.
2004-02-19 16:39:31 +00:00
8cd0160176 Declare all configuration variables in optlist.h. Include that
instead of declaring them all over the place.  This uncovered type
errors:
(s_p_etu, adj_update): Defined long, sometimes declared int.  Kills
big endian machines where sizeof(long) != sizeof(int).  Change to
int.

(set_option, delete_option, optstrset, intset, floatset, doubleset,
longset, optionset, optiondel, worldxset): Change linkage to static.
2004-02-17 22:58:04 +00:00