8Dromeda Blog
Ternadim Progress
Uh oh... what should I write. This is the first blog post ever about Ternadim, but I'll get down to business right away.
During the past two months, Ternadim got a lot of not-so-obvious additions, tweaks and fixes. Here are some hilights:
- Map generator now generates cliffs (they're awesome)
- Grass and sand now have visible grids. I have been alternating between not having and having a grid, and I think I will now stick to having a visible grid.
- Fog of war is now based on line of sight - you can hide units behind trees, hills and in pits.
- Now the AI respects the fog of war! If you stay hidden, they won't know where you are - but they will search for you.
- The mission editor was almost completely rewritten - it is now based on a simple keyboard-based interface. The old interface was too clumsy for actual usage; using this one is quite enjoyable once you get the hang of it.
- And now there are two re-made campaign missions for each faction, representing the somewhat altered style in which they all will be created.
[progress intensifies]
So then, time-travelling to about two weeks ago, I was once again playing a randomly-generated Ternadim mission just for the fun of beating the silly AI in some unexpected situation (if you haven't tried, you should!), and...
Well honestly I don't even know when I first thought of it, but in any case I decided that making a very streamlined online mission and high score repository would fit the usage very well.
So there comes...

...this thing called "Ternadim Online".
The basic idea is obvious: You play stuff, and if it appears to be a good challenge, you input some nickname and press "Upload" to send the mission (wherever it came) to the Ternadim server. Or if you just finished it, the mission is sent along with the high score, and the server sorts out whether it's a newly uploaded one or not.
At any time, anyone owning a copy of Ternadim can browse and play the uploaded missions.
There are three things to point out:
- This system does not do anything automatically in the background. You only contact the server if you press an "Upload" or "Download" (or the "Online") button.
- It does not use usernames or passwords. When being downloaded, each client gets their own client key (the key.dat file), which the server will check. These can then be used for mitigating abuse. You're free to use any nickname or remain anonymous.
- The user interface is brutal: You directly see hashes (checksums) of the missions and the client keys.
Other
Mission file format
Since Skirmish Alpha 2 (a looong time ago), the file format was reworked. It is now based on JSON and should be quite easily interoperable with third-party tools if needed. There's some info about it in the README.txt file distributed with Ternadim. However, the format is still subject to changes.
Alpha
Here you can download a copy of Ternadim Online Alpha 2:
- ternadim_online_alpha_2_win32.zip (2.9MB zip, win32/wine)
Unless I decide to release a yet another alpha, this alpha version will have access to the server all the way until the official release.
You can come and chat about it on IRC at #8dromeda @ Freenode. (webchat) There's no forum or anything at least yet. (Reddit works too, though.)
Next
Next I'll be putting all of my silly ideas into the campaign mode of the game, possibly adding some other stuff along the way.
The release will be absolutely glorious!
Pricing
Once finished to version 1, Ternadim will be sold as pay-what-you-want. You will get an online key if you pay $1 or more.
I have decided to use Gumroad as the selling platform - it's very indie-do-whatever-you-want friendly and has just the right amount of integration ability. One thing worth noting is that it does not support PayPal, but it's credit card checkout is extremely simple. (I tested it; now I wonder why anyone would use PayPal for something like this...)
Umm... see you!
- A of 8Dromeda
Show commentsSoilnar April Update
A lot has happened since I last posted! I seem to manage to pull Soilnar forward at a surprisingly constant rate. There has been a week or so with no development; the rest is pure progress. So, eight weeks of that.
Under the hood
After writing the previous post on 2013-02-02, I implemented the movement-based activity tracking mentioned in there and got the idle resource consumption of laser turrets down to zero. There has been a lot of small and mid-sized rework, additions, bugfixes and optimizations, but nothing major. The framework is so modular and locked down already that most things don't affect anything else.
Later (a week ago or so), after talking about some gameplay things on IRC, I decided to change one of the original plans. Instead of having separate sites to travel between in the overworld, the "underworld" is now a huge continuous area. You can move from any location to other via regular travel, if you have the time and can handle the risks.
The engine handled this particularly well - it's basically solely designed for efficiently and actively keeping track of what each client should see, including division of areas into chunks. I needed to write a tighter tile format for handling and saving the world though - textual IDs and JSON was too slow and space-inefficient. The new format utilizes base64-encoded binary for saving the bulk tile content.
Sand Travel
Most ships are equipped with Sand Drive, which allows quick travel between sandy areas, given that the player has the required fuel. Using it, plains can be traversed very quickly.
In a world, there are a number of pre-existing sites which have the same kind of sand. These sites contain valuable facilities, like refineries and traders. Players are also able to create sites, via expensive "Sand Bombs". This is a useful way to enable quick travel into a mountain base.
World Generation
In a Soilnar world, a large majority of things are procedurally generated. Of course, generation is limited only to the level where it operates - for example, it won't generate the graphics for buildings, it just uses pre-drawn ones - but the end result is delightfully different for each server reset.
During this time, I adapted the existing generator for the hugeness of the new world - tuning mineral occurrences, adding two new biomes and optimized performance. It can whip up a 1000x1000 world like shown in the screenshots below in a matter of seconds. A 4000x4000 world is perfectly manageable for a persistent server.
Ships
The ship and the ship part system was fully redesigned and polished. Now slots are positional, and parts get damage based on their position. Attaching/removing parts works.
I also added a bunch of new ship models.
Art/Graphics
Not long time after the previous post, I added some kind of shadows to the visible walls. I wasn't yet really satisfied with that, so I made those walls textured, and made tiles 10x8 instead of 10x10 to get some feel of looking the world at an angle.
The end result is much nicer to look at and doesn't get in the way of gameplay. Making textures for it is still straightforward, which is a requirement for me if I'm ever going to get this done.
In addition to that, I fully reworked the textures to be brighter and more interesting, and turned the overworld base color to black. And the UI got a full recoloring and rework too. Also, I dug around on the internet and found the perfect font. All the ship graphics were redone along with the other rework in there, with a completely new style.
Compare that to the initial graphics.
I made it so that ships leave markings on the ground. It makes busy places really interesting to look at, and always gives you clues of where you might find something useful.
I think I'm becoming better at (pixel) art, in my own weird way. I manage to pull the weirdest of colors and make them work together, and I love it.
Buildings
These new functional buildings have been added:
- Iron Ore Refinery (resource trader, ore refinery)
- Interplanetary Hub Office (resource trader)
- Trader Office (yard trader)
- Ammunition shop (shop)
Trading
Soilnar implements a couple of trading models.
| Shop | A shop provides an infinite and immediate supply of certain things. For example, an Ammo Shop is implemented using this, as it doesn't make too much sense to wiggle around with the logistics of such consumable things. |
|---|---|
| Resource Trader | A resource trader sells and buys resources - minerals and entities of certain model. It can vary the prices according to supply and demand. For example, an Iron Ore Refinery buys iron ore, and sells the produced Refined Iron. |
| Yard Trader | A yard trader buys and sells anything that you can place on their marked yard. They will price anything, and they will sell it as-is to anyone. In case of running out of goods, the trader automatically re-supplies some. In the game, the Trader uses this model. |
Production
Some buildings can automatically produce or refine stuff. There is currently only one system of this type - the Ore Refinery system.
Ore Refinery
|
An ore refinery takes certain ore from the cargo hold of itself, turns it into something else in a certain amount of time, and puts it back.
Factories are made by combining this with Resource Trading. Currently Iron Ore Refinery implements this. |
|---|
Other
I also added some editor functionality, did some work on NPCs (an NPC who simply mines stuff can be created now - but that's not really useful for the game) and added some keyboard shortcuts.
And then!
What's next? Well, all I can really say is that my to-do list is terribly long. Probably time for a short break and then get onto more stuffs.
I'm aiming for an alpha release sometime this year.
You can try all this at http://soilnar.8dromeda.net/ - I'd be happy to see a short let's play or some thoughts about it. Please keep in mind that it's still pre-alpha though!
- A of 8Dromeda
Show commentsProject Soilnar
I started writing Soilnar at the end of the summer of 2012. I don't even remember how I ended up doing that, but for some reason I did, and I now have some 25k lines of C++/Javascript code that basically works, and a few notebook pages full of design to go with it.
Basically the idea is to make a 2D top-down massively multiplayer open world space mining RPG, but with not really that much space in it at all. And to do that with somewhat crazy tech.
Soilnar (name is still subject to change) is about a moon, or a planet, in a desolate corner of space, rich of useful minerals, on which the futuristic society has founded one of their next large mining operations. The player controls a private enterpreneur who has moved there to make a living by mining, trading and fighting. There are friendly and unfriendly places, NPCs and other players.
Gameplay
The basic gameplay would go as so: There are two views: the "overworld" view, and the "site" view. Sites can be mining sites, trading sites, rocket launch stations or any kinds of special events like a destructed alien city with interesting loot. Travel between sites consumes a kind of fuel, which makes location-efficiency of operations a priority. On sites, the player controls his mining vessel ("ship"). Different kinds of ships can be bought, and all ships support a number of add-on components.
Eve Online is a notable inspiration to me. Soilnar will employ a system of corporations similar to Eve, but in a reasonably simpler form to suit the current scale of the game. My goal is to have enough of NPC stuff going on for it to make sense to play as a sole player on the whole server, and allow the game to scale in a player-driven direction at times when the player count permits. Basically I am talking about a game that makes almost equally much sense for 1 player, as 1000 players. Which brings me to the technology.
Tech
Soilnar is constructed on an entity-component system, where entities are literally nothing, and components are literally everything. An entity is an unique id, which is not stored anywhere by itself; rather it is used solely as a reference to the components of the entity. This works out as system[uid] = component and [system[uid] for system in systems] = entity.
Initially I wrote Soilnar in node.js. I was expecting it to be slower than I'd prefer... but it turned out to be *very* slow. It could barely support like three players in a mostly dead world on a Pentium 4. Optimizing was clearly not an option - there were not that much gains to be gained. As the heavy E-C model simply wasn't going to perform well in Javascript, my next option was C++. Long story short, it took roughly a month and turned out to be a good idea, giving almost two orders of magnitude of more performance.
The client is handled by a regular web browser, using basic HTML5 stuff.
What's Next?
There are still some rough edges: Testing has shown that I absolutely need to implement some form of ranged activity events to allow making non-polling AIs - otherwise making a large active world is going to be impossible.
Much of the basic game is still missing: attaching components, basic NPCs, managing corporations, secure login. Being a spare-time project, this is going to take a good bunch of time.
Otherwise, I'm more of a programmer than an artist or other kind of a content creator, so I need to lay down plans of how game content will be done. I will focus on allowing players to build things in the world, which moves my responsibilities to more on the programming and system design side - but somebody has to make the world and the building blocks - and that somebody is me.
That's... probably enough for this time. Comments? Twitter is your friend!
- A of 8Dromeda
Show commentsFirst Post!
In a true DIY spirit, I just finished rewriting the code for this website and writing the code for this blog. It is a UNIX Makefile + Python script that produces a static website. It has it's cons, but the pros are:
- Easy to test on a development machine
- Very fast and cheap hosting - can be hosted literally anywhere
- The site can never be down because of server-side scripting bugs.
I'm starting a blog here for writing longer ramblings and analyses about random things and stuff I am thinking about. Things like:
- Design of games
- Writing about the tech behind 8Dromeda games (and other games)
- Wondering about where to go and what to try
- Begging for people to try my things
- How to (not) get anything done whatsoever when you're tied to other things 38% of your wake-up time
I am interested in seeing whether somebody might be interested in reading the kind of stuff I might happen to write. This will also serve as a history record of things I have done.
- A of 8Dromeda