Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - ViToTiV

Страницы: [1] 2 3 4 5 6 Далее
1
На французский переводили usa версию

2
Игры на телефоне я не воспринимаю в принципе.
В общем с текстом разобрался, редактор почти готов.
За основу будет взята французская версия, её прохакали ппц, даже новый пункт в настройках добавили с выбором сложности японской или английской версии. А что ещё более удивительно - это добавили субтитры в видео через саму игру, а не хардсабом

3
неужели ещё до сих пор есть люди, называющие iso ромами))

первое видео правильное, но действия начиная с 18:13 вообще не нужны.

5
paul_met, ну это то всё понятно, как по твоему мы вторую часть перевели?)) и даже исправили ошибку разрабов/локализаторов с перепутанными портретами в конце игры

6
Guyver(X.B.M.), ты разделяешь строки по 0х00, а они не разделяются по нулю, они вообще вроде как никаким кодом не разделяются, как до текста могут быть любые коды, так и после текста могут быть любые коды

7
paul_met, согласен, но у меня, к сожалению, уже давно нет времени на изучение чего-то нового (занимаюсь этим всем исключительно на работе, дома свои дела)
Guyver(X.B.M.), ну мне не очистить текст надо, а отделить от кодов, чтобы потом правильно собрать это всё при вставке текста назад.

в общем, буду копать, всем спасибо за помощь  :thumbup:

8
Guyver(X.B.M.), в рот мне ноги)) столько телодвижений пришлось сделать?))
Спасибо ещё раз, с декодированием текста всё понятно!  :drinks:

Копаюсь, самое стрёмное - это отделить спецкоды от текста, и это капец. Но тут уже придётся разбираться, что сделаешь

9
paul_met, Guyver(X.B.M.), спасибо большое!

вот шрифт игры - https://disk.yandex.ru/d/wpLqDYZDuuSl_w
словарь да, один на весь текст

Вот таблица для твоего текста (её надо дополнять знаками препинания и, может, ещё какими-то спецсимволами, пока там 572 "символа"):
так а как ты её получил? откуда ты взял все эти коды?  :?
и сразу поправочка в твою таблицу: 01=пробел, 21=перенос строки

круптар я только знаю, что есть такая программа, но никогда не пользовался
и мысли в слух - теоретически же текст назад не обязательно кодировать, ведь можно не использовать словарь, а писать прямым текстом?

10
paul_met, не понял, так у тебя уже получилось декодировать???

11
paul_met, не совсем понимаю о какой таблице идёт речь. Файла словаря не достаточно? надо ещё что-то?
в исходниках программы, которая извлекает текст (ссылку на которую я выложил в первом посте) есть такой код:

/*****************************************************************************/
/* psx_string_decode.c : Code to decode WD's Text in Lunar's Script files.   */
/*                      PSX English Edition - Created using Supper's notes,  */
/*                      comparing with Saturn version, and taking some       */
/*                      guesses.  (I didn't feel like staring at PSX ASM).   */
/*****************************************************************************/
#ifdef _MSC_VER
#pragma warning(disable:4996)
#endif

/* Includes */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* Defines */
#define psxBufferSize (10*1024) //Should be Overkill

/* Function Prototypes */
int loadPSXStringTable(char* inFname);
int releasePSXStringTable();
int getPSXComprStr(int compressionIndex, char* target, int* tlen);
int convertPSXText(char* strIn, char** strOut, int len, int* lenOut);


static unsigned char tmpPsxBuf[psxBufferSize];
static int G_NumPSXTableEntries = 0;
static char** pPSXTableEntries = NULL;


