Перейти к содержимому
Zone of Games Forum
lilinoa

Не поддерживается русский язык при вводе имени

Рекомендованные сообщения

Здравствуйте!

Закончили перевод новеллы Amnesia:Memories , но как всегда в последний момент обнаружилась проблема. Невозможно ввести имя героини на русском языке,  оно просто не отображается. 

Покопавшись в файлах, оказалось, что алфавит для ввода имени записан вот такими символами “ABCDEFGHIJKLM” , естественно, замена на обычные “А Б В Г Д” только ухудшила ситуацию:

Скрытый текст

6I7OPiiwRzw.jpg

Возможно ли как-то решить эту проблему? Или тут уже всё, без вариантов? Не вводить имя нельзя, игра не пускает без этого. Можно как-то заблокировать возможность выбора имени?

p.s. заменяла информацию в файлах: mode_name.iet и function_utility.lua. Можно скачать вот тут 

Поделиться сообщением


Ссылка на сообщение
On 6/3/2018 at 11:38 PM, lilinoa said:

Здравствуйте!

Закончили перевод новеллы Amnesia:Memories , но как всегда в последний момент обнаружилась проблема. Невозможно ввести имя героини на русском языке,  оно просто не отображается. 

Покопавшись в файлах, оказалось, что алфавит для ввода имени записан вот такими символами “ABCDEFGHIJKLM” , естественно, замена на обычные “А Б В Г Д” только ухудшила ситуацию:

Spoiler

 

Чтобы отображались русские имена и русские символы при вводе, вы сможете лишь в том случае, если перерисуете в шрифте ttf или otf английский и японский в японской локали. (U+FF21 и далее) (Это сработает)

Spoiler

fullwidth = fullwidth .. "abcdefghijklmnopqrstuvwxyz" (для отображения введённого символа)
fullwidth = fullwidth .. "ABCDEFGHIJKLMNOPQRSTUVWXYZ" (для отображения введённого символа)
fullwidth = fullwidth .. "アイウエオカキクケコサシスセソ\タチツテトナニヌネノ" (для отображения введённого символа)
fullwidth = fullwidth .. "ハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ" (для отображения введённого символа)

table.insert(t, "ABCDEFGHIJKLM") (для отображения вводимого символа)
table.insert(t, "NOPQRSTUVWXYZ") (для отображения вводимого символа)
table.insert(t, "abcdefghijklm") (для отображения вводимого символа)
table.insert(t, "nopqrstuvwxyz") (для отображения вводимого символа)
table.insert(t, "ハヒフヘホマミムメモヤユヨラ") (для отображения вводимого символа)

 

Но учтите, что ширина русской буквы должны быть, такой же как и в японской кодировке.

33/33 русских символов (нижнего и верхнего регистра) = 26/26 английских символов (нижнего и верхнего регистра) + 14 символов японской локали итого = 66 перерисованных символов, но можно и сократить, убрав из верхнего регистра несколько ненужных русских символов.

Spoiler

af1f368096c1afa58b4ae35d7467ac7d.jpg

 

А можно всего этого избежать.

 

Spoiler

 

mode_name.iet

    local t = {}
    table.insert(t, "АБВГДЕЁЖЗИЙКЛМНОП")
    table.insert(t, "РСТУФХЦЧШЩЪЫЬЭЮЯ")
    table.insert(t, "абвгдеёжзийклмноп")
    table.insert(t, "рстуфхцчшщъыьэюя")
    table.insert(t, "0123456789!?-@#$")
    S_TxtInput.txt_area2 = {}
    _text_set(e, S_TxtInput.txt_area2, t, 2)  (изначально стоит 3 = три символа для отображения японских символов в ANSI / 2 символа для отображения русских символов в ANSI)

    table.insert(t, "АБВГДЕЁЖЗИЙКЛМНОП") (вмещается 13 символов) МНОП — будут видны, но не будут работать как вводимый символ.

