Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Aug 21 21:14

    erikogenvik on master

    Removed overly complex server a… (compare)

  • Aug 21 21:14

    erikogenvik on master

    Added wield method. (compare)

  • Aug 21 18:57

    erikogenvik on master

    Return when required. (compare)

  • Aug 21 17:21

    erikogenvik on master

    Fixed tests. (compare)

  • Aug 20 21:29

    erikogenvik on master

    Updated rules with stackables. Make it clear that propel is ch… Fixed python error reporting. and 6 more (compare)

  • Aug 20 21:28

    erikogenvik on master

    Fixed typo. Allow visualizations for non-ad… Handle projectiles. This is do… (compare)

  • Aug 20 21:28

    erikogenvik on master

    Fixed error with unbound type. Fixed typo. (compare)

  • Aug 20 21:28

    erikogenvik on master

    Added Hit op. This is used whe… (compare)

  • Aug 16 19:33

    erikogenvik on master

    Automatically destroy windows i… Show amount in entity icons. Fixed issues with icon renderin… and 1 more (compare)

  • Aug 16 19:33

    erikogenvik on master

    Set values to zero by default. Expanded on docs about type "at… Added method for searching thro… and 14 more (compare)

  • Aug 16 19:33

    erikogenvik on master

    Remove Combine and Divide opera… Removed unused class. (compare)

  • Aug 16 14:26
    DSorlov closed #26
  • Aug 16 14:26
    DSorlov commented #26
  • Aug 13 21:29

    erikogenvik on master

    Look for water treading animati… (compare)

  • Aug 13 21:08

    erikogenvik on master

    Check ops for sanity. And also… (compare)

  • Aug 12 16:45
    erikogenvik commented #26
  • Aug 12 15:32
    DSorlov opened #26
  • Aug 11 22:20

    erikogenvik on master

    Send local position when referr… Fixed issue with highlighting a… (compare)

  • Aug 11 10:22

    erikogenvik on master

    Moved selector into picker widg… (compare)

  • Aug 11 10:22

    erikogenvik on master

    Test removal of multiple from l… Use "append" for scripts. (compare)

