커스텀 폰트 메이커
서버에 고유한 폰트를 주세요. .ttf나 .otf를 올리면 GTA V가 요구하는 Scaleform .gfx 파일을 브라우저 안에서 그대로 만듭니다. 설치할 변환기는 없습니다. 플레이어가 쓰는 해상도의 실제 로스산토스 화면 위에서 텍스트 네이티브가 주는 크기, 색, 줄바꿈, 그림자, 외곽선을 확인할 수 있습니다. 그런 다음 stream에 들어간 폰트, 등록용 Lua, 그리고 그에 맞는 그리기 코드가 담긴 리소스를 내려받으면 됩니다.
이 도구와 설명은 아직 영어로만 제공됩니다.
How to use it
- Drop a
.ttfor.otfon the page. It is read on your own machine. - Pick the characters to include. Basic Latin is the smallest file and covers most HUDs.
- Set the file name and the font name. They are two different things: the first is the name of the .gfx on disk, the second is the name of the font inside it.
- Type your text and set the scale, colour, position, wrapping, shadow and outline.
- Download the resource, drop it in your resources folder and add
ensurefor it.
What a custom font needs in game
GTA V draws text through Scaleform, so a font has to be a Scaleform GFx font library, a.gfx file. Four things have to line up:
- The
.gfxhas to be in the resource'sstreamfolder. That is what hands it to the game's streamer, andRegisterFontFileonly works on a file the streamer already knows about. RegisterFontFile('name')takes the file name without the extension. It queues the library; the client loads it over the next frames.RegisterFontId('FontName')takes the name of the font inside that library and gives you back an index.SetTextFont(id)with that index, before you begin the text command.
A font needs no files entry and no data_file line in the manifest.files makes something fetchable by the client, which is not the same as streaming it, and data_file is for the game's own meta files. The generated manifest says this in a comment so nobody adds one later.
The traps
| What you see | Why |
|---|---|
| The stock font on the first frames, then yours | The library is still streaming in. RegisterFontFile queues it and no native reports when it is ready, so wait a moment after registering before you draw. The generated client.lua does. |
| The wrong font, or the stock one, forever | A hardcoded font id. RegisterFontId returns an index into a list built while the client runs, so it shifts if another resource registers a font before yours. Keep the value you were handed. |
| Empty boxes where some letters should be | Those characters are not in the file. Accents, Cyrillic, Greek and the lira sign only ship if you picked a character set that includes them. The preview shows the same boxes. |
| Your colour, scale or shadow is ignored | The call came after BeginTextCommandDisplayText. EverySetText... call has to come first. |
| Centring does nothing | SetTextJustification needs a box to justify inside, so it only does something together with SetTextWrap. |
| Long text is cut off | One text component carries 99 characters. Split it and add it in pieces. |
| Nothing happens at all | RegisterFontID with a capital D is not a native. It isRegisterFontId. |
What the preview can and cannot show
The text on the screenshot is drawn from the glyph outlines read back out of the .gfx this page just built, not from your browser's own rendering of the uploaded font. The letter shapes, the spacing between them, the line breaks and anything missing are therefore exactly what the file holds.
The size is close rather than exact. GTA works the final text height out from the font's own ascent, so there is no clean formula that holds for every font; if you need the real number, read it in game with GetTextScaleHeight. The drop shadow and outline are drawn the way the game draws them but are not pixel for pixel, and no browser can tell you how your font looks after the game's own antialiasing.
Privacy and licensing
Nothing is uploaded. The page reads the font, builds the .gfx and packs the zip in your browser, and this tool has no server side. Fonts are licensed work, so check that the one you are shipping allows embedding before you put it on a server.
설정과 코드 도구 더 보기
의상 디자이너
의상 .ydd나 .ydr을 .ytd 파일과 함께 열어 3D나 UV 레이아웃 위에서 레이어, 텍스트, 이미지로 칠하고 새 .ytd 텍스처로 내보냅니다.
YMAP 빌더
좌표로 프롭을 배치하면 회전, extents, LOD 거리가 제대로 들어간 .ymap XML이 나옵니다.
구역 생성기
실제 GTA V 지도 위에 2D나 3D로 구역을 그리고 ox_lib, PolyZone, ox_target, qb-target 코드로 복사하세요.
