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

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


Сообщения - ViToTiV

Страницы: Назад 1 [2] 3 4 5 6 Далее
31
Dagerjack, хм, я его уже начинал переводить лет 10 назад, но забил. Могу поделиться инструментами (правда не помню понятное дело что там к чему)

32
Dagerjack, какая игра, какая платформа?

33
выложил перевод игры "Elemental Gimmick Gear" на psxplanet

34
raller78, да наверное завтра уже выложу, т.к. ухожу на месяц в отпуск, а у меня вся эта кухня на работе.

35
не понял что это, но походу какая-то программа для изучения японского языка? :unsure:

36
а там MPQ архивы как и было? там же названия файлов насколько я помню захэшированы. и тексты точно пожаты скорее всего

37
он не сохраняет все игры как квикстейт в эмулях, он сохраняет игры, в которых предусмотрено сохранение (с батарейкой которые)

38
уже почти закончил перевод игры "Elemental Gimmick Gear", на след. неделе отдам на тест.
может кто-нить помочь найти графику в игре? всю что надо, нашёл и перерисовал, остались 2 картинки во весь экран с надписями локаций. Они в самом начале, после непродолжительного трындежа героев.
графика в PVR но без заголовков. перерыл почти все файлы, но чёт не вижу нигде.

Добавлено позже:
закончил перевод "Elemental Gimmick Gear", есть желающие протестировать? а то тот, кто изначально вызвался, уже молчит.

39
Ага, он говорил что где-то исходник или алгоритм сжатия нашёл.
я использовал модуль для Delphi, где взял не помню, где-то в нете, но очень давно.

unit LZss;

interface

uses
  Windows, Classes;

Procedure LZSSCompress(LZss_Ms: TStream);
procedure LZSSDecompress(LZss_Ms: TStream);

Type
  chunk_t = record
    code, bitcount: byte;
  end;

  lz_t = record
    length, offset, distance: Word;
  end;

const
  Window_Size = 4095;
  Max_Match_Length = 17;
  Min_Match_Length = 2;

implementation

Procedure search_lz(pos: integer; Buffer: Array of byte; inputsize: integer;
  var lz: lz_t);
var
  lz_off, lz_len: integer;
  match: byte;
  win: integer;
begin
  lz_off := 0;
  lz_len := 0;
  match := 0;
  win := pos - Window_Size;
  if win < 0 then
    win := 0;
  while (win < pos) and (win + Max_Match_Length < pos + Max_Match_Length) do
  begin
    if Buffer[win] = Buffer[pos] then
    begin
      match := 1;
      while (Buffer[win + match] = Buffer[pos + match]) and
        (pos + match < inputsize) do
      begin
        if match >= Max_Match_Length then
          Break;
        inc(match);
      end;
      if match > lz_len then
      begin
        lz_len := match;
        lz_off := win;
      end;
    end;
    if match > Max_Match_Length then
    begin
      lz_len := Max_Match_Length;
      Break;
    end;
    inc(win);
  end;
  lz.length := lz_len;
  lz.offset := lz_off;
  lz.distance := pos - lz_off;
end;

Procedure write_lz(var read_pos: integer; var write_buf: Array of byte;
  var write_pos: integer; var lz: lz_t; var chunk: chunk_t);
var
  lz1, lz2: byte;
  lz_dist, lz_len: Word;
  lz_d1, lz_d2: Word;
begin
  lz_dist := lz.distance;
  lz_len := (lz.length - Min_Match_Length) and $0F;
  lz_len := (lz_len shl 4) and $F0;
  lz_d1 := (lz_dist and $0F00) shr 8;
  lz_d2 := lz_dist and $FF;
  lz1 := lz_d2;
  lz2 := lz_d1 or lz_len;
  write_buf[write_pos] := lz1;
  inc(write_pos);
  write_buf[write_pos] := lz2;
  inc(write_pos);
  read_pos := read_pos + lz.length;
  chunk.code := chunk.code shr 1;
  chunk.code := chunk.code or $00;
  inc(chunk.bitcount);
end;

Procedure write_lit(var read_pos: integer; var read_buf: Array of byte;
  var write_pos: integer; var write_buf: Array of byte; var chunk: chunk_t);
