设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 6413|回复: 14
打印 上一主题 下一主题

[RMVA发布] “反战命令”介绍 合集 及代码

[复制链接]

Lv4.逐梦者

梦石
0
星屑
5463
在线时间
2562 小时
注册时间
2011-9-27
帖子
1120

极短23参与开拓者

跳转到指定楼层
1
发表于 2012-1-29 19:48:09 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
购买主题 已有 21 人购买  本主题需向作者支付 500 星屑 才能浏览
从平淡走向更平淡。

Lv4.逐梦者

梦石
0
星屑
5463
在线时间
2562 小时
注册时间
2011-9-27
帖子
1120

极短23参与开拓者

2
 楼主| 发表于 2012-1-29 20:19:09 | 只看该作者

“反战命令”介绍之二:敌人变身->事件复制

本帖最后由 怕鼠的猫 于 2012-1-31 15:33 编辑


“反战命令”?什么东西?

反战命令是本猫写的一段代码,它重写了事件命令中的“战斗命令”部分。称为“反战命令”。


众所周知,事件的命令中有9条“战斗命令”。这些命令在地图场景下没有任何效果,必须在战斗场景才能发挥作用。
即使是标准的RPG,很多设计师也没有在战场中设计事件,结果这些战斗命令没有机会使用到。
对于本猫而言,就更是绝对。因为我崇尚“伪RPG”,取消战斗和升级过程,这9条命令成了彻底的废物。

另一方面,我们发现事件命令中,很多功能没有实现,或者实现的非常低效。例如:没有数组的操作、不能操作其他事件的自用开关、不能改变一个事件的命令内容等等问题。
如果能实现这些功能,我们事件党的能力就会有质的飞跃。

正因为以上的原因,本猫决定,改造这9条命令,让它们发挥我希望的功能。由于是反对战斗而发起的概念,所以这些命令就称为了“反战命令”。顺便说一句,它们原本的功能都保留,这里只是追加了一些功能在地图场景中使用!

本猫将分9贴来逐一介绍这新的9条命令。(但愿你能看的懂)。代码嘛…………你有本事就自己写吧,我写好的部分准备到“技术发布区”弄个收费贴发布出来。不过现在有个问题,那个版块的规则是“收费贴要管理人员同意才能贴出!”。所以…………慢慢等吧。看看他们的版主有能不能审批通过,我再贴出来。
===================================================
第一条: 中止战斗。

中止战斗=》执行公共事件
这实际上是9条命令中的最后一条,之所以先介绍,是因为他最简单,最好理解,有利于带读者入门。

这条命令现在增补的功能是:执行v[10]号公共事件! (V[10]代表10号变量,以下同。)

在标准命令中,“执行公共事件”的命令是有的,但是它太死板。它必须直接指定执行的是哪一条,不能灵活变化。
这里的反战命令使用了v[10]当参数,它的内容指定要执行的公共事件id。 这样的好处是什么呢?有编程基础的人,应该能领悟到增加的灵活性了吧。
看例子:例如你做了一个“诸葛神签”的算卦程序,72根竹签,随机选择一个,然后显示出它对应的卦辞。假设你已经写好了72个公共事件对应显示72个卦辞内容。
那么在传统的事件命令中,你的代码将是这样的:


总共72段条件判断,即使忽略这中间执行效率的问题,写代码也够累的了。
现在有了这种类似于指针或者说数组式的访问方式,执行公共事件变得很简单:


怎么样,有没有心动呢?

或许有人要问了:为什么要用10号变量来当指定公共事件id?为什么不是1号2号呢?
因为有的公共事件是需要参数输入以及返回值输出的,这些数据比较方便的放在1号2号之类的变量中。(观察一下“变量操作”命令的界面,默认的操作都是针对1号变量的!)所以,这里选用了10号,本猫就这样设计的,你还有什么意见?

Ruby语言的口号就是“program for fun!”,能够用简洁的代码解决问题,是编程人员的一种乐趣。
我希望RGSS也能有类似的考虑。
本帖介绍的反战命令是开始涉及到数组操作的一点改进。后面的帖子会逐一介绍其他反战命令,其中不乏数组遍历的概念。
本文中的代码都是ACE。
以上。

反战命令之二,还是介绍尽量简单的命令。
本猫改造了“敌人变身”这个命令,使得它的效果变成了“复制一个事件”。
这里的“事件”,就是只你在地图上放置的怪物、npc、宝箱、门扉以及那些看不见的自动执行事件等等。

在传统的RPG构造中,很多事件明明是相同的,但是必须要手动复制完成。

