Category: Development

Shadowrun: Corrosion – A Tough Decision

Since starting development on Shadowrun: Corrosion I’ve had a tremendous amount of fun watching it manifest into something that people actually seemed to enjoy. I never actually thought that what started as an educational project for my brother and I would eventually attract more than 250 players.

One of the challenges was trying to stay true to the SR3 rules. We thought that if we just kept on trucking and kept expanding the foundation and implementing more material, we’d eventually get there. We made a few changes in order to standardise a few things because the rules have so many exceptions that it was going to become impossible to keep track of all those exceptions in the code. We built a fairly flexible foundation in which we were able to implement almost 95% of all the rules fairly loyally.

For all the things we did right, we also had a lot of problems — problems we unfortunately were not able to overcome.

The first problem was the performance in missions. When we first started out, things were jerky, but it was acceptable as an alpha because we thought we would be able to come up with some performance enhancements in order to improve upon that.  Unfortunately, we never did and in developing the options further, the performance just suffered more and more. We never did find a way to boost the performance.

The second problem was the fallout of implementing PvP. There was quite a backlash from the players because it was implemented too quickly and without a good understanding of the consequences. For a long time we were looking for the right way to offer PvP options without people getting ganked right, left and center.

The third problem was that the more we developed, the better we understood what we did wrong and what we had to redo to keep up with the curve. A good example was our shop mechanics.

The fourth problem was that despite several offers for help, I wasn’t able to set up an infrastructure for code sharing, testing, quality control, etc.

All this created a situation where we had a hard time keeping up with the demands of the players, creating some friction with people like Rockso, ShadowDragon, etc. As we kept developing, we kept falling behind further and further and it became clear that the project was collapsing under the weight of itsown ambition. Adepts hadn’t been implemented, let alone the matrix or the astral realm. No complex behaviour trees for opponents like I wanted…

I can go on, but I won’t because, well… no use crying over spilt milk.

The death blow came with the latest problems with lag. What is causing the sudden bursts of lag is still somewhat of a mystery. It’s likely that our server is being brought down by the large number of queries. It’s not a beefy server, but one that I would expect to have more than enough resources to cover us. Having set up a test environment on my rather bad ass box at home, I can safely say that there’s no lag here, confirming my suspicions that it’s our server.

So we had a choice to make; either we were going to move to a different server — perhaps something a little more professional — and start paying, or figure out a way to lower the load on the database. Unfortunately, the latter option means we’ll have to make some seriously fundamental changes to the framework. In hindsight, we over-extended ourselves and were too ambitious.

So as of right now, I am ceasing all development to Shadowrun: Corrosion. My brother has moved on to other games, mostly developing stuff to earn his degree while I have several small projects going on. I also have some ideas on different games that may or may not come to some sort of fruition.

Luckily for all of us, there’s an RPG in development as well as an ambitious MMO. Check it out on www.shadowrun.com.

It’s been a great experience and I’ve had a lot of fun chatting with all of you. I’ve also been amazed at how loyal most have you been and your advice and suggestions have been invaluable to me. You’ve taught me a lot.

It’s been real.

Map Generation, Land Allocation

Leaps and bounds! After yesterday’s breakthrough with the Voronoi polygon generation, I’ve made significant improvements. One of the things that I was getting stuck on was the proper distribution of landmass using a Perlin noise library. I ended up stumbling upon a clue hidden in the code of someone else who had been doing something similar, which incorporated the noise with the distance of the polygon to the center of the map, combined with a factor of the land vs water ratio. I couldn’t easily incorporate what I had found into my own script, but once I stumbled across it, it was like inception, it was only a matter of time. Take a look below at an example. These are 4000 random polygon sites on a 1024×768 canvas, looped twice through the Lloyds relaxation algorithm.

Voronoi polygons run through a Perlin noise generator. 4000 polygons on a 1024×768 field.

I’ve been able to identify land, water (ocean) and water (lake), and I also have elevation down. Many people suggest that I shouldn’t let elevation depend on Perlin, but let it depend on the distance to an ocean, but for now I’m going to go with the randomly generated noise and see where that takes me. If it doesn’t work out I can always come back to it. Hopefully tomorrow I’ll be able to use that elevation and generate a moisture variable for each polygon and combines those into different biomes.

¬†Momentum and forward motion is everything with projects like these, so hopefully I’ll have more tomorrow. :)