begin
  write_buf[write_pos] := read_buf[read_pos];
  inc(write_pos);
  inc(read_pos);
  chunk.code := chunk.code shr 1;
  chunk.code := chunk.code or $80;
  inc(chunk.bitcount);
end;

Procedure LZSSCompress(LZss_Ms: TStream);
var
  input, output: Array of byte;
  inputposition, outputposition, headerposition: integer;
  inputsize: integer;
  lz, lz_alt: lz_t;
  chunk: chunk_t;
  bit_shift: byte;
begin
  chunk.code := 0;
  chunk.bitcount := 0;
  headerposition := 0;
  inputposition := 0;
  outputposition := 1;
  inputsize := LZss_Ms.Size;
  SetLength(input, inputsize);
  SetLength(output, inputsize);
  LZss_Ms.Read(input[0], inputsize);
  LZss_Ms.Size := 0;
  LZss_Ms.Position := 0;
  write_lit(inputposition, input, outputposition, output, chunk);
  while inputposition < inputsize do
  begin
    search_lz(inputposition, input, inputsize, lz);
    search_lz(inputposition + 1, input, inputsize, lz_alt);
    if (lz_alt.length > lz.length) and (lz_alt.length >= Min_Match_Length) then
      write_lit(inputposition, input, outputposition, output, chunk)
    else
    begin
      if lz.length < Min_Match_Length then
        write_lit(inputposition, input, outputposition, output, chunk)
      else
        write_lz(inputposition, output, outputposition, lz, chunk);
    end;
    if chunk.bitcount = 8 then
    begin
      output[headerposition] := chunk.code;
      chunk.code := $00;
      chunk.bitcount := 0;
      headerposition := outputposition;
      inc(outputposition)
    end;
  end;
  if (chunk.bitcount < 8) and (chunk.bitcount <> 0) then
  begin
    bit_shift := 8 - chunk.bitcount;
    chunk.code := chunk.code shr bit_shift;
    output[headerposition] := chunk.code;
  end;
  SetLength(output, outputposition);
  LZss_Ms.WriteBuffer(output[0], outputposition);
  LZss_Ms.Position := 0;
end;

procedure LZSSDecompress(LZss_Ms: TStream);
var
  Temp_Ms: Tmemorystream;
  ch, Temp_, Temp: byte;
  i, jump, Size, flag: integer;
  b: array [0 .. 16] of byte;
  Temp_Offset, Last_Offset: DWORD;
begin
  flag := 1;
  LZss_Ms.Position := 0;
  Temp_Ms := Tmemorystream.Create;
  while LZss_Ms.Position < LZss_Ms.Size do
  begin
    if flag = 1 then
    begin
      LZss_Ms.Read(Temp, 1);
      flag := Temp or $100;
    end;
    LZss_Ms.Read(ch, 1);
    if Bool(flag and 1) then
      Temp_Ms.Write(ch, 1)
    else
    begin
      LZss_Ms.Read(Temp_, 1);
      jump := ((Temp_ and $F) shl 8) or ch;
      Size := (Temp_ shr 4) + 2;
      Temp_Offset := Temp_Ms.Position;
      Temp_Ms.Position := Temp_Ms.Position - jump;
      Last_Offset := Temp_Ms.Position;
      for i := 0 to Size - 1 do
      begin
        Temp_Ms.Read(b[i], 1);
        if Temp_Ms.Position >= Temp_Ms.Size then
          Temp_Ms.Position := Last_Offset;
      end;
      Temp_Ms.Position := Temp_Offset;
      Temp_Ms.Write(b, Size);
    end;
    flag := flag shr 1;
  end;
  LZss_Ms.Size := 0;
  Temp_Ms.Position := 0;
  LZss_Ms.CopyFrom(Temp_Ms, Temp_Ms.Size);
  LZss_Ms.Position := 0;
  Temp_Ms.Free;
end;

end.

40
и даже представить не могу, эту самую, русскую озвучку
значит ты не матрос)
все нормальные пацаны впервые поиграли в MGS в гнусавой пиратской озвучке, потому что в те времена другой не было)

41
perfect_genius, а зачем может понадобиться достать речь без фона?  o_0 для озвучки как раз-таки нужен фон без речи

42
Спасибо, но я уже сделал свою прогу для извлечения графики