mode_name.iet

    local t = {}
    table.insert(t, "АБВГДЕЁЖЗИЙКЛ")
    table.insert(t, "МНОПРСТУФХЦЧШ")
    table.insert(t, "ЩЪЫЬЭЮЯабвгде")
    table.insert(t, "ёжзийклмнопрст")
    table.insert(t, "уфхцчшщъыьэюя")
    S_TxtInput.txt_area2 = {}
    _text_set(e, S_TxtInput.txt_area2, t, 2)

Лучше так без твёрдого знака Ъ

 

Где-то ещё надо искать код для 3 символов ввода в mode_name.iet (данный файл служит для ввода символов) (и скорее всего код для изменения размера выделенной области для буквы, немного выше)

function_utility.lua

        halfwidth = halfwidth .. "abcdefghijklmnopqrstuvwxyz"
        halfwidth = halfwidth .. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        halfwidth = halfwidth .. "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。「」、・ー゙゚"
        fullwidth = fullwidth .. "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
        fullwidth = fullwidth .. "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
        fullwidth = fullwidth .. "アイウエオカキクケコサシスセソ\タチツテトナニヌネノ"
        fullwidth = fullwidth .. "ハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ"
        fullwidth = fullwidth .. "。「」、・ー゛゜"

 

Spoiler

b426ca0e58a9b2c02868f1c1e004a42c.jpg

 

Изменено пользователем Tericonio
  • +1 1

Поделиться сообщением


Ссылка на сообщение
23 часа назад, Tericonio сказал:
  Не актуально (Показать содержимое)

 

Чтобы отображались русские имена и русские символы при вводе, вы сможете лишь в том случае, если перерисуете в шрифте ttf или otf английский и японский в японской локали. (U+FF21 и далее) (Это сработает)

  Код в скриптах (Показать содержимое)

fullwidth = fullwidth .. "abcdefghijklmnopqrstuvwxyz" (для отображения введённого символа)
fullwidth = fullwidth .. "ABCDEFGHIJKLMNOPQRSTUVWXYZ" (для отображения введённого символа)
fullwidth = fullwidth .. "アイウエオカキクケコサシスセソ\タチツテトナニヌネノ" (для отображения введённого символа)
fullwidth = fullwidth .. "ハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ" (для отображения введённого символа)

table.insert(t, "ABCDEFGHIJKLM") (для отображения вводимого символа)
table.insert(t, "NOPQRSTUVWXYZ") (для отображения вводимого символа)
table.insert(t, "abcdefghijklm") (для отображения вводимого символа)
table.insert(t, "nopqrstuvwxyz") (для отображения вводимого символа)
table.insert(t, "ハヒフヘホマミムメモヤユヨラ") (для отображения вводимого символа)

 

Но учтите, что ширина русской буквы должны быть, такой же как и в японской кодировке.

33/33 русских символов (нижнего и верхнего регистра) = 26/26 английских символов (нижнего и верхнего регистра) + 14 символов японской локали итого = 66 перерисованных символов, но можно и сократить, убрав из верхнего регистра несколько ненужных русских символов.

  Как будет смотрется (Показать содержимое)

af1f368096c1afa58b4ae35d7467ac7d.jpg

 

А можно всего этого избежать.

 

  Лучший вариант (Скрыть содержимое)

 

mode_name.iet

    local t = {}
    table.insert(t, "АБВГДЕЁЖЗИЙКЛМНОП")
    table.insert(t, "РСТУФХЦЧШЩЪЫЬЭЮЯ")
    table.insert(t, "абвгдеёжзийклмноп")
    table.insert(t, "рстуфхцчшщъыьэюя")
    table.insert(t, "0123456789!?-@#$")
    S_TxtInput.txt_area2 = {}
    _text_set(e, S_TxtInput.txt_area2, t, 2)  (изначально стоит 3 = три символа для отображения японских символов в ANSI / 2 символа для отображения русских символов в ANSI)

    table.insert(t, "АБВГДЕЁЖЗИЙКЛМНОП") (вмещается 13 символов) МНОП — будут видны, но не будут работать как вводимый символ.

