Dying Anima banner

Dying Anima

40 devlogs
94h 18m 16s

A story about Death and Immortality, built on a custom engine using OpenGL and C++.
A 2D sidescroller that combines mario-like parkour and RPG mechanics. Also has a story. Built using a custom engine I made, with OpenGL, OpenAL, XML parsing and f…

A story about Death and Immortality, built on a custom engine using OpenGL and C++.
A 2D sidescroller that combines mario-like parkour and RPG mechanics. Also has a story. Built using a custom engine I made, with OpenGL, OpenAL, XML parsing and font loading. The assets are hand made. The game is a part of a larger game I started during this event.
The editor is complete. Try making custom levels with it!

Supported Platforms: Windows, Linux, MacOS
Feel free to take a look at the repo and contribute.

Demo Repository

Loading README...

sohiearth

Shipped this project!

Hours: 37.67
Cookies: 🍪 1049
Multiplier: 27.86 cookies/hr

SHIPPING DYING ANIMA VERSION 1

COMPLETE WITH: GAME (SECTION 1) + EDITOR

FINALLY SHIPPING. Had lots of problems with how the game was presented, shipping to other systems only to have dependencies issues/startup crashes and combating path resolve systems, but I CAN FINALLY SHIP THIS GAME.

It’s helped me grasp a better understanding of C++ and system architecture. I’ve come to realize now that ALOT of the code I’ve written previously are REALLY messy and convoluted. It’s like reviewing a essay that you wrote previously for an assignment, lol.

sohiearth

MacOS Compatibility

  • Major revisions on MacOS compatibilty. Compiled the game as a .app bundle to improve compatibilty.
  • Bundling the app required changes to the path resolve system, resource manager’s path management, and create directory handling. Changes have been made to address those issues.
  • Better error handling as a indirect effect by improving compatiblity with MacOS.
  • The app can now identify its current exectuable location and add it to the fallback paths in the path resolver.
Attachment
0
sohiearth

The Asset Update

Probably the final update before shipping. Added the First Anchor and The Garden of Remembering.

  • Added more assets.
  • Made the First Anchor, screenshot below.
  • Made The Garden of Remembering, screenshot below.

I made sure that this update uses the most of the core APIs and components provided by the Dying Anima API.

Next Step: Preparing for Shipping

Attachment
Attachment
Attachment
Attachment
0
sohiearth

The stabilization update

New Features and changes

  • Added bug fixes for defeated enemies not being saved, and therefore repeating the same battle.
  • Added a player asset that look mystic and semi-transparent.
  • Added a player light that lights the player up.
Attachment
0
sohiearth

MULTIPLE CHANGES

  • Reworked the rendering to blur near-field objects.
  • Fixed many issues with save handling.
  • Added the “The Architect” NPC/mob.
  • Added enemy pathfinding. The enemy moves on its own now.
  • More logging.
  • Improved the player jump check.
  • Added keyboard controls for the editor.
  • Color adjustments overall.
  • High-DPI check and platform-appropriate window size reporting.
Attachment
0
sohiearth

PLATFORM SUPPORT: MAC

Changes

  • Full platform support for MacOS!
  • Changed ImGui settings to adapt to Mac Retina displays.
  • Changed cursor position calculation to correct window-relative cursor position on Retina displays.
    High-DPI displays are a pain.
Attachment
0
sohiearth

COMPLETED ITERATION 1

Features

  • Improved error handling in the SaveManager API.
  • Improved error handling in GameScene, especially in the save handling parts.
  • Improved error handling overall..
  • Added a new font for use in the editor. (Seen below)
  • Optimized the game by reducing checks in savedata, re-ordering system initialization.

WHAT’S NEXT?

ITERATION 2: ASSET CREATION

The game is mostly stable now. Less errors, better handling when faced with errors, and improved performance. All I need to do now is to develop the actual game. Doesn’t mean I won’t touch code, because I definitely will when I write UI systems, but most of my work is going to go into asset development and level creation. I also need to work on the BattleScene’s rendering, too.

Attachment
0
sohiearth

NEARING COMPLETION OF ITERATION 1

Update

Finished 5/7 of the tasks set for iteration 1. The project is going very well, and I feel like this allows some leeway for more time on iteration 2/3, the heaviest iterations yet.

Changes

  • Path resolve using core::path API
  • Better error handling via the core::log API
  • Reduced “works on my machine” errors and crashes.
    Better use of the C++ standard libary (STL)
Attachment
0
sohiearth

Minor Repository Update

  • Added a project to help me organize what to do next.
Attachment
0
sohiearth

The level update

Features

Added a level, finally. Removed level.txt from gitignore so the level can be added into the vcs. In addition, I added more assets, like a background, fence, box, etc. Last, I changed the save select screen to display in latest order.
I also added a gimmicky box where it allows access to a hidden passage. You can also move it with the player allowing for access to hidden routes, and probably triggers.
Intense portal flashbacks

Changelog

0
sohiearth

Minor Update: Polishing up rendering, saves, editor

I made a level! Yay

Attachment
Attachment
Attachment
0
sohiearth

Minor Update: Copy tool and Save Select

Changes

  • Added a copy tool that copies the selected entity; makes creating repetitive stuff much easier.
  • Added a save select screen that displays the latest 5 saves.

Next

  • Multiple select entities in the level editor.
  • Major shakeups to the website.
  • Progress on the game.

Changelog

Attachment
Attachment
0
sohiearth

Minor Update: Updated the site.

I’m not good at HTML/CSS, so this is probably the best I can get within 2 hours.

Attachment
Attachment
0
sohiearth

Minor Update: Added a website to download.

Attachment
0
sohiearth

Minor Update: Tooltips, small fixes

Changes

  • Added tooltips that are automatically loaded and cached from an XML file. Made a API that is clean enough and uses std::call_once for cleaner code.
Attachment
0
sohiearth

Minor Update: Adding a onboarding experience for the editor.

Features

As always, my programs are a bit hard to use for a beginner with zero experience. I made an onboarding window that opens when the user starts the editor, and explains the core features of the editor.

Attachment
0
sohiearth

Minor Update: Polishing the UI and systems

  • Added in the enemy AI implementation. The enemy fights back now, and while the player is stronger than the enemy in most cases, the player has to carefully consider the hp/stamina used.
  • Polished up the UI, and added action logs, to understand how the battle is progressing.
Attachment
0
sohiearth

The turn based battle system

Features

  • So I finally added combat. The scene is triggered when the player goes within the hitbox of a BattleTrigger component, which teleports the player to the scene shown below.
  • Skills! Skills determine how much damage should be applied to the target (health), how much health should be drained from the user, and how much stamina should be drained from the user.

Next

What I did with this update is somewhat rudimentary stuff. I think I’m going to add items/potions next.
I also need to work on the background, music, and sprite rendering for this scene. I only added the base health/skill systems along with the UI.

Attachment
0
sohiearth

The In Game UI Update

UI

Finally decided on how to make in-game UIs. Basically, I’m going to combine my native API and ImGui to make stylized/functional UIs easily. It’s better than creating my own half-baked UI API. This will reflect globally, making the editor look similar to the game, but that shouldn’t be much problem.

Features

– Worked on the Journal and laying the foundation for in-game ui.
– Worked on the “Your Character” screen. Gives off RPG vibes.
– Worked on the tutorial and initial controls screen. Contains temporary images for now.

Attachment
Attachment
Attachment
0
sohiearth

The Usability Update

  • Added automatic docking so the UI looks less cluttered.
  • Drag-and-Drop support for sprites
  • Tooltip descriptions

All of these are to address rejection feedback.

Attachment
0
sohiearth

Shipped this project!

Hours: 56.64
Cookies: 🍪 1127
Multiplier: 19.9 cookies/hr

Message

