My own five steps for getting into something new
A process for learning new things, my framework
As I often start side projects and learn new stuff, I wanted to write a bit about the process that is happening within my brain when this gets into motion.
1. The idea
Some people might first want to get into something, like woodcutting, cooking, or electronic engineering, then learn it and then find a project within this field. In my case, this is the opposite: I get an idea, then this idea germinates over the next few weeks or months, and then I get the urge to act on it. I can talk a bit about my latest idea, it was to make a Vampire Survivors clone. I have wanted to get into game development for a long time, but I never had a solid idea to really tip me over. Well, after playing too many hours of Vampire Survivors, I knew what I wanted to do: to make a clone of this highly addictive game.
I even found a name for it, the most original one… Grassland Survivors
2. Starting out
This is often the most exciting phase. Finally, I have an idea, and I can start building it. Vampire Survivors has strong retro vibes to begin with, and the Pico-8 fantasy console was in my sphere of interest.
Pico-8 is a retro fantasy console, but it has a lot of hardware limitations that mimic computer games for a console like Game Boy. However, it also offers a lot of powerful tooling that makes the process easier. It’s basically a well-packaged minimalist game engine. Much easier to get into than Unreal Engine, Unity, or Godot while also allowing you to get a glimpse into developing a video.
Above is a screenshot of the sprite editor. You can create a simple 8X8 sprite that even I can use to make my own GFX for my game. You can also combine them to make bigger sprites appear on the screen.
It also offers a built-in code editor and sound editor. You code your game in a subset of LUA. There is very well-written documentation that adds a few functions that will make your life as a game dev very easy. You can open your cartridge with an editor like VSCode, but I mostly used the limited built-in code editor for this game. It made the experience more authentic, and I became quite addicted to it. I used VSCode only when I needed to do significant refactoring.
Also, note that at the bottom left of the screen, you’re limited to 8192 tokens, and once you reach this limit, there are a lot of techniques to work around it, like compressing and refactoring your code.
I was not getting near or over the limit for my game, so I was okay. I’ve made the code as readable as possible and 100% open-source so others could learn from it.
Here is an extract of the update loop of the engine so you can get a sense of how I structured my code. I went with object-oriented LUA (sort of, as it’s not really possible with this subset of LUA), which is not great for the token limit but great for code organization and readability. I have a state machine for my game, and then I update my various components depending on the state. Each component of my game implements the engine update and draw function, and I do everything from there.
function _update60()
decrease_btn_buffer()
if state == state_main_menu then
menu_main:update()
elseif state == state_game then
player:update()
world:update(player)
if btn(4) and is_btn_ready() then
state = state_pause
set_btn_buffer(15)
end
elseif state == state_lvl_up then
menu_lvl_up:update()
elseif state == state_pause then
menu_pause:update()
if btn(4) and is_btn_ready() then
menu_pause.height_current = 0
state = state_game
set_btn_buffer(15)
end
elseif state == state_game_over then
menu_game_over:update()
elseif state == state_win then
menu_win:update()
end
execute_actions()
end
In brief, starting out is all about choosing the right tools for the job, learning about them, and dipping your toes into this new shiny thing, whether it’s creating a new project on your computer or going to the hardware store and buying an axe and then learning how to swing it.
3. Addiction & Obsession
This is probably my favorite part, but it's my wife's least favorite one. Once I get into the zone and am efficient with my new tools, I can let my creativity fuel my productivity. I spent so much time after work on this, some evenings, I could not stop until I implemented this or that new feature I dreamed about all day but could not do because I actually have to work on the app for this website so that you can read this article 😎
And I want to emphasize this: it’s all because I started with an idea that I was really excited about. If I had started with Pico-8 first and done it before, I would probably drop it after a couple of days because I would not have a project to keep me going.
There is not much to say in there. It could also be named the production phase. This is usually where I learn the most things. I have a goal, and not knowing how to do something adds a wall, and I can tear down walls by learning new things. This is how powerful objective-oriented projects are to me. Because I have a clear goal in mind, I’ll try everything I can to achieve it.
I learned and added so many features during this time
- Random map generation
- XP & health systems
- Random spawning of enemies around the player but outside of the viewport.
- With the weapons system, you can get new weapons and upgrade your current weapons.
- Current score and high score tracking.
- A pause menu to get your current stats
- Getting all this UI animated with frames animations
And so much more. I went further and added more features than I initially expected when making this game.
4. Promotion & talking about your project
This is a step you can mix with the other, but this keeps me highly motivated. I love to talk about the stuff I’m doing, and I’m getting into a positive feedback loop that keeps me motivated to continue posting about it.
While making Grassland Survivors and as I was building it and learning new things, I often posted my progress on Mastodon, X, etc.… It’s really a great way to gather feedback and, if I am making a for-money severe project, to collect interest.
Also, even if I don’t like to write it, it is a good ego boost, and this is necessary when you’ve done 80% of your project and need to finish up the 20%, which often takes even more time.