From 3723076ae36cb4e8eeb6b4b738516176e7d32a99 Mon Sep 17 00:00:00 2001 From: Jack Andersen Date: Tue, 5 Apr 2016 17:28:10 -1000 Subject: [PATCH] Fix horrible memory leak --- DataSpec/DNAMP1/ANCS.hpp | 12 +++++++++--- DataSpec/DNAMP2/ANCS.hpp | 9 ++++++--- hecl | 2 +- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/DataSpec/DNAMP1/ANCS.hpp b/DataSpec/DNAMP1/ANCS.hpp index d9ec8e905..0a5ecc66e 100644 --- a/DataSpec/DNAMP1/ANCS.hpp +++ b/DataSpec/DNAMP1/ANCS.hpp @@ -40,6 +40,8 @@ struct ANCS : BigYAML atUint32 idx; std::string name; UniqueID32 cmdl; + UniqueID32 _cskrOld; + UniqueID32 _cinfOld; AuxiliaryID32 cskr = _S("skin"); AuxiliaryID32 cinf = {_S("layout"), _S(".blend")}; @@ -145,6 +147,7 @@ struct ANCS : BigYAML std::vector effects; UniqueID32 cmdlOverlay; + UniqueID32 _cskrOverlayOld; AuxiliaryID32 cskrOverlay = _S("skin"); std::vector animIdxs; @@ -569,11 +572,11 @@ struct ANCS : BigYAML DNAANCS::CharacterResInfo& chOut = out.back(); chOut.name = ci.name; chOut.cmdl = ci.cmdl; - chOut.cskr = ci.cskr.getBaseId(); - chOut.cinf = ci.cinf.getBaseId(); + chOut.cskr = ci._cskrOld; + chOut.cinf = ci._cinfOld; if (ci.cmdlOverlay) - chOut.overlays.emplace_back(FOURCC('OVER'), std::make_pair(ci.cmdlOverlay, ci.cskrOverlay.getBaseId())); + chOut.overlays.emplace_back(FOURCC('OVER'), std::make_pair(ci.cmdlOverlay, ci._cskrOverlayOld)); } } @@ -599,8 +602,11 @@ struct ANCS : BigYAML { for (CharacterSet::CharacterInfo& character : characterSet.characters) { + character._cskrOld = character.cskr; + character._cinfOld = character.cinf; character.cskr = character.cmdl; character.cinf = ancsId; + character._cskrOverlayOld = character.cskrOverlay; character.cskrOverlay = character.cmdlOverlay; } } diff --git a/DataSpec/DNAMP2/ANCS.hpp b/DataSpec/DNAMP2/ANCS.hpp index 134d47a9d..d3911c51c 100644 --- a/DataSpec/DNAMP2/ANCS.hpp +++ b/DataSpec/DNAMP2/ANCS.hpp @@ -41,6 +41,8 @@ struct ANCS : BigYAML atUint32 idx; std::string name; UniqueID32 cmdl; + UniqueID32 _cskrOld; + UniqueID32 _cinfOld; AuxiliaryID32 cskr = _S("skin"); AuxiliaryID32 cinf = {_S("layout"), _S("skin")}; @@ -88,6 +90,7 @@ struct ANCS : BigYAML std::vector effects; UniqueID32 cmdlOverlay; + UniqueID32 _cskrOverlayOld; AuxiliaryID32 cskrOverlay = _S("skin"); std::vector animIdxs; @@ -201,11 +204,11 @@ struct ANCS : BigYAML DNAANCS::CharacterResInfo& chOut = out.back(); chOut.name = ci.name; chOut.cmdl = ci.cmdl; - chOut.cskr = ci.cskr.getBaseId(); - chOut.cinf = ci.cinf.getBaseId(); + chOut.cskr = ci._cskrOld; + chOut.cinf = ci._cinfOld; if (ci.cmdlOverlay) - chOut.overlays.emplace_back(FOURCC('OVER'), std::make_pair(ci.cmdlOverlay, ci.cskrOverlay.getBaseId())); + chOut.overlays.emplace_back(FOURCC('OVER'), std::make_pair(ci.cmdlOverlay, ci._cskrOverlayOld)); } } diff --git a/hecl b/hecl index de043503e..22d1a5a98 160000 --- a/hecl +++ b/hecl @@ -1 +1 @@ -Subproject commit de043503e5d2312ccc10876b0ac3d5ebb91bb768 +Subproject commit 22d1a5a98969e82bc314e9908f7f0d677eb4a9d5