fc87b2be7a
* Remove weapons, armor, misc, itemCommon, itemTyps datadict singletons - removed loader calls from d2app - removed the HeroObjects singleton from `d2core/d2inventory` - added an InventoryItemFactory in d2inventory - package-level functions that use data records are now methods of the InventoryItemFactory - renamed ItemGenerator in d2item to ItemFactory - package-level functions that use records are now methods of ItemFactory - d2map.MapEntityFactory now has an item factory instance for creating items - fixed a bug in unique item record loader where it loaded an empty record - added a PlayerStateFactory for creating a player state (uses the asset manager) - updated the test inventory/equipment code in d2player to handle errors from the ItemFactory - character select and character creation screens have a player state and inventory item factory - updated item tests to use the item factory * minor edit * Removed d2datadict.Experience singleton added a HeroStatsFactory, much like the other factories. The factory gets an asset manager reference in order to use data records. * removed d2datadict.AutoMagic singleton * removed d2datadict.AutoMap singleton * removed d2datadict.BodyLocations singleton * removed d2datadict.Books singleton * Removed singletons for level records - removed loader calls in d2app - changed type references from d2datadict to d2records - added a `MapGenerator` in d2mapgen which uses thew asset manager and map engine - package-level map generation functions are now MapGenerator methods - `d2datadict.GetLevelDetails(id int)` is now a method of the RecordManager * remove SkillCalc and MissileCalc singletons * Removed CharStats and ItemStatCost singletons - added an ItemStatFactory which uses the asset manager to create stats - package-level functions for stats in d2item are now StatFactory methods - changed type references from d2datadict to d2records - `d2player.GetAllPlayerStates` is now a method of the `PlayerStateFactory` * Removed DkillDesc and Skills singletons from d2datadict - removed loader calls from d2app - diablo2stats.Stat instances are given a reference to the factory for doing record lookups * update the stats test to use mock a asset manager and stat factory * fixed diablo2stats tests and diablo2item tests * removed CompCodes singleton from d2datadict * remove cubemain singleton from d2datadict * removed DifficultyLevels singleton from d2datadict * removed ElemTypes singleton from d2datadict * removed events.go loader from d2datadict (was unused) * removed Gems singleton from d2datadict * removed Hireling and Inventory singletons from d2datadict * removed MagicPrefix and MagicSuffix singletons from d2datadict * removed ItemRatios singleton from d2datadict * removed Missiles singleton from d2datadict * removed MonModes singleton * Removed all monster and npc singletons from d2datadict - MapStamp instances now get a reference to their factory for doing record lookups * removed SoundEntry and SoundEnviron singletons from d2datadict |
||
---|---|---|
.circleci | ||
.github | ||
.vscode | ||
d2app | ||
d2common | ||
d2core | ||
d2game | ||
d2networking | ||
d2script | ||
docs | ||
scripts | ||
.editorconfig | ||
.gitignore | ||
.golangci.yml | ||
.travis.yml | ||
build.sh | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTORS | ||
d2discord.png | ||
d2logo.ico | ||
d2logo.png | ||
go.mod | ||
go.sum | ||
LICENSE | ||
main.go | ||
README.md | ||
rh.exe | ||
tagdev.bat |
OpenDiablo2
Join us on Discord!
Development Live stream
Support us on Patreon
We are also working on a toolset:
https://github.com/OpenDiablo2/HellSpawner
Please consider helping out with this project as well!
About this project
OpenDiablo2 is an ARPG game engine in the same vein of the 2000's games, and supports playing Diablo 2. The engine is written in golang and is cross platform. However, please note that this project does not ship with the assets or content required to play Diablo 2. You must have a legally purchased copy of Diablo 2 and its expansion Lord of Destruction installed on your computer in order to run that game on this engine. If you have an original copy of the disks, those files should work fine as well.
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.
Please note that this game is neither developed by, nor endorsed by Blizzard or its parent company Activision.
Diablo 2 and its content is ©2000 Blizzard Entertainment, Inc. All rights reserved. Diablo and Blizzard Entertainment are trademarks or registered trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries.
ALL OTHER TRADEMARKS ARE THE PROPERTY OF THEIR RESPECTIVE OWNERS.
Building
To pull the project down, run go get github.com/OpenDiablo2/OpenDiablo2
On windows this folder will most likely be in C:\users\(you)\go\src\github.com\OpenDiablo2\OpenDiablo2
In the root folder, run go get -d
to pull down all dependencies.
To run the project, run go run .
from the root folder.
You can also open the root folder in VSCode. Make sure you have the ms-vscode.go
plugin installed.
Linux
There are several dependencies which need to be installed additionally.
To install them you can use ./build.sh
in the project root folder - this script takes care of the installation for you.
Contributing
The imports for this project utilize github.com/OpenDiablo2/OpenDiablo2
. This means that even if you clone the repo, changes will not be taken as it will
still pull from the main repo's files. In order to use your local version, add the following to go.mod
in the base folder:
replace github.com/OpenDiablo2/OpenDiablo2 => /your/forked/import/path
This will tell go to use your local path instead of the official repo. Be sure to exclude this change from your pull requests!
If you find something you'd like to fix thats obviously broken, create a branch, commit your code, and submit a pull request. If it's a new or missing feature you'd like to see, add an issue, and be descriptive!
If you'd like to help out and are not quite sure how, you can look through any open issues and tasks, or ask for tasks on our discord server.
VS Code Extensions
The following extensions are recommended for working with this project:
- ms-vscode.go
- defaltd.go-coverage-viewer
When you open the workspace for the first time, Visual Studio Code will automatically suggest these extensions for installation.
Alternatively you can get to it by going to settings Ctrl+,, expanding Extensions
and selecting Go configuration
,
then clicking on Edit in settings.json
. Just paste that section where appropriate.
Configuration
The engine is configured via the config.json
file. By default, the configuration assumes that you have installed Diablo 2 and the
expansion via the official Blizzard Diablo2 installers using the default file paths. If you are not on Windows, or have installed
the game in a different location, the base path may have to be adjusted.
Profiling
There are many profiler options to debug performance issues. These can be enabled by suppling the following command-line option and are saved in the pprof
directory:
go run . --profile=cpu
Available profilers:
cpu
mem
block
goroutine
trace
thread
mutex
You can export the profiler output with the following command:
go tool pprof --pdf ./OpenDiablo2 pprof/profiler.pprof > file.pdf
Ingame you can create a heap dump by pressing ~
and typing dumpheap
. A heap.pprof is written to the pprof
directory.
You may need to install Graphviz in order to convert the profiler output.
Roadmap
There is an in-progress project roadmap, which will be updated over time with new requirements.
Screenshots
Additional Credits
- Diablo2 Logo
- Jose Pardilla (th3-prophetman)
- DT1 File Specifications
- Paul SIRAMY (http://paul.siramy.free.fr/_divers/dt1_doc/)
- Other Specifications and general info
- Various users on Phrozen Keep