Mercurial > mm7
changeset 193:821fd955c379
fixed potion data parsing. Somehow 3d render was affected
author | Gloval |
---|---|
date | Sat, 16 Feb 2013 18:46:59 +0400 |
parents | 1c8add70bcf9 |
children | 5979fc0de9ae 9f349addbe00 8113753ed2ae |
files | Items.cpp Items.h |
diffstat | 2 files changed, 128 insertions(+), 155 deletions(-) [+] |
line wrap: on
line diff
--- a/Items.cpp Sat Feb 16 13:28:34 2013 +0400 +++ b/Items.cpp Sat Feb 16 18:46:59 2013 +0400 @@ -1492,89 +1492,78 @@ //----- (00453B3C) -------------------------------------------------------- void ItemsTable::LoadPotions() { - char *i; // eax@3 - signed int v2; // esi@11 - char *v3; // eax@16 - char *v4; // edi@16 - __int16 v5; // ax@17 - char *v6; // esi@17 - CHAR Text; // [sp+Ch] [bp-6Ch]@26 - ItemsTable *v8; // [sp+68h] [bp-10h]@1 - int v9; // [sp+6Ch] [bp-Ch]@10 - int v10; // [sp+70h] [bp-8h]@10 - char *v11; // [sp+74h] [bp-4h]@4 + + CHAR Text[90]; // [sp+Ch] [bp-6Ch]@26 + char* test_string; + unsigned int uRow; + unsigned int uColumn; + unsigned __int8 potion_value; - v8 = this; if ( pPotionsTXT_Raw ) pAllocator->FreeChunk(pPotionsTXT_Raw); - pPotionsTXT_Raw = 0; + pPotionsTXT_Raw = NULL; pPotionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("potion.txt", 0); - for ( i = strtok(pPotionsTXT_Raw, "\t\r\n"); ; i = strtok(0, "\t\r\n") ) - { - v11 = i; - if ( !strcmp(i, "222") ) - break; - if ( !v11 ) - { -LABEL_20: - MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", 0x10u); - return; - } - } + test_string = strtok(pPotionsTXT_Raw,"\t\r\n"); + while ( 1 ) + { + if ( !test_string ) + { + MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); + return; + } + if ( !strcmp(test_string, "222") ) + break; + + test_string = strtok(NULL, "\t\r\n"); + } while ( 1 ) { - v11 = strtok(0, "\t\r\n"); - if ( !strcmp(v11, "222") ) + test_string = strtok(NULL, "\t\r\n"); + + if ( !test_string ) + { + MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); + return; + } +if ( !strcmp(test_string, "222") ) break; - if ( !v11 ) - goto LABEL_20; } - v9 = 0; - v10 = 30642; - do + + for (uRow = 0;uRow < 50; ++uRow) { - v11 = 0; - v2 = 0; - do - { - if ( !strtok(0, "\r\t\n") ) - break; - ++v2; - } - while ( v2 < 6 ); - if ( v2 != 6 ) - break; - v11 = 0; - do + int skip_count; + for (skip_count = 0;skip_count < 6; ++skip_count) { - v3 = strtok(0, "\r\t\n"); - v4 = v3; - if ( !v3 ) + if ( !strtok(NULL, "\r\t\n") ) break; - v5 = atoi(v3); - v6 = (char *)v8 + 2 * (uint)&v11[v10]; - *(_WORD *)v6 = v5; - if ( !v5 ) + } + if ( skip_count != 6 ) + break; + for (uColumn = 0; uColumn < 50; ++uColumn) + { + test_string = strtok(NULL, "\r\t\n"); + if ( !test_string ) + break; + potion_value = atoi(test_string); + char c=*test_string; + if ( !potion_value ) { - if ( tolower((unsigned __int8)*v4) == 101 ) - *(_WORD *)v6 = atoi(v4 + 1); + if ( tolower(c) == 'e' ) + potion_value = atoi(test_string + 1); else - *(_WORD *)v6 = 0; + potion_value = 0; } - ++v11; + this->potion_data[uRow][uColumn]=potion_value; } - while ( (signed int)v11 < 50 ); - if ( v11 != (char *)50 ) + if ( uColumn != 50 ) break; - strtok(0, "\r\t\n"); - v10 += 50; - ++v9; + strtok(NULL, "\r\t\n"); } - while ( v10 < 33142 ); - if ( v9 != 50 ) + + if ( uRow != 50 ) { - wsprintfA(&Text, "Error Parsing Potion Table at Row: %d Column: %d", v9, v11); - MessageBoxA(0, &Text, "Parsing Error", 0x10u); + wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn); + MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); } if ( pPotionsTXT_Raw ) { @@ -1586,100 +1575,79 @@ //----- (00453CE5) -------------------------------------------------------- void ItemsTable::LoadPotionNotes() { - char *i; // eax@3 - signed int v2; // esi@11 - char *v3; // eax@16 - char *v4; // edi@16 - __int16 v5; // ax@17 - char *v6; // esi@17 - CHAR *v7; // [sp-Ch] [bp-84h]@20 - const CHAR *v8; // [sp-8h] [bp-80h]@20 - UINT v9; // [sp-4h] [bp-7Ch]@20 - CHAR Text; // [sp+Ch] [bp-6Ch]@26 - ItemsTable *v11; // [sp+68h] [bp-10h]@1 - int v12; // [sp+6Ch] [bp-Ch]@10 - int v13; // [sp+70h] [bp-8h]@10 - char *v14; // [sp+74h] [bp-4h]@4 + + CHAR Text[90]; + char* test_string; + unsigned int uRow; + unsigned int uColumn; + unsigned __int8 potion_note; - v11 = this; if ( pPotionNotesTXT_Raw ) pAllocator->FreeChunk(pPotionNotesTXT_Raw); - pPotionNotesTXT_Raw = 0; + pPotionNotesTXT_Raw = NULL; pPotionNotesTXT_Raw = (char *)pEvents_LOD->LoadRaw("potnotes.txt", 0); - for ( i = strtok(pPotionNotesTXT_Raw, "\t\r\n"); ; i = strtok(0, "\t\r\n") ) - { - v14 = i; - if ( !strcmp(i, "222") ) - break; - if ( !v14 ) - { -LABEL_20: - v9 = 16; - v8 = "Load Error"; - v7 = "Error Pre-Parsing Potion Table"; -LABEL_27: - MessageBoxA(0, v7, v8, v9); - return; - } - } + test_string = strtok(pPotionNotesTXT_Raw ,"\t\r\n"); while ( 1 ) - { - v14 = strtok(0, "\t\r\n"); - if ( !strcmp(v14, "222") ) - break; - if ( !v14 ) - goto LABEL_20; - } - v12 = 0; - v13 = 33142; - do - { - v14 = 0; - v2 = 0; - do - { - if ( !strtok(0, "\r\t\n") ) - break; - ++v2; - } - while ( v2 < 6 ); - if ( v2 != 6 ) - break; - v14 = 0; - do - { - v3 = strtok(0, "\r\t\n"); - v4 = v3; - if ( !v3 ) - break; - v5 = atoi(v3); - v6 = (char *)v11 + 2 * (unsigned int)&v14[v13]; - *(unsigned short *)v6 = v5; - if ( !v5 ) - { - if ( tolower((unsigned __int8)*v4) == 101 ) - *(unsigned short *)v6 = atoi(v4 + 1); - else - *(unsigned short *)v6 = 0; - } - ++v14; - } - while ( (signed int)v14 < 50 ); - if ( v14 != (char *)50 ) - break; - strtok(0, "\r\t\n"); - v13 += 50; - ++v12; - } - while ( v13 < 35642 ); - if ( v12 != 50 ) - { - wsprintfA(&Text, "Error Parsing Potion Autonote Table at Row: %d Column: %d", v12, v14); - v9 = 16; - v8 = "Parsing Error"; - v7 = &Text; - goto LABEL_27; - } + { + + if ( !test_string ) + { + MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); + return; + } + if ( !strcmp(test_string, "222") ) + break; + test_string = strtok(NULL, "\t\r\n"); + } + while ( 1 ) + { + test_string = strtok(NULL, "\t\r\n"); + + if ( !test_string ) + { + MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); + return; + } + if ( !strcmp(test_string, "222") ) + break; + } + + for (uRow = 0;uRow < 50; ++uRow) + { + int skip_count; + for (skip_count = 0;skip_count < 6; ++skip_count) + { + if ( !strtok(NULL, "\r\t\n") ) + break; + } + if ( skip_count != 6 ) + break; + for (uColumn = 0; uColumn < 50; ++uColumn) + { + test_string = strtok(NULL, "\r\t\n"); + if ( !test_string ) + break; + potion_note = atoi(test_string); + char c=*test_string; + if ( !potion_note ) + { + if ( tolower(c) == 'e' ) + potion_note = atoi(test_string + 1); + else + potion_note = 0; + } + this->potion_note[uRow][uColumn]=potion_note; + } + if ( uColumn != 50 ) + break; + strtok(NULL, "\r\t\n"); + } + + if ( uRow != 50 ) + { + wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn); + MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); + } }
--- a/Items.h Sat Feb 16 13:28:34 2013 +0400 +++ b/Items.h Sat Feb 16 18:46:59 2013 +0400 @@ -178,6 +178,7 @@ #pragma pack(pop) + /* 176 */ #pragma pack(push, 1) struct ItemsTable @@ -192,7 +193,11 @@ char *Release(); - ItemDesc pItems[800]; + ItemDesc pItems[638]; + char align1[18]; + unsigned __int8 potion_data[50][50]; //int8!!!! not int16 as in decomp code. hexrays wrong!! + unsigned __int8 potion_note[50][50]; + char align2[2758]; ItemEnchantment pEnchantments[24]; ItemSpecialEnchantment pSpecialEnchantments[72]; char field_9FC0[5000];