Erik Ogenvik
@erikogenvik
@kblin Is the wiki down?
clan-fd
@clan-fd
Yay! Wiki is back! Thank you!
Erik Ogenvik
@erikogenvik
Yeah, there were some issues during a server restart. Now fixed.
Erik Ogenvik
@erikogenvik
We don't use Kaitai.
Anshin A.
@Icekhaos
Oh, derp.
Wrong Gitter.
Shouldn't do this at 3AM.
Benjamin Stanley
@HeadClot
So what is going on with WorldForge?
Erik Ogenvik
@erikogenvik
At the moment I haven't had the time to put enough work into it. Been busy with other stuff unfortunately. As it stands now I'm pretty much the only one doing development.
However, last year a large part of the system was overhauled, with improvements pretty much across the board. There's now a proper physics system in place, with navigation in a complex 3d world (something we surprisingly enough lacked for quite a while). I've also put focus on making the world more editable, in the sense that it's now much easier to both edit the world live (both rules and the world itself) as well as having the changes persisted and tracked. The work I was doing when I had to step back was on implementing proper combat. I was doing work on an NPC "karma" system (i.e. whom the NPC likes and dislikes etc.).
Benjamin Stanley
@HeadClot
@erikogenvik Thanks for filling me in :)
clan-fd
@clan-fd
Hi. I tried to build Ember on Ubuntu using hammer.sh, but I run into errors with ogre and boost: https://imgur.com/a/94fxO67
Do you have suggestions to resolve errors?
Hsingai Tigris Altaica
@DrAlta
Anyone want help me integrate psychsim? It's python and not that well documented my idea is to extend the protocal to support psychsim messages and then mod the client to generate human language and an interface to generate them. This goes with my plans for a machine understandable chat system with auto-translations so players that speak different languages can play together.
Hsingai Tigris Altaica
@DrAlta
Hsingai Tigris Altaica
@DrAlta
Basically it does Theory of Mind using partially
observable Markov Decision Problem
Hsingai Tigris Altaica
@DrAlta
And it has an authoring you give it examples of how the agent is supposed to behave and it figures out the reward function to get that behavior.
Erik Ogenvik
@erikogenvik
@clan-fd What version of Ubuntu is it? We build it on Ubuntu automatically, you can check the libraries needed here: https://build.opensuse.org/package/show/games:WorldForge/ember
Erik Ogenvik
@erikogenvik
@j
Erik Ogenvik
@erikogenvik
@DrAlta Have you looked into the Interlinguish system used by the ai clients? It seems to be similar, although there's no system in place to evaluate the truthfullness of any assertion.
On another note, I just pushed some code which alters the UI in Ember. One now clicks on entities to show the interaction menu, and hold the mouse key to instead move it. Previously a click would "touch" the entity, and holding the mouse down would bring up the menu.
One advantage of
the new way is that we now have a unified way of interacting with entities both in the world and in one's inventory.
Erik Ogenvik
@erikogenvik
I've also started on the completion of migration of the old way of interacting towards the new way, through "usages"properties.
Erik Ogenvik
@erikogenvik
Previously one interacted by sending ops directly. Like "eat" to a piece of bread. Or "ignite" to a tinderbox. But how would the client know what actions are available? And how would it know if they required extra parameters? And how would the logic for handling it be defined on the server?
Erik Ogenvik
@erikogenvik
This system had been replaced by a "usages" property. This is a map which defines the available actions, together with data about the required parameters as well as a description. It also defines the Python script which handles the logic. The client then sends a "use" op which contains the action to perform along with parameters.
On the server side the "usage" property contains the code needed to validate and handle the "use" ops. This had allowed us to remove a lot of hard coded behavior.
On the client side we only need to look at the "usages" property to know how we can interacting with a certain entity. This had allowed us to remove even more hard coded functionality.
Erik Ogenvik
@erikogenvik
This is part of a larger ongoing work where gameplay rules are separated from "simulation" code on the server. There's been an intermingling in some places, which have made our system hard to adapt to other games than the default. The server has therefore been restructured, with gameplay and rule code being moved from C++ to Python, while the code handling the simulation has been made more robust and fully featured. A part of that work involved a total rewrite of the Python bindings, to allow us to easily write and test rules on the server.
One key feature is hot reloading of all Python code, and all rules. When a change is made the server will automatically detect it and reload affected scripts or rule data. Adding or altering the rules can now be done without having to restart the server, which is a huge improvement.
Changes to rules are propogated to all connected clients as well.
Erik Ogenvik
@erikogenvik
The way one now crafts the world is light years ahead of how it was done just a year ago.
Hsingai Tigris Altaica
@DrAlta
@erikogenvik no. Where would I look for the AI client interlinguish?
clan-fd
@clan-fd
@erikogenvik I am using Ubuntu 18.04. I will check the libraries as soon as I can. Thanks!
Erik Ogenvik
@erikogenvik
We use the Open Build Service for automatic builds of our main components on all major distros. Turns out that for a while the auto-rebuild feature has been broken. I'm guessing it has something to do with Github deprecating commit notifications in favour of specific webhooks. The result was that for a while changes to code wasn't properly tested on different OSes, with some of them breaking. I've now re-enabled the automatic builds and fixed the issues with broken builds. It now looks better: https://build.opensuse.org/project/monitor/games:WorldForge
Erik Ogenvik
@erikogenvik
I've pushed a change to the way properties for entity types are defined in Cyphesis. Since types can inherit from other types there's a need to have some mechanism in place which allows for appending to parent properties, rather than replacing them whole sale.
Therefore there's now the option to define properties using either "default", which will just overwrite any parent property, or "append", "prepend" and "subtract". Depending on the type of the property slightly different things happens. "prepend" on a numerical value will just perform addition, while doing it on a list will add new entries to the start of the list.
As a result I've also slightly changed the server protocol. Types used to only have an "attributes" field, which was parsed by the clients to figure out the properties. That field is now normally hidden (unless the client is an admin), instead there's a new field "properties" which contains the resulting properties for the type (after applying all of the rules found in the "attributes" field).
This change makes it much easier to provide variations of entities. For example, if you want to spawn a "goblin" entity which has an additional script rule it's now possible to do so by just appending the script rule to the existing "goblin" type. Previously one would have had to copy the complete "goblin" script property, and any changes to the "goblin" type would have had to be manually copied over to any specializations. This would strictly lead to brittle worlds.
carlself
@carlself
Hi, Im building ember using hammer and got this error
/home/carl/Dev/hammer/work/source/worldforge/clients/ember/src/components/ogre/OgreSetup.cpp:52:2: error: #error OGRE must be built with thread support.
 #error OGRE must be built with thread support.
