A mirror of the OpenDiablo2 project
Go to file
gucio321 6e7e7b9d3f
Ds1 refactor (#11)
* Refactoring d2ds1

* Adding setters/getters so that state management can be maintained
internally when the ds1 struct is altered
* Adding unit tests for DS1

* unit tests for ds1 (#4)

* ds1 refactor: added test fore some methods; put tests in right order

* ds1 refactor: unit tests for all methods

* ds1 refactor: fixed build errors

* ds1 refactor: lintfix

* ds1 refactor: fixed bug with SetWidth, SetHeight methods

* ds1 refactor: rename tile_record.go -> tile.go

* ds1 refactor: unit test for SetTiles

Co-authored-by: M. Sz <mszeptuch@protonmail.com>

* renamed some files in d2ds1

* d2ds1.FloorShadow is now private

* renamed another file

* DS1.Tile() now calls update if dirty

* Ds1 refactor: some test improvement (#5)

* ds1 refactor: floor_shadow.go: methods Encode, Decode an Hidden are methods of floorShadow

* ds1 refactor: test checks, if our methods sets all fields correctly

* ds1 refactor: minor bugfixes

* i don't remember what's this, but i commit it ;-)

* ds1 refactor: reverted some pushed by mistake things

Co-authored-by: M. Sz <mszeptuch@protonmail.com>

* Ds1 refactor: test bugs + descriptive errors + SetNumberOfWall/FloorLayers (#6)

* ds1 refactor:
- removed DS1.layerStreamTypes field
- written unit test for setupStreamLayerTypes method
- added more descriptive error messages for LoadDS1 (and submethods)

* ds1 refactor: added some missing error messages

* ds1 refactor: fixed test bugs

* ds1 refactor: removed unnecessary c1. and c2. comments in ds1_test errors

* ds1 refactor: removed fmt from ds1_test

* ds1 refactor: fixed bug with SetTiles test + lintfix

* ds1 refactor: SetNumberOfWalls

* ds1 refactor: SetTile(s) now changes walls/floors length if neccesary

* ds1 refactor: removed unnecessary debugging fmt

* ds1 refactor: added substitution layer and object with paths to example data

Co-authored-by: M. Sz <mszeptuch@protonmail.com>

* Ds1 refactor: removed npcIndexes field+fixed SetNumberOfWalls bug (#7)

* ds1 refactor: removed npcIndexes field
it was unnecessary, because described a number of objects with paths to use in encoder, but we can calculate manually

* ds1 refactor: fixed set number of (layers) bug

* ds1 refactor: SetNumberOf...Layers now returns error if incorrect number given

* ds1 refactor: lintfix

* ds1 refactor: rename: setupStreamLayerTypes -> GetStreamLayerTypes

Co-authored-by: M. Sz <mszeptuch@protonmail.com>

* WIP

* Ds1 refactor - tests (#10)

* ds1 refactor test: example data

* added loader check

* ds1 refactor: fixed bug, with loading substitutions; added descriptive error message in engine.go:118 and changed Logger.Error with Logger.Fatal

* ds1 refactor: fixed loading bug

* ds1 refactor: fixed bug when walls wasn't rendered (now we can see only walls :-)

Co-authored-by: M. Sz <mszeptuch@protonmail.com>

* ds1: floor rendering bugfix

* ds1: implemented encode layers method

* ds1: implemented encoder

* ds1: update of ds1_test

Co-authored-by: gravestench <dknuth0101@gmail.com>
Co-authored-by: M. Sz <mszeptuch@protonmail.com>
2021-03-24 10:28:02 -07:00
.circleci circleci: upgrade go 1.15.8 -> 1.16 2021-03-02 09:55:51 +01:00
.github Auto Author Assign 2021-03-24 14:10:17 +01:00
.vscode Switch to fork of coverage tool (#446) 2020-06-24 20:40:12 -04:00
d2app Initialise config.path in case of MPQ error 2021-03-24 03:58:49 +01:00
d2common Ds1 refactor (#11) 2021-03-24 10:28:02 -07:00
d2core Ds1 refactor - tests (#10) 2021-03-24 10:10:36 -07:00
d2game No forward slashes in filepath.Join to satisfy golangci-lint 2021-03-23 23:30:00 -04:00
d2networking Networking bugfixes and cleanup 2020-12-28 13:33:17 -08:00
d2script lint fixes (#615) 2020-07-23 12:56:50 -04:00
d2thread fixed lint errors 2021-01-11 01:31:57 -08:00
docs status and screens update 2020-12-16 11:47:33 +01:00
scripts Added multiplayer support (#336) 2020-06-18 14:11:04 -04:00
utils/extract-mpq Refactoring d2ds1 2021-03-24 10:10:36 -07:00
.editorconfig Changes necessary for migration to org account (#67) 2019-11-02 17:38:39 -04:00
.gitignore Fix background music crash issue. (#880) 2020-10-28 22:34:47 -04:00
.golangci.yml Linter (#427) 2020-06-23 22:15:31 -04:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2018-11-22 10:54:08 -05:00
CONTRIBUTORS Misc(CONTRIB): Adds Ganitzsh as a contributor (#896) 2020-11-02 01:13:46 -08:00
LICENSE Create LICENSE 2019-10-25 18:47:19 -04:00
README.md readme: march 2020 -> march 2021 2021-03-07 14:15:45 +01:00
build.sh build.sh: upgrade go 1.13.4 => 1.16 2021-03-02 14:17:00 +01:00
d2discord.png Fixed walking animations and pathing bugs. (#345) 2020-06-20 00:40:49 -04:00
d2logo.ico More build updates. Added build info to game. 2019-11-02 16:15:16 -04:00
d2logo.png Fixed walking animations and pathing bugs. (#345) 2020-06-20 00:40:49 -04:00
et WIP 2021-03-24 10:10:36 -07:00
go.mod Revert "go.mod: dependencies upgrade" 2021-02-26 15:00:56 +01:00
go.sum Revert "go.mod: dependencies upgrade" 2021-02-26 15:00:56 +01:00
main.go Replaced kingping with flag package 2020-12-17 21:26:05 +01:00
rh.exe Final modification for builds 2019-11-02 16:25:24 -04:00
tagdev.bat CI release updates 2019-11-02 13:41:03 -04:00

README.md

OpenDiablo2

CircleCI

Logo

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.

Status

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.

Feel free to contribute!

Building

To pull the project down, run go get github.com/OpenDiablo2/OpenDiablo2

On windows this folder will most likely be in %USERPROFILE%\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

If you find something you'd like to fix that's 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.

As of Oct. 26, 2020 we will no longer be accepting pull requests that introduce lint errors.

We use golangci-lint to catch lint errors, and we require all contributors to install and use it. Installation instructions can be found here.

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 Diablo 2 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.

Debugging

Layouts

Layouts can show their boundaries and other visual debugging information when they render. Set layoutDebug to true in d2core/d2gui/layout.go to enable this behavior.

Example layout in debug mode

Roadmap

There is an in-progress project roadmap, which will be updated over time with new requirements.

Screenshots

Main Menu

Select Hero

Select Hero

Gameplay

Inventory Window

Game Panels

Additional Credits