-
Notifications
You must be signed in to change notification settings - Fork 2
/
TODO
373 lines (357 loc) · 28.3 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
CODE HEALTH
+ Replace all the places that generate strings by concatentating strings with calls to a function similar to
TMessage's constructor, with '_ _ of _'. Or see TBroadcast and see how it does it.
+ Rename "Find*" methods with "Enumerate*" methods where applicable
+ Consider if EnumerateExplicitlyReferencedThings(),
FindMatchingThings(), and FindThingTraverser() (and maybe some
others) should be refactored so that the logic for walking the tree
is in one place and the filtering is in another.
+ should have a function that turns "avatarA movedTo thingB from positionD thingD to positionC thingC" into things like:
- avatarA dropped thingB onto thingC (thingD outside thingC)
- avatarA picked thingB up (A=C)
- avatarA climbs into thingC (A=B)
- avatarA drops thingB (C is a common parent of A and B, D=A)
- etc
+ use this for logic in TThing.Moved(), and places that refer to what happened to an object, e.g. TDoorWay.Put()
+ add cdUnder and cdOver to the direction enum
- add support for this everywhere
- add an argument to GetLookIn() that overrides the preposition used in prefixing the description
+ refactor GetLookTowardsDirection and GetDescriptionRemoteDetailed/GetDescriptionRemoteBrief so that instead of the current
system, there's one mechanism that walks the sight line in the relevant direction and returns a list of instructions
for how to describe what the player can see
+ if loVisibleFromFarAway forms a loop, seeking things will crash with stack overflow (simplest case is reflexive
landmarks with that flag, but it could be a longer cycle too)
+ the Properties stuff should be refactored to use inheritance rather than duplicating all fields at each level
NAVIGATION
+ "find <name of neighboring location>" doesn't work
+ "go to <name of neighboring location>" doesn't work
+ support "go north through the archway", "go down through the hole" now that we auto-disambiguate with "through"
+ "go to east archway"
+ "visit east archway"
+ "move to north", "move to hut", "move to door" (should act like "move me to door", etc)
+ exit things by name
- "leave leaves", "exit leaves": I don't understand how to exit "leaves".
- "exit hole"
- "get out of pile": That's a direction, I don't know how to take it.
- when doing this make sure that we can't escape closed containers
+ "move off", "move off pile", "move me off pile" when standing on the pile of leaves
+ "off" and "get off" should be required to be used instead of "out" when on an object
+ "climb [up]", "climb down" commands; "jump" command ("jump up", "jump on the spot", "jump off cliff"); "jump down" command; "up" should imply "climb"; "down" should imply "climb down" if there's something to climb with, otherwise "jump down"; climbing should only work if the relevant FUp/FDown is a TThing that is flagged as climbable
+ "climb cliff": I don't understand how to "climb".
+ "climb on pedestal", "climb up onto pedestal", "up onto pedestal", "up", "get on pedestal" should mean the same as "move onto pedestal"
+ "jump into pile of leaves"; jumping into a pile should scatter it (remove psTidy from its FState)
+ announce when a player disconnects or reconnects
+ "look out" while on something on the ground talks about the ground. It should use the GetRepresentative() for the thing it's looking at
+ "look around" should do the same as look.
+ "down" when on something doesn't exit it (e.g. climb on a door, "down" says you can't go down). but make sure not to break down from stairs when fixing this.
+ "exits"
+ seriously consider making it impossible for a TAvatar to be anything but tpOn
- this would mean that any object that can be entered would have to have a separate surface inside
- this would dramatically simplify navigation and looking around
- this might be necessary to make descriptions from inside a bag make as much sense as outside a bag, anyway
+ "enter e" when there are three matching things "e" should pick the right one and enter it
+ "[go] north until village", "[go] north and stop at village", "[go] north up to village", "north, stopping at village"
- this is hard in particular if the location in question is not visible right now...
+ have navigation pay attention to the size of openings vs the size of players
- so you can't enter the bag any more
+ "enter north archway" says "You cannot enter the north archway. The north archway has no discernible entrance." (might work now?)
+ "enter" doesn't work (should autodisambiguate enterable things)
+ "open north" doesn't work (should try checking atoms in that direction)
+ "open north door" doesn't work unless "north" is in the door name
+ walking past someone on the stairs doesn't tell the person on the stairs
+ entering things should check all the things until there (e.g. if bag of holding is inside sack, check that you can enter sack to enter bag)
DOOR BUGS
+ "find doorway" when in the threshold room should use the room's context fragment, rather than "The doorway is at the doorway."
+ "move me to door then move me to door then enter door" is a comedy of errors:
- second move says you can't get on the door (but you're on the door!)
because there's not enough room
- then entering the door puts you at the threshold while saying:
"You fall onto the ground as you pass through the door, barely missing you on your way down."
+ no reasonable way to actually enter (and remain at) a threshold
+ "move me to doorway" redundantly says "You cannot get onto the doorway. You can't put something on a doorway."
+ "move me to doorway" tries to put you both in and through the door
+ "move me to door" tries to get "onto" the door
- "stand in doorway" should work like "move me into doorway" (once that works)
- "stand on foo" should work like "move me onto foo"
+ > move door to doorway
| (on the floor)
| (first taking the door)
| Taken.
| You can't see the floor anymore.
+ "push door to doorway" at one point did this, but this may be resolved now?:
| > push door to doorway
| (inside the doorway)
| Placed in the doorway.
| You install a door installed in the doorway. It is closed.
+ when the door is closed, you can climb a side of the door then go past the door directionality (e.g. climb a side, north)
- really the threshold room should be inaccessible when the door is closed.
WORLD
+ we should still describe non-implicit things that are on implicit things
+ animals/monsters/species/npcs
+ separate whether something is playable from what it is (species/gender)
+ make it possible for all living things to have an AI or a player
+ NPCs should have an idea of what belongs to them
+ NPCs should have an idea of where stuff that belongs to them should be
+ NPCs should be concerned by other characters holding or moving their stuff
+ TFeaturelessOutdoorLocation should magically describe itself:
+ count tpPlantedIn* trees and decide if it's a forested area
- should be able to refer to "forest of trees"
- should automatically say, for areas that have no exits but are blocked by trees, that the forest is too dense
(rather than the default "you can't go that way")
+ if it's not forested but has forests around it, it's a clearing
+ well-worn paths: count how many people have walked on them and should start describing themselves as paths
- remember the kind of footprint for people exitting and entering in each direction
- gender (male/female/robot/etc), from/to, direction, how heavy
- species, too, once we have animals/monsters
- linked list, remember the last five
- at a regular interval, forget oldest one (grass growing back)
- if there's two directions that are heavily walked, describe a path between them
- if there's three or more directions heavily walked, describe an intersection between them
- if there's a direction walked but noticeably less, describe it as "a lesser path also leads" that way
- allow players to study tracks (determine gender/species)
+ if it's surrounded by non-forested, non-path areas, it's a grassy field
+ write a test tool that goes through each description of every location and thing and checks that all the nouns are accessible
+ Players should have PartOfs: eyes, hands, etc; gender-dependent...
+ World should have Implicits: "you", "time" ("take time"), etc
+ "harvest forest": I don't understand how to "harvest".
+ "chop down forest": I don't understand how to "chop".
+ "repair", "unbreak system": I don't understand how to "unbreak".
+ Descriptions that walk up the chain of things being on things
should give more context (e.g. "The rim is part of the bag." to
avoid this mess:
On Tree (on the rim of the bag of holding, part of the bag of holding, on the hat block, on the eat block, in the bag of holding, on the is block, in the pile of earth, at a tunnel end)
Tree is a player.
Around the bag's rim is embroidered the name "Tree".
The bag has the name "Tree" embroidered around its rim.
This block is red and says "hat".
This block is blue and says "eat".
Tree is carrying:
A spade.
PLOT
+ plot
WIZARDING
+ tools to shape the world - magic digging wand that doesn't make piles appear
+ tools to shape the world - walking through the forest autocreating more forest, fields, rivers, mountains, caves
+ tools to shape the world - cutting down the forest to form fields, piles of wood
+ tools to shape the world - making small huts from piles of wood
+ digging while in a hole - "dig ground" should at least do something while in a hole in the ground
+ "destroy mountain": I don't understand how to "destroy".
+ "delete leaves": I don't understand how to "delete".
+ "make vegetation": I don't understand how to "make".
+ "grow vegetation": I don't understand how to "grow".
+ "create axe": I don't understand how to "create".
+ "instantiate axe": I don't understand how to "instantiate".
PLAYER INTERACTION
+ if you "take all" when someone is present holding something, you take their stuff
+ "The player arrives from the hut." when another player is seen exiting the hut: would be better if it said "The player leaves the hut"? messages about in-room navigation are pretty poor in general right now (enter hole, enter pile, etc)
+ it says "Carinda enters Camp Cuddlyfort. Carinda arrives from you." when another player is leaving you
+ make shout broadcast to surrounding rooms
+ "hello <player>", "greet <player>"
+ "say to <player>, ..."
+ rescue people in holes when the hole is filled (see // note in THole.HandleAdd)
+ player safe where they can keep things while disconnected
+ player savepoint so that players can disappear/reappear while not connected (e.g. a bedroom)
+ "poke head out of leaves": I don't understand how to "poke".
+ "hide in leaves": I don't understand how to "hide". (should probably just be equivalent to getting into the leaves)
+ implement dancing, kissing, emoting in general
+ bounce balloon
+ if you disconnect, you should (after a timeout) get encased in a ludicrously heavy transparent bubble.
+ should write a test that triggers the size check in TThing.GetEntrance ("enter apple" should do it)
+ should support commands that end with a full stop ('l n.' => 'I don't understand how to look north ".".')
+ "i,d" doesn't work, but "i;d" does
+ similarly, "enter hole, look up, look down, exit hole" doesn't parse right
+ "put bag on me" works... not sure exactly what to do with that
+ "push all to Hixie" (where Hixie is in the room) pushes Hixie to Hixie (and starts asserting all over the place).
+ If you're in a doorway, you don't get notified of people going through the door. (Nor do they get told about you.)
+ "climb stairs" doesn't check if you're too big to fit through the opening the way that "up" and "down" do check.
+ "push table down" checks if the table is too big to go through the opening, but "put table on stairs" does not.
+ "enter bag of holding" works but "enter sack" does not, even if the bag is in the sack. (extra difficult because you can't exit at all)
+ "take <other player>" tells the other player "Hixie moved you so that _it_ is carried by Hixie" instead of using the right pronoun (emphasis added).
THINGS
+ floors at threshold locations should be visible to all
+ floors at threshold locations should be entirely ignored if we would have to disambiguate
between multiple kinds of floors
+ while on a door you can't see the ground, but "l d" shows you the ground
+ a room that contains a ceiling that contains an important piece of scenery doesn't describe
that scenery (but the same thing as a part of the ground works fine because you're on the ground).
+ "except"
+ "read sign at east path" for "Arrivals Circle"->"ground"->"stone pedestal"->"Fred": Which sign do you mean, the big stone to the east at the east-leading path, the north-pointing thick wooden sign, the light pink crystal sign to the south, the west-pointing stainless-steel sign, or the southwest-pointing shining silicon metalloid sign?
+ "read first sign"
+ shaking something that is part of something else (e.g. shaking the rim of the bag) should just say it's part of something else, not say it "cannot be moved"
-- especially for the rim of the bag of holding, which can clearly be moved
-- should probably just say "(by shaking the bag)" and defer up
-- same with "take rim" --> "The rim of the bag of holding cannot be moved."
+ make orbs smaller but with no carrying capability
+ you can move something onto something else even if that other thing is on something that couldn't handle the new total mass or volume. should we handle this via HandleAdd()? (take macguffin; have someone else walk onto it); maybe handle this by chaining CanPut() and friends up the parent chain, but we should have objects HandleAdd unexpected stuff anyway, for when you fumble it (since that doesn't check to see if you can put it there, and currently asserts -- e.g. after climbing on someone, then fumble something)
+ fumbling doesn't check if there's room on the target, then asserts when there isn't. make the fumble be a tumble!
+ fumble tells other players both about the fumble and then about the move to the ground.
+ you can probably push something out of a hole even if you can't push it into a hole; see "// xxx" in player.pas DoRemove
+ when you're being carried by someone and you drop something, it ends up inside them. It should drop out of them.
+ dropping something when in the sky might not work at all these days?
+ when you drop something from the sky onto a ground surface that's full, it should drop onto something (the biggest non-full thing in a depth-first search?) on the ground surface
+ taking something with things on it should make the things fall off
+ throwing - "throw MacGuffin north": I don't understand how to "throw".
+ "push things off table" doesn't work (pushing things off), but game tells you "you would have to push ... off ... first"
+ see whether "put x in ground" does things differently when the ground has a hole that is covered (see "// xxx" in things.pas TSurface.GetInside)
+ "cover" a hole
+ putting a large thing on a small hole (e.g. "climb hole") it slips off, but if it's the same size it works. it should always work unless the parent is too small?
+ TPile.CanTake() should hint if there's something in the pile. "Your fingers brush against something metalic." -- all things would need a GetDescriptionAdjective() or something
+ digging a pile of earth should reveal all the things in the pile and put them on the ground next to the pile
+ putting things in a pile then filling a hole with the pile causes the things to disappear permanently; they should end up in the ground
+ "empty x" should be like "move all from x out"
+ "remove"
+ "put all in x" should look everywhere, not just in hands
+ "put y in x" should say "the y is already in the x" when that is the case, it shouldn't take it then put it back in
+ "take bag then move leaves into bag then move leaves out of bag" fails because when you're holding the bag it doesn't think to push them onto the floor
+ "push leaves into bag; push leaves onto ground" - the second part fails because when you're holding the bag it is too far from the floor
+ support "it". In particular, if "look" only mentions one thing, "take it" should work.
+ support dangling parser - if we asked "which?" then accept a single GetThing() as a response (filtering only the previous matches) and resume parsing previous command
+ 'dig hole' should work
+ "fill hole" (with pile of earth) (by moving pile of earth into hole)
+ "push pile and spade in hole" asserts because when it tries to move the spade, the pile no longer exists (or rather, has no parent)
+ "push leaves into bag; push leaves out of bag" - the out of part fails (but "move out of" would work) - should be an avRemove
+ "take a leaf" as a way to take a leaf from pile?
+ "move all but inventory" should work
+ "move foo to bar", if bar is not nearby but is far away (e.g. in a threshold), should probably just move foo next to bar, rather than into bar or onto bar
+ 'look under' should move things if they are bigger than what they are on
+ 'look under' should give more detail when you're under the thing, e.g. maybe FParent.GetBasicDescription().
+ 'look' when inside an object that usually hides its contents (e.g. a pile) still hides its contents when in the pile - do we need FromOutside for GetDescriptionIn()?
+ "look closer" should ask what part you want to look closer at ("look closer" "what do you want to look closer at?" "look closer at tree" "do you want to examine the leaf, or the branch?"
+ "look through opening"
+ "look in bag" tells you you see a bag. maybe we need a different method for looking at the inside of something than the outside of something. See also the TODO regarding whether things like bags should have surfaces.
+ "look up" from inside a hole in a room with an up landmark sky sees the sky, but "examine sun" etc doesn't work (even though it works when on the ground in that room)
+ "take all there is"
+ "take all again"
+ "take leaves with spade"
+ "move leaves through door", "push pile through door" => "through" is not a known preposition
+ "put x under y" should say (by putting y on x) (first taking y)
+ "find a b c" if it finds several says "which c do you want to find", not "which a b c do you want to find"
+ "find" uses the LongDefiniteName now, but it really should only do so when the DefiniteName is ambiguous
+ support finding multiple things?
+ "find rim" with many players around: "Which rim do you mean, the rim of the bag of holding, the rim of the bag of holding, or the rim of the bag of holding?"
+ if you're in some thing X (or on something in some thing X), and you find X, it tells you about X's parent, which you can't reference.
It should instead say something like "you're in the X" or some such.
+ "look on" should list what's on something (maybe including things like engravings?)
+ "examine inside" should work like "look in"
+ things claim to be "part of the ground" when they are partOf the ground and you try to take them, which looks weird.
+ need to support the idea of an arch being over something
+ "empty bag"
+ "empty bag on table"
+ if a container is closed and you try to put something inside it, it should implicitly try to open it
+ dropping something should put it at the end of the list, not the start
+ "drop things down" when there's a down exit
+ automatic piles
- when you drop multiple compatible things on the same surface, they should spontaneously generate a pile to contain them
- the pile should vanish when there's only one of them left
- the pile can be clever, e.g. a pile of money should summarise the value of tender (coins, bills) in the pile
+ tpAutoDescribeDirectional seems a bit dubious. Maybe use an lo* constant instead, or something? does that even make sense?
+ find hole says "The hole is in the flat ground." which sounds a bit weird.
+ "read sky" should say "in" not "on" -- maybe base this on whether something has a surface? consider book (in), bag (on) (could also be related to "at the playground" vs "in the shop")
+ "hang door in doorway", maybe have a tpHangingFrom which "hang" defaults to trying?
+ add a tpStuckTo for notes, then autodisambiguate whether something should be put tpOn or tpStuckTo
- notes vs buckets being put "on" a door mean different things
- allow notes to be stuck to doors even when closed
+ making sandcastles or other shapes out of piles of earth, or other malleable materials
+ TThing.Open() and TThing.Close() should probably be sensitive to GetFeatures returning tfOpenable and/or tfClosable
- consider these objects, neither of which report tfOpenable in GetFeatures:
> open sky
The sky is already open.
> close sky
How to close the sky is not readily apparent.
> open sun
How to open the sun is not readily apparent.
> close sun
The sun is not open.
+ If there's a plastic fork, a plastic knife, and a plastic spoon, "take plastic silverware set" should take all three, not ask which one. If there's a plastic fork and knife, and a metal fork and knife, "take silverware set" should ask which one, plastic or metal, not take all four.
+ "push ... to ..." doesn't check that the target isn't on the list of things to push
+ "climb on opening" doesn't have any problem putting you on the opening ("put foo on opening" also works)
+ "put foo in opening" for stairwell doesn't work (asserts)
+ "dig; drop bag; push all in hole" asserts (pile parent is nil) because it tries to push the bag into the hole after the hole stopped existing
+ "dig; put all in pile; push all in hole" does a null deref deep in list code
+ fill your inventory, climb on a player, take something else, asserts "Cannot put on parent."
+ pushing something too big through an opening correctly checks sizes, but pushing it onto an opening does not.
NETWORK
+ password command?
+ pronun command / "i am male", "i use singular they pronouns" / UI?
+ If you send too much data at once, the socket's write buffer is filled, which causes the socket to have an exception (ETryAgain), which causes the game to abort.
+ Sometimes the server just dies silently (killed by the kernel?).
ILLUMINATION
+ Looking should check for illumination by walking all the objects (FUp-not-in-FChildren would need special treatment... maybe some TLocations can contribute light?)
- light contribution depends on Subject and Perspective
- light is PitchBlack, Dark, Lit; stop walking after getting Lit
- also check for FChildren that block Visibility from Perspective to Subject (e.g. smoke, fog)
FOOD
+ "eat garlic"
+ "go eat": I don't understand how to go "eat".
+ "feed MacGuffin": I don't understand how to "feed".
THING SEEKER IMPROVEMENTS: LOGIC
+ make the thing seeker disambiguate on features too. For example:
- "There is a brown mug here. There is a brown door here." "Open brown." -> should assume the door (and disambiguate)
- "There is a brown mug here. There is a brown door here." "Take brown." -> should assume the mug (and disambiguate)
- "There is a small door and a big door here. The small door is open." "Close door." -> should assume the open small door (and disambiguate)
+ "put everything in rucksack" => put (everything but (rucksack)) in (rucksack)
+ "drop all" when holding something that contains something drops the contained things separately (first taking them)
+ "drop any two balloons" should pick two balloons that you're holding, not any two anywhere including those on the ground
- this basically means reworking how the "scope" mechanism works so that it implicitly filters each overall clause, if they all would still match something
- might make sense to change it to a simple mode: unrestricted, only from self, only from not self, expecting only one [added that last one already]
- other examples: "drop coins" when there's some on the ground, picks them up then drops them
- "drop any four coins" when i'm holding 3 and there's 3 on the ground...?
- "drop all that is a coin" shouldn't drop those on the ground
- worse: given red and blue tables, "take red then drop table" asks which table to drop
+ find a solution to:
- "There is an orange here. There is an orange mug here." "Take orange." "Which orange do you mean, the orange or the orange mug?"
- Trees all over the place. "Examine tree." "Which tree do you mean, the tree, the tree, the tree, the tree, the tree, the tree, the tree, or the tree?"
- ideally, use FDirectionalLandmarks if possible - "the tree to the north"; should also happen for the arches
- as a last resort, number them. "Which tree do you mean, the first tree, the second tree, ...".
+ every time we mention something, Thing.UpdatePronouns(Perspective) (Perspective has the pronoun state)
THING SEEKER IMPROVEMENTS: VOCABULARY
+ "take everything THAT IS FROM an arch"
+ "shake all fruit THAT ARE NOT ON the plate"
+ "take everything THAT IS OPEN"
- add a feature to pattern thingies that allows a callback to check if a particular word is on to support "open bottle" vs "closed bottle"
+ "FROM WITHIN <object>", "FROM INSIDE", "FROM ATOP", etc
+ "look at arch TO the north" -- derived from the FDirectionalLandmarks
- "look at X Y" where Y is "to the north", "to n", "to north", "in the north", "in n", "in north"
+ "take all bottles EXCEPT bottles from table"
+ "take all bottles from tables, chairs, floor BUT NOT blue bottles"
+ "take blue from red BUT NOT big" - BUT NOT, AND NOT are equivalents of ThatIs for exclusion
+ "take the bottle and the bag THAT IS OPEN and frogs and cats from the table BUT NOT the blue ones that are small"
+ "take the bottle, the bag THAT IS OPEN, frogs, cats from the table, BUT NOT the blue ones THAT ARE small"
+ "put MY penny in MY bag" -- "my" should only look in one's inventory
+ "find front side of door" says it doesn't understand how to find things "of", but the "of the door" is added by being tpAmbiguousPartOfImplicit
- should support all the things that TThing.GetLongDefiniteName adds
UI
+ Replace anything that uses AvatarMessage but should be broadcast with a broadcast
+ It would be good to merge disambiguation messages, so that "put brown in bag" "(the brown mug) (the black bag) (first taking the brown mug)" became just one statement
+ Disambiguation of things that fail should say "try to", e.g. "(first trying to take the mountain)"
+ Handle multiples of things, so that you can have "take three coins" and it doesn't say "Coin: Taken" "Coin: Taken" "Coin: Taken" but "You take three coins" or some such.
+ Answering questions: each time we say "which do you mean...", if the player just replies, it should try again until getting to the question then try to use the answer
+ "look around" should do the same as "look"
CODE
+ Check all the warnings
+ share matchers across things
- either explicitly, or have the compiler use a hashtable to return the right one
- matchers will need to be reference counted
- make sure to share objects when writing to / reading from disk
+ track strings when reading to/from disk (e.g. so that common descriptions are shared in memory)
+ move build.sh options to a configuration file
+ log exceptions other than parse errors - abstract out the logging code
+ see if it makes sense to change TThing.Navigate() and TThing.GetLookTowardsDirection() to instead use a GetAtomForDirection()-like approach
+ replace HINTS OFF and WARNINGS OFF pragmas with BOGUS pragmas
+ import ../../isd/server/src/infrastructure/corewebsocket.pas and ../../isd/server/src/infrastructure/corenetwork.pas
BLUE SKY (q.v. http://mud.co.uk/richard/imucg2.htm)
+ fluids: "what happens when a jug containing five litres of water is
poured into a bowl with a three litre capacity"
+ smoke pouring from room to room
+ temperature
+ "If 1,300 matchsticks have been made into a model of the Eiffel
Tower, and 700 are removed, does that leave a 600-matchstick model?
What if 1,299 were removed? What if only 1 was? What if the
matchsticks were made into something else?"
+ small rooms, like inside a grandfather clock
MORE NOTES (see copies in archives/)
http://www.brasslantern.org/writers/iftheory/tads3andi7.html
http://www.brasslantern.org/writers/iftheory/i7observations.html
http://www.brasslantern.org/writers/iftheory/autonomousnpcs.html
http://www.mud.co.uk/richard/imucg2.htm
http://mud.co.uk/richard/RingBearers11.pdf