Erik Ogenvik
@erikogenvik
@carlself I'm guessing you'
you're getting this because the build system picks up a separate installation of Ogre, different from the one built by Hammer. Do you have a system package of Ogre installed?
carlself
@carlself
Nope, but when build in a complete fresh virtual ubuntu machine, it works perfect.😁
Erik Ogenvik
@erikogenvik

Recently I've performed a major refactoring of how entity interaction happens in the Worldforge system. The basis of it is the new "usages" property which declares the actions that are available for each entity. As an example of how this can be used I've implemented a simple "fishing" task. When fishing you need a "fishing rod", and you need worms (or "annelids" as they are called in the system). You get these by digging in the ground with a shovel and then sifting through the resulting piles of earth with a sieve.

The "fishing rod" type is defined here: https://github.com/worldforge/cyphesis/blob/master/rulesets/deeds/rules/tools/fishing_rod.xml. It has a "Fish" usage, which has a constraint of "get_entity(actor.attached_hand_primary) = tool and contains(actor.contains, child instance_of types.annelid)". The constraint checks that the rod when activated is wielded by the user, and that there's at least one worm in the user's inventory.
It declares on parameter, a "target" which is of type "entity_location" (i.e. a position on another entity) with a constraint of "entity instance_of types.ocean && actor can_reach entity_location with tool". The target constraints requires that the target is of type "ocean" and that the user can reach the position with the fishing pole (the fishing rod has a reach of 5 meters, as defined in the "reach" property).

By declaring these rules using constraints we can remove a lot of boilerplate code from the actual rule, since the simulation engine will take care of checking these constraints before the rule code is invoked. It's also now possible for clients to check the constraints themselves (and disable the usage if the constraints doesn't match).

The usage defers the rule handling to the handler "world.objects.tools.FishingRod.fish". This is a reference to a Python script, to be found here: https://github.com/worldforge/cyphesis/blob/master/rulesets/deeds/scripts/world/objects/tools/FishingRod.py
The usage handler will immediately create a Fishing task instance, with a "tick interval" of two seconds. The task inherits from StoppableTask, which just means that it will by default have a "stop" usage attached to it. It will otherwise run indefinitely.
Every two seconds the “tick” method is called. It will do a random check to see if there’s a fish on the line. If so, an Imaginary op about this is sent to the client.
If the client stops the task while there’s a fish on the hook a new Fish entity will be spawned, and the worm entity will be consumed.

The gameplay is fairly simple, but it serves as a good example of having the Entity Filter, the Usages and the Task systems all working together to provide gameplay. Since all of the rules are handled by either Python scripts or Type properties the feature can be altered and iterated on in real time without having to restart the server.

carlself
@carlself
Hi, When running ember client, the mouse cursor disappears. It shows in the startup setting window, then disappears after loading.
Erik Ogenvik
@erikogenvik
That sounds like something is wrong with the loading of the UI then. Could you post a link to your ~/.local/share/ember/ember.log file?
Thanks for your patience!
This is the screenshot. https://imgur.com/f6HGIOW
Erik Ogenvik
@erikogenvik
@carlself It's hard to see what's wrong. Could you try with this binary and see if it's the same issue? https://download.opensuse.org/repositories/games:/WorldForge/AppImage/ember-latest-x86_64.AppImage
Also, could you try with disabling "mouse grabbing"? Do this by editing ~/.config/ember/ember.conf and adding these lines:
[input]
catchmouse = "false"