tr2: release 0.10
Some checks failed
Run code linters / Run code linters (push) Has been cancelled

This commit is contained in:
Marcin Kurczewski 2025-03-18 22:37:35 +01:00
commit 336af723dc
No known key found for this signature in database
GPG key ID: CC65E6FD28CAE42A
834 changed files with 14106 additions and 14182 deletions

View file

@ -131,7 +131,6 @@
{"type": "level_complete"},
],
"injections": [
"data/injections/larson_textures.bin",
"data/injections/qualopec_fd.bin",
"data/injections/qualopec_itemrots.bin",
"data/injections/qualopec_textures.bin",
@ -301,15 +300,12 @@
{"type": "level_complete"},
],
"injections": [
"data/injections/cowboy_textures.bin",
"data/injections/kold_textures.bin",
"data/injections/mines_cameras.bin",
"data/injections/mines_fd.bin",
"data/injections/mines_itemrots.bin",
"data/injections/mines_meshfixes.bin",
"data/injections/mines_pushblocks.bin",
"data/injections/mines_textures.bin",
"data/injections/skateboardkid_textures.bin"
],
"item_drops": [
{"enemy_num": 17, "object_ids": [86]},
@ -424,7 +420,7 @@
],
"cutscenes": [
// Cut Scene 1
// Cutscene 1
{
"path": "data/cut1.phd",
"music_track": 23,
@ -443,7 +439,7 @@
],
},
// Cut Scene 2
// Cutscene 2
{
"path": "data/cut2.phd",
"music_track": 25,
@ -464,7 +460,7 @@
],
},
// Cut Scene 3
// Cutscene 3
{
"path": "data/cut3.phd",
"music_track": 24,
@ -481,7 +477,7 @@
],
},
// Cut Scene 4
// Cutscene 4
{
"path": "data/cut4.phd",
"music_track": 22,

View file

@ -19,6 +19,7 @@
"data/injections/lara_jumping.bin",
"data/injections/uzi_sfx.bin",
"data/injections/explosion.bin",
"data/injections/font.bin",
"data/injections/pickup_aid.bin",
],
"enable_tr2_item_drops": false,

View file

@ -0,0 +1,37 @@
{
// This file is used to enable the -l argument support.
"main_menu_picture": "data/images/title.webp",
"savegame_fmt_legacy": "save_tmp.%d",
"savegame_fmt_bson": "save_tmp_%02d.dat",
"demo_delay": 0,
"water_color": [0.45, 1.0, 1.0],
"draw_distance_fade": 22.0,
"draw_distance_max": 30.0,
"injections": [
"data/injections/backpack.bin",
"data/injections/braid.bin",
"data/injections/lara_animations.bin",
"data/injections/lara_jumping.bin",
"data/injections/uzi_sfx.bin",
"data/injections/explosion.bin",
"data/injections/font.bin",
"data/injections/pickup_aid.bin",
],
"enable_tr2_item_drops": false,
"convert_dropped_guns": false,
"enable_killer_pushblocks": true,
"levels": [
{
"path": "PLACEHOLDER",
"music_track": 0,
"sequence": [
{"type": "loop_game"},
{"type": "level_stats"},
{"type": "level_complete"},
],
"injections": [],
},
],
}

View file

