March 28, 2024, 21:53
bigger smaller reset     1020px Wide width Full width Reset   * *

Gildor's Forums

  Homepage Facebook Read news on Twitter Youtube channel Github page
Welcome, Guest. Please login or register.
Did you miss your activation email?

« previous next »
Print
Author Topic: Splinter Cell HD 1,2  (Read 20291 times)
Orbit
Newbie
*
Posts: 28


View Profile
« Reply #30 on: April 02, 2012, 05:37 »

так он ведь больше по размеру, там опять структура engine.u нарушится
Logged
Reborn
Full Member
***
Posts: 103


View Profile
« Reply #31 on: April 02, 2012, 05:44 »

Да, действительно - значит сырые форматы не совпадают и этот вариант исключается.
Logged
Orbit
Newbie
*
Posts: 28


View Profile
« Reply #32 on: April 02, 2012, 05:55 »

А вот это не о том?(я имею ввиду указание на размер текстуры) Сегодня пытался разобраться в структуре unreal архивов, но на английском тяжело

Class Texture
This is a native class that does not inherit from the generic object header.
Properties (see above to decode)

BYTE      MipMapCount       Number of MipMaps in the texture object.
DWORD      WidthOffset       Offset in file of the following Width DWORD.Only if PackageVersion is >=63
INDEX        MipMapSize       Size of the graphic block
MipMapSize BYTEs      MipMapData Image.       One byte per pixel.
DWORD    Width       Width in pixels
DWORD    Height      Height in pixels
BYTE      BitsWidth       Number of bits of Width (8 bits for 256
pixels)
BYTE       BitsHeight        Number of bits of Height
If the Format property exists it tell which format the mipmaps have, else use TEXF_P8
(see below).
Some textures have compressed MipMaps after the normal MipMaps. This happens
when the bHasComp property is True. The structure is the same as in the above table
except that the MipMapData has a data format based on the CompFormat property.
The Format and CompFormat properties have these values:
0x00 TEXF_P8 8 bits, paletted
0x01 TEXF_RGBA7 7 bits for RGBA ?
0x02 TEXF_RGB16 16 bits for RGB ?
0x03 TEXF_DXT1 DirectX-1 format. Search for “Opaque and One-bit Alpha
Textures” in the Microsoft Platform SDK documentation.
0x04 TEXF_RGB8 8 bits for RGB ?
0x05 TEXF_RGBA8 8 bits for RGBA ?
Only TEXF_P8 and TEXF_DXT1 are known at this time.
Logged
Reborn
Full Member
***
Posts: 103


View Profile
« Reply #33 on: April 02, 2012, 06:02 »

DWORD    Width       Width in pixels
DWORD    Height      Height in pixels

Это именно то, что надо. Вопрос в том, ГДЕ ИМЕННО содержатся эти данные.
Я даже отдалённо не могу предположить, как их искать.
« Last Edit: April 02, 2012, 06:12 by Reborn » Logged
Orbit
Newbie
*
Posts: 28


View Profile
« Reply #34 on: April 02, 2012, 06:13 »

А в заголовке самой текстуры? Нет? Там ведь 60 байт какой-то информации, тело шрифта начинается с 61-ого.

По моему я нашел. Текстура размером 256*256

http://www.imagepost.ru/?v=sneftexlkjubwtobddsvinhmnuwpti.jpg

текстура 256*128

00 01 00 00 09 22 80 00 - 2 байта с обоих краев

тааак срочно эксперимент))
« Last Edit: April 02, 2012, 06:27 by Orbit » Logged
Reborn
Full Member
***
Posts: 103


View Profile
« Reply #35 on: April 02, 2012, 06:19 »

Я об этом не знал. Попробуйте заменить заголовок из версии для PS в версию PS3 (если раньше не меняли).

Кстати, сразу за текстурой идёт её палитра.
Которая Palette117. А сразу за палитрой - таблица размещения букв.
« Last Edit: April 02, 2012, 06:37 by Reborn » Logged
Reborn
Full Member
***
Posts: 103


View Profile
« Reply #36 on: April 02, 2012, 06:34 »

Добавлено:
А в Splinter Sell 1 нет подходящих по размеру шрифтов с русскими буквами?

Вообще, в славные времена тотального пиратства наши пираты как-то умудрялись менять буквы в сыром шрифте, без редактора, то есть технически и такое возможно, но я не знаю, как они это делали.
« Last Edit: April 02, 2012, 06:36 by Reborn » Logged
Orbit
Newbie
*
Posts: 28


View Profile
« Reply #37 on: April 02, 2012, 06:36 »

Там русские шрифты точно такие же. То есть 512 в длину, но по байтовому размеру подходят, и когда я вчера днем заменял у меня естественно так же получалась мешанина из обрывков букв

Я слышал, то есть вроде бы даже прямо через хекс, ну это задача-то аховая.

ЕСТЬ!
http://www.imagepost.ru/?v=02042012392.jpg

Ух. Наконец-то. Smiley
Еще раз большое спасибо за помощь. Осталось подредактировать текст. Собрать и отправлять в свободное интернет плавание))
« Last Edit: April 02, 2012, 06:49 by Orbit » Logged
Orbit
Newbie
*
Posts: 28


View Profile
« Reply #38 on: April 02, 2012, 09:02 »

Кстати есть какие-нибудь идеи откуда игра берет значки кнопок - круг, квадрат и т.д. По идее они были в оригинальном шрифте, но он же заменен, а в новом их в помине нет.
Дело вот в чем. Вызов рисования этих значков в текствоых файлах игры забит на русские буквы. То есть: Щ - круг, Ы - треугольник, э - квадрат.
И придется заменять все заглавные Щ и Ы на строчные, а прописную э на заглавную. Это естественно не критично но все же хотелось и этот вопрос решить.
Logged
Reborn
Full Member
***
Posts: 103


View Profile
« Reply #39 on: April 02, 2012, 12:54 »

Не, никогда с таким не сталкивался.
Видимо,особенность данного движка.

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

В консоли (при наборе текста игроком) исправить никак не получится.
Но если вас беспокоят только файлы русификации - в них исправить в принципе можно, хоть и трудоемко, заменив эти буквы (Щ, Ы, Ъ э) на неиспользуемые символы.

Там в таблице шрифта между буквами z (маленькая латинская) и А (большая русская) в таблице символов находится куча букв, которые забиты нулями.

Вот они:
Code:
0x7B: Texture4 (0,0)-(0,0)
0x7C: Texture4 (0,0)-(0,0)
0x7D: Texture4 (0,0)-(0,0)
0x7E: Texture4 (0,0)-(0,0)
0x7F: Texture4 (0,0)-(0,0)
0x80: Texture4 (0,0)-(0,0)
0x81: Texture4 (0,0)-(0,0)
0x82: Texture4 (0,0)-(0,0)
0x83: Texture4 (0,0)-(0,0)
0x84: Texture4 (0,0)-(0,0)
0x85: Texture4 (0,0)-(0,0)
0x86: Texture4 (0,0)-(0,0)
0x87: Texture4 (0,0)-(0,0)
0x88: Texture4 (0,0)-(0,0)
0x89: Texture4 (0,0)-(0,0)
0x8A: Texture4 (0,0)-(0,0)
0x8B: Texture4 (0,0)-(0,0)
0x8C: Texture4 (0,0)-(0,0)
0x8D: Texture4 (0,0)-(0,0)
0x8E: Texture4 (0,0)-(0,0)
0x8F: Texture4 (0,0)-(0,0)
0x90: Texture4 (0,0)-(0,0)
0x91: Texture4 (0,0)-(0,0)
0x92: Texture4 (0,0)-(0,0)
0x93: Texture4 (0,0)-(0,0)
0x94: Texture4 (0,0)-(0,0)
0x95: Texture4 (0,0)-(0,0)
0x96: Texture4 (0,0)-(0,0)
0x97: Texture4 (0,0)-(0,0)
0x98: Texture4 (0,0)-(0,0)
0x99: Texture4 (0,0)-(0,0)
0x9A: Texture4 (0,0)-(0,0)
0x9B: Texture4 (0,0)-(0,0)
0x9C: Texture4 (0,0)-(0,0)
0x9D: Texture4 (0,0)-(0,0)
0x9E: Texture4 (0,0)-(0,0)
0x9F: Texture4 (0,0)-(0,0)
0xA0: Texture4 (0,0)-(0,0)
0xA1: Texture4 (0,0)-(0,0)
0xA2: Texture4 (0,0)-(0,0)
0xA3: Texture4 (0,0)-(0,0)
0xA4: Texture4 (0,0)-(0,0)
0xA5: Texture4 (0,0)-(0,0)
0xA6: Texture4 (0,0)-(0,0)
0xA7: Texture4 (0,0)-(0,0)
0xA8: Texture4 (0,0)-(0,0)
0xA9: Texture4 (0,0)-(0,0)
0xAA: Texture4 (0,0)-(0,0)
0xAB: Texture4 (0,0)-(0,0)
0xAC: Texture4 (0,0)-(0,0)
0xAD: Texture4 (0,0)-(0,0)
0xAE: Texture4 (0,0)-(0,0)
0xAF: Texture4 (0,0)-(0,0)
0xB0: Texture4 (0,0)-(0,0)
0xB1: Texture4 (0,0)-(0,0)
0xB2: Texture4 (0,0)-(0,0)
0xB3: Texture4 (0,0)-(0,0)
0xB4: Texture4 (0,0)-(0,0)
0xB5: Texture4 (0,0)-(0,0)
0xB6: Texture4 (0,0)-(0,0)
0xB7: Texture4 (0,0)-(0,0)
0xB8: Texture4 (0,0)-(0,0)
0xB9: Texture4 (0,0)-(0,0)
0xBA: Texture4 (0,0)-(0,0)
0xBB: Texture4 (0,0)-(0,0)
0xBC: Texture4 (0,0)-(0,0)
0xBD: Texture4 (0,0)-(0,0)
0xBE: Texture4 (0,0)-(0,0)
0xBF: Texture4 (0,0)-(0,0)
Нужно подредактировать таблицу шрифта так, чтобы эти символы соответствовали Щ, Ы, Ъ э, на текстуре и в тексте

