From the Burrow

TaleSpire Dev Log 66

2019-02-08 08:25:53 +0000

Heya folks. A quick one today. With both some life business and serialization fixes out of the way it is finally time to get back to tickets. People have been amazing at filing them so the fact I haven’t been triaging these for a week sucks. I’m gonna get through reproducing as many as I can today so I can then focus on fixing next week.

@Dwarf has been killing it making tonnes of progress updating all of the tiles to the new sizes and fleshing out the sets to include everything in the test tile set we made available in the last update. These will all count as new sets as, because of dimensions changes we can’t just swap then out with the originals without breaking your existing boards. Of course that will be coming with the floor changes but until then we want to keep everything working.

@Ree has made a pile of progress on props. As they will become their own class of object they can now have their own behaviors. This includes being able to be placed in way more place, orienting to the surface they are placed on and automatically ‘dodging’ out of creatures way if the creature steps in the same tile as some props. He’s also started on the floor UI as by nailing that we can then start on the deeper engine changes.

All go but mostly behind the scenes. We can’t wait to show you more though so thanks for joining us on this journey.


p.s One thing we haven’t made time for yet is tweaking the emails so they are less likely to end up in spam. We will be doing this for the next invite push though. When we do that we will re-email all codes to all of you who are already meant to have access.

TaleSpire Dev Log 65

2019-02-07 00:01:16 +0000

Good-evening folks!

Tonight I dont have a writeup but I have a video of a simple shader effect prototype. It is just a simple vertical cutaway we can use on tiles for when your creatures are in tight coridoors. It’s going to be evolved a bunch to make it more aethetically pleasing but this was just so I could prove to myself that the core idea would work.

Only the first 50 minutes of the video are about making the effect so you don’t need to hang around for the whole thing. Also this is naturally a technical video so if you arent into hairy muppets rambling whilst typing lots of stuff then this may not be for you :)

TaleSpire Dev Log 64

2019-02-05 22:43:30 +0000

Today I finished testing the fixes for serializing board-assets with state (doors, chests etc). There will be one side-effect when this goes out and that is all door/chests etc will revert to their default state.

This side effect is a trade-off. We are fundamentally changing how that code worked and so to handle this change we would need to do a of work and testing to port the current state over. This would be the only choice once we have released but whilst we are at this point in the alpha we want to focus on getting more content out there and that is blocked until this fix it out.

So yup that’s all for today. I’ve lost some work time due to sorting out some health stuff and tomorrow will be most taken up by that too. However in the evening I will be prototyping the start of the tile cutaway shader in my lisp stream so that’ll be fun.

Until tomorrow, Peace :)

TaleSpire Dev Log 63

2019-02-01 00:07:12 +0000

WARNING: We want to be open in these technical blogs so you are reading unfinished, unproven ideas. This should not be taken as a promise of anything.

Today @Ree and I have been white-boarding a replacement for the floor system. We need to do this as the current system has a number of issues including (but not limited to):

  • Tiles are revealed by floor which means large features need to be built on multiple floors or built in a huge stack from one floor which intersects the others
  • building raised platforms that belong to one floor requires stacking and then deleting tiles as tiles always try to drop to the floor.
  • hair loss
  • Can’t delete or position floors as the floor is infinitely wide. If you have a town and delete a floor it deletes that floor for every building in the town.

There are also a bunch of other things that fall out of this regarding how fog of war works, which is another area where the current version of the game has issues

We are making progress but it’s a very extensive change. The goal is to let you create floor plains that are separate from each other. You will be able to adjust their height from the previous floor (in fixed increments) and they will grow as you place more tiles. The footprint is maintained down the whole stack of floors.

This would let you have buildings where you can set floor height, delete floors, etc. Building raised platforms is easy and you just build the plain and build on top of it.

Tile reveal and fog of war is also not ideal in open areas like towns right now. You build lovely multi story buildings and don’t see them until you switch floor. Also, as we reveal what your character can walk to, players don’t see roofs often either. We are musing on inverting the logic of fog of war, where you place a origin for the fog (let’s call it a fog-machine for now :D) and then scroll (or something) to adjust how far the fog flows. this gives the GM control over what is shown and the same (or similar) method we have now is used to uncover it. Each ‘body’ of fog is separate so it should hug walls in a better way improving on the current tile reveal.. we also need some more shader magic to improve the look too.

