diff --git a/src/Common/Game/IW4/IW4_Assets.h b/src/Common/Game/IW4/IW4_Assets.h index ee925aee..5fc75af4 100644 --- a/src/Common/Game/IW4/IW4_Assets.h +++ b/src/Common/Game/IW4/IW4_Assets.h @@ -1499,7 +1499,7 @@ namespace IW4 int ownerDrawFlags; float borderSize; int staticFlags; - int dynamicFlags[1]; + unsigned int dynamicFlags[1]; int nextTime; float foreColor[4]; float backColor[4]; diff --git a/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp b/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp index e8fd3d12..b6ce81f4 100644 --- a/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp +++ b/src/ObjLoading/Game/IW4/Menu/MenuConverterIW4.cpp @@ -488,7 +488,7 @@ namespace IW4 return ConvertExpression(expression, menu, item); } - _NODISCARD Statement_s* ConvertVisibleExpression(itemDef_s* item, const ISimpleExpression* expression, const CommonMenuDef* commonMenu, const CommonItemDef* commonItem = nullptr) const + _NODISCARD Statement_s* ConvertVisibleExpression(windowDef_t* window, const ISimpleExpression* expression, const CommonMenuDef* commonMenu, const CommonItemDef* commonItem = nullptr) const { if (expression == nullptr) return nullptr; @@ -497,11 +497,11 @@ namespace IW4 { const auto staticValue = expression->Evaluate(); if (staticValue.IsTruthy()) - item->window.dynamicFlags[0] |= WINDOW_FLAG_VISIBLE; + window->dynamicFlags[0] |= WINDOW_FLAG_VISIBLE; return nullptr; } - item->window.dynamicFlags[0] |= WINDOW_FLAG_VISIBLE; + window->dynamicFlags[0] |= WINDOW_FLAG_VISIBLE; return ConvertExpression(expression, commonMenu, commonItem); } @@ -912,7 +912,7 @@ namespace IW4 item->type = ConvertItemType(commonItem.m_type); item->window.border = commonItem.m_border; item->window.borderSize = static_cast(commonItem.m_border_size); - item->visibleExp = ConvertVisibleExpression(item, commonItem.m_visible_expression.get(), &parentMenu, &commonItem); + item->visibleExp = ConvertVisibleExpression(&item->window, commonItem.m_visible_expression.get(), &parentMenu, &commonItem); item->disabledExp = ConvertExpression(commonItem.m_disabled_expression.get(), &parentMenu, &commonItem); item->window.ownerDraw = commonItem.m_owner_draw; item->window.ownerDrawFlags = commonItem.m_owner_draw_flags; @@ -1050,7 +1050,7 @@ namespace IW4 ApplyFlag(menu->window.staticFlags, commonMenu.m_hidden_during_ui, WINDOW_FLAG_HIDDEN_DURING_UI); menu->allowedBinding = ConvertString(commonMenu.m_allowed_binding); ApplyFlag(menu->window.staticFlags, commonMenu.m_text_only_focus, WINDOW_FLAG_TEXT_ONLY_FOCUS); - menu->visibleExp = ConvertExpression(commonMenu.m_visible_expression.get(), &commonMenu); + menu->visibleExp = ConvertVisibleExpression(&menu->window, commonMenu.m_visible_expression.get(), &commonMenu); menu->rectXExp = ConvertOrApplyStatement(menu->window.rect.x, commonMenu.m_rect_x_exp.get(), &commonMenu); menu->rectYExp = ConvertOrApplyStatement(menu->window.rect.y, commonMenu.m_rect_y_exp.get(), &commonMenu); menu->rectWExp = ConvertOrApplyStatement(menu->window.rect.w, commonMenu.m_rect_w_exp.get(), &commonMenu); diff --git a/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.cpp b/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.cpp index 4c88454d..3f37fa0b 100644 --- a/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.cpp +++ b/src/ObjWriting/Game/IW4/Menu/MenuDumperIW4.cpp @@ -787,7 +787,12 @@ void MenuDumper::WriteMenuData(const menuDef_t* menu) WriteKeywordProperty("hiddenDuringUI", menu->window.staticFlags & WINDOW_FLAG_HIDDEN_DURING_UI); WriteStringProperty("allowedBinding", menu->allowedBinding); WriteKeywordProperty("textOnlyFocus", menu->window.staticFlags & WINDOW_FLAG_TEXT_ONLY_FOCUS); - WriteStatementProperty("visible", menu->visibleExp, true); + + if (menu->visibleExp) + WriteStatementProperty("visible", menu->visibleExp, true); + else if (menu->window.dynamicFlags[0] & WINDOW_FLAG_VISIBLE) + WriteIntProperty("visible", 1, 0); + WriteStatementProperty("exp rect X", menu->rectXExp, false); WriteStatementProperty("exp rect Y", menu->rectYExp, false); WriteStatementProperty("exp rect W", menu->rectWExp, false);