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

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


Сообщения - ViToTiV

Страницы: [1] 2 3 4 5 6 Далее
1
Перевод на русский язык игры Tactics Ogre: Let Us Cling Together для Sega Saturn состоялся
а на железе игра не пойдёт? только собрался записывать

2
потому что данная версия не на сегу вышла, поэтому им не нужна лицензия сеги, не логично?
в оригинальной ПК версии тоже не было упоминания сеги (вроде).

3
Стаж — ого-го, сколько лет.
тогда она по первому пункту не пройдёт)

4
Написано, что конвертирование завершено, но на деле ничего не происходит
возможно в пути пробелы или русские буквы, я ж не знаю как это проглотит тулза для конвертирования
здесь самая первая версия лежит, обновил - https://disk.yandex.ru/d/IJu2AMydfJu9-g


5
ну, в общем, направление для товарища JPEG мы задали))

6
ну да, выглядит не плохо)
только может стоило бы прогнать текстуры через AI апскейлеры, они сча чудеса творят, как минимум можно было бы это сделать для заставок

Попробовал ради интереса:

Оригинал
277748-0

AI
277750-1

7
На французский переводили usa версию

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

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

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

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

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

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

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

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

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

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

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

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

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

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

17
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;
}

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

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

19
Всем доброго дня!
На днях наконец-то вышел наш перевод "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
В этих файлах есть куча информации, которая возможно содержит всё, что нужно, но без опыта в сжатии сложно понять о чём там речь.

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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