某岛

… : "…アッカリ~ン . .. . " .. .
January 28, 2023

RM2k3 机能增强 —— EasyRPG Player 魔改版

To do list

  • 单词不被断行
  • 禁止行首标点

如何编译

cmake . -D PLAYER_BUILD_LIBLCF=ON -D VCPKG_TARGET_TRIPLET=x64-windows-static -D CMAKE_TOOLCHAIN_FILE=D:\Dev\Github\vcpkg\scripts\buildsystems\vcpkg.cmake -D CMAKE_BUILD_TYPE=Debug
cmake --build . 

剧本快进

剧情是游戏的最重要组成部分,现代 Galgame 引擎通常都是有完善的控制功能的,例如快进,自动播放,退回等等。
我们第一步是希望给 RM2k3 增加快进功能。

在最简单的实现中我们只要一行即可,配合 EasyRPG 的 F、G 的快进功能,即可实现快进。
不过一般的 Galgame 似乎都使用 LCTRL 作为快进功能,但是这个键并没有在常量列表里。
如何修改留作思考题。

自动换行

void Window_Message::StartMessageProcessing(PendingMessage pm)
...
int PendingMessage::PushLine(std::string msg)

真彩色图片

我们知道 RM2k3 默认的图片素材全部都是 256 色的 8 位图,这虽然也提供了别具风味的美术风格,但是对于不会画图的独立开发者来说,收集这些 8 位图的素材十分困难。
幸运的是,原生的 EasyRPG Player 就是支持播放真彩色图片的,代码里甚至没有额外的判断,但是缺点是真彩色图片在官方提供的编辑器里并不支持。
因而理想做法是在资源文件夹里保留两个版本,在工程阶段使用 8 位图作为 Placehold,Release 的时候再切换成原图。

Before

After

所以我们最好写一个 Python 脚本来辅助进行切换。

import os

def suf(s, c):
    p = s.rfind('.')
    s1 = s[0:p]
    s2 = s[p:]    
    return s1 + c + s2

def swap(s):
    s_ = suf(s, '_')
    s2 = suf(s, "$")
    os.rename(s, s_)
    os.rename(s2, s)
    os.rename(s_, s2)

F = set()

for root, dirs, files in os.walk("."):
   for file in files:
      F.add(file)
   for file in files:
      if (suf(file, "$") in F):
        swap(file)