Some libtcod news

Hey I’m coming out from obscurity to give you a few information concerning libtcod.


New maintainer

Kyle Stewart, a.k.a. Hex Decimal, long time libtcod contributor and developer of the first python wrapper is joining the admin team on bitbucket. He has been the main contributor for some time and I’m confident libtcod is in good hands with him.


libtcod rust wrapper

To me rust is the perfect language for roguelike development, especially since it’s a first class language to target web assembly (even if it’s still a bit rough right now but it gets better every month). There’s an ongoing effort to write a libtcod wrapper. It’s already featuring most of the important stuff. You can find it there :




I’ve just discovered pico-8 and voxatron.

Those are respectively a 128X128 2D console and 128x128x32 3D voxel console. They both come with harsh limitations. For example, pico-8 has only 16 fixed colors and the game code is limited to 8192 tokens.

Yet, amazing little games have been created with this limited environment. Here are a few of my favorites.


Behavior trees sneak peak

I have the first version of behavior trees ready in yendor.ts, just not yet pushed to github.

The result is that monster’s AI is now trivial as it only has to execute the tree tick function:

public update(owner: Actor) {
   // don't update a dead monster
   if (owner.destructible && owner.destructible.isDead()) {
   if ( this.behaviorTree ) {
      if ( this.__context === undefined ) {
         this.__context = new Yendor.Context();
      this.behaviorTree.tick(this.__context, owner);

Now all the creature intelligence (rather dumbness right now) is described in the actor definition JSON :

    ai: {
        type: Actors.AiTypeEnum.MONSTER,
        walkTime: 4,
        tree: new Yendor.BehaviorTree("basic hostile humanoid",
            new Yendor.SequenceNode([
                new Yendor.PriorityNode([
                    new Ai.FindPlayerActionNode(),
                    new Ai.TrackScentActionNode(SCENT_THRESHOLD),
                    new Yendor.InverterNode(new Ai.WaitActionNode()),
                new Ai.AttackPlayerActionNode(),

The priority node run its children until it finds a successful one : if the player is visible, the creature tries to get to melee range using path finding (FindPlayerActionNode), else it tries to track scent (TrackScentActionNode), else it simply waits (WaitActionNode). This will make much easier to have creatures guarding the chests as planed for 0.8.0.

More info on behavior trees.


Yendor.ts 0.7.0 release

There are probably a few bugs here and there, but overall it should be quite stable :


Next step : behavior trees !




0.7.0b1 online !

I’ve just pushed the 0.7.0 version on github. You can try the game here and the benchmark here.

As it’s still poorly balanced, I suggest you rather use the debug version at http://roguecentral.org/doryen/yendor.ts/game/index.html?debug=1 as you start with a lot of goodies that make survival easier.

It’s the first version featuring an actual widget toolkit and an actual scene manager. You can try the widgets in a new sample from the benchmark.


In this version, creatures corpses sometimes contain loot. Some chests are also placed at strategic places in dungeons.


After a few iterations of bugfixing and balancing, I’ll start working on 0.8.0 whose main goal is to bring more monsters in the rooms containing chests. This implies a behavior tree module in yendor.ts and a refactoring of the current A.I. code.


[edit] : contrary to what the readme reads, the GUI toolkit doesn’t use immediate mode anymore. It’s a standard class-based widget toolkit.