lazy game developer

Showing: 10 - 18 of 26 RESULTS
Way of Tanks

Way of Tanks

Way of Tanks is a tank runner game with endless gameplay and diverse tracks. Players control a tank using swipes, keyboard buttons, or Apple TV gestures, aiming to cover as much distance as possible without hitting obstacles or dying in boss battles.

The tank can switch lanes, shoot, and even jump over trenches – yes, it’s that kind of modern tank! The game features various power-ups that temporarily enhance the tank’s abilities: agility, super shots, doubling collected coins, or the ability to break through obstacles.

Players can also use coins collected during runs to purchase new tanks or upgrade existing ones. There are four tanks in total, each with unique stats and capabilities.

With the permission of Ogurec Apps, I took on porting Way of Tanks from Java to iOS, tvOS, macOS, Linux, and Web, using my old but familiar and convenient game engine. The game is now ready to be handed over to its owner, though I retain the source code of both the game and the engine.

The game is already available in the browser – Way of Tanks. Hopefully, it will soon appear on the Apple AppStore for iOS, tvOS, and macOS. As for Linux, the decision rests with Ogurec Apps, but I really hope they won’t mind.

Road Fighter

Road Fighter

Road Fighter is an arcade racing video game developed by Konami and released as an arcade machine on December 7, 1984. Later, versions were released for MSX1 computers (1985) and the Nintendo Entertainment System (1985 in Japan, 1991 in Europe).

In 2003, Retro Remakes organized a “remake competition,” where participants were challenged to recreate a game from scratch in a short time. The team Brain Games decided to participate with a remake of Road Fighter for MSX.

What I did

The source code of the game was available on the Brain Games website, which I used. I informed the original clone author about my work – amusingly, he was happy and said he was looking forward to the web version.

First, I did a small code refactoring to make the game compile with a modern compiler using the “modern” version of SDL 1.2. Then I performed a larger code refactoring – dividing the code into logical parts and making it readable (here, my favorite VIM and clang-format were very helpful). Next, I had to make fixes to the sge library code required by the game.

After that, I ported the game to Linux and macOS, and six months later, I finally completed the port to Web.

Main challenges

The Web version was the most troublesome. At first, the game wouldn’t run at all – this was because the main loop needs to be slightly different for Emscripten (and generally for any properly designed architecture).

The next issue was clearing the screen (or filling it with black). You can’t just use zero; the zero must have an alpha of 0xff.

Later, the game seemed to freeze when loading a level – it turned out it wasn’t frozen, just very slow to load. I had to make many optimizations, mainly related to direct access to SDL surfaces. I solved this by removing Lock/Unlock calls from the main loops.

Another problem appeared when the car spins after a collision and skid marks must be drawn. Drawing lines was extremely slow, and they were never cleared even when off-screen. Moving the lock outside the loop and clearing the line list solved the issue.

I also improved file system handling, video and audio initialization, and music and sound loading. There were many changes – too many to remember. Anyone interested can compare the original game (the first commit) with the current master branch.

I might eventually add save-state support for the Web version. It’s not hard – synchronizing the “local” file system before reading is sufficient. IDBFS is perfect for this, but I haven’t gotten around to it yet.

Links

Zombies Among Us

Zombies Among Us

Not all zombies are equally useful. Crush them all, but be careful – some zombies aren’t quite ordinary.

The rules are simple: tap a zombie to kill it and use power-ups wisely.

All the artwork was purchased from specialized stock sources. There was nothing unusual during development – I was just making another game.

The only exception was the button. I had to make a change in the engine – adding a new event to the button widget, which was needed for the power-ups. I could have created a specialized widget instead, but I decided that extending the functionality of the standard button would be useful for future projects.

Texture Packer

Texture Packer

This is one of the essential tools I use daily, helping me eliminate a significant amount of routine work.

Yes, it happens – I actually use my own creation daily.

Texture Packer for Linux and macOS is a command-line utility that packs multiple input images into a single texture atlas. Its CLI nature makes it ideal for automation in various workflows.

