I’ve been working here and there on the infrastructure of the game and stumbled across a framework called Nez which does a lot of the boilerplate stuff I was starting to implement. Scenes (I called them Screens) with transitions, modular content management, a “game physics” library which helps you create custom physics easily, a rich rendering system and so on and so forth. The only kicker was that Nez supported OpenGL where I had just switched to DirectX (for a couple reasons.) I switched back to OpenGL because Nez offers a lot of what I need in my game for free and rewrote everything I had (which wasn’t too much) using Nez (which was pretty easy.) I also got some other nice things for free (particle effect system, lighting and other effects, a debug console, etc.)
I did find a few (I think?) bugs so far which is no big deal, since it’s open source I can easily debug and make changes as needed. I’ve dropped Farseer Physics for the platformer physics system because it was too much, dealing with things like mass, density, torque and so on. Game physics aren’t realistic physics simulations and the only reason I tried to start with Farseer is because I figured I could just tune the settings until I got what I wanted, or add some logic in there for special cases where I needed to break realistic physics. That is a lot of work and you can never be sure with a physics engine that something isn’t going to go flying off for some unexplained reason when trying to resolve some force. On the other hand, now with Nez, I can create collision polygons and calculate my own gravity/inertia/ etc. and use their handy methods like raycasting, collision detection and response, to completely control the physics of my game. This is what I would have ended up doing without Nez, but implementing all of the collision detection myself (separating axis theorem, a lot of trigonometry, and so on.) But I’m glad I’m not reinventing the wheel.
So, with the little time I’ve had to chip away at my platform demo, I’ve finally got some nice smooth movement:
There’s no threshold on what slope Luna can climb yet.
I also spent a couple days getting frustrated at SpriteFonts not having correct spacing and looking wonky, or not looking sharp. I just want a beautiful Sans font, rendered properly.. I ended up sticking with the basic SpriteFont .xml descriptor since it looks fine and it’s the most manageable (I can change fonts just by changing the XML, no need to rebuild texture atlases or anything like that.) I do the outline/drop shadow in software, using multiple draw calls right now but I may move that to a pixel shader once I’m ready to. Then I can also add a gradient to the text.
My goal is to get somewhat close to the simplicity, beauty, and readability of the font used in Final Fantasy X HD Remaster:
“The Legend of Luna” is a working subtitle. I’ve been pondering the story and game mechanics and go back and forth connecting game elements and story arcs, while I draw up the game in my head (and my in my sketchbook.) The first important decision I made is about the main character. Ardentryst had two protagonists, Pyralis and Nyx, who never really crossed paths but essentially ended up saving the world in one way or another. I wanted to trim that down to just one character that you followed through the story unless I had a very good reason to have two, so I wouldn’t have to do twice the asset work for the main character. Creating the art was a large portion of development time so I’m going to be a bit more thoughtful into how much I make myself create. Instead I hope to invest that time into quality assets that bring the game to life. Originally, the characters from Ardentryst were named Luna & Sol, and the working title for the game was Luna & Sol. Somewhere along the line I named the game Ardentryst and renamed the characters. I think that along with other obscure details tucked into the game’s lore added more confusion than immersion. So, I’m giving Luna back her original name. I debated on naming the game something else too, with the biggest argument being that Ardentryst is hard to say/spell/understand. So for the ease of sharing I could have chosen another name. But I kind of like the name Ardentryst because it is unique and my primary goal is not to make a viral game that everyone knows about. Ardentryst pulls you in a bit. What is it? What does it mean? Well, I sort of have an answer to that now, since the first game didn’t do a great job of elaborating at all…
The biggest takeaway I have from creating Ardentryst was that as a game, it was trying to do too many things. And it was strikingly okay at those things. But more importantly, it wasn’t cohesive. It was confusing, and quirky. All signature traits of a learning indie developer. I’ll be clear: I am extraordinarily proud that I designed, created, developed, and released a full game with what (comparatively) little coding knowledge I had at the time. A game that had some good success in the open source game world. It speaks volumes to the passion for creation and the drive for the goal that I had in my mind.
But now it’s time to take it to the next level, to use everything I’ve learned since then, and more, to challenge myself for the next Ardentryst.
So here I am creating a new game! It had been too long since I got into a serious game development project which was one of my favorite pastimes. There were a few things stopping me, though:
I wasn’t sure what I wanted to create. I’ve played a lot of great games but no ideas really jumped out at me as ‘the one’. Plus if I was making a game based on an existing game there’s potential legal issues.
I didn’t know what framework/language I was going to use. I did my game development in Python/pygame back in the days of the original Ardentryst game, then moved to C#/XNA. Then XNA was discontinued.
I needed a place to capture all of my ideas, game development news and Ardentryst paraphernalia in one accessible place. Feel free to subscribe either through WordPress or the E-mail subscription widget on the right to follow along as I create Ardentryst: The Legend of Luna.