例如在我的这个游戏地图中,每一只绵羊不同的朝向将影响道路的通行性(单向指定)。当时还没有反战命令,我只能用最原始的法子,画好一只羊,然后ctrl-C,ctrl-V.不厌其烦的复制了N遍。最可恶的是,刚刚复制完,发现里面有代码要更改!
要么就是一只一只羊逐条改动,要么就是都删掉,改一只然后重新复制。不管怎么样,都会疯掉的!

现在,我的做法是画好一只羊,写好他的事件代码(这里假设它是24号事件好了)
。其他的羊不画,代码不写,只是用个空事件占住它应有的位置。记清楚这些空事件的id号码(应该是连续的)。这里假设是90~150.


那么我在这个地图上加入一个自动执行的事件,负责复制事件。代码很短小,却省下我很多的时间。即使设计过程中出现新的想法,也只用改动24号,这一只羊就行了!
是不是很有用的命令呢?


具体说明:上面的数字1~8,指明了你用几号变量来记录目标事件的id,例如这里就是6号变量记录id。
下面的数字说明源事件的id,这里是24.(不要理会后面石像鬼什么的词汇,在反战命令中,我们改写了执行代码,但是没有能力改写编辑器,所以会有些不着调的地方。)
复制的效果包括左右的页内容。但是被复制的事件有自己的坐标和内部变量,这些不会重叠。



从平淡走向更平淡。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5463
在线时间
2562 小时
注册时间
2011-9-27
帖子
1120

极短23参与开拓者

3
 楼主| 发表于 2012-1-29 20:42:31 | 只看该作者

“反战命令”介绍之三:强制敌人行动->读写事件页


第三条 要介绍的 反战命令是 “强制敌人行动”,它被修改的功能是“读写事件页”。
具体的说,它可以把当前地图中任意一个事件的某一页代码写入到某个公共事件中去(从而替代了原有代码),也可以反过来,从公共事件中读取代码替换某一页的事件代码。

如图,这里的命令含义是 将本地图中的18号事件的第5页内容读出来,写入到6号公共事件中去。(原来的6号公共事件内容消失)

这里的命令含义赌场 将8号公共事件的内容读出来,写入到43号事件的第7页中。(原来的代码消失)

有了这样的变换,可以想象,所有事件的代码都可以在某种意义上修改、互换。

例如这样的代码中,看起来先后两次调用同一个公共事件,实际上,第二次的公共事件代码可能已经面目全非,变成另外一个样子了。

这个命令的用途很广,一时很难说尽。留给大家慢慢体会吧。

从平淡走向更平淡。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5463
在线时间
2562 小时
注册时间
2011-9-27
帖子
1120

极短23参与开拓者

4
 楼主| 发表于 2012-1-29 21:00:55 | 只看该作者

反战命令介绍之四:战斗动画显示->开关逻辑运算


第四条,反倒很简单了。它就是计算两个开关的逻辑运算值而已。
在事件命令中,开关的操作非常单一,就是“开启”和“关闭”。开关的使用也很单一,

如果 某个开关“开启”
…………
否则
……
结束

对应成代码,你会发现,相当于
if a
....
else
....
end

仅此而已。
如果稍微复杂一些,弄成

if (a and b) or c

else

end

这样的逻辑运算的时候,很难实现。

或者不在判断语句中,只是赋值, c=a^b (异或运算),这在任何一种语言中都是很基本的运算,可是在事件命令中,死活也找不到对应的内容!

没法子,改造这个命令,就是计算开关之间的逻辑运算的。




这个命令的当前意思是,将v[6] 和v[18]做下标对应的两个开关取出来做逻辑运算。
例如 v[6]=10,v[18]=95.   
则我们要操作的两个开关就是 a=s[10],b=s[95] (10号和95)号开关。
计算的结果按照以下次序放入到开关1~7当中。
s[1]=a
s[2]=b
s[3]=a&&b
s[4]=a||b
s[5]=a^b
s[6]=!a
s[7]=!b
常用的且或非运算都有了。你可以到指定的位置找自己想要的结果了。
这个不难了吧,看懂就好。谢谢。

从平淡走向更平淡。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5463
在线时间
2562 小时
注册时间
2011-9-27
帖子
1120

极短23参与开拓者

5
 楼主| 发表于 2012-1-29 21:30:14 | 只看该作者

“反战命令”介绍之五:增减敌人HP-》数组操作

本帖最后由 怕鼠的猫 于 2012-1-29 21:34 编辑

事件中一直缺少数组的操作。这点让人很郁闷。
例如:游戏中你要去森林中打怪物完成任务,要求你打5只老鼠、3只蟑螂和10只蝴蝶。那么你在每次打仗结束后,对应的一个统计变量中需要+1。
count[kind]+=1
这在脚本中就是很简单的一句话,可是在事件命令中,却没有任何数组操作。你知道怪物种类是 i,也没法直接写入 v [ i ],弄不好还要用愚蠢的 if 判断…………(冷)

