From 4e1aab66b2ff756743a072696ab2ccd3d8bb23d5 Mon Sep 17 00:00:00 2001 From: Federico Cecchetto Date: Tue, 30 Aug 2022 23:30:55 +0200 Subject: [PATCH] Some fixes --- src/client/component/gsc.cpp | 16 +++++++++++----- src/client/game/symbols.hpp | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/client/component/gsc.cpp b/src/client/component/gsc.cpp index 0b7c6ccb..507efb61 100644 --- a/src/client/component/gsc.cpp +++ b/src/client/component/gsc.cpp @@ -55,10 +55,12 @@ namespace gsc { return true; } - - const auto asset = game::DB_FindXAssetHeader(game::ASSET_TYPE_RAWFILE, name.data(), false); - if (asset.rawfile) + + const auto name_str = name.data(); + if (game::DB_XAssetExists(game::ASSET_TYPE_RAWFILE, name_str) && + !game::DB_IsXAssetDefault(game::ASSET_TYPE_RAWFILE, name_str)) { + const auto asset = game::DB_FindXAssetHeader(game::ASSET_TYPE_RAWFILE, name.data(), false); const auto len = game::DB_GetRawFileLen(asset.rawfile); data->resize(len); game::DB_GetRawBuffer(asset.rawfile, data->data(), len); @@ -275,15 +277,19 @@ namespace gsc { for (auto frame = game::scr_VmPub->function_frame; frame != game::scr_VmPub->function_frame_start; --frame) { + const auto pos = frame == game::scr_VmPub->function_frame + ? game::scr_function_stack->pos + : frame->fs.pos; const auto function = find_function(frame->fs.pos); + if (function.has_value()) { console::warn("\tat function \"%s\" in file \"%s.gsc\"", - function.value().first.data(), function.value().second.data(), frame->fs.pos); + function.value().first.data(), function.value().second.data()); } else { - console::warn("\tat unknown location", frame->fs.pos); + console::warn("\tat unknown location %p", pos); } } } diff --git a/src/client/game/symbols.hpp b/src/client/game/symbols.hpp index dd3a280f..1e3202f6 100644 --- a/src/client/game/symbols.hpp +++ b/src/client/game/symbols.hpp @@ -49,6 +49,7 @@ namespace game WEAK symbol DB_LevelLoadAddZone{0x1404145D0}; WEAK symbol DB_IsXAssetDefault{0x1404143C0}; + WEAK symbol DB_XAssetExists{0x140417FD0}; WEAK symbol Dvar_FindVar{0x140618F90}; WEAK symbol Dvar_FindMalleableVar{0x140618F00};