Changeset - r16242:afe8dfc74902
[Not reviewed]
master
0 1 0
frosch - 14 years ago 2010-10-16 21:20:46
frosch@openttd.org
(svn r20953) -Add: Resolve Grf filenames from the gamelog also using the md5sum.
1 file changed with 39 insertions and 33 deletions:
0 comments (0 inline, 0 general)
src/gamelog.cpp
Show inline comments
 
@@ -106,35 +106,33 @@ static void AddDebugText(char *buf, cons
 

	
 

	
 
/**
 
 * Prints GRF filename if found
 
 * @param buf The location in the _dbgofs buffer to draw
 
 * @param grfid GRF which filename to print
 
 */
 
static void PrintGrfFilename(char *buf, uint grfid)
 
{
 
	const GRFConfig *gc = FindGRFConfig(grfid);
 

	
 
	if (gc == NULL) return;
 

	
 
	AddDebugText(buf, ", filename: %s", gc->filename);
 
}
 

	
 
/**
 
 * Prints GRF ID, checksum and filename if found
 
 * @param buf The location in the _dbgofs buffer to draw
 
 * @param grfid GRF ID
 
 * @param md5sum array of md5sum to print
 
 * @param md5sum array of md5sum to print, if known
 
 * @param gc GrfConfig, if known
 
 */
 
static void PrintGrfInfo(char *buf, uint grfid, const uint8 *md5sum)
 
static void PrintGrfInfo(char *buf, uint grfid, const uint8 *md5sum, const GRFConfig *gc)
 
{
 
	char txt[40];
 

	
 
	md5sumToString(txt, lastof(txt), md5sum);
 
	if (md5sum != NULL) {
 
		md5sumToString(txt, lastof(txt), md5sum);
 
		AddDebugText(buf, "GRF ID %08X, checksum %s", BSWAP32(grfid), txt);
 
	} else {
 
		AddDebugText(buf, "GRF ID %08X", BSWAP32(grfid));
 
	}
 

	
 
	AddDebugText(buf, "GRF ID %08X, checksum %s", BSWAP32(grfid), txt);
 

	
 
	PrintGrfFilename(buf, grfid);
 

	
 
	if (gc != NULL) {
 
		AddDebugText(buf, ", filename: %s (md5sum matches)", gc->filename);
 
	} else {
 
		gc = FindGRFConfig(grfid);
 
		if (gc != NULL) {
 
			AddDebugText(buf, ", filename: %s (matches GRFID only)", gc->filename);
 
		} else {
 
			AddDebugText(buf, ", unknown GRF");
 
		}
 
	}
 
	return;
 
}
 

	
 
@@ -236,50 +234,58 @@ void GamelogPrint(GamelogPrintProc *proc
 
				case GLCT_GRFADD: {
 
					const GRFConfig *gc = FindGRFConfig(lc->grfadd.grfid, lc->grfadd.md5sum);
 
					AddDebugText(buf, "Added NewGRF: ");
 
					PrintGrfInfo(buf, lc->grfadd.grfid, lc->grfadd.md5sum);
 
					PrintGrfInfo(buf, lc->grfadd.grfid, lc->grfadd.md5sum, gc);
 
					if (grf_names.Contains(lc->grfadd.grfid)) AddDebugText(buf, ". Gamelog inconsistency: GrfID was already added!");
 
					grf_names[lc->grfadd.grfid] = gc;
 
					break;
 
				}
 

	
 
				case GLCT_GRFREM:
 
					AddDebugText(buf, "Removed NewGRF: %08X", BSWAP32(lc->grfrem.grfid));
 
					PrintGrfFilename(buf, lc->grfrem.grfid);
 
				case GLCT_GRFREM: {
 
					GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
 
					AddDebugText(buf, "Removed NewGRF: ");
 
					PrintGrfInfo(buf, lc->grfrem.grfid, NULL, gm != grf_names.End() ? gm->second : NULL);
 
					if (!grf_names.Erase(lc->grfrem.grfid)) AddDebugText(buf, ". Gamelog inconsistency: GrfID was never added!");
 
					break;
 
				}
 

	
 
				case GLCT_GRFCOMPAT: {
 
					const GRFConfig *gc = FindGRFConfig(lc->grfadd.grfid, lc->grfadd.md5sum);
 
					AddDebugText(buf, "Compatible NewGRF loaded: ");
 
					PrintGrfInfo(buf, lc->grfcompat.grfid, lc->grfcompat.md5sum);
 
					PrintGrfInfo(buf, lc->grfcompat.grfid, lc->grfcompat.md5sum, gc);
 
					if (!grf_names.Contains(lc->grfcompat.grfid)) AddDebugText(buf, ". Gamelog inconsistency: GrfID was never added!");
 
					grf_names[lc->grfcompat.grfid] = gc;
 
					break;
 
				}
 

	
 
				case GLCT_GRFPARAM:
 
					AddDebugText(buf, "GRF parameter changed: %08X", BSWAP32(lc->grfparam.grfid));
 
					PrintGrfFilename(buf, lc->grfparam.grfid);
 
				case GLCT_GRFPARAM: {
 
					GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
 
					AddDebugText(buf, "GRF parameter changed: ");
 
					PrintGrfInfo(buf, lc->grfparam.grfid, NULL, gm != grf_names.End() ? gm->second : NULL);
 
					if (!grf_names.Contains(lc->grfparam.grfid)) AddDebugText(buf, ". Gamelog inconsistency: GrfID was never added!");
 
					break;
 
				}
 

	
 
				case GLCT_GRFMOVE:
 
				case GLCT_GRFMOVE: {
 
					GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
 
					AddDebugText(buf, "GRF order changed: %08X moved %d places %s",
 
						BSWAP32(lc->grfmove.grfid), abs(lc->grfmove.offset), lc->grfmove.offset >= 0 ? "down" : "up" );
 
					PrintGrfFilename(buf, lc->grfmove.grfid);
 
					PrintGrfInfo(buf, lc->grfmove.grfid, NULL, gm != grf_names.End() ? gm->second : NULL);
 
					if (!grf_names.Contains(lc->grfmove.grfid)) AddDebugText(buf, ". Gamelog inconsistency: GrfID was never added!");
 
					break;
 
				}
 

	
 
				case GLCT_GRFBUG:
 
				case GLCT_GRFBUG: {
 
					GrfIDMapping::Pair *gm = grf_names.Find(lc->grfrem.grfid);
 
					switch (lc->grfbug.bug) {
 
						default: NOT_REACHED();
 
						case GBUG_VEH_LENGTH:
 
							AddDebugText(buf, "Rail vehicle changes length outside a depot: GRF ID %08X, internal ID 0x%X", BSWAP32(lc->grfbug.grfid), (uint)lc->grfbug.data);
 
							PrintGrfFilename(buf, lc->grfbug.grfid);
 
							break;
 
					}
 
					PrintGrfInfo(buf, lc->grfbug.grfid, NULL, gm != grf_names.End() ? gm->second : NULL);
 
					if (!grf_names.Contains(lc->grfbug.grfid)) AddDebugText(buf, ". Gamelog inconsistency: GrfID was never added!");
 
					break;
 
				}
 

	
 
				case GLCT_EMERGENCY:
 
					break;
0 comments (0 inline, 0 general)