Русификация Civilization2
Тоже самое и во всяких формах - например, когда вводишь имя города - переключаешься на русскую раскладку, но вводятся опять международные символы, а не русские буквы.
Легко ли это исправить? В принципе могу посидеть и с softice, но только мне нужны хоть какие-то наводки - что да как делать, где искать.
В последней версии второй CIV - Fantastic Worlds вместо русских букв - абра-кадабра. Игра, похоже, писалась под винды на Borland C++. Что и где надо подправить в EXE, чтобы русский текст выводился в правильной кодировке? Сами тексты идут в отдельном TXT файле.
Тоже самое и во всяких формах - например, когда вводишь имя города - переключаешься на русскую раскладку, но вводятся опять международные символы, а не русские буквы.
Легко ли это исправить? В принципе могу посидеть и с softice, но только мне нужны хоть какие-то наводки - что да как делать, где искать.
Честно говоря давненько не играл в Ц, но если есть файл с текстами, превое что я бы попробовал сделать - сменить кодовую станицу файла и изменить системную кодовую старницу. А после этого уже браться за софтасе. В нем можно поставить прерывание на вызов функций GetACP, GetCPInfo, GetOEMCP,CharToOem - посмотреть вообще устанавливается какая либо кодовая страница - а уже после этого определялся бы что нужно сделать.
Причем лезть в софтасе совсем не обязательно - если прога под винду используй APISpy.
Как вариант попробуй перед загрузкой программы загрузить какой нибудь руссификатор консоли - типа keyrus.
Даже обычное поле для ввода названия - в нем тоже не удается ввести русские буквы. Что самое интересное - не во всей игре так. Например в стандартной полоске меню сверху у окна приложения все русские надписи отоброжаются корректно (кстати текст для меню тоже идет в отдельном txt файле в win кодировке).
Еще не удается запустить APISPY с этой игрой: "Unable to start program".
Программка OgreGUI для выдирания текстов и прочих ресурсов из EXE для последующей русификации вообще говорит, что этот файл не Win32 PE формата.
ExeScope все открывает без проблем, но ничего полезного там вроде не видно.
WinSight32 видит все процессы игры.
И причем тут консоль? Игра же под винды.
Кодировку текстового файла менять смысла нет. Так как русские буквы все равно не будут отображаться - вместо них интернациональные символы.
Буквы всех кодировок по сути своей - набор единиц и нулей :D - смена кодировки файла не решит проблему со вводом на руском языке - но вывод должен работать
А системную менять - значит все приложения будут неправильно отбражать тексты (или нет?).
Возможна некорректная работа программ использующих настройки локали для сортировки и т.п., а так же сортировка файлов и папок в системе может быть странной...:) Это касается объектов системы имеющих неанглийские имена. В Win2K и выше могут не читатся папки и файлы с неанглийскими именами.
Даже обычное поле для ввода названия - в нем тоже не удается ввести русские буквы. Что самое интересное - не во всей игре так. Например в стандартной полоске меню сверху у окна приложения все русские надписи отоброжаются корректно (кстати текст для меню тоже идет в отдельном txt файле в win кодировке).
Все таки кодировку файла я бы советовал посмотреть.
Еще не удается запустить APISPY с этой игрой: "Unable to start program".
Программка OgreGUI для выдирания текстов и прочих ресурсов из EXE для последующей русификации вообще говорит, что этот файл не Win32 PE формата.
ExeScope все открывает без проблем, но ничего полезного там вроде не видно.
WinSight32 видит все процессы игры.
И причем тут консоль? Игра же под винды.
Ты же сам на свой вопрос и ответил. То что игра под винды еще не значит, что не используется консоль...:) Не работает AS используй SI. А прямая правка ресурсов тут тебе врядли помогет (ну может кроме смены кодировки тхт-файла).
Почему я считаю, что эту проблему можно решить?
Дело в том, что Civilization II имеет внутреннюю версию. Т.е. в самом начале файл civ2.exe имел версию ver 1.0 16-Feb-96. Номер версии можно посмотреть, зайдя в игру, начать новую (или загрузить сохраненную) и нажать Ctrl-O (Опции игры). В заголовке окна будет написан номер версии. Так вот в этой версии, вплоть до какой-то, проблем с русскими буквами не было. Далее появлялись различные add-on к игре, которые не только добавляли сценарии и пр. мишуру, но и заменяли файл civ2.exe. Сама же структура игры не менялась - можно безболезненно заменять только файл civ2.exe и игра будет работать. Последняя версия, которая есть у меня Civilization II - Fantastic Worlds ver 2.7.81 Scenario Editor 21-Oct-97. В ней, помимо добавления всяких мелких удобностей и устранения мелких же багов, был устранен так же и русский язык. :)
Из этого я делаю выводы, что если RUSSIAN_CHARSET был раньше, то его можно вернуть, просто заменив несколько байт в EXE. Вопрос - какие?
Побайтовое сравнение бессмысленно - слишком много различий да еще при разных размерах файлов.
Признаюсь - я лох (продвинутый :)) в области WinAPI, а уж тем более ASM. Но если бы я им не был, я бы сюда и не приходил, а уже все давно сделал бы сам. Поэтому я надеюсь на помощь со стороны. Иначе для решения этой проблемы мне понадобиться очень много времени и сил.
В продолжение темы. Понятно, что буквы - это набор 0 и 1. Но дело в том, что даже если я засуну в txt файл набор символов от #0 до #255, то все равно в игре русские буквы не отобразятся. А будет вот что. Если загрузить виндовую программку "Таблица символов", то в ней в списке шрифтов будут три таких шрифта:
Times New Roman
Times New Roman CE
Times New Roman Cyr
Так вот первый набор символов и будет использоваться. Т.е. вместо русской буквы "Ж" будет символ "AE" (две буквы слитно).
Видимо программисты вместо DEFAULT_CHARSET прописали ANSI_CHARSET во всех формах. Как я уже говорил русские буквы остались только в меню. В остальных же местах, включая даже кнопки, их нет.
Не хотелось бы менять что-то в системе. Это не прикольно. Хотелось бы создать патч именно для civ2.exe.
Про консоль я так и не понял. Если игра работает в ОКНЕ, использует GDI, USER, KERNEL, COMMDLG и др., рисует графику, выводит текст шрифтом TimesNewRoman и другими, окно можно растягивать, перемещать, то разве это не полностью виндовое приложение??? Я понимаю под консолью работу в текстовом режиме или просто запуск программы, которая вообще не использует API. Скорее всего я ошибаюсь...
Работа с SoftIce показала, что игра использует GetACP и др. Но что это дает. Ведь эти функции только возвращают значения кодовой страницы (кстати значение которое они возвращают - 1251). А вот что устанавливает эти кодовые страницы?
Например, как вообще рисуются надписи? Скажем, я обнаружил, что игра активно использует DrawText. Но какой функцией устанавливается каким шрифтом будет отображен текст, в какой кодировке и с каким набором символов? Если найти эти функции, то тогда можно будет сравнить два файла (старый и новый) именно в этой области.
Еще вопрос: например я нашел вызов DrawText в модуле civ2.exe. И у него есть кодовое представление 9A7E172717. Но поиск в самом файле ничего не дает. Удалось найти это место по окружающим командам, и вот что я выяснил. Оказывается на месте вызова стоит код 9AFFFF0000. Что это значит? Почему код в памяти не соответствует коду в EXE?
Можете прочитать еще здесь:
http://www.wasm.ru/forum/index.php?action=vthread&forum=5&topic=6662&page=-1
civ2.exe
0019B733: 00 -> 01
Если у кого-то другая версия, то можно попробовать найти это место по окружению:
0019B733: 00 -> 01
C646D800C646D901C646DA00C646DB00C646FC00F6460A017407C746D2BC02EB05C746D290018A460A240288
Вроде решил проблему! УРА!
Так может стоит написать об этой проблеме разработчикам? Проблема была бы исправлена в следующем патче. Или программа русифицирована пиратами?
P.S. Я удивился, когда увидел ник "Slava80". Дело в том, что я сам раньше пользовался таким ником. ;)
Так может стоит написать об этой проблеме разработчикам? Проблема была бы исправлена в следующем патче. Или программа русифицирована пиратами?
В следующей версии?! :) На дворе 2004 год и Сид Мейер уже выпустил более крутую и навороченную Civilization III. Какое им дело до старых версий?
Но мне просто больше нравится вторая часть. И я думаю, есть люди, которые до сих пор играют в нее. А пираты видимо забили на это.
Достаточно напостить решение проблемы по разным форумам, посвященным старым играм. Так я уже напостил на OldGames.
P.S. Ник придумывал на лету - Slava был занят.