![]() |
|
Production & Help For discussions regarding production aspects, especially localisation, of visual novels and related games. |
![]() |
|
Thread Tools | Display Modes |
#1
|
||||
|
||||
![]()
Does anyone have any documentation/tools re: the SNX scripts used in NEXTON's LCScriptEngine (used in games like Moon. DVD)? The archive format was simple enough to write an unpacker for (xor everything by $CC and the normal [offset][size][filename] pattern was obvious enough), but apart from the fact that each byte of the SNXs are xored by $AA, I know next to nothing about the format, and I figured it would save time in figuring it out if someone had already done so. (I'm looking at you, zalas =p)
|
#2
|
||||
|
||||
![]()
Oh, and, for reference, I only care about replacing text with English. I don't want to rescript MOON. =p
|
#3
|
|||
|
|||
![]()
I have the format somewhat figured out, and it was enough to translate ONE. However, things like being able to change the player's name is a lot tougher to line wrap. I can give you the tools that I used, but I can't really offer any support since I'm too busy with other stuff.
|
#4
|
||||
|
||||
![]() Quote:
Last edited by Asceai; 2008-02-07 at 02:14. |
#5
|
|||
|
|||
![]() Quote:
But it's usable anyway imo |
#6
|
||||
|
||||
![]()
Well, VASTT uses python plugin modules for the different formats, so if nothing else it does document the format for me, which is more than enough.
Last edited by Asceai; 2008-02-16 at 22:38. |
#7
|
||||
|
||||
![]()
Well, shoot, VASTT can't read MOON.'s scripts. I'll see if the change in the formats between MOON. and ONE is small enough to hack VASTT into reading it anyway.
|
#8
|
|||
|
|||
![]()
VASTT operates using a different plugin for each different file format (or variations on file formats between games from the same company). You don't need to hack the program to get it to work, just make a new plugin.
|
#9
|
||||
|
||||
![]()
Actually, I was going to just use VASTT's existing plugin as a base, just so I can construct an automated tool (there are 119 scripts, and unless I missed something, I would have to import and export them manually)
EDIT: Okay, so ONE's scripts aren't encoded with the XOR filter, that's something. EDIT: Nah, ONE's format is _totally_ different. Crazy. Never would have expected this. EDIT: Dunno what I was really so worried about, the bytecode format is actually rather simple. Providing I don't have to rescript much this should be easy. Last edited by Asceai; 2008-02-08 at 16:23. |
#10
|
||||
|
||||
![]()
Well, after messing around with the archive format a bit (WHY does the order that the files appear matter? :<<<) and working on some tools, I can replace text... sorta.
![]() I can fix the fact that the spaces between words don't work properly just by using a fullwidth space, I guess, but I've no idea how to fix the font spacing issue just now. Could someone who has found this issue with other games and resolved it post? I'm new to this =p EDIT: I know a few pieces of the bytecode, now; enough to create new textboxes as needed, at least. Still no clue about the letter spacing. For now I'll use fullwidths. Last edited by Asceai; 2008-02-09 at 00:01. |
#11
|
|||
|
|||
![]()
May I inquire as to whether you will be translating the game, Moon?
|
#12
|
|||
|
|||
![]()
Try to detect the place in the exe where the font is created (with the CreateFont or CreateFontIndirect Win32 API call) then try to use a proportional font instead, e.g. Arial.
The structure used in CreateFontIndirect is: Code:
typedef struct tagLOGFONT { LONG lfHeight; LONG lfWidth; LONG lfEscapement; LONG lfOrientation; LONG lfWeight; BYTE lfItalic; BYTE lfUnderline; BYTE lfStrikeOut; BYTE lfCharSet; BYTE lfOutPrecision; BYTE lfClipPrecision; BYTE lfQuality; BYTE lfPitchAndFamily; TCHAR lfFaceName[LF_FACESIZE]; } LOGFONT, *PLOGFONT; Code:
HFONT CreateFont( int nHeight, // height of font int nWidth, // average character width int nEscapement, // angle of escapement int nOrientation, // base-line orientation angle int fnWeight, // font weight DWORD fdwItalic, // italic attribute option DWORD fdwUnderline, // underline attribute option DWORD fdwStrikeOut, // strikeout attribute option DWORD fdwCharSet, // character set identifier DWORD fdwOutputPrecision, // output precision DWORD fdwClipPrecision, // clipping precision DWORD fdwQuality, // output quality DWORD fdwPitchAndFamily, // pitch and family LPCTSTR lpszFace // typeface name ); * lfPitchAndFamily should have bit VARIABLE_PITCH (2) flagged instead of FIXED_PITCH (1) e.g. if the value is 0x65 (0x64 | 0x01), change it to 0x66 (0x64 | 0x02) Nevertheless, be prepared to obtain non-optimal results, as generally Japanese games tend to assume characters fit on a grid (hence the monospace thingie, some VNs draw text character by character and place them, instead of drawing the string on a bitmap and blit it onto the main surface). At worse, you'll have to write the text layout routines (word-wrapping, etc.) by yourself, as Haeleth did with rlBabel, for RealLive, IIRC. EDIT: Link to past thread where I raised the issue. Last edited by Rasqual Twilight; 2008-02-09 at 12:33. |
#13
|
||||
|
||||
![]()
Well, I've hit a bit of a brick wall for the time being. The issue is with jumps in the script, and more importantly, identifying them. Because I don't know 95% of the bytecode, including any jump commands other than the pure $10 ## ## jump, I've no idea how I'm going to record all those for offsetting later, other than fully documenting the bytecode, which is rather detailed and I don't really want to do it.
In addition, although I've found at least one of the jump tables used when interpreting the script, from there it's still difficult to work out what each command does. But if anything's going to happen with a MOON. translation, it's definitely going to require documenting at least some of the bytecode, so there's no real way around it. I want a MOON. translation so I'm not going to give up just yet =p Last edited by Asceai; 2008-02-16 at 22:37. |
#14
|
|||
|
|||
![]()
This isn't related to the engine, just me sucking up Asceai for being such a sexy god.
Asceai, I fucking love you right now. I bought MOON. like two months ago on a whim, was about to start playing it now (with Atlas and Wakan.. not enough moonspeak to play MOON. yeah, there, I said it.) like an hour ago, decided to check this forum for no particular reason, saw this thread. I seriously love you right now. A hope for a translation (project) is better than no hope whatsoever. Kind of a letdown to stack MOON. back in a shelve for months and months to come, though. Oh well, FARGO can wait. Now, gotta start refreshing this every five minutes. |
#15
|
|||
|
|||
![]()
If the translation is going to happen, I sure want to have it.. I got the game like a week ago after trying for months to get it but I even did my best to find a way to make it work on my computer. But now that it finnaly work, I come upon the problem that I can't pull out the text from the game while playing and so can't translate any..
a translation sure would help me.. It's one of these rare game where I can play a character nearer to myself. (Most game these days have a male characters as the main one.. As a girl, I don't like playing as a man much) so such a rare game is very tempting into playing.) |
![]() |
Thread Tools | |
Display Modes | |
|
|