Fandom

武装突袭 Wiki

FXY File Format

简体 | 繁體

4,827个页面创建
于此维基上
添加新页面
评论0 分享

您使用了广告屏蔽软件!


Wikia通过广告运营为用户提供免费的服务。我们对用户通过嵌入广告屏蔽软件访问网站进行了使用调整。

如果您使用了广告屏蔽软件,将无法使用我们的服务。请您移除广告屏蔽软件,以确保页面正常加载。

Disclaimer: This page describes internal undocumented structures of Bohemia Interactive software.

This page contains unofficial information.

Some usage of this information may constitute a violation of the rights of Bohemia Interactive and is in no way endorsed or recommended by Bohemia Interactive.

Bohemia Interactive is not willing to tolerate use of such tools if it contravenes any general licenses granted to end users of this community wiki or BI products.

Introduction编辑

File:LucidaConsoleB11-01.paa.gif

The OFP and ArmA engines use a limited set of bit mapped fonts developed by Bohemia Interactive for the engine. They are bitmaps and each glyph within is treated as a texture.

A character set (such as Ascii) is a series of 'glyphs' (characters) where any one of these characters is always identified by the same index value. For example the letter A is always hex 41 and so on. Regardless of the font set employed, the character set within it, is set-in-concrete. Hex 41 always renders a glyph that 'looks like' the letter A. Be it bold, italic, or fills the entire screen, it is the letter 'A'.

The character set for all BI fonts in OFP is different for each language version. For Western languages it approximates US-Ascii codepage 437. In ArmA Unicode is used for fonts.

A font set is a collection of displayable characters (termed glyphs) that have a common appearance. Eg all glyphs in THIS set are bold, or all the glyphs are italic, all the glyphs are Times Roman (seriffed).

Individual font sets exist for Tahoma, Garamond, and so on.

The glyphs within these sets, are contained in .paa files. Generally, the entire font set = one, paa file.

And, because these are bitmapped fonts, eg fixed dimensions, non-scaleable, there are unique font sets, for, unique sizes.

For example, in Resistance engine, the popular Tahoma font is in three different font sets. 24 point, 36 point, 48 point.

A 'point' approximates 1/72th of an inch. Thus the Tahoma fonts available (for Resistance) are approximately a third, a half, and two thirds of an inch tall when displayed.

Description编辑

An fxy file is the 'character set' index. It is, the codepage.

An fxy file is implicitly associated with one or more paa files within the same folder. The fxy file is the header entry for these files, it describes the position in the paa file and the size to be rendered on screen, for a 'glyph'.

Association of files between fxy and paa is implicit. The CourierNewB64.fxy is implicitly associated with the CourierNewB64-xx.paa file(s). xx indicating one of several CourierNewB64 paa's.

Legend 编辑

see Generic FileFormat Data Types

Struct编辑

Fxy
{
  bytes     ArmaSignature[8]; // ARMA ONLY
  FxyEntry  Entry1;
         ....
  FxyEntry  EntryLast;
}

ArmaSignature编辑

ArmaSignature
{
  char Magic[4]; //"BIFo"
  ulong Version; // 0x101
}

FxyEntry编辑

FxyEntry 
{
  ushort  CharCode;      // 0x21 = 'A' <<< see note
  ushort  PaaFileNumber; // 01
  ushort  X,Y            // Offset (in pixels) in the paa file, to the Top-left of this glyph.
  ushort  Width,Height;  // area (number of) pixels used from the paa file for this glyph.
  ushort  KerningWidth;  // ARMA only. Width used to determine this character spacing
};

Apart from the ARMA header (in Arma fxy files only), the fxy is a contiguous series of 12 byte (ofp) or 14 byte (Arma) entries.

CharCode编辑

OFP uses a USASCII character set. Arma uses Unicode.

The first 256 unicodes ARE us-ascii. For this reason, the first 32 (x20) glyphs in EITHER character set, are control characters, never intended for display, and not included in the paa file(s) nor the fxy header. For that reason, in all circumstances, *the* displayed character is charcode+x20. Thus

'Actual Character' = charcode+x20;
Charcode x21 = index-entry =x21 = character x20+x21 = 0x41 = Glyph 'A'.