/******************************************************************************/
/* loadPSXStringTable - Loads in a table of NULL-terminated lookup strings.   */
/* Input - Name of file to load.                                              */
/* Returns 0 on success, -1 on failure.                                       */
/******************************************************************************/
int loadPSXStringTable(char* inFname){

FILE* infile;
int entryIndex;
int x = 0;
infile = fopen(inFname, "rb");
if (infile == NULL){
printf("Error opening %s\n", inFname);
return -1;
}

/* Part 1, count # entries */
while (1){
fread(tmpPsxBuf, 1, 1, infile);
if (feof(infile))
break;

if (*tmpPsxBuf == 0x00)
G_NumPSXTableEntries++;
}

/* Part 2, Allocate Space and add entries */
fseek(infile, 0, SEEK_SET);
entryIndex = 0;

pPSXTableEntries = (char**)malloc(sizeof(char*)*G_NumPSXTableEntries);
if (*pPSXTableEntries == NULL){
printf("Error allocating memory for table entries.\n");
return -1;
}

while (1){
x = 0;
fread(&tmpPsxBuf[x], 1, 1, infile);
if (feof(infile))
break;

while (tmpPsxBuf[x] != 0x00){
x++;
fread(&tmpPsxBuf[x], 1, 1, infile);
}
pPSXTableEntries[entryIndex] = (char*)malloc(x+1);
if (pPSXTableEntries[entryIndex] == NULL){
printf("Error allocating memory for table entry.\n");
return -1;
}
memset(pPSXTableEntries[entryIndex], 0,x+1);
memcpy(pPSXTableEntries[entryIndex], tmpPsxBuf, x);
entryIndex++;
}
fclose(infile);

return 0;
}


/******************************************************************************/
/* releasePSXStringTable - Removes resources used by a loaded string table.   */
/* Returns 0 on success, -1 on failure.                                       */
/******************************************************************************/
int releasePSXStringTable(){

int x;
for (x = 0; x < G_NumPSXTableEntries; x++){
if (pPSXTableEntries[x] != NULL){
free(pPSXTableEntries[x]);
pPSXTableEntries[x] = NULL;
}
}
if (pPSXTableEntries != NULL){
free(pPSXTableEntries);
}
pPSXTableEntries = NULL;
G_NumPSXTableEntries = 0;

return 0;
}


/******************************************************************************/
/* getPSXComprStr - Looks up a compression string by an index value and       */
/*                  copies the string and length of the string.               */
/* Input - Lookup index.                                                      */
/* Returns 0 on success, -1 on failure.                                       */
/******************************************************************************/
int getPSXComprStr(int compressionIndex, char* target, int* tlen){

if (compressionIndex >= G_NumPSXTableEntries){
printf("Invalid index in getPSXComprStr\n");
return -1;
}
else{
strcpy(target, pPSXTableEntries[compressionIndex]);
*tlen = strlen(pPSXTableEntries[compressionIndex]);
}
return 0;
}


