I see two choices, Python 'style' (what Cyphesis currently uses and is used in examples here) or XML. XML would be more standard but Python 'style' is more debugger/command line friendly.
In any case they are 'just' strings, here are some Python 'style' examples:
"event('make',what=ething('_Nisuf3',name='Nisuf',type='farmer'),loc=(20, 50, 300))"
"event('destroy', what='_Nisuf3')"
"event('move', what='_Nisuf3', loc=(-50, 50, 290))"
"event('move', what='_axe10', loc='_Nisuf3')"
"event('fire', what='_fire', loc='_house2', target='_house2')"
(strings starting with underscore are ids)
event:
------
EVENT ATTRIBUTES
not all these are needed (command and what are always needed)
command: type of event: examples: "move", "make", "destroy", "say", "fire"
type: string
source: sender of event (world sets this if not set)
type: id string
target: receiver of event (you should set this for any thing
that changes things, for example delete and change events)
type: id string (in future also others, like: circle(loc,radius)
desc: description of event
type: string
what: to what thing event relates or operates
type: id string type string or ething or esay or
string (attribute name) or (inside server actual thing)
what_desc: description of above
type: string
loc: location of event
type: id string or tuple (x,y,z)
will likely change to: (id string, (x,y,z)) format
loc_desc: description of above
type: string
amount: how big fire, how strong visual signal,
how much to change object
type: type of attribute that is changed
time: time of event (world sets this if not set)
type: mktime compatible tuple: (612, 1, 6, 8, 0, 0.0, 0, 6, -1)
DIFFERENT COMMANDS:
command "make":
what="thing to make" as string or ething
optional desc=for example "birth"
optional loc=place for thing to appear (otherwise it appears in what
issued event)
issuers:
mind: event("make",what="axe", what_desc="ordinary axe")
body: event("make", desc="birth", what=ething(...))
house: event("make",what=fire)
command "destroy":
what=id string of thing to destroy
command "change":
what=what to change (is string or attribute name)
amount=amount of change
Here 'what' could be attribute name instead of id of thing.
If target doesn't have that attribute it's initialized to
given amount. Otherwise it's added to given amount. If 'what'
is an id, then status attribute is changed.
Target then would have id of target or in future some area or
maybe some Python code or if not set then everything is changed.
command "look":
what=like change
target=like change
Will result in sight event, where 'what' is asked thing:
if asked thing was attribute, then 'what' is its value
if asked thing was id (or not defined),
then return all attributes as ething
source=target in look event
command "move":
what=what to move
loc=location to move into
command "cut":
CHEAT! (will likely change)
what=what thing is used in cutting
command "sight":
what=event (for example move, destroy or make) or
ething
command "say":
what=esay
command "sound" (not used yet):
what=event
command "fire":
what=fire
loc=place of fire (for observers)
target=target of fire
amount=how big it is
command "extinguish":
what=fire to extinguish
target=same as what
command "goal":
what=resulting event list from decision, example:
[event('move',source='_farmer',target='_farmer',what='_farmer',
loc=(12.5431347914, 95.4016955914, 265.44628788))]
what_desc=decision derivation string, example:
goal('find place for home and build it').
goal('find place for home and make it').
goal('find place for home not too near or far from others').
find_place()
command "illegal":
what=event
what_desc=description about what's wrong: source_xyz, target_xyz
command "debug":
what=on or off
command "NYI" (Not Yet Implemented):
desc=description about what should have been implemented
command "imaginary":
desc=description about what events happened ;-)
command "empty" (NOP, not really used)
metaevents for engine.py:
command "step" (run one tick in world)
ething:
-------
first is id or when thing doesn't yet exist, then use name as id
type: what kind of thing is going to be created (example: "farmer")
other attributes are attributes for thing (like: sex="female")
Examples:
ething("Nisuf",type="farmer",sex="male")
ething("_Nisuf3",name="Nisuf",type="thing.vbody.body.farmer",sex="male")
esay:
-----
Experimental feature
verb: string
subject: string or id string
object: string or id string
type: string
string: string (this is for PC to PC communication)
examples:
esay('own',subject='_Nisuf',object='_house')
esay('know',subject='axe',object='smithy')
esay('know',subject='smithy',object=(20, 10, 305))
esay('learn',subject='chop trees',object=
"cut_something(self,'chop trees', 'winter', 'forest','axe')")
'>': from map editor
'<': from server
'#': comments: seek this character for interesting parts
(recommended, this is quite long)
This is just 'create itself' or login thing.
>> "[event('make',what=ething('Observer',desc='external mind',
name='Observer',type='god_body',xyz=(-100, -100, -100)))]"
#(here it invisibly returns ibody CORBA object,
#not really part of official protocol, not shown here)
> [event('make',what=ething('house',desc='ordinary house (_Observer_1)',
name='house',place='home',xyz=(20, 50, 300),type='house'))]
#create house
< [event('sight',what=event('make',what=ething('_illegal',desc='some thing',
type='thing',xyz=(0, 0, 0),name='illegal',status=1.0),
time=(612, 1, 1, 0, 30, 0.0, 2, 1, -1))),
event('sight',what=event('make',what=ething('_Observer',
desc='external mind',type='thing.vbody.god_body',
xyz=(-100, -100, -100),name='Observer',place='home',status=1.0),
time=(612, 1, 1, 0, 30, 0.0, 2, 1, -1)))]
#it now sees officially its creation ;-)
< [event('sight',what=event('make',source='_Observer',
what=ething('_house',desc='ordinary house (_Observer_1)',
type='thing.house',xyz=(20, 50, 300),name='house',place='home',
status=1.0),time=(612, 1, 1, 1, 0, 0.0, 2, 1, -1))),
event('sight',what='_house')]
#here sight of house creation is received
#This another (short) sight event will be replaced with something like:
#event('sight',what=event('appear',what='_house',loc=(10,20,30)))
#and
#event('sight',what=event('disappear',what='_house',loc=(100,-20,30)))
#or similar.
> [event('make',what=ething('axe',
desc='normal axe good for cutting trees (_Observer_2)',
name='axe', place='forest',xyz=(150, -50, 250),status=1.0))]
< [event('sight',what='_house')]
< [event('sight',what=event('make',source='_Observer',
what=ething('_axe',
desc='normal axe good for cutting trees (_Observer_2)',
type='thing',xyz=(150, -50, 250),name='axe',place='forest',
status=1.0), time=(612, 1, 1, 2, 0, 0.0, 2, 1, -1))),
event('sight',what='_house')]
> [event('make',what=ething('Nisuf',desc='ordinary farmer (_Observer_3)',
name='Nisuf',type='farmer',age=864000.0,xyz=(20, 50, 300),sex='male'))]
#make NPC
< [event('sight',what='_house')]
< [event('sight',what=event('make',source='_Observer',
what=ething('_Nisuf',desc='ordinary farmer (_Observer_3)',
type='thing.vbody.body.farmer',xyz=(20, 50, 300),
name='Nisuf',place='home',age=864000.0,sex='male',status=1.0),
time=(612, 1, 1, 3, 0, 0.0, 2, 1, -1))),
event('sight',what='_house')]
#sight of NPC creation
> [event('make',what=ething('Miyora',sex='female',name='Miyora',
type='farmer',copy='_Nisuf',desc='some thing (_Observer_4)'))]
< [event('sight',what='_house')]
< [event('sight',what=event('make',source='_Observer',
what=ething('_Miyora',desc='some thing (_Observer_4)',
type='thing.vbody.body.farmer',xyz=(20, 50, 300),
name='Miyora',place='home',age=867600.0,sex='female',status=1.0),
time=(612, 1, 1, 4, 0, 0.0, 2, 1, -1))),
event('sight',what='_house')]
> [event('say',target='_Nisuf',what=esay('own',subject='_Nisuf',
object='_house'))]
#tell it that it owns house
> [event('say',target='_Miyora',what=esay('own',subject='_Miyora',
object='_house'))]
> [event('say',target='_Nisuf',what=esay('own',subject='_Nisuf',
object='_axe'))]
> [event('say',target='_Nisuf',what=esay('know',subject='axe',
object='smithy'))]
#tell it that axes can be acquired from smithy
> [event('say',target='_Nisuf',what=esay('know',subject='smithy',
object=(20, 10, 305)))]
#tell it where smithy resides
> [event('say',target='_Nisuf',what=esay('know',subject='forest',
object=(150, -50, 250)))]
> [event('say',target='_Nisuf',what=esay('know',subject='tavern',
object=(50, 30, 295)))]
> [event('say',target='_Miyora',what=esay('know',subject='axe',
object='smithy'))]
> [event('say',target='_Miyora',what=esay('know',subject='smithy',
object=(20, 10, 305)))]
> [event('say',target='_Miyora',what=esay('know',subject='forest',
object=(150, -50, 250)))]
> [event('say',target='_Miyora',what=esay('know',subject='tavern',
object=(50, 30, 295)))]
> [event('say',target='_Nisuf',what=esay('know',subject='home',
object=(20, 50, 300)))]
> [event('say',target='_Miyora',what=esay('know',subject='home',
object=(20, 50, 300)))]
> [event('say',target='_Nisuf',what=esay('know',subject='field',
object=(-100, 50, 300)))]
> [event('say',target='_Miyora',what=esay('know',subject='field',
object=(-100, 50, 300)))]
> [event('say',target='_Nisuf',what=esay('learn',subject='breakfast',
object="imaginary('have a breakfast', 'morning', 'home')"))]
#give imaginary goal (this is really NPC scripting specific)
> [event('say',target='_Nisuf',what=esay('learn',subject='dinner',
object="imaginary('have a dinner', 'midday', 'home')"))]
> [event('say',target='_Nisuf',what=esay('learn',subject='supper',
object="imaginary('have a supper', 'evening', 'home')"))]
> [event('say',target='_Nisuf',what=esay('learn',subject='sleep',
object="imaginary('sleep good night', 'night', 'home')"))]
> [event('say',target='_Nisuf',what=esay('learn',subject='build home',
object='build_home'))]
#find suitable place for home and build home goal (see mgoal.py)
> [event('say',target='_Miyora',what=esay('learn',subject='breakfast',
object="imaginary('have a breakfast', 'morning', 'home')"))]
> [event('say',target='_Miyora',what=esay('learn',subject='dinner',
object="imaginary('have a dinner', 'midday', 'home')"))]
> [event('say',target='_Miyora',what=esay('learn',subject='supper',
object="imaginary('have a supper', 'evening', 'home')"))]
> [event('say',target='_Miyora',what=esay('learn',subject='sleep',
object="imaginary('sleep good night', 'night', 'home')"))]
> [event('say',target='_Miyora',what=esay('learn',subject='build home',
object='build_home'))]
> [event('say',target='_Nisuf',what=esay('learn',subject='chop trees',
object="cut_something(self,'chop trees', 'winter', 'forest','axe')"))]
#chop trees in forest
> [event('make',what=ething('house',desc='ordinary house (_Observer_5)',
name='house',place='home',xyz=(70, 0, 300),type='house'))]
< [event('sight',what='_house')]
< [event('sight',what=event('make',source='_Observer',
what=ething('_house1',desc='ordinary house (_Observer_5)',
type='thing.house',xyz=(70, 0, 300),name='house',place='home',
status=1.0),time=(612, 1, 1, 5, 0, 0.0, 2, 1, -1))),
event('sight',what='_house'),
event('sight',what='_house1')]
> [event('make',what=ething('smithy',desc='ordinary smithy (_Observer_6)',
name='smithy',place='smithy',xyz=(20, 10, 305),
type='house',status=1.0))]
< [event('imaginary',source='_Miyora',desc='sleep good night',
time=(612, 1, 1, 5, 30, 0.0, 2, 1, -1)),
event('goal',source='_Miyora',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 5, 30, 0.0, 2, 1, -1)),
event('imaginary',source='_Nisuf',desc='sleep good night',
time=(612, 1, 1, 5, 30, 0.0, 2, 1, -1)),
event('goal',source='_Nisuf',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 5, 30, 0.0, 2, 1, -1)),
event('sight',what='_house'),
event('sight',what='_house1')]
#lots of imaginary events and goal event:
#goal event is NPCs thoughts (for debugging, not for PCs)
< [event('sight',what=event('make',source='_Observer',
what=ething('_smithy',desc='ordinary smithy (_Observer_6)',
type='thing.house',xyz=(20, 10, 305),name='smithy',
place='smithy',status=1.0),
time=(612, 1, 1, 6, 0, 0.0, 2, 1, -1))),
event('imaginary',source='_Miyora',desc='sleep good night',
time=(612, 1, 1, 6, 0, 0.0, 2, 1, -1)),
event('goal',source='_Miyora',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 6, 0, 0.0, 2, 1, -1)),
event('imaginary',source='_Nisuf',desc='sleep good night',
time=(612, 1, 1, 6, 0, 0.0, 2, 1, -1)),
event('goal',source='_Nisuf',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 6, 0, 0.0, 2, 1, -1)),
event('sight',what='_house'),
event('sight',what='_house1')]
> [event('make',what=ething('Bjorn',desc='only smith in village (_Observer_7)',
type='smith',age=1728000.0,xyz=(70, 0, 300),place='home',
name='Bjorn',sex='male'))]
< [event('imaginary',source='_Miyora',desc='sleep good night',
time=(612, 1, 1, 6, 30, 0.0, 2, 1, -1)),
event('goal',source='_Miyora',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 6, 30, 0.0, 2, 1, -1)),
event('imaginary',source='_Nisuf',desc='sleep good night',
time=(612, 1, 1, 6, 30, 0.0, 2, 1, -1)),
event('goal',source='_Nisuf',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 6, 30, 0.0, 2, 1, -1)),
event('sight',what='_house'),
event('sight',what='_house1')]
< [event('imaginary',source='_Miyora',desc='sleep good night',
time=(612, 1, 1, 7, 0, 0.0, 2, 1, -1)),
event('goal',source='_Miyora',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 7, 0, 0.0, 2, 1, -1)),
event('sight',what=event('make',source='_Observer',
what=ething('_Bjorn',desc='only smith in village (_Observer_7)',
type='thing.vbody.body.smith',xyz=(70, 0, 300),name='Bjorn',
place='home',age=1728000.0,sex='male',status=1.0),
time=(612, 1, 1, 7, 0, 0.0, 2, 1, -1))),
event('imaginary',source='_Nisuf',desc='sleep good night',
time=(612, 1, 1, 7, 0, 0.0, 2, 1, -1)),
event('goal',source='_Nisuf',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 7, 0, 0.0, 2, 1, -1)),
event('sight',what='_house'),
event('sight',what='_house1')]
> [event('say',target='_Bjorn',what=esay('own',subject='_Bjorn',
object='_house1'))]
> [event('say',target='_Bjorn',what=esay('own',subject='_Bjorn',
object='_smithy'))]
> [event('say',target='_Bjorn',what=esay('know',subject='axe',
object='smithy'))]
> [event('say',target='_Bjorn',what=esay('know',subject='smithy',
object=(20, 10, 305)))]
> [event('say',target='_Bjorn',what=esay('know',subject='forest',
object=(150, -50, 250)))]
> [event('say',target='_Bjorn',what=esay('know',subject='tavern',
object=(50, 30, 295)))]
> [event('say',target='_Bjorn',what=esay('know',subject='home',
object=(70, 0, 300)))]
> [event('say',target='_Bjorn',what=esay('learn',subject='breakfast',
object="imaginary('have a breakfast', 'morning', 'home')"))]
> [event('say',target='_Bjorn',what=esay('learn',subject='dinner',
object="imaginary('have a dinner', 'midday', 'home')"))]
> [event('say',target='_Bjorn',what=esay('learn',subject='supper',
object="imaginary('have a supper', 'evening', 'home')"))]
> [event('say',target='_Bjorn',what=esay('learn',subject='sleep',
object="imaginary('sleep good night', 'night', 'home')"))]
> [event('say',target='_Bjorn',what=esay('learn',subject='build home',
object='build_home'))]
> [event('say',target='_Bjorn',what=esay('learn',subject='create axes',
object="make_amount('axe',10,'ordinary axe','smithy')"))]
#make axes goal
#From now forward it's one way only
< [event('imaginary',source='_Miyora',desc='sleep good night',
time=(612, 1, 1, 7, 30, 0.0, 2, 1, -1)),
event('goal',source='_Miyora',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 7, 30, 0.0, 2, 1, -1)),
event('imaginary',source='_Nisuf',desc='sleep good night',
time=(612, 1, 1, 7, 30, 0.0, 2, 1, -1)),
event('goal',source='_Nisuf',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 7, 30, 0.0, 2, 1, -1)),
event('sight',what='_house'),
event('sight',what='_house1')]
< [event('imaginary',source='_Miyora',desc='sleep good night',
time=(612, 1, 1, 8, 0, 0.0, 2, 1, -1)),
event('goal',source='_Miyora',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 8, 0, 0.0, 2, 1, -1)),
event('imaginary',source='_Nisuf',desc='sleep good night',
time=(612, 1, 1, 8, 0, 0.0, 2, 1, -1)),
event('goal',source='_Nisuf',
what=[event('imaginary',desc='sleep good night')],
what_desc="imaginary('sleep good night').imaginary()",
time=(612, 1, 1, 8, 0, 0.0, 2, 1, -1)),
event('sight',what='_house'),
event('sight',what='_house1')]
< [event('imaginary',source='_Miyora',desc='have a breakfast',
time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)),
event('goal',source='_Miyora',
what=[event('imaginary',desc='have a breakfast')],
what_desc="imaginary('have a breakfast').imaginary()",
time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)),
event('imaginary',source='_Bjorn',desc='have a breakfast',
time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)),
event('goal',source='_Bjorn',
what=[event('imaginary',desc='have a breakfast')],
what_desc="imaginary('have a breakfast').imaginary()",
time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)),
event('imaginary',source='_Nisuf',desc='have a breakfast',
time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)),
event('goal',source='_Nisuf',
what=[event('imaginary',desc='have a breakfast')],
what_desc="imaginary('have a breakfast').imaginary()",
time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)),
event('sight',what='_house'),
event('sight',what='_house1')]
< [event('imaginary',source='_Miyora',desc='have a breakfast',
time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)),
event('goal',source='_Miyora',
what=[event('imaginary',desc='have a breakfast')],
what_desc="imaginary('have a breakfast').imaginary()",
time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)),
event('imaginary',source='_Bjorn',desc='have a breakfast',
time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)),
event('goal',source='_Bjorn',
what=[event('imaginary',desc='have a breakfast')],
what_desc="imaginary('have a breakfast').imaginary()",
time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)),
event('imaginary',source='_Nisuf',desc='have a breakfast',
time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)),
event('goal',source='_Nisuf',
what=[event('imaginary',desc='have a breakfast')],
what_desc="imaginary('have a breakfast').imaginary()",
time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)),
event('sight',what='_house'),
event('sight',what='_house1')]
< [event('goal',source='_Bjorn',
what=[event('move',what='_Bjorn',loc=(20, 10, 305))],
what_desc="make_amount('axe',10).move_me('smithy').move_to_loc()",
time=(612, 1, 1, 9, 30, 0.0, 2, 1, -1)),
event('goal',source='_Nisuf',
what=[event('move',what='_Nisuf',loc=(150, -50, 250))],
what_desc="cut_something('axe').acquire_thing('axe').
acquire_known_thing('axe').move_it_into_me('_axe').
move_me((150, -50, 250)).move_to_loc()",
time=(612, 1, 1, 9, 30, 0.0, 2, 1, -1)),
event('sight',what='_house'),
event('sight',what='_house1')]
#more complicated goal events
#following section: sight of NPC moving and making things
#decimals in move command: body didn't allow NPC to move
#directly to target ;-)
< [event('sight',source='_Bjorn',
what=event('move',source='_Bjorn',target='_Bjorn',
what='_Bjorn',loc=(20, 10, 305),
time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)),
time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)),
event('sight',what=event('make',source='_Bjorn',
what=ething('_axe1',desc='ordinary axe',type='thing',name='axe',
place='_Bjorn',status=0.1),
time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1))),
event('goal',source='_Bjorn',
what=[event('make',what='axe',what_desc='ordinary axe')],
what_desc="make_amount('axe',10).do_all()",
time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)),
event('sight',source='_Nisuf',what=event('move',source='_Nisuf',
target='_Nisuf',what='_Nisuf',
loc=(95.8175396576, -8.32118435198, 270.839407824),
time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)),
time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)),
event('goal',source='_Nisuf',
what=[event('move',what='_Nisuf',loc=(150, -50, 250))],
what_desc="cut_something('axe').acquire_thing('axe').
acquire_known_thing('axe').move_it_into_me('_axe').
move_me((150, -50, 250)).move_to_loc()",
time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)),
event('sight',what='_house'),
event('sight',what='_house1')]