The theme for ludumdare 43 was "Sacrifices must be made". I decided to force the player to sacrifice their spelling.
Brief post mortem
I was very satisfied with this game. It's a very 'me' sort of game. I enjoy the style I went with, everything was executed well, and there is not much more I would polish about this game. I wish I had spent more time 'marketing' this game on the ludumdare site and providing feedback, but I found myself too busy to participate in the post-jam rituals this go around.
The design choice on how to highlight the current carat position was one of my main challenges for this game. I tried highlighting invalid characters, I tried highlighting the next character, and I tried greying out the incompleted parts of the word. In the end I went with every solution I had come up with. Easy will highlight the incorrect characters, the next character to type, and grey out the remaining word. Medium will highlight invalid characters and grey out the remaining word. Hard highlights the invalid characters, and insane has no character color changes.
a bunch of times now. Setup was incredibly easy and straight forward as usual. This go around I decided to design my own 'simple anti-cheat' which is explained further down this page.
The dictionary was pulled from
of the 1000 most common english words from google. This worked wonderfully. I created a
small python script
to filter the dictionary into difficulty brackets and manually removed 'bad' words from the master list as I found them through testing. There may be 'bad' words inside the dictionary still, but I'm not too concerned.
Reading the title of this section, your first reaction might be to scoff at the idea of doing an anti cheat for a gamejam game. But from one of my previous games (aVOID), I learned there are some participants willing to dedicate multiple hours of each day to filling your leaderboard with the navy seal copypasta word by word. Incredible. Preventing cheating is hopeless, I knew it could only take around 5 minutes going through the github to start pushing fake scores. But the biggest deterrent to cheating, at least in a game jam environment, is making it too much effort to bother with. Essentially what I did was store the first character of every word the user types correctly, store the sum of the numeric values for those characters, and store their difficulty with their name (ie: Andrew|Medium) alongside their score. When another client downloads the leaderboard, it verifies the integrity of these scores by checking the sum of the character values against the secret sum value, the length of the characters is the same as their score, and then filters it into the board through their difficulty. If any of these values are incorrect or missing, the result is either ignored or removed from the board.
The pros of this method are:
- You cant add scores with cheat engine without a ton of extra work (Deterrence)
The cons of this method:
- You can still do literally anything else such as: Decompile and steal the secret key, Figure out the budget encryption method and manually push fake info through cheat engine.
Why not use encryption
Because the whole goal was to add time to creating fake info. That time to generate fake info becomes just a few seconds longer if I force the attacker to write a very basic 'encrypt' method rather than calling something like bcrypt.encrypt('my fake score & name'). The information on the board is not sensitive, the process of getting that information on the board / retrieving it is, if that sounds correct.