43
С тестированием могу помочь
ок, отпишусь как будет дело идти к завершению

44
шрифт 512*512, 4 бит, начинается с позиции 0х100, палитра с позиции 0х88 (вроде) с альфаканалом
редактируй любым тайловым редактором, например TileMolester

45
"Elemental Gimmick Gear" - занимаюсь в плотную, думаю через месяц (а то и меньше) будет перевод. Но нужен будет тестер

46
e2e41, спасибо, поглядим

47
видно она до пиратов не дошла в своё время.
делаю на основе полной версии с редампа, GDI переделанный в CDI при пересборке

48
недавно приобрел дримку, осваиваю платформу. Наткнулся на игру "Elemental Gimmick Gear", начало зацепило, но как оказалось русской версии вообще не существует, покопался в ресурсах - взялся переводить


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

49
Любым hex редактором. Открой в нём образ и по поиску найди текст, и заменяй

50
Кто-то разбирал "The King of Fighters 2006" для PS2? Легко там музыку заменить?
а чего его кто-то разбирать то будет?))
в PS2 музыка обычно в стандартном VAG, или в RAW compressed (VAG без заголовка).
MFAudio.exe в помощь

Добавлено позже:
нашёл на венике эту игру. там ASF/ADX архивы - это ещё проще, утилиты для распаковки и конвертации есть в нете

51
а в игре вообще была озвучка? там же только музыка, даже в видеороликах только музыка.
или речь о 2-3 фразах типа "Nice Landing"?

52
Посоны, я просто оставлю это здесь:
Понимаю что оффтопик однако.
чёт я сомневаюсь, что оно пойдёт на железе с такой скоростью, и пойдёт ли вообще

53
Оно вообще вроде как платное, но я пользуюсь программой Balabolka, в ней собрано куча сервисов синтеза, и Яндекс спич тоже, и там можно пользоваться бесплатно им

54
В игре относительно MGS не так много речи, можно реально озвучить через синтезатор речи, тот же Яндекс спич. Попробовал на начале игры - получилось довольно не плохо)

Могу адаптировать прогу для Сатурн версии, но я не в курсе по сатурновским форматам звука, и какие есть утилиты для конвертации

Добавлено позже:
подправил прогу для работы с сатурновской версией, но нужен конвертер звука, я не знаю в каком он там формате. Да и смущает размер файла - 17 Мб, а в PS1 версии - 136 Мб

p.s. пример синтезированного звука через яндекс-спич, самое начало игры
https://disk.yandex.ru/d/ASDE4KPhL569pQ

55
Yoti, да, как написал 15 лет назад, так и кочует во все мои экстракторы)

56
Scarabay, попробовал на своём домашнем компе, всё ок.
Прога делалась по файлу из образа "Policenauts (English translation v1.00) [SLPS-00215/00216]"

57
обновил, нашёл маленький косячёк

58
Довёл до ума наконец-то прогу, умеет:

1. Доставать все разговоры и тексты из файла "PN_VOX1.PAC" и конвертировать в WAV.
На выходе:
*.vag файлы - моно звук, 22050 Гц
*.wav файлы - сконвертированный звук
*.txt файлы - текст с речью

2. Ковертировать WAV обратно в формат игры и вставлять в файлы, но с ограничением, что новый WAV будет не длиннее оригинального (автоматом обрезает).

Да будет русская озвучка Policenauts!!!  :gamer:




59
не будет же переводчик каждый раз тыкать в GUI.
а зачем переводчику что-то тыкать? Дело переводчика - создать русские вавки.

p.s. скоро сделаю такую же прогу для Policenauts (PS1). Хотя возможно и эта прога уже подойдёт.

60
Довёл до ума наконец-то прогу, умеет:

1. Доставать все разговоры и тексты из файлов "DEMO.DAT", "VOX.DAT" и конвертировать в WAV.
На выходе:
*.vag файлы - моно звук, 22050 Гц
*.raw файлы - стерео звук, 32000 Гц
*.wav файлы - сконвертированный звук
*.txt файлы - текст с речью

2. Ковертировать WAV обратно в формат игры и вставлять в файлы, но с ограничением, что новый WAV будет не длиннее оригинального (автоматом обрезает).

Да будет русская озвучка MGS!!!  :gamer:




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