Project1

标题: “反战命令”介绍 合集 及代码 [打印本页]

作者: 怕鼠的猫    时间: 2012-1-29 19:48
本主题需向作者支付 500 星屑 才能浏览
作者: 怕鼠的猫    时间: 2012-1-29 20:19
标题: “反战命令”介绍之二:敌人变身->事件复制
本帖最后由 怕鼠的猫 于 2012-1-31 15:33 编辑


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

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

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

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

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

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

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

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

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

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

怎么样,有没有心动呢?

或许有人要问了:为什么要用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.(不要理会后面石像鬼什么的词汇,在反战命令中,我们改写了执行代码,但是没有能力改写编辑器,所以会有些不着调的地方。)
复制的效果包括左右的页内容。但是被复制的事件有自己的坐标和内部变量,这些不会重叠。




作者: 怕鼠的猫    时间: 2012-1-29 20:42
标题: “反战命令”介绍之三:强制敌人行动->读写事件页

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

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

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

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

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

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


作者: 怕鼠的猫    时间: 2012-1-29 21:00
标题: 反战命令介绍之四:战斗动画显示->开关逻辑运算

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

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

对应成代码,你会发现,相当于
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
常用的且或非运算都有了。你可以到指定的位置找自己想要的结果了。
这个不难了吧,看懂就好。谢谢。


作者: 怕鼠的猫    时间: 2012-1-29 21:30
标题: “反战命令”介绍之五:增减敌人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]].  其他类似的组合就不用太多介绍了。

谢谢。


作者: feizhaodan    时间: 2012-1-29 21:47
条件分歧内的脚本哭了。
作者: 怕鼠的猫    时间: 2012-1-29 21:49
标题: 反战命令之六:增减敌人MP-》读写事件条件和路线

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

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

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

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

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

谢谢。
作者: 仲秋启明    时间: 2012-1-29 21:55
这种能一个帖子解决的最好要放在一个帖子里
作者: 怕鼠的猫    时间: 2012-1-29 22:04
标题: “反战命令”之七:敌人全面恢复-》地图修改
本帖最后由 亿万星辰 于 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),但是后果不可预测。

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

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

谢谢。
作者: 怕鼠的猫    时间: 2012-1-29 22:05
本帖最后由 亿万星辰 于 2012-1-31 15:13 编辑

为了给你把两个帖子合并到一起,要死人了……   ——亿万星辰  = =|
作者: 怕鼠的猫    时间: 2012-1-29 22:14
标题: 反战命令之八

反战命令之八: 敌人出现-》 局部存盘读盘

我们都知道玩游戏必须懂得存盘读盘的重要性。尤其是赌博类的游戏,SL大 法放你大杀四方。但是标准的存盘读盘很有缺陷,一切都回到当初的样子,未必是你想要的结果。

你存盘了,然后用钥匙打开一道门,钥匙消失了。等你读盘的时候,钥匙回来了,可是门也是没有打开时的样子。 时间就是机械的倒退而已,没有什么本质作用。

如果,钥匙回来,门还保持打开该多好啊!!

局部存盘读盘,具体分为:
1保存全体变量,
2恢复全体变量,
3保存全体开关,
4恢复全体开关,
5保存全体自用开关,
6恢复全体自用开关,
7保存道具,
8恢复道具。

一共八个功能,对应八个数字选项。
注意,不是保存在硬盘中,而是保存在内存里,所以游戏退出就会无效的。关键看你要怎么使用这个神奇的“时间遥控器”。

谢谢

作者: 怕鼠的猫    时间: 2012-1-29 22:28
标题: 反战命令之九(完)
本帖最后由 怕鼠的猫 于 2012-1-29 22:29 编辑

最后一条了:变更敌人状态-》  改变事件的自用开关、触发方式、移动方式。

RM中事件是有自用开关的(独立开关),它默认只能有事件本身读写。外部无法操作。
例如:你打开一个宝箱,它开启了自用开关,保持了打开的样子,很好。有一天,剧情里出现了一个仙女,告诉你,那个宝箱有合上了,你可以再去打开一次。

这样的剧情,你怎么搞?打开的箱子要想合上,必须改动它的内部开关,可是只有它自己才能做到,仙女是没有能力遥控它的。于是,设计一个外部开关,一个自动事件,仙女开启外部开关,出发箱子的自动事件,自动事件中关闭了自用开关A。 没错,能实现,我也一直这么用的。可是,真TMD麻烦!如果能直接外部操作多好。

这里可以操控同一张地图内的任意一个事件的任意一个自用开关。

上面的数字决定哪个开关。 1 =A, 2= B, 3= C, 4=D.   全体敌人=ABCD
附加=开启,接触=关闭
下面的数字用来选择事件id。
在本例中,就是把14号事件的自用开关A开启。

上面数字是其他的时候,可以改变事件的触发方式(按键、事件、自动、并行)或者 移动方式(固定、随机、接近主角、自定义路线)
例如这个图上的意思是:
将22号事件的当前也变成“自动”执行。这会立即触发事件,比使用开关遥控要直接了当。

===================================
反战命令9条都介绍完了。代码我也写好了,但是没有测试,不保证效果。
不知道大家是否喜欢。
如果有可能,我希望能以500经验的价格发帖。当然,需要他们版主的批条才行。目前,先慢慢等待吧。



‘‘

我本意是要发布一个免费的介绍(帮助文件)和收费的代码段。
先让大家了解 什么是 反战命令。
而且分成9贴,形成索引式的帮助,便于大家在使用的时候直接查找。

现在可好,都合并在一起,9贴的面积跟一帖的面积,广告效应是天差地别啊。 我别指望卖出去了!



──怕鼠的猫于2012-1-31 15:37补充以上内容’’


‘‘

希望能有会汉化的同学,帮我把编辑器界面也改动了,这样使用的时候就不必那么别扭了。


──怕鼠的猫于2012-1-31 15:56补充以上内容’’
作者: talone    时间: 2012-8-1 05:26
500点经验~~神呐~~
作者: kfflX    时间: 2012-8-1 08:16
所以说这是个好东西……真的……
目测将会大幅度降低工作强度……
但是如果在下买了就又要滚回剑士了……
对不起……
作者: 超级D梦    时间: 2012-10-1 07:52
这是虾米东西?




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1