Wednesday, May 01, 2024

Should I consider studying art?

Yesterday I was able to attend a mentorship session with Jason Della Rocca, organized by Abragames and gamescom latam. It was very pleasant, we learned some very useful tips for making a game project pitch presentation to publishers and investors. Although the employment market has been kind of depressing lately with all these layoffs, Della Rocca pointed out that indie developers are still thriving out there. Most recent examples are Balatro and Manor Lords, both created by small, independent studios.

The presentation got me kinda fired up for coming with my own commercial game, but I don't see it happening in the next year or so. Crafting a game with good artistic content is a requirement for a pitch, and my art skills suck. I can't get the attention of the crowds and gather followers without good art, so I guess I'm stuck if I'm just coding a game all alone.

For now, I think all I can do is keep focusing on sharpening my programming skills, so I can get hired by a team with professional artists. I'm a little skeptical about working in a small, unmanaged team, though. I've tried doing it in the past, but I was really disappointed when I couldn't sense the same passion I have for making video-games in my colleagues. It always feels like I'm the only one taking things seriously. I'd like to know if there are more developers out there that ever felt the same way, or if I'm being too uptight when I try to work as a team.

This week I also watched developer AdamCYounis nail a 48-hours game jam while learning GameMaker. An impressive deed, to say the least. Not only he managed his time efficiently, but he also handled art, coding and music all alone. And the finished game is awesome, it doesn't feel like it was made in 48 hours at all. Most of all, it doesn't feel like it was made by someone who just learned a game engine. It puts me to shame when I look back at my entry in GameOff 2023: I had the entire month to build it, using an engine I'm familiar with (Godot) and the final result was a complete piece of crap. I have to improve the quality of my work somehow.

So, the point is: I'm wondering if I should spend my scarce free time to learn art instead of focusing heavily on programming. Improving art skills certainly would raise the quality of my solo projects, but it would have a negative impact on my programming portfolio (GitHub), which is important if I'm planning on ever being hired by a big video-game company. Well, it doesn't seem like big companies are hiring anyway, with all these layoffs and stuff, but maybe things will get better some day and I must have a nice portfolio ready by then.

Maybe the best alternative is to do something like Luca Galante did with Vampire Survivors. He worked full time as a software engineer, like I do, and couldn't do art either. So he started his project using open source art assets from OpenGameArt, and employed his skills with front-end and UX design to make the game shine with a simple, yet incredibly fun interface. It worked out perfectly: Vampire Survivors is a big indie success. I'm no front-end/UX programmer, so I don't know if I could shine in the way he did, but I know a lot about back-end programming. Maybe I should use open source art and focus on making a simple yet fun multiplayer game, polishing all aspects about network latency and server stability? I wonder if that would work out as a successful commercial indie game...

Sorry to get so much out of my chest this time: I didn't even write about ShuttleShamble. The project is doing fine, I've been pushing to the repo almost every day since last blog update. I decided to go with C file pointers instead of C++, since they're used by other libraries required by this project (SDL, tinyxml2, xxHash). Right now I'm working on a asset file manager to minimize disk and memory usage. This is important once you consider memory constraints on the Miyoo Mini and other similar handheld Linux game systems.

Sunday, April 21, 2024

A lot of C++ studying

That was it about this week. I've been pushing commits to ShuttleShamble almost every day now, so that my GitHub profile stays green like this.

 

 

Mind that not every commit is a big change in the project, like in a fully tested, brand new feature. As I've said before, I use my spare time to work on this, so I try to code at least half an hour per day and push it to this repository. Even though it's not much, I believe that routine and discipline might make a difference in my career someday. That's what keeps me going.

Speaking of discipline, I've also been training Aikido a lot these days. Shodan exams are next months, and I must help my dojo buddy as an uke during his exam. These are hard to pass, so we've been training really hard. Although it doesn't seem to us that we're improving our technique, I heard from our sensei that we are actually moving forward. Some of our colleagues tell us that as well.

My concern with game programming is quite similar. Every day is the same: I design new features, find a lot of problems with my code and then I fix them. But then I always wonder if I'm actually improving or not. I think it would be nice to have colleagues and a sensei in the game programming industry as well. 😂

Now regarding the technical details of ShuttleShamble, basic unit tests for renderer and collision components are done, and now I'm moving forward to file handling. The idea is to make it possible to load an Tiled tile map (which is a XML file).

enum GMFileType
{
BINARY, TEXT
};

enum GMFileMode
{
READ, WRITE, BOTH
};

class GMFile
{
std::ifstream gmf_ifstream;
std::ofstream gmf_ofstream;
std::string path;
GMFileType type;
GMFileMode mode;
std::string error_msg;

public:
GMFile(){}
GMFile(std::string path_, GMFileType type_, GMFileMode mode_):
            path(path_), type(type_), mode(mode_){}
void open();
std::string read_line();
uint8_t read_byte();
uint16_t read_word();
uint32_t read_dword();
void write_byte(uint8_t byte);
void write_word(uint16_t word);
void write_dword(uint16_t dword);
void seek();
std::string get_error_msg() {return error_msg;}
bool error() {return error_msg.size() > 0;}
void clear_error() {error_msg.clear();}
GMFile& operator=(const GMFile& other);

class WrongFileMode {};
class FileNotOpened {};
};

I've decided to use ifstream and ofstream from the C++ STL to handle files, but I wonder if these are compatible with other C++ libraries I intend to use, like tinyxml2 and Simple DirectMedia Layer (SDL). I've used SDL in the past and I know it uses C's stdio.h FILE pointers to load images and stuff, so I'm not sure how I'm going to put all of this together in my game engine project yet. Maybe I'll eventually go back to stdio.h file pointers, since I know better how to use them.

Wednesday, April 17, 2024

Yet another comeback

First I would like to share with you guys that I've got an 8/9 score on IELTS last November. Despite not being able to focus on game programming at that time, it seems that my study sessions actually paid off. Unfortunately, my entry in GitHub's GameOff Game Jam was severely compromised by my studies, and I wasn't able to deliver a complete game as I did in 2018 with the Tatopeba crew.

Regarding Capy Harvest, I eventually abandoned the project when we had that pricing policy crisis with Unity last September. I started to remake it in Godot Engine soon after this, but it would take too much time to get it where it was before the crisis. I work full time as a software engineer, and I use my spare time to work on game programming projects, so this kind of setback hits me harder than one would expect.

I also worked on a small project for GBJam 11 in the meantime between the Unity crisis and the GameOff Game Jam. I decided to make a Game Boy game entirely in GBZ80 assembly code, so I could assemble it into an actual Game Boy ROM using RGBDS. It proved to be too much of a challenge to make it in 10 days, so I wasn't able to deliver it on time either. The source code is available here.

After taking some days off in the beginning of the year, I thought about everything that happened so far and decided to change my approach regarding my plans to be a programmer in the gaming industry.

  • Less content, more code: I was focused on creating games faster using off-the-shelf game engines and publishing my work on Twitter (X). I was fascinated by small developers who would get a lot of attention there, showcasing amazing videos and screenshots. However, people who effectively get attention this way are artists and game designers. My major is Computer Science: I'm a code specialist, and this content showcasing approach wasn't getting me any attention at all. So I decided it was time to showcase my code instead.
  • No more private repos: Up to now, every time I started a new project, my source code was always hidden from everyone, so I could keep my "industrial secrets". That would be strategically interesting if I were John Carmack or something, but no one knows me in the industry yet. So I decided it's time to showcase my game code through open source repositories.

It's hard to be popular among players while showcasing code: people on social media want to see flashing screens and pretty graphics, and I can't do art well enough for this. So I guess I should focus on getting the attention of different kind of people: people who are hiring game programmers.

I'm currently working on a simple game, coded in C++ from scratch. I intend to take the challenge and port it to both PC and for Miyoo's ARM Linux-based portables, like the Miyoo Mini. Porting for different architectures may be hard in this case, since I'm making a game engine entirely from scratch and all, but I would like to see it running on a small screen.

And that's it. I will see if can make an habit of publishing at least once a week here to organize my thoughts.

Sunday, February 12, 2023

Capy Island Devlog #1

I'm taking a break on the IELTS preparation book to work on this personal project. I've taken a course on Kanban recently with colleagues from work, and I heard the instructor giving the following advice: "stop starting and start finishing".  I've decided to work on something simple, so I can finish it this time.

The game's objective is to kill enemies before they can reach your storage and steal items from it. Basically, it is a variant of a tower defense game. You have to collect items in order to defeat the stage's boss, who appears when the stage countdown ends. If you let enemies steal from your storage, the battle becomes harder.

In the video below, 50 enemies are spawned from the borders of the island, and then they run towards the center to steal from the storage (which is still an owl sprite from Unity, but it will be replaced as soon as creativity strikes me again 😂).

To avoid creating and destroying objects too often, I used an Object Pool to recycle enemies who already ran away with the loot. This patterns avoid an overhead on object creation and destruction, and it's very useful for games with lots of enemies and projectiles.




Monday, February 06, 2023

#28

 Page 30.

According to the planning spreadsheet, it would take a month to finish it. There's an english school nearby which will be holding the IELTS exam on 29/04. I think I'll be able to take it.

I decided to take part on the Nokia 3310 Jam 5 on itch.io. I'll try to make something simple using Unity, although I'm not sure if it will be possible to make pixel perfect graphics using it. Some forum posts I've found mention a "snap to pixel grid" functionality, so maybe I can start experimenting from there.

Wednesday, February 01, 2023

#27

 Page 27.

The reading part seems easier to me, but I have yet to check my answers. I might have missed some details on the texts, this happens often when I'm taking tests (even in my native language).

Tuesday, January 31, 2023

#26

 Page 20.

The listening part was really difficult. I could figure out what was being said in the audio, but it's hard to follow the written text to fill the word gaps on it. I have to practice some more.

Today I have less time to read, since I have to start working earlier. Yesterday I had to go to the dentist, so I have to make up for it today.

Should I consider studying art?

Yesterday I was able to attend a mentorship session with Jason Della Rocca , organized by Abragames and gamescom latam . It was very pleasa...