Monday night after work. This week will be shorter than usual; I have a castle tour on Wednesday (which tends to take up the whole day) as well as a job interview. This weekend I also have another manga drawing class (this time in a smaller class of probably 5-6 instead of 30 like last time) so I need to commit some time to improving my basic skills, ulp.
As well as that I haven’t actually touched my Warcraft blog since January, made no progress on Unity and haven’t done any further SDL2 tutorials.
It sounds depressing except that I’ve done an awful lot of actual programming and I KNOW my toolkit is so much bigger and better than it was even a month ago.
Over the weekend/today I spent time thinking about the current situation. I am designing a collision detection system that is ‘perfect’, and that’s why I’m not making progress, because my current skill set is not up for a ‘perfect’ system that is also highly efficient.
I also do not need a perfect, highly efficient system. I just need one that is good enough to approximate my ideas, for a prototype game. I’ll improve my collision detection when I need to, but for now I should just implement one that’s good enough to do what I want.
I have basically three games that I want to make and they have different interfaces/requirements.
This is essentially a space-based real time strategy game.
However, I dislike many elements of modern real time strategy games, such as the requirements for high actions-per-minute, micro-managing of units and resources, defining an efficient build order, etc etc.
I think that these kinds of decisions should be encapsulated in to the AI of the game.
I enjoy large scale campaign battles that start with players carefully setting up dominoes, and then the dominoes start to fall. The original Command and Conquer series felt like this. Modern RTS games fail to capture the charm of having to choose which three or four units you were going to build to defend your base while you desperately tried to expand to the next resource area.
Fleet Engagement does away with all this resource business by allowing you to pre-plan your battlegroup, right down to what type of armaments and armor would be installed.
Additional vessels can be warped in/summoned/etc with the only resource being ‘time’; when you’re not requesting something, time goes up, and when you want to buy something, your time gets deducted.
Combat is fought over specific objectives (planets/motherships/stuff floating in space).
Real time strategy games are apparently the hardest to make, so I’m probably foolish to pursue this as the first game. Tackling a 3D one, with all the issues of user interface in a 3D environment, would be a wonderful challenge but likely not one I have time for.
The game system would need quaternion controls for the units to operate in 3D space, however collisions could be completely abstracted away.
A first person shooter. Well, the game I’m envisioning is more like 3D Pac-man. Instead of a tight maze, think more like a factory floor with various objects in the way – you want to get to a specific objective, perhaps after activating a macguffin or some such.
Robots may be there to help/harm you.
I see this as more of a training wheels kind of exercise – it would allow me to demonstrate simple AI, basic physics, as well as integrate sound/music.
The game system would need cardinal axis only, and basic collision (AABB) detection.
Basically my version of the Lucas Arts flight sim games (X-wing/Tie Fighter/X-wing Alliance) which in my opinion were amazing and could do with a modern update.
Since it’s in space, it would nominally be in the same universe as my ‘fleet engagement’ game, and would allow me to develop a story/characters/plot as well as build models which would ultimately be useful in Fleet Engagement in the future.
This game requires quaternion operation for everything and more complex collision detection system.
So basically, the order of creation has written itself, and my direction is obvious.
I’ll make the Idiot Robots game that I first planned as my prototype so that I have ‘something of everything’, and that’s probably as far as I’ll get in the current time frame.
I can at a later date identify if I want to do something further with that game engine or evolve it in to my space sim game.
So let’s get IR going and then figure out what to do when that’s done.
A little later on Monday night: I’ve reset everything to using cardinal axis. It didn’t take long since I was trying hard to maintain the option to switch to joystick/mouselook at a button press.
I’m all set up to start fresh with the simplified collision detection when I get up tomorrow.
I made some amendments to what is basically a terrible hack job excuse for collision detection. It’s effectively picking up when an actor’s bounding box is inside a scene, and from here I will drill down to actor:triangle intersections.
At the moment, I’m keeping track of the location of actors by their midpoint, and maintaining an x/y/z ‘radius’. This is effectively an axis-aligned bounding box. By constraining hits to only when checks on all axis return true; I can trivially include/exclude scenes when checking for collisions.
When I check if a scene is to be considered, I translate the actor to scene space and get the two actor’s midpoints and create a new vector from them. If the x, y or z component of that vector is less than the sum of the x/y/z components of the actor/scene’s midpoints, it’s a hit.
I’m not sure what is the best way resolve intersections between this bounding box and the triangles of the scene. Probably my existing collisions code is the way to go.
‘Short week’ indeed. Thursday I was prepping (and doing!) a job interview, Wednesday I took four hilarious German guys to what turned out to be an all-day tour of Himeji castle, and today I’m frantically cramming for my manga artist visitor tomorrow. All in all, Tuesday was my only day pf programming so far. I’m working the extra-extra late shift tonight (finish at 8:30 pm) so I’m unlikely to get home before 10, so that’s probably it for this week.
Tuesday afternoon I basically cut down the task to “Let’s just get collisions against walls working”. I’ll incrementally add additional complexity as we go, roughly in this order:
– collision with floor, plus gravity, so an actor will ‘fall’ if not suspended.
– Stair interactions. This will give me Doom-level mechanics.
– Different scene gravities (eg water scenes, space scenes) so that characters can ‘swim’ or float. This will give me Quake-level mechanics.
– Object-bounded boxes.
– Actor vs Actor collisions.
That’s all the steps I envision are necessary for collision detection. I’ve been stuck on this for almost a month now, and I’ll be pretty happy when I can see the back side of it.
In the comments, Tim asked what’s wrong with Starcraft 2.
While I feel Starcraft 2 is overall a very entertaining game, it suffers from micromanagement issues. EG players need to maintain an active resource line at the same time as building units, scouting, and making good tactical decisions in the battle. The races generally boil down to ‘who can get the most units of the right type in the right area’ and it is hard to recover from any set backs.
Basically I’m not very good at this kind of intense micromanagement – games like C&C had you make production decisions once every thirty seconds or so, no matter what scale of complexity you were at. Starcraft has you making them progressively more frequently as the game goes on.
I would prefer it if you could partially automate some of this base building/production/resource gathering, so that you could spend more time focusing on where you wanted your units to be and issuing effective orders. It would also be good if units had some basic AI to target where they were more effective, rather than all firing-at-the-same-thing (massive overkill/wasted attacks) or all firing at the first thing that comes in to range (allowing units to be ‘tanks’ that absorb shots while ‘glass cannons’ are left untouched).
So this isn’t “what is wrong with Starcraft and common RTS”, it’s more “What I don’t like about them.” So if I was going to make an RTS game someday, I’d try to include more elements of games that I like than ones that I don’t like.
Sunday 1 am:
Today was fascinating. I learned a great deal about how to use various tools, including how to apply tones, for manga. The artist – Kennichi Maeda – was basically amazing. He sat down and drew a running character, with motion blur and a background and then demonstrated inking and how to apply tones. It was extremely informative. He also spent a good deal of time explaining how to use manga paper, and how manga scenes are laid out.
I was deeply impressed with his ability. It was clear to me that we were watching a young master at work – he drew quickly, accurately, and without any kind of guidelines or need to redo his work. At one point he erased over some ink which hadn’t dried properly and, no problem, out came white paint and it was covered up.
At the end of the session he donated me a number of tone sheets that I could practice with, as well as some of his own 4-koma manga works that I can use as a reference in future.
I’ve been mainly working on drawing heads from different angles. I feel like I have hair and eyes basically OK, so lately I’ve been working on noses and mouths. Next I’ll be touching on neck/shoulders. I still have some problems with the basic shape of faces and the exact positioning of face features on a figure.
Well anyway, here’s the latest Amie, our intrepid astro-engineer.
I personally like super long flowy anime style hair, but my ability isn’t good enough to replicate this yet. Instead I’m going with short hair and I’ll gradually increase the length over future iterations. My main drawing focus is to get satisfactory appearances for all core body parts, then I’ll work on experimenting with them.
With this I’m at least on part with ZUN-art, so I can at least do my own artwork for games now.