1. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление
    1. Если вы сделали перевод или русификацию игры, то вы можете поделиться своим творением здесь.
    2. О правилах вступления в группу переводчиков можно прочитать здесь.
    3. Русификации следует искать там.
  2. Пожалуйста, внимательно прочитайте правила раздела.

Wing Commander IV: Цена свободы

Тема в разделе "Переводы своими руками", создана пользователем Рыжий Тигра, 8 янв 2007.

  1. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Процесс перевода игры "Wing Commander IV: Цена свободы"- в разгаре. Желающие опробовать то, что получилось, могут добраться сразу до описания перевода и ссылок на его скачивание, щёлкнув по этой ссылке.

    Желающим посоучаствовать в переводе - рекомендую: полезные для переводчика ссылки - словари, книги, статьи и прочие материалы. Пополнение копилки приветствуется!

    См. также:
    Самая свежая тестовая сборка и инструкции по её установке
    Бета-тестеры, wэлкам!
    31 дек 2016

    Upd 1:
    В связи с участившимися постами здесь "чисто для поржать" - вынужден объясниться.
    6 янв 2014

    Upd 2:
    Приглашаю желающих поучаствовать в переводе. Отозвавшиеся будут увековечены в финальных титрах. (Никаких более материальных благ, к сожалению, обещать не могу. :( )
    27 мая 2014

    Upd 3:
    Наконец удалось пробить барьер несовместимости моего перевода с версией игры от GOG!!! Желающим опробовать - wэлкам!
    2 окт 2014
     
    Последнее редактирование: 21 апр 2017
    kirik-82 нравится это.
  2.  
  3. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.679
    Тигра, разберись, пожалуйста, с IDA. Я же тебе книгу дал.

    Код:
    HANDLE __stdcall CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
    {
      HANDLE v7; // esi@2
      HANDLE result; // eax@2
      char v9; // [sp+0h] [bp-8h]@1
      const WCHAR *v10; // [sp+4h] [bp-4h]@2
    
      if ( Basep8BitStringToDynamicUnicodeString(&v9, lpFileName) )
      {
        v7 = CreateFileW(
               v10,
               dwDesiredAccess,
               dwShareMode,
               lpSecurityAttributes,
               dwCreationDisposition,
               dwFlagsAndAttributes,
               hTemplateFile);
        RtlFreeUnicodeString(&v9);
        result = v7;
      }
      else
      {
        result = (HANDLE)-1;
      }
      return result;
    }
    Код:
    HANDLE __stdcall CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
    {
      int v7; // eax@1
      int v8; // eax@2
      HANDLE result; // eax@3
      BOOL v10; // ecx@5
      char v11; // [sp+0h] [bp-8h]@1
    
      v7 = RtlInitUnicodeStringEx(&v11, lpFileName);
      if ( v7 < 0 )
      {
        BaseSetLastNTError(v7);
        result = (HANDLE)-1;
      }
      else
      {
        v8 = sub_77E2E9B3(&v11, dwDesiredAccess);
        if ( v8 )
        {
          v10 = 0;
          if ( lpSecurityAttributes )
            v10 = lpSecurityAttributes->bInheritHandle;
          result = (HANDLE)OpenConsoleW(*(_DWORD *)(v8 + 4), dwDesiredAccess, v10, 3);
        }
        else
        {
          result = CreateFileW_0(
                     lpFileName,
                     dwDesiredAccess,
                     dwShareMode,
                     lpSecurityAttributes,
                     dwCreationDisposition,
                     dwFlagsAndAttributes,
                     hTemplateFile);
        }
      }
      return result;
    }
    Ну и т.д. Я сейчас в семёрке, поэтому мой kernel32.dll может немного отличаться :)

    С отладочными символами будет сильно легче. С голым дизасмом там умереть можно.
     
  4. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Кстати, имею вопрос. Есть возможность достаточно безгеморройно получить адрес первой команды после вызова API'шной функции:
    Код:
    DWORD WINAPI wc4_get_mod_fn( IN HMODULE hModule,
    		OUT LPSTR lpFilename, IN DWORD nSize ) {
    	[B]void *ra = (void *) ( ( (uintptr_t *) &hModule)[ -1 ] );[/B]
    	ddprint_log_start(( "ACL_TRACE: [B]from %p:[/B] GetModuleFileNameA() ", [B]ra[/B] ));
    	return ( gh_get_mod_fn( hModule, lpFilename, nSize ) );
    Но что делать в вот таком случае?
    Код:
    DWORD WINAPI wc4_get_version( [B]void[/B] ) {
    	ddprint_log_start(( "ACL_TRACE: GetVersion() " ));
    	return ( gh_get_version() );
    }
    Есть идея?

    ---------- Сообщение добавлено в 19:37 ---------- Предыдущее сообщение размещено в 19:30 ----------

    Да не похоже - под отладчиком видно, что первым параметром поступает обычная ASCIIZ'ная строка. :-(
    Это не kernel, это aclayers.
     
    Последнее редактирование: 11 окт 2014
  5. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.679
    Ну так скачай отладочные символы для AcLayers.dll и воспользуйся.

    Уровень комфорта будет тем же.
     
    Рыжий Тигра нравится это.
  6. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.198
    я от тя щас выть буду ! Ты реально так и не удосужился почитать MSDN-ы (именно разных лет).

    Собсно если бы прочитал, то знал, что всё что кончается на A - использует ASCII строки.
    А всё что на W - юникод.
    И совместимость этот недостаток устраняет частично.
     
  7. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    5.388
    зато у других стоят. но, так как у wc4 программный рендер, в случаи чего, спасёт любая вертуалка с хр.
     
  8. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Что-то мне подсказывает, что получится очередная серия типа "женщина! подержи верблюдицу!" (L). :-( По-хорошему нужно обратное предложению Bato-San'а - по каким-то характеристикам неизвестно какого файла :-( вычислить место, где происходит залёт, и его исправить - либо внаглую подпатчить код, либо добавить свой дообработчик; в обоих случаях годится и цельнотянутый кусок aclayer'а.
     
  9. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.679
    "Чувак, я нихрена не понял, что ты сказал, но ты достучался до моего сердца." (L).

    Вот сейчас принципиально скачаю символы для XP, возьму aclayers от SP3, найду по дампу все твои процедуры и выложу нормальный листинг.

    Не тот человек выбрал себе ник "Вредный", не тот.
     
    Bato-San нравится это.
  10. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Обратное тоже верно: что использует ASCII - кончается на A. :-) Так вот, на входе функции L7167E756 самолично обнаружил ASCIIZ'ную строку - значит, на W эта функция кончаться никак не может, не? :-
    (лихорадочно разворачивает оставшийся со студенческих лет "микрофон птицелова" :-))))))) )

    ---------- Сообщение добавлено в 20:11 ---------- Предыдущее сообщение размещено в 20:00 ----------

    Старый похабный анекдот про то, как промежуточная цель заслоняет конечную. :-((((
    Кстааати, обсуждение "верблюдицы" подкинуло идею про как определить "неизвестно какой файл": вполне возможно, что трясти надо именно файл с музыкой; и если окажется, что он как-то необычно открывается, то и. :-)

    ---------- Сообщение добавлено в 20:14 ---------- Предыдущее сообщение размещено в 20:11 ----------

    Вот "другим" и wэлкам в бета-тестеры! :-)
    "Третий сорт, не чистая работа" (L). Интеловский проц не соответствует критериям Попека-Гольдберга, поэтому приличной виртуальной машины на нём не слепишь. :-(

    ---------- Сообщение добавлено в 20:15 ---------- Предыдущее сообщение размещено в 20:14 ----------

    (нырнул с головой в клавиатуру и там снизу стучит по клавишам, перелабывает подсистему ведения логов под протоколирование файловых операций с только одним конкретным файлом)
     
  11. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.679
    ThisSuXX, Рыжий Тигра и Bato-San нравится это.
  12. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.198
    вот любишь ты через причинное место все задачи ... нет, не решать даже ! ты их ставить через него любишь. А потом решать. И желательно, что бы это были два непересекающихся в пространстве-времени причинных места. Что бы получилось решение отнюдь не поставленной и тем более не решаемой задачи. :D

    Короче говоря в режиме совместимости происходит насильственное преобразование строк и данных в нужный системе формат для обработки стандартными функциями. Ну и наоборот, если есть что возвращать. Поэтому все "вложенности" - это всего то обёртка-преобразователь.
     
  13. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    5.388
    можно и перефразировать: спасёт любая рабочая ВМ с хр.
     
  14. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.198
    Ogr 2, не обесценивай труд человека по постепенному портированию игры из Win98 в WinXP...
    А то так выяснится, что достаточно виртуалки с win9x на борту и примитивного русификатора. :)

    ... а вот если помолчим сейчас и подскажем в нужном направлении - глядишь и получим рабочий порт для windows 7 - 10. ;)
     
  15. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    ...а также флагов режимов открытия файла и прочей металабуды, это я уже понял.
    (Кстати, интересно: а как это сделать - открыть файл так, чтобы и дескриптор получить, и чтобы по этому дескриптору нельзя было ни читать ни писать? А то уже предвкушаю, в скольких местах можно этот эффект с пользой заюзать... :-)))) )

    ---------- Сообщение добавлено в 21:26 ---------- Предыдущее сообщение размещено в 21:15 ----------

    Не-а. Попека с Гольдбергом не обжулишь: или скорострельность будет капитально прыгать на эмуляции "тяжёлых" команд, или стабильное замедление на три с копейками порядка (аж до состояния "диггер на пне четвёртом еле ползает"). :-(
    И если для полезных программ (что-то делающих типа "файло́ пережёвываю") первый вариант вполне годидзе, то с играми эта дёргалка кошмарно раздражает и второй выглядит куда предпочтительнее.
    А что в имеющемся не устраивает?

    ---------- Сообщение добавлено в 21:35 ---------- Предыдущее сообщение размещено в 21:26 ----------

    А решение должно быть всегда шире задачи, иначе оно м.б. и экономически выгодно, но обязательно контрпрогрессивно. :-(
    А не ленись заглядывать во вложения, под спойлеры и по ссылкам - исчёрпывающая формулировка задачи обычно там, а не в сокращённом изложении. :-
    Кстати, была когда-то такая netraverse win4lin: ВМ под Linux и на ней 95'ка со специально патченным ядром, которое вместо лазания к железу и работы в нулевом кольце беззастенчиво обращалось к самому Linux'у за любым чихом. Удобная штучка и даже тормозухи накладных расходов имела считанные пару процентов. Кстати, у Попека с Гольдбергом этот способ тоже описан как вариант обхода несоответствия проца их критериям.
     
    Последнее редактирование: 11 окт 2014
  16. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    5.388
    я тебе в ответ на твою теорию, могу видео снять как на практике игра на ВМ с вин98 быстро и плавно работает.
     
  17. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.198
    Рыжий Тигра, я цитировать не буду, что бы машинное время зря не тратить. Суть такая, что "совместимость" это недоделанный вариант именно того, что ты написал про win4lin. НО ! Суть проблемы написания такой фигни под винду является самым широким причинным местом на свете по более мелким причинам. Например такой интересной фигне, как DEP, который загнал за можай даже установку родных программ (на что ты уже где то выше кажись и жаловался). Самое смешное, что в вин7 был таки реальный прорыв в данном направлении, но... подвели линуксоиды отказавшие предоставить стабильный форк для запуска под ним. Шуткааа ! :D

    Про "имеющийся" понятия не имел. Такой вот каламбур.

    Про ссылки и спойлеры - "Папа, а золотарь - это кто золото по нужникам ищет ? Нет сынок, это фантастика !" :D

     
    Последнее редактирование: 11 окт 2014
  18. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Ясен перец. Виртуальные форточки под форточками.
    Ценой привета wintel-совместимости, ЕМНИП. Хотя все три задачи (в т.ч. портабельность софта с откуда на куда хочешь) отлично решаются открытостью исходников. Так нет - приходится извращаться эмуляцией. :-(
    (мрачно) Как там в "Соборе Парижской богоматери" было про Маргариту и небезызвестных домашних животных? :-(
    Ну, в общем, оно работает, но через жопу - TerminateProcess() в DllMain( PROCESS_DETACH ). :-( И под XP без "совместимости" глотает музыку. Потому я и взялся доводить.

    ---------- Сообщение добавлено в 22:39 ---------- Предыдущее сообщение размещено в 22:36 ----------

    Кстати, per anus naked ad astra! Маэстро, туш! :-)
    Код:
    DWORD WINAPI wc4_get_version_( [B]uint32_t dummy[/B] ) {
    	void *ra = (void *) ( ( (void **) &dummy )[B][ 1 ][/B] );
    	ddprint_log_start(( "ACL_TRACE: from %p: GetVersion() ", ra ));
    	return ( gh_get_version() );
    }
    [B]__declspec( naked )[/B] DWORD WINAPI wc4_get_version( VOID ) {
    	__asm {
    		[B]push  eax[/b]
    		[b]call  wc4_get_version_[/B]
    		ret   0
    	}
    }
    Дарю всем!

    ---------- Сообщение добавлено в 22:53 ---------- Предыдущее сообщение размещено в 22:39 ----------

    Ё-пс, можно ещё проще:
    Код:
    DWORD WINAPI wc4_get_version_( [B]void *ra[/B] ) {
    	ddprint_log_start(( "ACL_TRACE: from %p: GetVersion() ", ra ));
    	return ( gh_get_version() );
    }
    __declspec( naked ) DWORD WINAPI wc4_get_version( VOID ) {
    	__asm {
    		push  [B]dword ptr [esp][/B]
    		call  wc4_get_version_
    		ret   0
    	}
    }
     
    Последнее редактирование: 11 окт 2014
  19. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.198
    Рыжий Тигра, не понял сути радости про подарок... но та часть, что на асме написана правильно в отличии от той, что на цы... ну это всегда так. :D

    А что касается терминейта из длл - это местечковый косяк от непонимания, что процесс не может закрыться документированным способом, пока этот самый процесс не позакрывает всё, что он сам (или не сам, как в случае с перехватчиками) наоткрывал. И не только файлы. Впрочем последнее есть способ оставить и после закрытия родительского процесса и даже хаком не является, но... это как бэ из другой арии уже.
     
  20. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    И ещё проще - без ret'а:
    Код:
    DWORD WINAPI wc4_get_version_( void *ra ) {
    	ddprint_log_start(( "ACL_TRACE: from %p: GetVersion() ", ra ));
    	return ( gh_get_version() );
    }
    __declspec( naked ) DWORD WINAPI wc4_get_version( VOID ) {
    	__asm {
    		push  dword ptr [esp]
    		[B]jmp   wc4_get_version_[/B]
    	}
    }


    ---------- Сообщение добавлено в 23:02 ---------- Предыдущее сообщение размещено в 22:57 ----------

    Омбратно невнимательно читаешь. Я спрашивал - как в функции без параметров получить адрес возврата из.
    Таки нет. Это хуже. Это сознательный Q&D с целью увеличения продаж. :-(((((( Отмотай на пару страниц, обсуждалось зависание в DllMain()'е из opengl32.dll под "совместимостью".
     
    Последнее редактирование: 12 окт 2014
  21. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.198
    Рыжий Тигра, читал я про opengl. Но там уже твоё непонимание, что в каждой версии винды, а теперь уже драйверов даже - своя ревизия OGL. Поэтому попытка использовать чужую в директории игры приводит или не приводит к забавным или не очень глюкам.

    Собсно такое использование чуть ли не главная фишка длл, ради которой их и засобачили вообще. Но вот неприятность - в разных версиях винды потихоньку нарушалась совместимость...
     
  22. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Угу. Потому и
    (припечатывает вердикт) "Если ты знешь что-то неточно, значит, ты этого не знаешь" (L). :-(
    Перечитай. Попытка подсунуть стороннюю (от Mesa) opengl32.dll как раз избавляет от зависаний, свойственных родной opengl32.dll под родной aclayers.dll.
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление