使用MV制作最简单的游戏:我要做游戏(9)

公众号原文

使用MV制作最简单的游戏:我要做游戏(9)

完成了我要做游戏(8)的内容,在不涉及js的层面,这个DEMO其实已经做得七七八八了。

不过本回所说的js,在整个RMMV游戏制作流程中,其实占了非常大的比重。虽然对于萌新制作者,可能用不上,但对想要提升自己作品用户体验的制作者,这是必须了解的内容。

用过RM系列的人都知道,历代RPG MAKER用的都是自己的RGSS脚本来对游戏进行扩展,而到了MV这一代,转而使用了较为主流的JavaScript,令玩家能以制作外接插件的形式来修改游戏内核。比起RGSS时代,js插件更易管理,操作也更为便捷。

 

一款MV游戏,js库主要分为两块。核心的js源码部分,是游戏运行的基础。一般来说,不要莽撞地去改它们。

使用MV制作最简单的游戏:我要做游戏(9)

 

而plugins部分,汇集着制作者使用的插件。相比起前几代RM,MV自带几个实用的官方插件,如分辨率调节、横板菜单、图鉴系统、武器技能等。

使用MV制作最简单的游戏:我要做游戏(9)

这些js代码会随着RM版本更新,如果制作者的工程js库低于RM本身版本,可能会出现一些小问题,这时就需要进入软件目录将js库复制到工程中完成覆盖。


对于鱼虾这样对JavaScript一无所知的小白制作者,想要自己写插件是非常难的。不过单纯地想要使用插件倒很方便,现在网上已经有了很多成熟的插件库,例如知名度极高的YEP系列,大部分制作者都会用到。

就这个DEMO而言,采用大框架的成熟插件明显是浪费,鱼虾仅仅想要做一些微小的界面调整,因此决定,自己搞。

 

话是这么说,真的瞎搞当然是不行的,还是要对源码js有基本的了解。这个不需要大家有编程基础,只要有点儿英语基础,能看懂文件后缀和内容就行了。打开源码js所在的文件夹,可以看到后缀名将源码分为核心、管控、物件、场景、精灵和窗口,打开一个,可以看到源码内部都将功能进行了明确的分区和title注释。

使用MV制作最简单的游戏:我要做游戏(9)

使用MV制作最简单的游戏:我要做游戏(9)


针对这个DEMO,鱼虾想做的是显示层面的修改,因此只需要关注manager,scences和windows模块。manager管理的是游戏中的“数据”,scences和windows的关系可以简单(但不正确)理解为,scences的搭建需要调用多个windows。

就鱼虾现在这个程度,之前就说了,想要做个什么是很难的。但是加法做不了,还不能做减法吗?接下来,鱼虾就教大家用注释大法来对js进行一些实用的修改。

 

就从最最简单的地方开始吧。这个DEMO只有一场战斗处理,而MV默认在每场战斗开始和结束都会播放敌人信息和收益信息,想要把这块去掉,怎么办?

使用MV制作最简单的游戏:我要做游戏(9)

 

用记事本(推荐其他带编译功能的编辑器如notepad)打开manager.js文件,找到BattleManager:

使用MV制作最简单的游戏:我要做游戏(9)

 

这一块就是战斗进程的管理,一点一点往下翻找到displayStartMessages,播报开始信息这里:

使用MV制作最简单的游戏:我要做游戏(9)

 

这个不需要任何编程基础都能够看明白的逻辑结构,只需要对这句加上注释:

//$gameMessage.add(TextManager.emerge.format(name));

 

好了,战斗开始时再也不会有敌人信息了。同理,还有之后的displayRewards,播报收益,也可以直接注释掉,得到如下代码:

使用MV制作最简单的游戏:我要做游戏(9)

 

将这两节代码复制粘贴到新的文本中,鱼虾取名BTM,改后缀为js,放到plugins文件夹,就可以在游戏的插件管理菜单找到。选中它然后将状态设为ON,OK,通过注释源码制作的不显示敌人信息和收益插件就完成了。

使用MV制作最简单的游戏:我要做游戏(9)

 

为什么要另存代码制作插件呢?为什么相似度如此之高的代码会有用呢?