So yup, massive changes could be afoot. This is ALL just thoughts and musings right now. We are going to start prototyping the gameplay side of floor building tonight and I’m musing on ways to maintain some of the nicer qualities of the fog of war whilst getting some of the new stuff.

I expect I’ll do a stream soon to talk about the problem and the design space even if we have nothing new to show. We’ll keep you posted with things as they happen.


TaleSpire Dev Log 62

2019-01-31 14:35:00 +0000

A slightly unusual one today. I needed to prototype the approach I want to use for TaleSpire’s line of sight and I decided to try doing it in a couple of hours on my lisp stream. Here is the result:

We got it working but right at the very end of the stream so there isnt a sexy payoff. We’ll revisit this to make sure it’s working as expected and then reimplement it in Unity.

WARNING: The stream contains a lot of parens :D It’s also built on prototypes from other episodes so sorry that we dotn go into detail on how most of it works.

TaleSpire Dev Log 61

2019-01-29 22:04:06 +0000

I’ve changed the name until I get my arse back in gear and start doing these daily again.

The weekend was rather eventful. We had a collection of bugs that acted together to corrupt peoples boards. The good news is that a while back we started making checkpoint saves of boards on each session so we are able to revert to those un-borked version.

The principle bug was a mistake is some of the serialization code that made an assumption that the number of Assets in a Tile didn’t change. This was a very dumb assumption and it was really just luck that this hadn’t bitten us sooner. This was compounded by the fact that, on failing to load, the game didn’t recognize this and jump back to the empty board. No, instead it decided the board was out of date and saved the now broken board back to the server :

Needless to say that changed my Sunday plans. Thanks to some invaluable help from those affected (extra props to Blappo here) we were able to replicate the issue and get a patch out a few hours later. I’m currently working on a proper fix for this but it needs to be done carefully so we don’t slip in any more problems.

Also in a couple of days I’ll be meeting up with @Ree so we can start work on the next revision of the floor system in TaleSpire. No spoilers today but news (and pics) will come soon.

Alright, time to wrap up,


TaleSpire Dev Daily 60

2019-01-23 13:04:13 +0000

Hey again, I’ve not written for a few days as it would have been a ‘still working on the same thing’ post.

I’m done with the issues with unique creatures for now. As ever it doesn’t feel like it’s in its final form but it’ will certainly address a few of the issues:

  • When a player joins a board their permissions over unique creatures were not always maintained
  • Uniques spawned into unsynced board disappeared on first sync
  • Only first GM gets the unique creature panel populated
  • Renaming unique creatures doesn’t update the UI promptly

This stuff should be in the next update and we hope to get that out soon. That (if all goes well) should coincide with the next batch of invites. The backend has been fine with the first batch and with the bugs we have fixed recently it makes sense to get more folks in.

I’m going to pick a few simpler tickets now so I can get through a bunch over the coming days. Along with that I need to do some work on the client so we can support ‘props’ that are separate from tiles. More news on that soon as it should be a fun one :)

Ok folks, until next time.

TaleSpire Dev Daily 59

2019-01-17 23:19:49 +0000

Hey again, it’s been a satisfying day. I spent the morning tracing through the logic that handles creature ownership and some users have seen a bug where people lose control of unique creatures seemingly randomly. By doing that I found one mistake that was causing 2 bugs:

  • a unique creature deleted and respawned from the unique creature panel has incorrect ownership
  • making a creature unique gives the GM permissions to the unique on the server even if they didn’t have that previously have that client side.

Luckily the bugs came from human error rather than something fundamentally wrong with the design of the system, so that was nice. I also managed to consistently reproduce another bug:

  • If a player joins a room that already contains a unique creature they should have permission to, it doesnt give them that permission.

I expect this is a mistake is how we setup the synchronized version of the board.

I think tomorrow I should be able to get that bug fixed with plenty of time to spare. With the rest of the I want to go after a more fleeting and thus trickier bug. I have seen cases where I have dragged in a unique and all seems to be fine, but then the unique disappears. It almost looks like twhat happens when a unique is summoned to another board so I’ll probably start debugging there and see what comes up.

