@@ -72,7 +72,7 @@ TechTreeElement::~TechTreeElement()
7272 delete req;
7373}
7474
75- void TechTreeElement::UpdateRenderState (char selectedCivId, int unknownGameAndPlayerData , bool forceNotResearched)
75+ void TechTreeElement::UpdateRenderState (char selectedCivId, Player *player , bool forceNotResearched)
7676{
7777 // Is the civ disabling this element?
7878 _renderState = ItemRenderState::Visible;
@@ -84,25 +84,25 @@ void TechTreeElement::UpdateRenderState(char selectedCivId, int unknownGameAndPl
8484 else
8585 _renderState = ItemRenderState::Disabled;
8686 }
87- else if (unknownGameAndPlayerData != 0 && selectedCivId == reinterpret_cast < char *>(unknownGameAndPlayerData)[ 349 ] ) // Player-Civ? => Mark researched/not researched elements
87+ else if (player != nullptr && selectedCivId == player-> GetCivId () ) // Player-Civ? => Mark researched/not researched elements
8888 {
8989 // Helper function to check whether research is done (parameters: some data object, research ID)
9090 short (__thiscall *CheckResearchIsDone)(int , short ) = reinterpret_cast <short (__thiscall *)(int , short )>(0x0040231B );
9191
9292 // Check if element is researched
93- if (forceNotResearched || (_age != 0 && CheckResearchIsDone (reinterpret_cast <int *>(unknownGameAndPlayerData )[1192 ], 100 + _age) != 3 ))
93+ if (forceNotResearched || (_age != 0 && CheckResearchIsDone (reinterpret_cast <int *>(player )[1192 ], 100 + _age) != 3 ))
9494 _renderState = ItemRenderState::NotResearched;
9595 else if (_elementType == ItemType::Building)
9696 {
9797 // Check if building is researched
98- char *buildingData = reinterpret_cast <char ***>(unknownGameAndPlayerData )[29 ][_elementObjectID];
98+ char *buildingData = reinterpret_cast <char ***>(player )[29 ][_elementObjectID];
9999 if (buildingData == nullptr || buildingData[90 ] != 1 )
100100 {
101101 // Check whether there is one required research that is completed
102102 // One is enough - this way we don't have to hardcode anything, although there may be inaccuracies
103103 bool researched = _requiredElements.empty ();
104104 for (TechTreeElement::RequiredElement *req : _requiredElements)
105- if (req->_elementType == TechTreeElement::ItemType::Research && CheckResearchIsDone (reinterpret_cast <int *>(unknownGameAndPlayerData )[1192 ], req->_elementObjectID ) == 3 )
105+ if (req->_elementType == TechTreeElement::ItemType::Research && CheckResearchIsDone (reinterpret_cast <int *>(player )[1192 ], req->_elementObjectID ) == 3 )
106106 {
107107 // Found
108108 researched = true ;
@@ -115,13 +115,13 @@ void TechTreeElement::UpdateRenderState(char selectedCivId, int unknownGameAndPl
115115 else if (_elementType == ItemType::Creatable)
116116 {
117117 // Check if unit is researched
118- char *unitData = reinterpret_cast <char ***>(unknownGameAndPlayerData )[29 ][_elementObjectID];
118+ char *unitData = reinterpret_cast <char ***>(player )[29 ][_elementObjectID];
119119 if (unitData == nullptr || unitData[90 ] != 1 )
120120 {
121121 // Check whether there is one required research that is completed
122122 bool researched = _requiredElements.empty ();
123123 for (TechTreeElement::RequiredElement *req : _requiredElements)
124- if (req->_elementType == TechTreeElement::ItemType::Research && CheckResearchIsDone (reinterpret_cast <int *>(unknownGameAndPlayerData )[1192 ], req->_elementObjectID ) == 3 )
124+ if (req->_elementType == TechTreeElement::ItemType::Research && CheckResearchIsDone (reinterpret_cast <int *>(player )[1192 ], req->_elementObjectID ) == 3 )
125125 {
126126 // Found
127127 researched = true ;
@@ -134,7 +134,7 @@ void TechTreeElement::UpdateRenderState(char selectedCivId, int unknownGameAndPl
134134 else if (_elementType == ItemType::Research)
135135 {
136136 // Check if research is completed
137- if (CheckResearchIsDone (reinterpret_cast <int *>(unknownGameAndPlayerData )[1192 ], _elementObjectID) != 3 )
137+ if (CheckResearchIsDone (reinterpret_cast <int *>(player )[1192 ], _elementObjectID) != 3 )
138138 _renderState = ItemRenderState::NotResearched;
139139 }
140140 }
@@ -208,7 +208,7 @@ void TechTreeElement::UpdateRenderState(char selectedCivId, int unknownGameAndPl
208208
209209 // Update render state for all children recursively
210210 for (auto &c : _children)
211- c->UpdateRenderState (selectedCivId, unknownGameAndPlayerData , _renderState == ItemRenderState::NotResearched);
211+ c->UpdateRenderState (selectedCivId, player , _renderState == ItemRenderState::NotResearched);
212212}
213213
214214TechTreeElement::RequiredElement::RequiredElement (int datFileHandle)
0 commit comments