Path: utzoo!attcan!uunet!mcsun!sunic!chalmers!myab!lars From: lars@myab.se (Lars Pensj|) Newsgroups: alt.mud,news.groups Subject: Re: UltiMUD Message-ID: <481@myab.se> Date: 8 Feb 90 14:30:10 GMT References: <9510@medusa.cs.purdue.edu> <4107@jarthur.Claremont.EDU> <1457@husc6.harvard.edu> <637@m1.cs.man.ac.uk> <13274@watcgl.waterloo.edu> Reply-To: lars@myab.UUCP (Lars Pensj|) Organization: Myab Gothenburg, Sweden Lines: 118 There are some discussions about how a multi user dungeon really should be done. I have made one, and it works, although there are of course lot of bugs yet. My game can be seen as a cross between Abermud and tinyMUD. It is up and running for public access, but as I don't consider it complete yet, I am not ready to go public with the address. Any one interested to try can mail me a request. My game is called LPmud. IDEA BEHIND THIS GAME. I played Abermud a lot, and wanted to do something better (who don't). 1. A wizard can extend the game. 2. The game can be extended on fly, without rebooting the mud. 3. There are no difference between objects. Rooms, players and things are just objects. 4. All objects are specified in interpreted C. The specifications are compiled (loaded) first time they are referenced. 5. There are no player parser. All commands are defined by the objects. For example, the knife defines the command 'wield', and the leather jacket defines 'wear'. An object defines a command by associating it with a local function, defined in the object. When the user types that command, the corresponding function will be called. If the user types 'wear jacket', then "jacket" will be sent as an argument to the wear function in the jacket object. If the user types 'wear plate', the jacket wear function will detect that "plate" != "jacket", and return false. Then, another 'wear' command is tried, untill success. When the user drops the jacket, all commands are removed that was associated with that object. 6. The rooms are just objects that defines some commands like 'look', 'east', 'north' and such things. When the user then types 'north', the room function will do something to the player. 7. An object may define a function "heart_beat". It will be called every two seconds. This can be used for automoving monsters, torches burning down, time delayed traps and healing players ... 8. The most complex object is the player object. It defines commands like "get", "smile" and "kill". 9. When a player becomes wizard, he will get a small portable castle. He can drop this anywhere, and it will grow and become a full scale castle. He can then rename it and extend it. It is okey to rename it to "entrance to hell" or anything. 10. The language that defines objects are similar to C. It is interpreted. 11. There is a builtin ed-compatible editor for wizards creating objects. There is also 'ls' and 'cat'. 12. There are no global reset. Every object can define a local reset() which will be called some time. This is especially useful for rooms that wants to restore a treasure or relock doors etc. Comments about the result: A wizard is very powerful, and can really do anything. That means he has a great resposibility. I choose the language C, because why invent a new language that is hard to learn ? Performance: There are yet no problem with reponse to player actions. It is really MUCH better than Abermud file communications. There might be a problem with the size of the program when all object definitions arer loaded. An object takes on average 2000 bytes. All object definitions are first run through the C preprocessor, and then loaded. They are only loaded on demand, though. The machine, a IBM PC-RT has only 4 Mbytes. When someone starts X-window, the game can get slow. As I am doing this myself, what is really lacking is the size of the adventure. Currently there are only 60+ rooms, and slowly expanding. The game uses a port on an internet address, and thus any number of players can play (at least more than number of pty's). If you are intrested in helping with designing more adventures, please tell me. As an example of how general this game is: A player is saved when he quit by just storing all global variables from the player object in file named from his player name. There is an elevator that can move a player between levels. It just has a variable "level" and "dest_level" and "time_until_arrival", and so on. A monster can catch all "talk" and be programmed to activate in any way. There is a Post Office, where players can send and read mail to other players. There is a shop where you can sell and buy things. Most things have values. The above examples all uses only the standard predefined language. Conact me if you have any questions or ideas. lars@myab.se -- Lars Pensj| lars@myab.se