查看“逆向:程序研究/AT1/字体例程”的源代码
←
逆向:程序研究/AT1/字体例程
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
AT1的字体例程目前仅研究了主显示用的主字体,对于其他(战斗字体)不甚了解。即使是主字体,目前也仅跟踪到一个缓冲区,对更细节的显示部分并不了解。 AT1的主字体,是24*24,4bpp的灰度位图字体。显示时,字体例程会对其缩放。 == 取字例程 == 主取字例程,首先将编码和一个缓存区中的编码数组(int32)里的编码比较。如果没有取到,那么就调用另一取字例程,从字库中取字,复制到缓冲区中。 从字库取字的例程大约工作方式如下: <pre> index = get_index(encode) ptr = texture_base + 24 * 24 * 0.5 * index # 24*24, 4bpp copy_to_cache(ptr) </pre> get_index是一个函数,它在字库描述字符串中比对传入的编码encode,并返回比对成功时的字库索引。 textrue_base是字库基址。这个基址会因字体的变化而变化。 === 字库索引获取例程 === <pre> ptr = texture_description i := 0 while *ptr <> 0 if *ptr = encoding & 0xff00: ptr += 1 if *ptr = encoding & 0xff: return i else: ptr += 1 end; else: ptr += 2 endif; endwhile; </pre> encoding是传入的要获取的字符编码。 texture_description是字库描述字符串的基址。 == 字体选择器 == 通过内部控制或控制符FD(D是一个十进制数字),可以改变字体。每个字体有独立的字库描述字符串,和字库地址。分别以两个数组存储(一般挨在一起)。
返回
逆向:程序研究/AT1/字体例程
。
导航菜单
个人工具
创建账号
登录
命名空间
逆向
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息