[кодинг] Загадочный баг в TomeNET: нужна помощь

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

Ответить
Аватара пользователя
tangar
Сообщения: 550
Зарегистрирован: 05 мар 2015, 17:33
Контактная информация:

[кодинг] Загадочный баг в TomeNET: нужна помощь

Сообщение tangar » 20 янв 2018, 20:08

Если ты - программист, то твоя помощь нужна TomeNET (http://tomenet.eu) ! Уже не первый год висит загадочный баг, никто не знает как его исправить... Суть бага в том, что он не дает использовать некоторые символы из графического шрифта (что за шрифт - можно узнать тут http://mmoforum.org/viewtopic.php?f=23&p=375 ).

Подробности бага и "штаб" по его устранению: https://tomenet.eu/phpBB3/viewtopic.php?f=9&t=1737

Поможите, люди добрые! Советы, догадки, обсуждения - все приветствуется!
https://discord.gg/RuMDQHj - русскоязычный рогаликовый discord-чат
youtube.com/StreamGuild — стримы на русском // youtube.com/GameGlaz — стримы на англ. // tangaria.com — MMO-рогалик

Аватара пользователя
tangar
Сообщения: 550
Зарегистрирован: 05 мар 2015, 17:33
Контактная информация:

Re: [кодинг] Загадочный баг в TomeNET: нужна помощь

Сообщение tangar » 24 фев 2018, 10:13

We still need help with the bug! https://tomenet.eu/phpBB3/viewtopic.php?f=9&t=1737

Guys, lets continue brainstorm!

For now we need to understand how to fix 0, 16-31 glyphs! As 1-16 works for remapping (but actually they are 'system' commands), it has to be possible to make 16-31 work too!

Currently they got this values:

0 linked to 35 (#)

16 ┼ 253C 197
17 ◄ 25C4 17
18 ↕ 2195 18
19 ‼ 203C 19
20 ¶ 00B6 20
21 ┴ 2534 193
22 ┬ 252C 194
23 ┤ 2524 180
24 ↑ 2191 24
25 ├ 251C 195
26 → 2192 26
27 ← 2190 27
28 NULL
29 NULL
30 NULL
31 linked to 35 (#)

Symbols took from https://en.wikipedia.org/wiki/Code_page_437 (but they are in wrong places)

GOGOGO! We can do it!

===
!!! We got an important update:

'Fony' (http://hukka.ncn.fi/?fony) developer Hukka noted that:
Anyway, this seems to be a bug in the game and not Fony. I've seen at least two people say that it's because "Fony relies on Unicode", but that makes no sense when it comes to bitmap fonts, and Fony only really uses Unicode to display various language translations in the user interface. Previous versions of Fony didn't even support Unicode in any way at all! Bitmap fonts have no concept of Unicode, nor does Fony when it's handling them. It's just 256 glyphs, one after another, bitmaps in a file.
Does it looks like it's not the problem of the font, but actually the problem in the TomeNET code? TomeNET source could be found: https://www.tomenet.eu/downloads.php

p.s.
Also Hukka said that soon he would create crossplatform opensource version of Fony! Great news :D
https://discord.gg/RuMDQHj - русскоязычный рогаликовый discord-чат
youtube.com/StreamGuild — стримы на русском // youtube.com/GameGlaz — стримы на англ. // tangaria.com — MMO-рогалик

Bioworm
Сообщения: 89
Зарегистрирован: 01 фев 2007, 03:33

Re: [кодинг] Загадочный баг в TomeNET: нужна помощь

Сообщение Bioworm » 03 апр 2018, 05:48

Посмотрел на исходники. В файле src/client/main-win.c фонт генерируется вот так:

Код: Выделить всё

1322         /* Create the font XXX XXX XXX Note use of "base" */
1323         td->font_id = CreateFont(hgt, wid, 0, 0, FW_DONTCARE, 0, 0, 0,
1324                                  ANSI_CHARSET, OUT_DEFAULT_PRECIS,
1325                                  CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
1326                                  FIXED_PITCH | FF_DONTCARE, base);
Вот описание функции CreateFont:
https://msdn.microsoft.com/en-us/librar ... s.85).aspx

Видишь ANSI_CHARSET? Это значит, что используется кодировка Win-1252:
https://en.wikipedia.org/wiki/Windows-1252

Посмотри там таблицу символов. Обрати внимание, что символы 0-31 это так называемые control characters, a символы 129, 141, 143, 144, 157 там пропущены. То есть это не баг игры, это Windows пропускает эти символы при создании шрифта, разумно считая, что в этой кодировке их все равно нет.

Попробуй вместо ANSI_CHARSET поставить OEM_CHARSET, это должно сменить кодировку на 437. Должны отображаться все символы, кроме 0 и 255.

Только надо учитывать, что если игра использует какие-то нестандартные символы в интерфейсе (кроме алфавита и цифр) они станут отображаться некорректно. C компиляцией-то проблем не будет? У меня нет Windows, я на MacOS сижу, в этом помочь не смогу.

Аватара пользователя
tangar
Сообщения: 550
Зарегистрирован: 05 мар 2015, 17:33
Контактная информация:

Re: [кодинг] Загадочный баг в TomeNET: нужна помощь

Сообщение tangar » 25 апр 2018, 16:59

спасибо за участие в обсуждении)

в осознаии проблемы мы уже довольно далеко продвинулись
https://tomenet.eu/phpBB3/viewtopic.php?f=9&t=1737

проблема в том, как это решить. самый верный вариант - в unicode перевести, но надо оч много правок фигачить, разработчики в ближайшей перспективе не осилят

поэтму пытаемся найти другой вариант - костыли, о них я вопрошаю тут http://angband.oook.cz/forum/showthread ... post128252
https://discord.gg/RuMDQHj - русскоязычный рогаликовый discord-чат
youtube.com/StreamGuild — стримы на русском // youtube.com/GameGlaz — стримы на англ. // tangaria.com — MMO-рогалик

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя