Skip to content

Commit

Permalink
Fixed a memory caching issue in the vanilla game. Reset aa2face keybi…
Browse files Browse the repository at this point in the history
…nds.
  • Loading branch information
k4yf0ur committed Oct 31, 2020
1 parent 770c20f commit 3739dad
Show file tree
Hide file tree
Showing 9 changed files with 85 additions and 19 deletions.
12 changes: 8 additions & 4 deletions AAUnlimited.sln
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ Global
ReleaseDebug|x86 = ReleaseDebug|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{AA2A22EF-17CB-4B53-B921-05C18036AD15}.Debug|Any CPU.ActiveCfg = Debug|Win32
{AA2A22EF-17CB-4B53-B921-05C18036AD15}.Debug|Any CPU.ActiveCfg = ReleaseDebug|Win32
{AA2A22EF-17CB-4B53-B921-05C18036AD15}.Debug|Any CPU.Build.0 = ReleaseDebug|Win32
{AA2A22EF-17CB-4B53-B921-05C18036AD15}.Debug|ARM.ActiveCfg = Debug|Win32
{AA2A22EF-17CB-4B53-B921-05C18036AD15}.Debug|x64.ActiveCfg = Debug|x64
{AA2A22EF-17CB-4B53-B921-05C18036AD15}.Debug|x64.Build.0 = Debug|x64
Expand All @@ -49,7 +50,8 @@ Global
{AA2A22EF-17CB-4B53-B921-05C18036AD15}.ReleaseDebug|x64.Build.0 = ReleaseDebug|x64
{AA2A22EF-17CB-4B53-B921-05C18036AD15}.ReleaseDebug|x86.ActiveCfg = ReleaseDebug|Win32
{AA2A22EF-17CB-4B53-B921-05C18036AD15}.ReleaseDebug|x86.Build.0 = ReleaseDebug|Win32
{43075A07-A627-44C9-9C55-1AE92AA636F8}.Debug|Any CPU.ActiveCfg = Debug|Win32
{43075A07-A627-44C9-9C55-1AE92AA636F8}.Debug|Any CPU.ActiveCfg = Release|Win32
{43075A07-A627-44C9-9C55-1AE92AA636F8}.Debug|Any CPU.Build.0 = Release|Win32
{43075A07-A627-44C9-9C55-1AE92AA636F8}.Debug|ARM.ActiveCfg = Debug|Win32
{43075A07-A627-44C9-9C55-1AE92AA636F8}.Debug|x64.ActiveCfg = Debug|x64
{43075A07-A627-44C9-9C55-1AE92AA636F8}.Debug|x64.Build.0 = Debug|x64
Expand All @@ -69,7 +71,8 @@ Global
{43075A07-A627-44C9-9C55-1AE92AA636F8}.ReleaseDebug|x64.Build.0 = Release|x64
{43075A07-A627-44C9-9C55-1AE92AA636F8}.ReleaseDebug|x86.ActiveCfg = Release|Win32
{43075A07-A627-44C9-9C55-1AE92AA636F8}.ReleaseDebug|x86.Build.0 = Release|Win32
{E1AF35E4-2324-493C-B446-6B70A164A0B2}.Debug|Any CPU.ActiveCfg = Debug|Win32
{E1AF35E4-2324-493C-B446-6B70A164A0B2}.Debug|Any CPU.ActiveCfg = Release|Win32
{E1AF35E4-2324-493C-B446-6B70A164A0B2}.Debug|Any CPU.Build.0 = Release|Win32
{E1AF35E4-2324-493C-B446-6B70A164A0B2}.Debug|ARM.ActiveCfg = Debug|Win32
{E1AF35E4-2324-493C-B446-6B70A164A0B2}.Debug|x64.ActiveCfg = Debug|x64
{E1AF35E4-2324-493C-B446-6B70A164A0B2}.Debug|x64.Build.0 = Debug|x64
Expand All @@ -89,7 +92,8 @@ Global
{E1AF35E4-2324-493C-B446-6B70A164A0B2}.ReleaseDebug|x64.Build.0 = Release|x64
{E1AF35E4-2324-493C-B446-6B70A164A0B2}.ReleaseDebug|x86.ActiveCfg = Release|Win32
{E1AF35E4-2324-493C-B446-6B70A164A0B2}.ReleaseDebug|x86.Build.0 = Release|Win32
{EFA84E6C-0382-41D5-BADD-29DCB274A04D}.Debug|Any CPU.ActiveCfg = Debug|x64
{EFA84E6C-0382-41D5-BADD-29DCB274A04D}.Debug|Any CPU.ActiveCfg = Release|x64
{EFA84E6C-0382-41D5-BADD-29DCB274A04D}.Debug|Any CPU.Build.0 = Release|x64
{EFA84E6C-0382-41D5-BADD-29DCB274A04D}.Debug|ARM.ActiveCfg = Debug|x64
{EFA84E6C-0382-41D5-BADD-29DCB274A04D}.Debug|x64.ActiveCfg = Debug|x64
{EFA84E6C-0382-41D5-BADD-29DCB274A04D}.Debug|x64.Build.0 = Debug|x64
Expand Down
1 change: 1 addition & 0 deletions AAUnlimited/AAUnlimited.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@
<ClInclude Include="External\ExternalClasses\Animation.h" />
<ClInclude Include="External\ExternalClasses\Bone.h" />
<ClInclude Include="External\ExternalClasses\CharacterActivity.h" />
<ClInclude Include="External\ExternalClasses\CharacterAssetContainer.h" />
<ClInclude Include="External\ExternalClasses\CharacterNpcAiData.h" />
<ClInclude Include="External\ExternalClasses\CharacterNpcReactData.h" />
<ClInclude Include="External\ExternalClasses\CharacterRelation.h" />
Expand Down
1 change: 1 addition & 0 deletions AAUnlimited/AAUnlimited.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@
<ClInclude Include="General\DrawD3D.h" />
<ClInclude Include="Functions\Notifications.h" />
<ClInclude Include="Functions\AAPlay\Controls.h" />
<ClInclude Include="External\ExternalClasses\CharacterAssetContainer.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="AAUnlimitedDll.rc">
Expand Down
24 changes: 24 additions & 0 deletions AAUnlimited/External/ExternalClasses/CharacterAssetContainer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#pragma once
#pragma once

