Code Monkey home page Code Monkey logo

devilutionx's Introduction


Discord Channel Downloads Codecov

(The health-bar and XP-bar are off by default, but can be enabled in the game settings. Widescreen can also be disabled if preferred)

What is DevilutionX

DevilutionX is a port of Diablo and Hellfire that strives to make it simple to run the game while providing engine improvements, bugfixes, and some optional quality of life features.

Check out the manual for what features are available and how best to take advantage of them.

For a full list of changes see our changelog.

How to Install

Note: You'll need access to the data from the original game. If you don't have an original CD then you can buy Diablo from GoG.com. Alternately you can use spawn.mpq from the shareware [2] version, in place of DIABDAT.MPQ, to play the shareware portion of the game.

Download the latest DevilutionX release and extract the contents to a location of your choosing or build from source.

  • Copy DIABDAT.MPQ from the CD or GOG-installation (or extract it from the GoG installer) to the DevilutionX folder.
  • To run the Diablo: Hellfire expansion you will need to also copy hellfire.mpq, hfmonk.mpq, hfmusic.mpq, hfvoice.mpq.

For more detailed instructions: Installation Instructions.

Contributing

We are always looking for more people to help with coding, documentation, testing the latest builds, spreading the word, or simply just hanging out on the chat.

Mods

We hope to provide a good starting point for mods, in addition to the full Devilution source code we also provide modding tools. Also, check out the list of known mods based on DevilutionX.

Test builds

If you want to help test the latest development stage of the next version (make sure to backup your files as these may contain bugs), you can fetch the test build artifact from one of the build server:

Note: You must be logged into GitHub to download the attachments!

Linux x86_64 Linux AArch64 Linux x86 Linux x86_64 SDL1 macOS x86_64 Windows MSVC x64 Windows MinGW x64 Windows MinGW x86 Android iOS PS4 Original Xbox Xbox One/Series Nintendo Switch Sony PlayStation Vita Nintendo 3DS Amiga M68K

Building from Source

Want to compile the program by yourself? Great! Simply follow the build instructions.

Credits

  • The original Devilution project Devilution
  • Everyone who worked on Devilution/DevilutionX
  • Nikolay Popov for UI and graphics
  • WiAParker for the Polish voice pack
  • And thanks to all who support the project, report bugs, and help spread the word ❤️

Legal

DevilutionX is made publicly available and released under the Sustainable Use License (see LICENSE)

The source code in this repository is for non-commercial use only. If you use the source code you may not charge others for access to it or any derivative work thereof.

Diablo® - Copyright © 1996 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.

DevilutionX and any of its maintainers are in no way associated with or endorsed by Blizzard Entertainment®.

devilutionx's People

Contributors

ajenbo avatar aperturesecurity avatar bcko avatar bennyfranco avatar bubio avatar dakkjaniels avatar ephphatha avatar galaxyhaxz avatar glebm avatar isage avatar jmgr avatar julealgon avatar justanotherguid avatar k-bar avatar kphoenix137 avatar m0rf30 avatar mewmew avatar mmaret avatar nomdenom avatar nsm53project avatar obligaron avatar predelnik avatar qndel avatar seritools avatar squidcc avatar stephencwills avatar trihedraf avatar tsunamistate avatar vlolteanu avatar yuripourre avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

devilutionx's Issues

Any chance for a LUA framework?

Hello, are there any plans to add a LUA (or another language) framework to DevilutionX so that we can customize what is shown on the screen? This would allow us to create custom HUDs (somewhat similar to THUD in D3).

I think some work on it started here: https://github.com/szymski/devilution_lua
But I'm guessing it was dropped.

Monsters never finish there speach

On level 13 guarding the exit to level 14 is the "Warlord of Blood" monster with his friends, when I first encountered him, his dialog played but he didn't fight me. I couldn't attack him either, after killing all the other knight monsters I went back to town and after I returned to the level he attacked as expected.

Binary release

I see the parent project had a 0.5 release, will there be any binary releases of this project for the people who can't/won't compile?

