Spandex For All! KarjaSoft Announces Spandex Force: Superhero U

July 16th, 2011

Indeed, the day has finally come! So, go check out the game right away at The official press release follows below:


Spandex For All! KarjaSoft Announces Spandex Force: Superhero U

Stockholm, Sweden — July 16, 2011 — Independent game developer KarjaSoft proudly announces the release of Spandex Force: Superhero U, a tongue-in-cheek puzzle game with RPG and adventure elements.

Spandex Force: Superhero U is a superhero-themed puzzle game for Windows and Mac that lets the player create his or her own hero and attend the prestigious university Superhero U in Vigilance Valley. The game features many different kinds of minigames, including, but not limited to match-3 battles against teachers, other students and nefarious villains threatening the school.

Other minigames let the player rescue old ladies in distress, collect the precious metal Absurdium, or focus on physical, elemental and mental training. Three different match-3 mechanics and a large variety of puzzles are available, and everything is presented in a tongue-in-cheek manner that pokes fun at superhero cliches. The player can also customize his or her hero with different accessories and weapons, choose from various superpowers and develop the hero further by collecting experience and reputation points.


“Spandex Force: Superhero U is definitely the best superhero RPG-puzzle-adventure game currently on the market,” says Miro Karjalainen, owner of KarjaSoft, not in the least bit deterred by the fact that the only two such games available are Spandex Force: Superhero U and its prequel, Spandex Force.

More information, screenshots and downloads can be found on the official webpage:

About KarjaSoft:

KarjaSoft started developing casual computer games in 2006. The first release was the fluffy arcade game Sheeplings in 2007, followed by Spandex Force in 2008 and the adventure/pet raising game Wildhollow in 2009. Current plans involve world-wide market domination in superhero puzzle/RPG games by 2012.


Miro Karjalainen

Now I’m going to watch the new X-Men movie to celebrate!

RPG Difficulties and Spandex Force

July 6th, 2011

Tonight I will have a few beers downtown.

Tomorrow I will go to Croatia for some sun, sea, beer and hiking in a national park.

Next week, unless something unforeseen shows up, I will release Spandex Force: Superhero U on an unsuspecting public.

But right now I intend to muse about difficulty in RPGs. The Rampant Coyote posted an entry about this and it got me thinking. He argues that a difficulty setting doesn’t necessarily have to mean just a more difficult game – it could also entail a new way of playing the game. It does make sense. Almost all games are full of (more or less) meta games – collect extra lives in SMB3, get all collectables in a casual game, and so on. A difficulty level that would result in a new way of playing the game is an intriguing thought, and might simply mean putting focus on some of the metagames instead of simply the main game.

Also, I agree with the necessity for difficulty levels in action RPGs. I just suck at action games and if I have to spend time on learning how to get my motor skills to work I’d rather press a big fat DELETE button and do something else. Give me the easiest setting, or give me hell!

Then again, I am strongly against difficulty levels in turn based RPGs and strategy games. For some reason I like the idea of playing the game like a puzzle; learn what I need to do to overcome this obstacle, and once I’ve come up with a solution it’s reproducable. An environment like that also lends itself well to meta games. What’s the lowest level I can beat Final Fantasy 5 at? What spells can I get at a ridiculously early stage of the game? Can I kill the dragon on Emerald Isle?

However, I realize that that point of view can be a bit obsessive and might not reflect the “normal” gamer. So I’ve actually opted for a different method with variable difficulty in Spandex Force: Superhero U. I imagine that the majority of players would rather just play and have everything adapt itself automatically.

Every minigame has a difficulty rating, from 1 to infinity. 1 is extremely easy, 20 getting challenging, 100 is very very hard. This difficulty determines how many tokens you have to collect to finish a minigame, or the opponent’s level (and the levels of his superpowers).

How is this difficulty determined? I’m glad you asked!

A base difficulty value is determined based on the player’s level. This value can range between the player’s level and the player’s level times 3. Then, each task has a relative difficulty from 1-10. Tasks in the first missions have a relative difficulty of 1-2, but the fights in the last episode have a difficulty of 9-10. The relative difficulty determines if the lower or the higher end of the base difficulty will be chosen. Let’s take an example:

