mirror of https://github.com/OpenTTD/OpenTTD
(svn r15225) -Fix (r15126): searching for 'missing' NewGRFs gave the 'compatability loaded' NewGRF instead of the one that we're actually looking for
parent
a88883c1c1
commit
aaad553233
|
@ -666,3 +666,30 @@ void GamelogGRFUpdate(const GRFConfig *oldc, const GRFConfig *newc)
|
||||||
free(ol);
|
free(ol);
|
||||||
free(nl);
|
free(nl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the MD5 checksum of the original NewGRF that was loaded.
|
||||||
|
* @param grfid the GRF ID to search for
|
||||||
|
* @param md5sum the MD5 checksum to write to.
|
||||||
|
*/
|
||||||
|
void GamelogGetOriginalGRFMD5Checksum(uint32 grfid, byte *md5sum)
|
||||||
|
{
|
||||||
|
const LoggedAction *la = &_gamelog_action[_gamelog_actions - 1];
|
||||||
|
/* There should always be a "start game" action */
|
||||||
|
assert(_gamelog_actions > 0);
|
||||||
|
|
||||||
|
do {
|
||||||
|
const LoggedChange *lc = &la->change[la->changes - 1];
|
||||||
|
/* There should always be at least one change per action */
|
||||||
|
assert(la->changes > 0);
|
||||||
|
|
||||||
|
do {
|
||||||
|
if (lc->ct == GLCT_GRFADD && lc->grfadd.grfid == grfid) {
|
||||||
|
memcpy(md5sum, lc->grfadd.md5sum, sizeof(lc->grfadd.md5sum));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} while (lc-- != la->change);
|
||||||
|
} while (la-- != _gamelog_action);
|
||||||
|
|
||||||
|
NOT_REACHED();
|
||||||
|
}
|
||||||
|
|
|
@ -46,4 +46,6 @@ void GamelogTestGRF();
|
||||||
|
|
||||||
bool GamelogGRFBugReverse(uint32 grfid, uint16 internal_id);
|
bool GamelogGRFBugReverse(uint32 grfid, uint16 internal_id);
|
||||||
|
|
||||||
|
void GamelogGetOriginalGRFMD5Checksum(uint32 grfid, byte *md5sum);
|
||||||
|
|
||||||
#endif /* GAMELOG_H */
|
#endif /* GAMELOG_H */
|
||||||
|
|
|
@ -617,6 +617,7 @@ struct NewGRFWindow : public Window {
|
||||||
ttd_strlcpy(ci->name, c->name != NULL ? c->name : c->filename, lengthof(ci->name));
|
ttd_strlcpy(ci->name, c->name != NULL ? c->name : c->filename, lengthof(ci->name));
|
||||||
ci->unique_id = BSWAP32(c->grfid);
|
ci->unique_id = BSWAP32(c->grfid);
|
||||||
memcpy(ci->md5sum, c->md5sum, sizeof(ci->md5sum));
|
memcpy(ci->md5sum, c->md5sum, sizeof(ci->md5sum));
|
||||||
|
if (HasBit(c->flags, GCF_COMPATIBLE)) GamelogGetOriginalGRFMD5Checksum(c->grfid, ci->md5sum);
|
||||||
*cv.Append() = ci;
|
*cv.Append() = ci;
|
||||||
}
|
}
|
||||||
ShowNetworkContentListWindow(cv.Length() == 0 ? NULL : &cv, CONTENT_TYPE_NEWGRF);
|
ShowNetworkContentListWindow(cv.Length() == 0 ? NULL : &cv, CONTENT_TYPE_NEWGRF);
|
||||||
|
|
Loading…
Reference in New Issue