avatarThomas Ricouard

Summary

The author shares their five-step process for learning new things, using their experience developing a Vampire Survivors clone as an example.

Abstract

The author, who frequently starts side projects and learns new skills, outlines their five-step process for learning new things. They begin with an idea, then choose the right tools for the job and learn about them. Next, they enter a phase of addiction and obsession, where they let their creativity fuel their productivity. Afterward, they promote their project and gather feedback. Finally, they ship the project and decide whether to maintain or move on from it. The author uses their experience developing a Vampire Survivors clone, called Grassland Survivors, as an example to illustrate their process.

Opinions

  • The author's learning process starts with an idea that excites them, which keeps them motivated throughout the project.
  • Choosing the right tools for the job and learning about them is an essential step in the author's process.
  • The author enjoys talking about their projects and gathering feedback, which helps them stay motivated and make improvements.
  • The author values the positive feedback loop that comes from promoting their projects and gathering feedback.
  • The author emphasizes the importance of having a clear goal in mind when learning new things, as it helps them overcome obstacles and learn new skills.
  • The author believes that objective-oriented projects are powerful for learning new things because they provide a clear goal to work towards.
  • The author enjoys the process of learning new things and is always looking for new projects to work on.

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

Title screen of 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 Fantasy Console

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.

5. Shipping

You can actually play it! The forum page has hundreds of feedback. I implemented and fixed many things with the feedback I gathered, and I’m happy with the current version.

The fantastic thing about Pico-8 is that you can play it anywhere. I embedded it on my own website. You can play it in your smartphone's browser, but people also get it to run on their physical devices.

And this is it: your project is released to the world, and now you can collect even more feedback and decide if it’s worth maintaining it or if it’s just something you did to learn something new and be done about it.

In my case, I’ve made a few updates until I was happy about it (and players, too), and maybe one day I’ll come back to it and make it a real thing. But honestly, I did all that to get myself into game programming, and now I know I can do it.

So I’ll probably be back at it but for another project.

Self Improvement
Game Development
Games
Hobby
Programming
Recommended from ReadMedium