Justice Guy is level 5, and will enter a task with relative difficulty 4.
Base difficulty = 5-15
Modified difficulty = (max – min) / 10 * relative difficulty + min = (15 – 5)/10 * 4 + 5 = 9

So, that’s it? The difficulty will be 9? Well, not exactly.

During gameplay, the player has a variable keeping track of how well he does. This variable starts at 50 and depending on whether or not he loses or wins minigames it increases and decreases to range between 0-100. This variable determines how likely it is that a new token falling onto the board will create a match. In other words: if you play well, it’s less likely that you’ll receive “free” chains when matching tokens, but more likely if things aren’t going so well for you.

Also, this variable affects the modified difficulty too. It can modify the value by 50%-200%. Let’s continue our previous example:

Justice Guy is level 5, and will enter a task with relative difficulty 4. He has a success variable rating of 78.
Modified difficulty = 9
After the variable of 78 has been taken into account, the difficulty is = 9 * 1.8 = 16

The final difficulty will actually be 16, in other words? Yes, almost. For scaling reasons I divide that value by two, though. So the final difficulty is 8.

In fact, I was toying with applying a quadratic transformation afterwards to smooth out the value, and give it a ceiling. It turned out to be a bad idea, though – it was hard finding a formula that would give suitable difficulty early as well as in the end. I tried this one, for example:

Justice Guy is level 5, and will enter a task with relative difficulty 4. He has a success variable rating of 78.
Modified difficulty = 16
Transformed difficulty = -0.0025x*x + 1x + 0.0025 = -0,64 + 16 + 0.0025 = 15.3625

Not much difference, eh? It would have been more of a difference if x was 100:

Transformed difficulty = -0.0025x*x + 1x + 0.0025 = -25 + 100 + 0.0025 = 75.0025

It seemed like a good idea at the time, but in the end I let the difficulty remain pretty linear. Theoretically I think that this means that a player can level up too much to finish the game…but if anyone has that much time to spare, I’ll eat my hat!

My Next Game Will Be…

June 27th, 2011

Thanks to everyone who voted in my last blog post! I had a secret favourite that I was rooting for, and it seems that at least a handful of people agreed with me, because that’s the one that got most votes. If I could be arsed to get around the IP + cookie check in the voting plugin I just might have cheated and added even more votes to that option, but luckily I didn’t have to.

“Okay, okay! Tell us which game won already,” I hear you exclaim. Superhero Princess Maker, that’s what!

Of course, I can’t go on calling it Superhero Princess Maker, so I thought of a more fitting name: Spandex Force: Champion Rising. And here is some concept art to boot:

So, what’s this game all about? Imagine the setting:

There’s a superhero convention in town, and the Blizzard Wizard is getting into a heated argument with Infinitorax Supreme.

Infinitorax: “Superheroes today… No skill, no power, no concept of ethics or morality!”
Blizzard: “Well, I for one blame society for that. With proper guidance every superpowered being could be a paragon of justice.”
Infinitorax: “Is that what you believe? No, dear Blizzard Wizard, a hero’s mettle is predetermined and nothing we can do changes that.”
Blizzard: “Is not!”
Infinitorax: “Is too!”
Blizzard: “Is NOT!”
Infinitorax: “Really? How about…THAT…one? That pathetic, useless, witless excuse for a hero lurking in the corner? Is that a creature destined for greatness?”
Blizzard: “Well… Yes! I truly believe that even such a miserable hero could be made great with the right guidance!”
Infinitorax: “I see… Fancy a wager, my dear Blizzard Wizard? You have one year to turn that useless pile of excrement into a fine jewel.”
Blizzard: “It’s a deal!”

The game will take place over 365 days. You guide the young hero in his/her daily routine, ensure that the stats are raised, that powers are learned, and that the proper ethics are upheld. If you fail to raise the stats, he/she will become a useless, powerless hero and you will lose the bet. If you fail to keep the ethics up, the hero will become a supervillain instead.

Throughout the year there will be everyday chores, meetings with strange heroes and villains, puzzles and many weird encounters. Most of the details are undetermined so far, and everything stated so far is just a concept…but it wouldn’t surprise me if this is similar to what the end product will be like.