I felt like the editor is mostly complete, and I’m rather proud of what I made even if I haven’t started much work on the game itself. I’m going to take a moment and ship the editor part of my app, and then I’m going to work on my game and ship the game itself in a different ship.
There wasn’t much difficult programming wise when making this editor/game. I ended up having a bit of feature creep and added too much to the editor I think. But the game part was the most challenging, because not only do I have to manage the programming, but also the assets too. In addition, a game has to be fun, which can feel numb when making a game long-term.
Anyhoo, I’ll be making the game next using my own editor. I hope this ship goes well.

RELEASE NOTES

v0.7

Mostly for demonstration purposes, and to show how the game’s story will be built.
The editor is mostly complete. This release is a release build, but the preprocessor code has been commented out to make available the editor.

How to use the editor: A quick tutorial

Modes

There are two modes: Select and Move.

  • Select creates a new sprite object when clicked on a blank space, and ctrl+click will delete the object the cursor is currently on.
  • Move is simple. Dragging the selected object changes its position.

Components

The editor panel for components are at the bottom of the ImGui window. Clicking on the drop downs for components (e.g. Transform, Sprite) reveals editable fields. Changes are reflected in the world scene in real-time.

Animations

To edit animations, first add a animation component to the selected object. Then, open the Animation Editor from the view menu or the inspector. From there, you can manually add frames to an animation, change a frame’s duration and the object’s sprite texture at a specified frame. Simple stuff!

Also, you can load/save animations to a file from this menu.

Lights

There are two types of lights: directional and point.

Directional Lights

Directional lights affect the entire scene. Therefore, they only have color and intensity values.

Point Lights

Point lights have intensity, color, radial falloff and volumetric intensity. The first two are rather self-explanatory. Radial falloff dictates how far the point light can go. Think of it as adjusting the radius of a circle. Volumetric intensity is how much the light brightens the volume around it, creating a bloom/halo effect.

MUST HAVE TIPS & TRICKS

  • If you don’t have a light or are starting off, consider turning on the spotlight. It lights dark areas temporarily for a better experience when making scenes.
  • The game currently expects a “level.txt” scene at the working directory (where the executable is stored). You should save a scene at “path/to/exectuable/level.txt” if you want to actually load the scene and play it.
sohiearth

Added a zelda-like heart sprite health indicator bar.

0
sohiearth

The Animations Update

What’s New?

  • Lots of confirmation dialogs, etc for the editor. Polishing it up for now.
  • Animations! Edit and view animations from the animation editor. currently supports changing sprites.
  • Overall stability improvements.
  • Cleaned up physics & ui API.

Next

I need to work on the actual story and make some assets.

Attachment
0
sohiearth

The formatting update

Minor formatting stuff, nothing new in terms of features & performance.

Attachment
0
sohiearth

The Bloom Update

What’s new?

  • Added bloom support
  • Added player log (quest log)
  • Adopt ui:: API for menu
  • Fix player movement to feel smoother and less jagged
  • Added some more assets
  • Redesign pause screen
Attachment
Attachment
0
sohiearth

Minor Update: Smart Pointers

Added smart pointers. They usually come in at mid-development because I normally don’t have any problems with raw pointers and don’t see much benefit in smart pointers other than RAII support. Not much changed feature-wise though, and performance has minimal impact.

Also added some assets.

Attachment
0
sohiearth

The Unfinished Features update

New stuff

  • FINALLY implemented the pause menu’s functions. Been holding back on that for a bit, but I wanted to make a completely new UI system based off of SwiftUI. You can see it in action in the third image. Still incomplete style wise, so I’ll have to work on that.
  • Major tweaks for physics that make the game feel less floaty and arcade-y,
  • Performance improvements all around, this time by using less dependencies everywhere.
  • Added a exposure adjustment setting. The game looks more vibrant at higher exposure settings, and dimmer at lower exposure. My first implementation of a post processing effect.
  • Deferred scene changes for overall program stability.
  • Refined player controls for a overall smoother experience. Feels like a cross between Mario and Kirby.
Attachment
Attachment
Attachment
0
sohiearth

The Progression update

What’s new?

  • Added a progression system. Save data similar to how player positions and health is stored.
  • A typewriter effect on the opening sentences, as seen below.
  • Minor bugfixes

