Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
135 commits
Select commit Hold shift + click to select a range
b082b69
Alpine compat
is-this-c Sep 23, 2025
13782a3
Update server.cpp
is-this-c Sep 23, 2025
7d7b2d5
Update CMakeLists.txt
is-this-c Sep 23, 2025
75958f1
Update CMakeLists.txt
is-this-c Sep 23, 2025
dad1b0d
Update network.cpp
is-this-c Sep 23, 2025
74a5272
Update network.cpp
is-this-c Sep 23, 2025
97e144c
Update gr.cpp
is-this-c Sep 24, 2025
08d827b
Update gr.cpp
is-this-c Sep 24, 2025
77896f3
Update save_restore.cpp
is-this-c Sep 24, 2025
8b64890
Update network.cpp
is-this-c Sep 24, 2025
3e1095b
Update weapon.cpp
is-this-c Sep 24, 2025
f301672
Update player.cpp
is-this-c Sep 24, 2025
66e3f0f
Update camera.cpp
is-this-c Sep 24, 2025
fe19cb1
Update GameConfig.h
is-this-c Sep 24, 2025
f8aedec
Update GameConfig.cpp
is-this-c Sep 24, 2025
dd43b7b
Update camera.cpp
is-this-c Sep 24, 2025
8b7523d
Update CHANGELOG.md
is-this-c Sep 24, 2025
460579c
Update README.md
is-this-c Sep 24, 2025
470b4fd
Update README.md
is-this-c Sep 24, 2025
4440cde
Update camera.cpp
is-this-c Sep 24, 2025
34eab5e
Update network.cpp
is-this-c Sep 25, 2025
307dd7e
Add files via upload
is-this-c Sep 25, 2025
3a036bb
Update CMakeLists.txt
is-this-c Sep 25, 2025
e735be7
Update sound.h
is-this-c Sep 25, 2025
710cea3
Update CHANGELOG.md
is-this-c Sep 25, 2025
d3e1926
Rename resources/audio/Laser loop.wav to resources/audio/dummy/Laser …
is-this-c Sep 25, 2025
0807f0c
Rename resources/audio/fp_shotgun_reload.wav to resources/audio/dummy…
is-this-c Sep 25, 2025
2cb3215
Rename resources/images/bigboom.vbm to resources/images/dummy/bigboom…
is-this-c Sep 25, 2025
6b8c72a
Update CMakeLists.txt
is-this-c Sep 25, 2025
51da624
Update CMakeLists.txt
is-this-c Sep 25, 2025
95d65f1
Update network.cpp
is-this-c Sep 25, 2025
6a038d7
Update CHANGELOG.md
is-this-c Sep 25, 2025
e2fda8f
Update network.cpp
is-this-c Sep 27, 2025
e1bb9c3
Update save_restore.cpp
is-this-c Sep 27, 2025
f6f9a89
Update CHANGELOG.md
is-this-c Sep 28, 2025
97b328a
Update licensing-info.txt
is-this-c Sep 28, 2025
f61afe5
Update CHANGELOG.md
is-this-c Sep 28, 2025
96a8cc7
Update CHANGELOG.md
is-this-c Sep 28, 2025
550a9bb
Update camera.cpp
is-this-c Sep 28, 2025
123da35
Update save_restore.cpp
is-this-c Sep 28, 2025
3058985
Update entity.cpp
is-this-c Sep 28, 2025
ad48e21
Update weapon.cpp
is-this-c Sep 28, 2025
633812f
Rename variables
is-this-c Sep 28, 2025
c88b288
Update weapon.cpp
is-this-c Sep 28, 2025
915f802
Remove hit sound
is-this-c Sep 28, 2025
ec0eef4
Update CHANGELOG.md
is-this-c Sep 28, 2025
514518e
Rename
is-this-c Sep 29, 2025
42208c4
Rename
is-this-c Sep 29, 2025
793bf17
Update sound.h
is-this-c Oct 6, 2025
9868c8c
Update weapon.cpp
is-this-c Oct 6, 2025
0acd51d
Update server.cpp
is-this-c Oct 6, 2025
f590839
Update network.cpp
is-this-c Oct 6, 2025
813a670
Update network.cpp
is-this-c Oct 6, 2025
02b0e42
Update network.cpp
is-this-c Oct 6, 2025
c2da1c2
Update
is-this-c Oct 6, 2025
25e51dd
Update gr.cpp
is-this-c Oct 6, 2025
1448b02
Update network.cpp
is-this-c Oct 6, 2025
cef8bfd
Update network.cpp
is-this-c Oct 6, 2025
bc92076
Update CHANGELOG.md
is-this-c Oct 6, 2025
319d021
Update network.cpp
is-this-c Oct 6, 2025
9f4e896
Update server.cpp
is-this-c Oct 6, 2025
ce741de
Update server.cpp
is-this-c Oct 6, 2025
91ddc6a
Update
is-this-c Oct 7, 2025
daa7d81
Update
is-this-c Oct 7, 2025
b032b5d
Remove `has_value`
is-this-c Oct 7, 2025
adc807d
Update
is-this-c Oct 7, 2025
ee16866
Update
is-this-c Oct 7, 2025
eaad62a
Update
is-this-c Oct 7, 2025
cc82516
Update
is-this-c Oct 7, 2025
fec94dc
Update
is-this-c Oct 7, 2025
5d0b818
Update
is-this-c Oct 7, 2025
503db44
Update
is-this-c Oct 7, 2025
52721e3
Update
is-this-c Oct 7, 2025
7f30336
Update
is-this-c Oct 7, 2025
79ffab3
Update
is-this-c Oct 7, 2025
43475b0
Update
is-this-c Oct 7, 2025
68be7b2
Update
is-this-c Oct 7, 2025
7fa5f67
Update
is-this-c Oct 7, 2025
8031b2d
Update
is-this-c Oct 7, 2025
6e35b82
Update
is-this-c Oct 7, 2025
530d326
Merge branch 'master' into alpine_compat
is-this-c Oct 7, 2025
f0c56aa
Update
is-this-c Oct 7, 2025
8fd9576
Update
is-this-c Oct 9, 2025
2774aa3
Update
is-this-c Oct 9, 2025
40fe6a2
Update
is-this-c Oct 9, 2025
c55b630
Update
is-this-c Oct 13, 2025
fefe3ef
Update
is-this-c Oct 13, 2025
2dea04f
Update
is-this-c Oct 13, 2025
c5f6a29
Update
is-this-c Oct 13, 2025
682d61f
Update
is-this-c Oct 13, 2025
a13ec99
Update
is-this-c Oct 13, 2025
c821633
Update
is-this-c Oct 13, 2025
d85eede
Update
is-this-c Oct 13, 2025
2d654ec
Update
is-this-c Oct 13, 2025
aa60319
Update
is-this-c Oct 13, 2025
5a68ad3
Update
is-this-c Oct 13, 2025
92d4ba5
Update
is-this-c Oct 13, 2025
7e0473c
Update
is-this-c Oct 13, 2025
b46eaf6
Update
is-this-c Oct 13, 2025
c5a58cd
Update
is-this-c Oct 13, 2025
b0380ef
Update
is-this-c Oct 13, 2025
78264da
Update
is-this-c Oct 13, 2025
956a2b8
Update
is-this-c Oct 13, 2025
b968ba5
Update
is-this-c Oct 13, 2025
b3c37fe
Update
is-this-c Oct 14, 2025
9b64e36
Update
is-this-c Oct 14, 2025
07442bb
Update
is-this-c Oct 14, 2025
bd8a149
Update CHANGELOG.md
is-this-c Oct 15, 2025
3fba6ab
Update
is-this-c Oct 15, 2025
dab1450
Update
is-this-c Oct 15, 2025
cd44590
Update
is-this-c Oct 15, 2025
2b123a0
Update
is-this-c Oct 16, 2025
a1dbd0b
Update
is-this-c Oct 17, 2025
478697f
Update
is-this-c Oct 17, 2025
ed5d48c
Update
is-this-c Oct 17, 2025
43cc27c
Update
is-this-c Oct 17, 2025
e98b348
Update CHANGELOG for version 1.9.2
is-this-c Oct 17, 2025
36aacbb
Update
is-this-c Oct 17, 2025
c27159d
Update
is-this-c Oct 17, 2025
73bbe8b
Update
is-this-c Oct 17, 2025
980d6f2
Update
is-this-c Oct 17, 2025
aa2c471
Update
is-this-c Oct 17, 2025
5e1f1f6
Update
is-this-c Oct 17, 2025
2562fe5
Update
is-this-c Oct 17, 2025
55764f3
Update
is-this-c Oct 18, 2025
e6388db
Rename variables and add enum `ServerSoftware`
is-this-c Oct 27, 2025
b1a9c9e
Update comment
is-this-c Oct 27, 2025
6a49e64
SImplify `AlpineLevelInfoConfig`
is-this-c Oct 27, 2025
eb7ff99
Fix build error
is-this-c Oct 27, 2025
0fed1c8
Fix build error
is-this-c Oct 27, 2025
f8fec28
Fix build error
is-this-c Oct 27, 2025
7428635
Fix build error
is-this-c Oct 27, 2025
61a39ff
Fix build error
is-this-c Oct 27, 2025
ffc489a
use `rf::gr::Color::from_hex`
is-this-c Nov 27, 2025
c614aa5
Fix build error
is-this-c Nov 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# CMake 3.15 is required for CMAKE_MSVC_RUNTIME_LIBRARY.
cmake_minimum_required(VERSION 3.15)
# CMake 3.20 is required for C++23.
cmake_minimum_required(VERSION 3.20)
project(DashFaction)

if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ Name | Description
`debug_event_msg` | toggle tracking of event messages in console
`gibs` | toggle gibs (characters exploding into parts)
`muzzle_flash` | toggle muzzle flash
`hit_sounds` | toggle whether to play a sound, when you hit players in multiplayer, if enabled by a server
`weapon_screen_shake` | toggle camera shake from weapon fire [may be force enabled by multiplayer servers]
`full_bright_entities` | toggle full-bright entities [may be force disabled by multiplayer servers]

### Server commands

Expand Down
3 changes: 3 additions & 0 deletions common/include/common/config/GameConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,8 @@ struct GameConfig
CfgVar<bool> muzzle_flash = true;
CfgVar<bool> glares = true;
CfgVar<bool> show_enemy_bullets = true;
CfgVar<bool> weapon_screen_shake = true;
CfgVar<bool> full_bright_entities = false;

static constexpr float min_fov = 75.0f;
static constexpr float max_fov = 160.0f;
Expand All @@ -67,6 +69,7 @@ struct GameConfig
// Audio
CfgVar<float> level_sound_volume = 1.0f;
CfgVar<bool> eax_sound = true;
CfgVar<bool> hit_sounds = true;

// Multiplayer
static const char default_rf_tracker[];
Expand Down
3 changes: 3 additions & 0 deletions common/src/config/GameConfig.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,13 +167,16 @@ bool GameConfig::visit_vars(T&& visitor, bool is_save)
result &= visitor(dash_faction_key, "Scoreboard Animations", scoreboard_anim);
result &= visitor(dash_faction_key, "Spectate Mode Minimal UI", spectate_mode_minimal_ui);
result &= visitor(dash_faction_key, "Level Sound Volume", level_sound_volume);
result &= visitor(dash_faction_key, "Hit Sounds", hit_sounds);
result &= visitor(dash_faction_key, "Allow Overwriting Game Files", allow_overwrite_game_files);
result &= visitor(dash_faction_key, "Version", dash_faction_version);
result &= visitor(dash_faction_key, "Swap Assault Rifle Controls", swap_assault_rifle_controls);
result &= visitor(dash_faction_key, "Swap Grenade Controls", swap_grenade_controls);
result &= visitor(dash_faction_key, "Glares", glares);
result &= visitor(dash_faction_key, "Linear Pitch", linear_pitch);
result &= visitor(dash_faction_key, "Show Enemy Bullets", show_enemy_bullets);
result &= visitor(dash_faction_key, "Weapon Screen Shake", weapon_screen_shake);
result &= visitor(dash_faction_key, "Full-Bright Entities", full_bright_entities);
result &= visitor(dash_faction_key, "Keep Launcher Open", keep_launcher_open);
result &= visitor(dash_faction_key, "Skip Cutscene Control", skip_cutscene_ctrl);
result &= visitor(dash_faction_key, "Damage Screen Flash", damage_screen_flash);
Expand Down
15 changes: 14 additions & 1 deletion docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,22 @@ Dash Faction Changelog
Version 1.9.2 (not released yet)
--------------------------------
[@is-this-c](https://github.com/is-this-c)
- Changes derived from [Alpine Faction's](https://github.com/GooberRF/alpinefaction) source code
- - Improve compatibility with Alpine Faction network protocol
- - In Alpine Faction levels
- - - Handle `AlpineLevelProps::legacy_cyclic_timers`
- - - Allow triggers to activate events in multiplayer
- - - Fix events that broke if their delay parameter was set
- - - Support loading Alpine Faction's `$Lightmap Clamp Floor`, and `$Lightmap Clamp Ceiling`, `$Crater Texture PPM`, and `$Mesh Replacement`from `{map_name}_info.tbl`
- - - Support dynamic lights
- - - Make particle emitters placed in levels respect their active distance parameter
- Fix a potential crash after a client quits a game if Directd3D 11 is enabled
- Improve compatibility with Alpine Faction servers
- Fix `PgUp`, `PgDown`, `End`, and `Home` on numeric keypads
- Add `af_killsound1.wav` from Alpine Faction
- Add `hit_sounds` command
- Add `weapon_screen_shake` command
- Add `full_bright_entities` command
- Add `remote_server_flags` command

Version 1.9.1 (released 2025-07-05)
--------------------------------
Expand Down
3 changes: 2 additions & 1 deletion game_patch/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ set(SRCS
misc/ui.cpp
misc/game.cpp
misc/level.cpp
misc/af_options.cpp
sound/sound.cpp
sound/sound.h
sound/sound_ds.cpp
Expand All @@ -172,7 +173,7 @@ set(SRCS
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SRCS})

add_library(DashFaction SHARED ${SRCS})
target_compile_features(DashFaction PUBLIC cxx_std_20)
target_compile_features(DashFaction PRIVATE cxx_std_23)
set_target_properties(DashFaction PROPERTIES
PREFIX ""
CXX_EXTENSIONS NO
Expand Down
51 changes: 35 additions & 16 deletions game_patch/graphics/d3d11/gr_d3d11_mesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#include "../../rf/math/quaternion.h"
#include "../../rf/v3d.h"
#include "../../rf/character.h"
#include "../../main/main.h"
#include "../../multi/multi.h"
#include "gr_d3d11.h"
#include "gr_d3d11_mesh.h"
#include "gr_d3d11_context.h"
Expand Down Expand Up @@ -378,7 +380,7 @@ namespace df::gr::d3d11
render_caches_.clear();
}

void MeshRenderer::render_v3d_vif(rf::VifLodMesh *lod_mesh, int lod_index, const rf::Vector3& pos, const rf::Matrix3& orient, const rf::MeshRenderParams& params)
void MeshRenderer::render_v3d_vif(rf::VifLodMesh *lod_mesh, int lod_index, const rf::Vector3& pos, const rf::Matrix3& orient, rf::MeshRenderParams params)
{
page_in_v3d_mesh(lod_mesh);

Expand All @@ -389,10 +391,28 @@ namespace df::gr::d3d11
render_context_.set_index_buffer(v3d_ib_.buffer());

auto render_cache = reinterpret_cast<MeshRenderCache*>(lod_mesh->render_cache);

const bool ir_scanner = (params.flags & MRF_SCANNER_1) != 0;
if (!ir_scanner) {
rf::Vector3 ambient_light{0.f, 0.f, 0.f};
light_get_ambient(&ambient_light.x, &ambient_light.y, &ambient_light.z);

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why it was moved? I can see in RF code that those builtin lights are used for characters too

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is in render_v3d_vif which is for e.g. item pickups. Characters are lighted in render_character_vif.

ambient_light *= 255.f;
// RF uses some hard-coded lights here but for now let's keep it simple
ambient_light += 40.f;
// Ignore ambient_color from params, it changes sharply and RF uses it only indirectly for
// its hard-coded lights
params.ambient_color.set(
static_cast<rf::ubyte>(std::min(ambient_light.x, 255.f)),
static_cast<rf::ubyte>(std::min(ambient_light.y, 255.f)),
static_cast<rf::ubyte>(std::min(ambient_light.z, 255.f)),
255
);
}

draw_cached_mesh(lod_mesh, *render_cache, params, lod_index);
}

void MeshRenderer::render_character_vif(rf::VifLodMesh *lod_mesh, int lod_index, const rf::Vector3& pos, const rf::Matrix3& orient, const rf::CharacterInstance *ci, const rf::MeshRenderParams& params)
void MeshRenderer::render_character_vif(rf::VifLodMesh *lod_mesh, int lod_index, const rf::Vector3& pos, const rf::Matrix3& orient, const rf::CharacterInstance *ci, rf::MeshRenderParams params)
{
page_in_character_mesh(lod_mesh);
auto render_cache = reinterpret_cast<CharacterMeshRenderCache*>(lod_mesh->render_cache);
Expand All @@ -416,6 +436,18 @@ namespace df::gr::d3d11
}
render_cache->update_bone_transforms_buffer(ci, render_context_);
render_cache->bind_buffers(render_context_, morphed);

const bool ir_scanner = (params.flags & MRF_SCANNER_1) != 0;
if (!ir_scanner) {
const bool allow_full_bright = !(get_remote_server_info()
&& !get_remote_server_info().value().allow_full_bright_entities);

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there should be no negation or it should be "deny", not "allow", because currently it makes no sense

@is-this-c is-this-c Oct 27, 2025

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const bool allow_full_bright = !(get_remote_server_info()
    && !get_remote_server_info().value().allow_full_bright_entities);

seems clearer in expressions e.g. if (config.full_bright && allow_full_bright) instead of if (config.full_bright && !no_full_bright)

const bool no_full_bright = get_remote_server_info()
                && !get_remote_server_info().value().allow_full_bright_entities;

if (g_game_config.full_bright_entities
&& allow_full_bright
&& !(params.flags & MRF_FIRST_PERSON)) {
params.ambient_color.set(255, 255, 255, 255);
}
}

draw_cached_mesh(lod_mesh, *render_cache, params, lod_index);
}

Expand Down Expand Up @@ -458,20 +490,7 @@ namespace df::gr::d3d11
}
rf::Color color{255, 255, 255};
if (!ir_scanner) {
// Ignore ambient_color from params, it changes sharply and RF uses it only indirectly for
// its hard-coded lights
float ambient_r, ambient_g, ambient_b;
light_get_ambient(&ambient_r, &ambient_g, &ambient_b);
color.set(
static_cast<rf::ubyte>(ambient_r * 255.0f),
static_cast<rf::ubyte>(ambient_g * 255.0f),
static_cast<rf::ubyte>(ambient_b * 255.0f),
255
);
// RF uses some hard-coded lights here but for now let's keep it simple
color.red += 40;
color.green += 40;
color.blue += 40;
color = params.ambient_color;
} else {
color = params.self_illum;
}
Expand Down
4 changes: 2 additions & 2 deletions game_patch/graphics/d3d11/gr_d3d11_mesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ namespace df::gr::d3d11
public:
MeshRenderer(ComPtr<ID3D11Device> device, ShaderManager& shader_manager, StateManager& state_manager, RenderContext& render_context);
~MeshRenderer();
void render_v3d_vif(rf::VifLodMesh *lod_mesh, int lod_index, const rf::Vector3& pos, const rf::Matrix3& orient, const rf::MeshRenderParams& params);
void render_character_vif(rf::VifLodMesh *lod_mesh, int lod_index, const rf::Vector3& pos, const rf::Matrix3& orient, const rf::CharacterInstance *ci, const rf::MeshRenderParams& params);
void render_v3d_vif(rf::VifLodMesh *lod_mesh, int lod_index, const rf::Vector3& pos, const rf::Matrix3& orient, rf::MeshRenderParams params);
void render_character_vif(rf::VifLodMesh *lod_mesh, int lod_index, const rf::Vector3& pos, const rf::Matrix3& orient, const rf::CharacterInstance *ci, rf::MeshRenderParams params);
void clear_vif_cache(rf::VifLodMesh *lod_mesh);
void page_in_v3d_mesh(rf::VifLodMesh* lod_mesh);
void page_in_character_mesh(rf::VifLodMesh* lod_mesh);
Expand Down
21 changes: 13 additions & 8 deletions game_patch/graphics/gr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,13 @@ float gr_scale_world_fov(float horizontal_fov = 90.0f)
horizontal_fov = gr_scale_fov_hor_plus(horizontal_fov);
}

const auto& server_info_opt = get_df_server_info();
if (server_info_opt && server_info_opt.value().max_fov) {
horizontal_fov = std::min(horizontal_fov, server_info_opt.value().max_fov.value());
if (get_remote_server_info()) {
const RemoteServerInfo& remote_server_info = get_remote_server_info().value();
if (remote_server_info.max_fov) {
horizontal_fov = std::min(horizontal_fov, remote_server_info.max_fov.value());
}
}

return horizontal_fov;
}

Expand Down Expand Up @@ -122,10 +125,12 @@ ConsoleCommand2 fov_cmd{
g_game_config.save();
}
rf::console::print("Horizontal FOV: {:.2f}", gr_scale_world_fov());

const auto& server_info_opt = get_df_server_info();
if (server_info_opt && server_info_opt.value().max_fov) {
rf::console::print("Server FOV limit: {:.2f}", server_info_opt.value().max_fov.value());

if (get_remote_server_info()) {
const RemoteServerInfo& remote_server_info = get_remote_server_info().value();
if (remote_server_info.max_fov) {
rf::console::print("Server FOV limit: {:.2f}", remote_server_info.max_fov.value());
}
}
},
"Sets horizontal FOV (field of view) in degrees. Use 0 to enable automatic FOV scaling.",
Expand Down Expand Up @@ -240,7 +245,7 @@ ConsoleCommand2 nearest_texture_filtering_cmd{
ConsoleCommand2 lod_distance_scale_cmd{
"lod_distance_scale",
[](std::optional<float> scale_opt) {
if (scale_opt.has_value()) {
if (scale_opt) {
gr_lod_dist_scale = scale_opt.value();
}
rf::console::print("LOD distance scale: {:.2f}", gr_lod_dist_scale);
Expand Down
6 changes: 6 additions & 0 deletions game_patch/main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
#include "../misc/misc.h"
#include "../misc/vpackfile.h"
#include "../misc/high_fps.h"
#include "../misc/level.h"
#include "../misc/af_options.h"
#include "../input/input.h"
#include "../rf/gr/gr.h"
#include "../rf/multi.h"
Expand Down Expand Up @@ -145,6 +147,7 @@ FunHook<int(rf::String&, rf::String&, char*)> level_load_hook{
xlog::info("Loading level: {}", level_filename);
if (!save_filename.empty())
xlog::info("Restoring game from save file: {}", save_filename);
load_af_level_info_config(level_filename);
int ret = level_load_hook.call_target(level_filename, save_filename, error);
if (ret != 0)
xlog::warn("Loading failed: {}", error);
Expand All @@ -160,6 +163,9 @@ FunHook<void(bool)> level_init_post_hook{
[](bool transition) {
level_init_post_hook.call_target(transition);
xlog::info("Level loaded: {}{}", rf::level.filename, transition ? " (transition)" : "");
if (!rf::is_dedicated_server) {
set_levelmod_autotexture_ppm();
}
},
};

Expand Down
Loading
Loading