Jump to content

- - - - -


golem urho3d engine rpg refactoring
2: Adsense

In the previous post, I commented how I didn't see any use in re-factoring and re-building Golem, the way evolutional is re-factoring Manta-X. I'd like to elaborate on that a little bit.


It's not that I don't find any value in the game itself; Golem is a game that I most definitely would like to revisit at some point. I feel like I had a lot of good ideas with it, and I liked the setting and story I was writing for it. It was fun to play, as far as I got with it, blending some of my favorite aspects of Diablo and the various roguelikes I was playing at the time. I could certainly see myself going back to it some day.


However, that doesn't mean that I have any need to try to refactor it as it stands. You see, refactoring that thing is a trap. A warm, cozy, comfortable trap. I could jump in and start refactoring. I've got a thousand ideas even now, as I write, for what I could do to start improving things. There are things I would do better, things I could rewrite, etc... I've got an idea for a message passing scheme that... well, let's just say that this is how it starts. I spent decades of my life in this trap. Decades. Call it framework-itis, if you want. Call it engine-sickness. Whatever. It's a trap.


I have started to work on countless framework/engine projects in the past. I've written numerous prototypes, demonstrating some new aspect of engine technology that I hadn't explored yet. I've written object frameworks, message passing schemes, resource handlers. There is always a reason for me to jump back into that mess, but the thing is I already know how that is going to end. I already know how my time will be wasted.


I've mentioned before, I'm not much of a software engineer. I'm better than I once was, certainly, which just makes it more tempting to say, "I can do better this time." I could dive in, write some framework code, munge around with more modern OpenGL versions, build a new object framework, yadda, yadda, yadda. But eventually I'm going to run into some roadblock. Some poorly designed bit, some system I lack the knowledge or skill to architect gracefully. The spaghetti-ing will start. I'll begin running headlong into limitations of the engine, I'll start kludging in bits to make something work. Before you know it, months or years have passed and I am right back where I was for just so many years of my life: writing engine code, rather than writing a game, and getting bogged down in a mess of code that is spiraling out of control. That's how it happens with me. It's a road I've been down before. I've never been a good-enough programmer to avoid the trap, and I don't think that I ever will be.


It's already started, you see. I've got a project skeleton in my projects folder right now. I've got some new libraries I've never used before copied into that project, libraries that I am itching to get a feel for and learn about. The skeleton project builds without errors or warnings; it opens a window, loads some shaders and draws a red/green/blue triangle. I've copied over the source files from Golem. I've started writing a tool to un-crunch the data files in order to recover the assets and try to make use of them again. It has begun.


I gotta stop the madness.


Over the years, since I joined this site (officially in 2004, unofficially somewhat before then, in the days of the splash screen), I have come into contact with a lot of really talented and skilled programmers. evolutional has been hugely influential, off and on through the years. Washu, Promit, swiftcoder, SiCrane, Fruny, phantom, superpig, hplus0603, Hodgman, Servant, Apoch, eppo.... the list goes on and on. A lot of these people know programming in a way I never will, and I was always a little bit envious of that. But more than anything, over the years I've learned to accept my limitations and understand that I need to play against my strengths. Writing low-level framework code in an elegant and efficient manner, regardless of how I enjoy it, is not one of my strengths and never has been.


So the chief thing I would do differently this time around would be to use an engine. I've been using Urho3D for quite some time, and have become very comfortable with it. However, if I use an engine then automatically, by default, the vast majority of the existing Golem code becomes an unusable non-sequitur. Animation handling? GUI? Object hierarchy? Just no real practical way to shoe-horn it into Urho3D's existing component-based framework. Not without completely re-writing everything, which is pretty much what I would end up doing. The re-factor then becomes a completely new project altogether. It would be less labor-intensive to just scratch everything and start fresh, building directly against the architecture of the engine. It would certainly align more closely with the way I currently think about game development. I have left behind many of the attitudes and beliefs that I held when I was working on Golem. I don't think I could fit in those pants anymore.


But I wouldn't start work on Golem again right now, not with Goblinson Crusoe already on my plate. Nuh uh, no way. One medium-scale RPG is already too much work for one dude. No sense adding another.

Aug 06 2016 12:10 AM
What a great post! This is something I can totally relate to. The hardest part of indie development is time management. It is far too easy to start a new project when you've hit a roadblock or motivation has depleted.
Aug 06 2016 07:49 AM

I guess the differences between my project and yours was that Golem was seemingly more complete than Manta-X, so I could easily strip down and remove things. I also didn't migrate to a new system, I did it all in-situ because it was easy to do that. Smart me would scrap it and create the whole thing in UE or Unity, but I'm enjoying messing with the code :)

Aug 06 2016 09:56 AM

I guess the differences between my project and yours was that Golem was seemingly more complete than Manta-X, so I could easily strip down and remove things. I also didn't migrate to a new system, I did it all in-situ because it was easy to do that. Smart me would scrap it and create the whole thing in UE or Unity, but I'm enjoying messing with the code :)

I've still got that project setup. Been playing with oglplus some more. The one thing that could lure me back into the custom framework is an issue that has cropped up with multiple out-of-the-box engines. Generic, all-purpose scene management doesn't work the best for a basic isometric scene, especially one that is decal-heavy. I use tiled ground-planes with alpha-blended decoration decals quite a bit, but all-purpose scene hierarchies often don't sort co-planar ground decals consistently.

Really, it's mostly an issue of how controllable the alpha-blend pass is. In an isometric scene, back-to-front order is well defined based on an object's coordinates, but in a general 3D scene it's harder to pin down.
Aug 25 2016 12:05 PM

I can understand that trappings. The lure of building a custom engine to fit my exact needs with little overhear lead to most of my early projects become ghosts of games.

Note: GameDev.net moderates comments.