Posts

Showing posts from June, 2023

Synzza Star - Implementing Skills through Scriptable Objects and Coroutines

Image
In my previous post , I laid out some aspects of Synzza Star's combat system design. Let's discuss how I've been using Unity to realize these designs. Scriptable Objects Before explaining how I have been using Scriptable Objects , I'd like to take a moment to explain what Scriptable Objects actually are. Normally on this blog I like to avoid this kind of exposition, but the term "Scriptable Object" is so uniquely nondescript and awful that I suspect many uninitiated readers will, like me, be confused from the onset what these things are and why they should care about them. What are Scriptable Objects? In short, a Scriptable Object instance can be thought of as a row in a spreadsheet, and the Scriptable Object class definition can be thought of as the column headers on that spreadsheet. FYI: "Scrib" is an abbreviation I use in code to mean "ScriptableObject". You'll see it a lot. Note: Excel is not needed for Scriptable Objects. This is ...

Synzza Star - Designing Combat AI

Image
 I’d like to discuss the design behind Synzza Star’s combat AI agents, which will be used for both friendly party members as well as enemies and other NPCs. The following discussion will be somewhat complex and technical. If you’re interested in the philosophy behind these designs, check out this post here . A Brief Clarification Before going into detail about what it is I’m going to do, I should clarify what I’m not going to do. Again, if you’re interested in a more philosophical discussion, check out the post linked above . In Synzza Star’s combat I seek to avoid a situation I call “AI slapfighting”, which is when two AI combatants within melee range of each other simply begin wailing away until one of them drops. To be sure, it’s an effective formula for games to employ, even if it is a bit simple. Many well-respected, tactical, strategic games use combat like this as a base to build more complex abilities and satisfying mechanics atop of. Players intuitively understan...

Synzza Star - Learning 3D Navmesh in Unity

Image
Given Synzza Star's requirements of AI agents capable of autonomous navigation without player input, and given the previously discussed benefits  of moving the project to 3D, I decided to finally try Unity's Navmesh system . This was my first time using this technology myself - I've been on projects before where other designers have created and configured a Navmesh, but before now I had never interfaced with it directly. Creating the Navmesh In my previous post , I actually gave a preview to this subject by showing a simple level I whiteboxed in Unity. Here it is again: I'm no level designer, but my goal was to make a simple level which had a few features that can stress-test a navigation AI. This is both to learn how Unity's Navmesh works and to give me confidence that whatever geometry I'd later like to design for levels shouldn't present too much of an issue from a navigation standpoint. Here is the level again with the Navmesh baked and applied to the le...

Synzza Star - Experimentations with 2D and 3D graphics

Image
 At the onset of this project, I hadn't quite decided if I wanted Synzza Star to be a 2D game or a 3D game. 2D Making the game 2D was my initial instinct. Chrono Trigger is one of the game's biggest inspirations, as described in my previous post, and it comes from an era of games which I also draw inspiration from thematically. It and other games like Final Fantasy 6 exemplified to me the kind of dark but beautiful story telling I strive for with this project.  Given this stylistic choice, I began architecting the Synzza Star battle system (described in earlier posts)  with a 2D foundation. The first task I gave myself was to implement basic enemy AI which would decide how to move around the world and, eventually, attack the player. Seen here is a demonstration of a very rudimentary boids-like algorithm  for enemy movement. Given the 2D space, it was quite simple to make - in fact, it was a bit too simple to make. I began thinking about how to iterate on this AI by i...

Synzza Star - Battle System - What's the goal?

Image
Let's talk about what I aim to achieve with Synzza Star's battle system. To describe it, we should first look at my inspirations. Chrono Trigger There's a lot a could say about Chrono Trigger and how much I admire from this game. Chrono Trigger has inspired Synzza Star in more ways than one, which I'm sure will be talked about in later posts to this blog; however, for the sake of brevity I'll simply discuss one for now. Chrono Trigger's battle system is, to my knowledge, quite unique when you consider the other popular games which define its JRPG genre. Rather than your party and your enemies lined up in neat columns across from each other, Chrono Trigger's enemies roam the battlefield as you select your inputs, inching closer to your party members as a threatening reminder of their intent to damage them. Interestingly, this movement of the enemies can also present opportunities for the player - enemies that happen to find themselves lined up or bunched toge...