Кресты / Говнокод #5539 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
if ((AnalysisType == 0) || (!m_UseExtraInfo)) {
	o1 = o2 = -1;
	do {
		fseek(F, o1, SEEK_END); Buf[0] = fgetc(F);
		if ((Buf[0] == 0xFF) || ((Buf[0] == 0x7F) && (AnalysisType == 0))) {
			o2 = o1; o1--; FFcnt = 1;
			do {
				fseek(F, o1, SEEK_END); Buf[0] = fgetc(F);
				if ((Buf[0] == 0xFF) || ((Buf[0] == 0x7F) && (AnalysisType == 0)))
					FFcnt++;
				o1--;
			}
			while ((Buf[0] == 0xFF) || ((Buf[0] == 0x7F) && (AnalysisType == 0)));
			if ((FFcnt == 71) || (FFcnt == 73)) PosTavern = o2;
			if ((PosCheater == -1) && (FFcnt > 50)) {
				PosCheater = o2; fseek(F, o2, SEEK_END);
				do {
					Buf[0] = fgetc(F);
					if (Buf[0] != 0x00) PosCheater++;
				}
				while (Buf[0] != 0x00);
			}
		}
		else o1--;
	}	
	while ((o1 > -sz) &&
		   (((AnalysisType == 1) && (PosTavern ==  -1)) ||
		    ((AnalysisType == 0) && (PosCheater == -1))));
}
else {
	o1 = o2 = -200;
	oFFcnt = -1;
	do {
		fseek(F, o1, SEEK_END);
		Buf[0] = fgetc(F); Buf[1] = fgetc(F);
		if ((Buf[0] == HL) && (Buf[1] == HR)) {
			o2 = o1 + 86;
			FFcnt = 0;
			do {
				fseek(F, o2, SEEK_END);
				Buf[0] = fgetc(F);
				if (Buf[0] == 0xFF) {
					FFcnt++; o2--;
				}
			}
			while (Buf[0] == 0xFF);
			if ((oFFcnt == -1) || (abs(72 - FFcnt) < abs(72 - oFFcnt))) {
				PosTavern = o1; oFFcnt = FFcnt;
			}
		}
		o1--;
	}
	while (o1 > -sz);
	if (PosTavern != -1)
		PosTavern = PosTavern + 86 + 0x91 * (7 - PN);

	if (m_ChangeHeroes && ((HL_new >= 0) || (HR_new >= 0))) {
		o1 = o2 = -1;
		do {
			fseek(F, o1, SEEK_END); Buf[0] = fgetc(F);
			if ((Buf[0] == 0xFF) || (Buf[0] == 0x7F)) {
				o2 = o1; o1--; FFcnt = 1;
				do {
					fseek(F, o1, SEEK_END); Buf[0] = fgetc(F);
					if ((Buf[0] == 0xFF) || (Buf[0] == 0x7F)) FFcnt++;
					o1--;
				}
				while ((Buf[0] == 0xFF) || (Buf[0] == 0x7F));
				if (FFcnt > 50) {
					PosCheater = o2; fseek(F, o2, SEEK_END);
					do {
						Buf[0] = fgetc(F);
						if (Buf[0] != 0x00) PosCheater++;
					}
					while (Buf[0] != 0x00);
				}
			}
			else o1--;
		}	
		while ((o1 > -sz) && (PosCheater == -1));
	}
}

Кустарно-мистический анализатор сейвов для Героев 3.
Так я писал пять с половиной лет назад...

Запостил: Kirinyale Kirinyale, (Updated )

Комментарии (12) RSS

    • В данном случае единственно правильным было бы выкинуть и переписать. Но для этого нужно хотя бы примерно знать формат анализируемого сейва, а я его как не знал, так и не знаю.

      Самое смешное то, что в подавляющем большинстве случаев ЭТО работает правильно.
      Ответить
      • Есть такое предположение, что подобный «топорный код» в своё время писали почти все. В том числе и автор этих строк. Вопрос в том, смог ли программист со временем, переосмыслить свои стереотипы мышления или размышления его закостенели на каком-то этапе...

        Отсутствие постоянного прогресса есть регресс.
        «Учиться, учиться и, ещё раз, учиться!» (В.И.Ленин)
        Ответить
        • Ну так это мой код и есть. Понадобилось сейчас немного подправить, заглянул - страшно стало.
          Ответить
  • Это же чистый С, не?
    Кстати, этот говнокод уныл. Просто нечитаемая простыня, и всё.

    Надо бы запостить код открытия файла, пытающегося учесть формат всех предыдущих версий.
    Ответить
    • Ну конкретно этот отрывок - чистый (или, по крайней мере, близкий к нему). А вообще прога как бы под MFC, и всё это - только малая часть одного из методов класса диалога.

      Нечитаемая простыня - это да. В том и говно. Пускай даже унылое.
      Ответить
      • MFC в любом случае не читаем, так что ничего страшного, если в проекте будет пару лишних не читаемых строчек кода.
        Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8