@ -149,10 +149,10 @@
],
"cutscenes": [
{"title": "Cut Scene 1"},
{"title": "Cut Scene 2"},
{"title": "Cut Scene 3"},
{"title": "Cut Scene 4"},
{"title": "Cutscene 1"},
{"title": "Cutscene 2"},
{"title": "Cutscene 3"},
{"title": "Cutscene 4"},
],
"demos": [
@ -356,7 +356,6 @@
"DETAIL_FBO_FILTER": "FBO filter",
"DETAIL_FLOAT_FMT": "%.1f",
"DETAIL_FPS": "FPS",
"DETAIL_PERSPECTIVE": "Perspective",
"DETAIL_PRETTY_PIXELS": "Pretty pixels",
"DETAIL_REFLECTIONS": "Reflections",
"DETAIL_RENDER_MODE": "Render mode",
@ -367,6 +366,7 @@
"DETAIL_SELECT_DETAIL": "Select Detail",
"DETAIL_STRING_FMT": "%s",
"DETAIL_TEXTURE_FILTER": "Texture filter",
"DETAIL_TRAPEZOID_FILTER": "Trapezoid filter",
"DETAIL_UI_BAR_SCALE": "UI bar scale",
"DETAIL_UI_TEXT_SCALE": "UI text scale",
"DETAIL_VSYNC": "VSync",
@ -463,14 +463,16 @@
"OSD_LOAD_GAME_FAIL_INVALID_SLOT": "Invalid save slot %d",
"OSD_LOAD_GAME_FAIL_UNAVAILABLE_SLOT": "Save slot %d is not available",
"OSD_OBJECT_NOT_FOUND": "Object not found",
"OSD_PERSPECTIVE_FILTER_OFF": "Perspective correction: off",
"OSD_PERSPECTIVE_FILTER_ON": "Perspective correction: on",
"OSD_PHOTO_MODE_LAUNCHED": "Entering photo mode, press %s for help",
"OSD_PLAY_CUTSCENE": "Loading cutscene %d",
"OSD_PLAY_DEMO": "Loading demo %d",
"OSD_PLAY_LEVEL": "Loading %s",
"OSD_PLAY_MUSIC_TRACK": "Playing music track %d",
"OSD_POS_GET": "Level: %d (%s) Room: %d\nPosition: %.3f, %.3f, %.3f\nRotation: %.3f,%.3f,%.3f",
"OSD_POS_LARA_MISSING": "Lara not present",
"OSD_POS_LARA_POS_FMT": "Room: %d\nPosition: %.3f, %.3f, %.3f\nRotation: %.3f, %.3f, %.3f",
"OSD_POS_LEVEL_FMT": "Level %d",
"OSD_POS_LEVEL_FMT_CUTSCENE": "Cutscene %d",
"OSD_POS_LEVEL_FMT_DEMO": "Demo %d",
"OSD_POS_SET_ITEM": "Teleported to object: %s",
"OSD_POS_SET_ITEM_FAIL": "Failed to teleport to object: %s",
"OSD_POS_SET_POS": "Teleported to position: %.3f %.3f %.3f",
@ -486,6 +488,8 @@
"OSD_TEXTURE_FILTER_BILINEAR": "bilinear",
"OSD_TEXTURE_FILTER_NN": "nearest-neighbor",
"OSD_TEXTURE_FILTER_SET": "Texture filter set to %s",
"OSD_TRAPEZOID_FILTER_OFF": "Trapezoid filter disabled",
"OSD_TRAPEZOID_FILTER_ON": "Trapezoid filter enabled",
"OSD_UI_OFF": "UI disabled",
"OSD_UI_ON": "UI enabled",
"OSD_UNKNOWN_COMMAND": "Unknown command: %s",

View file

@ -0,0 +1 @@
{"levels": [{"title": "Test Level"}]}

View file

@ -2,24 +2,30 @@
// Vertex shader
layout(location = 0) in vec3 inPosition;
layout(location = 1) in vec3 inTexCoords;
layout(location = 2) in vec4 inColor;
layout(location = 1) in vec4 inTexCoords;
layout(location = 2) in float inTexZ;
layout(location = 3) in vec4 inColor;
uniform mat4 matProjection;
uniform mat4 matModelView;
#ifdef OGL33C
out vec4 vertColor;
out vec3 vertTexCoords;
out vec4 vertTexCoords;
out float vertTexZ;
#else
varying vec4 vertColor;
varying vec3 vertTexCoords;
varying vec4 vertTexCoords;
varying float vertTexZ;
#endif
void main(void) {
gl_Position = matProjection * matModelView * vec4(inPosition, 1);
vertColor = inColor / 255.0;
vertTexCoords = inTexCoords;
vertTexCoords.xy *= vertTexCoords.zw;
vertTexCoords *= inTexZ;
vertTexZ = inTexZ;
}
#else
@ -39,7 +45,8 @@ uniform float brightnessMultiplier;
#define TEXELFETCH texelFetch
in vec4 vertColor;
in vec3 vertTexCoords;
in vec4 vertTexCoords;
in float vertTexZ;
out vec4 OUTCOLOR;
#else
#define OUTCOLOR gl_FragColor
@ -48,27 +55,30 @@ uniform float brightnessMultiplier;
#define TEXTURE texture2D
varying vec4 vertColor;
varying vec3 vertTexCoords;
varying vec4 vertTexCoords;
varying float vertTexZ;
#endif
void main(void) {
OUTCOLOR = vertColor;
vec2 texCoords = vertTexCoords.xy;
texCoords.xy /= vertTexCoords.zw;
if (texturingEnabled) {
#if defined(GL_EXT_gpu_shader4) || defined(OGL33C)
if (alphaPointDiscard && smoothingEnabled) {
// do not use smoothing for chroma key
ivec2 size = TEXTURESIZE(tex0, 0);
int tx = int((vertTexCoords.x / vertTexCoords.z) * size.x) % size.x;
int ty = int((vertTexCoords.y / vertTexCoords.z) * size.y) % size.y;
vec4 texel = TEXELFETCH(tex0, ivec2(tx, ty), 0);
ivec2 texCoordsNN = ivec2(texCoords.xy * size.xy) % size.xy;
vec4 texel = TEXELFETCH(tex0, texCoordsNN, 0);
if (texel.a == 0.0) {
discard;
}
}
#endif
vec4 texColor = TEXTURE(tex0, vertTexCoords.xy / vertTexCoords.z);
vec4 texColor = TEXTURE(tex0, texCoords.xy);
if (alphaThreshold >= 0.0 && texColor.a <= alphaThreshold) {
discard;
}

BIN
data/tr2/glyphs/buttons.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
data/tr2/glyphs/glyphs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,25 @@
# This file is used by the tooling in the tools/glyphs/ directory and is
# crucial for the game's graphical text handling, serving two roles:
#
# 1. Hardcoding Unicode to sprite mapping
# It generates C macros that map Unicode code points and escaped sequences
# to O_ALPHABET's sprite indices, specify glyph dimensions, and instruct how
# to compose compound characters - all getting hardcoded into the executable.
# 2. Guidance for font.bin creation
# It directs the injector tool in creating the font.bin file that contains
# O_ALPHABET sprite bitmaps, along with additional positional information.
#
# Important notes:
# - Some sprite indices are fixed. This is for compatibility with the original
# game to retains original text format even if font.bin goes missing.
include "mapping_basic_latin.txt"
include "mapping_icons.txt"
include "mapping_combining_diactrics.txt"
include "mapping_latin-1_supplement.txt"
include "mapping_latin_extended-a.txt"
include "mapping_latin_extended-b.txt"
include "mapping_greek_and_coptic.txt"
include "mapping_cyrillic.txt"
include "mapping_latin_extended_additional.txt"
include "mapping_misc.txt"

View file

@ -0,0 +1,104 @@
# --------------------------------------------------
# Unicode Block "Basic Latin" (U+0000 to U+007F)
# --------------------------------------------------
# ASCII a-z
U+0061:a N manual_sprite("glyphs.png", 218, 41, 11, 18, index=26)
U+0062:b N manual_sprite("glyphs.png", 229, 41, 11, 18, index=27)
U+0063:c N manual_sprite("glyphs.png", 240, 41, 11, 18, index=28)
U+0064:d N manual_sprite("glyphs.png", 0, 59, 11, 18, index=29)
U+0065:e N manual_sprite("glyphs.png", 11, 59, 11, 18, index=30)
U+0066:f N manual_sprite("glyphs.png", 22, 59, 11, 18, index=31)
U+0067:g N manual_sprite("glyphs.png", 33, 59, 11, 18, index=32)
U+0068:h N manual_sprite("glyphs.png", 44, 59, 11, 18, index=33)
U+0069:i N manual_sprite("glyphs.png", 55, 59, 7, 18, index=34)
U+006A:j N manual_sprite("glyphs.png", 62, 59, 11, 18, index=35)
U+006B:k N manual_sprite("glyphs.png", 73, 59, 12, 18, index=36)
U+006C:l N manual_sprite("glyphs.png", 85, 59, 7, 18, index=37)
U+006D:m N manual_sprite("glyphs.png", 92, 59, 14, 18, index=38)
U+006E:n N manual_sprite("glyphs.png", 106, 59, 12, 18, index=39)
U+006F:o N manual_sprite("glyphs.png", 118, 59, 11, 18, index=40)
U+0070:p N manual_sprite("glyphs.png", 129, 59, 11, 18, index=41)
U+0071:q N manual_sprite("glyphs.png", 140, 59, 11, 18, index=42)
U+0072:r N manual_sprite("glyphs.png", 151, 59, 10, 18, index=43)
U+0073:s N manual_sprite("glyphs.png", 161, 59, 11, 18, index=44)
U+0074:t N manual_sprite("glyphs.png", 172, 59, 11, 18, index=45)
U+0075:u N manual_sprite("glyphs.png", 183, 59, 11, 18, index=46)
U+0076:v N manual_sprite("glyphs.png", 194, 59, 11, 18, index=47)
U+0077:w N manual_sprite("glyphs.png", 205, 59, 13, 18, index=48)
U+0078:x N manual_sprite("glyphs.png", 218, 59, 11, 18, index=49)
U+0079:y N manual_sprite("glyphs.png", 229, 59, 11, 18, index=50)
U+007A:z N manual_sprite("glyphs.png", 240, 59, 11, 18, index=51)
# ASCII A-z
U+0041:A N manual_sprite("glyphs.png", 65, 23, 17, 18, index=0) expand(-1)
U+0042:B N manual_sprite("glyphs.png", 82, 23, 13, 18, index=1)
U+0043:C N manual_sprite("glyphs.png", 95, 23, 13, 18, index=2)
U+0044:D N manual_sprite("glyphs.png", 108, 23, 13, 18, index=3)
U+0045:E N manual_sprite("glyphs.png", 121, 23, 13, 18, index=4)
U+0046:F N manual_sprite("glyphs.png", 134, 23, 13, 18, index=5)
U+0047:G N manual_sprite("glyphs.png", 147, 23, 13, 18, index=6)
U+0048:H N manual_sprite("glyphs.png", 160, 23, 15, 18, index=7)
U+0049:I N manual_sprite("glyphs.png", 175, 23, 10, 18, index=8)
U+004A:J N manual_sprite("glyphs.png", 185, 23, 13, 18, index=9)
U+004B:K N manual_sprite("glyphs.png", 198, 23, 14, 18, index=10)
U+004C:L N manual_sprite("glyphs.png", 212, 23, 13, 18, index=11)
U+004D:M N manual_sprite("glyphs.png", 225, 23, 15, 18, index=12)
U+004E:N N manual_sprite("glyphs.png", 240, 23, 15, 18, index=13)
U+004F:O N manual_sprite("glyphs.png", 0, 41, 14, 18, index=14)
U+0050:P N manual_sprite("glyphs.png", 14, 41, 13, 18, index=15)
U+0051:Q N manual_sprite("glyphs.png", 27, 41, 14, 18, index=16)
U+0052:R N manual_sprite("glyphs.png", 41, 41, 14, 18, index=17)
U+0053:S N manual_sprite("glyphs.png", 55, 41, 13, 18, index=18)
U+0054:T N manual_sprite("glyphs.png", 68, 41, 14, 18, index=19)
U+0055:U N manual_sprite("glyphs.png", 82, 41, 15, 18, index=20)
U+0056:V N manual_sprite("glyphs.png", 97, 41, 15, 18, index=21)
U+0057:W N manual_sprite("glyphs.png", 112, 41, 15, 18, index=22)
U+0058:X N manual_sprite("glyphs.png", 127, 41, 14, 18, index=23)
U+0059:Y N manual_sprite("glyphs.png", 141, 41, 14, 18, index=24)
U+005A:Z N manual_sprite("glyphs.png", 155, 41, 13, 18, index=25)
# Digits 0-9
U+0030:0 N manual_sprite("glyphs.png", 135, 5, 14, 18, index=52)
U+0031:1 N manual_sprite("glyphs.png", 149, 5, 11, 18, index=53)
U+0032:2 N manual_sprite("glyphs.png", 160, 5, 12, 18, index=54)
U+0033:3 N manual_sprite("glyphs.png", 172, 5, 12, 18, index=55)
U+0034:4 N manual_sprite("glyphs.png", 184, 5, 12, 18, index=56)
U+0035:5 N manual_sprite("glyphs.png", 196, 5, 12, 18, index=57)
U+0036:6 N manual_sprite("glyphs.png", 208, 5, 12, 18, index=58)
U+0037:7 N manual_sprite("glyphs.png", 220, 5, 12, 18, index=59)
U+0038:8 N manual_sprite("glyphs.png", 232, 5, 12, 18, index=60)
U+0039:9 N manual_sprite("glyphs.png", 244, 5, 12, 18, index=61)
# Basic Punctuation
U+0021:! N manual_sprite("glyphs.png", 0, 5, 6, 18, index=64)
U+0022:" N manual_sprite("glyphs.png", 6, 5, 9, 18)
U+0023:# N manual_sprite("glyphs.png", 16, 5, 14, 18, index=78)
U+0024:$ N manual_sprite("glyphs.png", 30, 5, 11, 18)
U+0025:% N manual_sprite("glyphs.png", 41, 5, 13, 18)
U+0026:& N manual_sprite("glyphs.png", 54, 5, 11, 18)
U+0027:' N manual_sprite("glyphs.png", 65, 5, 6, 18, index=79)
U+0028:( N manual_sprite("glyphs.png", 71, 5, 7, 18) expand(w=-1)
U+0029:) N manual_sprite("glyphs.png", 78, 5, 7, 18) translate(x=1) expand(w=1)
U+002A:* N manual_sprite("glyphs.png", 85, 5, 9, 18)
U+002B:+ N manual_sprite("glyphs.png", 94, 5, 11, 18, index=72)
U+002C:, N manual_sprite("glyphs.png", 105, 5, 6, 18, index=63)
U+002D:- N manual_sprite("glyphs.png", 111, 5, 9, 18, index=71)
U+002E:. N manual_sprite("glyphs.png", 120, 5, 6, 18, index=62)
U+002F:/ N manual_sprite("glyphs.png", 126, 5, 9, 18, index=68)
U+003A:: N manual_sprite("glyphs.png", 0, 23, 6, 18, index=73)
U+003B:; N manual_sprite("glyphs.png", 6, 23, 6, 18)
U+003C:< N manual_sprite("glyphs.png", 13, 23, 9, 18)
U+003D:= N manual_sprite("glyphs.png", 22, 23, 9, 18)
U+003E:> N manual_sprite("glyphs.png", 31, 23, 9, 18)
U+003F:? N manual_sprite("glyphs.png", 41, 23, 12, 18, index=65)
U+0040:@ N manual_sprite("glyphs.png", 53, 23, 12, 18)
U+005B:[ N manual_sprite("glyphs.png", 168, 41, 8, 18, index=66)
U+005C:\ N manual_sprite("glyphs.png", 176, 41, 9, 18, index=76)
U+005D:] N manual_sprite("glyphs.png", 185, 41, 8, 18, index=75)
U+005E:^ N manual_sprite("glyphs.png", 193, 41, 9, 18)
U+005F:_ N manual_sprite("glyphs.png", 202, 41, 9, 18)
U+0060:` N manual_sprite("glyphs.png", 211, 41, 7, 18)
U+007B:{ N manual_sprite("glyphs.png", 0, 77, 8, 18)
U+007C:| N manual_sprite("glyphs.png", 8, 77, 6, 18)
U+007D:} N manual_sprite("glyphs.png", 14, 77, 8, 18)
U+007E:~ N manual_sprite("glyphs.png", 22, 77, 10, 18)

View file

@ -0,0 +1,16 @@
# --------------------------------------------------
# Combining diactrics
# --------------------------------------------------
"\\{grave accent}" c manual_sprite("glyphs.png", 0, 0, 7, 5, index=77)
"\\{acute accent}" c manual_sprite("glyphs.png", 7, 0, 7, 5, index=70)
"\\{circumflex accent}" c manual_sprite("glyphs.png", 32, 0, 9, 5, index=69)
"\\{circumflex}" N link("\\{circumflex accent}")
"\\{macron}" c manual_sprite("glyphs.png", 23, 0, 9, 5)
"\\{breve}" c manual_sprite("glyphs.png", 50, 0, 8, 5)
"\\{dot above}" c manual_sprite("glyphs.png", 58, 0, 6, 5)
"\\{umlaut}" c manual_sprite("glyphs.png", 14, 0, 9, 5, index=67)
"\\{caron}" c manual_sprite("glyphs.png", 41, 0, 9, 5)
"\\{ring above}" c manual_sprite("glyphs.png", 64, 0, 7, 5)
"\\{tilde}" c manual_sprite("glyphs.png", 71, 0, 10, 5)
"\\{double acute accent}" c manual_sprite("glyphs.png", 81, 0, 9, 5)
"\\{acute umlaut}" c manual_sprite("glyphs.png", 90, 0, 11, 5)

View file

@ -0,0 +1,101 @@
# --------------------------------------------------
# Unicode Block "Cyrillic" (U+0400 to U+04FF)
# --------------------------------------------------
U+0400:Ѐ C combine(U+0415:Е, "\\{grave accent}")
U+0401:Ё C combine(U+0415:Е, "\\{umlaut}")
U+0402:Ђ N manual_sprite("glyphs.png", 73, 167, 15, 18)
U+0403:Ѓ C combine(U+0413:Г, "\\{acute accent}")
U+0404:Є N manual_sprite("glyphs.png", 88, 167, 13, 18)
U+0405:Ѕ N link("S")
U+0406:І N link("I")
U+0407:Ї C combine(U+0406:І, "\\{umlaut}")
U+0408:Ј N link("J")
U+0409:Љ N manual_sprite("glyphs.png", 101, 167, 18, 18)
U+040A:Њ N manual_sprite("glyphs.png", 119, 167, 18, 18)
U+040B:Ћ N manual_sprite("glyphs.png", 137, 167, 16, 18)
U+040C:Ќ C combine(U+041A:К, "\\{acute accent}")
U+040D:Ѝ C combine(U+0418:И, "\\{grave accent}")
U+040E:Ў C combine(U+0423:У, "\\{breve}")
U+040F:Џ N manual_sprite("glyphs.png", 153, 167, 14, 18)
U+0410:А N link("A")
U+0411:Б N manual_sprite("glyphs.png", 167, 167, 13, 18)
U+0412:В N link("B")
U+0413:Г N link(U+0393:Γ)
U+0414:Д N manual_sprite("glyphs.png", 180, 167, 16, 18)
U+0415:Е N link("E")
U+0416:Ж N manual_sprite("glyphs.png", 196, 167, 18, 18)
U+0417:З N manual_sprite("glyphs.png", 214, 167, 12, 18)
U+0418:И N manual_sprite("glyphs.png", 226, 167, 15, 18)
U+0419:Й C combine(U+0418:И, "\\{breve}")
U+041A:К N link("K")
U+041B:Л N manual_sprite("glyphs.png", 241, 167, 15, 18)
U+041C:М N link("M")
U+041D:Н N link("H")
U+041E:О N link("O")
U+041F:П N link(U+03A0:Π)
U+0420:Р N link("P")
U+0421:С N link("C")
U+0422:Т N link("T")
U+0423:У N manual_sprite("glyphs.png", 0, 185, 14, 18)
U+0424:Ф N link(U+03A6:Φ)
U+0425:Х N link("X")
U+0426:Ц N manual_sprite("glyphs.png", 14, 185, 15, 18)
U+0427:Ч N manual_sprite("glyphs.png", 29, 185, 15, 18)
U+0428:Ш N manual_sprite("glyphs.png", 44, 185, 18, 18)
U+0429:Щ N manual_sprite("glyphs.png", 62, 185, 18, 18)
U+042A:Ъ N manual_sprite("glyphs.png", 80, 185, 15, 18)
U+042B:Ы N manual_sprite("glyphs.png", 95, 185, 18, 18)
U+042C:Ь N manual_sprite("glyphs.png", 113, 185, 13, 18)
U+042D:Э N manual_sprite("glyphs.png", 126, 185, 13, 18)
U+042E:Ю N manual_sprite("glyphs.png", 139, 185, 18, 18)
U+042F:Я N manual_sprite("glyphs.png", 157, 185, 13, 18)
U+0430:а N link("a")
U+0431:б N manual_sprite("glyphs.png", 170, 185, 11, 18)
U+0432:в N manual_sprite("glyphs.png", 181, 185, 11, 18)
U+0433:г N manual_sprite("glyphs.png", 192, 185, 10, 18)
U+0434:д N manual_sprite("glyphs.png", 202, 185, 12, 18)
U+0435:е N link("e")
U+0436:ж N manual_sprite("glyphs.png", 214, 185, 17, 18)
U+0437:з N manual_sprite("glyphs.png", 232, 185, 11, 18)
U+0438:и N manual_sprite("glyphs.png", 243, 185, 12, 18)
U+0439:й C combine(U+0438:и, "\\{breve}")
U+043A:к N link(U+0138:ĸ)
U+043B:л N manual_sprite("glyphs.png", 0, 203, 11, 18)
U+043C:м N manual_sprite("glyphs.png", 11, 203, 13, 18)
U+043D:н N manual_sprite("glyphs.png", 24, 203, 11, 18)
U+043E:о N link("o")
U+043F:п N manual_sprite("glyphs.png", 35, 203, 11, 18)
U+0440:р N link("p")
U+0441:с N link("c")
U+0442:т N manual_sprite("glyphs.png", 46, 203, 10, 18)
U+0443:у N link("y")
U+0444:ф N manual_sprite("glyphs.png", 56, 203, 14, 18)
U+0445:х N link("x")
U+0446:ц N manual_sprite("glyphs.png", 70, 203, 12, 18)
U+0447:ч N manual_sprite("glyphs.png", 82, 203, 11, 18)
U+0448:ш N manual_sprite("glyphs.png", 93, 203, 14, 18)
U+0449:щ N manual_sprite("glyphs.png", 107, 203, 15, 18)
U+044A:ъ N manual_sprite("glyphs.png", 122, 203, 13, 18)
U+044B:ы N manual_sprite("glyphs.png", 135, 203, 14, 18)
U+044C:ь N manual_sprite("glyphs.png", 149, 203, 11, 18)
U+044D:э N manual_sprite("glyphs.png", 160, 203, 11, 18)
U+044E:ю N manual_sprite("glyphs.png", 171, 203, 14, 18)
U+044F:я N manual_sprite("glyphs.png", 185, 203, 11, 18)
U+0450:ѐ C combine("e", "\\{grave accent}")
U+0451:ё C combine("e", "\\{umlaut}")
U+0452:ђ N manual_sprite("glyphs.png", 196, 203, 12, 18)
U+0453:ѓ C combine(U+0433:г, "\\{acute accent}")
U+0454:є N manual_sprite("glyphs.png", 208, 203, 11, 18)
U+0455:ѕ N link("s")
U+0456:і N link("i")
U+0457:ї C combine(U+0131:ı, "\\{umlaut}")
U+0458:ј N link("j")
U+0459:љ N manual_sprite("glyphs.png", 219, 203, 16, 18)
U+045A:њ N manual_sprite("glyphs.png", 235, 203, 16, 18)
U+045B:ћ N link(U+0127:ħ)
U+045C:ќ C combine(U+043A:к, "\\{acute accent}")
U+045D:ѝ C combine(U+0438:и, "\\{grave accent}")
U+045E:ў C combine(U+0443:у, "\\{breve}")
U+045F:џ N manual_sprite("glyphs.png", 0, 221, 11, 18)
U+0490:Ґ N manual_sprite("glyphs.png", 11, 221, 13, 18)
U+0491:ґ N manual_sprite("glyphs.png", 24, 221, 10, 18)

View file

@ -0,0 +1,73 @@
# --------------------------------------------------
# Unicode Block "Greek and Coptic" (U+0370 to U+03FF)
# --------------------------------------------------
U+0393:Γ N manual_sprite("glyphs.png", 194, 131, 13, 18)
U+0394:Δ N manual_sprite("glyphs.png", 207, 131, 15, 18)
U+0395:Ε N link("E")
U+0396:Ζ N link("Z")
U+0397:Η N link("H")
U+0398:Θ N manual_sprite("glyphs.png", 222, 131, 14, 18)
U+0399:Ι N link("I")
U+039A:Κ N link("K")
U+039B:Λ N manual_sprite("glyphs.png", 236, 131, 17, 18)
U+039C:Μ N link("M")
U+039D:Ν N link("N")
U+039E:Ξ N manual_sprite("glyphs.png", 0, 149, 14, 18)
U+039F:Ο N link("O")
U+03A0:Π N manual_sprite("glyphs.png", 14, 149, 15, 18)
U+03A1:Ρ N link("P")
U+03A3:Σ N manual_sprite("glyphs.png", 29, 149, 13, 18)
U+03A4:Τ N link("T")
U+03A5:Υ N link("Y")
U+03A6:Φ N manual_sprite("glyphs.png", 42, 149, 16, 18)
U+03A7:Χ N link("Z")
U+03A8:Ψ N manual_sprite("glyphs.png", 58, 149, 18, 18)
U+03A9:Ω N manual_sprite("glyphs.png", 76, 149, 14, 18)
U+03B1:α N manual_sprite("glyphs.png", 90, 149, 12, 18)
U+03B2:β N manual_sprite("glyphs.png", 102, 149, 11, 18)
U+03B3:γ N manual_sprite("glyphs.png", 113, 149, 12, 18)
U+03B4:δ N manual_sprite("glyphs.png", 125, 149, 11, 18)
U+03B5:ε N manual_sprite("glyphs.png", 136, 149, 11, 18)
U+03B6:ζ N manual_sprite("glyphs.png", 147, 149, 11, 18)
U+03B7:η N manual_sprite("glyphs.png", 158, 149, 11, 18)
U+03B8:θ N manual_sprite("glyphs.png", 169, 149, 11, 18)
U+03B9:ι N link(U+0131:ı)
U+03BA:κ N link(U+0138:ĸ)
U+03BB:λ N manual_sprite("glyphs.png", 180, 149, 12, 18)
U+03BC:μ N link(U+00B5:µ)
U+03BD:ν N link("v")
U+03BE:ξ N manual_sprite("glyphs.png", 192, 149, 11, 18)
U+03BF:ο N link("o")
U+03C0:π N manual_sprite("glyphs.png", 203, 149, 13, 18)
U+03C1:ρ N manual_sprite("glyphs.png", 216, 149, 11, 18)
U+03C2:ς N manual_sprite("glyphs.png", 227, 149, 11, 18)
U+03C3:σ N manual_sprite("glyphs.png", 238, 149, 12, 18)
U+03C4:τ N manual_sprite("glyphs.png", 0, 167, 10, 18)
U+03C5:υ N manual_sprite("glyphs.png", 10, 167, 11, 18)
U+03C6:φ N manual_sprite("glyphs.png", 21, 167, 14, 18)
U+03C7:χ N manual_sprite("glyphs.png", 35, 167, 11, 18)
U+03C8:ψ N manual_sprite("glyphs.png", 46, 167, 14, 18)
U+03C9:ω N manual_sprite("glyphs.png", 60, 167, 13, 18)
U+0386:Ά C combine(U+0391:Α, "\\{acute accent}", offset_x=-4, offset_y=2)
U+0388:Έ C combine(U+0395:Ε, "\\{acute accent}", offset_x=-4, offset_y=2)
U+0389:Ή C combine(U+0397:Η, "\\{acute accent}", offset_x=-4, offset_y=2)
U+038A:Ί C combine(U+0399:Ι, "\\{acute accent}", offset_x=-4, offset_y=2)
U+038C:Ό C combine(U+039F:Ο, "\\{acute accent}", offset_x=-4, offset_y=2)
U+038E:Ύ C combine(U+03A5:Υ, "\\{acute accent}", offset_x=-4, offset_y=2)
U+038F:Ώ C combine(U+03A9:Ω, "\\{acute accent}", offset_x=-4, offset_y=2)
U+0390:ΐ C combine(U+03B9:ι, "\\{acute umlaut}")
U+0391:Α N link("A")
U+0392:Β N link("B")
U+03AA:Ϊ C combine(U+0399:Ι, "\\{umlaut}")
U+03AB:Ϋ C combine(U+03A5:Υ, "\\{umlaut}")
U+03AC:ά C combine(U+03B1:α, "\\{acute accent}")
U+03AD:έ C combine(U+03B5:ε, "\\{acute accent}")
U+03AE:ή C combine(U+03B7:η, "\\{acute accent}")
U+03AF:ί C combine(U+03B9:ι, "\\{acute accent}")
U+03B0:ΰ C combine(U+03C5:υ, "\\{acute umlaut}")
U+03CA:ϊ C combine(U+03B9:ι, "\\{umlaut}")
U+03CB:ϋ C combine(U+03C5:υ, "\\{umlaut}")
U+03CC:ό C combine(U+03BF:ο, "\\{acute accent}")
U+03CD:ύ C combine(U+03C5:υ, "\\{acute accent}")
U+03CE:ώ C combine(U+03C9:ω, "\\{acute accent}")

Some files were not shown because too many files have changed in this diff Show more