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};