[Hướng dẫn] Tiếng Việt trong Visual Novel

bestfriends_0705

Trap Cadet
Messages
289
Reaction score
46
Points
28
Credits
0
Trước có thử vụ A -> W rồi nhưng không được trên BGI.
Cho hỏi bạn làm trên engine nào với font nào luôn :148:
Kĩ thuật memory-patching mình áp dụng trên Ever17 và Steins Gate, cái Steins Gate thì team kia dịch sắp xong. Ever17 chỉ support font monospace nên mình chọn Consolas, Steins Gate bản Tiếng Anh thì font gì cũng được. Kỳ thực mình cũng chẳng biết 2 game đó dùng engine gì :148:

Hook TextOutA thì kiểu như thế này:
PHP:
BOOL WINAPI TextOutMod(_In_ HDC              hdc,
                       _In_ int                 nXStart,
                       _In_ int                 nYStart,
                       _In_ unsigned char*   lpString,
                       _In_ int              cchString)
{
    LOGFONTA logFont;
    HFONT hFont = (HFONT)GetCurrentObject(hdc, OBJ_FONT);
    GetObjectA(hFont, sizeof(LOGFONTA), &logFont);
    OverrideHFont(logFont, hdc);
    WCHAR buffer[2];
    ConvertString((char*)lpString, cchString, buffer, cchString); // đổi từ chuỗi 1 byte sang Unicode theo bảng ánh xạ riêng
    BOOL rs = TextOutW(hdc, nXStart, nYStart, buffer, cchString);
    return rs;
}
 
Last edited:

Death

Đét
Messages
1,773
Reaction score
538
Points
113
Credits
179
Kĩ thuật memory-patching mình áp dụng trên Ever17 và Steins Gate, cái Steins Gate thì team kia dịch sắp xong. Ever17 chỉ support font monospace nên mình chọn Consolas, Steins Gate bản Tiếng Anh thì font gì cũng được. Kỳ thực mình cũng chẳng biết 2 game đó dùng engine gì :148:
Mình chưa động đến engine đấy bao giờ nên cũng chịu :148:
Với cả cái engine mình đang làm là font dạng ảnh nữa nên muốn làm cách này cũng không được :121:
 

Death

Đét
Messages
1,773
Reaction score
538
Points
113
Credits
179
- Người chơi không được đổi font nếu dùng cách này."
->vẫn đổi font đc ông ạ..
Bạn đã thử cách của mình chưa mà phán ghê vậy :mohoi:

mà khuyên các thí chủ trước khi muốn mở pj nên tìm hiểu file script encode loại gì??
Quan trọng hơn là có đổi được font không, vì đổi đc font thì 99% là hiện được tiếng Việt dù encode loại gì đi nữa. (chủ yếu cũng chỉ là shift-jis thôi)
 

Death

Đét
Messages
1,773
Reaction score
538
Points
113
Credits
179
shift jis ko hiển thị tiếng việt ông ạ, dù có đổi đc font.. với 1 số game như koi to senkyo to chocolate sử dụng shift jis, mod font đủ kiểu cũng ko hiển thị tiếng việt, convert script từ shift jis sang utf8 hoặc utf LE sẽ ko chạy dc game... nhờ mấy tên hacker nước ngoài cũng bó tay
BGI dùng Shift-JIS đây bạn, đã test trên Subahibi và Aiyoku.

 

aKKi

Eroge Addict
Uploader
Messages
676
Reaction score
2,080
Points
93
Credits
34
Mình đang nghiên cứu 1 game, mãi mới đổi được text trong game.
Game nó xài SHIFT-JIS, nên mình định thử edit font.
Tìm trong game được 1 file font .DAT này. (không biết nó có chính xác là file font của game hay không, nhưng mà tên vậy chắc 96% rồi)
Không biết có cao nhân nào cứu vãn được không

Edit: Mới phát hiện game nó có xài font MS 明朝 (MS Mincho) của window, edit thử thì work
Cơ mà nó hiện chữ rất kì, không giống như lúc đầu =(( Mình xài fontforge để edit, test trong word thì font có vẻ bt, trong game thì nó vầy

Chữ mình edit thử là 昔.
 
Last edited:

nanomin

Legendary Adventurer
Uploader
Messages
169
Reaction score
71
Points
28
Credits
8
Mình đang nghiên cứu 1 game, mãi mới đổi được text trong game.
Game nó xài SHIFT-JIS, nên mình định thử edit font.
Tìm trong game được 1 file font .DAT này. (không biết nó có chính xác là file font của game hay không, nhưng mà tên vậy chắc 96% rồi)
Không biết có cao nhân nào cứu vãn được không
File gồm 2 section: fileSystem và bitmap data của từng chữ

- File system: dword, dword, ...., dword (little endian)
Mỗi dword sẽ lưu offset (tính từ đầu file) của bitmap data tương ứng.
Size của fileSystem = (dword khác 0 đầu tiên) - 1

- Bitmap data: gồm 2 phần nhỏ là header (24 bytes/6 dword) và dữ liệu bitmap
2nd dword = height
6th dword = size của dữ liệu bitmap
width = size / height
Dư liệu bitmap có kích thước là size bytes, nằm ngay sau header, với mỗi byte encode một giá trị của greyscale.

Chương trình sample in ra image của từng font: https://gist.github.com/hatsuyuki15/f2a9bd5e6025ebb1b32a9bad6e0c47d2
 

aKKi

Eroge Addict
Uploader
Messages
676
Reaction score
2,080
Points
93
Credits
34
File gồm 2 section: fileSystem và bitmap data của từng chữ

- File system: dword, dword, ...., dword (little endian)
Mỗi dword sẽ lưu offset (tính từ đầu file) của bitmap data tương ứng.
Size của fileSystem = (dword khác 0 đầu tiên) - 1

- Bitmap data: gồm 2 phần nhỏ là header (24 bytes/6 dword) và dữ liệu bitmap
2nd dword = height
6th dword = size của dữ liệu bitmap
width = size / height
Dư liệu bitmap có kích thước là size bytes, nằm ngay sau header, với mỗi byte encode một giá trị của greyscale.

Chương trình sample in ra image của từng font: https://gist.github.com/hatsuyuki15/f2a9bd5e6025ebb1b32a9bad6e0c47d2
Ồ cảm ơn bác
Có cách nào biết bitmap data nào ứng với SHIFT JIS Hexcode nào không bác...
 
Top