I hope you survived the holidays regardless of if you celebrated them or not. I am excited to write about my proceedings on Highscore and saving user settings and the highscore list locally, my Discord server, Newsletter integration on my Blog and some other things I have been working on.
Let’s start with the more tedious ones first: The saving of user settings. Firstly I used the ds_map_secure_save() function to save the ds_map I stored the relevant user data in. But after looking around and asking experienced developers on the GameMaker Discord, I was nudged into learning how to JSON encode my map and then save and load it. The JSON saving is more versatile and lets the player modify the files himself so he can switch things up that are normally restricted by the UI. I found that in many games that is often a good thing to trouble shoot some problems or to give developers feedback. JSON is a thing in web development and basically any online service these days can work with it so it’s not a bad idea to base savings and highscore systems on it, as it’s a widely availabe standard.
Just to be able to save and load those files was quite a task, but I got i done and so the player now won’t need to set up all the settings, key bindings, player names and so on each run(as is expected from any modern game).
Oh, did I mention player names? Yes, the player can now type in their nickname! It’s a thing I was a bit frightened to do, as typing in something in Gamemaker based games is a bit more challenging than setting up an input box with a single command line.
This feature is spawning a whole lot of more ideas to be tackled later on. I will need some support to input basic nicknames when using a controller. I had a chat with Kat3 on this and we came up with the idea of an input reel that lets you utilize an analog stick. But that will have to wait a bit longer. Then I want to have the option to use previous names. Maybe I will even tie a kind of semi automatic progress saving system to that. And whoop we slide into the trap of feature bloat that widens the scope dramatically. I will have to start again to limit myself a bit more in the near future.
I want to make the highscore hunt an integral part of game play. But for that to happen, I need to actually maintain, save and load one. And that works now, too. I use a similar JSON encoding for the data to be saved in a local file. Highest aspirations in the back of my head even dream of online highscores but those are more a fantasy than something in my immediate capabilities. The score list ist now displayed and updated after each game in the main menu. I will have to polish everything some more with visual indicators for the last game’s position in the list (if you made it into the top 20 displayed), the endscreen to be more fancy and show if you’ve placed somewhere in there and so on. It’s all pretty barebones as of now but I coded it in a way that should be easily be expandable. I store every the names and scores in two separate ds_lists and I sort them according to the score value. It would be possible to also track and list elapsed game time enemy defeats and so on. I am quite happy how it all turned out but currently it has one issue: cheating. The player can modify the highscore values within the savefile. That’s a problem I will have to adress soon with some kind of encryption for the highscore file.
In DevBlog #5 in talked about how I refactored the menu and game handling system over to a system based on a finite state machine. I also did so now for the player movement. And I will continue to do so for anything that is reliant on different states. The player will also receive an overcharged state for when his rotation special attack is active and so on. It makes handling all those events that are dependant on those states so much easier and better maintainable. I also fixed a little thing I went overboard with my state machine. I had transition states that handled the transitions between the game states. That was a bit too much, so I converted them into simple scripts to be called in the appropiate places.
I have also been haggling with more social media again. Twitter is fine and dandy, Facebook is a necessity(and a pain with no real reach if you don’t pay for it) and Instagram is nice to have, but Discord is the real thing! I think, right now, there’s no better place to connect with like-minded people and I also want to provide this way of interaction with me as a developer for people who are interested in GreyHole. Or game development in general. I am proud to have the Discord channel available now(it may still need some tweaks, moderation and ranks and emojis and so on). You can connect to it with this perma invite Link: https://discord.gg/zMH8s4. Feel free to ping me if you have any questions.
As you can see in the screenshot above I also maintain a change log there.
The last thing I want to mention here is that I have installed a newsletter plugin on this Word Press. So if you’re really really interested in how this project proceeds you may sign up for the newsletter and I’ll provide you with some updates. I won’t be spamming you with automated newsletters, that’s a promise. I will only be informing about new blog entries and manually written Mails to inform about bigger news. That’s a promise! I can’t stand spammy newsletters myself so I would be good advised to not be spammy. Nobody likes that.
That’s it for today’s blog post about highscore and saving. Thank you for reading this far, I am really grateful for your interest. 🙂
Best winter regards,
If you like this entry, you can read up the follow up “Background Enemies and first Playtests” or the previous blog post “Menu Options”. You can also sign up to the newsletter, so I can inform you about new blog posts. Or you can get involved on my Discord server.GreyHole - #DevBlog -