-
Notifications
You must be signed in to change notification settings - Fork 84
Description
The following are things that I want to tackle before getting into the complexity of a map renderer:
- Standardized types. Instead of DWORD this, WORD that, let's use the following types: uint32_t, uint64_t, uint16_t, uint8_t, int32_t, int64_t, int16_t, int8_t.
- Fix the audio system. Currently broken and doesn't support music.
- OpenGL renderer. The current SDL renderer has bugs.
- Investigate high CPU usage.
- -direct aware filesystem. The current filesystem does not detect for -direct, but it should. Likewise, the MPQ access should be made transparent. Instead of querying for something from an MPQ and -then- opening it through MPQ methods, just use one call for opening a file. (The modcode should have no access to the MPQ code whatsoever)
- Cleaned up DC6/DCC placement, draw either DCC as component based tokens or as overlays/missiles.
- Generalize some of the existing data structures that are commonly used, but not put into formalized classes (looking at you, hash maps)
Then, the next steps can be:
- DS1/DT1 loader
- Map placement
- Entity control, placing of Type 1 and Type 2 objects in DS1s
- Movement
- Basic inventory management
- Basic combat (Normal Attack/Throw only)
- Basic monster AI
- Skills, magic items, ... the finer elements that make up Diablo 2
- Scripts for quests
- Mod support, .txt compiler, tools, plugin support, etc.
I want others to contribute what they think should be done to the code to make it something you're more willing to contribute to. I'll listen to any feedback, but understand that there are certain things that I am not interested in doing at this point:
- Porting to Nintendo Switch, etc platforms (see point 10 above)
- Widescreen support (see point 10 above)
Converting to another programming language is not something I want to do. I understand that not everyone is interested in writing super-verbose C/++, but I want to keep the project as close to the original game as I can get, minimize the number of dependencies that I have, and keep support for legacy systems.
Likewise, this is meant to be a self-contained project that others can learn from, so there's a lot of hand-crafted algorithms like hash maps. I originally started this project because I wanted to learn how to make my own high-performance isometric game engine, and having minimal coupling between components is ideal. If I decided later on to go the route of std::ifying or boost::ifying stuff later on in the name of performance, it's much easier to graft that kind of system onto what I have here, instead of doing it the other way around.
...plus, modern C++ looks gross, I'm sorry. :(
But here are some good things to discuss:
- Overall structure of the project (is having modcode separated into DLLs a good idea? bad idea?)
- Naming conventions
- Things you genuinely want to see changed