В этом файле собранны дизассемблерные листинги процедур Mapedit от Blood. Комментарии и имена переменных и функций даны мной. Конечно же, нет никакой гарантии, что на самом деле это то самое. Тем не менее это помогло мне прояснить кое какие моменты структуры уровней, надеюсь поможет и вам. WBR, jm jm99[at]mail333.com Контроль версий: cseg01:00013E6E mov ebx, offset aMap_1 ; "MAP" cseg01:00013E73 lea edx, [esp+14Ch+pathbuffer] cseg01:00013E7A mov eax, offset unk_DCE8C cseg01:00013E7F call openfilefromresource cseg01:00013E84 mov ebp, eax cseg01:00013E86 test eax, eax cseg01:00013E88 jnz short loc_13EAE cseg01:00013E8A mov edx, 473h cseg01:00013E8F mov eax, offset aSrcDb_cpp_44 ; "src\\db.cpp" cseg01:00013E94 call line_moduleinfo cseg01:00013E99 lea eax, [esp+14Ch+pathbuffer] cseg01:00013EA0 push eax cseg01:00013EA1 push offset aErrorOpening_1 ; "Error opening map file %s" cseg01:00013EA6 call debugout cseg01:00013EAB add esp, 8 cseg01:00013EAE cseg01:00013EAE loc_13EAE: ; CODE XREF: sub_13E19+6Fj cseg01:00013EAE mov eax, offset unk_DCE8C cseg01:00013EB3 mov ecx, 4 cseg01:00013EB8 mov edi, offset unk_C144D cseg01:00013EBD mov edx, ebp cseg01:00013EBF mov ebx, [ebp+14h] cseg01:00013EC2 call unkMemOrResFunc1 cseg01:00013EC7 lea edx, [esp+14Ch+var_20] cseg01:00013ECE mov [esp+14Ch+var_8], ebx cseg01:00013ED5 cseg01:00013ED5 loc_13ED5: ; DATA XREF: dseg04:000D79B8o cseg01:00013ED5 mov [esp+14Ch+var_4], eax cseg01:00013EDC mov [esp+14Ch+var_28], ebx cseg01:00013EE3 mov [esp+14Ch+var_24], eax cseg01:00013EEA mov ebx, 6 cseg01:00013EEF lea eax, [esp+14Ch+var_28] cseg01:00013EF6 lea esi, [esp+14Ch+var_20] cseg01:00013EFD call sub_65CE0 cseg01:00013F02 xor eax, eax cseg01:00013F04 repe cmpsb cseg01:00013F06 jz short loc_13F0D cseg01:00013F08 sbb eax, eax cseg01:00013F0A sbb eax, 0FFFFFFFFh cseg01:00013F0D cseg01:00013F0D loc_13F0D: ; CODE XREF: sub_13E19+EDj cseg01:00013F0D test eax, eax cseg01:00013F0F jz short loc_13F2D cseg01:00013F11 mov edx, 47Dh cseg01:00013F16 mov eax, offset aSrcDb_cpp_45 ; "src\\db.cpp" cseg01:00013F1B call line_moduleinfo cseg01:00013F20 push offset aMapFileCorru_0 ; "Map file corrupted" cseg01:00013F25 call debugout cseg01:00013F2A add esp, 4 cseg01:00013F2D cseg01:00013F2D loc_13F2D: ; CODE XREF: sub_13E19+F6j cseg01:00013F2D mov eax, [esp+14Ch+mapversion] cseg01:00013F34 sar eax, 10h cseg01:00013F37 and eax, 0FF00h cseg01:00013F3C cmp eax, 600h cseg01:00013F41 jz short loc_13F6F cseg01:00013F43 cmp eax, 700h cseg01:00013F48 jnz short loc_13F53 cseg01:00013F4A mov mapVerIs7, 1 cseg01:00013F51 jmp short loc_13F6F cseg01:00013F53 ; --------------------------------------------------------------------------- cseg01:00013F53 cseg01:00013F53 loc_13F53: ; CODE XREF: sub_13E19+12Fj cseg01:00013F53 mov edx, 487h cseg01:00013F58 mov eax, offset aSrcDb_cpp_46 ; "src\\db.cpp" cseg01:00013F5D call line_moduleinfo cseg01:00013F62 push offset aMapFileIsWro_0 ; "Map file is wrong version" cseg01:00013F67 call debugout cseg01:00013F6C add esp, 4 cseg01:00013F6F cseg01:00013F6F loc_13F6F: ; CODE XREF: sub_13E19+128j Загрузка файла: cseg01:00064BA0 openfilefromresource proc near ; CODE XREF: sub_13E19+66p cseg01:00064BA0 ; sub_13F9C+A6p cseg01:00064BA0 ; saveMap+7C9p cseg01:00064BA0 ; sub_15310+20p cseg01:00064BA0 ; sub_15310+BFp cseg01:00064BA0 ; cseg01:00015481p cseg01:00064BA0 ; cseg01:00015506p cseg01:00064BA0 ; sub_157BC+3Ep cseg01:00064BA0 ; cseg01:00017F7Bp cseg01:00064BA0 ; cseg01:00017FDEp cseg01:00064BA0 ; sub_183F8+9Ep cseg01:00064BA0 ; sub_183F8+E1p cseg01:00064BA0 ; cseg01:000315FEp cseg01:00064BA0 ; cseg01:000317A3p cseg01:00064BA0 ; sub_317EC+B4p cseg01:00064BA0 ; sub_31D20+BEp cseg01:00064BA0 ; sub_62C70+11p cseg01:00064BA0 push ecx cseg01:00064BA1 push esi cseg01:00064BA2 push edi cseg01:00064BA3 mov edi, eax cseg01:00064BA5 mov esi, edx cseg01:00064BA7 mov ecx, ebx cseg01:00064BA9 test edx, edx cseg01:00064BAB jnz short loc_64BC1 cseg01:00064BAD mov ebx, 1ACh cseg01:00064BB2 mov edx, offset aSrcResource_21 ; "src\\resource.cpp" cseg01:00064BB7 mov eax, offset aNameNull ; "name != NULL" cseg01:00064BBC call assert cseg01:00064BC1 cseg01:00064BC1 loc_64BC1: ; CODE XREF: openfilefromresource+Bj cseg01:00064BC1 test ecx, ecx cseg01:00064BC3 jnz short loc_64BD9 cseg01:00064BC5 mov ebx, 1ADh cseg01:00064BCA mov edx, offset aSrcResource_22 ; "src\\resource.cpp" cseg01:00064BCF mov eax, offset aTypeNull ; "type != NULL" cseg01:00064BD4 call assert cseg01:00064BD9 cseg01:00064BD9 loc_64BD9: ; CODE XREF: openfilefromresource+23j cseg01:00064BD9 mov eax, ecx cseg01:00064BDB call strupr_ cseg01:00064BE0 mov ebx, eax cseg01:00064BE2 mov eax, esi cseg01:00064BE4 call strupr_ cseg01:00064BE9 mov edx, eax cseg01:00064BEB mov eax, edi cseg01:00064BED call sub_64600 cseg01:00064BF2 mov eax, [eax] cseg01:00064BF4 pop edi cseg01:00064BF5 pop esi cseg01:00064BF6 pop ecx cseg01:00064BF7 retn cseg01:00064BF7 openfilefromresource endp Процедуры криптовки/декриптовки: Входные данные: eax буфер edx размер ebx ключ cseg01:00012970 decrypt proc near ; CODE XREF: sub_13F9C+1E2p cseg01:00012970 ; sub_13F9C+342p cseg01:00012970 ; sub_13F9C+39Bp cseg01:00012970 ; sub_13F9C+48Ap cseg01:00012970 ; sub_13F9C+5CDp cseg01:00012970 ; sub_13F9C+791p cseg01:00012970 ; saveMap+2EDp cseg01:00012970 ; saveMap+37Fp cseg01:00012970 ; saveMap+3ADp cseg01:00012970 ; saveMap+3CAp cseg01:00012970 ; saveMap+400p cseg01:00012970 ; saveMap+44Bp cseg01:00012970 ; saveMap+498p cseg01:00012970 ; saveMap+524p cseg01:00012970 ; saveMap+56Fp cseg01:00012970 ; saveMap+617p cseg01:00012970 ; saveMap+674p cseg01:00012970 push ecx cseg01:00012971 push esi cseg01:00012972 mov esi, eax cseg01:00012974 mov ecx, edx ; размер теперь в ecx cseg01:00012976 mov edx, ebx ; ключ теперь в edx cseg01:00012978 xor eax, eax ; 0 в eax cseg01:0001297A cseg01:0001297A loc_1297A: ; DATA XREF: dseg04:000D7940o cseg01:0001297A cmp eax, ecx cseg01:0001297C jl short loc_12981 ; if ( size > 0 ) -> cseg01:0001297E pop esi cseg01:0001297F pop ecx cseg01:00012980 retn cseg01:00012981 ; --------------------------------------------------------------------------- cseg01:00012981 cseg01:00012981 loc_12981: ; CODE XREF: decrypt+Cj cseg01:00012981 ; decrypt+1Ej cseg01:00012981 mov bl, [esi+eax] cseg01:00012984 inc eax ; сместимся по буферу cseg01:00012985 xor bl, dl ; xor байт данных (bl), ключ (dl) cseg01:00012987 inc edx ; инкремент ключа cseg01:00012988 mov [esi+eax-1], bl ; положим назад закриптованную/раскриптованную информацию cseg01:0001298C cmp eax, ecx ; есть ещё данные ? cseg01:0001298E jl short loc_12981 cseg01:00012990 pop esi cseg01:00012991 pop ecx cseg01:00012992 retn cseg01:00012992 decrypt endp Расчет CRC: cseg01:00065DDC calcCRC proc near ; CODE XREF: sub_13F9C+84Fp cseg01:00065DDC ; saveMap+6CCp cseg01:00065DDC ; sub_18CA4+6Fp cseg01:00065DDC ; sub_64600+77p cseg01:00065DDC ; sub_64720+6Bp cseg01:00065DDC mov eax, 0FFFFFFFFh cseg01:00065DE1 xor ebx, ebx cseg01:00065DE3 shr ecx, 1 cseg01:00065DE5 jnb short loc_65DF8 cseg01:00065DE7 mov bl, [esi] cseg01:00065DE9 xor bl, al cseg01:00065DEB shr eax, 8 cseg01:00065DEE inc esi cseg01:00065DEF mov edx, dword_CE4A8[ebx*4] cseg01:00065DF6 xor eax, edx cseg01:00065DF8 cseg01:00065DF8 loc_65DF8: ; CODE XREF: calcCRC+9j cseg01:00065DF8 jecxz short loc_65E1F cseg01:00065DFA cseg01:00065DFA loc_65DFA: ; CODE XREF: calcCRC+41j cseg01:00065DFA mov bl, [esi] cseg01:00065DFC xor bl, al cseg01:00065DFE shr eax, 8 cseg01:00065E01 inc esi cseg01:00065E02 mov edx, dword_CE4A8[ebx*4] cseg01:00065E09 xor eax, edx cseg01:00065E0B mov bl, [esi] cseg01:00065E0D xor bl, al cseg01:00065E0F shr eax, 8 cseg01:00065E12 inc esi cseg01:00065E13 mov edx, dword_CE4A8[ebx*4] cseg01:00065E1A xor eax, edx cseg01:00065E1C dec ecx cseg01:00065E1D jnz short loc_65DFA cseg01:00065E1F cseg01:00065E1F loc_65E1F: ; CODE XREF: calcCRC+1Cj cseg01:00065E1F not eax cseg01:00065E21 retn cseg01:00065E21 calcCRC endp dseg04:000CE4A8 dword_CE4A8 dd 0 ; DATA XREF: calcCRC+13r dseg04:000CE4A8 ; calcCRC+26r dseg04:000CE4A8 ; calcCRC+37r dseg04:000CE4AC db 96h ; Ц dseg04:000CE4AD db 30h ; 0 dseg04:000CE4AE db 7 ; dseg04:000CE4AF db 77h ; w dseg04:000CE4B0 db 2Ch ; , dseg04:000CE4B1 db 61h ; a dseg04:000CE4B2 db 0Eh ; dseg04:000CE4B3 db 0EEh ; ю dseg04:000CE4B4 db 0BAh ; ¦ dseg04:000CE4B5 db 51h ; Q dseg04:000CE4B6 db 9 ; dseg04:000CE4B7 db 99h ; Щ dseg04:000CE4B8 db 19h ; dseg04:000CE4B9 db 0C4h ; - dseg04:000CE4BA db 6Dh ; m dseg04:000CE4BB db 7 ; dseg04:000CE4BC db 8Fh ; П dseg04:000CE4BD db 0F4h ; Ї dseg04:000CE4BE db 6Ah ; j dseg04:000CE4BF db 70h ; p dseg04:000CE4C0 db 35h ; 5 dseg04:000CE4C1 db 0A5h ; е dseg04:000CE4C2 db 63h ; c dseg04:000CE4C3 db 0E9h ; щ dseg04:000CE4C4 db 0A3h ; г dseg04:000CE4C5 db 95h ; Х dseg04:000CE4C6 db 64h ; d dseg04:000CE4C7 db 9Eh ; Ю dseg04:000CE4C8 db 32h ; 2 dseg04:000CE4C9 db 88h ; И dseg04:000CE4CA db 0DBh ; - dseg04:000CE4CB db 0Eh ; dseg04:000CE4CC db 0A4h ; д dseg04:000CE4CD db 0B8h ; ¬ dseg04:000CE4CE db 0DCh ; - dseg04:000CE4CF db 79h ; y dseg04:000CE4D0 db 1Eh ; dseg04:000CE4D1 db 0E9h ; щ dseg04:000CE4D2 db 0D5h ; - dseg04:000CE4D3 db 0E0h ; р dseg04:000CE4D4 db 88h ; И dseg04:000CE4D5 db 0D9h ; - dseg04:000CE4D6 db 0D2h ; T dseg04:000CE4D7 db 97h ; Ч dseg04:000CE4D8 db 2Bh ; + dseg04:000CE4D9 db 4Ch ; L dseg04:000CE4DA db 0B6h ; ¦ dseg04:000CE4DB db 9 ; dseg04:000CE4DC db 0BDh ; - dseg04:000CE4DD db 7Ch ; | dseg04:000CE4DE db 0B1h ; - dseg04:000CE4DF db 7Eh ; ~ dseg04:000CE4E0 db 7 ; dseg04:000CE4E1 db 2Dh ; - dseg04:000CE4E2 db 0B8h ; ¬ dseg04:000CE4E3 db 0E7h ; ч dseg04:000CE4E4 db 91h ; С dseg04:000CE4E5 db 1Dh ; dseg04:000CE4E6 db 0BFh ; ¬ dseg04:000CE4E7 db 90h ; Р dseg04:000CE4E8 db 64h ; d dseg04:000CE4E9 db 10h ; dseg04:000CE4EA db 0B7h ; ¬ dseg04:000CE4EB db 1Dh ; dseg04:000CE4EC db 0F2h ; Є dseg04:000CE4ED db 20h ; dseg04:000CE4EE db 0B0h ; - dseg04:000CE4EF db 6Ah ; j dseg04:000CE4F0 db 48h ; H dseg04:000CE4F1 db 71h ; q dseg04:000CE4F2 db 0B9h ; ¦ dseg04:000CE4F3 db 0F3h ; є dseg04:000CE4F4 db 0DEh ; ¦ dseg04:000CE4F5 db 41h ; A dseg04:000CE4F6 db 0BEh ; - dseg04:000CE4F7 db 84h ; Д dseg04:000CE4F8 db 7Dh ; } dseg04:000CE4F9 db 0D4h ; L dseg04:000CE4FA db 0DAh ; - dseg04:000CE4FB db 1Ah ; dseg04:000CE4FC db 0EBh ; ы dseg04:000CE4FD db 0E4h ; ф dseg04:000CE4FE db 0DDh ; ¦ dseg04:000CE4FF db 6Dh ; m dseg04:000CE500 db 51h ; Q dseg04:000CE501 db 0B5h ; ¦ dseg04:000CE502 db 0D4h ; L dseg04:000CE503 db 0F4h ; Ї dseg04:000CE504 db 0C7h ; ¦ dseg04:000CE505 db 85h ; Е dseg04:000CE506 db 0D3h ; L dseg04:000CE507 db 83h ; Г dseg04:000CE508 db 56h ; V dseg04:000CE509 db 98h ; Ш dseg04:000CE50A db 6Ch ; l dseg04:000CE50B db 13h ; dseg04:000CE50C db 0C0h ; L dseg04:000CE50D db 0A8h ; и dseg04:000CE50E db 6Bh ; k dseg04:000CE50F db 64h ; d dseg04:000CE510 db 7Ah ; z dseg04:000CE511 db 0F9h ;  dseg04:000CE512 db 62h ; b dseg04:000CE513 db 0FDh ; ¤ dseg04:000CE514 db 0ECh ; ь dseg04:000CE515 db 0C9h ; г dseg04:000CE516 db 65h ; e dseg04:000CE517 db 8Ah ; К dseg04:000CE518 db 4Fh ; O dseg04:000CE519 db 5Ch ; \ dseg04:000CE51A db 1 ; dseg04:000CE51B db 14h ; dseg04:000CE51C db 0D9h ; - dseg04:000CE51D db 6Ch ; l dseg04:000CE51E db 6 ; dseg04:000CE51F db 63h ; c dseg04:000CE520 db 63h ; c dseg04:000CE521 db 3Dh ; = dseg04:000CE522 db 0Fh ; dseg04:000CE523 db 0FAh ; · dseg04:000CE524 db 0F5h ; ї dseg04:000CE525 db 0Dh ; dseg04:000CE526 db 8 ; dseg04:000CE527 db 8Dh ; Н dseg04:000CE528 db 0C8h ; L dseg04:000CE529 db 20h ; dseg04:000CE52A db 6Eh ; n dseg04:000CE52B db 3Bh ; ; dseg04:000CE52C db 5Eh ; ^ dseg04:000CE52D db 10h ; dseg04:000CE52E db 69h ; i dseg04:000CE52F db 4Ch ; L dseg04:000CE530 db 0E4h ; ф dseg04:000CE531 db 41h ; A dseg04:000CE532 db 60h ; ` dseg04:000CE533 db 0D5h ; - dseg04:000CE534 db 72h ; r dseg04:000CE535 db 71h ; q dseg04:000CE536 db 67h ; g dseg04:000CE537 db 0A2h ; в dseg04:000CE538 db 0D1h ; T dseg04:000CE539 db 0E4h ; ф dseg04:000CE53A db 3 ; dseg04:000CE53B db 3Ch ; < dseg04:000CE53C db 47h ; G dseg04:000CE53D db 0D4h ; L dseg04:000CE53E db 4 ; dseg04:000CE53F db 4Bh ; K dseg04:000CE540 db 0FDh ; ¤ dseg04:000CE541 db 85h ; Е dseg04:000CE542 db 0Dh ; dseg04:000CE543 db 0D2h ; T dseg04:000CE544 db 6Bh ; k dseg04:000CE545 db 0B5h ; ¦ dseg04:000CE546 db 0Ah ; dseg04:000CE547 db 0A5h ; е dseg04:000CE548 db 0FAh ; · dseg04:000CE549 db 0A8h ; и dseg04:000CE54A db 0B5h ; ¦ dseg04:000CE54B db 35h ; 5 dseg04:000CE54C db 6Ch ; l dseg04:000CE54D db 98h ; Ш dseg04:000CE54E db 0B2h ; - dseg04:000CE54F db 42h ; B dseg04:000CE550 db 0D6h ; г dseg04:000CE551 db 0C9h ; г dseg04:000CE552 db 0BBh ; ¬ dseg04:000CE553 db 0DBh ; - dseg04:000CE554 db 40h ; @ dseg04:000CE555 db 0F9h ;  dseg04:000CE556 db 0BCh ; - dseg04:000CE557 db 0ACh ; м dseg04:000CE558 db 0E3h ; у dseg04:000CE559 db 6Ch ; l dseg04:000CE55A db 0D8h ; + dseg04:000CE55B db 32h ; 2 dseg04:000CE55C db 75h ; u dseg04:000CE55D db 5Ch ; \ dseg04:000CE55E db 0DFh ; - dseg04:000CE55F db 45h ; E dseg04:000CE560 db 0CFh ; ¦ dseg04:000CE561 db 0Dh ; dseg04:000CE562 db 0D6h ; г dseg04:000CE563 db 0DCh ; - dseg04:000CE564 db 59h ; Y dseg04:000CE565 db 3Dh ; = dseg04:000CE566 db 0D1h ; T dseg04:000CE567 db 0ABh ; л dseg04:000CE568 db 0ACh ; м dseg04:000CE569 db 30h ; 0 dseg04:000CE56A db 0D9h ; - dseg04:000CE56B db 26h ; & dseg04:000CE56C db 3Ah ; : dseg04:000CE56D db 0 ; dseg04:000CE56E db 0DEh ; ¦ dseg04:000CE56F db 51h ; Q dseg04:000CE570 db 80h ; А dseg04:000CE571 db 51h ; Q dseg04:000CE572 db 0D7h ; + dseg04:000CE573 db 0C8h ; L dseg04:000CE574 db 16h ; dseg04:000CE575 db 61h ; a dseg04:000CE576 db 0D0h ; ¦ dseg04:000CE577 db 0BFh ; ¬ dseg04:000CE578 db 0B5h ; ¦ dseg04:000CE579 db 0F4h ; Ї dseg04:000CE57A db 0B4h ; + dseg04:000CE57B db 21h ; ! dseg04:000CE57C db 23h ; # dseg04:000CE57D db 0C4h ; - dseg04:000CE57E db 0B3h ; ¦ dseg04:000CE57F db 56h ; V dseg04:000CE580 db 99h ; Щ dseg04:000CE581 db 95h ; Х dseg04:000CE582 db 0BAh ; ¦ dseg04:000CE583 db 0CFh ; ¦ dseg04:000CE584 db 0Fh ; dseg04:000CE585 db 0A5h ; е dseg04:000CE586 db 0BDh ; - dseg04:000CE587 db 0B8h ; ¬ dseg04:000CE588 db 9Eh ; Ю dseg04:000CE589 db 0B8h ; ¬ dseg04:000CE58A db 2 ; dseg04:000CE58B db 28h ; ( dseg04:000CE58C db 8 ; dseg04:000CE58D db 88h ; И dseg04:000CE58E db 5 ; dseg04:000CE58F db 5Fh ; _ dseg04:000CE590 db 0B2h ; - dseg04:000CE591 db 0D9h ; - dseg04:000CE592 db 0Ch ; dseg04:000CE593 db 0C6h ; ¦ dseg04:000CE594 db 24h ; $ dseg04:000CE595 db 0E9h ; щ dseg04:000CE596 db 0Bh ; dseg04:000CE597 db 0B1h ; - dseg04:000CE598 db 87h ; З dseg04:000CE599 db 7Ch ; | dseg04:000CE59A db 6Fh ; o dseg04:000CE59B db 2Fh ; / dseg04:000CE59C db 11h ; dseg04:000CE59D db 4Ch ; L dseg04:000CE59E db 68h ; h dseg04:000CE59F db 58h ; X dseg04:000CE5A0 db 0ABh ; л dseg04:000CE5A1 db 1Dh ; dseg04:000CE5A2 db 61h ; a dseg04:000CE5A3 db 0C1h ; + dseg04:000CE5A4 db 3Dh ; = dseg04:000CE5A5 db 2Dh ; - dseg04:000CE5A6 db 66h ; f dseg04:000CE5A7 db 0B6h ; ¦ dseg04:000CE5A8 db 90h ; Р dseg04:000CE5A9 db 41h ; A dseg04:000CE5AA db 0DCh ; - dseg04:000CE5AB db 76h ; v dseg04:000CE5AC db 6 ; dseg04:000CE5AD db 71h ; q dseg04:000CE5AE db 0DBh ; - dseg04:000CE5AF db 1 ; dseg04:000CE5B0 db 0BCh ; - dseg04:000CE5B1 db 20h ; dseg04:000CE5B2 db 0D2h ; T dseg04:000CE5B3 db 98h ; Ш dseg04:000CE5B4 db 2Ah ; * dseg04:000CE5B5 db 10h ; dseg04:000CE5B6 db 0D5h ; - dseg04:000CE5B7 db 0EFh ; я dseg04:000CE5B8 db 89h ; Й dseg04:000CE5B9 db 85h ; Е dseg04:000CE5BA db 0B1h ; - dseg04:000CE5BB db 71h ; q dseg04:000CE5BC db 1Fh ; dseg04:000CE5BD db 0B5h ; ¦ dseg04:000CE5BE db 0B6h ; ¦ dseg04:000CE5BF db 6 ; dseg04:000CE5C0 db 0A5h ; е dseg04:000CE5C1 db 0E4h ; ф dseg04:000CE5C2 db 0BFh ; ¬ dseg04:000CE5C3 db 9Fh ; Я dseg04:000CE5C4 db 33h ; 3 dseg04:000CE5C5 db 0D4h ; L dseg04:000CE5C6 db 0B8h ; ¬ dseg04:000CE5C7 db 0E8h ; ш dseg04:000CE5C8 db 0A2h ; в dseg04:000CE5C9 db 0C9h ; г dseg04:000CE5CA db 7 ; dseg04:000CE5CB db 78h ; x dseg04:000CE5CC db 34h ; 4 dseg04:000CE5CD db 0F9h ;  dseg04:000CE5CE db 0 ; dseg04:000CE5CF db 0Fh ; dseg04:000CE5D0 db 8Eh ; О dseg04:000CE5D1 db 0A8h ; и dseg04:000CE5D2 db 9 ; dseg04:000CE5D3 db 96h ; Ц dseg04:000CE5D4 db 18h ; dseg04:000CE5D5 db 98h ; Ш dseg04:000CE5D6 db 0Eh ; dseg04:000CE5D7 db 0E1h ; с dseg04:000CE5D8 db 0BBh ; ¬ dseg04:000CE5D9 db 0Dh ; dseg04:000CE5DA db 6Ah ; j dseg04:000CE5DB db 7Fh ;  dseg04:000CE5DC db 2Dh ; - dseg04:000CE5DD db 3Dh ; = dseg04:000CE5DE db 6Dh ; m dseg04:000CE5DF db 8 ; dseg04:000CE5E0 db 97h ; Ч dseg04:000CE5E1 db 6Ch ; l dseg04:000CE5E2 db 64h ; d dseg04:000CE5E3 db 91h ; С dseg04:000CE5E4 db 1 ; dseg04:000CE5E5 db 5Ch ; \ dseg04:000CE5E6 db 63h ; c dseg04:000CE5E7 db 0E6h ; ц dseg04:000CE5E8 db 0F4h ; Ї dseg04:000CE5E9 db 51h ; Q dseg04:000CE5EA db 6Bh ; k dseg04:000CE5EB db 6Bh ; k dseg04:000CE5EC db 62h ; b dseg04:000CE5ED db 61h ; a dseg04:000CE5EE db 6Ch ; l dseg04:000CE5EF db 1Ch ; dseg04:000CE5F0 db 0D8h ; + dseg04:000CE5F1 db 30h ; 0 dseg04:000CE5F2 db 65h ; e dseg04:000CE5F3 db 85h ; Е dseg04:000CE5F4 db 4Eh ; N dseg04:000CE5F5 db 0 ; dseg04:000CE5F6 db 62h ; b dseg04:000CE5F7 db 0F2h ; Є dseg04:000CE5F8 db 0EDh ; э dseg04:000CE5F9 db 95h ; Х dseg04:000CE5FA db 6 ; dseg04:000CE5FB db 6Ch ; l dseg04:000CE5FC db 7Bh ; { dseg04:000CE5FD db 0A5h ; е dseg04:000CE5FE db 1 ; dseg04:000CE5FF db 1Bh ; dseg04:000CE600 db 0C1h ; + dseg04:000CE601 db 0F4h ; Ї dseg04:000CE602 db 8 ; dseg04:000CE603 db 82h ; В dseg04:000CE604 db 57h ; W dseg04:000CE605 db 0C4h ; - dseg04:000CE606 db 0Fh ; dseg04:000CE607 db 0F5h ; ї dseg04:000CE608 db 0C6h ; ¦ dseg04:000CE609 db 0D9h ; - dseg04:000CE60A db 0B0h ; - dseg04:000CE60B db 65h ; e dseg04:000CE60C db 50h ; P dseg04:000CE60D db 0E9h ; щ dseg04:000CE60E db 0B7h ; ¬ dseg04:000CE60F db 12h ; dseg04:000CE610 db 0EAh ; ъ dseg04:000CE611 db 0B8h ; ¬ dseg04:000CE612 db 0BEh ; - dseg04:000CE613 db 8Bh ; Л dseg04:000CE614 db 7Ch ; | dseg04:000CE615 db 88h ; И dseg04:000CE616 db 0B9h ; ¦ dseg04:000CE617 db 0FCh ; № dseg04:000CE618 db 0DFh ; - dseg04:000CE619 db 1Dh ; dseg04:000CE61A db 0DDh ; ¦ dseg04:000CE61B db 62h ; b dseg04:000CE61C db 49h ; I dseg04:000CE61D db 2Dh ; - dseg04:000CE61E db 0DAh ; - dseg04:000CE61F db 15h ; dseg04:000CE620 db 0F3h ; є dseg04:000CE621 db 7Ch ; | dseg04:000CE622 db 0D3h ; L dseg04:000CE623 db 8Ch ; М dseg04:000CE624 db 65h ; e dseg04:000CE625 db 4Ch ; L dseg04:000CE626 db 0D4h ; L dseg04:000CE627 db 0FBh ; v dseg04:000CE628 db 58h ; X dseg04:000CE629 db 61h ; a dseg04:000CE62A db 0B2h ; - dseg04:000CE62B db 4Dh ; M dseg04:000CE62C db 0CEh ; + dseg04:000CE62D db 51h ; Q dseg04:000CE62E db 0B5h ; ¦ dseg04:000CE62F db 3Ah ; : dseg04:000CE630 db 74h ; t dseg04:000CE631 db 0 ; dseg04:000CE632 db 0BCh ; - dseg04:000CE633 db 0A3h ; г dseg04:000CE634 db 0E2h ; т dseg04:000CE635 db 30h ; 0 dseg04:000CE636 db 0BBh ; ¬ dseg04:000CE637 db 0D4h ; L dseg04:000CE638 db 41h ; A dseg04:000CE639 db 0A5h ; е dseg04:000CE63A db 0DFh ; - dseg04:000CE63B db 4Ah ; J dseg04:000CE63C db 0D7h ; + dseg04:000CE63D db 95h ; Х dseg04:000CE63E db 0D8h ; + dseg04:000CE63F db 3Dh ; = dseg04:000CE640 db 6Dh ; m dseg04:000CE641 db 0C4h ; - dseg04:000CE642 db 0D1h ; T dseg04:000CE643 db 0A4h ; д dseg04:000CE644 db 0FBh ; v dseg04:000CE645 db 0F4h ; Ї dseg04:000CE646 db 0D6h ; г dseg04:000CE647 db 0D3h ; L dseg04:000CE648 db 6Ah ; j dseg04:000CE649 db 0E9h ; щ dseg04:000CE64A db 69h ; i dseg04:000CE64B db 43h ; C dseg04:000CE64C db 0FCh ; № dseg04:000CE64D db 0D9h ; - dseg04:000CE64E db 6Eh ; n dseg04:000CE64F db 34h ; 4 dseg04:000CE650 db 46h ; F dseg04:000CE651 db 88h ; И dseg04:000CE652 db 67h ; g dseg04:000CE653 db 0ADh ; н dseg04:000CE654 db 0D0h ; ¦ dseg04:000CE655 db 0B8h ; ¬ dseg04:000CE656 db 60h ; ` dseg04:000CE657 db 0DAh ; - dseg04:000CE658 db 73h ; s dseg04:000CE659 db 2Dh ; - dseg04:000CE65A db 4 ; dseg04:000CE65B db 44h ; D dseg04:000CE65C db 0E5h ; х dseg04:000CE65D db 1Dh ; dseg04:000CE65E db 3 ; dseg04:000CE65F db 33h ; 3 dseg04:000CE660 db 5Fh ; _ dseg04:000CE661 db 4Ch ; L dseg04:000CE662 db 0Ah ; dseg04:000CE663 db 0AAh ; к dseg04:000CE664 db 0C9h ; г dseg04:000CE665 db 7Ch ; | dseg04:000CE666 db 0Dh ; dseg04:000CE667 db 0DDh ; ¦ dseg04:000CE668 db 3Ch ; < dseg04:000CE669 db 71h ; q dseg04:000CE66A db 5 ; dseg04:000CE66B db 50h ; P dseg04:000CE66C db 0AAh ; к dseg04:000CE66D db 41h ; A dseg04:000CE66E db 2 ; dseg04:000CE66F db 27h ; ' dseg04:000CE670 db 10h ; dseg04:000CE671 db 10h ; dseg04:000CE672 db 0Bh ; dseg04:000CE673 db 0BEh ; - dseg04:000CE674 db 86h ; Ж dseg04:000CE675 db 20h ; dseg04:000CE676 db 0Ch ; dseg04:000CE677 db 0C9h ; г dseg04:000CE678 db 25h ; % dseg04:000CE679 db 0B5h ; ¦ dseg04:000CE67A db 68h ; h dseg04:000CE67B db 57h ; W dseg04:000CE67C db 0B3h ; ¦ dseg04:000CE67D db 85h ; Е dseg04:000CE67E db 6Fh ; o dseg04:000CE67F db 20h ; dseg04:000CE680 db 9 ; dseg04:000CE681 db 0D4h ; L dseg04:000CE682 db 66h ; f dseg04:000CE683 db 0B9h ; ¦ dseg04:000CE684 db 9Fh ; Я dseg04:000CE685 db 0E4h ; ф dseg04:000CE686 db 61h ; a dseg04:000CE687 db 0CEh ; + dseg04:000CE688 db 0Eh ; dseg04:000CE689 db 0F9h ;  dseg04:000CE68A db 0DEh ; ¦ dseg04:000CE68B db 5Eh ; ^ dseg04:000CE68C db 98h ; Ш dseg04:000CE68D db 0C9h ; г dseg04:000CE68E db 0D9h ; - dseg04:000CE68F db 29h ; ) dseg04:000CE690 db 22h ; " dseg04:000CE691 db 98h ; Ш dseg04:000CE692 db 0D0h ; ¦ dseg04:000CE693 db 0B0h ; - dseg04:000CE694 db 0B4h ; + dseg04:000CE695 db 0A8h ; и dseg04:000CE696 db 0D7h ; + dseg04:000CE697 db 0C7h ; ¦ dseg04:000CE698 db 17h ; dseg04:000CE699 db 3Dh ; = dseg04:000CE69A db 0B3h ; ¦ dseg04:000CE69B db 59h ; Y dseg04:000CE69C db 81h ; Б dseg04:000CE69D db 0Dh ; dseg04:000CE69E db 0B4h ; + dseg04:000CE69F db 2Eh ; . dseg04:000CE6A0 db 3Bh ; ; dseg04:000CE6A1 db 5Ch ; \ dseg04:000CE6A2 db 0BDh ; - dseg04:000CE6A3 db 0B7h ; ¬ dseg04:000CE6A4 db 0ADh ; н dseg04:000CE6A5 db 6Ch ; l dseg04:000CE6A6 db 0BAh ; ¦ dseg04:000CE6A7 db 0C0h ; L dseg04:000CE6A8 db 20h ; dseg04:000CE6A9 db 83h ; Г dseg04:000CE6AA db 0B8h ; ¬ dseg04:000CE6AB db 0EDh ; э dseg04:000CE6AC db 0B6h ; ¦ dseg04:000CE6AD db 0B3h ; ¦ dseg04:000CE6AE db 0BFh ; ¬ dseg04:000CE6AF db 9Ah ; Ъ dseg04:000CE6B0 db 0Ch ; dseg04:000CE6B1 db 0E2h ; т dseg04:000CE6B2 db 0B6h ; ¦ dseg04:000CE6B3 db 3 ; dseg04:000CE6B4 db 9Ah ; Ъ dseg04:000CE6B5 db 0D2h ; T dseg04:000CE6B6 db 0B1h ; - dseg04:000CE6B7 db 74h ; t dseg04:000CE6B8 db 39h ; 9 dseg04:000CE6B9 db 47h ; G dseg04:000CE6BA db 0D5h ; - dseg04:000CE6BB db 0EAh ; ъ dseg04:000CE6BC db 0AFh ; п dseg04:000CE6BD db 77h ; w dseg04:000CE6BE db 0D2h ; T dseg04:000CE6BF db 9Dh ; Э dseg04:000CE6C0 db 15h ; dseg04:000CE6C1 db 26h ; & dseg04:000CE6C2 db 0DBh ; - dseg04:000CE6C3 db 4 ; dseg04:000CE6C4 db 83h ; Г dseg04:000CE6C5 db 16h ; dseg04:000CE6C6 db 0DCh ; - dseg04:000CE6C7 db 73h ; s dseg04:000CE6C8 db 12h ; dseg04:000CE6C9 db 0Bh ; dseg04:000CE6CA db 63h ; c dseg04:000CE6CB db 0E3h ; у dseg04:000CE6CC db 84h ; Д dseg04:000CE6CD db 3Bh ; ; dseg04:000CE6CE db 64h ; d dseg04:000CE6CF db 94h ; Ф dseg04:000CE6D0 db 3Eh ; > dseg04:000CE6D1 db 6Ah ; j dseg04:000CE6D2 db 6Dh ; m dseg04:000CE6D3 db 0Dh ; dseg04:000CE6D4 db 0A8h ; и dseg04:000CE6D5 db 5Ah ; Z dseg04:000CE6D6 db 6Ah ; j dseg04:000CE6D7 db 7Ah ; z dseg04:000CE6D8 db 0Bh ; dseg04:000CE6D9 db 0CFh ; ¦ dseg04:000CE6DA db 0Eh ; dseg04:000CE6DB db 0E4h ; ф dseg04:000CE6DC db 9Dh ; Э dseg04:000CE6DD db 0FFh ; dseg04:000CE6DE db 9 ; dseg04:000CE6DF db 93h ; У dseg04:000CE6E0 db 27h ; ' dseg04:000CE6E1 db 0AEh ; о dseg04:000CE6E2 db 0 ; dseg04:000CE6E3 db 0Ah ; dseg04:000CE6E4 db 0B1h ; - dseg04:000CE6E5 db 9Eh ; Ю dseg04:000CE6E6 db 7 ; dseg04:000CE6E7 db 7Dh ; } dseg04:000CE6E8 db 44h ; D dseg04:000CE6E9 db 93h ; У dseg04:000CE6EA db 0Fh ; dseg04:000CE6EB db 0F0h ; Ё dseg04:000CE6EC db 0D2h ; T dseg04:000CE6ED db 0A3h ; г dseg04:000CE6EE db 8 ; dseg04:000CE6EF db 87h ; З dseg04:000CE6F0 db 68h ; h dseg04:000CE6F1 db 0F2h ; Є dseg04:000CE6F2 db 1 ; dseg04:000CE6F3 db 1Eh ; dseg04:000CE6F4 db 0FEh ; ¦ dseg04:000CE6F5 db 0C2h ; T dseg04:000CE6F6 db 6 ; dseg04:000CE6F7 db 69h ; i dseg04:000CE6F8 db 5Dh ; ] dseg04:000CE6F9 db 57h ; W dseg04:000CE6FA db 62h ; b dseg04:000CE6FB db 0F7h ; ў dseg04:000CE6FC db 0CBh ; T dseg04:000CE6FD db 67h ; g dseg04:000CE6FE db 65h ; e dseg04:000CE6FF db 80h ; А dseg04:000CE700 db 71h ; q dseg04:000CE701 db 36h ; 6 dseg04:000CE702 db 6Ch ; l dseg04:000CE703 db 19h ; dseg04:000CE704 db 0E7h ; ч dseg04:000CE705 db 6 ; dseg04:000CE706 db 6Bh ; k dseg04:000CE707 db 6Eh ; n dseg04:000CE708 db 76h ; v dseg04:000CE709 db 1Bh ; dseg04:000CE70A db 0D4h ; L dseg04:000CE70B db 0FEh ; ¦ dseg04:000CE70C db 0E0h ; р dseg04:000CE70D db 2Bh ; + dseg04:000CE70E db 0D3h ; L dseg04:000CE70F db 89h ; Й dseg04:000CE710 db 5Ah ; Z dseg04:000CE711 db 7Ah ; z dseg04:000CE712 db 0DAh ; - dseg04:000CE713 db 10h ; dseg04:000CE714 db 0CCh ; ¦ dseg04:000CE715 db 4Ah ; J dseg04:000CE716 db 0DDh ; ¦ dseg04:000CE717 db 67h ; g dseg04:000CE718 db 6Fh ; o dseg04:000CE719 db 0DFh ; - dseg04:000CE71A db 0B9h ; ¦ dseg04:000CE71B db 0F9h ;  dseg04:000CE71C db 0F9h ;  dseg04:000CE71D db 0EFh ; я dseg04:000CE71E db 0BEh ; - dseg04:000CE71F db 8Eh ; О dseg04:000CE720 db 43h ; C dseg04:000CE721 db 0BEh ; - dseg04:000CE722 db 0B7h ; ¬ dseg04:000CE723 db 17h ; dseg04:000CE724 db 0D5h ; - dseg04:000CE725 db 8Eh ; О dseg04:000CE726 db 0B0h ; - dseg04:000CE727 db 60h ; ` dseg04:000CE728 db 0E8h ; ш dseg04:000CE729 db 0A3h ; г dseg04:000CE72A db 0D6h ; г dseg04:000CE72B db 0D6h ; г dseg04:000CE72C db 7Eh ; ~ dseg04:000CE72D db 93h ; У dseg04:000CE72E db 0D1h ; T dseg04:000CE72F db 0A1h ; б dseg04:000CE730 db 0C4h ; - dseg04:000CE731 db 0C2h ; T dseg04:000CE732 db 0D8h ; + dseg04:000CE733 db 38h ; 8 dseg04:000CE734 db 52h ; R dseg04:000CE735 db 0F2h ; Є dseg04:000CE736 db 0DFh ; - dseg04:000CE737 db 4Fh ; O dseg04:000CE738 db 0F1h ; ё dseg04:000CE739 db 67h ; g dseg04:000CE73A db 0BBh ; ¬ dseg04:000CE73B db 0D1h ; T dseg04:000CE73C db 67h ; g dseg04:000CE73D db 57h ; W dseg04:000CE73E db 0BCh ; - dseg04:000CE73F db 0A6h ; ж dseg04:000CE740 db 0DDh ; ¦ dseg04:000CE741 db 6 ; dseg04:000CE742 db 0B5h ; ¦ dseg04:000CE743 db 3Fh ; ? dseg04:000CE744 db 4Bh ; K dseg04:000CE745 db 36h ; 6 dseg04:000CE746 db 0B2h ; - dseg04:000CE747 db 48h ; H dseg04:000CE748 db 0DAh ; - dseg04:000CE749 db 2Bh ; + dseg04:000CE74A db 0Dh ; dseg04:000CE74B db 0D8h ; + dseg04:000CE74C db 4Ch ; L dseg04:000CE74D db 1Bh ; dseg04:000CE74E db 0Ah ; dseg04:000CE74F db 0AFh ; п dseg04:000CE750 db 0F6h ; Ў dseg04:000CE751 db 4Ah ; J dseg04:000CE752 db 3 ; dseg04:000CE753 db 36h ; 6 dseg04:000CE754 db 60h ; ` dseg04:000CE755 db 7Ah ; z dseg04:000CE756 db 4 ; dseg04:000CE757 db 41h ; A dseg04:000CE758 db 0C3h ; + dseg04:000CE759 db 0EFh ; я dseg04:000CE75A db 60h ; ` dseg04:000CE75B db 0DFh ; - dseg04:000CE75C db 55h ; U dseg04:000CE75D db 0DFh ; - dseg04:000CE75E db 67h ; g dseg04:000CE75F db 0A8h ; и dseg04:000CE760 db 0EFh ; я dseg04:000CE761 db 8Eh ; О dseg04:000CE762 db 6Eh ; n dseg04:000CE763 db 31h ; 1 dseg04:000CE764 db 79h ; y dseg04:000CE765 db 0BEh ; - dseg04:000CE766 db 69h ; i dseg04:000CE767 db 46h ; F dseg04:000CE768 db 8Ch ; М dseg04:000CE769 db 0B3h ; ¦ dseg04:000CE76A db 61h ; a dseg04:000CE76B db 0CBh ; T dseg04:000CE76C db 1Ah ; dseg04:000CE76D db 83h ; Г dseg04:000CE76E db 66h ; f dseg04:000CE76F db 0BCh ; - dseg04:000CE770 db 0A0h ; а dseg04:000CE771 db 0D2h ; T dseg04:000CE772 db 6Fh ; o dseg04:000CE773 db 25h ; % dseg04:000CE774 db 36h ; 6 dseg04:000CE775 db 0E2h ; т dseg04:000CE776 db 68h ; h dseg04:000CE777 db 52h ; R dseg04:000CE778 db 95h ; Х dseg04:000CE779 db 77h ; w dseg04:000CE77A db 0Ch ; dseg04:000CE77B db 0CCh ; ¦ dseg04:000CE77C db 3 ; dseg04:000CE77D db 47h ; G dseg04:000CE77E db 0Bh ; dseg04:000CE77F db 0BBh ; ¬ dseg04:000CE780 db 0B9h ; ¦ dseg04:000CE781 db 16h ; dseg04:000CE782 db 2 ; dseg04:000CE783 db 22h ; " dseg04:000CE784 db 2Fh ; / dseg04:000CE785 db 26h ; & dseg04:000CE786 db 5 ; dseg04:000CE787 db 55h ; U dseg04:000CE788 db 0BEh ; - dseg04:000CE789 db 3Bh ; ; dseg04:000CE78A db 0BAh ; ¦ dseg04:000CE78B db 0C5h ; + dseg04:000CE78C db 28h ; ( dseg04:000CE78D db 0Bh ; dseg04:000CE78E db 0BDh ; - dseg04:000CE78F db 0B2h ; - dseg04:000CE790 db 92h ; Т dseg04:000CE791 db 5Ah ; Z dseg04:000CE792 db 0B4h ; + dseg04:000CE793 db 2Bh ; + dseg04:000CE794 db 4 ; dseg04:000CE795 db 6Ah ; j dseg04:000CE796 db 0B3h ; ¦ dseg04:000CE797 db 5Ch ; \ dseg04:000CE798 db 0A7h ; з dseg04:000CE799 db 0FFh ; dseg04:000CE79A db 0D7h ; + dseg04:000CE79B db 0C2h ; T dseg04:000CE79C db 31h ; 1 dseg04:000CE79D db 0CFh ; ¦ dseg04:000CE79E db 0D0h ; ¦ dseg04:000CE79F db 0B5h ; ¦ dseg04:000CE7A0 db 8Bh ; Л dseg04:000CE7A1 db 9Eh ; Ю dseg04:000CE7A2 db 0D9h ; - dseg04:000CE7A3 db 2Ch ; , dseg04:000CE7A4 db 1Dh ; dseg04:000CE7A5 db 0AEh ; о dseg04:000CE7A6 db 0DEh ; ¦ dseg04:000CE7A7 db 5Bh ; [ dseg04:000CE7A8 db 0B0h ; - dseg04:000CE7A9 db 0C2h ; T dseg04:000CE7AA db 64h ; d dseg04:000CE7AB db 9Bh ; Ы dseg04:000CE7AC db 26h ; & dseg04:000CE7AD db 0F2h ; Є dseg04:000CE7AE db 63h ; c dseg04:000CE7AF db 0ECh ; ь dseg04:000CE7B0 db 9Ch ; Ь dseg04:000CE7B1 db 0A3h ; г dseg04:000CE7B2 db 6Ah ; j dseg04:000CE7B3 db 75h ; u dseg04:000CE7B4 db 0Ah ; dseg04:000CE7B5 db 93h ; У dseg04:000CE7B6 db 6Dh ; m dseg04:000CE7B7 db 2 ; dseg04:000CE7B8 db 0A9h ; й dseg04:000CE7B9 db 6 ; dseg04:000CE7BA db 9 ; dseg04:000CE7BB db 9Ch ; Ь dseg04:000CE7BC db 3Fh ; ? dseg04:000CE7BD db 36h ; 6 dseg04:000CE7BE db 0Eh ; dseg04:000CE7BF db 0EBh ; ы dseg04:000CE7C0 db 85h ; Е dseg04:000CE7C1 db 67h ; g dseg04:000CE7C2 db 7 ; dseg04:000CE7C3 db 72h ; r dseg04:000CE7C4 db 13h ; dseg04:000CE7C5 db 57h ; W dseg04:000CE7C6 db 0 ; dseg04:000CE7C7 db 5 ; dseg04:000CE7C8 db 82h ; В dseg04:000CE7C9 db 4Ah ; J dseg04:000CE7CA db 0BFh ; ¬ dseg04:000CE7CB db 95h ; Х dseg04:000CE7CC db 14h ; dseg04:000CE7CD db 7Ah ; z dseg04:000CE7CE db 0B8h ; ¬ dseg04:000CE7CF db 0E2h ; т dseg04:000CE7D0 db 0AEh ; о dseg04:000CE7D1 db 2Bh ; + dseg04:000CE7D2 db 0B1h ; - dseg04:000CE7D3 db 7Bh ; { dseg04:000CE7D4 db 38h ; 8 dseg04:000CE7D5 db 1Bh ; dseg04:000CE7D6 db 0B6h ; ¦ dseg04:000CE7D7 db 0Ch ; dseg04:000CE7D8 db 9Bh ; Ы dseg04:000CE7D9 db 8Eh ; О dseg04:000CE7DA db 0D2h ; T dseg04:000CE7DB db 92h ; Т dseg04:000CE7DC db 0Dh ; dseg04:000CE7DD db 0BEh ; - dseg04:000CE7DE db 0D5h ; - dseg04:000CE7DF db 0E5h ; х dseg04:000CE7E0 db 0B7h ; ¬ dseg04:000CE7E1 db 0EFh ; я dseg04:000CE7E2 db 0DCh ; - dseg04:000CE7E3 db 7Ch ; | dseg04:000CE7E4 db 21h ; ! dseg04:000CE7E5 db 0DFh ; - dseg04:000CE7E6 db 0DBh ; - dseg04:000CE7E7 db 0Bh ; dseg04:000CE7E8 db 0D4h ; L dseg04:000CE7E9 db 0D2h ; T dseg04:000CE7EA db 0D3h ; L dseg04:000CE7EB db 86h ; Ж dseg04:000CE7EC db 42h ; B dseg04:000CE7ED db 0E2h ; т dseg04:000CE7EE db 0D4h ; L dseg04:000CE7EF db 0F1h ; ё dseg04:000CE7F0 db 0F8h ; ° dseg04:000CE7F1 db 0B3h ; ¦ dseg04:000CE7F2 db 0DDh ; ¦ dseg04:000CE7F3 db 68h ; h dseg04:000CE7F4 db 6Eh ; n dseg04:000CE7F5 db 83h ; Г dseg04:000CE7F6 db 0DAh ; - dseg04:000CE7F7 db 1Fh ; dseg04:000CE7F8 db 0CDh ; = dseg04:000CE7F9 db 16h ; dseg04:000CE7FA db 0BEh ; - dseg04:000CE7FB db 81h ; Б dseg04:000CE7FC db 5Bh ; [ dseg04:000CE7FD db 26h ; & dseg04:000CE7FE db 0B9h ; ¦ dseg04:000CE7FF db 0F6h ; Ў dseg04:000CE800 db 0E1h ; с dseg04:000CE801 db 77h ; w dseg04:000CE802 db 0B0h ; - dseg04:000CE803 db 6Fh ; o dseg04:000CE804 db 77h ; w dseg04:000CE805 db 47h ; G dseg04:000CE806 db 0B7h ; ¬ dseg04:000CE807 db 18h ; dseg04:000CE808 db 0E6h ; ц dseg04:000CE809 db 5Ah ; Z dseg04:000CE80A db 8 ; dseg04:000CE80B db 88h ; И dseg04:000CE80C db 70h ; p dseg04:000CE80D db 6Ah ; j dseg04:000CE80E db 0Fh ; dseg04:000CE80F db 0FFh ; dseg04:000CE810 db 0CAh ; ¦ dseg04:000CE811 db 3Bh ; ; dseg04:000CE812 db 6 ; dseg04:000CE813 db 66h ; f dseg04:000CE814 db 5Ch ; \ dseg04:000CE815 db 0Bh ; dseg04:000CE816 db 1 ; dseg04:000CE817 db 11h ; dseg04:000CE818 db 0FFh ; dseg04:000CE819 db 9Eh ; Ю dseg04:000CE81A db 65h ; e dseg04:000CE81B db 8Fh ; П dseg04:000CE81C db 69h ; i dseg04:000CE81D db 0AEh ; о dseg04:000CE81E db 62h ; b dseg04:000CE81F db 0F8h ; ° dseg04:000CE820 db 0D3h ; L dseg04:000CE821 db 0FFh ; dseg04:000CE822 db 6Bh ; k dseg04:000CE823 db 61h ; a dseg04:000CE824 db 45h ; E dseg04:000CE825 db 0CFh ; ¦ dseg04:000CE826 db 6Ch ; l dseg04:000CE827 db 16h ; dseg04:000CE828 db 78h ; x dseg04:000CE829 db 0E2h ; т dseg04:000CE82A db 0Ah ; dseg04:000CE82B db 0A0h ; а dseg04:000CE82C db 0EEh ; ю dseg04:000CE82D db 0D2h ; T dseg04:000CE82E db 0Dh ; dseg04:000CE82F db 0D7h ; + dseg04:000CE830 db 54h ; T dseg04:000CE831 db 83h ; Г dseg04:000CE832 db 4 ; dseg04:000CE833 db 4Eh ; N dseg04:000CE834 db 0C2h ; T dseg04:000CE835 db 0B3h ; ¦ dseg04:000CE836 db 3 ; dseg04:000CE837 db 39h ; 9 dseg04:000CE838 db 61h ; a dseg04:000CE839 db 26h ; & dseg04:000CE83A db 67h ; g dseg04:000CE83B db 0A7h ; з dseg04:000CE83C db 0F7h ; ў dseg04:000CE83D db 16h ; dseg04:000CE83E db 60h ; ` dseg04:000CE83F db 0D0h ; ¦ dseg04:000CE840 db 4Dh ; M dseg04:000CE841 db 47h ; G dseg04:000CE842 db 69h ; i dseg04:000CE843 db 49h ; I dseg04:000CE844 db 0DBh ; - dseg04:000CE845 db 77h ; w dseg04:000CE846 db 6Eh ; n dseg04:000CE847 db 3Eh ; > dseg04:000CE848 db 4Ah ; J dseg04:000CE849 db 6Ah ; j dseg04:000CE84A db 0D1h ; T dseg04:000CE84B db 0AEh ; о dseg04:000CE84C db 0DCh ; - dseg04:000CE84D db 5Ah ; Z dseg04:000CE84E db 0D6h ; г dseg04:000CE84F db 0D9h ; - dseg04:000CE850 db 66h ; f dseg04:000CE851 db 0Bh ; dseg04:000CE852 db 0DFh ; - dseg04:000CE853 db 40h ; @ dseg04:000CE854 db 0F0h ; Ё dseg04:000CE855 db 3Bh ; ; dseg04:000CE856 db 0D8h ; + dseg04:000CE857 db 37h ; 7 dseg04:000CE858 db 53h ; S dseg04:000CE859 db 0AEh ; о dseg04:000CE85A db 0BCh ; - dseg04:000CE85B db 0A9h ; й dseg04:000CE85C db 0C5h ; + dseg04:000CE85D db 9Eh ; Ю dseg04:000CE85E db 0BBh ; ¬ dseg04:000CE85F db 0DEh ; ¦ dseg04:000CE860 db 7Fh ;  dseg04:000CE861 db 0CFh ; ¦ dseg04:000CE862 db 0B2h ; - dseg04:000CE863 db 47h ; G dseg04:000CE864 db 0E9h ; щ dseg04:000CE865 db 0FFh ; dseg04:000CE866 db 0B5h ; ¦ dseg04:000CE867 db 30h ; 0 dseg04:000CE868 db 1Ch ; dseg04:000CE869 db 0F2h ; Є dseg04:000CE86A db 0BDh ; - dseg04:000CE86B db 0BDh ; - dseg04:000CE86C db 8Ah ; К dseg04:000CE86D db 0C2h ; T dseg04:000CE86E db 0BAh ; ¦ dseg04:000CE86F db 0CAh ; ¦ dseg04:000CE870 db 30h ; 0 dseg04:000CE871 db 93h ; У dseg04:000CE872 db 0B3h ; ¦ dseg04:000CE873 db 53h ; S dseg04:000CE874 db 0A6h ; ж dseg04:000CE875 db 0A3h ; г dseg04:000CE876 db 0B4h ; + dseg04:000CE877 db 24h ; $ dseg04:000CE878 db 5 ; dseg04:000CE879 db 36h ; 6 dseg04:000CE87A db 0D0h ; ¦ dseg04:000CE87B db 0BAh ; ¦ dseg04:000CE87C db 93h ; У dseg04:000CE87D db 6 ; dseg04:000CE87E db 0D7h ; + dseg04:000CE87F db 0CDh ; = dseg04:000CE880 db 29h ; ) dseg04:000CE881 db 57h ; W dseg04:000CE882 db 0DEh ; ¦ dseg04:000CE883 db 54h ; T dseg04:000CE884 db 0BFh ; ¬ dseg04:000CE885 db 67h ; g dseg04:000CE886 db 0D9h ; - dseg04:000CE887 db 23h ; # dseg04:000CE888 db 2Eh ; . dseg04:000CE889 db 7Ah ; z dseg04:000CE88A db 66h ; f dseg04:000CE88B db 0B3h ; ¦ dseg04:000CE88C db 0B8h ; ¬ dseg04:000CE88D db 4Ah ; J dseg04:000CE88E db 61h ; a dseg04:000CE88F db 0C4h ; - dseg04:000CE890 db 2 ; dseg04:000CE891 db 1Bh ; dseg04:000CE892 db 68h ; h dseg04:000CE893 db 5Dh ; ] dseg04:000CE894 db 94h ; Ф dseg04:000CE895 db 2Bh ; + dseg04:000CE896 db 6Fh ; o dseg04:000CE897 db 2Ah ; * dseg04:000CE898 db 37h ; 7 dseg04:000CE899 db 0BEh ; - dseg04:000CE89A db 0Bh ; dseg04:000CE89B db 0B4h ; + dseg04:000CE89C db 0A1h ; б dseg04:000CE89D db 8Eh ; О dseg04:000CE89E db 0Ch ; dseg04:000CE89F db 0C3h ; + dseg04:000CE8A0 db 1Bh ; dseg04:000CE8A1 db 0DFh ; - dseg04:000CE8A2 db 5 ; dseg04:000CE8A3 db 5Ah ; Z dseg04:000CE8A4 db 8Dh ; Н dseg04:000CE8A5 db 0EFh ; я dseg04:000CE8A6 db 2 ; dseg04:000CE8A7 db 2Dh ; - Сохранение карты: cseg01:00014A28 saveMap proc near ; CODE XREF: sub_11F9C+3Ep cseg01:00014A28 ; sub_122B8+85p cseg01:00014A28 cseg01:00014A28 var_170 = byte ptr -170h cseg01:00014A28 filename = byte ptr -0E0h cseg01:00014A28 startx = dword ptr -50h cseg01:00014A28 starty = dword ptr -4Ch cseg01:00014A28 startz = dword ptr -48h cseg01:00014A28 startangle = word ptr -44h cseg01:00014A28 sectornum = word ptr -42h cseg01:00014A28 skyoffsetmagic = word ptr -40h cseg01:00014A28 depthCueningLevel= dword ptr -3Eh cseg01:00014A28 key = dword ptr -3Ah cseg01:00014A28 paralaxtype = byte ptr -36h cseg01:00014A28 revision = dword ptr -35h cseg01:00014A28 numsectors = word ptr -31h cseg01:00014A28 numwalls = word ptr -2Fh cseg01:00014A28 numsprites = word ptr -2Dh cseg01:00014A28 var_28 = dword ptr -28h cseg01:00014A28 var_24 = dword ptr -24h cseg01:00014A28 headerstruct = byte ptr -20h cseg01:00014A28 var_1C = word ptr -1Ch cseg01:00014A28 var_18 = dword ptr -18h cseg01:00014A28 _numsprites = dword ptr -14h cseg01:00014A28 _startz = dword ptr -10h cseg01:00014A28 _startx = dword ptr -0Ch cseg01:00014A28 _starty = dword ptr -8 cseg01:00014A28 outputbuffer = dword ptr -4 cseg01:00014A28 _startangle = dword ptr 10h cseg01:00014A28 _sectornum = dword ptr 14h cseg01:00014A28 cseg01:00014A28 push esi cseg01:00014A29 push edi cseg01:00014A2A push ebp cseg01:00014A2B sub esp, 170h cseg01:00014A31 mov ebp, eax cseg01:00014A33 mov [esp+170h+_startx], edx cseg01:00014A3A mov [esp+170h+_starty], ebx cseg01:00014A41 mov [esp+170h+_startz], ecx cseg01:00014A48 mov ah, 1 cseg01:00014A4A mov edi, esp cseg01:00014A4C mov ecx, offsetsNum??? ; расчитываем на базе этого значения количество байт под skyoffsetnum cseg01:00014A52 mov ebx, dword_104F8C cseg01:00014A58 mov esi, ebp cseg01:00014A5A xor edx, edx cseg01:00014A5C mov mapVerIs7, ah cseg01:00014A62 mov [esp+170h+_numsprites], edx cseg01:00014A69 sar ecx, 10h cseg01:00014A6C mov eax, 1 cseg01:00014A71 inc ebx cseg01:00014A72 shl eax, cl cseg01:00014A74 mov dword_104F8C, ebx cseg01:00014A7A mov skyoffsetnum, eax cseg01:00014A7F push edi cseg01:00014A80 cseg01:00014A80 loc_14A80: ; CODE XREF: saveMap+6Ej cseg01:00014A80 mov al, [esi] cseg01:00014A82 mov [edi], al cseg01:00014A84 cmp al, 0 cseg01:00014A86 jz short loc_14A98 cseg01:00014A88 mov al, [esi+1] cseg01:00014A8B add esi, 2 cseg01:00014A8E mov [edi+1], al cseg01:00014A91 add edi, 2 cseg01:00014A94 cmp al, 0 cseg01:00014A96 jnz short loc_14A80 cseg01:00014A98 cseg01:00014A98 loc_14A98: ; CODE XREF: saveMap+5Ej cseg01:00014A98 pop edi cseg01:00014A99 lea edi, [esp+170h+filename] cseg01:00014AA0 mov esi, ebp cseg01:00014AA2 mov edx, offset a_map_0 ; ".MAP" cseg01:00014AA7 push edi cseg01:00014AA8 cseg01:00014AA8 loc_14AA8: ; CODE XREF: saveMap+96j cseg01:00014AA8 mov al, [esi] cseg01:00014AAA mov [edi], al cseg01:00014AAC cmp al, 0 cseg01:00014AAE jz short loc_14AC0 cseg01:00014AB0 mov al, [esi+1] cseg01:00014AB3 add esi, 2 cseg01:00014AB6 mov [edi+1], al cseg01:00014AB9 add edi, 2 cseg01:00014ABC cmp al, 0 cseg01:00014ABE jnz short loc_14AA8 cseg01:00014AC0 cseg01:00014AC0 loc_14AC0: ; CODE XREF: saveMap+86j cseg01:00014AC0 pop edi cseg01:00014AC1 mov eax, esp cseg01:00014AC3 call sub_63C20 cseg01:00014AC8 mov edx, offset a_bak ; ".BAK" cseg01:00014ACD lea eax, [esp+170h+filename] cseg01:00014AD4 cseg01:00014AD4 loc_14AD4: ; DATA XREF: dseg04:000D79F8o cseg01:00014AD4 call sub_63C20 cseg01:00014AD9 mov dl, mapVerIs7 cseg01:00014ADF mov ebp, 2Bh cseg01:00014AE4 test dl, dl cseg01:00014AE6 jz short loc_14AED cseg01:00014AE8 mov ebp, 0ABh cseg01:00014AED cseg01:00014AED loc_14AED: ; CODE XREF: saveMap+BEj cseg01:00014AED mov eax, skyoffsetnum cseg01:00014AF2 mov edx, numwalls_add2+2 cseg01:00014AF8 add eax, eax cseg01:00014AFA sar edx, 10h cseg01:00014AFD add ebp, eax cseg01:00014AFF lea eax, ds:0[edx*4] cseg01:00014B06 add eax, edx cseg01:00014B08 shl eax, 3 cseg01:00014B0B xor esi, esi cseg01:00014B0D add ebp, eax cseg01:00014B0F jmp short loc_14B12 cseg01:00014B11 ; --------------------------------------------------------------------------- cseg01:00014B11 cseg01:00014B11 loc_14B11: ; CODE XREF: saveMap+10Bj cseg01:00014B11 ; saveMap+110j cseg01:00014B11 inc esi cseg01:00014B12 cseg01:00014B12 loc_14B12: ; CODE XREF: saveMap+E7j cseg01:00014B12 mov eax, numwalls_add2+2 cseg01:00014B17 sar eax, 10h cseg01:00014B1A cmp esi, eax cseg01:00014B1C jge short loc_14B3A cseg01:00014B1E lea eax, ds:0[esi*4] cseg01:00014B25 add eax, esi cseg01:00014B27 mov eax, (dword_2AFBE2+2)[eax*8] cseg01:00014B2E sar eax, 10h cseg01:00014B31 test eax, eax cseg01:00014B33 jle short loc_14B11 cseg01:00014B35 add ebp, 3Ch cseg01:00014B38 jmp short loc_14B11 cseg01:00014B3A ; --------------------------------------------------------------------------- cseg01:00014B3A cseg01:00014B3A loc_14B3A: ; CODE XREF: saveMap+F4j cseg01:00014B3A mov eax, numwalls_add2 cseg01:00014B3F sar eax, 10h cseg01:00014B42 shl eax, 5 cseg01:00014B45 xor esi, esi cseg01:00014B47 add ebp, eax cseg01:00014B49 jmp short loc_14B4C cseg01:00014B4B ; --------------------------------------------------------------------------- cseg01:00014B4B cseg01:00014B4B loc_14B4B: ; CODE XREF: saveMap+140j cseg01:00014B4B ; saveMap+145j cseg01:00014B4B inc esi cseg01:00014B4C cseg01:00014B4C loc_14B4C: ; CODE XREF: saveMap+121j cseg01:00014B4C mov eax, numwalls_add2 cseg01:00014B51 sar eax, 10h cseg01:00014B54 cmp esi, eax cseg01:00014B56 jge short loc_14B6F cseg01:00014B58 mov eax, esi cseg01:00014B5A shl eax, 5 cseg01:00014B5D mov eax, (dword_2643DA+2)[eax] cseg01:00014B63 sar eax, 10h cseg01:00014B66 test eax, eax cseg01:00014B68 jle short loc_14B4B cseg01:00014B6A add ebp, 18h cseg01:00014B6D jmp short loc_14B4B cseg01:00014B6F ; --------------------------------------------------------------------------- cseg01:00014B6F cseg01:00014B6F loc_14B6F: ; CODE XREF: saveMap+12Ej cseg01:00014B6F xor esi, esi cseg01:00014B71 jmp short loc_14B74 cseg01:00014B73 ; --------------------------------------------------------------------------- cseg01:00014B73 cseg01:00014B73 loc_14B73: ; CODE XREF: saveMap+174j cseg01:00014B73 ; saveMap+190j cseg01:00014B73 ; saveMap+195j cseg01:00014B73 inc esi cseg01:00014B74 cseg01:00014B74 loc_14B74: ; CODE XREF: saveMap+149j cseg01:00014B74 cmp esi, 1000h cseg01:00014B7A jge short loc_14BBF cseg01:00014B7C lea eax, ds:0[esi*4] cseg01:00014B83 sub eax, esi cseg01:00014B85 shl eax, 2 cseg01:00014B88 sub eax, esi cseg01:00014B8A shl eax, 2 cseg01:00014B8D mov edx, dword_2381D8[eax] cseg01:00014B93 sar edx, 10h cseg01:00014B96 cseg01:00014B96 loc_14B96: ; DATA XREF: dseg04:000D79FCo cseg01:00014B96 cmp edx, 400h cseg01:00014B9C jge short loc_14B73 cseg01:00014B9E mov ebx, [esp+170h+_numsprites] cseg01:00014BA5 mov eax, dword_2381E8[eax] cseg01:00014BAB inc ebx cseg01:00014BAC sar eax, 10h cseg01:00014BAF mov [esp+170h+_numsprites], ebx cseg01:00014BB6 test eax, eax cseg01:00014BB8 jle short loc_14B73 cseg01:00014BBA add ebp, 38h cseg01:00014BBD jmp short loc_14B73 cseg01:00014BBF ; --------------------------------------------------------------------------- cseg01:00014BBF cseg01:00014BBF loc_14BBF: ; CODE XREF: saveMap+152j cseg01:00014BBF mov edx, [esp+170h+_numsprites] cseg01:00014BC6 lea eax, ds:0[edx*4] cseg01:00014BCD sub eax, edx cseg01:00014BCF shl eax, 2 cseg01:00014BD2 sub eax, edx cseg01:00014BD4 mov ecx, 4 cseg01:00014BD9 shl eax, 2 cseg01:00014BDC mov esi, offset MAGIC ; сигнатура (magic) файла карт ( BLM\x1a ) cseg01:00014BE1 add ebp, eax cseg01:00014BE3 lea edi, [esp+170h+headerstruct] ; начало буфера компоновки - здесь же начинается сигнатура BLM\x1a cseg01:00014BEA add ebp, 4 cseg01:00014BED mov ebx, 6 ; объем информации для записи cseg01:00014BF2 mov eax, ebp cseg01:00014BF4 mov edx, 700h ; значение версии - 0x0700 cseg01:00014BF9 call unkGetDataPtr cseg01:00014BFE mov [esp+170h+outputbuffer], eax cseg01:00014C05 mov [esp+170h+var_28], ebp cseg01:00014C0C mov [esp+170h+var_24], eax cseg01:00014C13 push edi cseg01:00014C14 mov eax, ecx cseg01:00014C16 shr ecx, 2 cseg01:00014C19 repne movsd cseg01:00014C1B mov cl, al cseg01:00014C1D and cl, 3 cseg01:00014C20 repne movsb ; здесь перенесли BLM\x1a в структуру cseg01:00014C22 pop edi cseg01:00014C23 mov [esp+170h+var_1C], dx ; положим версию в структуру заголовка cseg01:00014C2B mov dh, 1 cseg01:00014C2D lea eax, [esp+170h+var_28] cseg01:00014C34 mov mapIsVer7???, dh cseg01:00014C3A lea edx, [esp+170h+headerstruct] ; оригинал записываемой информации cseg01:00014C41 call unkPutToWriteBuffer ; пишем 6 байт заголовка cseg01:00014C46 mov eax, [esp+170h+_startx] cseg01:00014C4D mov [esp+170h+startx], eax cseg01:00014C54 mov eax, [esp+170h+_starty] cseg01:00014C5B cseg01:00014C5B loc_14C5B: ; DATA XREF: dseg04:000D7A00o cseg01:00014C5B mov [esp+170h+starty], eax cseg01:00014C62 mov eax, [esp+170h+_startz] cseg01:00014C69 mov [esp+170h+startz], eax cseg01:00014C70 mov eax, [esp+170h+_startangle] cseg01:00014C77 mov [esp+170h+startangle], ax cseg01:00014C7F mov eax, [esp+170h+_sectornum] cseg01:00014C86 mov [esp+170h+sectornum], ax cseg01:00014C8E mov ax, word ptr offsetsNum???+2 cseg01:00014C94 mov [esp+170h+skyoffsetmagic], ax cseg01:00014C9C mov eax, depthCueingLevel cseg01:00014CA1 mov [esp+170h+depthCueningLevel], eax cseg01:00014CA8 mov al, paralaxType cseg01:00014CAD mov [esp+170h+paralaxtype], al cseg01:00014CB4 mov eax, dword_104F8C cseg01:00014CB9 mov ecx, 7474614Dh ; ключ (?) cseg01:00014CBE mov [esp+170h+revision], eax cseg01:00014CC5 mov ax, NumSectors cseg01:00014CCB mov bl, mapIsVer7??? ; ещё один флажок для версии 7 (???) cseg01:00014CD1 mov [esp+170h+numsectors], ax ; положить число секторов cseg01:00014CD9 mov ax, word ptr numwalls_add2+2 cseg01:00014CDF mov MattKey?, ecx cseg01:00014CE5 mov [esp+170h+numwalls], ax cseg01:00014CED mov eax, [esp+170h+_numsprites] cseg01:00014CF4 mov [esp+170h+key], ecx ; всегда пишем 747461d4 !!! cseg01:00014CFB mov [esp+170h+numsprites], ax cseg01:00014D03 test bl, bl cseg01:00014D05 jz short loc_14D1A ; если версия ниже семерки, ничего не криптуем cseg01:00014D07 mov edx, 25h ; криптуем 37 байт cseg01:00014D0C lea eax, [esp+170h+startx] ; начиная со startx ( структуры заголовка ) cseg01:00014D13 mov ebx, ecx cseg01:00014D15 call decrypt cseg01:00014D1A cseg01:00014D1A loc_14D1A: ; CODE XREF: saveMap+2DDj cseg01:00014D1A mov ebx, 25h ; пишем 37 байт cseg01:00014D1F cseg01:00014D1F loc_14D1F: ; DATA XREF: dseg04:000D7A04o cseg01:00014D1F lea edx, [esp+170h+startx] cseg01:00014D26 lea eax, [esp+170h+var_28] cseg01:00014D2D call unkPutToWriteBuffer cseg01:00014D32 cmp mapVerIs7, 0 cseg01:00014D39 jz loc_14DDA ; если версия ниже семерки не пишем copyright информацию cseg01:00014D3F mov ebx, 80h ; размер буфера cseg01:00014D44 mov eax, offset somebuffer cseg01:00014D49 mov esi, offset aCopyright1997M ; "Copyright 1997 Monolith Productions. A"... cseg01:00014D4E xor edx, edx cseg01:00014D50 mov edi, offset somebuffer cseg01:00014D55 call memset_ cseg01:00014D5A push edi cseg01:00014D5B cseg01:00014D5B loc_14D5B: ; CODE XREF: saveMap+349j cseg01:00014D5B mov al, [esi] cseg01:00014D5D mov [edi], al cseg01:00014D5F cmp al, 0 cseg01:00014D61 jz short loc_14D73 cseg01:00014D63 mov al, [esi+1] cseg01:00014D66 add esi, 2 cseg01:00014D69 mov [edi+1], al cseg01:00014D6C add edi, 2 cseg01:00014D6F cmp al, 0 cseg01:00014D71 jnz short loc_14D5B ; скопируем строчку копирайтов в буфер (вместе с завершающим 0) cseg01:00014D73 cseg01:00014D73 loc_14D73: ; CODE XREF: saveMap+339j cseg01:00014D73 pop edi cseg01:00014D74 mov edi, 38h cseg01:00014D79 mov eax, 18h cseg01:00014D7E mov edx, 3Ch cseg01:00014D83 mov ebx, numwalls_add2 ; ключ для криптовки/декриптовки cseg01:00014D89 mov value_0x18, eax cseg01:00014D8E mov value_0x3c, edx cseg01:00014D94 sar ebx, 10h cseg01:00014D97 mov edx, 80h cseg01:00014D9C mov eax, offset somebuffer cseg01:00014DA1 mov value_0x38, edi cseg01:00014DA7 call decrypt cseg01:00014DAC mov ebx, 80h cseg01:00014DB1 mov edx, offset somebuffer cseg01:00014DB6 lea eax, [esp+170h+var_28] cseg01:00014DBD call unkPutToWriteBuffer cseg01:00014DC2 mov edx, 80h cseg01:00014DC7 mov ebx, numwalls_add2 cseg01:00014DCD mov eax, offset somebuffer cseg01:00014DD2 sar ebx, 10h cseg01:00014DD5 call decrypt ; до этого в буфер ушло закриптованная информация, теперь её декриптуем назад для последующего использования в mapedit cseg01:00014DDA cseg01:00014DDA loc_14DDA: ; CODE XREF: saveMap+311j cseg01:00014DDA cmp mapVerIs7, 0 cseg01:00014DE1 jz short loc_14DF7 cseg01:00014DE3 mov edx, skyoffsetnum cseg01:00014DE9 cseg01:00014DE9 loc_14DE9: ; DATA XREF: dseg04:000D7A08o cseg01:00014DE9 add edx, edx ; готовим размер буффера, он же ключ для раскриптовки cseg01:00014DEB mov eax, offset skyoffsetsbuffer cseg01:00014DF0 mov ebx, edx ; размер буффера - sizeof( short ) * количество sky offset значений, соответственно одно значение это 2 байта cseg01:00014DF2 call decrypt cseg01:00014DF7 cseg01:00014DF7 loc_14DF7: ; CODE XREF: saveMap+3B9j cseg01:00014DF7 mov edx, offset skyoffsetsbuffer cseg01:00014DFC mov ebx, skyoffsetnum cseg01:00014E02 lea eax, [esp+170h+var_28] cseg01:00014E09 add ebx, ebx cseg01:00014E0B call unkPutToWriteBuffer cseg01:00014E10 cmp mapVerIs7, 0 cseg01:00014E17 jz short loc_14E2D cseg01:00014E19 mov edx, skyoffsetnum ; если версия 7+ раскриптуем буффер обратно для последующей работы в mapedit cseg01:00014E1F add edx, edx cseg01:00014E21 mov eax, offset skyoffsetsbuffer cseg01:00014E26 mov ebx, edx cseg01:00014E28 call decrypt cseg01:00014E2D cseg01:00014E2D loc_14E2D: ; CODE XREF: saveMap+3EFj cseg01:00014E2D xor esi, esi cseg01:00014E2F jmp short loc_14E32 cseg01:00014E31 ; --------------------------------------------------------------------------- cseg01:00014E31 cseg01:00014E31 loc_14E31: ; CODE XREF: saveMap+4B2j cseg01:00014E31 ; saveMap+4DAj cseg01:00014E31 inc esi cseg01:00014E32 cseg01:00014E32 loc_14E32: ; CODE XREF: saveMap+407j cseg01:00014E32 mov eax, numwalls_add2+2 cseg01:00014E37 sar eax, 10h cseg01:00014E3A cmp esi, eax cseg01:00014E3C jge loc_14F07 cseg01:00014E42 cmp mapVerIs7, 0 cseg01:00014E49 jz short loc_14E78 cseg01:00014E4B lea eax, ds:0[esi*4] cseg01:00014E52 mov edx, dword_104F8C cseg01:00014E58 add eax, esi cseg01:00014E5A lea ebx, ds:0[edx*4] cseg01:00014E61 shl eax, 3 cseg01:00014E64 add ebx, edx cseg01:00014E66 mov edx, 28h cseg01:00014E6B shl ebx, 3 cseg01:00014E6E add eax, (offset dword_2AFBBE+2) cseg01:00014E73 call decrypt cseg01:00014E78 cseg01:00014E78 loc_14E78: ; CODE XREF: saveMap+421j cseg01:00014E78 lea eax, ds:0[esi*4] cseg01:00014E7F add eax, esi cseg01:00014E81 mov ecx, (offset dword_2AFBBE+2) cseg01:00014E86 shl eax, 3 cseg01:00014E89 mov ebx, 28h cseg01:00014E8E add ecx, eax cseg01:00014E90 lea eax, [esp+170h+var_28] cseg01:00014E97 mov edx, ecx cseg01:00014E99 call unkPutToWriteBuffer cseg01:00014E9E cmp mapVerIs7, 0 cseg01:00014EA5 jz short loc_14EC5 cseg01:00014EA7 mov edx, dword_104F8C cseg01:00014EAD cseg01:00014EAD loc_14EAD: ; DATA XREF: dseg04:000D7A0Co cseg01:00014EAD lea ebx, ds:0[edx*4] cseg01:00014EB4 mov eax, ecx cseg01:00014EB6 add ebx, edx cseg01:00014EB8 mov edx, 28h cseg01:00014EBD shl ebx, 3 cseg01:00014EC0 call decrypt cseg01:00014EC5 cseg01:00014EC5 loc_14EC5: ; CODE XREF: saveMap+47Dj cseg01:00014EC5 lea eax, ds:0[esi*4] cseg01:00014ECC add eax, esi cseg01:00014ECE mov edx, (dword_2AFBE2+2)[eax*8] cseg01:00014ED5 sar edx, 10h cseg01:00014ED8 test edx, edx cseg01:00014EDA jle loc_14E31 cseg01:00014EE0 mov eax, edx cseg01:00014EE2 shl eax, 4 cseg01:00014EE5 sub eax, edx cseg01:00014EE7 mov edx, offset dword_FBF8C cseg01:00014EEC shl eax, 2 cseg01:00014EEF mov ebx, 3Ch cseg01:00014EF4 add edx, eax cseg01:00014EF6 lea eax, [esp+170h+var_28] cseg01:00014EFD call unkPutToWriteBuffer cseg01:00014F02 jmp loc_14E31 cseg01:00014F07 ; --------------------------------------------------------------------------- cseg01:00014F07 cseg01:00014F07 loc_14F07: ; CODE XREF: saveMap+414j cseg01:00014F07 xor esi, esi cseg01:00014F09 jmp short loc_14F0C cseg01:00014F0B ; --------------------------------------------------------------------------- cseg01:00014F0B cseg01:00014F0B loc_14F0B: ; CODE XREF: saveMap+584j cseg01:00014F0B ; saveMap+5AEj cseg01:00014F0B inc esi cseg01:00014F0C cseg01:00014F0C loc_14F0C: ; CODE XREF: saveMap+4E1j cseg01:00014F0C mov eax, numwalls_add2 cseg01:00014F11 sar eax, 10h cseg01:00014F14 cmp esi, eax cseg01:00014F16 jge loc_14FDB cseg01:00014F1C cmp mapVerIs7, 0 cseg01:00014F23 jz short loc_14F51 cseg01:00014F25 mov edx, dword_104F8C cseg01:00014F2B mov eax, esi cseg01:00014F2D lea ebx, ds:0[edx*4] cseg01:00014F34 shl eax, 5 cseg01:00014F37 add ebx, edx cseg01:00014F39 add eax, offset dword_2643C0 cseg01:00014F3E shl ebx, 3 cseg01:00014F41 mov edx, 20h cseg01:00014F46 or ebx, 7474614Dh cseg01:00014F4C call decrypt cseg01:00014F51 cseg01:00014F51 loc_14F51: ; CODE XREF: saveMap+4FBj cseg01:00014F51 mov ecx, esi cseg01:00014F53 shl ecx, 5 cseg01:00014F56 mov ebx, 20h cseg01:00014F5B add ecx, offset dword_2643C0 cseg01:00014F61 lea eax, [esp+170h+var_28] cseg01:00014F68 mov edx, ecx cseg01:00014F6A call unkPutToWriteBuffer cseg01:00014F6F cseg01:00014F6F loc_14F6F: ; DATA XREF: dseg04:000D7A10o cseg01:00014F6F cmp mapVerIs7, 0 cseg01:00014F76 jz short loc_14F9C cseg01:00014F78 mov edx, dword_104F8C cseg01:00014F7E lea ebx, ds:0[edx*4] cseg01:00014F85 add ebx, edx cseg01:00014F87 mov eax, ecx cseg01:00014F89 shl ebx, 3 cseg01:00014F8C mov edx, 20h cseg01:00014F91 or ebx, 7474614Dh cseg01:00014F97 call decrypt cseg01:00014F9C cseg01:00014F9C loc_14F9C: ; CODE XREF: saveMap+54Ej cseg01:00014F9C mov edx, esi cseg01:00014F9E shl edx, 5 cseg01:00014FA1 mov edx, (dword_2643DA+2)[edx] cseg01:00014FA7 sar edx, 10h cseg01:00014FAA test edx, edx cseg01:00014FAC jle loc_14F0B cseg01:00014FB2 lea eax, ds:0[edx*4] cseg01:00014FB9 sub eax, edx cseg01:00014FBB mov edx, offset dword_F8F8C cseg01:00014FC0 shl eax, 3 cseg01:00014FC3 mov ebx, 18h cseg01:00014FC8 add edx, eax cseg01:00014FCA lea eax, [esp+170h+var_28] cseg01:00014FD1 call unkPutToWriteBuffer cseg01:00014FD6 jmp loc_14F0B cseg01:00014FDB ; --------------------------------------------------------------------------- cseg01:00014FDB cseg01:00014FDB loc_14FDB: ; CODE XREF: saveMap+4EEj cseg01:00014FDB xor esi, esi cseg01:00014FDD jmp short loc_14FE0 cseg01:00014FDF ; --------------------------------------------------------------------------- cseg01:00014FDF cseg01:00014FDF loc_14FDF: ; CODE XREF: saveMap+5E3j cseg01:00014FDF ; saveMap+693j cseg01:00014FDF ; saveMap+6BDj cseg01:00014FDF inc esi cseg01:00014FE0 cseg01:00014FE0 loc_14FE0: ; CODE XREF: saveMap+5B5j cseg01:00014FE0 cmp esi, 1000h cseg01:00014FE6 jge loc_150EA cseg01:00014FEC lea edx, ds:0[esi*4] cseg01:00014FF3 sub edx, esi cseg01:00014FF5 shl edx, 2 cseg01:00014FF8 sub edx, esi cseg01:00014FFA shl edx, 2 cseg01:00014FFD mov eax, dword_2381D8[edx] cseg01:00015003 sar eax, 10h cseg01:00015006 cmp eax, 400h cseg01:0001500B jge short loc_14FDF cseg01:0001500D cmp mapVerIs7, 0 cseg01:00015014 jz short loc_15044 cseg01:00015016 mov ecx, dword_104F8C cseg01:0001501C lea ebx, ds:0[ecx*4] cseg01:00015023 sub ebx, ecx cseg01:00015025 shl ebx, 2 cseg01:00015028 mov eax, offset dword_2381C0 cseg01:0001502D sub ebx, ecx cseg01:0001502F add eax, edx cseg01:00015031 shl ebx, 2 cseg01:00015034 mov edx, 2Ch cseg01:00015039 cseg01:00015039 loc_15039: ; DATA XREF: dseg04:000D7A14o cseg01:00015039 or ebx, 7474614Dh cseg01:0001503F call decrypt cseg01:00015044 cseg01:00015044 loc_15044: ; CODE XREF: saveMap+5ECj cseg01:00015044 lea eax, ds:0[esi*4] cseg01:0001504B sub eax, esi cseg01:0001504D shl eax, 2 cseg01:00015050 sub eax, esi cseg01:00015052 mov ecx, offset dword_2381C0 cseg01:00015057 shl eax, 2 cseg01:0001505A mov ebx, 2Ch cseg01:0001505F add ecx, eax cseg01:00015061 lea eax, [esp+170h+var_28] cseg01:00015068 mov edx, ecx cseg01:0001506A call unkPutToWriteBuffer cseg01:0001506F cmp mapVerIs7, 0 cseg01:00015076 jz short loc_150A1 cseg01:00015078 mov edx, dword_104F8C cseg01:0001507E lea ebx, ds:0[edx*4] cseg01:00015085 sub ebx, edx cseg01:00015087 shl ebx, 2 cseg01:0001508A sub ebx, edx cseg01:0001508C mov eax, ecx cseg01:0001508E shl ebx, 2 cseg01:00015091 mov edx, 2Ch cseg01:00015096 or ebx, 7474614Dh cseg01:0001509C call decrypt cseg01:000150A1 cseg01:000150A1 loc_150A1: ; CODE XREF: saveMap+64Ej cseg01:000150A1 lea eax, ds:0[esi*4] cseg01:000150A8 sub eax, esi cseg01:000150AA shl eax, 2 cseg01:000150AD sub eax, esi cseg01:000150AF mov edx, dword_2381E8[eax*4] cseg01:000150B6 sar edx, 10h cseg01:000150B9 test edx, edx cseg01:000150BB jle loc_14FDF cseg01:000150C1 lea eax, ds:0[edx*8] cseg01:000150C8 sub eax, edx cseg01:000150CA mov edx, offset dword_DCF8C cseg01:000150CF shl eax, 3 cseg01:000150D2 mov ebx, 38h cseg01:000150D7 add edx, eax cseg01:000150D9 lea eax, [esp+170h+var_28] cseg01:000150E0 call unkPutToWriteBuffer cseg01:000150E5 jmp loc_14FDF cseg01:000150EA ; --------------------------------------------------------------------------- cseg01:000150EA cseg01:000150EA loc_150EA: ; CODE XREF: saveMap+5BEj cseg01:000150EA mov esi, [esp+170h+outputbuffer] cseg01:000150F1 lea ecx, [ebp-4] cseg01:000150F4 call calcCRC cseg01:000150F9 mov ebx, 4 cseg01:000150FE cseg01:000150FE loc_150FE: ; DATA XREF: dseg04:000D7A18o cseg01:000150FE lea edx, [esp+170h+var_18] cseg01:00015105 mov [esp+170h+var_18], eax cseg01:0001510C lea eax, [esp+170h+var_28] cseg01:00015113 call unkPutToWriteBuffer cseg01:00015118 lea eax, [esp+170h+filename] cseg01:0001511F lea edx, [esp+170h+filename] cseg01:00015126 call unlink_ cseg01:0001512B mov eax, esp cseg01:0001512D call rename_ cseg01:00015132 push 80h cseg01:00015137 push 261h cseg01:0001513C lea eax, [esp+178h+var_170] cseg01:00015140 push eax cseg01:00015141 call open_ cseg01:00015146 add esp, 0Ch cseg01:00015149 mov ecx, eax cseg01:0001514B cmp eax, 0FFFFFFFFh cseg01:0001514E jnz short loc_1516C cseg01:00015150 mov edx, 6CEh cseg01:00015155 mov eax, offset aSrcDb_cpp_40 ; "src\\db.cpp" cseg01:0001515A call line_moduleinfo cseg01:0001515F push offset aErrorOpening_0 ; "Error opening MAP file" cseg01:00015164 call debugout cseg01:00015169 add esp, 4 cseg01:0001516C cseg01:0001516C loc_1516C: ; CODE XREF: saveMap+726j cseg01:0001516C mov edx, [esp+170h+outputbuffer] cseg01:00015173 mov ebx, ebp cseg01:00015175 mov eax, ecx cseg01:00015177 call write_ ; запишем всю сформированную ранее информацию cseg01:0001517C cmp eax, ebp cseg01:0001517E jz short loc_1519C cseg01:00015180 mov edx, 6D1h cseg01:00015185 mov eax, offset aSrcDb_cpp_41 ; "src\\db.cpp" cseg01:0001518A call line_moduleinfo cseg01:0001518F push offset aErrorWritingMa ; "Error writing MAP file" cseg01:00015194 call debugout cseg01:00015199 add esp, 4 cseg01:0001519C cseg01:0001519C loc_1519C: ; CODE XREF: saveMap+756j cseg01:0001519C mov eax, ecx cseg01:0001519E mov dl, 2Eh cseg01:000151A0 call close_ cseg01:000151A5 mov eax, [esp+170h+outputbuffer] cseg01:000151AC mov esi, esp cseg01:000151AE call sub_64B50 cseg01:000151B3 cseg01:000151B3 loc_151B3: ; CODE XREF: saveMap+79Fj cseg01:000151B3 mov al, [esi] cseg01:000151B5 cmp al, dl cseg01:000151B7 jz short loc_151CB cseg01:000151B9 cmp al, 0 cseg01:000151BB jz short loc_151C9 cseg01:000151BD inc esi cseg01:000151BE mov al, [esi] cseg01:000151C0 cmp al, dl cseg01:000151C2 jz short loc_151CB cseg01:000151C4 inc esi cseg01:000151C5 cmp al, 0 cseg01:000151C7 jnz short loc_151B3 cseg01:000151C9 cseg01:000151C9 loc_151C9: ; CODE XREF: saveMap+793j cseg01:000151C9 sub esi, esi cseg01:000151CB cseg01:000151CB loc_151CB: ; CODE XREF: saveMap+78Fj cseg01:000151CB ; saveMap+79Aj cseg01:000151CB ; DATA XREF: dseg04:000D7A1Co cseg01:000151CB test esi, esi cseg01:000151CD jz short loc_151D2 cseg01:000151CF mov byte ptr [esi], 0 cseg01:000151D2 cseg01:000151D2 loc_151D2: ; CODE XREF: saveMap+7A5j cseg01:000151D2 mov ebx, offset aMap ; "MAP" cseg01:000151D7 mov edx, esp cseg01:000151D9 mov eax, offset unk_DCE8C cseg01:000151DE mov ecx, ebp cseg01:000151E0 call sub_64970 cseg01:000151E5 mov ebx, offset aMap_0 ; "MAP" cseg01:000151EA mov edx, esp cseg01:000151EC mov eax, offset unk_DCE8C cseg01:000151F1 call openfilefromresource cseg01:000151F6 test eax, eax cseg01:000151F8 jnz short loc_1520E cseg01:000151FA mov ebx, 6DCh cseg01:000151FF mov edx, offset aSrcDb_cpp_42 ; "src\\db.cpp" cseg01:00015204 mov eax, offset aHmapNull ; "hMap != NULL" cseg01:00015209 call assert cseg01:0001520E cseg01:0001520E loc_1520E: ; CODE XREF: saveMap+7D0j cseg01:0001520E add esp, 170h cseg01:00015214 pop ebp cseg01:00015215 pop edi cseg01:00015216 pop esi cseg01:00015217 retn 8 cseg01:00015217 saveMap endp