Morgemil Game Update #1

I’ve been working off and on making a video game in F#. I thought I’d drop an update saying my progress.


I’ve done about 36 commits in the past two months according to GitHub. Although progress technically started on Mar 15, 2015.



I added code coverage tracking. Along with code coverage, I’ve been adding more tests and I’ve found surprising edge cases that are now covered.

Code Coverage

I added the first piece of Azure DevOps automated builds.

AzDevOps Build

I’ve started building out DTOs (Data Transfer Objects) with the intention of using these for both network and file system serialization/deserialization.


To compare the above DTO against the below model, you might notice that the DTO above uses enumerations and lists to represent what the model below represents as discriminated unions. This makes the DTO a less strict intermediate object between the domain model below, and the data layer which might be JSON, SQL, etc.


I added SadConsole package and started playing around with rendering a simple tilemap.

Example TileMap

I’ve confirmed that my game can run so far on both Windows 10 and Linux (elementary OS 5.0 Juno specifically).

I’ve made a naive, but surprisingly performant Game Map structure.

TileMap Code

As things progress, most of my game components are turning into some version of Entity-Component-Systems. And then further, most of my game objects, whether players, monsters, items, or anything on the map, are turning into collections of tables. Each of these tables have a list of rows, and then also usually various methods of indexing: by location, by the unique ID, by whatever chosen value on the row that has an index.

So I’ve created some interfaces that I can implement as required, and they seem to be doing pretty well with some default base implementations available, as well as various static methods that operate on anything that implements these interfaces. Only time will tell if this is a good solution, but it’s easy to reason about right now, and the game doesn’t have stringent real-time processing requirements.



I’m working on things. Progress is progress, and is well valued. My code is here.