这里把增减敌人HP这项改造成了数组操作,可以将输入两个下标,这两个下标对应的变量互相读写,也可以是对应的两个开关互相读写。
由于参量比较多,直接上图看实例:


“操作符”的增加代表“读入”,就是上面这个变量是目标变量。反之,操作符是“减少”,代表“写出”,意味着上面的是源变量,下面的才是目标变量。
这里是“读入”,而且第一个变量是直接指定的。 v[4]=v[v[22]]


这个变成了写入下面的变量:  v[v[33]]=v[5]



当下面的参数不是用“常量”而是用“变量”时,含义不同,现在成了双间接寻址。也就是,上面那个参数也是要从下标来寻找的。
本例中代表: v[v15]]=v[v[7]]



类似的,这个代表 v[v[8]]=v[v[18]]  (其实,这里很多功能是对称的,使用者用一个方向的读写应该就够用了)


如果最下面的开关打开 “允许敌人无法战斗”,这意味着是对开关操作。
在这个例子中,代表 s[v[56]]=s[v[2]].  其他类似的组合就不用太多介绍了。

谢谢。

从平淡走向更平淡。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

Mr.Gandum

梦石
0
星屑
226
在线时间
2070 小时
注册时间
2007-1-31
帖子
3039

贵宾

6
发表于 2012-1-29 21:47:41 | 只看该作者
条件分歧内的脚本哭了。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5463
在线时间
2562 小时
注册时间
2011-9-27
帖子
1120

极短23参与开拓者

7
 楼主| 发表于 2012-1-29 21:49:02 | 只看该作者

反战命令之六:增减敌人MP-》读写事件条件和路线


每个事件都有很多页,每一页都有自己的触发条件(开关、变量、拥有物品等等),每一页也都有自己的移动路线(当然不一定用得上)。
   
现在反战命令中的“增减敌人MP”被调整成了“读写事件的条件和路线”。它可以把某一页的条件读出来(到一个公共变量中),也可以对任何一页写回去,对路线也有类似的操作。
这样一来,所有事件触发方式以及在地图的行走方式都变成可以互换、复制的量了。很酷吧。

随便看两个图吧,参数基本都能理解了。

将85号事件的第4页显示条件读出来(到某个全局变量中)。

将某个全局变量中储存的行走路线写入到14号事件的第5页中。

说明:
增加=读出
减少=写入
常量=显示条件
变量=行走路线

谢谢。
从平淡走向更平淡。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

醉啸 长风万里

梦石
0
星屑
6157
在线时间
6592 小时
注册时间
2007-12-16
帖子
4501

贵宾

8
发表于 2012-1-29 21:55:44 | 只看该作者
这种能一个帖子解决的最好要放在一个帖子里

还在龟速填坑中
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5463
在线时间
2562 小时
注册时间
2011-9-27
帖子
1120

极短23参与开拓者

9
 楼主| 发表于 2012-1-29 22:04:27 | 只看该作者

“反战命令”之七:敌人全面恢复-》地图修改

本帖最后由 亿万星辰 于 2012-1-31 15:10 编辑

RM中,地图一直都是死的。设计完后,在游戏不能有任何更改。

实际上,通过脚本来修改地图块并不难,只是可能会比较难看。事件命令中没有这样的项目,我们就自己加上去。

反战命令中的 “敌人全面恢复” 就变成了“ 修改地图”。

RMVA中的地图是3层的,所以访问地图数据需要三个参数 [ x, y, layer]。然而这个界面太不给力,只有一个参数,还最大只能到8!

没法子,用外部参数。

这里规定用4个变量来做输入参数。
x1=v[1]
y1=v[2]
x2=v[3]
y2=v[4]

layer是界面上选择的数字。这里推荐1,2,3.
命令作用 :将[x2,y2]的图块的第layer层拷贝到[x1,y1]的位置(相同的层)。

layer 选“全体敌人”的时候,会把三层同时拷贝过去。

layer 选其他数字的时候,会把 [x1,y1]的地图块做一些变化(数值+1或者-1),但是后果不可预测。

有了这个功能,在海中间铺一条路还是在路上面突然放个房子,都是有可能的了。

未必要修桥的地方非要放个事件不可的!小小的改动能带来巨大的变革!

谢谢。
从平淡走向更平淡。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5463
在线时间
2562 小时
注册时间
2011-9-27
帖子
1120

极短23参与开拓者

10
 楼主| 发表于 2012-1-29 22:05:21 | 只看该作者
本帖最后由 亿万星辰 于 2012-1-31 15:13 编辑

为了给你把两个帖子合并到一起,要死人了……   ——亿万星辰  = =|
从平淡走向更平淡。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 19:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表