I’d be quiet happy if I can just get a reliable way to reproduce the bug tomorrow. I’ll then be in a good place to fix it Monday, or over the weekend if I fancy.

After the month or so of crunch I am really trying to get back in the habit of doing things other than TaleSpire in my free time so I don’t burn out. I’ve been playing ff9 again after a 2 month break and I really want to start looking back into my personal projects again. Maybe next Wednesday I’ll restart the lisp streams.

Right, time to get some rest.


TaleSpire Dev Daily 58

2019-01-16 23:35:06 +0000

Evening all, only a quick one tonight as I’m super tired. However I can let you know that we just had a pretty exciting planning session where we went through a bunch of designs of ways to improve the building system. From walls to thin corridors and from floors to props, the next iteration of the building system could be very interesting.

Not everything will be solved in the way that seems most obvious but when we have finished some prototype and have something to back up our ramblings we’ll put out a video (maybe a stream) where we talk about the design issue, our findings and where we are taking it.

Probably a month out but we’ll certainly keep you posted. Also don’t worry this wont delay the next batch of people admitted to the alpha, we’ll be letting more of you in before the new system lands.

Until tomorrow,


TaleSpire Dev Daily 57

2019-01-16 00:36:24 +0000

Quick rundown of client-side from today:

  • Fix a bug that occurred in battle mode when clicking next with an empty creature list
  • Made the ? button hide the help if already open
  • Made the atmosphere music loop with a configurable delay between each loop.
  • Fixed drag-select so that it would work properly when you let go over a UI element
  • Atmosphere block are now drag-selectable
  • Try to ensure that steam definitely knows that the game has shutdown [0]
  • Don’t sync board if you are leaving due to the board being deleted.

I also started on the following

  • Can’t stand on dirt (Tilled)
  • Unique creature panel is not updated on creature rename.

The dirt one I though would be a doddle and it was missing some required information, however after adding that it still doesn’t work. It’ll be something stupid I’m overlooking but that’s where it is now

The unique creature ticket is the start of a few issues I’ll be working on in this area. For some reason the ui is not updating when the rename is applied and I have to close the panel and open it again.

After that I’ve got to look into some issues with creature ownership. Those are annoying as I don’t know what triggers them so it’s gonna be a lot of logging, testing and code review. We’ve already seen this mess with people’s streams so it’s a high priority one for me right now

I also took a couple of hours to look at some work I need to do on the backend. One of the pressing tickets is that, currently, there is no limit to the number of older versions of your boards we store. We obviously need this as storing more that we need increases our costs and thus limits how far each sale of TS can take us. It’s not a hard task but having some time to muse over the best way to structure the queries was nice. The second backend task was to design a basic stats collecting module so we can start getting better info on how many people are active at different times of day and, on average, what kinds of requests they make. This is important so we can make some better guesses at how load etc will increase as we move from hundreds to thousands of users and beyond.

One last thing, when I went to bed last night I realized that the line of sight technique is pretty simple if we limit the number of creatures involved. It goes roughly like this (for this example we will use 256 as the max number of creatures):

  • make an ssbo which contains an array of 256 bools
  • find all creatures in range and give each an id between 0 & 256
  • clear the ssbo so all entries are false
  • render the scene from the selected creatures position, in the 6 cardinal directions, into a cubemap
  • render the occluders as black and creatures with their red color component based on their id. e.g. vec4(id/255)
  • draw a quad and use the fragment stage to read a single texel from each face. Write true into the array using the red component of the texel as the index into the ssbo array e.g. result[(int)(sample.r * 256)] = true
  • pull the data back to the cpu side.

The slots that are true state that the respective creature is in line of sight. We can use a 512x512 texture to trade off accuracy for speed but given that we only need this once per time something moves it should be no problem to have something a little higher res.

I haven’t thought of a way to do it without an ssbo (or writable image) yet though.

I might make a prototype of this in lisp as a stream next week. Sounds pretty achievable in 2 hours.

Goodnight folks, back tomorrow with more.

[0] We can the Steamworks shutdown call in an OnDestroy which should have been triggered on all normal terminations. However sometimes it still didnt work, so we’ve added another call to it from a method that is explicitly called on shutdown. !