insensible CASE

Hello,
is it possible to give devilutionX case insensitive. Like this it could recognize diabdat.mpq or diabdat.MPQ or DIABDAT.MPQ....

Less error for the user.

A place to hang out together

Is there a place like that where devs and users could converse?
Personally I'm all in favor of IRC and Tox :)

crashing when entering church

compiled the game,
got diabdat.mpg from gog release (using wine to install then copy over in devilutionX/build/).
stated the game, created a new warrior, talked to cain an the innkeeper, then i went toward the church, i saw the victim on the floor, talked to him, all was fine so far, i tried to enter the church aand.. crash. please see attached crashlog.txt

my environment is ubuntu 18.10, kernel 5.0.1

crashlog.txt

Use Liberation Seriff as replacemenent for Times New Roman in credits

I'm aware this project is all about staying true to the original, but would it be possible to tell the GNU/Linux executable to use Liberation Seriff as a fallback for Times New Roman on the game's credits section? Both fonts are nearly identical to each other, and it would prevent users on GNU/Linux having to install non-free fonts in order to just see the game's credits properly. Future GNU/Linux packages could even require the font as a dependency, for this purpose.

D-Bus not built with -rdynamic so unable to print a backtrace

If you get the following error it is likely a bug in your distribution's 32bit SDL package.

dbus[8661]: arguments to dbus_message_new_method_call() were incorrect, assertion "path != NULL" failed in file ../../../dbus/dbus-message.c line 1362.
This is normally a bug in some application using the D-Bus library.

  D-Bus not built with -rdynamic so unable to print a backtrace
Afbrudt (SIGABRT) (smed kerne)

The issue has been reported against Ubuntu here:
https://bugs.launchpad.net/ubuntu/+source/libsdl2/+bug/1775067

A workaround is to run the game like this:

DBUS_FATAL_WARNINGS=0 ./devilutionx

FreeBSD CI

No idea if this is going to succeed in the end (I'm not a programmer and completely new to the world of CI), but you never know if you don't give it a try, right? As mentioned on #51, I'm considering what would be needed to provide FreeBSD CI for DevolutionX.

Any help, comments or or suggestions would be very welcome. Let's see how far we'll get - the most sinister game ever made on a beast of an operating system should be an ideal combination! 😈

Here's a rough plan:

Phase 1

  • Do a bit of reading on the subject of Jenkins in general
  • Setup a FreeBSD VM with port-forwarding (to keep the main system clean)
  • Install Jenkins and get it started
  • Setup Nginx as a proxy and make Jenkins happy with the settings
  • Install all required packages, create build script, test it once by hand
  • Look into adding build jobs
  • Configure a simple job that clones the latest code from GH and builds DevilutionX
  • Document everything

Phase 2

  • Start over, redoing everything in a jail
  • Figure out which changes to make (if any) to make it work in a jailed environment
  • Research how additional build nods work
  • Create jails for all supported FreeBSD versions (each one for both tier 1 platforms), install all dependencies
  • Add newly created jails as additional build nodes
  • Consider security (firewall rules, permissions, jail settings, ...)
  • Document everything

Phase 3

  • Install fresh server
  • Deploy production configuration using configuration management tools (users + keys, log rotation, monitoring, ...)
  • Apply system hardening (via configuration management)
  • Create all required jails, install dependencies (via configuration management)
  • Setup Jenkins and Nginx proxy, add all build nodes (ideally mostly using configuration management)
  • Test everything

Phase 4

  • Setup dedicated server
  • Deploy everything via configuration management with as little manual actions as possible
  • Test again
  • Invite Devilution Devs
  • Bonus: Figure out how to hook the CI system into DevilutionX so that an automated build happens when changes are pushed to the Git repo (?)

Make error : undefined reference to symbol 'SDL_RenderIsClipEnabled'

When running make with Debian/Sid, I get the following error :

[ 50%] Linking CXX executable devilution
/usr/bin/ld: CMakeFiles/devilution.dir/Stub/SDL_FontCache.cpp.o: undefined reference to symbol 'SDL_RenderIsClipEnabled'
/usr/bin/ld: //usr/lib/i386-linux-gnu/libSDL2-2.0.so.0: error adding symbols: DSO manquant dans la ligne de commande
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/devilution.dir/build.make:1434: devilution] Error 1
make[1]: *** [CMakeFiles/Makefile2:110: CMakeFiles/devilution.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

Diablo Hellfire support

Current known issues.

  • Barrels and other objects are missing from the hive and crypt.
  • Na-Krul doesn't spawn.
  • Store menus aren't correct
  • Some instability
  • Town doesn't update when opening crypt and hive
  • Runes have no effect
  • Corner Stone of The World doesn't work
  • Not compatible with Hellfire save games
  • The support screen is missing.
  • Clicking ESC goes to the support screen instead of Quit Hellfire
  • Description for Loopback is that of UDP
  • Griswold will buy random belt items.
  • Items morph (multiplayer, new single-player, slain hero issues are all caused by this) #981
  • Multiplayer hero save/load (currently only Diablo saves are supported for multiplayer)

Fix Travis configuration

Currently our CI builds fails because the config is unchanged from upstream. We should make sure to configure it for building via CMake so that it tests our actual build process. This should be done for both linux32 and 64bit builds, and updated with any other platforms that we start supporting.

Error messages not implemented in main UI

Errors like when a game was not detected at the target ip should be shown as an in UI error message. Currently they are instead displayed as a popup.

Most critically this allows you to overwrite an existing hero of the same name.

Hashes of valid diabdat.mpq

According to this reply by @AJenbo there is more than one valid diabdat.mpq. Is there a list of versions/hashes available anywhere?

This is the one I have in my 1.00 cd:

Name: DIABDAT.MPQ
Size: 517501242 bytes (493 MB)
CRC32: 855951D6
CRC64: 91EB406CA29379C7
MD5: 68F049866B44688A7AF65BA766BEF75A
SHA256: 6BC120A603FDB383FF91F374E7DB599765D6230D81E5A4C1B33F8254911774E7
SHA1: FE35CBA676A0A194CCDF1D4357DE49DFF252FA40
BLAKE2sp: 86F1016C2BFBAE621EFA9F7789537154DCC20BC66238519CC883D0F6E816E40F

prealpha.mpq

Anybody knows where to get the prealpha.mpq?

./devilution
DUMMY: ShowCursor : 0
DUMMY: FindWindowA : class: DIABLO window: (null)
DUMMY: CreateEventA : DiabloEvent
SND INIT

TermMsg: Required file prealpha.mpq not found

MAKE issue. SDL_image.h missing

When I try building the "fork" with make I get the following error:

$ make
i686-w64-mingw32-g++ -fpermissive -Wno-write-strings -MMD -MF Source/mainmenu.d  -c -o Source/mainmenu.o Source/mainmenu.cpp
In file included from Source/mainmenu.cpp:3:0:
Source/../types.h:20:23: fatal error: SDL_image.h: No such file or directory
 #include "SDL_image.h"
                       ^
compilation terminated.
<builtin>: recipe for target 'Source/mainmenu.o' failed
make: *** [Source/mainmenu.o] Error 1

Attacking unique Blink doesn't teleport its light

The save is at a room with blinks and the unique one like all unique monsters has a light aura around it. Attacking the monster from a distance will teleport it right next to the player, but the light will remain at the place the monster teleported from.

If the monster moves on its own, the light will correct itself and move to wherever the monster is again.

blink.zip

Translation support

Hi,

Have see patch in FR for diablo but on linux with devilutionx how to make that ?

Best Regards

CMake 3.12 really necessary?

I wanted to compile this project on Gentoo Linux and got a message saying my stable CMake is too old :)

CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.12 or higher is required.  You are running version 3.9.6

Further investigation shows CMake versions across various distributions considered stable.

System  Version   CMake
Gentoo  2.2       3.9.6
Ubuntu  18.04.2   3.10.2
Debian  9.8.0     3.7.2
FreeBSD 12.0      3.13.4

