Once upon a time, BOBHYTAPb, Shmumer, others and yours truly thought
that a short-term LARP-like online game
could be interesting. (Nothing came of it, of course.) One of the
problems sited at the time was that computer games were lacking in
modeling of reality in general (duh!). In particular, the thought
went, the problem is with OOP itself. So YODL was conceived. (Did I
mention that nothing came out of it?) Shortly thereafter I discovered
Subject-Oriented
Programming articles… A while later, I found notes about YODL
which I reproduce here in their incoherent entirety without any hopes
that anyone cares, using this LJ as my personal repository of
stuff to refer to, maybe…
interface to other language/objects/functions?
1. Interceptable actions The most limiting feature of this scheme is the finality of allactions. In MUDs, one active object can intercept another object’s
action and veto it. Here, once an action is initiated it is performed
(see the caveat below). Other object can only react to it later
on. Example: in a MUD, you can place a closed chest and a guardian
over it. If you try to open the chest, the guardian stops you – have
to kill him first. In this scheme, if you are close enough to the
chest to open it – you open it, guardian or not. 2. Environment as a priviledged interceptor Broadcasting messages to those that are interested and are eligible
cf 1? 3. yodl abstract YODL is a mark-up language used to rapidly create new game worlds by placing objects in them.
Objects can be existing, taken from the library, as well as newly created (with the YODL as well!)
on the basis of other objects. YODL supports inheritance, with every object inheriting its properties
at least from some ideal object(s) (instances of which cannot be created) , or from other functional
objects. As is standard for such inheritances, properties can be overriden, added, erased. An object can be created by inheriting from two objects – thus compound objects (e..g, a rifle with
laser targeting can be created out of stock rifle and stock laser pointer). As much as it seems like a use of standard OO (object-oriented) approach, YODL presents important
innovation over traditional OO approach: We strive to make the worlds we create believable. To do that, ideally,the user must be able to do
with a given object what he can do to it in the real world. That is impossible under standard OO paradigm. In the OO paradigm, the designer must specify the behavior that each object is capable of. If a certain behaviour is not specified, the object cannot perform it. This is a great disadvantage. It is impossible to think of all the things it is possible to do with, for example, a cup. What if a user would like to try to hammer nails with it? YODL provides for that and other behavior by NOT providing specifically for a behavior in an
object. Instead, YODL allows designers to specify a set of actions generally available (hitting, throwing,
heating up an object~) Then the object acted upon executes that action upon itself, and the action,
based on the object’s properties, decides on the consequences. For example, consider a metal cup and
ceramic one. The designer did not specify if either cup can be hit. However, an action of being hit
is in the system, and if a cup is hit, based on its properties, the action will decide if the cup breaks
(ceramic) or bends (metal). In contrast to OO, this can be termed AO – action-oriented paradigm.
This is a misnomer, however, since YODL does not give preference to
actions (verbs) in favor of objects (nouns). Not getting into
linguistic debates, if we need both to better describe our world,
we will have both. Other concepts introduced in YODL are related. To go into details, we need to
provide full YODL specification, which we can’t right now. Of interest immediately, however,
are also the following concepts.
- Action inheritance – to ease the work of designers, actions can be inherited just as objects can be.
- Faces – actions that can be inflicted upon the object can be
calculated automatically, some being discarded (e.g., if an action of
-Y´break¡ cannot possibly be inflicted upon an object, it is
discarded).
Keyword unknown Actions { Hit (subject object) where Object has , is Subject has { } } Actor me { Knows hit } class chair implements matter { state = solid; // weight not here - automatically unknown } class Neanderthal knows wood { } class Bird knows wood interface matter{ property state : {solid, liquid, gas}; optional property weight; } interface wood implements matter { property hardness : 3; } class blade implements iron { property edge: .1; cut (matter m) { if (m.state=solid) { if ()~ } } Neanderthal N; Bird b; Wood w; Knife k; b.use(k.cut(w));
Some random links jotted in these notes:
- http://massassi.jedinights.com/articles/df/makeforc.htm
- http://www.inside3d.com/jk/cog12.shtml
- http://unreal.epicgames.com/UnrealScript.htm
- http://www.tecgraf.puc-rio.br/lua/
- http://www.intonet.com/press33.html
- http://www.gamasutra.com/features/19990820/game_ai_01.htm
- http://www.gamasutra.com/features/19990903/lincroft_01.htm
- http://www.gamasutra.com/features/20000223/askmm_01.htm
- http://www.gamasutra.com/features/19990611/java_01.htm
- http://www.gamasutra.com/features/20000414/lander_01.htm
- http://slashdot.org/article.pl?sid=02/01/11/161233&mode=nested
- ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-306.pdf
- ftp://publications.ai.mit.edu/ai-publications/1000-1499/AIM-1403.ps.Z
- http://www4.linkmag.de/bda/nat/link/special/interview_e.html
- http://www.duke.edu/~tlove/
- http://www.zenda.com/converse.htm
- http://web.mit.edu/cms/games/readings.html
- http://web.mit.edu/cms/games/opening.html
- http://web.mit.edu/cms/games/aesthetics.html
- http://www.gamasutra.com/features/19990709/thief_02.htm
- http://www.gamasutra.com/features/20000105/fireteam_01.htm
- http://www.gamasutra.com/features/19990514/trespasser_01.htm
- http://www.gamasutra.com/features/19991026/allegro_01.htm
- http://www.gamasutra.com/features/19991213/adolph_02.htm
- http://www.stlport.org/resources/StepanovUSA.html