在MV游戏建立进程中,调取插件js的优先级要高于源码js,存于插件中的同功能代码对源码有一定的覆盖性,所以另存一个插件,可以在不破坏源码的情况下获得想要的效果,安全又简单。


完成最简单的显示修改,下面就进行进阶修改——菜单修改。游戏初始给定的功能菜单包含道具、技能、装备、状态、队形、选项、保存和退出游戏这8个选项,由于DEMO进出场1名角色,队形列是不需要的,同时选项可以在开始菜单中修改,也要把它去掉。

使用MV制作最简单的游戏:我要做游戏(9)

 

聪明的大家已经猜得到,这算windows.js相关的问题。对,也不对。先往下走,打开windows.js,搜索Menu,下拉找到Window_MenuCommand部分,也就是菜单选项条目,找到下图代码。轻车熟路地将队形和选项的英文注释掉。

使用MV制作最简单的游戏:我要做游戏(9)

 

同样将这段代码复制,新建js文档另存如plugins,再将这个新插件打开。好了,菜单里面已经没有了选项和队列了,是不是清爽很多呢。

使用MV制作最简单的游戏:我要做游戏(9)


windows.js里还有一块鱼虾要调整的,就是角色状态的显示。打开状态菜单,选择人物,角色的状态栏如下。鱼虾已经在【数据库】【用语】中把LV、经验值之类的用语给清除了,但界面还残留着突兀的信息。而且在主界面,同样残留着LV1的数字1,也需要把它消掉。

使用MV制作最简单的游戏:我要做游戏(9)

使用MV制作最简单的游戏:我要做游戏(9)

 

在Window_MenuCommand往后翻,来到Window_MenuStatus,The window for displaying party member status on the menu screen,菜单界面角色状态显示。第一时间寻找角色等级信息相关内容,会发现,木有!!!MenuStatus里面使用的都是drawItem而不是drawActor,让人一是摸不着头脑。别慌仔细看看代码流程,把Item当作Actor,可以看出,窗口是先画了一个状态窗,再在状态窗里画了一个角色简单状态。

使用MV制作最简单的游戏:我要做游戏(9)

使用MV制作最简单的游戏:我要做游戏(9)

 

不过往后翻会发现,drawActorSimpleStatus的内容并不在后面,在哪里呢?通过搜索,可以在Window_Base中找到这一条目,最终定位完毕,直接把drawActorLevel显示给注释掉。同理继续搜索drawActorLevel,继续注释掉Window_Status里的内容,将代码另存为插件**,等级数值就再也不会显示了。

使用MV制作最简单的游戏:我要做游戏(9)

使用MV制作最简单的游戏:我要做游戏(9)


学会了上面一套流程,经验值的消去已经变得轻而易举,在把drawExpInfo注释掉后,鱼虾想要的状态内容显示就完成了。很简单,对吧。

使用MV制作最简单的游戏:我要做游戏(9)


继续注释大法,可以通过注释Window_ActorCommand战斗指令窗口,将普通攻击和防御指令消去。到了这一步,鱼虾已经简化了指令选择和状态显示,窗口内容的改动就基本结束了。

使用MV制作最简单的游戏:我要做游戏(9)

使用MV制作最简单的游戏:我要做游戏(9)

 

事实上,除了修改windows.js,还可以修改scences.js来达到类似的效果。可以简单理解为,修改windows.js是直接在一页纸上乱涂乱画,而修改scences.js是选择本子里的哪几页纸有用。scences.js的修改可能会涉及按键操作的流程问题,所以比windows.js难搞一些。

需要注意的是,各个js中的原有分区注释内容其实除了分段功能外,还有影响代码的顺序调用。在复制代码到新插件文本中时,请不要直接复制原有注释,否则游戏在读取插件时,会根据注释读取原源码js内容,后续修改效果不会出现。

使用MV制作最简单的游戏:我要做游戏(9)


好了,界面修改完毕,内容也基本完成,剩下的,就是打包发布了。有兴趣的朋友可以看看附带的(9)Plus里的3个小功能更改,鱼虾发现那3个问题萌新问的非常多。

点击【阅读原文】可以查看RMMV F1中文说明文档,对新手真的很有帮助。


不知今年的chinajoy有什么好作品会出现

使用MV制作最简单的游戏:我要做游戏(9)

我很期待河洛群侠传