/******************************************************************************/
/* convertPSXText - Decompresses a compressed string.                         */
/*                  I took a lot of guessing here.  Seems to work fine for all*/
/*                  files except maybe File51?  iOS has 3 text statements     */
/*                  there that print as "{10}" whereas this outputs "ta{10}I "*/
/*                  Maybe thats normal, not a big deal if it isn't.           */
/* Input - Compressed String.                                                 */
/* Returns 0 on success, -1 on failure.                                       */
/******************************************************************************/
int convertPSXText(char* strIn, char** strOut, int len, int* lenOut){

unsigned char* ptarget, *optr;
unsigned char input, inputNext;
int compressionIndex, x, stroutIndex;
int offset = 0;
int out_offset = 0;
int enableCtrlCodes = 1;
*lenOut = 0;
ptarget = tmpPsxBuf;
memset(ptarget, 0, psxBufferSize);

/* Decode the message */
while (offset < len){

int tlen = 0;
input = (unsigned char)strIn[offset];
inputNext = (unsigned char)strIn[offset+1];

if (input == 0x0){
offset++;  //maybe this re-enables control codes?
            enableCtrlCodes = 1;
continue;
}
else if (input == 0xFF){
printf("End of input text stream detected.\n");
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = 0xFF;
offset++;
break;
}



if (enableCtrlCodes){

if (input == 0xE){
enableCtrlCodes = 0;
offset++;
continue;
}
if ((input == 0x1) || (input == 0x2) || (input == 0x3)){
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = input;
offset++;
continue;
}
if (input == 0x4){
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = 0x00;
offset++;
continue;
}

if (((input == 0xF9) || (input == 0xF8) || (input == 0xFA) || (input == 0xFB) ||
(input == 0xFC) || (input == 0xF6) || (input == 0xF1))){

//Copy Ctrl Code
ptarget[out_offset++] = input;
ptarget[out_offset++] = inputNext;
offset += 2;
continue;
}

if (input == 0xFF){
printf("End of input text stream detected.\n");
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = 0xFF;
offset++;
break;
}

//If you get here, assume not a control code, enter Text Mode
//printf("Unknown value 0x%X encountered. '%c'\n",input, input+0x1F);
}

enableCtrlCodes = 0;
if (input < 0x5C){

if (input == 0xB){
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = 0x00;
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = 0x01;
offset++;
continue;
}
else if (input == 0x21){
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = 0x02;
offset++;
continue;
}
else if (input == 0x6){
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = 0x00;
offset++;
continue;
}
else if (input == 0x5){
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = 0x00;
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = 0x03;
ptarget[out_offset++] = 0xFF;
ptarget[out_offset++] = 0xFF;
offset++;
break;
}
else{
//Uncompressed ASCII Literal
ptarget[out_offset] = input + (unsigned char)0x1F;
out_offset++;
}
}
else if (input == 0xFD){
//Compression Extended Lkup Version 1
offset++;
input = (unsigned char)strIn[offset];
compressionIndex = (unsigned int)input + 0x00A1;
getPSXComprStr(compressionIndex, (char*)&ptarget[out_offset], &tlen);
out_offset += tlen;
}
else if (input == 0xFE){
//Compression Extended Lkup Version 2
offset++;
input = (unsigned char)strIn[offset];
compressionIndex = (unsigned int)input + 0x019E;
getPSXComprStr(compressionIndex, (char*)&ptarget[out_offset], &tlen);
out_offset += tlen;
}
else{
//Std Lookup
compressionIndex = input - 0x005C;
getPSXComprStr(compressionIndex, (char*)&ptarget[out_offset], &tlen);
out_offset += tlen;
}

offset++;

/* End of text */
if (ptarget[out_offset - 1] == '$')
break;
}


/* Copy out actual decompressed string */
*strOut = (char*)malloc(2*(out_offset + 1));
if (*strOut == NULL){
printf("Error allocating memory for string buffer.\n");
return -1;
}

optr = (unsigned char*)(*strOut);
stroutIndex = 0;
memset(optr, 0, 2 * (out_offset + 1));
for (x = 0; x < out_offset; x++){

if (ptarget[x] >= 0xF0){  //ctrl code
optr[stroutIndex++] = ptarget[x++];
optr[stroutIndex++] = ptarget[x];
}
else{
optr[stroutIndex++] = ptarget[x];
}
}
*lenOut = stroutIndex;

return offset;
}

но я в Си не силён, может кто-нить сможет разобраться?

12
Guyver(X.B.M.), так откуда ж я знаю то?) я поэтому и прошу помочь разобраться

13
Всем доброго дня!
На днях наконец-то вышел наш перевод "Lunar 2", ура!  :cool:
Но переводчик жаждет перевести первую часть, а перевода первой части не существует ни в каком виде!
Поковырял игру - шрифт и графика есть, но текст с сожалению сжат по словарю. В нете есть прога для сжатия и распаковки, но запаковка только для Saturn версии - https://github.com/MrConan1/lsb (возможно в исходниках есть все ответы, но я не спец по Си)
Прошу помощи знатоков в распаковке и запаковке текста для PS1.

Что есть:

1. Исходный файл с запакованный текстом - https://disk.yandex.ru/d/QCsebJIuEQKN1A
Формат вроде понятен: первые 0х800 байт - блок поинтеров, по 2 байта на поинтер, пустые поинтеры (0000) игнорятся. Значение поинтера * 2 = реальная позиция текстовой строки в файле.

2. Файл словаря - https://disk.yandex.ru/d/6Z_OU9refnuIcA

3. Файлы с распакованным текстом, полученные через прогу, которую я указал выше - https://disk.yandex.ru/d/uJeejzt6pYWbyw
В этих файлах есть куча информации, которая возможно содержит всё, что нужно, но без опыта в сжатии сложно понять о чём там речь.

Подарим перевод этой игры русскому сообществу!)

14
Свершилось! Наш перевод Lunar 2 для PS1 выложен на рутрекере

15
Guyver(X.B.M.), спасибо за прогу
как выложим перевод Lunar 2 (тестирование завершено, осталось пару картинок перерисовать), сразу тогда вернусь к первой части, но надо опять с нуля разбираться, т.к. копал давно, и ничё уже не помню что там к чему

16
Guyver(X.B.M.), ну так вот поэтому я и пишу, что если здесь кто-нить готов помочь, то будет круто  :ohmy: просто лично я никогда не писал прог для сжатия, нету опыта  :neznayu:
самое главное, что переводчик готов прямо сча переводить, только дайте текст говорит

17
А с чего это? Ты же заявлял что он тебя утомил и ты его дропаешь.
нашёлся чел, который по 1000 строк в день переводил на протяжении нескольких месяцев

На счет бонус двд, вы могли бы включить туда настоящий бонус контент с доп диска "The Making of Lunar 2"
так и планировалось, но без русских субтитров нет смысла, но переводчику заниматься субтитрами было не интересно, а мне уж и подавно.

Все еще надеюсь на перевод первой части, ведь вторую на русском я уже играл
а вот это хороший вопрос. и шрифт и текст есть, но текст сжат по словарю, словарь прописан в запускном файле, и поэтому как мне кажется перевод становится не реален  :neznayu:, но если местные умельцы помогли бы, то может что-нить и получилось бы.  :cool:

18
со дня на день выйдет наш многострадальный перевод Lunar 2 (PS1), осталось дотестировать эпилог!   :gamer:


19
а где взять такой ром игры в оригинале? выглядит прилично на видосе

Добавлено позже:
нашёл демку на 4 уровня, дальше второго экрана первого уровня пройти не смог, мочит первый же враг постоянно))
а есть полная версия у кого нить?

20
только тут наверное старая версия, а шапку уже не могу редактировать

21
Все работает на реальной А500+
фигасе)
подписано А1200 это для эмулятора, не помню на каком я тестировал, он брал эту инфу для кикстартера (или как он там назывался)

22
а хак на железе будет работать? пусть без увеличения fps, но хотя бы с исправлением глюков

23
я тут задумал самый эпичный ромхак Zero Tolerance на свете и к нему бы маленько музыки новой
пили под SEGACD, тогда с музыкой дело не встанет)

24
А Лунар был с Sega CD или PSOne?
https://vit-co.ru/viewtopic.php?f=3&t=69
самому даже обидно, что перевод канет в бездну, столько сил на него потрачено было, с одними только видеороликами несколько месяцев возился, когда субтитры вставлял

25
Guyver(X.B.M.), спасибо, но уже сделал свой, но если что, попробую твой вариант.
Редактор текста тоже готов, после "Magic Knight Rayearth" займусь SF3.


Что там по лунар?....прошла любовь, завяли помидоры?
Лунар уже трое брались доперевести, и все пропадали.

26
lupus, там же без курсива.
уже тогда рипать с рус версия предыдущих частей SF

27
продолжаю перевод "Magic Knight Rayearth" на сатурн, но случайно наткнулся на утилиты для перевода "Shining Force 3", попробовал - они даже работают, только надо сделать удобный редактор текста.


может у кого есть под рукой похожий шрифт? чтобы не тратить время на его поиски


28
Проверять текст гораздо проще в текстовом виде, а не во время тестирования. Готов помочь, если что.
помочь в редактуре или переводе?
если в редактуре, то как будет готов черновой вариант перевода, скину

29
Mefistotel, ну это самая первая тестовая вставка текста, многое конечно поправиться при тесте игры.

30
Начал перевод игры для Sega Saturn - "Magic Knight Rayearth". Надеюсь, доведу до конца, но текста конечно не мало.


Страницы: [1] 2 3 4 5 6 Далее