Time to organise this Roadmap, here's the first draft (I haven't made many of these, so suggestions for improvments welcome): Summary: The aim of this project is to create a high quality customisable 3d game engine that can be used in a wide variety of high speed platformers. In order for it to be taken seriously as a game engine, and to ensure it has everything it needs to make a game, a high quality 6 Zone 3d game will be created. This is the long term goal. To prove that the engine is ready for such a task, to increase motivation and have something that demonstrates the engine at an earlier stage, a single zone Countryside demo will be created that shows off the engine. Current roadmap: Already complete: - Repository - Basic 3d To be completed for demo: Programming: - COLLADA importing - Load character model - Load level - Character movement around level, including jumping - Momentum and character movement physics - Enemy movement and AI - Lives, rings, and points managment - Graphical effects including lighting and shaders - Cross platform build system Art: - Level design - Badnik design - Items design (springs, goal) - Level modelling - Badnik Modelling - Item modelling - Sound effects development - Music composing To be completed for final game: Programming: - Cutscene system. - Advanced menus - Special stage system (?) Art: - Concept, design, and modelling for all 6 zones, including the enemies and various ites. - Concept, design and modelling for Special Stage (?) - All needed sound effects - Full game soundtrack - Storyline conception and scripting Making copy of this here in the wiki for revising: https://bitbucket.org/Sofox/mobius-game-engine/wiki/Roadmap
I think we should also have an in-engine level editor as part of the roadmap. Level editing is a massive part of making a game, and being able to dynamically create and edit a level in-engine allows devs to make quick, easy changes in-real time that they can test. Hell, there was an entire thread with ideas on what could be included in a level editor, with the idea of optionally working with 'chunks' being one of them (kinda like Trackmania).
That's a lot of goals for the initial demo. Maybe it should be scaled back to just include engine features related to rendering?
I don't think its too much for the programmers. Quite a few of those goals are trivial stuff, others not so much so it should balance out. As for the artists, I have no idea how long it takes to make the models, textures etc. so I can't say whether its too many for them. Remember though that each list will (hopefully) be completed simultaneously, so it is actually half as big as you think it is
Programming lighting and shaders is...trivial? That's news to me. I didn't know programming momentum and character movement physics was trivial either. Someone should tell that to Xaklse :specialed:
Maybe trivial wasn't the right word (I need to get some sleep). I meant these ones were quicker to do: - Lives, rings, and points managment - Cross platform build system - Load character model (this one only because the COLLADA import would have already been implemented) than these ones: - COLLADA importing (depends on whether we use a library or not) - Load level - Character movement around level, including jumping - Momentum and character movement physics - Enemy movement and AI This one will take longer or shorter depending on how many shaders are going to be implemented: - Graphical effects including lighting and shaders
Candescence: Good call about the in-game level editor. I think a basic version of it should be available for the demo to demonstrate it's features (maybe like Sonic 2 debug mode, for placing items and rings and such), and leave the advanced stuff for later. If further discussion changes our mind about this, we can update the Roadmap, but for now I've updated the wiki with that information. Aerosol and Relick: You're both right, it's going to be hard to figure out the complexity and time of some of these tasks. We'll update the Roadmap as we learn.
Damn, it didn't go through after all. I'll just make this short then. We still have an irc channel at BadnikNET, aptly named #mobiusengine. I propose that we try to schedule times and topics so that everyone can get together and talk about something. I'm especially eager to nail down what rendering and lighting techniques we're shooting to have and when. Not time-wise, but in relative terms. Short-term, mid-term, long-term, etc.
Just my two cents here, but I have the feeling the development is getting rushed just in order to have inmediate results, before thinking through the architecture of the engine. A foundation must be stablished, otherwise you'll encounter unforeseen design flaws that will require a lot of the codebase to be rewritten. My humble suggestion is to do some software engineering work beforehand, even before displaying anything other than a black console window. Stablish paradigms, code style, draw UML diagrams about the core system, it's interaction with other subsystems and external libraries, how they are integrated, etc. My first critical thoughts about this would be: Dependencies: Target platforms? Useful third party libraries? Abstraction level: How much will you abstract the underlying layers? Wrap third party libraries? (Adapter pattern?) Memory & Resource Management: What approach? Use an external library? Usage of smartpointers? Game Architecture: State based? Specific game states or entity ridden? Entities Architecture & Communication: How are entities described? Deep class hierarchy? Component aggregation? What communication protocols will be used? There are some good reads out there about game engine architecture design, I would try to analyze other mature game engines and take what would seem to be the good decisions. Here's a couple articles that are pretty nice to read: Id Tech 4 architecture review MVC Architecture on Game Development Game Programming Patterns Gamedev: Useful programming design patterns for Game Development.
WHOA WHERE DID YOU COME FROM I can understand where you're coming from with this, though we should be careful not to take too long with the underlying architecture, otherwise we'll end up with the same result that got this project restarted by Sofox in the first place. Granted, that was mostly Gen not posting jack shit for months and eventually disappearing without explanation, but still. Thankfully, we've got both Sofox and Relick working on this thing, and we haven't gone that far ahead (just have a primitive rendering, camera and movement), so we can take a step back and work out what underlying stuff we need to do.
I actually did just that yesterday before you posted, but I managed to lose it. I explained the main idea behind it to Sofox over IRC though. I'll see if I can get another diagram drawn up today.
Thanks for the input, Damizean. I totally agree that a good foundation should be built before getting too far ahead.
Try ASSIMP: http://assimp.sourceforge.net/ This is the best open source, general purpose 3D model loader I know of. If you're going for a "Model in external program, import into game engine" then maybe assimp would be sufficient for the geometry, and you could come up with a parseable map text format that stores the positions of objects, the scripting used for that level, definition of special effects used in that level, etc. THIS, this is probably the most essential part of putting Sonic gameplay into this engine. Since 3D physics are so crucial to a serious 3D sonic engine, maybe someone could make an outline describing how the physics in SonicGDK, BlitzSonic, or Eggengine work. The more detailed the better, but at least some kind of overview on how to properly align the player model on a 3D plane, how to adjust the player's velocity to a slope, how to handle the net forces acting on the player, determining the speed a player is able to run on walls, etc. Just a 3D sonic physics guide informative enough to get the gist of how 3D sonic physics should be implemented. Kind of like Sonic Retro's Sonic Physics guides http://info.sonicretro.org/Sonic_Physics_Guide - but for 3D You probably want to use a scripting system to make enemy programming flexible I would recommend Lua http://www.lua.org/ or Squirrel http://www.squirrel-lang.org/ Easy C++ intergration with the squirrel scritpting language: http://scrat.sourceforge.net/ This is simple, no external libraries needed You'll need some essential matrix math if you're going to do any fancy things with shaders http://www.lighthouse3d.com/very-simple-libs/vsml/ Or you could just maintain 3 projects Codeblocks(Windows/Linux), VStudio, Xcode(Mac) Automated build systems often give bloated projects with a bunch of verbose settings, but if automated build systems are the easiest to manage that's ok too. High quality fan-made Sonic the Hedgehog sound effects and music resources are all over the web, you can probably use some if you ask around. For 3D modeling, all I know is that there are a bunch of experienced Maya/Blender users on Sonic Retro For the beginning stages, I'd recommend an in-game console over a menu, it's easier to make than a GUI, and would make development and testing easier (e.g. switching maps via in-game console, adding enemies via in-game console, etc.) Remember, there's a huge resource of permissively licensed open source software out there, you don't have to write all low level code yourself. The links I posted are ZLIB/MIT/CC0 licensed, meaning you can use the code for practically any purpose.
This depends entirely on the game we make. We may not want to try to extrapolate Genesis physics into the 3rd dimension. We may want to eschew Genesis physics entirely. That'd be my preference, but the end decision is Sofox's right now.
You mean you would prefer to have the Mobius engine(a Sonic engine) with a physics system entirely unlike Genesis physics in 3D and therefore having physics unlike Sonic GDK/EggEngine/etc? What is the benefit of that though? SonicGDK for example has Genesis-in-3D-like physics that are robust enough to replicate both classic Sonic gameplay https://www.youtube.com/watch?v=KH9KSi8bFpo and modern Sonic gameplay https://www.youtube.com/watch?v=QAX74ISpd4k And even other platform genres, like for example, a Mario-like platformer would be compatible with SonicGDK-like physics, e.g. with Mario Galaxy-like platformers, 360 player orientation support would be quite handy Why would it not be preferable to have a robust physics system that can emulate classic and modern Sonic platformers in addition to other platforming genres?
I'm assuming you're making your own assets? Also, I think that you should have configurable values, with a genesis and modern default presets
What I would like is have low-level mathematics like angle finding and such abstracted through a high level scripting system. If somebody wants to use Mobius later on as yet another Genesis-physics-in-3D engine, then so be it. I don't have a massive erection for Genesis-physics-in-3D, so hardcoding that into Mobius would be very disappointing to me. All I want Mobius to handle is everything required to let the designer know everything about what kind of surface the Actor is on. Let them decide how the Actor should respond to it.
It makes sense to keep the engine generic and as flexible as possible. I don't mean that all physics or even the default movement system should be hardcoded. I just think that whatever default movement system Mobius does use should be implemented extremely well. After all, the intent of Mobius is to facilitate development of high-speed 3D platformers. For a designer, why choose Mobius over already established engines like Unity or UDK unless Mobius had tools that made coding platforming-related gameplay exceptionally easy and straightforward? Because in UDK or Unity, it's not easy or straightforward. Both engines have adequate low-level mathematics abstracted through a high level scripting system. But the engines still require an in-depth understanding of programming and math "just" to make the character run on walls. Unity and UDK are so generic and abstracted it makes it difficult to code relatively simple things. The designer should be able to focus on high level concepts like "target this enemy", "run up this wall", etc. using functions included with Mobius. But the designer should be able to override / extend any part of Mobius's built-in functionality through using low-level code. The designer should not have to write extensive code for common platforming features(wall walk, align to plane, change gravity, 2D camera mode, etc.) like UDK and Unity require the designer to do. The designer should not have to be a programmer with high-level understanding of mathematics to use the engine effectively. The designer should also be able to tweak most of Mobius built-in functionality without requiring extensive knowledge of programming and math.
The problem is, programming games does require a decent level understanding of mathematics and programming - unless you want it to be very basic and limited. I don't know if anyone here had heard of it before it went down, but there was a website called PlayCrafter which let anyone build any game they liked with a bunch of preset pieces, with the ability to change how these pieces worked if extra functionality was needed. The only problem was that even though it was really easy to use, a lot of things couldn't be done and doing simple stuff like walking on walls was impossible, unlike in Unity or UDK where it is only frustrating (but possible). Mostly, 3D game programming comes down to understanding rigid body physics, and vectors (and rotational stuff but whether it is euler, quaternions or axis depends on the engine) - and that's about it. I made it sound like a lot but its only one step above standard level maths. While I haven't used UDK, I know that if you know how to use vectors and rigid bodies then wall walking in Unity is a piece of cake - and if you struggle with it then you need to take a step back, look at what you know, what you don't know and fill in the gaps before trying again or deciding that Unity is too hard. None of that was directed at you specifically James, I was just explaining why Unity and UDK have done what they did.