But before I start working on this game I intend to release Spandex Force: Superhero U, of course!

Spandex Force: Superhero U v0.3 BETA Update

June 9th, 2011

Spandex Force: Superhero U is progressing well. Very well. In fact, the first demo build has been sent off to a potential distributor and I’m waiting for a response that will determine how much I will have to focus on guerilla marketing and self-publishing.

The current version of the game is 0.3 BETA, and it’s pretty much feature-complete. You can create your own hero, there’s an Adventure Mode divided into 5 chapters, 15 different school classes to choose from, randomly composed artifacts to purchase, 27 superpowers to buy and level up, your hero collects experience points and reputation, fellow students offer a few optional side quests, and there are lots and lots of different villains, students and teachers to battle. Additionally, there are 20 achievements/trophies to unlock, a Relaxed Mode for some non-timed relaxed play, and a Battle Arena where you can battle other players’ characters. All in all, the game is starting to look rather nifty.

So, why don’t I release it already?

There are a few reasons:

  • I’m waiting for feedback from the distributor
  • I need to add some minor things – shield artifacts, areas on the screens to examine in order to get a few silly messages and some other small details
  • And most importantly, I need to examine the difficulty and the balancing

Anyone feel like doing some beta testing to help out with the third point? Send me an e-mail at!

Spandex Force Online Accounts Revisited

May 2nd, 2011

In a previous blog post I discussed online accounts for my upcoming game Spandex Force: Superhero U. I have done some thinking and revised my API quite a bit. For the technically inclined people, here’s a summary of how I’m doing things instead:

First of all, the main reason for the online accounts is to allow a user to play his game on various platforms. Windows, Mac, online, iPhone, Android, etc. All clients will connect to the online account and be able to access the available heroes.

In order to allow this, I have some basic criteria:

  • A simple REST based API. No SSL encryption since all platforms cannot support it
  • Extremely easy to use. There’s no use in having online accounts if it introduces problems for the end user
  • Light-weight. I’ll be using my webserver for this, so I hope that it’ll cope with this if the traffic is light-weight

My first approach included email and password authentication, and the user had to register an account in order to activate these features. Pretty simple, but not simple enough. In version 2 of my API I’m going for this approach instead:

  • An unregistered version of the game will request an ID from the server. The unregistered version will store everything both locally and online.
  • As soon as a registration code is entered, the server will check if another ID already has used that registration code. If so, it will tell the client to start using that ID instead, and synchronize the heroes between the two IDs. If no ID has used the registration code, it simply assigns it to the existing ID.
  • The client automatically remembers the registration code and which ID to connect to, and does a local and online save of everything.

The benefit of this approach is that the user doesn’t have to register an account – he only has to enter a registration code. Also, he doesn’t have to give up any personal information at all. Also, it’s a bit of a piracy deterrent: since a registration code is connected with the heroes that are saved, anyone who spreads his registration code will let others access his stuff…

Additionally, the actual API has been changed a bit:

  • Seed (input: ID) – Generate a new seed value for this user
  • ID (input: ID, registration key, old ID) – Get a new ID, or get an ID connected to a registration code (depending on the input)
  • Login (input: ID, hash) – Authenticate the user
  • Heroes (input: ID, hash) – Get a list of this user’s heroes
  • Save (input: ID, hash, revision, hero data) – Save a hero
  • Load (input: ID, hash, hero name) – Load a hero
  • Delete (input: ID, hash, hero name) – Delete a hero
  • Opponents (input: ID, hash, hero name) – Get suitable opponents for a hero
  • Set achievement (input: ID, hash, achievement) – Store an achievement status
  • Get achievements (input: ID, hash) – Get a list of all achievements

You can see that the API has been expanded with getting opponents to fight (used in the Battle Arena) and storing/getting achievements. All in all, I think that this is a step in the right direction. Everything seems to be working smoothly now and the only downside is that it can take a few seconds to log in or get the list of current heroes, as opposed to if everything was done locally.

Can’t wait to see all the problems that will pop up once I let people actually use this…