上次在 https://rpg.blue/forum.php?mod=r ... amp;fromuid=2731820 问我「渐变色+依名字变色」的也是这位楼主呢,不知道最后楼主是怎么解决那个问题的。关于文本回放我倒是在MV区 https://rpg.blue/forum.php?mod=r ... amp;fromuid=2731820 回答过类似的问题,只不过对于MZ来说多了一个姓名框(下图右半部分的params[4])。
因此代码可以写成下面这样:
// Show Text Game_Interpreter.prototype.command101 = function(params) { if ($gameMessage.isBusy()) { return false; } $gameMessage.setFaceImage(params[0], params[1]); $gameMessage.setBackground(params[2]); $gameMessage.setPositionType(params[3]); $gameMessage.setSpeakerName(params[4]); if ($gameTemp.backLog == null) $gameTemp.backLog = []; // 本行为新增内容,防止backLog数组不存在 $gameTemp.backLog.unshift(params[4] + ':'); // 本行为新增内容,记录名字 while (this.nextEventCode() === 401) { // Text data this._index++; $gameTemp.backLog.unshift(this.currentCommand().parameters[0]); // 本行为新增内容,记录正文 $gameMessage.add(this.currentCommand().parameters[0]); } switch (this.nextEventCode()) { case 102: // Show Choices this._index++; this.setupChoices(this.currentCommand().parameters); break; case 103: // Input Number this._index++; this.setupNumInput(this.currentCommand().parameters); break; case 104: // Select Item this._index++; this.setupItemChoice(this.currentCommand().parameters); break; } this.setWaitMode("message"); return true; };
// Show Text
Game_Interpreter.prototype.command101 = function(params) {
if ($gameMessage.isBusy()) {
return false;
}
$gameMessage.setFaceImage(params[0], params[1]);
$gameMessage.setBackground(params[2]);
$gameMessage.setPositionType(params[3]);
$gameMessage.setSpeakerName(params[4]);
if ($gameTemp.backLog == null) $gameTemp.backLog = []; // 本行为新增内容,防止backLog数组不存在
$gameTemp.backLog.unshift(params[4] + ':'); // 本行为新增内容,记录名字
while (this.nextEventCode() === 401) {
// Text data
this._index++;
$gameTemp.backLog.unshift(this.currentCommand().parameters[0]); // 本行为新增内容,记录正文
$gameMessage.add(this.currentCommand().parameters[0]);
}
switch (this.nextEventCode()) {
case 102: // Show Choices
this._index++;
this.setupChoices(this.currentCommand().parameters);
break;
case 103: // Input Number
this._index++;
this.setupNumInput(this.currentCommand().parameters);
break;
case 104: // Select Item
this._index++;
this.setupItemChoice(this.currentCommand().parameters);
break;
}
this.setWaitMode("message");
return true;
};
然后楼主就可以在进行一些对话以后在F8控制台运行下面的代码查看到对话记录:
if ($gameTemp.backLog != null) { let max = 5; // 最大回放条数,但若正文的某行以中文冒号结尾则会误判 for (let i = $gameTemp.backLog.length; --i >= 0;) { let s = $gameTemp.backLog[i]; if (s.endsWith(':') && --max < 0) break; console.log(s); } }
if ($gameTemp.backLog != null) {
let max = 5; // 最大回放条数,但若正文的某行以中文冒号结尾则会误判
for (let i = $gameTemp.backLog.length; --i >= 0;) {
let s = $gameTemp.backLog[i];
if (s.endsWith(':') && --max < 0)
break;
console.log(s);
}
}
那么最后一步就是如何把这些记录在游戏中重现而不是通过console.log()打印到控制台,办法就比较多了,比如官方插件TextPicture什么的。 |