This is a constant, irrespective of the number of fxy tables (fonts) now or in the future. Charcode x21 can only ever be glyph 'A' (rendered in whatever style and size the font wants to render it)

  • For OFP, there are 224 entries in any fxy table. (which therefore covers the 256 (224+32) possible us ascii 'characters'.
  • ArmA fxy's have 448 character entries + 16 specials, as each font supports both Western European, Eastern European and Cyrillic character sets.
Bearing in mind that basic 16 bit Unicode can display 65,000 glyphs, standard Arma fonts only use (and are only capable of displaying) a small selection:
  • x20...17F Us Ascii + (most) European Languages
  • 400...45F Cyrillic
  • 2010...201F Special chars. unknown how they work.

You could extend this range in custom fonts of course to whatever you need from 16bit Unicode.

Note that index entries happen to be linear sequential. The nth index entry is also CharCode n. Which way, the engine actually accesses this table for character 'n' is up to the engine.

PaaFileNumber编辑

-number of texture file: This is simply a convenience to allow large fonts to be spread across several paa's.

font name is "CourierNewB64" 
Fxy file is "CourierNewB64.fxy", 
First texture file is "CourierNewB64-01.paa", 
second is "CourierNewB64-02.paa".
  • Note that you cannot assume the glyph character 'A' (nor any other glyph) is ordered the same way in any given paa font-set, nor, in fact that the glyph will 'always be' in fontfile 1 (eg)

Order of glyphs is entirely random in the sense that binarising these files uses a 'best fit' method to squeeze as much content into that file. Not perfect, but not badly done either.

Usage编辑

This example using the new font name in a ArmA description.ext.

class RscText
{
       type = CT_STATIC;
       idc = -1;
       style = ST_LEFT;
       colorBackground[] = {0, 0, 0, 0};
       colorText[] = {1, 1, 1, 1};
       font = Bitstream;
       sizeEx = 0.04;
};

Paa Content编辑

Resistance编辑

.paa files used for the font must be in 8080 format: (Alpha luminosity)

8bit - Brightness (all with 255 value - "white");
8bit - Alpha (255 for character, 0 for space);

ArmA编辑

Arma Glyph files (paa) are formatted in DXT5 compressed textures. Using the TAGG labelling, they must additionally specify

Avg Color: any
Max Color: always FFFFFFFF
AlphaFlag: 1

Available Fonts编辑

Resistance and CWC 编辑

AudreysHand 48pt Italic
AudreysHand 48pt Bold
CourierNew Bold 64pt
Garamond 64
Steelfish bold 64 and 128 pt
SteelfishCE bold 64 
Tahoma 24/36/48 bold

Elite编辑

Arial Bold 7,8,10,11,12 pt
Arial Italic 9,13,18,48
CourierNew 9pt
Hel67-CM 10,11 pt
HelvCondLight 8,9,10 pt
Helvetica-Narrow 11pt
Helvetica-Narrow Bold 8pt
Helvetica37-CondensedThin bold 10pt
Helvetica57-Condensed 10,13,16pt
Helvetica57-Condensed 9 ,13,14 pt Bold 
Helvetica67-Condensed 10,11,9pt Medium
HelveticaNarrow 10,11pt
HelveticaNarrow bold 10,13,18,22
HelveticaNeue 10,11,12,13,14,22
HelveticaNeue  Bold 22 B22-01.paa
LucidaConsole Bold 11,8
MSS Bold 9
System 10pt
System 10pt Bold
Tahoma 10,11,12,14,16,20,21pt
Tahoma 5,6,7,9,10,11,12,13,14,16,20,21 pt bold
Tahoma 12pt Bold Italic

ArmA编辑

Arial Bold 7->24 pt
BitStream
Versans bold 7->20, 22, 28 pt
Zeppelin32 12->20,22,28 pt
Zeppelin33 12->20,22,28 pt
Zeppelin33 12->20,22,28 pt italic

Arma2编辑

File:ArmA2OAFonts CO.png
LucidaConsoleB
Zeppelin33
Zeppelin33Italic
Zeppelin32
EtelkaNarrowMediumPro
Bitstream
TahomaB
EtelkaMonospaceProBold

Arma3编辑

File:Arma3Fonts.png
PuristaLight
PuristaMedium
PuristaSemiBold
PuristaBold
LucidaConsoleB
EtelkaMonospacePro
EtelkaMonospaceProBold
EtelkaNarrowMediumPro
TahomaB

更多维基

随机维基