Long time no blog! I come bearing one nice gif, and 4 scenes of awful software gore.
As per the What’s Next post, I’ve been doing a lot of tidying up. The engine is now running nicely in Python 3, and the Core app is ready as soon as I finish some server work - so stay tuned for beta testing opportunities :)
I decided to spend some time in the Battle2.5D plugin - now renamed StageFight - since I overhauled a lot of UI and scripting code recently. The top gif shows the current status - still some bugs to fix - and the other 4 were stops along the journey. My favourite is the 4 ton Fishka.
Longtime listeners may remember this post, where I was trying to work out the in and outs of Pokémon Black/White’s battle staging. Well, I finally got to the bottom of it - story under the cut.
So, in the 5 years since that post, I’ve learned a lot of useless information, and some of that is how to track footage in 3D, using Blender.
Since I never had any luck getting the battle scene geometry out, and I really wanted to know some more intimate details like the camera’s field of view and positioning, I thought I’d try some reverse-engineering. As usual with my grand ideas, the line between genius and lunacy is fuzzy.
I started to track some normal old emulator footage, but sub-pixel fuzz was making accuracy impossible. You need 8 perfectly tracked points for blender to calculate the camera angle, and I barely managed 4 wobbly ones.
I soon lost patience and decided to look into uprezzing DesMuMe. I did some research and found an old, Japanese, windows-only 2014 build that someone had hacked to increase the resolution for models. Perfect!
I tried to record some more footage in OBS... but it was compressed to hell, and the big blobs of colour that endeared me to this generation were not getting me any sort of precision to track anyway. Another bust.
I realised my best chance at accurate tracking was going to be to make it render in wireframe. This is a pretty easy switch for OpenGL - you can just add a single line of code. Maybe I could get the source code and recompile it?
After a lot of searching, I did find the source code - but it was relying on libraries compiled in 2012, and would not compile at all. I also got very upset with Windows and Visual Studio, and had to steam off for a few days before trying anything else lol.
Of course... when I came back, I discovered the Mac version of DesMuMe has a setting called “GPU Scaling Factor”...
I felt very stupid.
DesMuMe is actually very easy to download and compile on Mac. After a bit of fiddling, I got my 4x scale precision wireframes! Some tracking in blender, and bam! Accurate camera positions, angles, and FOV.
Then I spent three days getting very upset, until a passing stranger explained to me the difference between left-handed and right-handed coordinates, and the final piece of the puzzle fell into place.
At some point in the future, as part of the engine’s Help docs, I’ll post the .blend file publicly so that anyone can model custom battle backgrounds and plinths.
It’s very satisfying to solve a 5-year mystery like this. And also to know I never have to open Visual Studio again.
3dPE was recently featured in the Eevee Expo, a collection of trailers, interviews, and showcases from the Pokémon fangame community. If you like fangames, make sure to watch the whole thing!
The 3dPE Halloween Demo is a short, Pokémon-themed adventure game for PC and Mac.
You're walking in the forest when you hear a shout; you realise you don't recognise your surroundings. An old, crumbling gateway is nearby, and a well-dressed butler is beckoning. Can you help?
The demo was partly designed to show off the engine’s current capabilities, so there are beautiful 3D maps, atmospheric lighting, swooshy camera moves, and more. There are no Pokémon battles, but there are puzzles and traps to work your way through as you discover the story.
3dPE is still extremely in-alpha, so you may experience crashes or slow performance. If you want to help improve it, or just tell me what you think, come join our Discord!
Also, if you know how to code in python, or if you’re thinking of making a game like this, help shape the way 3dPE develops!
More “news” coming - it’s been a not great a year - but I wanted to post this video, for the sake of posting something.
I recently went through and rewrote the sound system, to support sound effect pitch changes, and music with tracks and sections.
You can add multiple tracks to mix as you like, and you can set sections of a track to loop. There’s also things like queueing sections, so you can move smoothly into a different section whenever the current one finishes (or is about to loop).
I’m going to update the Halloween demo for this year, and I’ll probably make a post about tools release - or at least, the troubles I’ve had with a tools release. If anyone ever asks you to make something that sounds like a git UI, hit them and run away.
With the Halloween Demo release a few days ago, 3dPE hit a pretty major milestone.
This project is huge, complicated, and mostly lives inside my head or my Discord ramblings, so I thought it would be prudent to lay out The Plan in a more readable, less sweary way than usual.
The Immediate Future: Bad News
So after working on the demo for two months solid, I'm kind of burnt out. Also, I need money to live, which is upsetting. So there's going to be a bit of a break in development for a while.
It probably won't be for long, though. I have a lot of ideas I'm excited to try out, and ideas for a winter holiday demo that has never yet come to fruition. We'll see!
However, I tried to record some of the process of making the maps, so I'll edit together and post a video of that. I'm also going to get the current tools into the hands of alpha testers, so if you want to play with them, come join Discord! It might include the Halloween maps :)
Next Up: Dates. Updates.
Currently the engine is running in python 2.7. Python recently ended support for v2, and by recently I mean January 2020. So the next thing I want to tackle is updating the codebase to python 3.
Along with that, all of the various libraries will need updating too. We're running old pygame, old pyopengl... you name it, we're struggling with bugs that have been fixed for several years in it.
All this should result in a slight bump in performance, too.
There have been one or two crash problems from the demo too, so I'd like to get those ironed out.
Tools Beta and Clean-Up
The work on the demo, particularly towards the end, resulted in some fast and loose work. I'm not going to say *shoddy*, but... perhaps sub-optimal.
There's also the other slight problem, which is that you can only download and use the game creation tools if you're me, or jac who runs the server. In terms of a game engine, I would also call this sub-optimal.
So, when everything is stable in python 3, I'll be creating and releasing the Core app. This app will connect to the 3dPE website, where user accounts and projects are stored. It'll handle syncing project data with your collaborators, and it'll be the gateway for creating with the 3dPE tools.
We'll then go into some kind of beta. And maybe open source?? Note to jac if you read this: if I die, please make it open source.
Overworld 2.5D Completion
The Overworld plugin is, let's say, baseline functional. But there is more to come. This is the stuff I'm actually excited about coding.
Lights - the lighting system should support point lights, as well as the current environment system. Should make a lot of cool effects!
Model Entities - Animated models (skeletal or UV) are a must.
Sprite refinements - sprites are way too cpu-heavy right now.
Texture creation - Scripting can create textures, but there's no way to apply them yet. It'd be cool if you could use tiles in as prop textures too...
Prop variants - like the variant system for tiles, props should also change with the seasons.
Post-processing - game creates should be able to make their own shaders. Could be used for effects like black and white, or colour correction, or depth of field blurring.
(Even) More efficient terrain - some of the terrain chunking algorithms need work, and it would be nice to introduce LODs for terrain.
And more - skybox models, better threading support and progress bars, more import/export stuff...
Attending the Other Plugins
UI2D
UI2D is really the unsung hero of the whole system. It ties the other plugins together. But right now, you have to code everything in python manually. So I'll be staring on a UI Builder, like the Map Builder, that will let you make a UI with little to no coding knowledge.
TitanBattle and Battle 2.5D
The TitanBattle plugin by jac has been ready for action for some years now - it's a flexible core system for turn based battling. But the Battle 2.5D plugin has been lagging behind while I worked on other things. It would be good to get it up to date with the rest of the engine... and into the next demo...
Conclusion
Its a pretty exciting time for 3dPE right now. The final final thing is that the engine’s stable enough now for me to start my own fangame project (which is kind of the reason this whole crazy edifice even exists). Even if you’re not a game maker or coder, there will be games to play, and lots of screenshots and gifs and videos.
From the outer wilds I return, cocooning myself warmly in my weirdo game engine.
I reworked how some frame buffer type things work, freeing the overworld render from the tyranny of the window’s size, and allowing for scaling wth optional hq2x filter, and some funky screen transitions.
I also did some work on terrain selections and fixed a load of slowdown bugs.