lazy game developer

Showing: 1 - 8 of 8 RESULTS
Bugzz Smasher

Bugzz Smaher

I created the first version of this game at my summer house over just two weekends in 2015. The full version differed only by minor interface tweaks, improvements to the wave generator, and Facebook integration.

The game featured saving and progress synchronization across devices, allowing players to exit on one device and continue on another. At the time, I thought this was a useful feature, but now I see it as an unnecessary use of time.

Most of the bugs in the game were originally made for another game that never saw the light of day. Yet in this game, they fit perfectly and added a unique charm. I designed the game interface myself using GIMP.

Tweens Visualizer

Tweens Visualizer

Это небольшой javascript-проект, предназначенный для визуализации комбинации твинов по двум осям + ось скейла.

Твины используются для нелинейной анимации различных объектов в играх и приложениях. Крайне полезная штука.

Написал его потому, что мне надоело подбирать комбинацию твинов в уме. Формулы для твинов брал из проекта Claw.

В своих проектах я использую C++ версию, в которой есть встроенная визуализация всего набора твинов, но подобрать нужную комбинацию проще в онлайн-версии.

Для себя я реализовал следующий набор твинов: Linear, Bounce, Back, Elastic, Quad, Cubic, Quart, Quint, Circle, Sine.

Game Programming Patterns cover

Книга «Шаблоны игрового программирования»

Game Programming Patterns by Robert Nystrom. В книге рассматриваются различные шаблоны проектирования, применительно к геймдеву. Это не что-то новое, а просто удобная подборка с примерами и доступным описанием. Крайне рекомендую к прочтению, читается и воспринимается книга легко.

Краткий список шаблонов, которые рассмотрены в книге: Command, Flyweight, Observer, Prototype, Singleton, State, Component, Event Queue и прочее.

На английском языке книга доступна в разных форматах на сайте автора. Есть и исходники, и переводы на русский язык.

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.

Snow Swords

I worked on the engine and game code while at Synesis. Graphics, music, animations, and all other non-programming aspects were handled by other talented specialists.

I can’t go into full detail about the development process or the internal structure of the engine and game. Both the game and the engine – as well as the toolchain needed to build the game – were written in C++.

The development process itself was similar to most casual games: we chose the game concept, the artist/designer created sketches, and we approved them together. Animators and integrators then got involved, while I focused on writing the game code and, when necessary, refining the engine.
Everything was then combined into a single project, resulting in a game for iOS and Android.

Krakoid

Krakoid

Yes, it’s another game inspired by Krakout.

Mid-2013.

The idea was simple: “I’ll take Krakout and Arkanoid: Space Ball, quickly rework them, and release something new.” Yeah, right – wishful thinking. “Quickly” didn’t happen for several reasons: the old game code was useless, and even looking at it hurt my eyes; plus, the plan was to use a new (for that time) version of the engine and replace my old simplified math with the Box2D physics engine.

So the old projects “voluntarily shared” only some assets and ideas – the game itself was written entirely from scratch. Levels in the game were grouped into worlds – there were 10 worlds in total, each containing between 10 and 40 levels.
To save time, some worlds were copied from previous games. But several levels and even entire worlds were newly designed. Different people worked on different levels and worlds.

Because the game’s levels were meant to be dynamic, an external editor was created for building episode worlds. Level data was stored in XML, describing object types, appearance, behavior, and durability. The editor worked with object groups – for example, a circular trajectory with radii R1 and R2, rotation speed and direction, and the number and type of objects on it. When loading a level, each object became independent in the game while still visually belonging to its group.

Krakoid on the OUYA TV console

Target platforms were iOS, Android, Android TV, OUYA, Linux, macOS, and Windows. Both the game and the engine were written in C++. Development was done under Linux, in my favorite editor – VIM.

At one point, a publisher from China requested the game. I had to implement special, localized payment methods. The tricky part was that each mobile operator had its own SDK for different payment systems. It was impossible to test integrations locally, so I had to rely on sparse documentation and my own experience. I don’t remember how long it took to implement all the payment options, but the work was eventually completed. A special build of the game was sent to the publisher for testing – after which the publisher disappeared.

And that wasn’t the first publisher to vanish after receiving a build.

«Geniuses learn from others’ mistakes, smart people learn from their own, and only fools keep repeating the same ones»
© Folk wisdom

Simple Viewer GL

Simple Viewer GL

Lightweight image viewer powered by OpenGL.

I use this viewer daily for:

  • Quickly browsing through a list of images.
  • Determining the parameters of the area occupied by a sprite on a texture.

Advantages:

  • Compact and fast.
  • OpenGL support for smooth operation.
  • Simple interface for quick image viewing.
  • Sprite parameter determination feature.

Wide range of supported formats:

  • Graphics formats: PSD, AI, EPS, PNG, XCF, JPEG 2000, JPEG, TIFF, ICO, DDS, GIF, BMP, TARGA, PNM, XWD, XPM.
  • Image formats: SCR (ZX-Spectrum), WebP, OpenEXR.

Additional features:

  • Multi-page TIFF.
  • PNG frame support in ICO.
  • View each GIF frame separately.

Advanced features:

  • ICC color profile support: Ensures accurate color reproduction using embedded ICC profiles.
  • Image file information: Access EXIF and other data stored in the image file (<e>).
  • Smooth loading: Loads images in a separate thread with a progress indicator.
  • Convenient navigation: Creates a file list and allows quick navigation to the desired position.
  • GIF animation support: Plays animated images in GIF format.
  • Pixel information: Displays the coordinates and color of the pixel under the cursor (key -p or <p>).
  • Area selection: Allows selecting a part of the image with a frame to determine coordinates and area size.
  • Quick zooming: Convenient zooming of the image using the keyboard or mouse.
  • Automatic scaling: Automatically adjusts the image to fit the viewer window.
  • Multi-page images: Views multi-page images using the PgUp and PgDn keys.
  • OpenGL: Utilizes OpenGL for high performance and smooth operation.
  • Large image splitting: Splits large images into multiple textures for performance optimization.

Simple Viewer GL source code is available on GitHub.

CPP C++ logo

Венгерская нотация

Статья «Как заставить неправильный код выглядеть неправильно», поясняет в чем отличие Венгерской для Приложений (Apps Hungarian) от Системной Венгерской.
Я давно перестал использовать Венгерскую нотацию, которая на самом деле была Системной Венгерской. Но только сейчас понял, почему мне она казалась несколько странной.

Системная Венгерская

char szVar[]; // ясен только тип переменной, но не ее назначение
unsigned long ulVar; // аналогично

Венгерская для Приложений

float spriteWidth; // ширина спрайта
int currentPage; // индекс текущей страницы

Более подробно написано в статье и в ссылках в конце статьи.