RE: Event-reaction model proposal


Subject: RE: Event-reaction model proposal
From: Otso Makinen (otso@hybrid.fi)
Date: Thu Nov 18 1999 - 23:32:31 EET


We actually had the same kind of event system in Majik4 and parts of the
tree structure is already implemented in the current server code. :)

--
Otso Mäkinen / Majik 3D Project
harum@majik3d.org https://majik3d-legacy.org

> -----Original Message-----
> From: Jari P Saukkonen [mailto:jsaukkon@cs.helsinki.fi]
> Sent: 18. marraskuuta 1999 23:25
> To: majik-design@majik3d.org
> Subject: Event-reaction model proposal
>
>
>
> In this document I propose a following model for handling
> actions in the
> world. It might get a bit technical at times (to explain
> implementation to
> other developers), but I'll try to keep this readable for
> others too :).
>
> First, some terminology:
>
> Event, is any action that some object (player, npc, monster,
> ...) does.
> For example movement, item handling, speaking and basically everything
> that includes action detectable by senses (sight, hearing, ...).
>
> A reaction is a piece of code that is performed when object
> receives an
> event. Object does not receive any events that it cannot react to.
>
> In practice, events are classes that have different
> attributes depending
> on the event.
>
> I'm not that good in explaining so let's start with an example.
>
> Plot: Yorkaturr is on a sunday-walk, and happens to walk
> through a small
> village.
>
> When he moves, 'movement' event is dispatched. In case
> Yorkaturr wasn't
> already in the vicinity (ie. villagers haven't yet noticed him), an
> 'arrive' event is generated.
>
> Villager's code has a reaction defined for the 'arrive'
> event. It checks
> the source of the event, Yorkaturr, and starts examining his outlook.
> It determines that Yorkaturr is a quite scaring sight, and thus the
> villagers starts to flee in panic.
>
> In case the villager would have been interactive (a PC) the code would
> have catched the 'arrive' event and sent a command to client to add
> Yorkaturr's object to the scene. Further movement events
> would cause the
> object to move in the client.
>
> For the implementation we will probably need a huge tree
> structure that
> divides the world in equally-spaced cells. Nodes of the tree contain
> references to objects. When object moves, it's position is
> updated in the
> tree structure accordingly, and it's very quick to determine
> the nearest
> objects (that an event needs to be dispatched to) by
> traversing the tree
> up a couple of levels (depending on the event sending range)
> and checking
> all nodes with the subtree.
>
> With this universal model, we can get over the problem of keeping the
> clients in sync, and provide a framework for building decent AI.
>
> If we start extrapolating, it could be possible to build a fighting AI
> that is based on reacting to opponent's movements and strikes. This is
> however purely theoretical, and would be quite cpu-intensive, but the
> framework would make it possible :).
>
> Hmm, maybe that's it, South Park is on TV :).. Ask if
> something is still
> unclear.
>
> ++ Dazzt
>
> ---
> | Jari Saukkonen + jari.saukkonen@cs.helsinki.fi : coral   -.
> | programming            music          graphics | dolphin   :
> | art                  keyboards             web | nah-kolor |
> +------------------------------------------------+-----------'
> | Babylon5-inspired 'shadow function'        0 <= t <= 4*pi/3
> :  x(t) =   (sin 8t)^2 * (5 + 3sin 8t) cos (t/2 + (sin 8t)^2)
> .  y(t) = +-(sin 8t)^2 * (5 + 3cos 8t) sin (t/2 + (sin 8t)^2)
>



This archive was generated by hypermail 2b25 : Tue Feb 12 2002 - 00:03:25 EET