Делается это так: несколько букв,
например,
0xBC: Texture4 (0,0)-(0,0)
0xBD: Texture4 (0,0)-(0,0)
0xBE: Texture4 (0,0)-(0,0)
0xBF: Texture4 (0,0)-(0,0)

переназначаются в хексе на следующие за ними буквы АБВГ, а затем выводятся все непечатные символы между z и A, разделенные запятой. И смотрится, какие из них появятся в виде букв.

Или, если неохота париться с поиском букв -

Есть более грязный способ:
смотрим в конце шрифта значки # $ % & ' \ ° © @ >< =
Те из них, которые вы не планируете использовать, можно переназначить на буквы
Щ, Ы, Ъ э, подредактировав таблицу размещения букв в шрифте.

И соответственно, в файлах русификации эти буквы тоде придется менять на символы.
Но это, конечно, если охота связываться с отладкой.
« Last Edit: April 02, 2012, 13:13 by Reborn » Logged
Orbit
Newbie
*
Posts: 28


View Profile
« Reply #40 on: April 03, 2012, 06:35 »

Да меня интересует только внутриигровой текст, то есть локализация. Спасибо за варианты думаю остановиться на втором, мне в любом случае править текст, заменяя буквы, а тут заодно и с бинарной таблицей поближе познакомлюсь.

И еще хотелось бы уяснить до конца принцип работы игровых шрифтов. По какому принципу игра определяет какую часть текстуры нужно вырезать в соответствие с буквой  в считываемом текстовом файле. То есть понятно что по координатам в бинарном файле, но как происходит соответствие буквы, например, "а" такой-то строке бинарного файла. Не могли бы вы объяснить это, если не сложно.

Важно ли вообще порядковое расположение букв на текстуре или оно может быть произвольным. "АеЦФХЪбьс" к примеру.
Logged
Reborn
Full Member
***
Posts: 103


View Profile
« Reply #41 on: April 03, 2012, 12:14 »

Движок представляет собой фонт как текстуру, в которой каждая буква представлена как прямоугольник.
Пример: http://utcracker.nm.ru/newfonts.gif

В старых движках (включая  Splinter Cell и Пандору сингл которой сделан на втором движке) Можно было импортировать текстуру как шрифт (нарисованная выше разметка как раз и предназначена для такого импорта).

B engine.u сохранились следы такого импорта, в виде строк:
Code:
#exec Font IMPORT NAME=ETextFont        FILE="..\Textures\Font\txt_integration.pxx"
#exec Font IMPORT NAME=ETitleFont FILE="..\Textures\Font\titre_regular_integration.pxx"
#exec Font IMPORT NAME=ETitleBoldFont FILE="..\Textures\Font\titre_bold_integration.pxx"
#exec Font IMPORT NAME=EHUDFont FILE="..\Textures\Font\txt_hud.pxx"

К сожалению, чтобы воспользоваться возможностями движка, нужно иметь нормальный эдитор, а в Splinter Cell он не полнофункционален.

//=====================================================================
В более поздних движках (начиная с UT-99) можно было импортировать шрифт Windows,
по следующей инструкции:
http://www.oldunreal.com/wiki/index.php?title=Font_Tutorial

в Splinter Cell так импортирован шрифт Verdana, который мы не меняли.
Вот код импорта, сохранённый в файле Engine.u
Code:
#exec new TrueTypeFontFactory Name=Verdana FontName="Verdana" Height=12 AntiAlias=1 CharactersPerPage=64

Здесь:
Verdana - имя шрифта Windows
Height - высота шрифта в точках,
AntiAlias - сглаживание букв
CharactersPerPage - количество букв на 1 текстуре шрифта.