Fedora and Arch were not taken into account due to them being cutting-edge distros that are expected to have latest packages.
CentOS was not taken into account because it's antiquated and a new release is coming soon.

Bottom line - is such a version of CMake really necessary?
After reducing the minimum version to 3.7, I only got this error:

CMake Error at CMakeLists.txt:196 (target_link_libraries):
  Object library target "devilution" may not link to anything.


-- Configuring incomplete, errors occurred!

When in fact, that's not really correct. The offending line says

target_link_libraries(devilution PUBLIC Threads::Threads)

Any ideas?

Lightning sounds echo oddly

I found this particularly noticeable in the caves, but when casting lightning spells, the sound effect seems to echo inconsistently, sometimes sounding jittery.

Game runs out of memory

memory
I played the game for 6 hours straight (got down to the 2nd level of caves) and the game ran out of memory. I attached the error message.

misc.cpp - CreateFileMappingA

Hi!

After compiling experimental 64bit version i get the following when running devilutionx binary. Known problem or something i do wrong?

DUMMY: CreateFileMappingA @ /devilutionX-master/SourceX/miniwin/misc.cpp:588
devilutionx: /devilutionX-master/SourceX/miniwin/misc.cpp:589: void* dvl::CreateFileMappingA(dvl::HANDLE, dvl::LPSECURITY_ATTRIBUTES, dvl::DWORD, dvl::DWORD, dvl::DWORD, dvl::LPCSTR): Assertion `hFile == (HANDLE)-1' failed.
Aborted

[Arch Linux] CMake Error at CMake/SDL2_fixed.cmake:1 (find_package)

[tim@laptop build]$ cmake ../
-- Using 32-bit toolchain
-- Using 32-bit libraries from /usr/lib32
-- The C compiler identification is GNU 8.2.1
-- The CXX compiler identification is GNU 8.2.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMake/SDL2_fixed.cmake:1 (find_package):
  Could not find a configuration file for package "SDL2" that is compatible
  with requested version "".

  The following configuration files were considered but not accepted:

    /usr/lib/cmake/SDL2/SDL2Config.cmake, version: 2.0.9 (64bit)
    /lib/cmake/SDL2/SDL2Config.cmake, version: 2.0.9 (64bit)

Call Stack (most recent call first):
  CMakeLists.txt:155 (include)


-- Configuring incomplete, errors occurred!
See also "/home/tim/dev/devilutionX/build/CMakeFiles/CMakeOutput.log".
[tim@laptop build]$ 

I have both sdl and sdl2 installed(both packages contain the headers)

[tim@laptop build]$ pacman -Qi sdl
Name            : sdl
Version         : 1.2.15-9
Description     : A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard
Architecture    : x86_64
URL             : https://www.libsdl.org
Licenses        : LGPL
Groups          : None
Provides        : None
Depends On      : glibc  libxext  libxrender  libx11
Optional Deps   : alsa-lib: ALSA audio driver [installed]
                  libpulse: PulseAudio audio driver [installed]
Required By     : mjpegtools  sdl_image
Optional For    : libde265  libmpeg2  mpg123
Conflicts With  : None
Replaces        : None
Installed Size  : 1037,00 KiB
Packager        : Jan Alexander Steffens (heftig) <[email protected]>
Build Date      : di 11 jul 2017 22:45:42 CEST
Install Date    : wo 05 sep 2018 12:29:58 CEST
Install Reason  : Installed as a dependency for another package
Install Script  : No
Validated By    : Signature

[tim@laptop build]$ pacman -Qi sdl2
Name            : sdl2
Version         : 2.0.9-1
Description     : A library for portable low-level access to a video framebuffer, audio output, mouse, and keyboard (Version 2)
Architecture    : x86_64
URL             : https://www.libsdl.org
Licenses        : MIT
Groups          : None
Provides        : None
Depends On      : glibc  libxext  libxrender  libx11  libgl  libxcursor  libibus
Optional Deps   : alsa-lib: ALSA audio driver [installed]
                  libpulse: PulseAudio audio driver [installed]
                  jack: JACK audio driver [installed]
Required By     : ffmpeg  sdl2_image
Optional For    : None
Conflicts With  : None
Replaces        : None
Installed Size  : 2,89 MiB
Packager        : Sven-Hendrik Haase <[email protected]>
Build Date      : do 01 nov 2018 18:10:09 CET
Install Date    : do 08 nov 2018 14:53:13 CET
Install Reason  : Installed as a dependency for another package
Install Script  : No
Validated By    : Signature

[tim@laptop build]$ 

Screen shots are saved to the wrong path

Screenshots are always saved as screen00.PCX relative to the executable, this should instead detect previous screen shots up to 99 and then wrap around. The save path should also be changed to the one given by SDL

cannot build 32bit version

i did build a 64bit version, the game started but crashed upon trying to enter the church.
i was told to build the 32bit version instead, but the 32bit version doesn't seem to be able to compile properly, please see attached log.
crashlog2.txt

Big endian

Hi

I wanted to ask if it has been tested/is it running on big endian systems?
I was able to recompile the project on big endian system, after starting it up it loads all the files, opens main window, music starts to play and then it crashed in memory exception.
I found that is looping endlessly in CelDrawDatOnly() method in engine.cpp until it finally ends on line 36:

v7 = (unsigned char)*v4++;

I'm trying to understand what is going on here and how it should work here, but I'm unable to get it working. Stormlib is prepared for big endian and it seems to working fine but it seems to bes something wrong in the CelDrawDatOnly() function
Is any of the developers willing to help with that? I can provide more info if needed.
Thanks

Compile error

When compiling devilutionX i get the following "undefined reference to" messages and then it fails the compilation.

[ 52%] Linking CXX executable devil-sanitize
CMakeFiles/devil-sanitize.dir/Stub/sound.cpp.o: In function snd_init(void*)': sound.cpp:(.text+0x11c): undefined reference to Mix_AllocateChannels'
sound.cpp:(.text+0x186): undefined reference to Mix_OpenAudio' CMakeFiles/devil-sanitize.dir/Stub/sound.cpp.o: In function music_start(int)':
sound.cpp:(.text+0x6bf): undefined reference to Mix_LoadMUS_RW' sound.cpp:(.text+0x719): undefined reference to Mix_PlayMusic'
CMakeFiles/devil-sanitize.dir/Stub/sound.cpp.o: In function LoadAndPlaySound(char*, int, int)': sound.cpp:(.text+0xad9): undefined reference to Mix_LoadWAV_RW'
sound.cpp:(.text+0xb34): undefined reference to Mix_PlayChannelTimed' CMakeFiles/devil-sanitize.dir/Stub/sound.cpp.o: In function music_stop()':
sound.cpp:(.text+0xca1): undefined reference to Mix_HaltMusic' sound.cpp:(.text+0xcc9): undefined reference to Mix_HaltChannel'
CMakeFiles/devil-sanitize.dir/Stub/sound.cpp.o: In function snd_play_snd(TSnd*, int, int)': sound.cpp:(.text+0xdab): undefined reference to Mix_PlayChannelTimed'
CMakeFiles/devil-sanitize.dir/Stub/sound.cpp.o: In function snd_stop_snd(TSnd*)': sound.cpp:(.text+0xe0c): undefined reference to Mix_HaltMusic'
CMakeFiles/devil-sanitize.dir/Stub/sound.cpp.o: In function sound_file_load(char*)': sound.cpp:(.text+0x117a): undefined reference to Mix_LoadWAV_RW'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/devil-sanitize.dir/build.make:2463: devil-sanitize] Error 1
make[1]: *** [CMakeFiles/Makefile2:106: CMakeFiles/devil-sanitize.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

Split money crashes the game

Since itoa is unimplemented, right-clicking on a pile of money to split it crashes the game.

DUMMY: TranslateMessage : char: 5
DUMMY: PostMessageA @ /home/u/Desktop/devil/devilutionX/SourceX/miniwin_msg_sdl.cpp:287
UNIMPLEMENTED: _itoa @ /home/u/Desktop/devil/devilutionX/SourceX/miniwin.cpp:43
fish: “./devilutionx -x” terminated by signal SIGABRT (Abort)

Choosing graphical backend

@ApertureSecurity in diasurgical/devilution/issues/149 wrote:

What libraries are you wanting to use? I was thinking SDL2 could be a simple library to use.

FWIW, I googled for DirectDraw-to-SDL conversion after the question. This is what I found:
https://www.gamedev.net/forums/topic/287518-porting-a-game-from-directdraw-to-sdl/#comment-2808684
https://www.gamedev.net/forums/topic/280911-porting-directdraw-to-sdl/
https://discourse.libsdl.org/t/any-tips-on-porting-from-directdraw-to-sdl/9111/2
http://forum.pj64-emu.com/showthread.php?t=5283

I guess there are several approaches by going this route:

  • writing wrapper functions / methods;
  • conditionally defining a blocks of sensitive code (using #ifdef);
  • rewriting (reducing) the original code directly (in place);
  • adding some layers of abstracting to the DDraw API;
  • rewriting all the graphical code from scratch.

@galaxyhaxz replied:

I was thinking OpenGL would be the best route for graphics, and OpenAL for sound. We could probably use SDL for input.

@ApertureSecurity also added:

Ok. I have had this conversation before and every time it went from SDL -> SDL2 -> OGL -> GLFW -> Death....

I am leaning between OGL and SDL2 . I like the idea of SDL2 because we have work already done using this for Diablo. I looks decorated enough that it might make good for quick use and it's the only one of these that I have some little experience using SDL2.

I will look at OGL though and maybe it is the better of the few.

Regarding DirectDraw-to-OpenGL conversion. For some reason I can only think of a wrapper like wined3d, but it's X11 specific. Well, others exist, but all are Windows dependent:

So if the project is to follow approach other than rewriting everything, then maybe it would make sense to put effort into porting one of these Windows wrappers to other platforms.

Add MPQ-path to the config file

Hello,
with a config file we could:

  • precise where the diabdat.mpq is located instead of copy it in the devilutionX
  • what is the name of diabdat.mpq (could be another CASE or another name)

On linux the config file should be located in /home/your_profile/config/ folder.

Game crashes when opening inventory after picking up specific item(s)

While it is possible to open the inventory all the time I have the issue, breaking the game when opening the inventory after picking up a "Book of Holy Bold".
After that happened the first time, I started a new run and checked if I can open the inventory in the dungeons. While that was no problem it crashed directly after picking up that book and opening the inventory.

This issue occurred for me playing with a 32bit build on macOS Mojave.

64bit build issues

Issues left before we can mark 64bit builds as stable

  • Save games are not compatible with 32bit builds
  • Swapping items in belt corrupt them
  • Moving gold converts it to a broken full mana potion
  • Number of scrolls is off by -2

Game controller support

I believe playing Diablo using a game controller is a lot of fun!

SDL has decent support for game controllers. I managed to tweak the engine a bit to detect my Xbox One controller and handle some button presses, so the whole business looks quite promising.

However, it looks like introducing a good controller experience is a lot of work and I'd like to discuss the details in scope if this issue.

First, the event handling loop in the original code handles low-level IO events like mouse clicks and keypresses, not high-level actions like "move one step north-west" or "attack". So I guess one'll have to

  • (easy) add new message types like WM_MOVELEFT and WM_ATTACK and translate controller actions into these actions.
  • (tricky) write implementation for the new messages in diablo.cpp.

Second, I'm not really sure how to combine controller and mouse in a single UI. SDL uses Xbox 360 controller as a model, which has two sticks and a d-pad. I believe it makes sense to move the mouse using the right stick, and use the left stick to move the character around. Most of the actions though (opening doors/chests, attack, casting spells, opening map, etc.) should be possible to execute without ever moving the mouse.

Third, finding a good mapping from buttons to game actions is an important problem by itself. One can use original Playstation mapping for inspiration
original Playstation controller mapping
Diablo 3 runs on consoles so there is also a mapping, but I don't think it suits Diablo 1 well.
xbox controls

What do you think?

Stop Sound properly

@Chance4us

If you have time, do you think you can make the sound stop correctly? For some reason, the sound will not stop any more.

Contacting Brightlord of Beelzebub project

Since game enhancements are planned for a not-so-distant future, I think it would be a good idea to contact Brightlord, the author of the enhanced Beelzebub mod for Diablo. Many of the features present in the mod already cover many of the desired enhancements. Moreover, Brightlord was contacted in the past by Wheybags, the author of Freeablo, and agreed to privately share his sources for the sake of aiding his project. It would be possible he would agree to help you guys as well.

Sounds are at mixed volumes

Setting the sound level doesn't affect the people in town, they still talk with full volume.

Also a more curious issue, attacking monsters from afar makes their death sounds more quiet and ranged monsters attacking are completely silent.
muted_range.zip

The attached save is at a room full of goat archers.

Assets up-scaling (future request)

Please support modern resolutions and post processing filters for up-scaling. This will allow to presents game in modern, but maybe little cartoonish way. I made some samples with Waifu2x filter:
inventory-after
dungeon-after
diablo-after

Magic Mushroom

The quest goes as follows, you find a fungal tome item bring that back to Adria the witch. She tells you that Pepin wants to make some sort of potion and when you talk to Pepin he tells you he needs the brain of a demon. The first monster you kill after this should drop said brain, but for some reason it never did for me.

Related to this issue I think, is that when I talked to Pepin the healer after completing the Black mushroom part of the "Magic Mushroom" quest, the first monster I killed didn't drop the quest item "Monster Brain" so I wasn't able to return that to Pepin and complete the quest.

Originally posted by @predator8bit in #24 (comment)

Newgame breaks old character

Source Code Deleted has informed me that when he started a game that it killed his character .

I have tested this and can confirm that this is a bug.

Fireballs can crash the game

I saved just before a crash here, and the save loads nicely. The previous one only worked if I created a new game with the character and then loaded into the game.

Something fishy is going on with the firemage projectiles, the sound effect repeats when going through walls and in some cases they damage through walls ( I can't remember if this is vanilla behaviour or not).

crash2.zip

Originally posted by @predator8bit in #24 (comment)

Direct file access mode not working

After following diasurgical basically since it appeared on GH, I've finally found the time to setup a Linux box yesterday evening (Debian testing after finding that even Ubuntu 18.10 has a too old version of cmake in the repos). DevilutionX builds just fine. Thanks a lot to all the devs for the incredible work you're doing here!

But then I had a problem. I've owned 3 or 4 Diablo CDs (for multiplayer purposes) in the 90's, all of which I probably left at my parent's house so that they are unaccessible for me right now. However I've been a modder back then and found the extracted (and unaltered) assets from the MPQ file on an ancient backup drive.

Since 0.5.0 devilution's debug builds are meant to support "direct mode" to read files from the filesystem instad of the Mopaq file (see diasurgical/devilution#456). I'm not a programmer unfortunately and couldn't figure out where I'm supposed to put the assets so that devilutionx would read them. I've tried to put everything into the same dir as the executable, in a subdir called "diabdat", "diabdat.mpq" and so on without success.

Being a curious person, I just bought Diablo once more on GoG today and can confirm that devilution runs when it can use diabdat.mpq. As it has been implemented, I still wonder though how to use direct mode. Could anybody please shed some light on where to actually put the extracted files and how to start devilutionX to work with it? I'd volunteer to document this on the project wiki afterwards.

As a side note: A lot of games have simply used ZIP files (often with different file endings like .pk3 for Quake3) for their resource containers - either with or without compression. Since devilution aims for making life easier for modders (ah the good times!) such a feature would probably be much appreciated by a lot of people. Is support for something like this planned or do the devs already see a reason why this is not likely to be added in the future?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.