From e9d0dd4579459373d84403027b2b2118110fad31 Mon Sep 17 00:00:00 2001 From: Luke Hubmayer-Werner Date: Wed, 16 Aug 2023 23:02:59 +0930 Subject: [PATCH] Use RPGe dialog font at runtime from ROM --- data/glyph_tables/Glyphs_dialog_RPGe.txt | 46 ++++++++++++------------ scripts/loaders/SpriteLoader.gd | 18 ++++++++++ scripts/managers/ThemeManager.gd | 1 + test_scene.gd | 4 --- widgets/HexStringViewer.gd | 4 +++ 5 files changed, 46 insertions(+), 27 deletions(-) diff --git a/data/glyph_tables/Glyphs_dialog_RPGe.txt b/data/glyph_tables/Glyphs_dialog_RPGe.txt index eedb266..22dee5e 100644 --- a/data/glyph_tables/Glyphs_dialog_RPGe.txt +++ b/data/glyph_tables/Glyphs_dialog_RPGe.txt @@ -78,8 +78,8 @@ プ ぷ ペ -" -' +“ +‘ 0 1 @@ -151,8 +151,8 @@ it li ll -' -" +“ +” : ; , @@ -166,10 +166,10 @@ ti fi ラ ら -pe -l -' -" +p +el +‘ +“ if lt tl @@ -204,31 +204,31 @@ tt ? ォ % -/ +/ : 「 」 。 -A -B -X -Y -L -R -E -H -M -P -S -C -T +A +B +X +Y +L +R +E +H +M +P +S +C +T ← → + 、 ◯ 『 -F + °C ・ ( diff --git a/scripts/loaders/SpriteLoader.gd b/scripts/loaders/SpriteLoader.gd index a2f964e..bb516bd 100644 --- a/scripts/loaders/SpriteLoader.gd +++ b/scripts/loaders/SpriteLoader.gd @@ -42,6 +42,7 @@ var character_battle_sprite_palette_stone_texture: ImageTexture var weapon_textures = {} var font_atlas_image: Image var font_atlas_texture: ImageTexture +var font: BitmapFont var character_status_palette_replacements = { 'poison': {4: '$7EDB = #DEB5FF', 8: '$4DD3 = #9C739C'}, # Also kneel @@ -537,6 +538,23 @@ func load_from_structs(data: Dictionary): # Make font atlas self.font_atlas_image = make_font_glyph_atlas(data.font_glyphs_small, data.font_glyphs_dialogue, data.font_glyphs_kanji) self.font_atlas_texture = texture_from_image(self.font_atlas_image) + self.font = BitmapFont.new() + self.font.add_texture(self.font_atlas_texture) + # self.font.extra_spacing_top = -2 + # self.font.extra_spacing_bottom = -1 + # self.font.extra_spacing_char = -1 + # self.font.extra_spacing_space = 1 + var glyph_table: PoolStringArray = StringLoader.glyph_tables.RPGe_dialog + var advance_table: PoolByteArray = data.RPGe_font_character_widths + for i in 256: + var s := glyph_table[i] + if len(s) == 1: # ignore icons etc. for now + var c := s.ord_at(0) + self.font.add_char(c, 0, Rect2((i%32)*16, (i/32)*12 + 32, advance_table[i], 12)) + if c == 0x2019: # RIGHT SINGLE QUOTATION MARK + # Add for ' as well + self.font.add_char(0x27, 0, Rect2((i%32)*16, (i/32)*12 + 32, advance_table[i], 12)) + ThemeManager.theme.default_font = self.font const gba_marker := 'FINAL FANTASY V ADVANCE SYGMAB' const gba_marker_pos_US := 0x12FE10 diff --git a/scripts/managers/ThemeManager.gd b/scripts/managers/ThemeManager.gd index f2e1b1a..a80700f 100644 --- a/scripts/managers/ThemeManager.gd +++ b/scripts/managers/ThemeManager.gd @@ -3,6 +3,7 @@ var menu_r5 := 0 var menu_g5 := 0 var menu_b5 := 16 +var theme := preload('res://theme/menu_theme.tres') var border_image: Image = preload('res://theme/border.png') var border_texture := preload('res://theme/border_imagetexture.tres') var border_stylebox := preload('res://theme/border_stylebox.tres') diff --git a/test_scene.gd b/test_scene.gd index dd00b0d..d4a629c 100644 --- a/test_scene.gd +++ b/test_scene.gd @@ -43,10 +43,6 @@ func _ready(): bbg.align = LineEdit.ALIGN_RIGHT add_child(bbg) -# var fontbox := TextureRect.new() -# fontbox.texture = SpriteLoader.font_atlas_texture -# add_child(fontbox) - # var lbl = Label.new() # for i in 22: # lbl.text = lbl.text + '%s - %s\n' % [StringLoader.get_job_name(i), StringLoader.get_job_desc(i)] diff --git a/widgets/HexStringViewer.gd b/widgets/HexStringViewer.gd index e304eaf..10d1df0 100644 --- a/widgets/HexStringViewer.gd +++ b/widgets/HexStringViewer.gd @@ -33,6 +33,10 @@ func _ready() -> void: ProjectSettings.set_setting('display/window/size/snap_to_integer', false) make_hexview(RomLoader.snes_bytes, 480) + var fontbox := TextureRect.new() + fontbox.texture = SpriteLoader.font_atlas_texture + add_child(fontbox) + func scroll_hexview(rows: int): var current_row: int = (-hexbox.rect_position.y)/4 var next_row = current_row + rows