mode_name.iet

    local t = {}
    table.insert(t, "АБВГДЕЁЖЗИЙКЛ")
    table.insert(t, "МНОПРСТУФХЦЧШ")
    table.insert(t, "ЩЪЫЬЭЮЯабвгде")
    table.insert(t, "ёжзийклмнопрст")
    table.insert(t, "уфхцчшщъыьэюя")
    S_TxtInput.txt_area2 = {}
    _text_set(e, S_TxtInput.txt_area2, t, 2)

Лучше так без твёрдого знака Ъ

 

Где-то ещё надо искать код для 3 символов ввода в mode_name.iet (данный файл служит для ввода символов) (и скорее всего код для изменения размера выделенной области для буквы, немного выше)

function_utility.lua

        halfwidth = halfwidth .. "abcdefghijklmnopqrstuvwxyz"
        halfwidth = halfwidth .. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        halfwidth = halfwidth .. "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。「」、・ー゙゚"
        fullwidth = fullwidth .. "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
        fullwidth = fullwidth .. "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
        fullwidth = fullwidth .. "アイウエオカキクケコサシスセソ\タチツテトナニヌネノ"
        fullwidth = fullwidth .. "ハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ"
        fullwidth = fullwidth .. "。「」、・ー゛゜"

 

  В итоге как будет смотреться (Показать содержимое)

b426ca0e58a9b2c02868f1c1e004a42c.jpg

 

Большое спасибо! Стало лучше, но лишь немного.. Набираются буквы с трудом, буквально через раз. Но вот в самой игре, после ввода имени,  когда персонажи обращаются к героине, оно всё ещё на английском. Возможно, где-то ещё нужно что-то исправить?

Поделиться сообщением


Ссылка на сообщение

@lilinoa 

Пока есть такая проблема, только как её решить не прибегая к первому варианту — кодирования символов английских и японских, пока нет представления.

Сами файлы написаны на Lua. Если с вводимыми символами решаемо, то если в нижнем коде менять 1 на 2, при том что — выше в коде будет стоять 3, в окне ввода введённые символы исчезают, но появляются в диалоге как и должно быть на русском.

Так же непонятен код расстояния между символами, для любой кодировки при вводе этих символов, его как будто, куда-то впихнули не в тот скрипт.

Вот эта злосчастная 1 — портит всё.

Изменено пользователем Tericonio

Поделиться сообщением


Ссылка на сообщение
On 6/3/2018 at 11:38 PM, lilinoa said:

Можно как-то заблокировать возможность выбора имени?

Заблокировать ввод имени возможно так же.

Но тогда вам придётся придумать имя Героине. Изменить немного диалог до ввода имени, и заменить #Name[0] на имя героини во всех файлах .iet/*.lua. Где что закомментировать я помогу. Но это не совсем верное решение.

Блокировку ввода добился, после диалога о вводе имени

        [maintxt_print text="   What about your name?"]
        [maintxt_print text="   Do you think you can at least"]
        [maintxt_print text="   remember your name?"]

переходит к следующему диалогу игнорируя ввод символов.

        [maintxt_print text="   #Name[0]......?"]
        [maintxt_print text="   Is that your name?"]

Если ввести за место #Name[0] — Сью, то диалог примет такой оборот.

Сью......?
Is that your name?

А вот решить проблему с вводом имени пока не удаётся, кроме как кодировать шрифт от A-Z и a-z.  Тут нужен спец по Lua, а также нужны будут:  вся игра, и все распакованные файлы, если кто-то возьмётся.

Код скорее всего для правильного ввода, находится в mode_name.iet

Spoiler

    local _text_set = function (e, dst, src, byte_len)
        for i = 1, #src do
            dst = {}
            for j = 1, math.floor(string.len(src) / byte_len) do
                local idx_begin = 1 + byte_len * (j -1)
                dst[j] = string.sub(src, idx_begin, idx_begin + (byte_len -1))
            end
        end
    end

Или может не только в ней, но ещё и ниже.

 

Изменено пользователем Tericonio

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас



Zone of Games © 2003–2024 | Реклама на сайте.

×