May 1999
- Object server. Quzah [softhome]
- Censorship & Its Impact On World Immersion J C Lawrence
- OT: Ethics v Law Greg Munt
- Virtual v Artificial Worlds Greg Munt
- Virtual v Artificial Worlds Matthew Mihaly
- Custom Server Roll Call? Ola Fosheim Grøstad
- Custom Server Roll Call? Caliban Tiresias Darklock
- Custom Server Roll Call? Wes Connell
- Custom Server Roll Call? David Bennett
- Custom Server Roll Call? Koster, Raph
- Custom Server Roll Call? Greg Munt
- Custom Server Roll Call? The Arrow
- Custom Server Roll Call? Alex Stewart
- Custom Server Roll Call? Nathan F Yospe
- Custom Server Roll Call? Caliban Tiresias Darklock
- Custom Server Roll Call? Ola Fosheim Grøstad
- Custom Server Roll Call? Jon A. Lambert
- Custom Server Roll Call? Ola Fosheim Grøstad
- Custom Server Roll Call? Jon A. Lambert
- Custom Server Roll Call? Matthew Mihaly
- Custom Server Roll Call? Jon A. Lambert
- Custom Server Roll Call? Ola Fosheim Grøstad
- Custom Server Roll Call? Jon A. Lambert
- Custom Server Roll Call? Chris Gray
- Custom Server Roll Call? Marc Hernandez
- Custom Server Roll Call? Greg Munt
- Custom Server Roll Call? Jon A. Lambert
- Custom Server Roll Call? Matthew Mihaly
- Custom Server Roll Call? Jon A. Lambert
- Custom Server Roll Call? Ola Fosheim Grøstad
- Custom Server Roll Call? J C Lawrence
- Custom Server Roll Call? Ling
- Custom Server Roll Call? Jon A. Lambert
- Custom Server Roll Call? Emil Eifrem
- Custom Server Roll Call? Niklas Elmqvist
- Custom Server Roll Call? Chris Gray
- Custom Server Roll Call? Emil Eifrem
- Custom Server Roll Call? Chris Gray
- Custom Server Roll Call? Emil Eifrem
- Custom Server Roll Call? Chris Gray
- Custom Server Roll Call? Caliban Tiresias Darklock
- Custom Server Roll Call? J C Lawrence
- Custom Server Roll Call? Emil Eifrem
- Custom Server Roll Call? Marc Hernandez
I decided to display my minimal server implementation to the
world. I keep wanting to then talking myself out of it... ahh well. Much
of what I am doing is for learning about programming multiuser systems,
but I would like to play my own system eventually. It is not as
elegant or as simple as I would like, or as any other system.
(Comments about Ola's message then custom server detail below)
On Sun, 2 May 1999, Ola Fosheim [iso-8859-1] Grøstad wrote:
> I think I'm ditching my design starting from (almost) scratch again :-) This
> must be the third or fourth time or so. The worst thing is, I'm getting
Yeah I have been doing this also. I decided to stop running and
implement. My first and second passes were under C++ with the later one
(or is it two now?) under Java[1].
> back to where I was *4* years ago regarding what I want to do now. The
> basic reason for this is that I realize that I want to make it accessible to
> handicapped people, to blind people and others who cannot easily use many of
> the newer inherently graphical systems. Which pretty much rules out the
> hardcore simulationist approach which I have been following so far. So, I'm
Hmm. Why would accessability have a dependancy on game mechanics?
You still have objects and such to do stuff with I assume.
> basically back at the scratchpad (well, I always liked design better than
> implementation :*). Maybe I'll come up with something that will take less
> than 3-5 man years to design and implement this time!! Hahaha... I haven't
> been very good at that so far. :-X
Do you actually get much on paper? I find I get a bit then decide
to go implement because I do not know how this or that will work.
Probably just immaturity in designing multiuser servers.
> So, what are you custom server guys doing? Have you been able to stick to
> your vision, or has it changed? I see that Ben keeps pushing ScryMUD, but
> what about Jon and the roleplaying supporting client, JC, Caliban, Ling,
> Yospe and all the others? Are you "pushing" (implementing) or "butching"
> (redesigning)?
> It would be interesting to see what you are doing and where you are going!!
> A mud-dev custom status quo, sort of. Please share!
Whew ok. I took a look at my codebase and it is not in as bad of
shape as I thought. I am currently 'pushing' because I want something to
play with rather than endless bits of code that do not _really_ do
anything. It is currently 2500 lines, supports persistant objects and
users and allows talking.
At the core the system is driven by events. Everything that
happens has an event that makes it happen. Events can be targeted, area
or generic. Targeted events effect one object (called components in my
system). Generic events are generally system event. For example I
have a 'ShowThreads' event that spits out threads to the log file. Area
events effect a region of space. For example sound or saying something
are area events.
All events pass through multiple filters. Filters can eat events,
modify them or just pass them on through. On sending, the event passes
through outgoing filters on the producer. From there it depends on the
event type. Generic events usually then just do their action. Targeted
events then pass through the targets filters and then does it action.
Area events are a bit different. They get produced and filtered
at production like other events. Then they get filtered by the area they
are in. The area filters them and decides how to propagate them. Then
the area passes the events to the various objects that care.
For example. Lets say we have a mouth component. This mouth can
produce 'say' events. So it produces one "Hello". But you have a gag
filter. This take that event and returns one with 'm's "Mmmmm". The area
just passes it to all ear objects. Your ear object has a hearing device
(which installed a filter in the ear) which takes a string and changes it
to all caps "MMMMM".
For my object system (objects are called components) I wanted a
uniform handling of abilities. Thus components are really just
'containers' for Attributes. An attribute is where all the work gets
done. Some attributes:
Physical: maintains where a component is, including its connectedness.
Material: Any materials a component is made of.
Contain: this component can contain others that can be contained.
ContainedBy: this attribute maintains who it is contained by
(I use the 2 above for areas also. Areas can contain other areas.)
Mind: A mind controls a body. Some minds include: Text- this is a telnet
control for a body, Away- this is for controlled bodies that do not have a
connected human, NPC- for smarter NPC characters, MOB- for simple run
around creatures.
Rather than use simple pointers between components I have Slots.
Slots can have constraints placed on them. Another component is placed in
a slot assuming it fits the constraint.
My current simple object model looks like so:
Basic:
Is the basic component. Anything that is 'physically' in the
world will inherit from this object. Has position. Is containedby an
area.
Character:
Has a 'body' slot (which will only take objects of type Body).
Has a mind attribute. Shell helper. An interpreter for a MindText.
Server:
Dispatches events. Holds a list (hashtable on ID) of components.
Body:
Every basic body will inherit from this.
BodyHuman:
Has slots to ear, mouth, movment.
Ear:
Can hear 'sound' events.
Mouth:
Can emit sound events. Currently the Body is emitting the say
events. Need to fix that.
Taking control of a body is as simple as changing the 'mind' of
the character. If the character is reincarnated or turned into a goat you
just change the characters 'body'.
There are a few downsides. The design, while powerful seems a bit
complex. Of course this might be as simple as it can be (to support the
things I wish to do with it). The persistance system is a bit brittle in
that if I change an object (in the java sense) it will refuse to load that
object. This can be fixed by versioning when it gets a bit more stable.
Speed wise I think it can be very fast (on both a complexity level
and a raw speed level). Making it into a distrubted system is an option
to get much more performance out of it. In that case it has the same
problems as other systems. With the event based architecture messages
could easily be passed between servers if needed. Since objects are at
their most basic level streamable, object migration would be 'easy'[1] to
add.
I am currently looking to add a gaming system on top of it. In
that regard I have not done much. But I have realized the basic system is
fairly sound and should support one[3]. I have a simple area system setup
(one area). You can login and talk. Currently the system tells you the
Unique ID of the person that is talking to you. I have considered writing
a parser to read in Diku areas and simulating some of the objects therein.
<shrug>. I have been reading The Lord of the Rings. Made me want a cool
RPG to go play in.
Oh yeah. It is for a graphical system but will support anything.
I currently have a text based system running atop it, since that way I do
not have to develop a client right away.
Wow. You read to here? Even I fell asleep halfway through :-).
Marc Hernandez
[1] I think java makes an excellent server (and client) base. I like
writing stuff in the language (I used to hate it). Compiling other
languages to java byte code is not too difficult. It is slow, but using
distribution can help relieve that (and IBM AS400's have very good
benchmarks on running java byte code due to some architectural reasons).
[2] In the 'you do not have to edit every single object in the system
sense'
[3] I got a little discouraged in february since I was the only one doing
anything with this while others that wanted to 'help make a game' did not
do anything. - Custom Server Roll Call? Ola Fosheim Grøstad
- Custom Server Roll Call? Jo Dillon
- Custom Server Roll Call? Ola Fosheim Grøstad
- Custom Server Roll Call? Marc Hernandez
- Custom Server Roll Call? Ola Fosheim Grøstad
- Custom Server Roll Call? Marc Hernandez
- Custom Server Roll Call? Adam Wiggins
- Custom Server Roll Call? Matthew Mihaly
- Custom Server Roll Call? Hans-Henrik Staerfeldt
- Custom Server Roll Call? Ola Fosheim Grøstad
- Custom Server Roll Call? Caliban Tiresias Darklock
- Custom Server Roll Call? Caliban Tiresias Darklock
- Custom Server Roll Call? claw@kanga.nu
- Custom Server Roll Call? Emil Eifrem
- Custom Server Roll Call? Chris Turner
- Custom Server Roll Call? Ling
- Custom Server Roll Call? Caliban Tiresias Darklock
- Custom Server Roll Call? Jay Carlson
- Custom Server Roll Call? Caliban Tiresias Darklock
- Custom Server Roll Call? Ling
- Interesting dilemma Peck, Matthew x96724c1
- Interesting dilemma Caliban Tiresias Darklock
- Interesting dilemma Quzah [softhome]
- Interesting dilemma Brandon A Downey
- Interesting dilemma Shawn Halpenny
- Interesting dilemma Matthew Mihaly
- Interesting dilemma Benjamin D. Wiechel
- Interesting dilemma Koster, Raph
- Interesting dilemma Wes Connell
- Interesting dilemma Mattias Lönnqvist
- Interesting dilemma Mik Clarke
- Interesting dilemma Joel Kelso
- Interesting dilemma Ronan Farrell
- Harvey's Rules of Immship John Hopson
- Confiscating items (Interesting dilemma) Ola Fosheim Grøstad
- AW: Interesting dilemma Hofbauer Heinz
- Virtual Property J C Lawrence
- Virtual Property Koster, Raph
- Virtual Property Jon A. Lambert
- Autogenerating maps from muds using cardinal directions for exits? Ben Greear
- Discussion of large server IO handling desing J C Lawrence
- Planes of existance Quzah [softhome]
- Planes of existance Greg Munt
- Planes of existance Quzah [softhome]
- Planes of existance Caliban Tiresias Darklock
- Planes of existance Ben Greear
- Planes of existance Caliban Tiresias Darklock
- Planes of existance Greg Munt
- Planes of existance T. Alexander Popiel
- Planes of existance Ola Fosheim Grøstad
- Planes of existance Matthew Mihaly
- Dynamically changing room descriptions Ronan Farrell
- Dynamically changing room descriptions Mik Clarke
- Dynamically changing room descriptions Ben Greear
- Dynamically changing room descriptions Koster, Raph
- Dynamically changing room descriptions Richard Bartle
- Dynamically changing room descriptions Matthew Mihaly
- Dynamically changing room descriptions Travis Casey
- Dynamically changing room descriptions Travis Casey
- Dynamically changing room descriptions Ola Fosheim Grøstad
- Dynamically changing room descriptions Jon A. Lambert
- Dynamically changing room descriptions Ola Fosheim Grøstad
- Dynamically changing room descriptions Eli Stevens {KiZurich/GreySylk}
- Dynamically changing room descriptions Jon A. Lambert
- Dynamically changing room descriptions Ling
- Dynamically changing room descriptions Christopher Allen
- old fight system I toyed with Koster, Raph
- APE 0.2.1 J C Lawrence
- OT: robots, agents and emotions Ola Fosheim Grøstad
- OT: robots, agents and emotions Ola Fosheim Grøstad
- Time Discontinuous MUD Ling
- Semi-OT: International intellectual property right (was: Custom Server Roll Call?) Custom Server Roll Call?) Ola Fosheim Grøstad
- Semi-OT: International intellectual property rights Ola Fosheim Grøstad
- Marc Hernandez' Server Greg Munt
- Marc Hernandez' Server Jay Carlson
- Marc Hernandez' Server Caliban Tiresias Darklock
- Marc Hernandez' Server Travis S. Casey
- Marc Hernandez' Server Adam Wiggins
- Marc Hernandez' Server Marc Hernandez
- Marc Hernandez' Server qitelremel@hotmail.com
- Scry 1.9.1 (Feature Freeze) released. Ben Greear
- The distinction between magic spells and magic abilities Greg Munt
- The distinction between magic spells and magic abilities Matthew Mihaly
- Multi-threaded mud server. Ross Nicoll
- Multi-threaded mud server. Caliban Tiresias Darklock
- Multi-threaded mud server. Jon A. Lambert
- Multi-threaded mud server. Jo Dillon
- Multi-threaded mud server. Travis S. Casey
- Multi-threaded mud server. Jon A. Lambert
- Multi-threaded mud server. Chris Gray
- Multi-threaded mud server. Chris Gray
- Multi-threaded mud server. Jon A. Lambert
- Multi-threaded mud server. Mik Clarke
- Multi-threaded mud server. Chris Gray
- Multi-threaded mud server. Mik Clarke
- Multi-threaded mud server. Ross Nicoll
- Multi-threaded mud server. Jon A. Lambert
- Multi-threaded mud server. Ross Nicoll
- Multi-threaded mud server. Ross Nicoll
- Multi-threaded mud server. Ross Nicoll
- Multi-threaded mud server. Jon A. Lambert
- Multi-threaded mud server. Ross Nicoll
- Multi-threaded mud server. Caliban Tiresias Darklock
- Multi-threaded mud server. Mark Gritter
- Multi-threaded mud server. Ross Nicoll
- Multi-threaded mud server. Travis S. Casey
- Multi-threaded mud server. Ola Fosheim Grøstad
- Multi-threaded mud server. Ross Nicoll
- Multi-threaded mud server. Ola Fosheim Grøstad
- Multi-threaded mud server. David Bennett
- Multi-threaded mud server. Ross Nicoll
- Multi-threaded mud server. Jon A. Lambert
- Multi-threaded mud server. Travis Casey
- Macro languages Caliban Tiresias Darklock
- LOTR and Mud [was: Marc Hernandez' Server] Marc Hernandez
- Noise: boys will be boys (was Multi-threaded mud server.) Ola Fosheim Grøstad
- Kanga.Nu has finally moved... claw@kanga.nu
- Java & MUD servers Laurent Bossavit
- ScryMUD 1.9.3 released. Ben Greear
- ScryMUD 1.9.3 released. Chris Gray
- ScryMUD 1.9.3 released. Ben Greear
- ScryMUD 1.9.3 released. Jon A. Lambert
- [TECHNICAL] How to generate pre-processor output (template problem). Ben Greear
- Searching the archives claw@kanga.nu
- Text Parsing Albert
- Text Parsing Greg Miller
- Text Parsing Kylotan
- Text Parsing Chris Gray
- Text Parsing Albert
- Text Parsing Mik Clarke
- Text Parsing Cynbe ru Taren
- Text Parsing Chris Gray
- Text Parsing Ola Fosheim Grøstad
- Text Parsing Nathan F Yospe
- Text Parsing Ola Fosheim Grøstad
- Text Parsing Mik Clarke
- Text Parsing Marc Hernandez
- Text Parsing Kylotan
- Text Parsing Ross Nicoll
- Text Parsing Kylotan
- Text Parsing Travis Casey
- Text Parsing Chris Gray
- Text Parsing Ross Nicoll
- Text Parsing Travis Casey
- Text Parsing Albert
- Text Parsing Travis Casey
- Text Parsing Mik Clarke
- Text Parsing Ross Nicoll
- Text Parsing Chris Gray
- Text Parsing Katrina McClelan
- Text Parsing Travis S. Casey
- Text Parsing Caliban Tiresias Darklock
- Text Parsing Chris Gray
- Text Parsing Matthew Mihaly
- Text Parsing Caliban Tiresias Darklock
- Text Parsing Travis S. Casey
- Text Parsing Matthew Mihaly
- Text Parsing Travis S. Casey
- Text Parsing Matthew Mihaly
- Text Parsing Travis Casey
- Text Parsing Greg Miller
- Text Parsing Albert
- Text Parsing Chris Gray
- Text Parsing Greg Miller
- Text Parsing Ola Fosheim Grøstad
- Text Parsing Travis Casey
- Text Parsing Caliban Tiresias Darklock
- Text Parsing Chris Gray
- Text Parsing Travis S. Casey
- Text Parsing Chris Gray
- Text Parsing Travis S. Casey
- Text Parsing Ben Greear
- Text Parsing Matthew Mihaly
- Text Parsing Travis S. Casey
- Text Parsing Greg Miller
- Text Parsing David Bennett
- Text Parsing Travis Casey
- Text Parsing Cynbe ru Taren
- Text Parsing Katrina McClelan
- Text Parsing Travis S. Casey
- Text Parsing Greg Miller
- Text Parsing Chris Gray
- Text Parsing Martin C Sweitzer
- Text Parsing Jp Calderone
- Text Parsing Chris Gray
- Text Parsing Ben Greear
- Text Parsing Travis S. Casey
- Text Parsing Greg Miller
- Text Parsing Greg Miller
- Text Parsing Chris Gray
- Text Parsing Matthew Mihaly
- Text Parsing Ben Greear
- Text Parsing Caliban Tiresias Darklock
- Text Parsing Adam Wiggins
- Text Parsing Chris Gray
- Text Parsing Kylotan
- Text Parsing Koster, Raph
- Text Parsing Ben Greear
- Text Parsing Jon A. Lambert
- Text Parsing Adam Wiggins
- Text Parsing Chris Gray
- Text Parsing Matthew Mihaly
- Text Parsing Koster, Raph
- Text Parsing Hans-Henrik Staerfeldt
- Text Parsing Koster, Raph
- Text Parsing Travis S. Casey
- Text Parsing Greg Miller
- Text Parsing David Bennett
- Text Parsing Ross Nicoll
- Text Parsing Travis S. Casey
- Text Parsing Ross Nicoll
- Text Parsing Albert
- Text Parsing Travis S. Casey
- Text Parsing Matthew Mihaly
- Text Parsing Greg Miller
- Text Parsing Matthew Mihaly
- Text Parsing Greg Miller
- Text Parsing Matthew Mihaly
- Text Parsing Chris Gray
- Text Parsing Matthew Mihaly
- Text Parsing Adam Wiggins
- Text Parsing Katrina McClelan
- Text Parsing Adam Wiggins
- Text Parsing Matthew Mihaly
- Text Parsing Adam Wiggins
- Text Parsing Katrina McClelan
- Text Parsing Jon A. Lambert
- Text Parsing J C Lawrence
- Text Parsing J C Lawrence
- Text Parsing Joey Hess
- Text Parsing J C Lawrence
- Text Parsing Matthew Mihaly
- Text Parsing J C Lawrence
- Text Parsing Koster, Raph
- Text Parsing Matthew Mihaly
- Text Parsing Koster, Raph
- Text Parsing Chris Gray
- Text Parsing Albert
- Text Parsing Caliban Tiresias Darklock
- Text Parsing Matthew Mihaly
- Text Parsing Greg Miller
- Text Parsing J C Lawrence
- Text Parsing Caliban Tiresias Darklock
- Text Parsing Jon A. Lambert
- Text Parsing Caliban Tiresias Darklock
- Text Parsing Hans-Henrik Staerfeldt
- Text Parsing claw@kanga.nu
- Text Parsing Caliban Tiresias Darklock
- Text Parsing Greg Miller
- Text Parsing Petri Virkkula
- Text Parsing Matthew Mihaly
- Text Parsing Petri Virkkula
- Text Parsing Adam Wiggins
- Text Parsing Katrina McClelan
- Text Parsing Petri Virkkula
- Dylan Programming Language Ling
- Dylan Programming Language Jon A. Lambert
- Ultimate Universe Documentation Caliban Tiresias Darklock
- Oh yeah... Caliban Tiresias Darklock
- [TECHNICAL] [SOLVED] (template problem). Ben Greear
- [RELEASE] ScryMUD 1.9.4 available for download. Ben Greear