Next,

I’ll continue to work on game-related systems and updates. I need assets, but unfortunately I’ve been procrastinating that.

0
sohiearth

The Editor Update

Changes and new features

  • Finished up deferred rendering system. Lighting is simple but effective enough. May consider expanding normals support for the sweet edge shine and indie 2d look.
  • Add SceneManager that uses a scene stack to manage, initialize, quit, update, handle input and render scenes.
  • Update Level editor to clean up the interface. Implemented a toolkit system to change behavior based on the current tool.
  • Add a move tool to drag entities around.
  • A spotlight system that lights up the area around the mouse, useful for dark scenes. (White light in the top right is where my mouse is placed)

Next steps and considerations…

  • I might want to add a post-processing system based on render passes. Not sure how I’ll make that work, though.
  • Severe asset insufficiency. I need more assets (sprites, music, etc.)
  • Working on the game perspective a lot more. I’ve been working too much on the technical side.
  • Ironing out alot of bugs.
Attachment
0
sohiearth

The Editor Update

What’s new?

  • Worked on improving the editor, which was left in a very messy and convoluted state. Cleaned up code, worked on fixing coordinate system mismatches, etc. It works pretty much flawlessly except for the PPU selection.
  • The selected entity window allows the user to edit parameters of a component attached to an entity.

What’s next?

Working on overhauling the rendering system from a simple sprite renderer to one with full lighting. Test image below.

Attachment
0
sohiearth

The Save Game Update

Updates

  • Added a save game structure that contains info like player position, etc.
  • Lots of microoptimizations, mostly involving caching projection/view matrices to reduce matrix computation. I didn’t know multiplying matrices can take up so much processing power. Got around a 10% bump in frames.
  • Lots of refactoring, some improving performance and others improving code readability
  • Added functions and structures that will become handy later on
Attachment
Attachment
0
sohiearth

The camera update

  • Smoothed out camera movement. First video is before, second video is after. The implementation removed the awkward sub-pixel jitter created by extremely small amounts of difference.
  • Implemented EnTT for ecs. First time using it, but I quickly got a hang of it.
0
sohiearth

The refactor update

Changes

  • Refactored input into core::input::
  • Refactored quad handling into core::quad::, managing quad creation and rendering over the entire lifetime
  • Moved the menu input function over to menu::input:: and a differentfile
Attachment
0
sohiearth

The Big Update

Forgot to add a devlog for a bit.

Updates

  • Added a simple level editor (pic 3)
  • Tweaked the camera position/player movement a bit more.
  • Added the ability to make the player go out of the camera’s center. The camera chases the player when it is close to the border of the window.
  • Added a paused screen. Not functional yet tho.
  • Added ImGui implementation.
  • Optimized asset loading. Using atlas systems to prevent duplicates of the same asset in memory.

What’s next?

The core rendering/physics systems are mostly complete. I’m going to work more on the level editor, fix more bugs, and start working on implementing the story.

Attachment
Attachment
Attachment
Attachment
0
sohiearth

The Game Update

Updates

  • Added the game main loop
  • Added box2D physics to move the player (smooth accel/decel)
  • Added a fun create-box-on-mouse-click function (temp)

What’s next?

As you may see in the image, I’m really limited on the number of assets at hand. I’m going to work on making more assets and the world itself. I also need to polish/brush up the rendering system. It’s really simple and doesn’t even have a basic camera.

Attachment
0
sohiearth

The Core Update

Updates

  • Added wrappers for shaders, textures, text (basic opengl stuff)
  • Improved the menu a bit more.

What’s next?

since I’ve finished what I need for core development on the menu/ui, I’m going to move onto making the game itself. That consists of making the physics systems, load/save systems, etc.

Attachment
0
sohiearth

The Start

Stuff done

  • Added project boilerplate
  • Started again with OpenGL
  • Made a banner
  • Created a main loop based on states

What’s next?

A lot of stuff needs to be done, such as making art (which is my pain point in this entire project probably) and setting up systems, keeping DRY (don’t repeat yourself), etc.

Attachment
0