Features

  • It’s quite fast’ve compared it to a “standard paid” packer.
  • It accepts both individual sprites and entire directories as input, with support for recursive directory processing.
  • It can generate Power-of-Two (PoT) atlases.
  • You can limit the maximum size of the atlas.
  • It can trim “excess” border pixels from input sprites.
  • It can add a border of a specified size around a sprite when placing it in the atlas.
  • It generates an XML file with the layout description of the placed sprites.

The utility was originally created for personal use, but is now available on GitHub – Texture Packer.

Omo Jump

Omo Jump

One of the early games developed in a small team at Synesis.
It’s a hyper-casual game where the character is controlled with just a single tap on the screen. The player’s task is to tap at the right moment – tap too early, and you lose; too late, and… yep, you lose again.

I can’t recall many details about the game – I’ve forgotten most of them. I do remember there were some issues with the game mechanics. It lacked clarity and transparency for the player, which left mixed impressions overall.

Both the game and the engine were written in C++. It was still the first version of the engine, though already significantly improved.

What I do remember well is that I really liked the character – both the design and the animations. In that regard, the team did an excellent job. The same can’t quite be said about the rest of the game.

Squid Rage

Squid Rage

Simply another clone of Fist of Fury. I really liked the game’s dynamics, style, and animations. Development went smoothly and quickly, and I can’t recall any major issues during the process.

Like most of my other games, this one was created by a small team at Synesis. In-game purchases were not implemented, but the game did include ads – judging by their appearance, they were provided by Chartboost. Coins needed to unlock characters dropped randomly from defeated enemies.

Death Hop

Death Hop

or maybe Death Jump… who remembers these names anymore?

We definitely overcomplicated things – it says Hop on the icon, but Jump in the menu.

A rather interesting hyper-casual game with endless gameplay. I really liked this one – fun mechanics, a nice setting, and good animations for both the character and the platforms he hops on.

The rules are simple – you know the drill: tap the screen at the right time, collect the red-and-yellow soul orbs – they’re needed to respawn.

Both the engine and the game were written in C++. It was made by a small team at Synesis. If I remember correctly, there were no real difficulties during development – everything went smoothly and quickly. That’s how it usually goes when you actually like the game you’re making.

By the way, this game would have worked perfectly on Android TV and Apple TV in landscape orientation. I’m pretty sure I even created builds for tvOS and Android TV at some point.

It seems the game now only survives on my iPhone and Android devices.

Rolling Balz - Ice Cold Beer

Rolling Balz

Another classic arcade-style game inspired by bar machines often found in pubs to entertain tipsy visitors.

The original arcade game – Ice Cold Beer, developed by the well-known Japanese company Taito in 1983, served as the main source of inspiration.

The player’s goal is to roll a ball into a specific hole on the playfield. To do this, the player controls a horizontal bar holding the ball using two levers connected to the edges of the bar. Tilting the bar left or right allows the player to guide the ball to the desired location.

This was one of the last games I developed together with a great team at Synesis.

The game was built on a new, reworked engine, which fixed issues from the previous version and introduced an updated API. Box2D was used for physics simulation, although it wasn’t strictly necessary given the simplicity of the gameplay.

I also created a test build for Android TV and Apple TV, designed for gamepads with dual analog sticks. Unfortunately, such controllers are quite rare on these platforms, so the TV versions were never released.

Easy Solitaire

Solitaire

A classic solitaire game. At the moment, only the latest version is available – it features improved graphics, animations, and two dealing modes: draw one or draw three cards.

This solitaire was the first game I created at Synesis, using the very first version of our engine. You could say it was a real-world test of the engine’s capabilities.

The graphics, animations, and sound effects were handled by the rest of the development team.
The game supports both landscape and portrait orientations, and the layout switches automatically when the device is rotated, regardless of the current game mode.

Solitaire saves the player’s current progress, so you can pause the game and continue at any time.

The game also allows you to customize the appearance of the cards and the table. It keeps a full history of moves that can be undone at any point. Naturally, double-tapping cards works as expected. And if a player gets stuck, there are hints available to help them out.