<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>憨憨羊の宇航鸽鸽</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://blog.sheepyuhang.top/</id>
  <link href="https://blog.sheepyuhang.top/" rel="alternate"/>
  <link href="https://blog.sheepyuhang.top/rss.xml" rel="self"/>
  <rights>All rights reserved 2026, 憨憨羊の宇航鸽鸽</rights>
  <title>宇航の鸽子窝</title>
  <updated>2026-04-10T05:54:02.000Z</updated>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="博客更新" scheme="https://blog.sheepyuhang.top/categories/%E5%8D%9A%E5%AE%A2%E6%9B%B4%E6%96%B0/"/>
    <category term="Blog" scheme="https://blog.sheepyuhang.top/tags/Blog/"/>
    <content>
      <![CDATA[<p>详细更多方式见<a href="https://2x.nz/posts/cf-fastip/">这篇文章</a><br>现在这篇是我目前实际设置的流程 供环境类似的参考</p><h2 id="前置环境"><a href="#前置环境" class="headerlink" title="前置环境"></a>前置环境</h2><p>网页搭建于 Github Pages<br>正在使用 Cloudflare DNS<br>需要 Cloudflare 绑定支付方式以激活 SaaS（不需要付费，100 个域名内是免费的）</p><p>若使用单个域名则不可把启用优选的域名设在根域名上（SaaS 不允许）<br>多个域名则没有这个问题<br>因为我只有一个域名所以把博客换到了 <a href="https://blog.sheepyuhang.top/">https://blog.sheepyuhang.top</a> 子域上<br>但是后面也会设置根域名和 <code>www</code> 的重定向 不怕相容性问题</p><p>文中的 <code>&lt;域名&gt;</code> 就替换为自己的二级域名就行，本站的即是 <code>sheepyuhang.top</code><br>后文中所有子域命名任意，没有限制，自己能认出就行<br><code>blog</code> 即为最终用于访问的子域</p><h2 id="设置-DNS-记录"><a href="#设置-DNS-记录" class="headerlink" title="设置 DNS 记录"></a>设置 DNS 记录</h2><p><code>cdn</code> 指向 Cloudflare 优选域名，可以前往<a href="https://cf.090227.xyz/">https://cf.090227.xyz</a>查看，亦或是直接把这个域名填进去 CNAME 也行，关闭 Proxy<br><code>direct</code> 指向网页源站，也就是 <code>&lt;用户名&gt;.github.io</code>，打开 Proxy<br><code>blog</code> 指向 <code>cdn.&lt;域名&gt;</code>，也就是上文设置的优选域名，关闭 Proxy<br><code>saas</code> 指向无任何要求，只需要打开 Proxy<br>以下记录用于重定向<br><code>@</code>（跟域名）指向无任何要求，只需要打开 Proxy<br><code>www</code> 同上，打开 Proxy</p><h2 id="设置-SaaS"><a href="#设置-SaaS" class="headerlink" title="设置 SaaS"></a>设置 SaaS</h2><p>打开「SSL&#x2F;TLS」下的「自定义主机名」<br>设置回退源为 <code>saas.&lt;域名&gt;</code>，保存<br>点击「添加自定义主机名」<br>「自定义主机名」为 <code>blog.&lt;域名&gt;</code><br>「证书验证方法」为「HTTP 验证」<br>「自定义源服务器」为 <code>direct.&lt;域名&gt;</code></p><h2 id="已起效"><a href="#已起效" class="headerlink" title="已起效"></a>已起效</h2><p>现在优选已起效<br>可以通过 <a href="https://www.itdog.cn/dns/">DNS 查询</a> 选择 CNAME 测试查看是否映射到了 <code>cdn.&lt;域名&gt;</code> 上</p><h2 id="设置重定向"><a href="#设置重定向" class="headerlink" title="设置重定向"></a>设置重定向</h2><p>为了保证以前的链接不出问题，就得加重定向<br>一共三个，It just works 所以就别挑啥了<br>均为 301 重定向</p><h3 id="www-转接-blog"><a href="#www-转接-blog" class="headerlink" title="www 转接 blog"></a><code>www</code> 转接 <code>blog</code></h3><p>「请求 URL」<code>https://www.*</code><br>「目标 URL」<code>https://blog.${1}</code></p><h3 id="根-转接-blog"><a href="#根-转接-blog" class="headerlink" title="根 转接 blog"></a>根 转接 <code>blog</code></h3><p>两个<br>「请求 URL」<code>https://&lt;域名&gt;*</code><br>「目标 URL」<code>https://blog.&lt;域名&gt;${1}</code><br>另一个是没有后缀时的转接，用自定义运算式<br>「完整 URL」「等于」<code>https://&lt;域名&gt;</code><br>「静态」<code>https://blog.&lt;域名&gt;</code></p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/blog/cf-redirect/</id>
    <link href="https://blog.sheepyuhang.top/post/blog/cf-redirect/"/>
    <published>2026-04-10T05:54:02.000Z</published>
    <summary>
      <![CDATA[<p>详细更多方式见<a href="https://2x.nz/posts/cf-fastip/">这篇文章</a><br>现在这篇是我目前实际设置的流程 供环境类似的参考</p>
<h2 id="前置环境"><a href="#前置环境" class="headerlink"]]>
    </summary>
    <title>基于单域名 + CF SaaS 的 CF CDN 优选</title>
    <updated>2026-04-10T05:54:02.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="博客更新" scheme="https://blog.sheepyuhang.top/categories/%E5%8D%9A%E5%AE%A2%E6%9B%B4%E6%96%B0/"/>
    <category term="Blog" scheme="https://blog.sheepyuhang.top/tags/Blog/"/>
    <content>
      <![CDATA[<p>在 Github Copilot 的帮助下给博客文章新增了修订历史功能<br>翻到最下面就能看到了<br>技术上来说是通过 <code>git log</code> 命令获取记录</p><p>也就 花了大概六个小时不到 嗯<br>被 Copilot 蠢笑了只能说 还贼慢</p><p>灵感来源是<a href="https://2x.nz/posts/posts-diff/">这篇文章</a><br>不过技术上应该是除了都用到 git 以外毫无关联了<br>我这里用的方法是直接在构建的时候就生成每个文章的 JSON 并放到构建结果中<br>然后进行解析来生成修订历史<br>所以就不需要用到难以除错的 Actions 了</p><p>以及，因为涉及到比较底层的修改，所以把 Stellar 换成了 submodule，方便修改<br>顺便也把非文章的某些页面去除了建立时间，只保留最后更新时间</p><p>下一步是把文章硬编码的最后更新时间去掉<br>改成直接从修订历史拿<br>但是写这个 post 的时候我这里已经是凌晨六点了<br>还不睡觉会死的哥 撤了 起床再说</p><p>2026.4.8 17:56<br>似乎 updated 相关处理不在主题里 而是在更底层的 hexo 里面<br>我不是很想动 hexo 的代码<br>而且 Copilot 免费用量也用光了（byd花光了就搞出来个修订历史 这集拉了）<br>所以说就之后再说吧 先继续手写</p><p>2026.4.8 18:02<br>才发现 <code>actions/checkout</code> 默认只会拉取最新 commit<br>得加上 <code>fetch-depth: 0</code>才行 </p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/blog/commit-history/</id>
    <link href="https://blog.sheepyuhang.top/post/blog/commit-history/"/>
    <published>2026-04-07T21:59:55.000Z</published>
    <summary>
      <![CDATA[<p>在 Github Copilot 的帮助下给博客文章新增了修订历史功能<br>翻到最下面就能看到了<br>技术上来说是通过 <code>git log</code> 命令获取记录</p>
<p>也就 花了大概六个小时不到 嗯<br>被 Copilot 蠢笑了只能说 还贼慢<]]>
    </summary>
    <title>新增了修订历史</title>
    <updated>2026-04-08T10:02:56.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="研究记录" scheme="https://blog.sheepyuhang.top/categories/%E7%A0%94%E7%A9%B6%E8%AE%B0%E5%BD%95/"/>
    <category term="Docker" scheme="https://blog.sheepyuhang.top/tags/Docker/"/>
    <category term="Weblate" scheme="https://blog.sheepyuhang.top/tags/Weblate/"/>
    <content>
      <![CDATA[<p>一个记录<br>因为需要一个译文处理的平台<br>所以决定研究一下本地部署 Weblate<br>byd给到我手上的译文是txt一行一条没有key<br>这我翻个毛</p><h2 id="安装-Docker-Desktop"><a href="#安装-Docker-Desktop" class="headerlink" title="安装 Docker Desktop"></a>安装 Docker Desktop</h2><p>需要提前开启 Hyper-V 并安装 WSL 2<br>从<a href="https://www.docker.com/products/docker-desktop/">官网</a>下载并安装 Docker Desktop<br>然后对应的 CLI 与 docker-compose 也会自动安装好</p><p>然后因为 GFW 的缘故，内地网路访问 Docker Hub 坠机了<br>所以需要进行一个镜像的设置<br>打开 Docker Desktop 的设置<br>选择「Docker Engine」<br>在最后一项的下一行加上</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&quot;registry-mirrors&quot;: [</span><br><span class="line">  &quot;&lt;镜像站域名1&gt;&quot;,</span><br><span class="line">  &quot;&lt;镜像站域名2&gt;&quot;</span><br><span class="line">]</span><br></pre></td></tr></table></figure><p>就行<br>加前最后一项最后的逗号别漏了<br>镜像站见<a href="https://blog.sheepyuhang.top/links/#%E9%95%9C%E5%83%8F%E7%AB%99">这里</a></p><h2 id="拉取镜像并部署"><a href="#拉取镜像并部署" class="headerlink" title="拉取镜像并部署"></a>拉取镜像并部署</h2><p>从 <a href="https://github.com/WeblateOrg/docker-compose">https://github.com/WeblateOrg/docker-compose</a> 拉取 Weblate 的官方镜像<br>然后直接命令行 cd 到拉取下来的仓库目录里<br>运行 <code>docker-compose up</code><br>就会自动拉取补全需要的镜像并部署容器<br>（一个 valkey 一个 postgres）<br>启动完成后就可以通过 <code>localhost:80</code> 进行访问了</p><h2 id="修改配置"><a href="#修改配置" class="headerlink" title="修改配置"></a>修改配置</h2><p>打开 Docker Desktop<br>选择左边的 Containers<br>进入「docker-compose」<br>将里面的三个服务都停止<br>然后进入 docker-compose 仓库的目录<br>根据<a href="https://docs.weblate.org/zh-cn/latest/admin/install/docker.html#docker-environment-variables">文档</a>来修改 <code>docker-compose.override.yml</code> 里的 <code>environment</code><br>完成后保存再运行 <code>docker-compose up</code> 即可</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/weblate/</id>
    <link href="https://blog.sheepyuhang.top/post/weblate/"/>
    <published>2026-01-07T17:37:30.000Z</published>
    <summary>
      <![CDATA[<p>一个记录<br>因为需要一个译文处理的平台<br>所以决定研究一下本地部署 Weblate<br>byd给到我手上的译文是txt一行一条没有key<br>这我翻个毛</p>
<h2 id="安装-Docker-Desktop"><a href="#安装-Docker-Des]]>
    </summary>
    <title>利用 Docker 在 Windows 本地部署 Weblate</title>
    <updated>2026-04-10T05:54:22.513Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="博客更新" scheme="https://blog.sheepyuhang.top/categories/%E5%8D%9A%E5%AE%A2%E6%9B%B4%E6%96%B0/"/>
    <category term="Blog" scheme="https://blog.sheepyuhang.top/tags/Blog/"/>
    <content>
      <![CDATA[<p>Nexmoe 看腻了<br>所以又花了两天换成了 <a href="https://xaoxuu.com/wiki/stellar/">Stellar</a><br>主要是这个笔记系统确实好用<br>然后去掉了之前为了 Nexmoe 而设置的所有文章的头图</p><p>然后 Stellar 不支援多个 rss<br>所以只保留了 Atom，而且把链接改为了<code>https://blog.sheepyuhang.top/rss.xml</code></p><p>理论上来说 Stellar 是支援多语言的<br>但是我实在没时间维护 + Stellar 似乎没有自带切换开关<br>所以还是算了 之前也没有做的说</p><p>然后因为弄主题 所以所有文章的最后编辑时间都变了<br>事已至此那就不管了</p><p>烦人的是 换成 Stellar 之后默认链接就自带斜杠<br>然后这样子本地运行没啥问题 会自动去掉斜杠<br>但是上传到 Github 之后带斜杠就会直接 404<br>现在的方案是把链接从 <code>post/文件名.html</code> 改成了 <code>post/文件名/index.html</code><br>然后 pretty_url 就会自动去掉 index.html 来修复这个问题</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/blog/stellar/</id>
    <link href="https://blog.sheepyuhang.top/post/blog/stellar/"/>
    <published>2025-10-15T05:10:05.000Z</published>
    <summary>
      <![CDATA[<p>Nexmoe 看腻了<br>所以又花了两天换成了 <a href="https://xaoxuu.com/wiki/stellar/">Stellar</a><br>主要是这个笔记系统确实好用<br>然后去掉了之前为了 Nexmoe 而设置的所有文章的头图</p>
<p>然]]>
    </summary>
    <title>本站更换为 Stellar 主题</title>
    <updated>2025-10-16T04:30:12.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="研究记录" scheme="https://blog.sheepyuhang.top/categories/%E7%A0%94%E7%A9%B6%E8%AE%B0%E5%BD%95/"/>
    <category term="汉化" scheme="https://blog.sheepyuhang.top/tags/%E6%B1%89%E5%8C%96/"/>
    <category term="DELTARUNE" scheme="https://blog.sheepyuhang.top/tags/DELTARUNE/"/>
    <category term="Unity" scheme="https://blog.sheepyuhang.top/tags/Unity/"/>
    <category term="DELTATRAVELER" scheme="https://blog.sheepyuhang.top/tags/DELTATRAVELER/"/>
    <content>
      <![CDATA[<p>终于是立项了<br>因为前期准备工作做的充足<br>所以立项后就没什么好写的了</p><h2 id="首个问题"><a href="#首个问题" class="headerlink" title="首个问题"></a>首个问题</h2><p>首先是敌人名字无法翻译<br>翻译后会在进入战斗时报错<br>检查代码后发现 敌人初始化中有两个变量<br>enemyName与fileName<br><img src="/./resources/images/dttvl/dttvl_enemyname/awake.png" alt="awake"><br>游戏中显示的敌人名字为enemyName</p><p>进一步检查C#代码后 可以看到这两个变量也分别用于拼接敌人资源路径的目录与文件名<br><img src="/./resources/images/dttvl/dttvl_enemyname/loadpath.png" alt="loadpath"><br>这种行为太唐了 拿敌人名当目录名<br>有空格有点号的 是真不怕出问题啊<br>而且明明可以同用一个fileName 却要分开用两个</p><h2 id="解决"><a href="#解决" class="headerlink" title="解决"></a>解决</h2><p>解决方法非常抽象<br>选择的方案是 把这些用到enemyName的地方 都改为fileName<br>然后enemyName照旧翻译</p><p>不过有一些enemyName与fileName不一致的敌人<br>所以需要先用<a href="https://github.com/UTCLC/DTTVL-Scripts/blob/main/EnemyNameFileNameDiffCheck.py">脚本</a>确认这些敌人的enemyName与fileName<br>这些需要单独处理</p><p>然后就可以用<a href="https://github.com/UTCLC/DTTVL-Scripts/blob/main/ReplaceEnemyName2FileName.py">脚本</a><br>批量把IL中的<code>battle/enemies/敌人名字</code>拼接 从enemyName改为fileName</p><p>以及需要处理前面那些不相同的敌人<br>用 UABEA 提取出资源路径<br>只需要提取出唯一一个ResourceManager资源即可<br>里面包含所有资源的路径<br>分别搜索所有<code>battle/enemies/敌人名字</code> 把敌人名字替换为和fileName一样即可</p><p>除了有个例外<br>遗迹初见的Flowey的enemyName是FloweyCutscene<br>而fileName和遗迹结尾的Flowey战斗同为flowey<br>决定是把这个敌人的fileName修改为floweycutscene<br>所以这个需要把文件名的flowey也改为floweycutscene</p><p>ResourceManager资源改好导入回去之后<br>还有DLL中也会直接加载一些资源<br>也要手动把这些资源的路径进行修改<br>完成后就可以了</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/dttvl/dttvl_enemyname/</id>
    <link href="https://blog.sheepyuhang.top/post/dttvl/dttvl_enemyname/"/>
    <published>2025-05-17T16:43:06.000Z</published>
    <summary>
      <![CDATA[<p>终于是立项了<br>因为前期准备工作做的充足<br>所以立项后就没什么好写的了</p>
<h2 id="首个问题"><a href="#首个问题" class="headerlink" title="首个问题"></a>首个问题</h2><p>首先是敌人名字无法翻译<br>]]>
    </summary>
    <title>DELTATRAVELER 汉化技术问题记录【1】</title>
    <updated>2025-05-17T16:43:06.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="博客更新" scheme="https://blog.sheepyuhang.top/categories/%E5%8D%9A%E5%AE%A2%E6%9B%B4%E6%96%B0/"/>
    <category term="Blog" scheme="https://blog.sheepyuhang.top/tags/Blog/"/>
    <content>
      <![CDATA[<p>其实就是看Aurora这个首页难受很久了<br>最新一篇会占满屏幕三分之一<br>以及Aurora这个意义不明的日期显示方式<br>中文月份加数字日期，然后逗号年份</p><p>花了点时间找了些别的主题<br>最后挑了这个Nexmoe<br>虽然确实没有Aurora这么完善<br>但是够用了</p><p>u1s1 这个Nexmoe 有个缺点是左右空隙有点大了<br>我平时看都开110%缩放了</p><p>估计啥时候我看到个更好的就又要换了</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/blog/nexmoe/</id>
    <link href="https://blog.sheepyuhang.top/post/blog/nexmoe/"/>
    <published>2025-05-01T21:16:05.000Z</published>
    <summary>
      <![CDATA[<p>其实就是看Aurora这个首页难受很久了<br>最新一篇会占满屏幕三分之一<br>以及Aurora这个意义不明的日期显示方式<br>中文月份加数字日期，然后逗号年份</p>
<p>花了点时间找了些别的主题<br>最后挑了这个Nexmoe<br>虽然确实没有Aurora这么完]]>
    </summary>
    <title>Aurora→Nexmoe</title>
    <updated>2025-05-01T21:16:05.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="研究记录" scheme="https://blog.sheepyuhang.top/categories/%E7%A0%94%E7%A9%B6%E8%AE%B0%E5%BD%95/"/>
    <category term="汉化" scheme="https://blog.sheepyuhang.top/tags/%E6%B1%89%E5%8C%96/"/>
    <category term="DELTARUNE" scheme="https://blog.sheepyuhang.top/tags/DELTARUNE/"/>
    <category term="Unity" scheme="https://blog.sheepyuhang.top/tags/Unity/"/>
    <category term="DELTATRAVELER" scheme="https://blog.sheepyuhang.top/tags/DELTATRAVELER/"/>
    <content>
      <![CDATA[<p>byd这还能有3的</p><h2 id="bytearray"><a href="#bytearray" class="headerlink" title="bytearray"></a>bytearray</h2><p>首先是解出来的 IL 里缺失了一些文本<br>搜了一下发现被弄成 bytearray 了<br><img src="/./resources/images/dttvl/dttvl_try3/before.png" alt="before"><br>这些文本的共同点就是都含有 <code>\\b</code><br>咱也不知道为啥要有这东西 意义不明<br>但是有了这玩意之后 ildasm 就会解成 bytearray<br>但是反过来 把解出来的 bytearray 改写成字符串是可以正常重新封成 DLL 的<br>就 很抽象</p><h2 id="DeepSeek-助我"><a href="#DeepSeek-助我" class="headerlink" title="DeepSeek 助我"></a>DeepSeek 助我</h2><p>这种带换行带缩进带注释插中间的玩意<br>不是不能写 但是太麻烦了<br>所以我决定进行一个科技改变生活<br>让 DeepSeek 给我写一个<br>嗯，然后就这样，<a href="https://github.com/UTCLC/ILBytearraysConvert/blob/master/ILBytearraysConvert.py">脚本</a><br><img src="/./resources/images/dttvl/dttvl_try3/after.png" alt="after"></p><h2 id="更新翻译文件"><a href="#更新翻译文件" class="headerlink" title="更新翻译文件"></a>更新翻译文件</h2><p>之前说过，翻译文件的 json 是使用行数作为 key 的<br>然后这样一改 就飞了<br>虽然目前还没有翻译<br>但是为了避免以后需要修改 dll<br>还是得想一个解决方法</p><p>然后，嗯，又是 ds，<a href="https://github.com/UTCLC/DTTVL-ILStringExtract/blob/main/UpdateLineAfterUpdated.py">脚本</a><br>我太不想进步了（x</p><p>不过要更新还是很麻烦<br>因为 weblate 的机制<br>不能删除原本的原文<br>就只能删掉部件重新添加<br>然后再把生成的译文重新塞回去<br>然后 contributors 就没了<br>毕竟是跟 key 的<br>所以还是希望用不上</p><h2 id="繁体"><a href="#繁体" class="headerlink" title="繁体"></a>繁体</h2><p>之前 uty 就想做繁体的<br>但是因为 gm 那个字体系统加字库太恶心了<br>所以就没做</p><p>这次是 ttf 字体<br>所以大概率是会做的<br>👍</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/dttvl/dttvl_try3/</id>
    <link href="https://blog.sheepyuhang.top/post/dttvl/dttvl_try3/"/>
    <published>2025-04-18T13:02:06.000Z</published>
    <summary>
      <![CDATA[<p>byd这还能有3的</p>
<h2 id="bytearray"><a href="#bytearray" class="headerlink" title="bytearray"></a>bytearray</h2><p>首先是解出来的 IL 里缺失了一些文本<br>搜了]]>
    </summary>
    <title>DELTATRAVELER 汉化初尝试³</title>
    <updated>2025-04-18T13:02:06.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="研究记录" scheme="https://blog.sheepyuhang.top/categories/%E7%A0%94%E7%A9%B6%E8%AE%B0%E5%BD%95/"/>
    <category term="汉化" scheme="https://blog.sheepyuhang.top/tags/%E6%B1%89%E5%8C%96/"/>
    <category term="DELTARUNE" scheme="https://blog.sheepyuhang.top/tags/DELTARUNE/"/>
    <category term="Unity" scheme="https://blog.sheepyuhang.top/tags/Unity/"/>
    <category term="DELTATRAVELER" scheme="https://blog.sheepyuhang.top/tags/DELTATRAVELER/"/>
    <content>
      <![CDATA[<p>经过了熬夜一个晚上的研究<br>算是把工作流弄好了</p><h2 id="文本"><a href="#文本" class="headerlink" title="文本"></a>文本</h2><p>用 UABEA Dump 出 MonoBehaviour 的 json<br>然后用<a href="https://github.com/UTCLC/DTTVL-Scripts/blob/main/UABEAJsonTextCollect.py">脚本</a>来从 json 中提取所有的<code>m_Text</code> <code>lines</code> <code>phrases</code><br>生成的 json 上传到 Weblate 作为英文即可<br>这些文本修改了基本不会出现影响游戏的情况<br>也就不用再加筛选算法了</p><p>用 <code>ildasm.exe</code> 打开 DLL 并 Dump 出 IL<br>然后用<a href="https://github.com/UTCLC/DTTVL-Scripts/blob/main/ILStringsExtract.py">脚本</a>来从 IL 中提取所有的字符串<br>脚本会自动按照算法筛选分类出五类文本</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">asterisk.json：含有「* 」的，基本可以确定是正常对话文本，可以无脑翻译</span><br><span class="line">slash_underline.json：含有斜杠或下划线的，基本可以确定不需要翻译</span><br><span class="line">space.json：含有空格的，基本都是菜单选项或者对话的后半段，可以看着来翻译</span><br><span class="line">upper.json：含有大写的</span><br><span class="line">others.json：剩下的</span><br></pre></td></tr></table></figure><p>把这些 json 分别上传到 Weblate 作为英文即可</p><h3 id="更新文本"><a href="#更新文本" class="headerlink" title="更新文本"></a>更新文本</h3><p>从 Weblate 上爬取文本<br>然后同理，用前面的两个脚本把文本分别封回 MonoBehaviour 和 IL 里<br>再用 <code>ilasm.exe</code> 和 UABEA 把它们封回对应的资源与 DLL 后就可以启动了</p><h2 id="字体"><a href="#字体" class="headerlink" title="字体"></a>字体</h2><p>和 UTMT 类似，需要有一个从现成的 Unity 游戏用 UABEA 拔出来的字体<br>所以被迫装一个 Unity<br>UABEA 只能导出二进制 dat 资源<br>用 AssetStudioMod 可以导出 ttf&#x2F;otf 字体<br>导出来的字体文件然后再用 FontCreator 进行一个中英合并<br>然后导入 Unity 就行</p><p>Gamejolt 上的最新版 v3.0.10 用的是 2018.3.14f1<br>就用这个版本开了个<a href="https://github.com/UTCLC/DTTVL-FontsUnityProj">项目</a>导入了字体<br>后来经过提醒发现有测试版 v3.1.0p4<br>这个版本用的是 Unity 6<br>只能说还好我手上的是国际版的 Unity Hub 不然真没辙<br>不过目前测试用 2018.3.14f1 生成的字体还能用<br>已经把项目升级到了 Unity 6<br>下次就直接用了</p><h3 id="字体尺寸问题"><a href="#字体尺寸问题" class="headerlink" title="字体尺寸问题"></a>字体尺寸问题</h3><p>Deltatraverler 是按照 Determination 字体的尺寸加载的<br>如果使用 DTM+其它中文字体 的融合字体方案就会导致中文字体尺寸不合而变形<br><img src="/./resources/images/dttvl/dttvl_try2/options.png" alt="options"></p><p>之前参与过 UTY 项目的晓晓也帮忙尝试了重新编排一次英文使得中英尺寸相同的方案<br>然后结果是<br>不仅中文没好 英文也一起变形了<br><img src="/./resources/images/dttvl/dttvl_try2/new_font.png" alt="new_font"><br>(注意那个百分号)</p><p>所以，嗯，目前这个问题还没解决<br>只能先用着前面那个英文正常的了</p><h2 id="分辨异常"><a href="#分辨异常" class="headerlink" title="分辨异常"></a>分辨异常</h2><p>如果是游戏打不开或者闪退或者卡死或者弹出 Unity 的 CrashHandler<br>那么就是资源导炸了 需要回档重新导<br>如果是进入 Deltatraveler 自己的 ExceptionHandler<br>那么就是 DLL 出问题了 很大概率是某个资源名被翻译了</p><h2 id="v3-1-0p4-也干了"><a href="#v3-1-0p4-也干了" class="headerlink" title="v3.1.0p4 也干了"></a>v3.1.0p4 也干了</h2><p>更新到 v3.1.0p4 之后一个莫名其妙的 Bug<br>如果按窗口的 X 关闭游戏而不是长按 Esc<br>会导致卡一个 Deltatraverler 的进程在后台<br>然后就无法再打开了<br>要用任务管理器手动杀掉<br>所以可能发布的时候得在游戏目录里加一个 bat 来一键杀除</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/dttvl/dttvl_try2/</id>
    <link href="https://blog.sheepyuhang.top/post/dttvl/dttvl_try2/"/>
    <published>2025-04-05T19:14:02.000Z</published>
    <summary>
      <![CDATA[<p>经过了熬夜一个晚上的研究<br>算是把工作流弄好了</p>
<h2 id="文本"><a href="#文本" class="headerlink" title="文本"></a>文本</h2><p>用 UABEA Dump 出 MonoBehaviour 的 json<b]]>
    </summary>
    <title>DELTATRAVELER 汉化初尝试²</title>
    <updated>2025-04-05T19:14:02.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="研究记录" scheme="https://blog.sheepyuhang.top/categories/%E7%A0%94%E7%A9%B6%E8%AE%B0%E5%BD%95/"/>
    <category term="汉化" scheme="https://blog.sheepyuhang.top/tags/%E6%B1%89%E5%8C%96/"/>
    <category term="DELTARUNE" scheme="https://blog.sheepyuhang.top/tags/DELTARUNE/"/>
    <category term="Unity" scheme="https://blog.sheepyuhang.top/tags/Unity/"/>
    <category term="DELTATRAVELER" scheme="https://blog.sheepyuhang.top/tags/DELTATRAVELER/"/>
    <content>
      <![CDATA[<p>Undertale Yellow 的项目也算是结束了<br>后续只要别再出什么 Bug 应该也就不用再维护了<br>现在总是只想做大项目<br>嗯 然后就想把先尝试把 Deltatraveler 弄一下<br>这也是第一次研究 Unity 游戏逆向<br>之前最多也就是用 AssetStudioMod 拆些素材之类的</p><h2 id="分散的文本"><a href="#分散的文本" class="headerlink" title="分散的文本"></a>分散的文本</h2><p>首先是 得益于 Unity 这坨系统<br>文本散落在的不同的地方<br>需要通过代码操作的文本在编译在了<code>DELTATRAVELER_Data\Managed\Assembly-CSharp.dll</code>里<br>静态的文本和对话散落在资源文件里面<br>Unity 的 level 就有点像 GameMaker 的 room<br>但是 level 是直接散落在游戏目录里的</p><h2 id="Assembly-CSharp-dll"><a href="#Assembly-CSharp-dll" class="headerlink" title="Assembly-CSharp.dll"></a>Assembly-CSharp.dll</h2><p>这个 DLL 也是游戏的代码所在地<br>比起反编译为 C# 这种容易炸的方法<br>更合适的办法其实是解成IL再用工具封回去<br>.NET SDK中本就有这个工具<br>dll → IL <code>&quot;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\ildasm.exe&quot;</code><br>打开 ildasm.exe 后选择 File→Open<br>打开 DLL 文件 在选择 File→Dump<br>就可以得到IL文件了<br>然后用<a href="https://github.com/UTCLC/StringsExtract/blob/main/StringsExtract.py">脚本</a>爬取所有的字符串出来即可<br>后续再加一下和uty一样的条件限制 比如带空格之类的就可以了<br>汉化好后用前面的脚本把字符串塞回IL里<br>IL → dll <code>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe</code><br>用命令行把IL和res用参数赋给 ilasm.exe 就可以重新生成一个dll了<br><code>&quot;C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe&quot; /dll Assembly-CSharp.il Assembly-CSharp.res</code></p><h3 id="秘之-inf"><a href="#秘之-inf" class="headerlink" title="秘之 inf"></a>秘之 inf</h3><p>解出来的IL里出现了几个<br><code>ldc.r4     inf</code><br>会引起 ilasm 报错<br>只需要把这里的 inf 换成 0x7F800000 即可<br>也不知道为啥能解出来个 inf</p><h2 id="资源文件"><a href="#资源文件" class="headerlink" title="资源文件"></a>资源文件</h2><p>可以使用 UABEA 来打开所有的资源文件</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">当然如果你只是想改某一个地方的文本只要你能找到那是哪个文件也行</span><br><span class="line">可以用 AssetStudioMod 打开整个目录后右键 Show original file</span><br><span class="line">UABEA 多文件加载速度是真的慢</span><br></pre></td></tr></table></figure><p>然后筛选 MonoBehaviour 类型<br>用 UABEA 全选并全部 Dump 为 UABEA Json 文件即可<br><img src="/./resources/images/dttvl/dttvl_try/UABEA.png" alt="UABEA"><br>目前发现了会出现的三种类型的文本<br><code>m_Text</code> 是单个文本<br><code>lines</code>与<code>phrases</code> 是对话组<br>用<a href="https://github.com/UTCLC/DTTVL-Scripts/blob/main/UABEAJsonTextCollect.py">脚本</a>把这些key对应的文本从json里提取出来即可<br>和前面的 DLL 同理，后续加一下条件限制就可以了<br>汉化好后用前面的脚本重新生成这些json<br>然后用 UABEA 导入 Dump<br>保存就可以了</p><h2 id="字体"><a href="#字体" class="headerlink" title="字体"></a>字体</h2><p>还没整出来<br>等下次吧</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/dttvl/dttvl_try/</id>
    <link href="https://blog.sheepyuhang.top/post/dttvl/dttvl_try/"/>
    <published>2025-04-04T16:07:45.000Z</published>
    <summary>
      <![CDATA[<p>Undertale Yellow 的项目也算是结束了<br>后续只要别再出什么 Bug 应该也就不用再维护了<br>现在总是只想做大项目<br>嗯 然后就想把先尝试把 Deltatraveler 弄一下<br>这也是第一次研究 Unity 游戏逆向<br>之前最多也就是用]]>
    </summary>
    <title>DELTATRAVELER 汉化初尝试</title>
    <updated>2025-04-04T16:07:45.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="博客更新" scheme="https://blog.sheepyuhang.top/categories/%E5%8D%9A%E5%AE%A2%E6%9B%B4%E6%96%B0/"/>
    <category term="Blog" scheme="https://blog.sheepyuhang.top/tags/Blog/"/>
    <content>
      <![CDATA[<p>因为最近开始用上了RSS Feed来阅读信息流<br>所以就给我的Blog也加上了<br>Hexo官方就有这个插件 直接装上就能用了<br>Atom和RSS 2.0都开了<br>Atom：<code>https://blog.sheepyuhang.top/atom.xml</code><br>RSS 2.0：<code>https://blog.sheepyuhang.top/rss2.xml</code><br>我看什么时候往网站下方加个rss图标</p><p>2024&#x2F;8&#x2F;18 01:27<br>文档没找到 所以加在菜单的「关于本站」下面了</p><p>2025&#x2F;5&#x2F;2 16:53<br>因为换到Nexmoe了就放在了左侧的social里</p><p>2025&#x2F;10&#x2F;15 13:10<br>更换到了Stellar 然后这个不支援多个rss<br>所以只保留了Atom，而且把链接改为了<code>https://blog.sheepyuhang.top/rss.xml</code></p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/blog/rss/</id>
    <link href="https://blog.sheepyuhang.top/post/blog/rss/"/>
    <published>2024-08-17T17:15:05.000Z</published>
    <summary>
      <![CDATA[<p>因为最近开始用上了RSS Feed来阅读信息流<br>所以就给我的Blog也加上了<br>Hexo官方就有这个插件 直接装上就能用了<br>Atom和RSS 2.0都开了<br>Atom：<code>https://blog.sheepyuhang.top/atom.xml]]>
    </summary>
    <title>新增RSS Feed</title>
    <updated>2025-10-15T05:10:08.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="研究记录" scheme="https://blog.sheepyuhang.top/categories/%E7%A0%94%E7%A9%B6%E8%AE%B0%E5%BD%95/"/>
    <category term="UNDERTALE" scheme="https://blog.sheepyuhang.top/tags/UNDERTALE/"/>
    <category term="Undertale Yellow" scheme="https://blog.sheepyuhang.top/tags/Undertale-Yellow/"/>
    <category term="汉化" scheme="https://blog.sheepyuhang.top/tags/%E6%B1%89%E5%8C%96/"/>
    <category term="GameMaker" scheme="https://blog.sheepyuhang.top/tags/GameMaker/"/>
    <content>
      <![CDATA[<p>久违了各位，<br>最近因为实在太忙 所以没有出什么力<br>久违地打开待解决清单，首先就是这个<br><code>非屠杀线使用回血物品旁白字叠在一起</code>的问题<br><img src="/./resources/images/uty/item_use/cover.png" alt="就像这样"></p><h1 id="寻踪"><a href="#寻踪" class="headerlink" title="寻踪"></a>寻踪</h1><p>搜索文本找到函数<code>scr_item_use_text_yellow</code><br>其中定义了变量<code>con_keep_previous</code><br>当这个变量为<code>true</code>时在恢复HP文本前面添加换行<br>以及变量<code>con_message_number</code>记录对话数量<br><img src="/./resources/images/uty/item_use/code.png" alt="code"></p><p>全局搜索<code>scr_item_use_text_yellow</code><br>找到物体<code>obj_dialogue_battle_action_selected_item</code><br>Step事件 在文本打完时检测是否符合要求 并自动触发计时器0<br><img src="/./resources/images/uty/item_use/code_use.png" alt="code_use"></p><p>计时器0会自动进行回血 并进入下一句文本（也就是显示恢复HP）<br><img src="/./resources/images/uty/item_use/healing.png" alt="healing"></p><p>Draw事件 当文本为最后一句 且<code>con_keep_previous</code>为true时<br>另外执行一个函数<code>scr_draw_text_effect_twitchy_textbox_battle_item_use</code><br><img src="/./resources/images/uty/item_use/draw.png" alt="draw"></p><p>这个函数会保留最后一句文本 并直接把恢复HP的文本叠在一起<br>是的没错 无脑叠在一起 而不是放在文本最后</p><h1 id="修复"><a href="#修复" class="headerlink" title="修复"></a>修复</h1><p>其实很简单 把这段执行<code>scr_draw_text_effect_twitchy_textbox_battle_item_use</code>的删掉<br>然后再回到<code>scr_item_use_text_yellow</code><br>把自动添加的换行删掉即可</p><p>看似很简单 但是因为这个有病逻辑 害我找一下午<br>神经</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/uty/item_use/</id>
    <link href="https://blog.sheepyuhang.top/post/uty/item_use/"/>
    <published>2024-08-05T12:29:03.000Z</published>
    <summary>
      <![CDATA[<p>久违了各位，<br>最近因为实在太忙 所以没有出什么力<br>久违地打开待解决清单，首先就是这个<br><code>非屠杀线使用回血物品旁白字叠在一起</code>的问题<br><img src="/./resources/images/uty/item_use/cover]]>
    </summary>
    <title>Undertale Yellow 汉化技术问题记录【5】</title>
    <updated>2024-08-05T12:29:03.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="研究记录" scheme="https://blog.sheepyuhang.top/categories/%E7%A0%94%E7%A9%B6%E8%AE%B0%E5%BD%95/"/>
    <category term="UNDERTALE" scheme="https://blog.sheepyuhang.top/tags/UNDERTALE/"/>
    <category term="Undertale Yellow" scheme="https://blog.sheepyuhang.top/tags/Undertale-Yellow/"/>
    <category term="汉化" scheme="https://blog.sheepyuhang.top/tags/%E6%B1%89%E5%8C%96/"/>
    <category term="GameMaker" scheme="https://blog.sheepyuhang.top/tags/GameMaker/"/>
    <content>
      <![CDATA[<p>之前说过uty的彩色打字机非常弱智<br>是多个打字机叠在一起<br>然而打字进度对不上这个问题还没解决 又出来了新问题</p><h2 id="细说"><a href="#细说" class="headerlink" title="细说"></a>细说</h2><p>so，说是多个打字机，其实也不尽然<br>其实是一个主打字机和多个子打字机<br>子打字机的打字进度和字符数量和主打字机共享<br>没错，发现问题了吗<br>一旦子打字机的字符数量超过主打字机<br>那么子打字机超出去的部分就不会被打出来<br><img src="/./resources/images/uty/dialogue/cut.png" alt="cut"></p><h2 id="解决？"><a href="#解决？" class="headerlink" title="解决？"></a>解决？</h2><p>uty这个打字机真的看得我小脑肿大 大脑萎缩 脑干打结<br>打字机本身的文本是一维数组 而颜色打字机的文本是二维数组（因为要分颜色 不同颜色不是同一个打字机）<br>然后就因为分数组这个问题 导致我不能轻易地把字符数量改为max函数取打字机的最大值</p><p>最后是非常弱智的解决方法：直接把主打字机的打字进度转换为百分比给颜色打字机用<br><img src="/./resources/images/uty/dialogue/resolve.png" alt="resolve"><br>当然这样的后果是非常大概率会导致打字机速度不统一<br>但是既然之前都不同步了 就不管了<br><img src="/./resources/images/uty/dialogue/resolved.png" alt="resolved"><br>嗯 就这样罢</p><h2 id="解决"><a href="#解决" class="headerlink" title="解决"></a>解决</h2><p>然后 嗯 bug了<br>疑似是utmt反编译时吞了码 然后编译少了码导致的<br>首先是choice的灵魂持续出现在底下<br><img src="/./resources/images/uty/dialogue/soul.png" alt="soul"></p><p>然后还有choice出现过后choice的选项不会消失 一直显示<br><img src="/./resources/images/uty/dialogue/choice.png" alt="choice"></p><p>最后解决是 在data里找到了一个空的if<br><img src="/./resources/images/uty/dialogue/if.png" alt="if"><br>而且后面正好跟着的就是choice相关的代码<br>所以就补了个else上去<br><img src="/./resources/images/uty/dialogue/else.png" alt="else"></p><p>然后就 真修好了 嗯</p><h2 id="题外话"><a href="#题外话" class="headerlink" title="题外话"></a>题外话</h2><p>之前在翻data的时候发现了些震撼人心的东西<br><img src="/./resources/images/uty/dialogue/r1.png" alt="r1"><img src="/./resources/images/uty/dialogue/r2.png" alt="r2"><img src="/./resources/images/uty/dialogue/r3.png" alt="r3"><br><img src="/./resources/images/uty/dialogue/rr.png" alt="rr"><br>非常弱智的随机对话系统<br>Powered with <code>else if</code>™<br>他们甚至不肯用<code>switch</code></p><p>但是<br><img src="/./resources/images/uty/dialogue/rrrr.png" alt="rrrr"><br>你这不是会用<code>asset_get_index</code>吗<br>那你前面怎么不用<br>只能说跨越7年的项目 就这个b样子了<br>uty团队的程序员实力也参差不齐<br>代码看得我脑壳疼</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/uty/dialogue/</id>
    <link href="https://blog.sheepyuhang.top/post/uty/dialogue/"/>
    <published>2024-02-11T14:10:43.000Z</published>
    <summary>
      <![CDATA[<p>之前说过uty的彩色打字机非常弱智<br>是多个打字机叠在一起<br>然而打字进度对不上这个问题还没解决 又出来了新问题</p>
<h2 id="细说"><a href="#细说" class="headerlink" title="细说"></a>细说</h2><p>so]]>
    </summary>
    <title>Undertale Yellow 汉化技术问题记录【4】</title>
    <updated>2024-02-11T14:10:43.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="博客更新" scheme="https://blog.sheepyuhang.top/categories/%E5%8D%9A%E5%AE%A2%E6%9B%B4%E6%96%B0/"/>
    <category term="Blog" scheme="https://blog.sheepyuhang.top/tags/Blog/"/>
    <content>
      <![CDATA[<p>之前是一直不想搞域名和CDN的<br>毕竟不管怎么样域名还是要钱的<br>而且我懒得折腾 就一直没搞<br>然后我昨天看到说Namesilo的域名价格很便宜<br>我就上去看了下<br>诶我草 .top域名仅1.88美刀&#x2F;年<br>然后就 顺手把Cloudflare也整了 嗯</p><h2 id="Namesilo域名"><a href="#Namesilo域名" class="headerlink" title="Namesilo域名"></a>Namesilo域名</h2><p>在Namesilo注册好账号<br>然后买了个<code>sheepyuhang.top</code><br>用1美刀券减成了1美刀首年（我也不知道为啥实际减了0.88美刀<br>嗯 就很值<br>一开始用Paypal付款 付了三次<br>每次都是在Paypal按了付款 然后转了好几分钟<br>然后窗口自己关掉 没有任何反应<br>然后我用支付宝就支付成功了<br>难绷</p><p>因为要用Cloudflare弄CDN<br>所以Namesilo这边不用改DNS<br>不过为了测试 我还是弄了下<br>打开Domain Manage<br>点开我的域名 点开<code>DNS Records</code><br>设置一个CNAME类型 填<code>www</code>与我Blog本来的github.io域名<br>再把自带的空白hostname的A类型的地址改成原来github.io域名ping出来的ip即可</p><p>在Github仓库的Settings→Pages<br>把Custom Domain填上就可以了<br>嘛 理论上是这样 但是当时不管用<br>因为我要弄CF 所以就没管</p><h2 id="Cloudflare-CDN"><a href="#Cloudflare-CDN" class="headerlink" title="Cloudflare CDN"></a>Cloudflare CDN</h2><p>打开Cloudflare 新建一个站点<br>设置好域名<br>DNS和Namesilo那个一样<br>但是这次 空白的A类型可以换成CNAME类型<br>内容同样填成github.io那个域名 名称填@即可<br>设置好后 把给出的名称服务器填进Namesilo的NameServers里就可以了<br>接着就是等待Cloudflare接管域名</p><p>嘛 实际后续过程还是挺挫折的<br>Github那边不知道发什么巅<br>一直把我github.io的域名跳转到我自己的域名<br>即使我把Custom Domain删掉 仍然是这样</p><p>其实只要<code>等</code>就可以了<br>过了一会我再去测试<br>哦豁 ERR_TOO_MANY_REDIRECTS<br>不过这个Stack Overflow上就有解<br>在Cloudflare把<code>SSL/TLS 加密模式</code>改成<code>完全</code>即可</p><h2 id="结束"><a href="#结束" class="headerlink" title="结束"></a>结束</h2><p>然后，就没了<br>并不难搞其实</p><p>然而我去测试了下<br>上了CDN的速度甚至不如直连速度<br><img src="/./resources/images/cloudflare/cloudflare.png" alt="Cloudflare"><br>Cloudflare<br><img src="/./resources/images/cloudflare/github.png" alt="直连"><br>github.io直连</p><p>那我费那么大劲弄CF干嘛<br>还不如上阿里云CDN 麻了</p><h2 id="后续"><a href="#后续" class="headerlink" title="后续"></a>后续</h2><p>2024-1-28 我又换成了阿里云CDN<br>但是目前测试阿里云CDN仍然没有直连的速度好<br>太奇怪了<br>2024-6-30 因为闲的所以又换回Cloudflare CDN了</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/blog/cloudflare/</id>
    <link href="https://blog.sheepyuhang.top/post/blog/cloudflare/"/>
    <published>2024-01-17T17:10:32.000Z</published>
    <summary>
      <![CDATA[<p>之前是一直不想搞域名和CDN的<br>毕竟不管怎么样域名还是要钱的<br>而且我懒得折腾 就一直没搞<br>然后我昨天看到说Namesilo的域名价格很便宜<br>我就上去看了下<br>诶我草 .top域名仅1.88美刀&#x2F;年<br>然后就 顺手把Cloudflar]]>
    </summary>
    <title>Namesilo域名+CDN加速</title>
    <updated>2024-06-30T12:54:20.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="研究记录" scheme="https://blog.sheepyuhang.top/categories/%E7%A0%94%E7%A9%B6%E8%AE%B0%E5%BD%95/"/>
    <category term="Weblate" scheme="https://blog.sheepyuhang.top/tags/Weblate/"/>
    <category term="UNDERTALE" scheme="https://blog.sheepyuhang.top/tags/UNDERTALE/"/>
    <category term="Undertale Yellow" scheme="https://blog.sheepyuhang.top/tags/Undertale-Yellow/"/>
    <category term="汉化" scheme="https://blog.sheepyuhang.top/tags/%E6%B1%89%E5%8C%96/"/>
    <category term="Crowdin" scheme="https://blog.sheepyuhang.top/tags/Crowdin/"/>
    <category term="GameMaker" scheme="https://blog.sheepyuhang.top/tags/GameMaker/"/>
    <content>
      <![CDATA[<p>2023年12月22日 我的Crowdin账户因为超过限额而被暂停<br><img src="/./resources/images/uty/weblate/account_paused.png" alt="account_paused"><br><img src="/./resources/images/uty/weblate/project_paused.png" alt="project_paused"><br>Crowdin规定免费账户最多可以托管60000个单词<br>而Undertale: Yellow光星号开头的句子就包含超过70000个单词<br>所以，嗯，再次搬迁</p><h2 id="Weblate架设"><a href="#Weblate架设" class="headerlink" title="Weblate架设"></a>Weblate架设</h2><p>我本想用阿里云自己架设一个Weblate<br>等我刚装好宝塔面板的时候<br>天机已经把他手上本来有的Weblate移植过来用了<br>所以 本来这里能写不少内容的<br>乐<br>也不麻烦其实 Weblate文档写的很齐全<br>用宝塔面板安装Docker 走Docker的流程<br>或者直接装Ubuntu 走Ubuntu的流程也可以</p><h2 id="移植strings"><a href="#移植strings" class="headerlink" title="移植strings"></a>移植strings</h2><p>首先是 Weblate只支持分段格式<br><img src="/./resources/images/uty/weblate/weblate_format.png" alt="weblate_format"><br>这很好解决 导出时手动给每个换行后面多加个换行<br>（直接Ctrl+F把换行替换为换行换行）<br>导入就手动修改一个脚本<br>把我之前写的ImportAllStringsAsterisk改一改即可<br>虽然实际方法非常弱智</p><details><summary>WeblateImportAllStringsAsterisk.csx</summary><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br></pre></td><td class="code"><pre><span class="line">using System.Text;</span><br><span class="line">using System;</span><br><span class="line">using System.IO;</span><br><span class="line">using System.Threading;</span><br><span class="line">using System.Threading.Tasks;</span><br><span class="line">using UndertaleModLib.Util;</span><br><span class="line"></span><br><span class="line">EnsureDataLoaded();</span><br><span class="line"></span><br><span class="line">if (Data.ToolInfo.ProfileMode)</span><br><span class="line">&#123;</span><br><span class="line">    ScriptMessage(&quot;This script will not modify your existing edited GML code registered in your profile. Please use GML editing for text editing, or a script like FindAndReplace, for editing strings within these code entries.&quot;);</span><br><span class="line">&#125;</span><br><span class="line">else</span><br><span class="line">&#123;</span><br><span class="line">    if (!(ScriptQuestion(&quot;This script will recompile all code entries in your profile (if they exist) to the default decompiled output. Continue?&quot;)))</span><br><span class="line">        return;</span><br><span class="line">    foreach (UndertaleCode c in Data.Code)</span><br><span class="line">        NukeProfileGML(c.Name.Content);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">string importFolder = PromptChooseDirectory();</span><br><span class="line">if (importFolder is null)</span><br><span class="line">    throw new ScriptException(&quot;The import folder was not set.&quot;);</span><br><span class="line"></span><br><span class="line">// Overwrite Check One</span><br><span class="line">string stringsPath = Path.Combine(importFolder, &quot;strings.txt&quot;);</span><br><span class="line">if (!File.Exists(stringsPath))</span><br><span class="line">&#123;</span><br><span class="line">    ScriptError(&quot;No &#x27;strings.txt&#x27; file exists!&quot;, &quot;Error&quot;);</span><br><span class="line">    return;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">var file = File.ReadAllText(stringsPath);</span><br><span class="line">file=file.Replace(&quot;\r\n\r\n&quot;, &quot;\r\n&quot;);</span><br><span class="line">file=file.Replace(&quot;\r\r&quot;, &quot;\r&quot;);</span><br><span class="line">file=file.Replace(&quot;\n\n&quot;, &quot;\n&quot;);</span><br><span class="line">var file_edited=File.CreateText(stringsPath.Replace(&quot;strings.txt&quot;, &quot;strings_edited.txt&quot;));</span><br><span class="line">file_edited.Write(file);</span><br><span class="line">file_edited.Close();</span><br><span class="line"></span><br><span class="line">using (StreamReader reader = new StreamReader(stringsPath.Replace(&quot;strings.txt&quot;, &quot;strings_edited.txt&quot;)))</span><br><span class="line">&#123;</span><br><span class="line">    foreach (var str in Data.Strings)</span><br><span class="line">    &#123;</span><br><span class="line">        if (str.Content.Contains(&quot;\n&quot;) || str.Content.Contains(&quot;\r&quot;))</span><br><span class="line">            continue;</span><br><span class="line">        if (str.Content.StartsWith(&quot;*  &quot;))</span><br><span class="line">            str.Content=reader.ReadLine();</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure></details><p>本来天机写的是在<code>str.Content=reader.ReadLine()</code>之后再单独执行一次<code>reader.ReadLine()</code><br>but don’t know why, it just won’t work, and it will break <code>data.win</code><br>所以我就用了一个非常简单粗暴且弱智的方法<br>直接修改原来的txt保存为另一个txt 然后读取保存出来的txt<br>不管它有多弱智，it just works<br>能跑就行 嗯</p><h2 id="导入原文与译文"><a href="#导入原文与译文" class="headerlink" title="导入原文与译文"></a>导入原文与译文</h2><p>接着就是 我从Crowdin下载译文与原文下来<br>然后手动加上分段换行 再导入Weblate<br>英文导入没问题<br>但是Weblate不支持txt对照 译文导入没效果<br>但是这里又是天机处理的 我把分好段对应好的原文译文txt给了天机<br>天机再把译文进行处理再上传Weblate<br>所以这里又没东西写了（</p><h2 id="没了"><a href="#没了" class="headerlink" title="没了"></a>没了</h2><p>对 Weblate问题真的不算多<br>不像SbCrowdin 导入的时候问题一堆 还卡 还贵<br>应该是不会再出问题了（</p><h2 id="多灾多难の汉化项目"><a href="#多灾多难の汉化项目" class="headerlink" title="多灾多难の汉化项目"></a>多灾多难の汉化项目</h2><p>2023&#x2F;12&#x2F;10 立项目<br>2023&#x2F;12&#x2F;13 金山文档转Crowdin<br>2023&#x2F;12&#x2F;24 Crowdin转Weblate<br>不能说是多灾多难，只能说是命途多舛<br>希望是别再给我整这么多事（</p><h2 id="圣诞快乐"><a href="#圣诞快乐" class="headerlink" title="圣诞快乐"></a>圣诞快乐</h2><p>哦对了，祝各位圣诞快乐<br>Merry Christmas.</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/uty/weblate/</id>
    <link href="https://blog.sheepyuhang.top/post/uty/weblate/"/>
    <published>2023-12-25T11:06:24.000Z</published>
    <summary>
      <![CDATA[<p>2023年12月22日 我的Crowdin账户因为超过限额而被暂停<br><img src="/./resources/images/uty/weblate/account_paused.png" alt="account_paused"><br><img src="/./]]>
    </summary>
    <title>Undertale Yellow 汉化技术问题记录【3】</title>
    <updated>2023-12-25T11:06:24.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="研究记录" scheme="https://blog.sheepyuhang.top/categories/%E7%A0%94%E7%A9%B6%E8%AE%B0%E5%BD%95/"/>
    <category term="UNDERTALE" scheme="https://blog.sheepyuhang.top/tags/UNDERTALE/"/>
    <category term="Undertale Yellow" scheme="https://blog.sheepyuhang.top/tags/Undertale-Yellow/"/>
    <category term="汉化" scheme="https://blog.sheepyuhang.top/tags/%E6%B1%89%E5%8C%96/"/>
    <category term="Crowdin" scheme="https://blog.sheepyuhang.top/tags/Crowdin/"/>
    <category term="GameMaker" scheme="https://blog.sheepyuhang.top/tags/GameMaker/"/>
    <content>
      <![CDATA[<p>因为金山文档问题太多 而且太卡了<br>所以决定把翻译平台搬到Crowdin上<br>顺便打算先把带星号的句子提出来翻译</p><h2 id="仅处理星号开头的文本"><a href="#仅处理星号开头的文本" class="headerlink" title="仅处理星号开头的文本"></a>仅处理星号开头的文本</h2><p>修改Undertale Mod Tool的脚本<br>使它只导出开头为<code>* </code>的字符串<br>不难做，加上if即可</p><details><summary>ExportAllStringsAsterisk.csx</summary><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line">using System.Text;</span><br><span class="line">using System;</span><br><span class="line">using System.IO;</span><br><span class="line">using System.Threading;</span><br><span class="line">using System.Threading.Tasks;</span><br><span class="line">using UndertaleModLib.Util;</span><br><span class="line"></span><br><span class="line">EnsureDataLoaded();</span><br><span class="line"></span><br><span class="line">string exportFolder = PromptChooseDirectory();</span><br><span class="line">if (exportFolder is null)</span><br><span class="line">    throw new ScriptException(&quot;The export folder was not set.&quot;);</span><br><span class="line"></span><br><span class="line">string stringsPath = Path.Combine(exportFolder, &quot;strings.txt&quot;);</span><br><span class="line">//Overwrite Check One</span><br><span class="line">if (File.Exists(stringsPath))</span><br><span class="line">&#123;</span><br><span class="line">    bool overwriteCheckOne = ScriptQuestion(@&quot;A &#x27;strings.txt&#x27; file already exists.</span><br><span class="line">Would you like to overwrite it?&quot;);</span><br><span class="line">    if (!overwriteCheckOne)</span><br><span class="line">    &#123;</span><br><span class="line">        ScriptError(&quot;A &#x27;strings.txt&#x27; file already exists. Please remove it and try again.&quot;, &quot;Error: Export already exists.&quot;);</span><br><span class="line">        return;</span><br><span class="line">    &#125;</span><br><span class="line">    File.Delete(stringsPath);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">using (StreamWriter writer = new StreamWriter(stringsPath))</span><br><span class="line">&#123;</span><br><span class="line">    foreach (var str in Data.Strings)</span><br><span class="line">    &#123;</span><br><span class="line">        if (str.Content.Contains(&quot;\n&quot;) || str.Content.Contains(&quot;\r&quot;))</span><br><span class="line">            continue;</span><br><span class="line">        if (str.Content.StartsWith(&quot;* &quot;))</span><br><span class="line">            writer.WriteLine(str.Content);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></details><p>不过 导入就有点麻烦了<br>utmt自带的脚本我属实看不明白<br>所以我的选择是，用基于Export改一个Import</p><details><summary>ImportAllStringsAsterisk.csx</summary><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br></pre></td><td class="code"><pre><span class="line">using System.Text;</span><br><span class="line">using System;</span><br><span class="line">using System.IO;</span><br><span class="line">using System.Threading;</span><br><span class="line">using System.Threading.Tasks;</span><br><span class="line">using UndertaleModLib.Util;</span><br><span class="line"></span><br><span class="line">EnsureDataLoaded();</span><br><span class="line"></span><br><span class="line">if (Data.ToolInfo.ProfileMode)</span><br><span class="line">&#123;</span><br><span class="line">    ScriptMessage(&quot;This script will not modify your existing edited GML code registered in your profile. Please use GML editing for text editing, or a script like FindAndReplace, for editing strings within these code entries.&quot;);</span><br><span class="line">&#125;</span><br><span class="line">else</span><br><span class="line">&#123;</span><br><span class="line">    if (!(ScriptQuestion(&quot;This script will recompile all code entries in your profile (if they exist) to the default decompiled output. Continue?&quot;)))</span><br><span class="line">        return;</span><br><span class="line">    foreach (UndertaleCode c in Data.Code)</span><br><span class="line">        NukeProfileGML(c.Name.Content);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">string importFolder = PromptChooseDirectory();</span><br><span class="line">if (importFolder is null)</span><br><span class="line">    throw new ScriptException(&quot;The import folder was not set.&quot;);</span><br><span class="line"></span><br><span class="line">// Overwrite Check One</span><br><span class="line">string stringsPath = Path.Combine(importFolder, &quot;strings.txt&quot;);</span><br><span class="line">if (!File.Exists(stringsPath))</span><br><span class="line">&#123;</span><br><span class="line">    ScriptError(&quot;No &#x27;strings.txt&#x27; file exists!&quot;, &quot;Error&quot;);</span><br><span class="line">    return;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">using (StreamReader reader = new StreamReader(stringsPath))</span><br><span class="line">&#123;</span><br><span class="line">    var a=0;</span><br><span class="line">    foreach (var str in Data.Strings)</span><br><span class="line">    &#123;</span><br><span class="line">        if (str.Content.Contains(&quot;\n&quot;) || str.Content.Contains(&quot;\r&quot;))</span><br><span class="line">            continue;</span><br><span class="line">        if (str.Content.StartsWith(&quot;* &quot;))</span><br><span class="line">            str.Content=reader.ReadLine();</span><br><span class="line">        a+=1;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></details><p>这样就可以导出导入所有星号开头的字符串<br>可以开始上传Crowdin了</p><h2 id="Crowdin？Crowd1ck！"><a href="#Crowdin？Crowd1ck！" class="headerlink" title="Crowdin？Crowd1ck！"></a>Crowdin？Crowd1ck！</h2><p>创建一个私人项目 然后我就发现一个很难绷的东西<br>免费账户可以创建一个私人项目<br>但是免费账户不能拉人<br>就是说免费账户开私人项目只能自娱自乐<br>你这给了和不给有啥区别<br>而且最便宜的Pro等级还非球贵 50美元&#x2F;月</p><p>因为没钱 所以开了个public项目<br>上传英文data导出的strings<br>再给简体中文上传汉化过的data导出的strings</p><p>然后我才发现 它居然自动给我分句了<br>关键是 它只分了英文 没分中文<br>然后就对不上位置了<br>然后还不止分句问题<br>它还吞了不少翻译<br><img src="/./resources/images/uty/crowdin/imported.png" alt="imported"><br>（为了避免剧透 所以调成糊的了 红色是未翻译 蓝色是已翻译 很明显参差不齐+有些句子分开了前后）</p><p>然后 我就删了文件重新导入<br>修改了纯文本的分句方式再导入<br>这次终于正常了<br>虽然还是吞了不少翻译</p><p>然后就在我们开始从文档那边搬译文过来补的时候<br>似乎发现了什么弱智情况<br><img src="/./resources/images/uty/crowdin/frog_pebble.png" alt="小 石 蛙"><br>对 译文乱了<br><img src="/./resources/images/uty/crowdin/pebble_flint.png" alt="小 石 弹"><br>《小 石 弹》<br><img src="/./resources/images/uty/crowdin/candy_spare.png" alt="饶 恕 糖"><br>《饶 恕 糖》<br><img src="/./resources/images/uty/crowdin/chisp_matches.png" alt="柴 片"><br>《柴 片》</p><p>嗯 然后就是花了点时间找到所有乱了的译文 一个个改回去<br>然后顺便从文档那边把译文补过来 然后再顺便问候问候Crowdin的木琴<br>好在导出txt和导入data没什么问题出现</p><h2 id="没了"><a href="#没了" class="headerlink" title="没了"></a>没了</h2><p>嗯 就这样平稳地过渡到了Crowdin<br>without any trouble, of course.</p><p>目前光是星号开头的对话文本就有将近一万行<br>虽然里面包含了很多废弃的修改记录<br>但是量也很大了<br>更何况之后还有战斗敌人对话的文本 还没数过有多少<br>到时候再说吧</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/uty/crowdin/</id>
    <link href="https://blog.sheepyuhang.top/post/uty/crowdin/"/>
    <published>2023-12-13T11:00:54.000Z</published>
    <summary>
      <![CDATA[<p>因为金山文档问题太多 而且太卡了<br>所以决定把翻译平台搬到Crowdin上<br>顺便打算先把带星号的句子提出来翻译</p>
<h2 id="仅处理星号开头的文本"><a href="#仅处理星号开头的文本" class="headerlink" title="仅处理星]]>
    </summary>
    <title>Undertale Yellow 汉化技术问题记录【2】</title>
    <updated>2023-12-13T11:00:54.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="研究记录" scheme="https://blog.sheepyuhang.top/categories/%E7%A0%94%E7%A9%B6%E8%AE%B0%E5%BD%95/"/>
    <category term="UNDERTALE" scheme="https://blog.sheepyuhang.top/tags/UNDERTALE/"/>
    <category term="Undertale Yellow" scheme="https://blog.sheepyuhang.top/tags/Undertale-Yellow/"/>
    <category term="汉化" scheme="https://blog.sheepyuhang.top/tags/%E6%B1%89%E5%8C%96/"/>
    <category term="GameMaker" scheme="https://blog.sheepyuhang.top/tags/GameMaker/"/>
    <content>
      <![CDATA[<p>昨天开始做Undertale Yellow的汉化，这个项目里面是真的重量级啊</p><h2 id="安装字体"><a href="#安装字体" class="headerlink" title="安装字体"></a>安装字体</h2><p>字体倒是没什么好说的，项目里字体不多<br>不会像之前某些项目 好几个一模一样的字体不同名字<br>直接覆盖上字体就行<br>但是这次的 Determination Sans+方正像素 空格超级小<br>一个英文字符对应三个空格<br>so为了美观 只能把*后一个空格后面换成两个空格 换行后两个空格换成五个空格<br>不仅是空格超级小 间距也超级小<br>所以中文不加空格超级不好看（</p><h2 id="修改打字机"><a href="#修改打字机" class="headerlink" title="修改打字机"></a>修改打字机</h2><p>然后就是喜闻乐见的猜打字机名字时间<br>我搜了typer和writer都没搜到<br>然后我决定先从有打字的地方开始下手<br>比如开始的故事intro<br>我搜索了 story和intro<br>intro有了结果 obj_intro<br>然后我打开绘制事件一看<br>我测 为什么打字逻辑写在这<br>好在这套打字逻辑不复杂 而且不需要改<br>我这时还以为只有intro是这样有自己的打字逻辑</p><p>然后我决定找找战斗打字机<br>当我搜出dialogue_battle的时候<br>重量级出现了<br><img src="/./resources/images/uty/uty/dialogue_battle.png" alt="dialogue_battle"><br>是的 每一处打字机都是一个物体<br>然后我又搜索了dialogue<br>更加印证了我的想法<br>我真是【Swearing Blocked】了<br>不是 你猜猜「初始化代码&#x2F;Creation Code」有什么用</p><p>不过幸运的是 打字机并没有太大问题 打字机使用的是整体draw<br>所以字距会由GM调用字体的字距 目前来说没啥要改的<br>唯一一个有问题的是战斗框打字机 它是for文本的每一个字符 固定offset单字绘制<br>而那么多的dialogue_battle其实都只指向四个函数<br>所以修改了这四个函数 让固定offset改为根据当前字符的width来设定 就弄好了</p><h2 id="开整"><a href="#开整" class="headerlink" title="开整"></a>开整</h2><p>首先是开头的故事intro<br>我找到了文本 翻译好了 一切正常<br><img src="/./resources/images/uty/uty/intro.png" alt="intro"><br>纸鸢提供了那张寻人启事的图<br>然后就是logo下方的[PRESS Z OR ENTER]<br>很难绷的就是 我翻译好后发现 这个文本 是手动设置的偏移<br>它没有使用GM自带的居中对齐绘制<br>所以我的决定是 直接修改draw函数<br>byd谁闲着给你一点一点调位置<br><img src="/./resources/images/uty/uty/z_enter_original.png" alt="原来的"><br>↓改完之后↓<br><img src="/./resources/images/uty/uty/z_enter_improved.png" alt="改进的"></p><p>然后就是menu和instruction<br>翻译了menu后 我发现找不到instruction的文本在哪<br>此时我还调侃说不会是个贴图吧<br>然后我还就真找到了<br><img src="/./resources/images/uty/uty/instruction.png" alt="instruction"><br>不是 你没病吧 你和RickyG学的是吧<br>对此 我的选择是<br>直接给你字删了然后手动代码绘制一份<br><img src="/./resources/images/uty/uty/menu.png" alt="最终效果"></p><h2 id="Overworld"><a href="#Overworld" class="headerlink" title="Overworld"></a>Overworld</h2><p>然后就是ow的测试<br>首先是测试了有无空格的差别<br><img src="/./resources/images/uty/uty/no_space.png" alt="无空格"><br><img src="/./resources/images/uty/uty/with_space.png" alt="有空格"><br>显而易见了 所以就要求必须打空格</p><p>接着就是文本的上色<br>前面说过 为了美观 把空格的数量改了<br>然后uty的上色 居然是一种颜色用一个打字机<br>就是说 你加一个颜色 就要新开一个打字机 然后在上色词语的前面加与主打字机一样字符数量的空格<br><img src="/./resources/images/uty/uty/color.png" alt="炸了"><br>↑比如这里一共是三个打字机↑<br>而且这个东西的打字速度还是一样的<br>就是说有中文的时候 上色会跟不上或者是太快<br>这个问题还没修好 目前可能的修复方法是找一个显示空白但是占地和中文一样的字符写进去</p><h2 id="战斗"><a href="#战斗" class="headerlink" title="战斗"></a>战斗</h2><p>纸鸢提供了战斗的按钮贴图<br>没啥问题 接着就是战斗框打字机<br>前面说过 战斗打字机得改<br>然后这里有一张打字机没改时的珍贵录像（<br><img src="/./resources/images/uty/uty/battle.png" alt="battle"><br>anyways，把打字机改好之后和ow一样的处理方法即可</p><h2 id="待续"><a href="#待续" class="headerlink" title="待续"></a>待续</h2><p>嗯，目前就是这样<br>后续有新玩意我再发篇post（</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/uty/uty/</id>
    <link href="https://blog.sheepyuhang.top/post/uty/uty/"/>
    <published>2023-12-11T11:15:15.000Z</published>
    <summary>
      <![CDATA[<p>昨天开始做Undertale Yellow的汉化，这个项目里面是真的重量级啊</p>
<h2 id="安装字体"><a href="#安装字体" class="headerlink" title="安装字体"></a>安装字体</h2><p>字体倒是没什么好说的，项目里字体]]>
    </summary>
    <title>Undertale Yellow 汉化技术问题记录【1】</title>
    <updated>2023-12-11T11:15:15.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="博客更新" scheme="https://blog.sheepyuhang.top/categories/%E5%8D%9A%E5%AE%A2%E6%9B%B4%E6%96%B0/"/>
    <category term="Blog" scheme="https://blog.sheepyuhang.top/tags/Blog/"/>
    <content>
      <![CDATA[<p>之前看到<a href="https://tml233.github.io/">糖萌芦的blog站</a>，就想着自己做一个<br>是12.8晚上十一点开始弄的 安装Node.js 部署Hexo 安装Aurora<br>然后12.9凌晨一点大致设好 凌晨两点才弄好Github Pages</p><p>目前问题还是很多<br>post不能正常显示avator 点击文章作者会跳转首页<br>日期显示方式不能改 评论区功能不能用 网页icon改不了<br>在首页时网站名会显示为 <em>网站名 | 网站名</em><br>应该还有别的问题 但是还没发现<br>不过目前也够用了 有啥问题之后再看看怎么解决吧</p><p>目前post似乎是不能本地化的<br>所以可能之后会开个英文分站或者直接不做英文<br>idk 后面再说 现在先暂时全部中文</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/blog/blog-record-1/</id>
    <link href="https://blog.sheepyuhang.top/post/blog/blog-record-1/"/>
    <published>2023-12-09T03:59:18.000Z</published>
    <summary>
      <![CDATA[<p>之前看到<a href="https://tml233.github.io/">糖萌芦的blog站</a>，就想着自己做一个<br>是12.8晚上十一点开始弄的 安装Node.js 部署Hexo 安装Aurora<br>然后12.9凌晨一点大致设好 凌晨两点才弄好Githu]]>
    </summary>
    <title>博客建设记录【1】</title>
    <updated>2023-12-09T03:59:18.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="博客更新" scheme="https://blog.sheepyuhang.top/categories/%E5%8D%9A%E5%AE%A2%E6%9B%B4%E6%96%B0/"/>
    <category term="Blog" scheme="https://blog.sheepyuhang.top/tags/Blog/"/>
    <content>
      <![CDATA[<p>草不是 我服了<br>我又搞了一个小时才把Github Pages弄好<br>最后才发现是master写成了main<br>现在是真的字面意思又饿又困了<br>晕厥了</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/blog/githubpages/</id>
    <link href="https://blog.sheepyuhang.top/post/blog/githubpages/"/>
    <published>2023-12-08T18:06:26.000Z</published>
    <summary>
      <![CDATA[<p>草不是 我服了<br>我又搞了一个小时才把Github Pages弄好<br>最后才发现是master写成了main<br>现在是真的字面意思又饿又困了<br>晕厥了</p>]]>
    </summary>
    <title>main? master!</title>
    <updated>2023-12-08T18:06:26.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>憨憨羊の宇航鸽鸽</name>
    </author>
    <category term="博客更新" scheme="https://blog.sheepyuhang.top/categories/%E5%8D%9A%E5%AE%A2%E6%9B%B4%E6%96%B0/"/>
    <category term="Blog" scheme="https://blog.sheepyuhang.top/tags/Blog/"/>
    <content>
      <![CDATA[<p>折腾了两个小时，大概是搞出来了<br>其实也不难搞<br>主要是Aurora的文档是真的写的不够详细</p><p>现在也还有些小问题没解决 比如post里面不能正常显示avator<br>点击文章作者会跳转首页 日期显示方式不能改之类的<br>也没搞明白文章怎么本地化，大抵是不能罢<br>而且我好想把这个巨大的post推荐给关了啊（<br>占了大半个画面 看着好难受（</p><p>先睡了 起床再搞吧<br>搞好之后就可以把各种奇奇怪怪的东西发上来了</p>]]>
    </content>
    <id>https://blog.sheepyuhang.top/post/blog/first/</id>
    <link href="https://blog.sheepyuhang.top/post/blog/first/"/>
    <published>2023-12-08T17:04:38.000Z</published>
    <summary>
      <![CDATA[<p>折腾了两个小时，大概是搞出来了<br>其实也不难搞<br>主要是Aurora的文档是真的写的不够详细</p>
<p>现在也还有些小问题没解决 比如post里面不能正常显示avator<br>点击文章作者会跳转首页 日期显示方式不能改之类的<br>也没搞明白文章怎么本地化，大]]>
    </summary>
    <title>Hexo，启动！</title>
    <updated>2023-12-08T17:04:38.000Z</updated>
  </entry>
</feed>
