249 Commits
Author SHA1 Message Date
Developer Guilliman a461a18275 Golem monster portrait (#8729)
Added option to show summoned monster (Golem) party portrait
Fixed crash when loading .trn files for monsters with missing animations
(Golem is missing standing animation)
2026-10-10 19:20:43 +01:00
ajakilas a45c53bd59 Add Tatar translation 2026-10-08 20:29:18 +01:00
Gleb MazovetskiyandClaude Fable 5 ac2d7fc731 Replace libfmt with std::format
- `fmt::format` with literal format strings -> `std::format`.
- `fmt::format(fmt::runtime(...))` -> `FormatRuntime` in the new
  `utils/format.hpp`, a std::vformat wrapper that is also safe under the
  P2905 lvalue requirement of `std::make_format_args`.
- `fmt::dynamic_format_arg_store` (Lua logging) -> a small hand-rolled
  per-field formatter over `std::variant`, returning `std::expected`.
- `fmt::format_int` -> `std::to_chars`.
- `fmt::join` -> manual joins at the two call sites.
- SDL_audiolib: new patch that rewrites aulib_log.h to use std::format
  and drops the fmt dependency from its CMakeLists.
- The `-static-libstdc++` guard now keys off
  `DEVILUTIONX_STATIC_SDL_AUDIOLIB` instead of `DEVILUTIONX_STATIC_LIBFMT`.
- libfmt removed from CMake, vcpkg, Brewfile, CI workflows,
  Dockerfiles, packaging scripts, UWP project, and docs.
- macOS bumped to 13.3+, iOS to 16.3+ (required for `<format>`)
- Amiga m68k: provide `__cmpdf2`, which is missing from the hard-float
  libgcc multilib but referenced via libstdc++'s long double paths.

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-22 00:00:04 +02:00
Gleb MazovetskiyandClaude Fable 5 63e85d9b1b Replace tl::expected with std::expected
Now that the project targets C++23, use the standard library's
std::expected instead of the vendored tl::expected polyfill:

- tl::expected -> std::expected, tl::unexpected/tl::make_unexpected -> std::unexpected
- .map()/.map_error() -> .transform()/.transform_error()
- #include <expected.hpp> -> #include <expected>, grouped with std headers
- Remove 3rdParty/tl/expected.hpp (the tl target remains for function_ref.hpp)

Co-Authored-By: Claude Fable 5 <[email protected]>
2026-07-22 00:00:04 +02:00
Gleb Mazovetskiy f79af12eae Unify store UI options
Unifies "Show Item Graphics" and "Visual Store" boolean options
into a single enum.

Also moves floating info box option next to the store UI option
as they are somewhat related.
2026-07-16 07:56:04 +01:00
Anders Jenbo 1bf1b9886a Mod hashing and manifest (#8608) 2026-07-12 07:37:22 -04:00
Gleb Mazovetskiy 6ce6551cc4 Support Android Termux
Our CMake assumed that `ANDROID` meant we're compiling for Android from
a non-Android machine.

However, these days it's entirely possible to use an Android device as a
Linux machine (e.g. via Termux).
2026-06-29 17:00:01 +01:00
Gleb MazovetskiyandStephen C. Wills 61c69ebfbb Add Utf8CodePoints biderectional iterator
Co-authored-by: Stephen C. Wills <[email protected]>
2026-06-09 14:00:49 +01:00
BLooperZ 08d7a29ea2 Add hebrew language option 2026-05-24 15:53:47 +09:00
Chris V. 04689419a8 Improve Emscripten build (#8312) 2026-05-21 05:39:30 +02:00
Scott RichmondandYuri Pourre 0ecc3edaed [QOL] The buy and sell functionality of NPC stores is now visually driven to align with the stash and Diablo 2 style of trading (#8434)
- Add repair buttons (including “Repair All”) with proper alignment, tooltips, and cursor hit areas
- Improve controller support:
- Fix grid snapping and cursor positioning across panels
- Allow pressing/releasing UI buttons
- Fix item selling and movement between panels (inventory, belt, store)
- Prevent invalid interactions:
- Disable tab/repair navigation while holding items
- Hide unavailable options for non-Smith vendors
- Fix UI issues:
- Item misalignment and snapping
- Floating gold cost display
- Level-up button overlapping store panel
- Fix vendor-specific issues:
- Correct tooltip for non-Smith vendors
- Clean up Adria dialog options
- Fix stability issues:
- Resolve segfault when selling items
- Refactor and cleanup:
- Unify store sell logic
- Remove unused and stale code
- Improve IsPlayerInStore() logic
- General bug fixes and UI interaction improvements
---------

Co-authored-by: Yuri Pourre <[email protected]>
2026-03-29 15:23:43 +02:00
Yuri Pourre d07a410639 First step to migrate accessibility features 2026-02-10 10:56:22 +01:00
Yuri Pourre b684fd143c Adria refill mana as mod 2026-01-12 11:46:11 +00:00
Trihedraf 32a0666201 move floating damage nums to lua mod & add xp mod 2026-01-11 12:21:27 +01:00
Shakher-makher 2b3fa84c38 Belarusian translation (#8381) 2025-12-27 00:10:33 +01:00
FinnishPottu df325f6366 Add Finnish translation 2025-11-22 21:53:13 +00:00
Gleb Mazovetskiy 20ad675558 SDL3: Build with sound
This doesn't implement full sound support but stubs out most of the
sound code under SDL3, so that we can implement it piecemeal.

Implemented here:
1. Sound device initialization.
2. SVid sound playback.

Does not add a dependency on `SDL_mixer`: SDL3 built-ins
are enough to play SVid audio.
2025-10-18 17:21:58 +01:00
Gleb Mazovetskiy 88f706e0d1 SDL3: Add some backports / compat helpers 2025-10-10 00:49:44 +01:00
Gleb Mazovetskiy 8f6e9810d0 SDL3: Make text_render_integration_test build
Adds support for just enough SDL3 to make `text_render_integration_test`
work.
2025-10-05 20:17:47 +01:00
Anders Jenbo 01507d532c Add basic DOS port (#8155) 2025-08-31 17:34:11 +02:00
Anders Jenbo 1c76897f2c Apply simple const rules using clang-tidy 2025-08-16 01:21:36 +02:00
Anders Jenbo 6a4c5e42ec Clean up const and shadow variables 2025-08-15 04:42:15 +02:00
Andrettin 07c89a08eb Made the unpacked mod init.lua path in DiscoverMods() be the same as the path used for actual mod loading 2025-08-12 21:32:38 +02:00
Doink Oink c62a19e299 Party Information Panel (#7877) 2025-08-10 03:23:57 +02:00
Eric Robinson e303a82b1c Floating Item Info Box (#8000) 2025-08-10 02:17:39 +02:00
Andrettin 222ad75b30 Added missing directory separator for unpacked mod initialization 2025-08-07 19:03:16 -04:00
Gleb Mazovetskiy b890edfd56 Support mods with UNPACKED_MPQS 2025-05-18 22:37:09 +01:00
Anders Jenbo 3fb8be385b Add support for MPQ packed mods and turn Hellfire into one 2025-04-21 00:01:25 +02:00
071303357e Dynamic mod detection
Co-authored-by: Anders Jenbo <[email protected]>
Co-authored-by: Stephen C. Wills <[email protected]>
2025-03-31 07:19:24 +02:00
Eric Robinson 5cee9dd06a Cap Resampling Quality 2025-03-09 11:02:31 +01:00
staphen 7d89c45944 Turn off per-pixel lighting by default on low power systems 2025-03-08 18:26:43 +01:00
Stephen C. Wills 0b4f3b4732 Introduce subtile lighting into the software renderer (#7807) 2025-03-04 09:29:53 -05:00
staphen 9d8990a97e Use vanilla default brightness as default for brightness setting 2025-02-08 16:40:12 +00:00
Eric Robinson 13a5ae4b0b Replace Gamma Adjustment with Brightness Adjustment 2025-02-07 22:20:26 +01:00
Gleb Mazovetskiy bae54d05e3 Options: Move resolutions list init to display.cpp 2025-01-23 21:04:02 +00:00
Gleb Mazovetskiy 3bb1d685af Extract current input mode into its own library
Removes a transitive dependency on the entire plrctrl from options.
2025-01-22 23:14:45 +00:00
Gleb Mazovetskiy acc335be17 Options: Extract keymapper handling from options 2025-01-22 23:14:45 +00:00
Gleb Mazovetskiy 7afdbe8fdc Options: Extract padmapper handling from options
Options now only contain the padmapper settings, not the padmapping
handling code.
2025-01-22 23:14:45 +00:00
Gleb Mazovetskiy 4113805237 Options: Remove dependency on gbRunGame 2025-01-22 23:14:45 +00:00
Gleb Mazovetskiy 9492456dcd Options: Remove dependency on demomode 2025-01-22 23:14:45 +00:00
obligaron b169d91c48 Fix MSVC warnings (#7666)
* Fix MSVC x64 warnings

* Fix MSVC x86 warnings
2025-01-21 23:41:56 +01:00
staphen 8f232cfc89 Delete copy constructor in ModEntry 2025-01-13 23:12:07 +00:00
Gleb Mazovetskiy ccbf0fc9a2 Audio device settings: Fix name handling
1. The char pointer returned by SDL is only valid temporarily,
   keeping it around is not allowed so we copy the string.
2. Moves the trimming to DiabloUI. It now happens every frame
   but that's OK here (not performance-sensitive and there is
   little else happening on that screen).
2025-01-13 18:30:57 +00:00
Gleb Mazovetskiy 88a9a0656d Move option change handlers out of options.cpp
Fixes #7638
2025-01-13 11:57:25 +00:00
Gleb Mazovetskiy d94bc424df sgOptions -> GetOptions()
In C++, globals initialization order accross translation units is not
defined. Accessing a global via a function ensures that it is initialized.

This will be needed for #7638, which will statically initialize change
handlers after the Options object has been initialized.
2025-01-13 11:57:25 +00:00
Anders Jenbo 908fb47073 Merge limitFPS and vSync options (#7646) 2025-01-12 15:28:50 +01:00
Gleb Mazovetskiy bbcda12792 Move QuickMessages to its own library
Eliminates an options->diablo dependency.
2025-01-11 13:51:56 +00:00
Gleb Mazovetskiy 7668de36a4 Add a default clock mod
This mod renders a clock in the top-right corner
and is always available (disabled by default).

It is useful to have a mod available by default
as we work on mod support.
2025-01-10 10:51:47 +00:00
staphen 3b841b5800 Reload Lua mods when enabling/disabling 2025-01-10 01:20:20 +01:00
Gleb Mazovetskiy d7647d6c63 More dependency untangling
1. Moves more assets-related stuff from `init` to `engine/assets`.
2. Removes `SDL_audiolib` dependency from `soundsample.h`.
3. Cleans up some unused/missing includes.
2025-01-09 18:19:44 +00:00