2019-01-06 03:43:55 +00:00
|
|
|
# Lazarus #
|
|
|
|
|
|
|
|
The Lazarus project aims to preserve [Diablo II](https://en.wikipedia.org/wiki/Diablo_II) by reimplementing the game
|
|
|
|
engine in the Go programming language. Lazarus is a drop-in replacement for the original game executable; the user is
|
|
|
|
responsible for supplying the game assets (namely the MPQ files) from the official game media.
|
|
|
|
|
|
|
|
![](https://foosoft.net/projects/lazarus/img/viewer.png)
|
|
|
|
|
|
|
|
## Building ##
|
|
|
|
|
|
|
|
It is not currently possible to use `go get` to install all of the packages in the project in one step; some assembly is
|
|
|
|
required. Follow the instructions below to set up a build environment from a fresh install of your 64-bit operating
|
|
|
|
system of choice.
|
|
|
|
|
|
|
|
### Linux ###
|
|
|
|
|
|
|
|
Lazarus is primarily being developed on Fedora, but the required package names are also provided for Ubuntu.
|
|
|
|
|
|
|
|
1. Install the required packages (for [Fedora](https://getfedora.org/) users):
|
|
|
|
```
|
|
|
|
# sudo dnf install golang gcc-c++ cmake make git SDL2-devel mesa-libGL-devel zlib-devel bzip2-devel
|
|
|
|
```
|
|
|
|
Install the required packages (for [Ubuntu](https://www.ubuntu.com/) users):
|
|
|
|
```
|
|
|
|
# sudo apt-get install golang g++ cmake make git libsdl2-dev libgl1-mesa-dev zlib1g-dev libbz2-dev
|
|
|
|
```
|
|
|
|
2. Build the [Dear ImGui](https://github.com/ocornut/imgui) wrapper package:
|
|
|
|
```
|
|
|
|
$ go get github.com/FooSoft/lazarus/platform/imgui
|
|
|
|
```
|
|
|
|
Go will fetch the code, but Cgo will fail to link the [cimgui](https://github.com/cimgui/cimgui) wrapper;
|
|
|
|
we need to configure and build it:
|
|
|
|
```
|
|
|
|
$ cd $GOPATH/src/github.com/FooSoft/lazarus/platform/imgui/cimgui
|
|
|
|
$ cmake -DIMGUI_STATIC="yes" .
|
|
|
|
$ make
|
|
|
|
```
|
|
|
|
You should now have a `cimgui.a` statically linked library in the `cimgui` directory.
|
|
|
|
3. Build the [StormLib](http://zezula.net/en/mpq/stormlib.html) wrapper package:
|
|
|
|
```
|
|
|
|
$ go get github.com/FooSoft/lazarus/formats/mpq
|
|
|
|
```
|
|
|
|
Go will fetch the code, but Cgo will fail to link the StormLib wrapper;
|
|
|
|
we need to configure and build it:
|
|
|
|
```
|
|
|
|
$ cd $GOPATH/src/github.com/FooSoft/lazarus/formats/mpq/stormlib
|
|
|
|
$ cmake .
|
|
|
|
$ make
|
|
|
|
```
|
|
|
|
You should now have a `libstorm.a` statically linked library in the `stormlib` directory.
|
|
|
|
|
|
|
|
### Windows ###
|
|
|
|
|
|
|
|
Lazarus is only tested on Windows 10, but should in theory run on anything newer than Windows XP.
|
|
|
|
|
|
|
|
1. Download the latest 64-bit MSI installer for Go from the [official homepage](https://golang.org/dl/); install to the default directory.
|
|
|
|
2. Download and the latest 64-bit EXE installer for MSYS2 from the [official homepage](https://www.msys2.org/); install to the default directory.
|
2019-01-06 04:38:59 +00:00
|
|
|
3. Install the required packages (using the MSYS MinGW terminal):
|
2019-01-06 03:43:55 +00:00
|
|
|
```
|
|
|
|
$ pacman -S mingw-w64-x86_64-gcc cmake make git mingw-w64-x86_64-SDL2 zlib-devel libbz2-devel
|
|
|
|
```
|
|
|
|
4. Add `C:\msys64\usr\bin` and `C:\msys64\mingw64\bin` to your system's `PATH` environment variable.
|
2019-01-06 04:38:59 +00:00
|
|
|
5. Build the [Dear ImGui](https://github.com/ocornut/imgui) wrapper package (using the system command prompt):
|
2019-01-06 03:43:55 +00:00
|
|
|
```
|
|
|
|
$ go get github.com/FooSoft/lazarus/platform/imgui
|
|
|
|
```
|
|
|
|
Go will fetch the code, but Cgo will fail to link the [cimgui](https://github.com/cimgui/cimgui) wrapper;
|
|
|
|
we need to configure and build it:
|
|
|
|
```
|
|
|
|
$ cd %GOPATH%/src/github.com/FooSoft/lazarus/platform/imgui/cimgui
|
|
|
|
$ cmake -DIMGUI_STATIC="yes" .
|
|
|
|
$ make
|
|
|
|
```
|
|
|
|
You should now have a `cimgui.a` statically linked library in the `cimgui` directory.
|
2019-01-06 04:38:59 +00:00
|
|
|
6. Build the [StormLib](http://zezula.net/en/mpq/stormlib.html) wrapper package (using the system command prompt):
|
2019-01-06 03:43:55 +00:00
|
|
|
```
|
|
|
|
$ go get github.com/FooSoft/lazarus/formats/mpq
|
|
|
|
```
|
|
|
|
Go will fetch the code, but Cgo will fail to link the StormLib wrapper;
|
|
|
|
we need to configure and build it:
|
|
|
|
```
|
|
|
|
$ cd %GOPATH%/src/github.com/FooSoft/lazarus/formats/mpq/stormlib
|
|
|
|
$ cmake .
|
|
|
|
$ make
|
|
|
|
```
|
|
|
|
You should now have a `libstorm.a` statically linked library in the `stormlib` directory.
|
|
|
|
|
2019-01-06 04:34:05 +00:00
|
|
|
## Tools ##
|
|
|
|
|
|
|
|
This project includes several tools which are used to demonstrate the capabilities of the engine as well as manipulate
|
|
|
|
game data for debugging purposes. Make sure to perform the setup steps outlined in the "Building" section before
|
|
|
|
installing these packages.
|
|
|
|
|
|
|
|
### `dc6` ###
|
|
|
|
|
|
|
|
Converts the frames of one or more DC6 animations to PNG files, using the provided palette file.
|
|
|
|
|
|
|
|
* Installation:
|
|
|
|
```
|
|
|
|
$ go get github.com/FooSoft/lazarus/tools/dc6
|
|
|
|
```
|
|
|
|
* Usage:
|
|
|
|
```
|
|
|
|
Usage: dc6 [options] palette_file [dc6_files]
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
-target string
|
|
|
|
target directory (default ".")
|
|
|
|
```
|
|
|
|
|
|
|
|
### `mpq` ###
|
|
|
|
|
|
|
|
Extracts the contents of one or more MPQ archives to a target directory, using an optional filter.
|
|
|
|
|
|
|
|
* Installation:
|
|
|
|
```
|
|
|
|
$ go get github.com/FooSoft/lazarus/tools/mpq
|
|
|
|
```
|
|
|
|
* Usage:
|
|
|
|
```
|
|
|
|
Usage: mpq [options] command [files]
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
-filter string
|
|
|
|
wildcard file filter (default "**")
|
|
|
|
-target string
|
|
|
|
target directory (default ".")
|
|
|
|
```
|
|
|
|
|
|
|
|
### `viewer` ###
|
|
|
|
|
|
|
|
Displays the frames of DC6 animation files, using the provided palette file. A grayscale fallback palette is used if no
|
|
|
|
palette is provided on the command line.
|
|
|
|
|
|
|
|
* Installation:
|
|
|
|
```
|
|
|
|
$ go get github.com/FooSoft/lazarus/tools/viewer
|
|
|
|
```
|
|
|
|
* Usage:
|
|
|
|
```
|
|
|
|
Usage: viewer [options] file
|
|
|
|
Parameters:
|
|
|
|
|
|
|
|
-palette string
|
|
|
|
path to palette file
|
|
|
|
```
|
|
|
|
|
2019-01-06 03:43:55 +00:00
|
|
|
## License ##
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
|
|
this software and associated documentation files (the "Software"), to deal in
|
|
|
|
the Software without restriction, including without limitation the rights to
|
|
|
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
|
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
|
|
subject to the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
|
|
copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
|
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
|
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
|
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
|
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|