#include <Windows.h>
#include "Script/ScriptLua.h"

namespace ExtClass {

#pragma pack(push, 1)

class CharacterAssetContainer
{
public:
BYTE m_unknown[0x35c];
static inline void bindLua() {
#define LUA_CLASS ExtClass::CharacterAssetContainer
LUA_NAME;
#undef LUA_CLASS
}
};
static_assert(sizeof(CharacterAssetContainer) == 0x35c, "CharacterAssetContainer size missmatch; must be 0x35c bytes (allocation size)");

#pragma pack(pop)
}
4 changes: 3 additions & 1 deletion AAUnlimited/Functions/AAPlay/Globals.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@ void InitOnLoad() {
PersistentStorage::ClassStorage::reset(Shared::GameState::getCurrentClassSaveName());
for(start; start != end; start++, idxCharacter++) {
ExtClass::CharacterStruct* it = *start;

int seat = it->m_seat;
g_characters[seat].m_char = it;
g_characters[seat].LoadAAUData();
g_characters[seat].idxSave = idxCharacter;
g_characters[seat].assetContainer = **(ExtClass::CharacterAssetContainer**)((char*)(it->m_somePointer) + 0x13c);


//initialize triggers
auto& aauData = g_characters[seat].m_cardData;
Expand Down Expand Up @@ -65,6 +66,7 @@ void InitOnLoad() {
void InitTransferedCharacter(ExtClass::CharacterStruct* character) {
int seat = character->m_seat;
g_characters[seat].m_char = character;
g_characters[seat].assetContainer = **(ExtClass::CharacterAssetContainer**)((char*)(character->m_somePointer) + 0x13c);
bool modded = g_characters[seat].LoadAAUData();
if (modded)
LOGPRIO(Logger::Priority::INFO) << std::dec << "Loaded modcard into seat " << seat << "\n";
Expand Down
17 changes: 17 additions & 0 deletions AAUnlimited/Functions/CharInstData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,23 @@ void CharInstData::ApplyDecals(int bodyPart, int decalStrength)
}
}

void CharInstData::ClearCache()
{
const DWORD offset[]{ 0x150750 };
DWORD* address = (DWORD*)ExtVars::ApplyRule(offset);
if (this->IsValid()) {
auto somepointer = *(DWORD*)((char*)(this->m_char->m_somePointer) + 0x13c);
__asm
{
mov esi, somepointer
push esi
call[address]

}
}
}



void CharInstData::SetHeadTracking(int headtracking)
{
Expand Down
5 changes: 5 additions & 0 deletions AAUnlimited/Functions/CharInstData.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
#include "Files/PNGData.h"
#include "External\ExternalClasses\ActionParamStruct.h"
#include "External\ExternalClasses\Light.h"
#include "External\ExternalClasses\CharacterAssetContainer.h"


/*
* Contains data about a character that currently exists in a game.
Expand Down Expand Up @@ -45,6 +47,8 @@ class CharInstData


ExtClass::CharacterStruct* m_char;
ExtClass::CharacterAssetContainer assetContainer;

AAUCardData m_cardData;

std::vector<std::pair<AAUCardData::HairPart,ExtClass::XXFile*>> m_hairs[4];
Expand Down Expand Up @@ -98,6 +102,7 @@ class CharInstData
}

void ApplyDecals(int bodyPart, int decalStrength);
void ClearCache();
void SetHeadTracking(int headtracking);
void AddShadows(DWORD * HairPTR);

Expand Down
14 changes: 13 additions & 1 deletion AAUnlimited/MemMods/AAPlay/Events/Loads.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ void HiPolyLoadEndEvent(CharacterStruct *loadCharacter) {
HiPolyEndData data;
data.card = loc_hiPolyLoaded;
ThrowEvent(&data);

}

// wraps the calls to original load character events
Expand Down Expand Up @@ -124,8 +125,9 @@ DWORD __declspec(noinline) __stdcall CallOrigLoad(DWORD who, void *_this, DWORD
}

LUA_EVENT_NORET("char_spawn_end", retv, loadCharacter, cloth, a3, a4, partial);
if (General::IsAAPlay)
if (General::IsAAPlay) {
Shared::GameState::setIsOverriding(false);
}
HiPolyLoadEndEvent(loadCharacter);
loc_loadingCharacter = false;
return retv;
Expand Down Expand Up @@ -186,6 +188,7 @@ DWORD __declspec(noinline) __stdcall CallOrigDespawn(DWORD who, void *_this) {
HiPolyDespawnData data;
data.card = AAPlay::GetSeatFromStruct(loadCharacter);
ThrowEvent(&data);

}
LUA_EVENT_NORET("char_despawn", loadCharacter);
}
Expand All @@ -206,6 +209,15 @@ DWORD __declspec(noinline) __stdcall CallOrigDespawn(DWORD who, void *_this) {
LUA_EVENT_NORET("char_despawn_after", retv, loadCharacter);
Poser::RemoveCharacter(loadCharacter);
if (!Shared::GameState::getIsPcConversation()) Shared::GameState::clearConversationCharacterBySeat(loadCharacter->m_seat);
if (General::IsAAPlay) {
//This code resets the cache memory
if (loadCharacter->m_somedata && loadCharacter->m_charData) {
//this event seems to be called on unloading a save, so we're just protecting for that case
AAPlay::g_characters[AAPlay::GetSeatFromStruct(loadCharacter)].ClearCache();
ExtClass::CharacterAssetContainer* something = *(ExtClass::CharacterAssetContainer**)((char*)(loadCharacter->m_somePointer) + 0x13c);
*something = AAPlay::g_characters[AAPlay::GetSeatFromStruct(loadCharacter)].assetContainer;
}
}
}
if (General::IsAAEdit) Shared::GameState::setIsDrawingShadow(true);
return retv;
Expand Down
26 changes: 13 additions & 13 deletions AAUnlimited/Texts/lib/aaface/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -102,25 +102,25 @@ ZOOM MAX 0.01 ; default is 0.1
; note that it will probably not warn you about invalid keys cause im lazy.

; testing different kinds of contexts
KEY CONTEXT:ALL KEYVAL:50 FUNCTION:HAIR_FLIP ; P
KEY CONTEXT:DIALOG_HAIR KEYVAL:50 FUNCTION:HAIR_FLIP ; P
KEY CONTEXT:DIALOG_ALL KEYVAL:4F FUNCTION:HAIR_FLIP ; O
KEY CONTEXT:PREVIEW_WINDOW KEYVAL:49 FUNCTION:HAIR_FLIP ; I
;KEY CONTEXT:ALL KEYVAL:50 FUNCTION:HAIR_FLIP ; P
;KEY CONTEXT:DIALOG_HAIR KEYVAL:50 FUNCTION:HAIR_FLIP ; P
;KEY CONTEXT:DIALOG_ALL KEYVAL:4F FUNCTION:HAIR_FLIP ; O
;KEY CONTEXT:PREVIEW_WINDOW KEYVAL:49 FUNCTION:HAIR_FLIP ; I

;prev and next hair test
KEY CONTEXT:ACTIVE:DIALOG_HAIR KEYVAL:4C FUNCTION:HAIR_ADD PARAM:INT:1; L
KEY CONTEXT:ACTIVE:DIALOG_HAIR KEYVAL:4B FUNCTION:HAIR_ADD PARAM:INT:-1; K
;KEY CONTEXT:ACTIVE:DIALOG_HAIR KEYVAL:4C FUNCTION:HAIR_ADD PARAM:INT:1; L
;KEY CONTEXT:ACTIVE:DIALOG_HAIR KEYVAL:4B FUNCTION:HAIR_ADD PARAM:INT:-1; K

;hair size test
KEY CONTEXT:ACTIVE:DIALOG_HAIR KEYVAL:4C MOD:CTRL FUNCTION:HAIR_SIZEADD PARAM:INT:1
KEY CONTEXT:ACTIVE:DIALOG_HAIR KEYVAL:4B MOD:CTRL FUNCTION:HAIR_SIZEADD PARAM:INT:-1
;KEY CONTEXT:ACTIVE:DIALOG_HAIR KEYVAL:4C MOD:CTRL FUNCTION:HAIR_SIZEADD PARAM:INT:1
;KEY CONTEXT:ACTIVE:DIALOG_HAIR KEYVAL:4B MOD:CTRL FUNCTION:HAIR_SIZEADD PARAM:INT:-1

;ascii test
KEY CONTEXT:ALL KEYVAL:ASCII:3D FUNCTION:HAIR_FLIP
;KEY CONTEXT:ALL KEYVAL:ASCII:3D FUNCTION:HAIR_FLIP

;pose scroll keys
KEY CONTEXT:ACTIVE:DIALOG_SYSTEM KEYVAL:57 MOD:SHIFT FUNCTION:POSE_ADD PARAM:INT:1 ;W
KEY CONTEXT:ACTIVE:DIALOG_SYSTEM KEYVAL:57 MOD:SHIFT FUNCTION:POSE_APPLY
;KEY CONTEXT:ACTIVE:DIALOG_SYSTEM KEYVAL:57 MOD:SHIFT FUNCTION:POSE_ADD PARAM:INT:1 ;W
;KEY CONTEXT:ACTIVE:DIALOG_SYSTEM KEYVAL:57 MOD:SHIFT FUNCTION:POSE_APPLY

KEY CONTEXT:ACTIVE:DIALOG_SYSTEM KEYVAL:53 MOD:SHIFT FUNCTION:POSE_ADD PARAM:INT:-1 ;S
KEY CONTEXT:ACTIVE:DIALOG_SYSTEM KEYVAL:53 MOD:SHIFT FUNCTION:POSE_APPLY
;KEY CONTEXT:ACTIVE:DIALOG_SYSTEM KEYVAL:53 MOD:SHIFT FUNCTION:POSE_ADD PARAM:INT:-1 ;S
;KEY CONTEXT:ACTIVE:DIALOG_SYSTEM KEYVAL:53 MOD:SHIFT FUNCTION:POSE_APPLY

0 comments on commit 3739dad

Please sign in to comment.