| |
|
|
|
| |
|
| 151. Support easy internationalisation of Banner( ), VersionSub( ), RunTimeError( ) and PrintCommand( ). |
|
| |
|
| 150. Give better responses to verbs like RUB when the subject is animate. |
|
| |
|
| 146. Allow ASK ABOUT X, to infer most recently referred to NPC. Also consider topic management as extension or core library. |
|
| |
|
| 145. Add a blorbifier to the compiler. |
|
| |
|
| 139. Provide -P compiler switch to list actual paths used for input, output and all included files (eg, am I using the verblibm.h that I thought I was?). |
|
| |
|
| 138. #If[n]def directives should support && and ||. |
|
| |
|
| 137. The implicit messages produced by 'INSERT|PUTON worn' should match those from 'DROP|EAT|THROWAT worn'. |
|
| |
|
| 136. Compiler to ignore completely (ie not complain about errors in) code which has been #Idfed'd out. |
|
| |
|
| 134. Increase the Z-machine dictionary resolution beyond nine characters. |
|
| |
|
| 133. TAKE ALL additionally to attempt objects on supporters and in open [transparent] containers. |
|
| |
|
| 132. Make VERBOSE the default mode. |
|
| |
|
| 131. Provide a very basic volume/weight filter system for containers and supporters, or at least an Entry Point to facilitate this. |
|
| |
|
| 130. Add WordValue(wordnum), NumberWords( ), GetKeyBufLength( ) and SetKeyBufLength( ) functions to complement the platform-independent WordLength(wordnum) and WordAddress(wordnum). Also add optional parameters to all of these so they can work on other parse arrays besides 'parse'. |
|
| |
|
| 128. When a new identifier is expected, but the compiler finds an already defined one, it should give the location of the previous definition. Also, the message itself should be reworded for clarity. |
|
| |
|
| 127. Add grammar for GET OUT OF, since it appears in an English.h message. |
|
| |
|
| 126. If you try to give something to a creature that's moved away, you get 'You can only do that to something animate' rather than 'You can't see that here'. GIVE CHEESE TO MOUSE after the mouse has gone back in its hole suggests it's still around (or you've made a programming error), or GIVE BISCUIT TO GIRAFFE (at the start of 'Curses') that there are somehow dead giraffes about. There should perhaps be a test for the creature to be present before checking whether it's animate or not. |
|
| |
|
| 124. Allow AND to mean the same as THEN when unambiguous. |
|
| |
|
| 123. The parser prefers to TAKE an object the player is already holding rather than one on a container or supporter, causing some player frustration unless a ChooseObjects( ) is provided. The rules in S33 of DM4 should be changed so that A is set to 0 for Take. (This can be done by adding one line 'if (action_to_be ~= ##Take)' before 'a_s = SCORE__NEXTBESTLOC;') |
|
| |
|
| 122. You can take an item from the SACK_OBJECT but you can't drop an item directly if it's in the sack; instead you get the rather unhelpful 'You haven't got that'. It would be good to at least get a response like 'You need to take that out of the sack first' (or whatever). |
|
| |
|
| 121. If the parser attempts to put something in the SACK_OBJECT but fails, it should try another item. (See also Suggestion 82) |
|
| |
|
| 120. The 'You need to be holding the thing before you can...' for PutOn and Insert can be an annoyance, e.g., when the object is in a sack object. Maybe the action routines should include an implicit take. |
|
| |
|
| 119. I especially dislike the name of the new Length( ) routine. StringSize( ) would be better. |
|
| |
|
| 117. I think TAKE ALL shouldn't attempt to take scenery objects (or animates). |
|
| |
|
| 116. CONNECT and DISCONNECT should be synonymous with ATTACH and DETACH. |
|
| |
|
| 115. An #Undef directive to cause a previously defined constant (only) to become undefined. |
|
| |
|
| 114. The #End directive in a #Included file should simply exit from that specific inclusion rather than terminate the entire input stream. |
|
| |
|
| 112. Allow "male" and "female" to be assignable to non-animate things. This will make it easier to implement dead bodies. |
|
| |
|
| 111. #Include the file named by constant MASTER_INCLUDE four times: before Parser and after Parser, VerbLib, and Grammar. |
|
| |
|
| 109. Enhance #Include by: taking a "?" prefix to mean ignore a missing file; accepting a string constant as a filename. |
|
| |
|
| 107. For games that don't want an automatic LOOK at the beginning of the game, allow programmers to define a constant (NOINITIAL_LOOK) to deactivate it, so they don't have to edit the libraries or replace a large part of code. |
|
| |
|
| 106. Move Uppercase( ) and Lowercase( ) to English.h, to assist Cyrillic, Polish, Greek etc porters. The current routines work only for ISO 8895-1, and need replacing with other character sets. |
|
| |
|
| 104. Enhance +charset_map by: searching +include_path; supporting hex numbers; treating a mapping of zero as 'pass this char through without change'. |
|
| |
|
| 103. Support an Epilogue( ) entry point, called at end-of-game between DeathMessage( ) and ScoreSub( ), to permit additional commentary when a game is over. |
|
| |
|
| 102. Remove the compile- and Strict runtime error for writing to the 0th entry in a string or table array -- it goes beyond protective to become intrusive and inconvenient. |
|
| |
|
| 101. Optionally, support serial (aka Oxford) commas in the listmaker: some favor the result, some think it fustily eccentric, and some can't abide it. |
|
| |
|
| 100. Make the property name a parameter to RunTimeErrors 5 and 11. |
|
| |
|
| 99. Extend the Replace directive such that if the compiler encounters Replace routine newname; then the compiler transparently renames routine as newname when it is encountered (rather than skipping over it as happens now). Only the routine definition is so renamed, calls to it are not. Often a replaced routine ends up behaving almost exactly like the original, but with a minor change, usually because the coder does not actually want to alter the normal semantics of the routine in any way, but merely wants to do something when that routine is being called - "hitching a ride", as it were. This change would facilitate this. |
|
| |
|
| 95. There are a lot of rules that stop a player from doing stuff, like you can't get off something you are not on. If you try to make a NPC responding to orders, you have to more or less write all these rules from scratch. It would be helpful if there existed somewhere the source code to an NPC that responds to all the orders, by which I mean all the default commands that a player character responds to, and which follows all the rules that a default player character do. Then it would be fairly easy to edit the source code into the NPC one wants. |
|
| |
|
| 90. Make Exit actions consult the before property of any enterable object, the way Go actions do. This seems more intuitive, and is unlikely to break existing code, since objects shouldn't have existing Exit cases. |
|
| |
|
| 88. The description of PrintCapitalised( ) seems to suggest it works the same way as PrintOrRun( ), only it can capitalise the output as well. I noticed however, that it doesn't return the value returned by the routine if a routine was indeed called. |
|
| |
|
| 87. It would nice if there could be some way of notifying a location that an actor has just left it; the Go action is offered to X's before property and Y's after property as now, but (say) a GoneFrom fake action is also sent to X's after routine. |
|
| |
|
| 86. Make x=obj.prop synonymous with x=obj.&prop-->0 if the property happens to be an array. |
|
| |
|
| 85. How about treating 'listen' 'smell' and 'taste' the same as 'touch'? At a minimum, tasting should at least require an object to be touchable. Smelling yourself or tasting or smelling a creature should also generate special responses. |
|
| |
|
| 82. Call before_implicit ##Insert from AttemptToTakeObject( ) for each object about to be placed in SACK_OBJECT; return true to reject. |
|
| |
|
| 81. Define the external names of the CompassDirection objects using their short_name properties, so that they can be changed at runtime. Also, move the values embedded in LanguageDirection( ) into XXX_to properties of those objects. |
|
| |
|
| 80. Sensible substitution of "actor" for "player" in select verb routines (and handlers). |
|
| |
|
| 76. Add an optional flag parameter to YesOrNo( ), which prevents the routine from redrawing the status line (eg, when within a menu). |
|
| |
|
| 74. Support for even larger Z-machine versions: double v6 (1088K) and double v8 (1024K). |
|
| |
|
| 72. The compiler error for undefined action routines, eg 'Error: There is no action routine called "TaekSub"' should quote the location where ->Taek or <Taek> or ##Taek first appears. |
|
| |
|
| 70. Infix support for Glulx targets. |
|
| |
|
| 67. An intelligent UNLOCK verb, so that if the player is carrying the required key to unlock an object, the UNLOCK command should use it to unlock the object automatically. |
|
| |
|
| 65. It would be nice to use #Ifdef constructs within a class definition to eliminate entire methods. |
|
| |
|
| 59. How about a separate file containing all of the Inform compiler's messages, so that the compiler itself (and any output generated by the veneer) can be translated into other languages? This might not be as useful for the compiler warnings/errors, but the veneer errors at least should be translatable. |
|
| |
|
| 56. Better code generation for the constructs objectloop (x ofclass y), objectloop (x provides p) and objectloop (x .& p). These can be determined at compile time, so it is possible to (say) autogenerate an array and simply iterate over it for the objectloop. [Both this and the previous suggestion trade off writable memory for speed, and getting the balance right is the tricky part. Since writable memory is precious, we'd almost need a pragma or compiler switch to override the compiler's decision.] |
|
| |
|
| 45. An optional better form of objectloop: objectloop( x : (complicated expression involving x) ) { body; } , loops over objects, setting x to each, then executes the body statement if the complicated expression is true. This stops you needing to make x the first variable mentioned in the expression. |
|
| |
|
| 30. A variable representing the PC's posture (standing, lying, sitting etc.) |
|
| |
|
| 23. Provide an "assert" verb. |
|
| |
|
| 20. The use of "$..." to introduce compiler options is intensely annoying on *NIX systems that use "$" as an environment variable indicator, e.g. $PATH -- it requires the constant use of quotes to avoid unpleasant and confusing results. |
|
| |
|
| 6. Provide tighter control over the scope of TAKE ALL. |
|
| |
|
| 4. Provide simple control over "The object is currently switched on/off" style messages. |
|
| |
|
| 1. Introduce a default Incompatibility mode, slightly similar to Strict mode, in which the compiler rejects (as errors, not warnings) the use of constructs from earlier versions of Inform. For example: "\" in multi-line strings; "xxx" instead of 'xxx' in name properties and Verb definitions; #n$X instead of 'X//', etc. |
|