Естественно, мы тоже не можем воспользоваться, потому что работающего редактора Splinter Cell у нас нет.

Новые шрифты можно "делать" в редакторе UT2004, но мы уже выяснили, что длина заголовка у них отличается - то есть напрямую использовать их вы не сможете
http://wiki.beyondunreal.com/UE2:TrueTypeFontFactory_(UT2004)

//=====================================================================

Движок "читает" буквы по координатам верхнего угла и размеру.
Буква А(русская) при экспорте шрифта из UTPT будет записана так:
Code:
0xC0: Texture4 (441,1)-(8,19)
Где
441 - координаты верхнего угла буквы по X,
1 - координаты верхнего угла буквы по Y,
8 - ширина буквы по X,
19 - высота буквы по Y,

В хексе эти координаты идут непрерывным списком 4-байтных интов
(по 4 для каждой буквы * 256 букв, следовательно, всего получается массив фиксированной длины из 1024 интов, или 4096 байт)

Code:
int1int2int3int4
int1int2int3int4
int1int2int3int4

Где
int1 - координаты верхнего угла буквы по X,
int2 - координаты верхнего угла буквы по Y,
int3 - ширина буквы по X,
int4 - высота буквы по Y,
потом без перерыва идут координаты следующей буквы.

В Хексе это выглядит примерно так:

Code:
00 00 00 04 00 00 00 29 00 00 00 04 00 00 00 13 //первая буква
00 00 00 32 00 00 00 29 00 00 00 03 00 00 00 13 //вторая буква
00 00 00 36 00 00 00 29 00 00 00 05 00 00 00 13 //третья буква

Я находил начало фонта в UTPT, экспортировал из UTPT (командой Extract font)
Затем в Hex-редакторе менял цифры,
переоткрывал файл в UTPTи снова экспортировал фонт,
А затем сравнивал два файла, чтобы убедиться, что кооординаты изменены правильно.
//=======================================================

Порядок следования букв менять нельзя, он намертво зашит где-то в недрах Core.dll
Где именно я не искал, поскольку исходного кода у нас всё равно нет.

В Windows это, кстати называется кодовой страницей - Codepage.
Движок использует СОБСТВЕННУЮ кодовую страницу, а не загружает стандартную из винды.

Сам шрифт видит только НОМЕРА букв. То есть для него шрифт - абстрактные буквы с 1 по 256, каждая из которых представлена 4 координатами на текстуре.

В нашем шрифте игра определяет только НОМЕР буквы (но никак не её значение) по смещению в бинарном массиве,
причем в начале фонта идет заголовок неопределенной длины (в котором, в частности, указано имя тексутры в соответствии с таблицей имён), и лишь затем - массив фиксиррованной длины (256 букв * 4 инта для каждой = 1024 интов или 4096 байт) с координатами букв.

//==============================================================

Движок определяет соответствие символов шрифта буквам в текстовом файле (или строковым переменным в бинарном файле) конвертируя их значения согласно вшитой в Core.dll кодовой странице.

причем вызов процедуры инициируется Engine.u, сама процедура происходит в Engine.dll, кодовая страница вшита в Core.dll, сам шрифт и его текстура - в Engine.u

Исходники движка Unreal Engine частично-доступны, они не решают всех вопросов, но дают представление о том, как движок работает со шрифтами.

//=======================================================

Как заменяются буквы - я представляю. Чисто программно, причем кружки и квадраты должны быть в каком-то текстурном пакете. Но опять-таки без работающего эдитора я не полезу менять ни код, ни текстуру - нужно слишком много специальных знаний.
« Last Edit: April 03, 2012, 16:06 by Reborn » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #42 on: April 03, 2012, 13:35 »

Новые шрифты можно "делать" в редакторе UT2004, но мы уже выяснили, что длина заголовка у них отличается - то есть напрямую использовать их вы не сможете
http://wiki.beyondunreal.com/UE2:TrueTypeFontFactory_(UT2004)
Возможно глупое предложение. Попробуйте редактор от Unreal 1.
Logged
oxyfat
Jr. Member
**
Posts: 51



View Profile
« Reply #43 on: April 03, 2012, 16:30 »

Когда-то, встретилась: заметка, автор рассказывает: как использовать для Unreal 1  c помощью UnrealEd собственный шрифт. Возможно, будет полезно? Smiley
Logged
Orbit
Newbie
*
Posts: 28


View Profile
« Reply #44 on: April 03, 2012, 23:41 »

То есть движок unreal 2 имеет поддержку кирилицы? Меня это смущало, так как я думал что это маловероятно.
Logged
Print 
« previous next »
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS