Thanks a lot, the encouragement really helps a lot, especially when you're tired...
Considering that this is the devlog forum, I suppose I should explain the development, instead of just spouting milestones. So here is the bitter tale of a bitch of a game engine...
I started the engine, like so many things before it, without understanding what I was getting into. I just like doing things that are kind of obscure. I like learning how to do something from scratch. There wasn't much in the way of online resources on isometric engines with a z-coord, so I just made a regular engine and then added the Z coordinate. It was messy and ridiculous, and incredibly inefficient. At that point the engine was a conglomerate of Python, C and C++, Java and Javascript. I don't exactly know why I made such a beast, but keeping everything cooperating proved to be too much of a pain and I extricated the core isometric engine and started again, this time with C++ and Lua. Along the way I tried many, many ways to improve the engine and reduce unnecessary drawing. Some of the code was truly comical. Trial and error, and error, and error, and finally success. I'm so glad I picked Lua, as integrating it with my engine was so easy I felt liberated. After fiddling with various wrapping systems that required either special tools, large external dependencies, or meta languages, I just went in and learned the Lua C API. At first it was bizzare, but I finally wrapped my head around it and (being a stubborn maniac who likes making things hard on himself) proceeded to make a mini language with the C preprocessor to make wrapping C++ functions and classes in Lua easier. This could have gone horribly wrong and set me back, but remarkably it turned out all right the first time, with little fuss.
After getting the core tactics style isometric engine working, I came across my first evil nemesis. One day I decided that phones are where it's at and I'm gonna put this thing on every phone system I could. So screw you SDL. I mean, SDL 1.3 is commercial, it's bloody commercial! What happened to freedom, maaaaan! I'm not working for the system! I support freeeedom maaaan! This was another moment of folly that I barely survived. Here's a tip. If you want to make a game, really make a complete game, don't spend your time on making tools that you can get for a reasonable price. Man, I wish I just paid the license fee right then and there. Instead I did something dumb to the N'th degree. I wrote a software blitter. Why, you may wonder, didn't I learn OpenGL? Or perhaps I could wrap up system API's in a nice little package? My only answer is that I'm incredibly foolish sometimes, and I should have. Despite the absurdity of my decision, I got it working pretty fast, and pretty fast. It was almost as fast as SDL 1.2 software rendering with RLE acceleration. Considering I had to look up the bitshift operators online and had never done any real graphics programming before, it all worked out OK. Except I wasted a lot of time developing a system that I eventually will throw out.
The next bugbear on my odyssey was the dreaded GUI. Can you guess what I ended up doing? Long story short. I wrote the stupid f*xing thing in C++ and then decided that I don't like all the glue code between the GUI and Lua, so I scrapped it, wrote a basic graphics compositor in C++, linked it to Lua, and rewrote the GUI in Lua. All things considered, it was the lesser of two boneheaded evils. Now here's the rub. I was feeling pretty torn about abandoning my C++ GUI code, because it constituted such an important part of my editor. So again, predictably, I rewrote the editor. Twice. I'm serious.
After all of this total nonsense here is what I ended up with:
C++
------------
Area - Holds layers of...
Entity - A game object that exists at a coordinate in an Area
Animator - Responsible for telling Entities to change frame or position
Compositor - Puts lines, rects, text, images into compositions that can be drawn quickly.
TONS of other little details like pathfinding, line of sight, etc...
Lua
------------
Entity - A Lua subclass of the C++ Entity class, this adds all game specific data and methods.
Window - A Lua base class for labels, buttons, menus, grids, panels, etc...
Everything else required for a game including main game loop, input parsing, AI, saving, loading, etc...
I'v probably
repressed forgotten a lot of horrible memories, but that's the gist of it. If I've learned one thing it is this. Decide what you want to do. Do you want to make a bunch of software components? Fine, DO IT. Do you want to make a game? Then
don't be a code snob. Just get things that work, use your skill and discernment along with ample research and choose the right tools for the job. If I had to go back again I'd use good libraries instead of coding from scratch, particularly for graphics and GUI. Oddly enough (or not), I used to make audio software and have experience with how difficult it can be, so it never even entered my mind to make a custom audio engine, I always planned on using something precanned. I guess that's how it works. An overambitious idealist goes in thinking that they can conquer anything and comes out a grizzled veteran. Well, I'm tired, I've made mistakes, and I have the battle scars to show for it. Next time I'll do my best to avoid a fight.
I'm doing the project solo, and I'm losing my mind ever so slightly. I wish I started something smaller, but now I'm in way too deep to go back. If anyone wants to get in on part 2, that'd be great, but now at the last mile of this punishing development marathon, I've got to man up and finish what I started. I still believe in this game strongly, but it feels really nice to hear that someone other than me is looking forward to it.
By the way. This game is going to be amazing (I hope).