- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 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.
Так я писал пять с половиной лет назад...
ningun 05.02.2011 14:23 # +4
Kirinyale 05.02.2011 15:04 # +1
Самое смешное то, что в подавляющем большинстве случаев ЭТО работает правильно.
guest 05.02.2011 15:36 # 0
Kirinyale 05.02.2011 15:47 # 0
ningun 05.02.2011 15:37 # +2
Отсутствие постоянного прогресса есть регресс.
«Учиться, учиться и, ещё раз, учиться!» (В.И.Ленин)
Kirinyale 05.02.2011 15:48 # 0
TarasB 05.02.2011 17:25 # 0
Кстати, этот говнокод уныл. Просто нечитаемая простыня, и всё.
Надо бы запостить код открытия файла, пытающегося учесть формат всех предыдущих версий.
Lure Of Chaos 05.02.2011 17:34 # 0
TarasB 05.02.2011 17:58 # 0
Kirinyale 05.02.2011 19:22 # 0
Нечитаемая простыня - это да. В том и говно. Пускай даже унылое.
guest 05.02.2011 20:52 # +1
absolut 06.02.2011 10:26 # 0