chiark / gitweb /
Ooops. Fix changelog file so it's actually correct.
[rocl] / DEVGUIDE
1 RIGHT ON COMMAND LINE
2   Developer's guide
3
4
5 Package `elite'
6
7   elite-nextworld SEED
8         Given a world seed, compute and return the seed of the next
9         world in the galaxy.
10
11   elite-nextgalaxy
12         Given a galaxy seed, compute and return the seed of the next
13         galaxy.
14
15   elite-worldinfo ARR SEED
16         Given a world seed, compute information about the world and
17         return it in the array ARR.  Any existing stuff in the variable
18         ARR is destroyed.  Information is written to the elements of ARR
19         as follows.
20
21         x               in decilightyears from galaxy left
22         y               in decilightyears from galaxy top
23         government      as integer: 0 .. 7 are anarchy .. corp-state
24         economy         as integer: 0 .. 7 are rich-ind .. poor-agri
25         techlevel       the tech level, 
26         population      in 100 million
27         productivity    in M Cr
28         radius          in km
29         seed            for the sake of competeness
30         inhabitants     as a string
31         name            capitalized
32         description     a complete sentence
33
34         The array `government' maps integers 0 to 7 to human-readable
35         strings describing the various government types; `gov' maps them
36         to short space-free tokens.  Similarly, the arrays `economy' and
37         `eco' map integers to economy types.
38
39   elite-market ARR SEED [FLUC]
40         Given a world seed and an optional fluctuation (0 .. 255;
41         default is 0) compute the market prices at the world and store
42         then in the array ARR.  Existing stuff in ARR is destroyed.
43         The indices of the array are product symbols; the values are
44         two-element lists containing the price and quantity available.
45         Product names are:
46
47                 food textiles radioactives slaves liquor-wines
48                 luxuries narcotics computers machinery alloys
49                 firearms furs minerals gold platinum gem-stones
50                 alien-items
51
52         The list `products' alternates these symbols with human-readable
53         product names.
54
55   elite-unpackcmdr [-force] ARR DATA
56         Unpack a commander file into an array.  If `-force' is given,
57         don't complain about bad checksums or nonzero trailing bytes.
58         DATA is a string containing the file's data.  ARR is an array to
59         write to; it is destroyed beforehand.  Values are stashed as
60         follows:
61
62         mission                 mission status code
63         world-x                 in dly from left
64         world-y                 in dly from top
65         gal-seed                
66         credits                 in tenths of a credit
67         fuel                    in tenths of a lightyear
68         gal-number              1 .. 8 seem sensible
69
70         front-laser             bits 0 .. 6 are power; bit 7 is
71         rear-laser              rapid-fire.  none = 0; pulse = 15;
72         left-laser              beam = 15 + rapid; mil = 23 + rapid;
73         right-laser             mining = 50
74
75         cargo                   capacity in tonnes
76
77         market-fluc             0 .. 255; determines prices
78         hold-PRODUCT            quantity of product in hold
79         station-PRODUCT         quantity of product at station
80
81         ecm                     just true or false
82         fuel-scoop              
83         energy-bomb
84         energy-unit
85         docking-computer
86         gal-hyperdrive
87         escape-pod
88
89         missiles                number; 0 .. 4 are usual
90         legal-status            0 = clean; 1 .. 49 = offender; 
91                                   50+ = fugitive
92
93         score                   number
94                                   0 .. 7        harmless
95                                   8 .. 15       mostly harmless
96                                   16 .. 31      poor
97                                   32 .. 63      average
98                                   64 .. 127     above average
99                                   128 .. 511    competent
100                                   512 .. 2559   dangerous
101                                   2560 .. 6399  deadly
102                                   6400+         elite
103
104   elite-packcmdr ARR
105         Given an unpacked array, as described above, construct and
106         return the packed commander file.
107
108   elite-distance X Y XX YY
109         Compute the distance between two points (X, Y) and (XX, YY),
110         expressed in decilightyears, according to the slightly strange
111         algorithm used by the game.  The answer is in decilightyears.
112
113   elite-galaxylist SEED
114         Return a list of 768 elements which are the seed/x/y for each
115         world in the galaxy whose seed is SEED.
116
117   elite-adjacency ADJ LIST [DIST]
118         Given a list in the form returned by `elite-galaxylist', store
119         an adjacency map in ADJ.  The DIST (by default 70) is the
120         maximum distance between two worlds for them to be considered
121         adjacent.  On exit, ADJ is an array mapping seeds to seed/x/y
122         lists of adjacent worlds.
123
124   galaxy N [SEED]
125         Returns the seed of the Nth galaxy, starting counting with SEED
126         as galaxy 1.  The default SEED is the standard galaxy 1.
127
128   foreach-world GAL ARR SCRIPT
129         For each world in the galaxy GAL, set ARR to information about
130         the world (see elite-worldinfo) and evaluate script.
131
132   find-world GAL PAT
133         Return a list of the worlds in galaxy GAL whose names match the
134         glob-pattern PAT.
135
136   destructure PAT LIST
137         Destructure LIST according to PAT.  If PAT is a single name, set
138         the variable PAT to be LIST; otherwise if PAT is a list,
139         destructure each element of LIST according to the corresponding
140         element of PAT.  If PAT is `.' then do nothing.  It is not an
141         error if PAT is shorter than LIST -- trailing elements are
142         simply ignored.
143
144   write-file NAME CONTENTS [TRANS]
145         Safely write CONTENTS to the named FILE using the given
146         TRANSlation (default binary).  The file is replaced atomically;
147         if there is an error then the file is not damaged.
148
149   read-file NAME [TRANS]
150         Return the contents of the named FILE according to the given
151         TRANSlation (default binary).
152
153   nearest-planet WW X Y
154         Return the seed of the `nearest' planet given in the seed/x/y
155         list WW to the point (X, Y).
156
157   worldname W
158         Return the name of the world with seed W.
159
160   shortest-path ADJ FROM TO WEIGHT
161         Computes the shortest path and shortest distance between the
162         worlds FROM and TO (both seeds).  ADJ must be an adjacency table
163         (e.g., as computed by elite-adjacency) for the galaxy containing
164         both worlds.  WEIGHT is a command such that WEIGHT A B returns
165         the weighting (`distance') for a hop from A to B (both seeds).
166         The return value is a list P D, where D is the total path
167         weight, and P is a list of seeds, starting with FROM and ending
168         with TO, for the route.  This uses Dijkstra's shortest-path
169         algorithm.  For the Floyd-Warshall all-points shortest-path
170         algorithm, see graph-shortest-path below.
171
172   weight-hops, weight-fuel, weight-safety, weight-encounters,
173   weight-trading
174         Various standard weighting functions.
175
176   parse-galaxy-spec G
177         Parses a galaxy-spec G and returns a list containing a
178         description of the galaxy and the seed.  If G is not a valid
179         galaxy-spec then return an empty list.
180
181   parse-planet-spec G P
182         Parses a planet-spec P relative to a galaxy seed G, and returns
183         the planet seed or an empty string if P is invalid.
184
185   in-galaxy-p G PP
186         G is a galaxy; PP is a list of planet seeds.  Return true if all
187         seeds in PP are in G.  It's not a problem if the seeds in PP
188         aren't valid.
189
190   world-summary P
191         Produce a standard one-line summary of information about the
192         world P (a seed).
193
194   jameson ARR
195         Populate ARR with the standard Commander Jameson.
196
197 Package `vector'
198
199         A `vector' is a fixed-size multidimensional array with integer
200         indices, whose values may be arbitrary Tcl objects.
201
202   vector LIST [INIT]
203         Construct and return a new vector whose dimensions are in LIST,
204         and whose initial contents are INIT.  The vector is a command;
205         you can mess with it further using its subcommands.
206
207   VEC get INDEX ...
208   VEC lget LIST
209   VEC rget INDEX
210         Return the element at the given index.  The first form reads
211         indices from successive arguments; the second collects a list of
212         arguments; the final takes a single `raw' index.  Vectors use
213         row-major indexing.
214
215   VEC set INDEX ... VALUE
216   VEC lset LIST VALUE
217   VEC rset INDEX VALUE
218         Store VALUE in the given place in the vector.
219
220   VEC destroy
221         Destroy the vector VEC.  Equivalent to saying rename VEC {}.
222
223   VEC bounds
224         Returns the dimension list for VEC.
225
226   VEC size
227         Returns the upper (exclusive) limit on raw indices (to rset or
228         rget).
229
230 Package `graph'
231
232   graph-shortest-path VEC
233         Compute the all-points shortest-paths for VEC, which is an
234         adjacency matrix: i.e., VEC get I J is the distance from node I
235         to node J, or -1 if there is no direct route from I to J.  The
236         adjacency matrix can be asymmetric -- the distance from I to J
237         need not be equal to the distance from J to I.
238
239         The return value is a pair of vectors, named LEN and PATH.  The
240         length of the shortest path from I to J is then vec LEN I J; the
241         first hop is to vec PATH I J -- if we say that's node K then the
242         shortest path from I to J is I, K, and then the shortest path
243         from K to J.
244
245   graph-travelling-salesman [-OPTIONS] ADJ LIST
246         Find a short route touring all the nodes in LIST.  ADJ is an
247         adjacency matrix as for graph-shortest-path, except that it must
248         be complete -- no -1 entries.  (graph-shortest-path is a handy
249         way of arranging this.)
250
251         -cycle / -nocycle       If -cycle (the default) then find a
252                                 cyclic path; if -nocycle then start at
253                                 the first node in LIST, and end wherever
254                                 is convenient.
255
256         Simulated annealing parameters:
257
258         -cool FACTOR            Cooling factor.  [1.001]
259         -dead COUNT             Give up after COUNT cycles.  [200]
260         -inner COUNT            Do COUNT loops for each cooling cycle.
261                                   [10000] 
262         -temp TEMP              Start at this temperature.  [unhelpful]
263
264
265 $Id$
266 \f
267 Local variables:
268 mode: text
269 End: