diff --git a/Glamourer/Automation/AutoDesignApplier.cs b/Glamourer/Automation/AutoDesignApplier.cs index fba1a58..0ce34d4 100644 --- a/Glamourer/Automation/AutoDesignApplier.cs +++ b/Glamourer/Automation/AutoDesignApplier.cs @@ -277,7 +277,7 @@ public sealed class AutoDesignApplier : IDisposable } forcedRedraw = false; - if (!_humans.IsHuman((uint)actor.AsCharacter->CharacterData.ModelCharaId)) + if (!_humans.IsHuman((uint)actor.AsCharacter->ModelContainer.ModelCharaId)) return; if (actor.IsTransformed) diff --git a/Glamourer/GameData/CustomizeSetFactory.cs b/Glamourer/GameData/CustomizeSetFactory.cs index 36cdb1b..7d80454 100644 --- a/Glamourer/GameData/CustomizeSetFactory.cs +++ b/Glamourer/GameData/CustomizeSetFactory.cs @@ -166,7 +166,7 @@ internal class CustomizeSetFactory( continue; // Hair Row from CustomizeSheet might not be set in case of unlockable hair. - if (_customizeSheet.TryGetRow(customizeIdx, out var hairRow)) + if (!_customizeSheet.TryGetRow(customizeIdx, out var hairRow)) hairList.Add(new CustomizeData(CustomizeIndex.Hairstyle, (CustomizeValue)i, customizeIdx)); else if (_icons.IconExists(hairRow.Icon)) hairList.Add(new CustomizeData(CustomizeIndex.Hairstyle, (CustomizeValue)hairRow.FeatureID, hairRow.Icon, diff --git a/Glamourer/Gui/Tabs/DebugTab/ModelEvaluationPanel.cs b/Glamourer/Gui/Tabs/DebugTab/ModelEvaluationPanel.cs index eeb6f3f..c1b5847 100644 --- a/Glamourer/Gui/Tabs/DebugTab/ModelEvaluationPanel.cs +++ b/Glamourer/Gui/Tabs/DebugTab/ModelEvaluationPanel.cs @@ -52,11 +52,11 @@ public unsafe class ModelEvaluationPanel( ImGui.TableNextColumn(); if (actor.IsCharacter) { - ImGui.TextUnformatted(actor.AsCharacter->CharacterData.ModelCharaId.ToString()); + ImGui.TextUnformatted(actor.AsCharacter->ModelContainer.ModelCharaId.ToString()); if (actor.AsCharacter->CharacterData.TransformationId != 0) ImGui.TextUnformatted($"Transformation Id: {actor.AsCharacter->CharacterData.TransformationId}"); - if (actor.AsCharacter->CharacterData.ModelCharaId_2 != -1) - ImGui.TextUnformatted($"ModelChara2 {actor.AsCharacter->CharacterData.ModelCharaId_2}"); + if (actor.AsCharacter->ModelContainer.ModelCharaId_2 != -1) + ImGui.TextUnformatted($"ModelChara2 {actor.AsCharacter->ModelContainer.ModelCharaId_2}"); ImGuiUtil.DrawTableColumn("Character Mode"); ImGuiUtil.DrawTableColumn($"{actor.AsCharacter->Mode}"); diff --git a/Glamourer/Interop/MetaService.cs b/Glamourer/Interop/MetaService.cs index 1c79cec..6225986 100644 --- a/Glamourer/Interop/MetaService.cs +++ b/Glamourer/Interop/MetaService.cs @@ -50,7 +50,7 @@ public unsafe class MetaService : IDisposable // The function seems to not do anything if the head is 0, but also breaks for carbuncles turned human, sometimes? var old = actor.AsCharacter->DrawData.Equipment(DrawDataContainer.EquipmentSlot.Head).Id; - if (old == 0 && actor.AsCharacter->CharacterData.ModelCharaId == 0) + if (old == 0 && actor.AsCharacter->ModelContainer.ModelCharaId == 0) actor.AsCharacter->DrawData.Equipment(DrawDataContainer.EquipmentSlot.Head).Id = 1; _hideHatGearHook.Original(&actor.AsCharacter->DrawData, 0, (byte)(value ? 0 : 1)); actor.AsCharacter->DrawData.Equipment(DrawDataContainer.EquipmentSlot.Head).Id = old; diff --git a/Glamourer/Interop/ScalingService.cs b/Glamourer/Interop/ScalingService.cs index f7f08f6..aa64b77 100644 --- a/Glamourer/Interop/ScalingService.cs +++ b/Glamourer/Interop/ScalingService.cs @@ -19,7 +19,7 @@ public unsafe class ScalingService : IDisposable _setupMountHook = interop.HookFromAddress((nint)MountContainer.MemberFunctionPointers.SetupMount, SetupMountDetour); _calculateHeightHook = - interop.HookFromAddress((nint)HeightContainer.MemberFunctionPointers.CalculateHeight, CalculateHeightDetour); + interop.HookFromAddress((nint)Character.MemberFunctionPointers.CalculateHeight, CalculateHeightDetour); _setupMountHook.Enable(); _updateOrnamentHook.Enable(); diff --git a/Glamourer/State/FunModule.cs b/Glamourer/State/FunModule.cs index de39a53..1ca5c48 100644 --- a/Glamourer/State/FunModule.cs +++ b/Glamourer/State/FunModule.cs @@ -333,7 +333,7 @@ public unsafe class FunModule : IDisposable => actor.IsCharacter && actor.AsObject->ObjectKind is ObjectKind.Pc && !actor.IsTransformed - && actor.AsCharacter->CharacterData.ModelCharaId == 0; + && actor.AsCharacter->ModelContainer.ModelCharaId == 0; private static void KeepOldArmor(Actor actor, EquipSlot slot, ref CharacterArmor armor) => armor = actor.Model.Valid ? actor.Model.GetArmor(slot) : armor; diff --git a/Glamourer/State/StateListener.cs b/Glamourer/State/StateListener.cs index 9c0dd67..d054a25 100644 --- a/Glamourer/State/StateListener.cs +++ b/Glamourer/State/StateListener.cs @@ -593,7 +593,7 @@ public class StateListener : IDisposable private unsafe UpdateState UpdateBaseData(Actor actor, ActorState state, uint modelId, nint customizeData, nint equipData) { // Model ID does not agree between game object and new draw object => Transformation. - if (modelId != (uint)actor.AsCharacter->CharacterData.ModelCharaId) + if (modelId != (uint)actor.AsCharacter->ModelContainer.ModelCharaId) return UpdateState.Transformed; // Model ID did not change to stored state. diff --git a/Glamourer/State/StateManager.cs b/Glamourer/State/StateManager.cs index 4ff232a..f16dd22 100644 --- a/Glamourer/State/StateManager.cs +++ b/Glamourer/State/StateManager.cs @@ -114,14 +114,14 @@ public sealed class StateManager( // Model ID is only unambiguously contained in the game object. // The draw object only has the object type. // TODO reverse search model data to get model id from model. - if (!_humans.IsHuman((uint)actor.AsCharacter->CharacterData.ModelCharaId)) + if (!_humans.IsHuman((uint)actor.AsCharacter->ModelContainer.ModelCharaId)) { - ret.LoadNonHuman((uint)actor.AsCharacter->CharacterData.ModelCharaId, *(CustomizeArray*)&actor.AsCharacter->DrawData.CustomizeData, + ret.LoadNonHuman((uint)actor.AsCharacter->ModelContainer.ModelCharaId, *(CustomizeArray*)&actor.AsCharacter->DrawData.CustomizeData, (nint)Unsafe.AsPointer(ref actor.AsCharacter->DrawData.EquipmentModelIds[0])); return ret; } - ret.ModelId = (uint)actor.AsCharacter->CharacterData.ModelCharaId; + ret.ModelId = (uint)actor.AsCharacter->ModelContainer.ModelCharaId; ret.IsHuman = true; CharacterWeapon main; diff --git a/OtterGui b/OtterGui index 8ba88ef..95b8d17 160000 --- a/OtterGui +++ b/OtterGui @@ -1 +1 @@ -Subproject commit 8ba88eff15326bb28ed5e6157f5252c114d40b5f +Subproject commit 95b8d177883b03f804d77434f45e9de97fdb9adf