(27.11.2020 08:37)Archer30 Wrote: Berserker and Baratorch, thank you so much for improving ERA and HD to the next level!
Speaking of the Chinese plugin for ERA, there is still one major problem for the plugin to work with HD 32-bit modes. For any 32-bit modes, it looks like this with Chinese plugin loaded:
All characters supported by the Chinese plugin can't be correctly displayed with 32-bit modes.
I'd be very grateful if this could be investigated and solved. As far as I know, this Chinese plugin has a large group of users that it is also the only plugin that supports Korean characters in the game.
Unfortunately, the author of the plugin has been retired for long. the only thing I have is the
source and release of WoG CN
Thank you in advance for your kindly reseach to this.
Я бы сам добавил в эти исходники поддержку 32 бит, но мне совершенно не хочется искать, устанавливать и настраивать то, что их может собрать..
Я могу объяснить как сделать поддержку 32 бит. Это не сложно.
Правда на с++ и именах, используемых в ХД:
В 32 битном режиме все структуры _Pcx16_ являются на самом деле "_Pcx32_"
- разница в размере и формате пикселя:
2 байта RGB565 и 4 байта XRGB8888 соответственно.
#define o_BPP (ByteAt(0x5FA228 + 3) << 3)
o_BPP будет равно 16 в оригинальном режиме и равно 32, если режим 32-битный.
вот код некоторой условной функции, который показывает разницу в форматах
и то как можно добавить поддержку 32 бит:
Code:
void _Pcx16_::DrawPcx16(_Pcx16_ *src_pcx, int dst_x, int dst_y)
{
if (o_BPP == 32)
{
_dword_* src_pixels = (_dword_*)(src_pcx->buffer);
_dword_* dst_pixels = (_dword_*)buffer;
for (int y = 0; y < src_h; y++)
for (int x = 0; x < src_w; x++)
dst_pixels[dst_x + x + (dst_y + y) * scanline_size * 4] = src_pixels[src_x + x + (src_y + y) * src_pcx->scanline_size * 4)];
}
else // 16
{
_word_* src_pixels = (_word_*)(src_pcx->buffer);
_word_* dst_pixels = (_word_*)buffer;
for (int y = 0; y < src_h; y++)
for (int x = 0; x < src_w; x++)
dst_pixels[dst_x + x + (dst_y + y) * scanline_size * 2] = src_pixels[src_x + x + (src_y + y) * src_pcx->scanline_size * 2)];
}
}