This commit is contained in:
Panagiotis Georgiadis 2021-03-28 03:29:04 +02:00
parent 73bf269d48
commit 2801ae5410
No known key found for this signature in database
GPG Key ID: A5B9AF563B15B24F
3 changed files with 92 additions and 2 deletions

View File

@ -34,7 +34,7 @@ _Stay awhile and listen_ ...
* 👉 **[Current Status](./docs/status.md)** 👈 - what you should focus on
* [Roadmap](./docs/roadmap.md) - Planning ahead
* Design - High-level overview of the OpenDiablo2 org and its projects
* FAQ - Common questions from new people to the project
* [FAQ](./docs/faq.md) - Common questions from new people to the project
### ⭐ For Users

73
docs/faq.md Normal file
View File

@ -0,0 +1,73 @@
# FAQ
> Q: Should I have experience in game engine programming to be able to contribute?
Absolutely not!
Most of our contributors are _not_ game developers.
Actually, for lots of us, this is both our first _Go_ project, and our first _game_ project.
> Q: I am a developer, but I don't have experience writing Go. How much of a problem could this be?
For people who are absolutely new to Golang, we usually recommend going through the [Tour of Go] tutorial.
Even with half completion of this course, you should feel confident enough to submit your first PRs.
> Q: Is it difficult to understand how the code works?
Currently, the barrier to entry can be quite high due to coupling among various parts of the codebase.
That said, to understand how things are working behind the scenes, you have to go through a lot of lines of code.
Getting a grip on the current state of the project requires a lot of reading and debugging.
> Q: How can I become familiar with the codebase?
You can practice building small apps in [Ebiten] (current engine) and [SDL2] (future engine).
Also feel free to read about the [Entity Component System] model (or read [Akara] code).
Until we further decouple the larger systems in the codebase, we're going to have this issue where you need to be familiar with a huge chunk of the codebase.
Until we rectify this issue, your best bet is to just ask a lot of questions, and those that know will be happy to chime in and try to explain.
> What do I need to know about Diablo 2?
First off, you should be familiar with the gameplay.
Apart from that, you only need to know some basic information about Diablo 2 mod-making.
For example, you have to know the basic game's file formats, such as `MPQ`, `DC6`, `DS1`, `DT`, etc.
You can find a lot of good info in `#file-formats` channel on our Discord server and on [PhrozenKeep] (the d2 modding community forum).
There are [plenty useful information for the Diablo II file formats](https://d2mods.info/forum/viewtopic.php?f=7&t=724) and other info such as the [Levels.txt](https://d2mods.info/forum/viewtopic.php?t=6754) file.
> Q: What's [Akara]?
Writing tests (in isolation) for something in the codebase is difficult because of the high level of coupling.
The solution was found at [ECS], which is fantastic at de-coupling game code.
[Akara] is the [ECS] implementation for Go we have selected, and it's been under development by our very own developer [Gravestench](https://github.com/gravestench).
Using [Akara] we are able to test individual components in isolation without problems.
> Q: What's [AbyssEngine]?
Currently, everything in OpenDiablo2 is hard coded.
We are moving the pieces, so we can make everything into a custom `MPQ` (a 'shim' `MPQ`) -- what will be `OpenDiablo2.mpq`.
The engine itself will be stripped of hard coded logic and moved to [AbyssEngine].
That way there's a clean separation between the game, and the engine code.
> Q: Are there any other project related information?
Project Boards:
- [OpenDiablo2 Project](https://github.com/OpenDiablo2/OpenDiablo2/projects/4)
- [HellSpawner Project](https://github.com/orgs/OpenDiablo2/projects/7)
Epics:
- [OpenDiablo2 Milestones](https://github.com/OpenDiablo2/OpenDiablo2/milestones)
Other docs:
- [Diablo 2 Data Tables](https://docs.google.com/spreadsheets/d/13Wo58CNxDQlQiZm066dAWVVU4kmgKayn0zdyvmU18AM/edit#gid=330752700)
- [Official Documentation PDF](https://github.com/OpenDiablo2/SystemRequirementsSpecs/releases)
[HellSpawner]: https://github.com/OpenDiablo2/HellSpawner
[Entity Component System]: https://en.wikipedia.org/wiki/Entity_component_system
[ECS]: https://en.wikipedia.org/wiki/Entity_component_system
[Akara]: https://github.com/gravestench/akara
[Ebiten]: https://ebiten.org/
[SDL2]: https://github.com/veandco/go-sdl2
[Tour of Go]: https://tour.golang.org/welcome/1
[PhrozenKeep]: https://d2mods.info/home.php
[AbyssEngine]: https://github.com/OpenDiablo2/AbyssEngine

View File

@ -1,10 +1,27 @@
## Status
We are currently working on features necessary to play Diablo 2 in its entirety. After this is completed, we will work on expanding the project to include tools and plugin support for modding, as well as writing completely new games with the engine.
We are currently working on features necessary to play Diablo 2 in its entirety.
After this is completed, we will work on expanding the project to include tools and plugin support for modding, as well as writing completely new games with the engine.
At the moment (March 2021) the game starts, you can select any character and run around Act1 town.
You can also open any of the game's panels.
Much work has been made in the background, but a lot of work still has to be done for the game to be playable.
> Q: Where help is currently most needed?
The best way to help right now is to focus all of your energy on [HellSpawner].
This is a GUI application for viewing, editing, and creating Diablo II files.
This will help us work on `OpenDiablo2.mpq` using [Hellspawner].
In other words, the [OpenDiablo2] codebase will be soon obsoleted.
We're currently moving the core features into the [AbyssEngine] (game engine), and the implementation specific stuff will go into a _shim_ `MPQ` which later will become the OpenDiablo 2 project.
The [OpenDiablo2] repository will become the new place for the `OpenDiablo2.mpq` file, which [AbyssEngine] is meant to use it.
So it's not that the current logic is going to be removed/wasted, but we will just need to translated its appropriate parts:
* In-game logic and interactivity will be translated to Javascript
* while things like entity composition and map rendering will implemented by the game engine.
Feel free to contribute!
[AbyssEngine]: https://github.com/OpenDiablo2/AbyssEngine
[OpenDiablo2]: https://github.com/OpenDiablo2/OpenDiablo2