Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Arabic/Persian language support #349

Open
xmha97 opened this issue Feb 22, 2022 · 10 comments
Open

Arabic/Persian language support #349

xmha97 opened this issue Feb 22, 2022 · 10 comments

Comments

@xmha97
Copy link

xmha97 commented Feb 22, 2022

Hi, I want to add the Persian language to this game.
Please help me.

@xmha97
Copy link
Author

xmha97 commented Feb 22, 2022

Persian Font
olikraus/u8g2#532 (comment)

@andwn
Copy link
Owner

andwn commented Feb 22, 2022

Does a translation already exist for the PC version somewhere?

@xmha97
Copy link
Author

xmha97 commented Feb 22, 2022

Does a translation already exist for the PC version somewhere?

No, but I can do the translation.

@andwn
Copy link
Owner

andwn commented Feb 22, 2022

The way I add translations is by taking a translation for the (freeware) PC version and converting it. There are modding tools like Booster's Lab that can be used to edit the script files which contain the game's text.

@xmha97
Copy link
Author

xmha97 commented Feb 22, 2022

I don't know anything about Sega games, please tell me what should I do first?

@andwn
Copy link
Owner

andwn commented Feb 22, 2022

Look in res/tsc. It contains all the translations. The scripts are plain text.

@DreamPlusInfinity
Copy link

I am interested in contributing an Arabic translation. It uses the same basic alphabet but has some differences with the extended characters needed for Persian and Urdu.
Trying to downscale an existing font won't go smoothly, so an original design is needed. Here's one I took the liberty of adjusting to add Persian/Urdu exclusive characters (last two lines) which will be enough for Arabic, Persian, and Urdu.

image

Since it's an 8x8 font, the only changes left will be changing the text to appear right to left. So, changing the coordinates for the text cursor so that the first character appears from the right, substracting from it each character, and so on.

"Reshaping" (the thing with Arabic where a given letter has 4 contextual variant glyphs depending on some rules - its position within a word "initial/medial/final/isolated", some letters that reset position of anything after them to "initial/isolated", and Persian which has ZWJ/ZWNJ non printable characters that force certain positions) is something I would preprocess the text before providing to the project. It could be done in-game (game has a look up table each letter depending on its position in the word) but it could be too complicated. So I intend to prepare a text file that already has the correct shapes for each character calculated beforehand. I would not bother with an ingame solution, the right to left thing is much more important.

@andwn
Copy link
Owner

andwn commented Feb 23, 2022

Ooh, I didn't realize Persian is right to left like Arabic. Shouldn't be hard for me to figure that out for the message window.

For reshaping, if there is some sample code I can stick in tscomp to pick it up and encode the text maybe that would be more convenient? (Then neither you nor the game will have to do that work)

@xmha97 xmha97 changed the title Persian language support Arabic/Persian language support Feb 24, 2022
@DreamPlusInfinity
Copy link

For reshaping, if there is some sample code I can stick in tscomp to pick it up and encode the text maybe that would be more convenient? (Then neither you nor the game will have to do that work)

Maybe this project. (Arabic and Persian mainly, Urdu isn't completely supported)
I'm working on my own lightweight implementation for ingame reshaping (for some other SNES translation projects) but it's not something I can guarantee to get ready in time for this not to be a hindrance.

I'll need to provide the Unicode mappings for this image, as well.

image

I "cheated" and made it so that contextual alternate glyphs that look too similar are the same glyph. Most of the time, it means that instead of using 4 glyphs, I only used 2 for most characters. This was in order to make it so that the font isn't very big, but at a lower level detail this will be hardly noticeable.

Range FE80-FEFF / Standard Arabic (B-Form Glyphs)

3D, 44, 45, 42, 43, 3C, 3C, 46, 47, 36, 36, 35, 35, 40, 41, 01,
01, 00, 00, 2F, 2E, 03, 03, 02, 02, 05, 05, 04, 04, 07, 07, 06,
06, 09, 09, 08, 08, 0B, 0B, 0A, 0A, 37, 37, 38, 38, 39, 39, 3A,
3A, 0D, 0D, 0C, 0C, 0F, 0F, 0E, 0E, 11, 11, 10, 10, 13, 13, 12,
12, 14, 14, 14, 14, 15, 15, 15, 15, 19, 18, 16, 17, 1D, 1C, 1A,
1B, 1F, 1F, 1E, 1E, 21, 21, 20, 20, 23, 23, 22, 22, 25, 25, 24,
24, 27, 27, 26, 26, 29, 29, 28, 28, 2D, 2C, 2A, 2B, 3B, 3B, 34,
33, 32, 31, 30, 30, 4C, 4D, 4A, 4B, 4E, 4F, 48, 49, --, --, --,

Range FB50-FBFF / Extended Arabic-Persian (A-Form Glyphs)

--, --, --, --, --, --, 62, 62, 61, 61, --, --, --, --, --, --,
--, --, --, --, --, --, 7B, 7B, 7A, 7A, 66, 66, 65, 65, --, --,
--, --, --, --, --, --, --, --, --, --, 64, 64, 63, 63, --, --,
--, --, --, --, --, --, --, --, 7C, 7C, 6B, 6B, 7D, 7D, 68, 68,
22, 22, 6A, 6A, 69, 69, --, --, --, --, --, --, --, --, 6F, 6F,
60, 60, 7A, 7A, 6D, 6C, 2D, 67, 5E, 5F, 2A, 2B, 2A, 2B, 7E, 7E,
7F, 7F, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, 6E, 6E, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, 34, 33, 30, 30,

Range 0600-06FF / Basic Arabic (Letters)

--, --, --, --, --, --, --, --, --, --, --, --, 5D, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, 5E, --, --, --, 5A,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
3E, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
50, 51, 52, 53, 54, 55, 56, 57, 58, 59, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
--, --, --, --, --, --, --, --, --, --, --, --, --, --, --, --,
70, 71, 72, 73, 74, 75, 76, 77, 78, 79, --, --, --, --, --, --,

The arrays above represent the Unicode code points from the raw text data after it's converted using that reshaping script. The content of each cell is a value from 00 to 7F from that Arabic font, assuming its very first character is 00. "--" means the character is undefined.
I strongly recommend you use the normal ASCII font since English letters, digits, and punctuation are still needed, (maybe truncate the lowercase characters if there's not enough room in VRAM , and they're not exactly needed) and then the Arabic sub-font immediately following up after a specific value (0x60? 0x80? Your choice. The font is exactly 127 characters long.) Then whenever the game uses this look up table it offsets by that Arabic font starting value.

I hope this was of some help.

@dananothername
Copy link

dananothername commented Mar 26, 2022

Interstated iam beginner
But teach me how to translate it to Arabic
This is my email [email protected]
And Discord
Dannn

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants