[DGD] Game interface question (brainstorming)
Noah Gibbs
noah_gibbs at yahoo.com
Sat Nov 29 23:49:28 CET 2003
Oops! I meant to send this to the list, and didn't.
-------------------------------------
Bart,
Thank you for your quick reply! My thoughts are
below.
--- Bart van Leeuwen <bart at wotf.org> wrote:
> While full control over a users screen can be
> desirable (we need it for
> example for playing ansi animations and similar
> stuff), anything that
> is not going to just produce text + colour codes
> will very likely disturb
> terminal functionality on the client side
This is true. If a game-side user code can send
anything it wants over the connection, then it can
also screw up the terminal quite badly. There's a
tradeoff, though, because games might want to send
international characters, MUD-client protocols and
other binary data that would be bad for a regular
telnet terminal. I'm not sure how to balance those
needs.
> Also, to support functionality like snoop and
> optional logging or (like we
> happen to do) a game provided replay/scrollback
> buffer, it is a good idea
> to keep all user i/o in a controllable object so you
> also have control
> over when game objects get free access to the
> terminal.
Well, yeah, but you get that even with inheritance.
Since only objects in /usr/System can directly send
information (I'm using the Kernel Library), I'll
automatically have a basic level of control because
the game's User object will need to use the inherited
functions for all privileged operations. I'm just not
sure if I should have them write objects that register
themselves with the User object (kinda like the
wiztool works) or directly inherit from a User object
library and do it that way.
But snooping and logging are easy, even with the
inherited interface. You can also enforce what
characters get sent that way, though I probably won't
for Phantasmal.
> (set an input and/or output object, and
> that object will get
> receive_message calls whenever something comes in,
> and send_message will
> do the expected thing as well, however, the (kernel)
> user object will sit
> inbetween and ensure that logs/snoops/scrollback
> buffers etc are updated.
This actually sounds a *lot* like how the inherited
interface would wind up working.
> Optionally, this allows you to put filters in place
> to translate terminal
> controls as to support odd or user configurable
> terminals.
And this sounds more like how user_state objects
work, except that they can easily push and pop each
other, so filters can add and remove other filters in
a very dynamic way. I use that for scrolling text and
for editing object descriptions.
> I personally dislike allowing inheritance of the
> user object outside the
> kernel, I prefer a clean seperation between the user
> object as a kernel
> level interfact to a users terminal, and the player
> object as the non
> kernel object that interfaces with the game on
> behalf of a user.
Bear in mind that the privileges *would* be
separated this way. I'm very careful to
access-protect almost all my function calls, and the
inherited user object would gain privilege mainly by
carefully-selected static function calls that it could
make. So the user-supplied object would still be
going through a layer of security. That's how the
Kernel Library works, too -- Phantasmal's
/usr/System/obj/user inherits from /kernel/lib/user,
and the Kernel user object exports a few
carefully-chosen functions to let me do my I/O.
Similarly, an inherited interface would still only
give limited control to the game-supplied user object,
and there would still be an API. It's just that the
API would be called as static functions, not with
call_other().
I'm definitely not in favor of passing along every
Kernel-supplied API function unmodified. That would
be silly. I'm just not sure whether inheritance or a
separate object makes a cleaner-feeling interface to
this for a coder.
Your comments have been very useful -- mainly you've
convinced me that there's not much difference between
the two approaches, which I hadn't fully realized
before :-)
=====
------
noah_gibbs at yahoo.com
__________________________________
Do you Yahoo!?
Protect your identity with Yahoo! Mail AddressGuard
http://antispam.yahoo.com/whatsnewfree
_________________________________________________________________
List config page: http://list.imaginary.com/mailman/listinfo/dgd
More information about the DGD
mailing list