HOME> 国足世界杯夺冠> 视觉小说更换字体

视觉小说更换字体

最近开坑《With Ribbon》但发现并没有更换字体的选项,默认字体缺少简体中文字符,看得很难受

由于笔者不会win32,就偷了两个开源项目改字体

注意:笔者仅测试了一个游戏(引擎KIRIKIRI 2.32.1.426)可以成功更改字体,不保证对所有程序可用

更改字体使用以下工具:ysc3839/FontMod: Simple hook tool to change Win32 program font. (github.com)

加载dll使用以下工具:hasherezade/dll_injector: A simple commandline injector using classic DLL injection (github.com)

以《With Ribbon》为例

首先需要使游戏主程序加载更改字体用的dll,将FontMod.dll放入和游戏主程序相同目录下,使用dll_injector启动(需要对应32/64位)

.\dll_injector32.exe /dll .\FontMod.dll /target .\WithRibbon.exe

也可以按照dll仓库README操作,更改为提到的几个dll名称(笔者改成d3d9.dll不行,ddraw.dll可以,大概和游戏使用图形API有关)

第一次运行后会在同目录生成FontMod.yaml,在fonts选项下面更改成需要的字体,若游戏使用gdi之类的东西,修改配置会稍有区别,具体参见FontMod的git仓库

若不知道是什么字体,将配置文件的debug选项设为true,查看log后再进行尝试

log示例:

这个乱码的“俵俽 俹僑僔僢僋”实际上是Shift-JIS编码的日文“MS Pゴシック”强制使用GBK编码表示的结果。但在写配置文件时,这部分还是需要保持乱码,不然替换将不能生效。若操作系统语言不是简体中文,或者开启了系统实验性UTF-8支持,可能这里的字体名字也会有相应的变化。

笔者最终配置(部分):

fonts:

# MS Pゴシック:

俵俽 俹僑僔僢僋:

replace: 思源黑体 CN Medium

<<: *style

效果:

修改前

修改后

最后再贴一个PowerShell脚本(来源)获取OpenType字体信息(不过好像没什么用):

$folder = "C:\Windows\fonts\"

$objShell = New-Object -ComObject Shell.Application

$fileList = @()

$attrList = @{}

$details = ( "Title",

"Font style",

"Show/hide",

"Designed for",

"Category",

"Designer/foundry" ,

"Font Embeddability",

"Font type",

"Family",

"Date created",

"Date modified",

"Collection",

"Font file names",

"Font version"

)

#figure out what the possible metadata is

$objFolder = $objShell.namespace($folder)

for ($attr = 0 ; $attr -le 500; $attr++)

{

$attrName = $objFolder.getDetailsOf($objFolder.items, $attr)

if ( $attrName -and ( -not $attrList.Contains($attrName) ))

{

$attrList.add( $attrName, $attr )

}

}

#$attrList

#loop through all the fonts, and process

$objFolder = $objShell.namespace($folder)

foreach($file in $objFolder.items())

{

foreach( $attr in $details)

{

$attrValue = $objFolder.getDetailsOf($file, $attrList[$attr])

if ( $attrValue )

{

Add-Member -InputObject $file -MemberType NoteProperty -Name $attr -value $attrValue

}

}

$fileList += $file

write-verbose "Prcessing file number $($fileList.Count)"

}

$fileList | select $details | out-gridview

Views: 652