1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление
    1. Если вы сделали перевод или русификацию игры, то вы можете поделиться своим творением здесь.
    2. О правилах вступления в группу переводчиков можно прочитать здесь.
    3. Русификации следует искать там.

Wing Commander IV: Цена свободы

Тема в разделе "Переводы своими руками", создана пользователем Рыжий Тигра, 8 янв 2007.

  1. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Процесс перевода игры "Wing Commander IV: Цена свободы"- в разгаре. Желающие опробовать то, что получилось, могут добраться сразу до описания перевода и ссылок на его скачивание, щёлкнув по этой ссылке.

    Желающим посоучаствовать в переводе - рекомендую: полезные для переводчика ссылки - словари, книги, статьи и прочие материалы. Пополнение копилки приветствуется!

    См. также:
    Самая свежая тестовая сборка и инструкции по её установке
    Бета-тестеры, wэлкам!
    31 дек 2016

    Upd 1:
    В связи с участившимися постами здесь "чисто для поржать" - вынужден объясниться.
    6 янв 2014

    Upd 2:
    Приглашаю желающих поучаствовать в переводе. Отозвавшиеся будут увековечены в финальных титрах. (Никаких более материальных благ, к сожалению, обещать не могу. :( )
    27 мая 2014

    Upd 3:
    Наконец удалось пробить барьер несовместимости моего перевода с версией игры от GOG!!! Желающим опробовать - wэлкам!
    2 окт 2014
     
    Последнее редактирование: 21 апр 2017
    kirik-82 нравится это.
  2.  
  3. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Уфф. Если кому пригодится - делюсь реконструкцией (по логу двух десятков перехватчиков gdi'шных функций) работы игры с девайс-контекстами, битмапами и картиночными буферами:
    Код:
    HWND hwnd; // видимо, окно игры
    BITMAPINFO
      bmi8  = { { 40, 640, -480, 1,  8, 0, 307200, 100, 100, 256, 256 }, {....} },
      bmi16 = { { 40, 640, -480, 1, 16, // а м.б. и 24 - ХЗ от чего зависит
                                        0, 614400 // или, ответственно, 921600
                                                   100, 100,   0,   0 }, {....} };
    HBITMAP hbm8, hbm16; 
    void *vbits8, *vbits16;
    int color_depth; // глобальная, 004C50B0
    HPALETTE palette; // глобальная, 004C5090
    int jx;
    
    palette = CreatePalette( ??? );
    {
      HDC hdc = GetDC( hwnd );
      hbm8 = CreateDIBSection( hdc, &bmi8, DIB_RGB_COLORS, &vbits8, NULL, 0 );
      ReleaseDC( hwnd, hdc );
    }
    {
      HDC hdc = GetDC( hwnd );
      color_depth = GetDeviceCaps( hdc, BITSPIXEL ); // ret 32
      ReleaseDC( hwnd, hdc );
    }
    {
      HDC hdc = GetDC( hwnd );
      hbm16 = CreateDIBSection( hdc, &bmi16, DIB_RGB_COLORS, &vbits16, NULL, 0 );
      ReleaseDC( hwnd, hdc );
    }
    for ( jx = 0; jx < от 3 до 5; jx++ ) { // с шагом в ~20 мс
      HDC hdc = GetDC( hwnd );
      StretchDIBits( hdc, 0,0,640,480, 0,0,640,480,
        vbits16, &bmi16, DIB_RGB_COLORS, SRCCOPY );
      ReleaseDC( hwnd, hdc );
    }
    while ( до конца игры ) { // много сотен раз в секунду
    // игра заполняет массив bmi8 своей картинкой
      HDC hdc = GetDC( hwnd );
      StretchDIBits( hdc, 0,0,640,480, 0,0,640,480,
        vbits8, &bmi8, DIB_RGB_COLORS, SRCCOPY );
      ReleaseDC( hwnd, hdc );
      if ( иногда ) { // при невыясненных обстоятельствах 
        HDC hdc16 = GetDC( hwnd );
        StretchDIBits( hdc, 0,0,640,480, 0,0,640,480,
          vbits16, &bmi16, DIB_RGB_COLORS, SRCCOPY );
        ReleaseDC( hwnd, hdc16 );
        DeleteObject( hbm16 );
        hdc16 = GetDC( hwnd );
        hbm16 = CreateDIBSection( hdc16, &bmi16, DIB_RGB_COLORS, &vbits16, NULL, 0 );
        ReleaseDC( hwnd, hdc16 );
        for ( jx = 0; jx < от 1 до 4; jx++ ) { // с шагом в ~20 мс
          hdc16 = GetDC( hwnd );
          StretchDIBits( hdc16, 0,0,640,480, 0,0,640,480,
            vbits16, &bmi16, DIB_RGB_COLORS, SRCCOPY );
          ReleaseDC( hwnd, hdc16 );
        }
      }
    }
    if ( иногда ) { // уже после ответа на переспрос завершать - не завершать
      HDC hdc = GetDC( hwnd );
      StretchDIBits( hdc, 0,0,640,480, 0,0,640,480,
        vbits16, &bmi16, DIB_RGB_COLORS, SRCCOPY );
      ReleaseDC( hwnd, hdc );
    }
    DeleteObject( palette );
    DeleteObject( hbm8 );
    DeleteObject( hbm16 );
    Соответственно, идея выводить надпись поверх картинки через полученный в самом начале hdc от CreateDIBSection() накрывалась именно потому, что к моменту StretchDIBits() этому hdc давно уже жаба цицьки дала. :-(
     
  4. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    На wасме поспрошал - доходчиво разжевали что к чему, подкинули имён полезных функций и подарили книжку: "Guide to Win32 Memory DC". Изучаю.
     
  5. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Готово. Задействовал два перехватчика: CreateDIBSection() - в нём только сохраняю возвращаемый HBITMAP, и StretchDIBits() - в нём делаю всё остальное (текст несколько сократил - там ещё были выводы в лог, пробные #ifdef'ы и прочее барахло):
    Код:
    static int dib_frame = 0; // счётчик, чтобы строка обновлялась
    HBITMAP wc4_bitmap = NULL;
    
    HBITMAP WINAPI wc4_create_dib( HDC hdc, const BITMAPINFO *pbmi, UINT iUsage,
        void **ppvBits, HANDLE hSection, DWORD dwOffset ) {
      HBITMAP rc = CreateDIBSection( hdc, pbmi, iUsage, ppvBits, hSection, dwOffset );
      wc4_bitmap = rc;
      return ( rc );
    }
    
    int WINAPI wc4_stretch_dib( HDC hdc,
        int XDest, int YDest, int nDestWidth, int nDestHeight,
        int XSrc, int YSrc, int nSrcWidth, int nSrcHeight,
        CONST VOID *lpBits, CONST BITMAPINFO *lpBitsInfo, UINT iUsage, DWORD dwRop ) {
      int rc;
      if ( wc4_bitmap != NULL ) {
        HDC [COLOR="Blue"]t_hdc[/COLOR] = [COLOR="Blue"]CreateCompatibleDC[/COLOR]( hdc );
        HBITMAP t_old_bitmap = [COLOR="Blue"]SelectObject( t_hdc[/COLOR], wc4_bitmap );
        HFONT [COLOR="Blue"]t_font[/COLOR] = [COLOR="Blue"]CreateFont[/COLOR]( 20, 9, 0, 0, 0,  0, 0, 0,  0, 0, 0, 2,  20, "Verdana" );
        HFONT t_old_font = [COLOR="Blue"]SelectObject[/COLOR]( [COLOR="Blue"]t_hdc[/COLOR], [COLOR="Blue"]t_font[/COLOR] );
        char print_line[ 0x100 ];
        sprintf( print_line, "dib_frame %d", dib_frame );
    // проверенные варианты выбора цвета текста:
        [COLOR="Blue"]SetTextColor[/COLOR]( t_hdc, 0x808080 ); //PALETTEINDEX( 253 ) ); // PALETTERGB( 128, 128, 128 ) ); // RGB( 128, 128, 128 ) );
        [COLOR="Blue"]SetBkMode[/COLOR]( t_hdc, TRANSPARENT );
        [COLOR="Blue"]DrawText[/COLOR]( t_hdc, print_line, -1, &g_rect, 0x121 );
        SelectObject( t_hdc, t_old_bitmap );
        SelectObject( t_hdc, t_old_font );
        [COLOR="Blue"]DeleteObject[/COLOR]( t_font );
        [COLOR="Blue"]DeleteDC[/COLOR]( t_hdc );
      }
    // вывод всего что получилось:
      rc = StretchDIBits( hdc,
        XDest, YDest, nDestWidth, nDestHeight, XSrc, YSrc, nSrcWidth, nSrcHeight,
        lpBits, lpBitsInfo, iUsage, dwRop );
      Sleep( 1 ); // чтобы уменьшить частоту вызовов с нескольких сотен до разумных 64 в секунду
      dib_frame++;
      return ( rc );
    }
    Но как ни старался - цвет получается как у "форда-Т", только радикально чёрный без вариантов:

    [​IMG]

    (для пущей заметности надписи задрал яркость в 8 раз)
     

    Вложения:

    • dib_frame.png
      dib_frame.png
      Размер файла:
      22 КБ
      Просмотров:
      849
    Последнее редактирование: 2 июл 2014
  6. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    6.513
    А ЕСЛИ УКАЗАННЫЙ ТУТ цвет в ргб не совпадёт с цветом в палитре?
     
  7. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Уряяя, догадался и ПОЛУЧИЛОСЬ!!!

    [​IMG]
    Код:
        ................
        HFONT t_old_font = SelectObject( t_hdc, t_font );
        [COLOR="Blue"]SetDIBColorTable( t_hdc, 0, lpBitsInfo->bmiHeader.biClrUsed,
          lpBitsInfo->bmiColors );[/COLOR]
        SetTextColor( t_hdc, 0xFFFFFF ); // ярко-белый
        ................
     

    Вложения:

  8. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Финальный вариант:

    [​IMG]

    [​IMG]

    :-)
     

    Вложения:

    • subtitle1.png
      subtitle1.png
      Размер файла:
      67,1 КБ
      Просмотров:
      634
    • subtitle2.png
      subtitle2.png
      Размер файла:
      58,9 КБ
      Просмотров:
      470
  9. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Возьмётся ближайший приблизительно подходящий. В данном случае цвет субтитра я заказывал ровно (E0,E0,E0), а взялся чуууточку голубоватый.
     
  10. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Гы, только сейчас обратил внимание - мышовый курсор располагается над остальными изображениями, но под текстом субтитра:

    [​IMG]

    Прикольно. :-)
     

    Вложения:

  11. Genesis Злоботряс

    Genesis

    Регистрация:
    21 апр 2011
    Сообщения:
    12.567
    Рыжий Тигра, а есть случаи, когда нужно кликать по субтитрам? Если нет, то это только вопрос эстетики.
     
  12. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    По субтитрам - нет (хотя, в принципе, м.б. было бы неплохо перехватить события от мыша и щелчком по субтитру вырубить звучащий инструктаж по матчасти).
    Проблема в том, что щелчком можно выбрать предмет, перекрытый субтитром (на фотке выше это торпедные подвески слева и справа от "Ишака"), причём предмет тут же выберется жёлтой рамкой, которая будет просвечивать под буквами и мешать.
    Но это единственная достаточно обширная область фотки, где можно разместить субтитр и минимизировать кол-во перекрытых им подробностей. Больше нигде столько текста не всунешь. :-(
     
  13. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    6.513
    чем тебе в верху не вариант? в середине экрана совсем стрёмно. надеюсь, в полёте сабы к переговоров ты туда же не выводишь, перекрывая происходящее на экране.
     
    Butz нравится это.
  14. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Непонятно - где именно? Нарисуй (просто вырежи эти же две строчки и вклей, или просто обведи место рамочкой), я гляну.

    А вот так будут выглядеть субтитры на некрологе (в данном случае была попытка взлёта поперёк полосы):

    [​IMG]

    Внизу есть запас места ещё и на третью строку.
    А вообще-то видно, что буквам здорово не помешает ещё и тень. :-(
     

    Вложения:

    • necrolog.png
      necrolog.png
      Размер файла:
      43,5 КБ
      Просмотров:
      494
  15. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
  16. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    6.513
    [​IMG][​IMG]

    наложив 8 раз текст черным со смещением и потом белым, можно получить обводку в 2 точки.
     
    Последнее редактирование модератором: 19 июл 2015
  17. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Ogr 2, не катит. :-( Текст выше середины верхней четверти кадра сильно отвлекает внимание от происходящего в кадре. Так уж наше зрение устроено, эту фишку юзают рекламисты и политнюсмейкеры, чтобы не дать зрителю рассмотреть картинку.
    И светлые буквы на светлом фоне плохо читаются, а тут же ещё текст динамичный, 3-4 секунды и следующая строка. :-(
    Кстати, всмотрелся в как выводятся надписи "Go to куда-то" - там проще: чёрным на одну вниз две влево и потом белым. Тоже так сделал - вроде удачно.
    И вообще, как только накопится достаточное количество Дури, сделаю подобие DrawText()'а WC4'шными шрифтами. Но это не скоро.

    PS. Кстати, в "статической" части игры единственное место, где надо добавить субтитры, - это оружейная панель: на мостике они и так есть.

    PPS. Кстати-2: на оружейке рамочка игрой не обновляется, значит, придётся дополнительно что-то химичить с затиранием ошмётков предыдущей строки при выводе следующей. А я ленивый. :-(
     

    Вложения:

    Последнее редактирование: 3 июл 2014
  18. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    6.513
    это же сабы для объявлений по радио на корабле, который состоит из нескольких фонов + терминал, на которых не Х не происходит, и пропустить чего либо из за такого коварного отвлечения внимание в принципе невозможно?
     
  19. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Ну и что? Сам эффект от этого не становится менее неприятным.
    А сделай сравнительный анализ.
    И вообще, харэ пререкаться. "В моём доме этой мерзости никогда не будет!" (L) :-
     
  20. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    6.513
    по середине гораздо более неприятно чем в верху.

    ---------- Сообщение добавлено в 09:05 ---------- Предыдущее сообщение размещено в 08:59 ----------

    так да уж чуть выше текста названий объектов под курсором.
     
    Genesis нравится это.
  21. Рыжий Тигра Сам себе «пират»

    Рыжий Тигра

    Регистрация:
    3 май 2012
    Сообщения:
    1.823
    Неприятно, но не более. Лучше всего была бы нижняя четверть, но она засрана тонкими яркими линиями и не ренегерируется. :-(
    Впрочем, сделаю - поделюсь исходниками и пусть себе каждый кому не влом ваяет под свой вкус, логично? :-
    И вообще, я уже нырнул в следующую тему - формат текста субтитров: синтаксис исходника перевода, представление в бинарнике (transrus.iff в раздачах/бетах), структуры данных на уровне dxmci'я... Тоже не скучно. :-)
     
  22. Ogr 2 лол

    Ogr 2

    Хелпер Переводчик

    Регистрация:
    25 мар 2008
    Сообщения:
    6.513
    то есть, и там и там неприятно. но + к верхнему расположению, не перекрывает ни каких активных объектов ни на терминале, ни на фонах. в отличии от серединного.
     
    Butz нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление