铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 11289|回复: 14

金水修改简易教程

[复制链接]
发表于 2014-3-11 17:00 | 显示全部楼层 |阅读模式
金水修改简易教程之综述篇

受weyl大神之邀把这几个帖子转过来,本来是自娱自乐的东西,难免疏漏较多。我也是个接触金水修改还没多久的菜鸟,学习的过程中向weyl和ka等一些大神请教不少。不过大神的教导不可能事无巨细,所以很多地方也都是自己看程序或者实验摸索出来的,因而这份教程难免会有不少错误,请包容,请指正。
以下修改皆基于金庸水浒传的演示版进行。

需要的工具主要有这些:
1、Lazarus。用于编译pascal代码。
2、Notepad++。一个免费的代码编辑工具,可以用来编辑lua代码。当然也可用其他工具来代替,如ultraedit,MadEdit。
3、sfe0.72.22。ka制作的具有可视界面的最新版修改器,用来修改各种存档数据。
4、sfe2。ka制作的最新版sfe修改器,但不具有UI,只能命令行操作,主要用来数据的压缩和解压。
5、其他各种图片处理工具,如photoshop、Xnview等等。
3铁血应该有吧,4我下面上传一份,其他可以自行搜索。


金水的代码分为两个部分,一是采用pascal编写的核心引擎,二是采用lua编写的小脚本。其中pascal程序编译生成exe运行,lua则不需要,只有在游戏中触发时才进行调用,所以可以开着游戏随时修改。


pacal代码一般可采用lazarus编译,主要有以下几个部分:
kys_type:定义的全局变量
kys_engine:一些最底层的函数,如读取音频,绘图,显示文字等等,这一部分一般不用改动
kys_main:初始化及选单、行走等主要功能
kys_event:原来的instruct系列指令在这一部分得到了重写,大多数常用功能都是在这里实现的
kys_battle:战斗相关函数
kys_draw:各种不同功能的读图绘图函数
kys_script:为lua脚本提供的各种接口函数,通过堆栈在pascal和lua之间传递数据。主要是将kys_event里的各种指令在这里注册为lua函数,方便lua调用


lua方面:
..\kys\script\oldevent\文件夹下0~1085的程序为原版苍龙的事件程序
主要有五种调用方式:
1、用修改器修改事件层,将对应事件序号改为0~1085之间的某一值,则剧情中触发该事件即为调用对应序号的oldevent程序。
2、用ModifyEvent在其他lua程序中可以随时进行修改,可随时改动事件层参数,后面再详细讲。
3、在pascal代码中执行CallEvent(序号)。此即为1和2调用lua脚本的函数。
4、在pascal代码用ExecScript(路径,函数名)调用对应路径的lua脚本,这是比CallEvent更底层的函数。
5、在其他lua程序中用dofile(路径)调用对应路径的lua脚本。
..\kys\script\1.lua是各种测试函数,可以在游戏选单的“离开-test”中调用,输入脚本序号和函数序号。


lua写代码的详细教程可参见:http://www.txdx.net/thread-517145-1-1.html
跟这个教程基本是差不多的,只不过金水重写了很多函数,命名上也规范了些,但是进行了重载,所以是向前兼容的。也就是说,比如添加物品的命令,你可以像这个教程中提到的用老版的“instruct_32”命令,也可以用规范命名后的“additem”命令。这些函数可以在kys_scrip里查看,下面也有个表格介绍可以下载。


数据类型:
金水最重要的数据有三个,分别是Rdata,Ddata和Sdata,这些数据都写在存档里,分别为save文件夹中的R*.grp,D*.grp,S*.grp。其中*为存档序号。
Ranger.grp,ALLDEF.grp,ALLSIN.grp为这三个数据对应的初始存档数据。Ranger.idx是个简单的二进制文件,记录R文件中各数据段的长度。
Rdata,Ddata和Sdata在pascal中采用LoadR和SaveR两个函数载入和存档。可以采用ka的sfe修改器进行修改。


Rdata:
Rdata通过LoadR读入后不再是一个整体,而是记录成
  1. InShip, Useless1, Mx, My, Sx, Sy, MFace, ShipX, ShipY, ShipX1, ShipY1, ShipFace: smallint;  
  2. TeamList: array[0..5] of smallint;  
  3. RItemList: array of TItemList;  
  4. Rrole: array[-1..1000] of TRole;  
  5. Ritem: array[-1..1000] of TItem;  
  6. Rscence: array[-1..1000] of TScence;  
  7. Rmagic: array[-1..1000] of TMagic;  
  8. RShop: array[-1..20] of TShop;
复制代码
总共分为六个部分
1、基本数据:包括InShip, Useless1, Mx, My, Sx, Sy, MFace, ShipX, ShipY, ShipX1, ShipY1, ShipFace,TeamList,RItemList。都是些主角相关的全局信息,坐标持有物品队伍等。
2、人物:Rrole。游戏中所有NPC的各项属性,在lua中通过GetRolePro和PutRolePro进行读写。需要注意的是,这里所谓的NPC都是可以实际进行战斗的,有着各方面的属性,而游戏中所见到大街上的各种NPC,实际上只是个场景贴图而已,并不是所有人物都要做成这种拥有全面属性的战斗NPC。
3、物品:Ritem。通过GetItemPro和PutItemPro读写。
4、场景:Rscence。主要包括场景名称序号,和各种出入口,跳转口等等。GetScencePro和PutScencePro读写。
5、武功:Rmagic。通过GetMagicPro和PutMagicPro读写。
6、小宝商店:RShop。这部分数据较少,其实本不该单独列一项。这是原版中实现小宝商店每次随机售卖物品的功能,记录生成的随机表。值得一提的是,由于这部分在数据的末端,所以我们要想添加更多全局变量的话,可以扩大这一部分的容量,并重新规定向其中写入的全局数据的格式。
这些数据可以通过对下面的r.xls获取其具体功能及位置。


Ddata:
读入后只记录成Ddata这一个变量,用于保存事件相关参数。
是个三维广义矩阵。第一维是场景id,第二维是事件id,第三维是参数序号(共有11个),所以它是按照从场景到场景子事件,再到事件参数的索引顺序来储存事件的。
这三维的取值范围分别为0~400, 0~199, 0~10
其中参数序号分为:
(0)是否能通过,0可以通过,1被拦住走不过
(1)不明白,都是写0
(2)第一个事件编号,空格触发,不想触发直接写0
(3)第二个事件编号,使用物品触发
(4)第三个事件编号,走过时自动触发
(5)开始贴图编号,-2表示贴图不变,0表示清除贴图
(6)结束贴图编号,-2表示贴图不变,0表示清除贴图
(7)临时贴图编号,-2表示贴图不变,0表示清除贴图
(8)动画延迟,-2表示不变
(9)横坐标X,-2表示不变,当场景位置为0时,此XY参数生效
(10)纵坐标Y,-2表示不变
ModifyEvent为修改Data的整合函数,有两个模式:
1、当输入变量个数大于等于13时,即为50指令中最经典的instruct_3函数。前两个参数分别为Ddata的前两维,即场景id,事件id,而第3~13个参数即为前面提到的11个参数。
2、当输入变量个数为4时,即为以前的SetD函数,固定修改Ddata中的某一项数值。ModifyEvent(x,y,z,m),即为将Ddata[x,y,z]位置储存的数据赋值为m。第一项为0时,即为当前场景,第二项为0时,即为当前事件。
其中,instruct_3函数的说明详见http://www.txdx.net/thread-517039-1-1.html
SetD函数的说明详见http://www.txdx.net/thread-518105-1-1.html




Sdata:
读入后只记录成Sdata这一个变量,用来保存各场景的分层数据:
这是一个4维数据,第一维同样为场景id(0~400)
第二维为场景层(0~5),包括0-地面, 1-建筑, 2-物品, 3-事件, 4-建筑高度, 5-物品高度
第三第四维分别为子场景中该事件的X坐标和Y坐标(0~63)。从程序来看,或者应是Y坐标在前,X坐标在后?好像和Ddata中的参数顺序不太一样。
instruct_3中也涉及到对S数据的修改,当贴图发生变化时,会在该坐标处重新载入贴图。贴图的序号是smap中标号的两倍。


在pascal中,最主要的一些事情就是对内存中的这三个数据的操作,如添加物品的指令,就是对Rdata中的RItemList进行修改,增删或改变事件,就是修改Ddata,改变场景贴图及读写各种场景信息,则是修改Sdata。










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x

评分

参与人数 1声望 +12 收起 理由
柳无色 + 12 原创教程

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2014-3-11 17:12 | 显示全部楼层
金水修改简易教程之贴图导入及sfe2的使用


在这之前先说一下金水的贴图文件结构。金水的贴图有两种结构,一是按照图片原格式存在文件夹里,大地图贴图路径就是.. \kys\resource\mmap\,场景贴图是.. \kys\resource\smap\。都在resource文件夹下,这里不再一一列举。
但这只是为了方便修改,发布正式版时,要将这些都压缩成imz文件,如smap文件夹的所有场景贴图,压缩成为smap.imz。而金水的引擎有对应的处理,使得二者都可以被使用,只要改动kysmod.ini配置文件,设定PNG_TILE=1,则读入文件夹中的贴图,改为0,则读入imz文件中的贴图。
至于生成imz文件这一工作可以通过ka的sfe2修改器来完成:

sfe2采用命令行操作,直接运行sfe2,你会发现他给出了一些命令的格式,如上图所示。
这个工具其实就是用来完成文件的压缩和解压的。压缩的命令是以w结尾的,或者可称为写入,将未打包文件压缩成封装的结构;解压则是以r结尾的命令,或者称为读取。对于贴图文件来说,解压就是将封装的文件解包成一个个可见的贴图,而对于数据文件来说,则按照一定的格式生成可以查看的xls表格文件。
为了使用这些命令,你可以在sfe2的文件夹下新建一个文本文档,然后将后缀改成cmd或者bat。然后在其中按图中的格式输入命令。
例如:
sfeconsole -indexr F:\mod_projects\kys-pig3x\kys\smap index.xls ——将smap中的index.ka文件转换为可读的index.xls表格
sfeconsole -rangerr -auto -pig3 ranger.grp ranger.idx ranger.xls ——将ranger.grp文件按照ranger.idx中所记录的分段数据长度,转换为可读的ranger.xls表格
sfeconsole -imzw F:\mod_projects\kys-pig3x\kys\smap smap.imz ——将smap文件夹下零散的贴图,封装到smap.imz文件夹里
注:ka的指令说明里有一些错误,如-rangerr命令后面的-file.grp是不应该有-符号的。这个有问题的话可以自己先多尝试一下。Cmd的命令,暂时不用的时候,可以用::注释掉。程序结尾最好加入pause来观察执行情况。


下面来讲解一下贴图的导入。
这是我们的mod比较关注的问题,所以这里先讲了。这一部分说简单也简单,说麻烦也很麻烦。
简单是因为在我们的构想中是准备采用整个场景图导入的方式。不过由于要采取45度的视角,所以一张方形的图,一般要采用中间的菱形区域来布景,其他地方填充成空白。

就如这个金庸群侠传的大地图,它其实就是这样一个菱形。
但原来的金水绘图系统颇为麻烦,需要把每个场景图切分成为36*18的小方块。然后在游戏中再进行拼接。这样虽说裁剪的时候麻烦,不过各种小区块可以不断重复利用,还是挺省资源的。
但为了打破原版的窠臼,导入更多更新更靓的图,采用这样的方法,就实在太麻烦了,切分都成大问题。
所以下面来详细讲解一下我们总结出的整图导入的方法:
1、首先我们需要将素材图处理成合适的格式。金水的小场景都是64*64个格子的,每个格子在游戏里对应主角的一步,它是由上面所说的36*18的小方块构成的。
由于场景大小是固定的,所以目前最好直接导入相当于64*64个格子大小的贴图。需要将素材尽可能地接近45度视角,高变为2*64*18/2=1152,宽变为2*64*36/2=2304。当然怎样在不使图像失真严重的情况下变为这样,就是美工的问题了。转换完之后,可以将其四个角上占二分之一面积的部分设置alpha通道为0。这一步不是必须的,也可通过程序自动实现。
这样固定大小的场景自然是很不利于贴图的表现的,所以我们可以再研究一下程序看看是否可以很方便地对场景大小进行更改。
2、将处理好的图片放入smap文件夹中,取一个没有被占用的序号,修改名字,如4127.png。
3、 写入偏移信息。偏移信息记录在smap文件夹下的index.ka中,可以按照之前讲的用sfe2将其转换为index.xls表格。查看改表格我们可以发现,这是个三列的表格,第一列是图像序号,第二列和第三列分别为x偏移,y偏移。

我们可在空白处加入序号4127,以及x偏移为0,y偏移为0,也就是该贴图会以图片的中心为基准,移到指定位置上。
写好保存之后,用sfe2将该表格重新转换为index.ka,覆盖smap中的原有文件。
4、 完成以上三步之后,我们就可以开始在sfe0.72修改器中可视化地添加该贴图了。打开sfe0.72(事先需要修改fishedit.ini配置文件,将游戏路径设置好),然后选择要加入改贴图的场景,之前有贴图的话,可以把所有地面层的贴图删除掉。将操作层设置为“地面层”,然后点击“选择贴图”,输入贴图序号4127,这时就可以将改贴图放置于鼠标指定的位置了。
由于我们将基准设置在了中心处(大量实践证明,大图基准设在中心是很有必要的,如果设在边角处的话,可能导致鼠标根本无法移动到想放置的地方去),所以我们要将该贴图放置在场景的正中间。由于场景xy坐标都是从0~63,所以可以将贴图中心放在(32,32)左右。可能有些偏,后面再细细调整。放置完之后记得保存当前场景进度。

效果图:


以上是场景图整图导入的全过程,当然引擎中贴图的程序由于之前没有这方面的考虑,还存在着一些bug,尤其是和地面贴图自动填充的程序有冲突,所以这一部分程序可能还需要修改。

至于人物及物品贴图的导入,大致也是这个流程,只不过偏移的设置上有些区别。人物自然不能将中心放置在指定曲格上,而是应该以脚下为基准。x偏移一般设置成图宽的二分之一,y偏移则一般设置为图高左右的大小,这里可以根据人物占整个图像的比例进行微调。
不过需要注意的是,人物贴图一般导入的是事件层。事件层的编辑方式不太一样,当你选中事件层中某一编号的事件时,可以设定11个参数,就是综述里的ModifyEvent所涉及的Sdata中的参数。这里一般修改事件初始贴图序号就好了,注意这里要改成文件夹中序号的两倍,如4126,输入贴图序号的时候要输入8252.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2014-3-11 17:19 | 显示全部楼层
本帖最后由 紫府神箫 于 2014-3-13 10:22 编辑

金水修改简易教程之大地图事件

场景事件的修改这里就不赘述了,可以参见以下蓝大和SYP大的帖子:
SetD和GetD:http://www.txdx.net/thread-518105-1-1.html
事件编辑实例详解:http://www.txdx.net/thread-492241-1-1.html

当然金水还是有着一些区别的,如这里ModifyEvent函数,是以前的instruct_3和SetD两个函数的结合,这在综述里面讲过。
而第二个链接里面的OEVENTLUA函数,金水里是没有的。因为苍炎的DIY是以lua为核心的,而金水的pascal 对于调用事件提供了太多便利,可以参照我在综述里面的讲解。

子场景的事件,由于金水的引擎已经提供了全面的支持,包括接口函数,数据存储以及修改器等等,其实是很好做的。但大地图上的触发事件则需要我们另辟蹊径了。
子场景事件的触发方式有三种,一是对话触发,也就是面向指定方向按空格或点鼠标,二是使用物品触发,三是走过固定位置触发。
而关于大地图事件,这里给出两个思路,也算是两个小小的系统吧:

A、大地图随机事件
在大地图上走动,有一定几率随机触发一些事件,这个系统是很有用的,可以做成随机遇到商人,或者随机遇敌,或者触发某些支线,随机遇敌的话又可以加入护送任务里面,这样玩起来就更加多元化。
一开始我们的思路是添加一个全局计时器,没过一段时间都可以进行一次判断,决定是否触发事件。这个思路也是可以实现的,有兴趣的可以试试,但这样太消耗资源了。
参考了其他一些mod的制作,发现有像二宫和也大大的《山寨江湖》那样,每次按键就进行判断的,这是一个不错的思路。
但具体到金水里面,我们就没必要再在lua里进行按键判断了,这样也停费资源的。我们可以直接将这一部分添加到行走函数里,在按键行走时顺便判断大地图事件的触发,这样资源消耗就能小上不少,也便于操作。
具体方法是这样的:
先在kys_main的Walk函数下面添加变量声明:
  1. trigger_rand:longint;  //用于判断的随机数
  2. trigger_count:integer;  //统计步数,间隔一定步数才触发
  3. trigger_str: WideString;    //调用的脚本路径
复制代码
然后在行走函数的事件轮询里写进如下代码:
  1. while SDL_PollEvent(@event) >= 0 do  //事件轮询
  2. begin
  3. ……
  4. //大地图触发事件
  5.     trigger_str :='f1';
  6.     if walking>0 then  //只有行走过程中才会触发
  7.     begin
  8.        trigger_count := trigger_count+1;
  9.        if (trigger_count mod 100 =0) then //每走100步才会进行判断
  10.        begin
  11.           trigger_count:=0;
  12.           trigger_rand :=random(100);
  13.           if trigger_rand>70 then  //有30%概率触发
  14.           begin
  15.              ExecScript(AppPath + 'script/MMap_Trigger.lua', trigger_str); //调用指定脚本的指定函数
  16.           end;
  17.       end;
  18. end;
  19. ……
  20. end //轮询结束
复制代码
以上是pascal的部分,然后我们就可以随意在指定的lua脚本里编辑自己想要触发的事件了。
例如,在script文件夹下新建一个MMap_Trigger.lua,里面写上
  1. function f1()
  2. Talk(0,"啊,踩到狗屎了!",-2,0,0,0);
  3. pause();
  4. end
复制代码
效果图(走了N多步之后的某次):

当然我们还可以添加更多更丰富的脚本,也可以添加更多判断条件,如果要传递数据的话,就要涉及到得全局变量赋值了,通过在kys_script里注册相应接口函数就可实现,这里先不讲。

B、大地图挖宝
或者也可称作大地图使用物品触发事件。
目标:在大地图上指定区域使用指定物品,有一定几率挖到随机宝物。
难点:金水的设定中,除了药直接磕改变属性之外,是不存在在任意地方使用其他物品触发事件这一设定的。
但研究useitem函数发现,我们没必要修改pascal源程序。因为这里实际上提供了一个接口,即:
  1. //如某属性大于0, 直接调用事件
  2.       if Ritem[inum].UnKnow7 > 0 then
  3.         CallEvent(Ritem[inum].UnKnow7)
复制代码
也就是只要Ritem[inum].UnKnow7大于0,我们就可以随时使用该物品,并调用Ritem[inum].UnKnow7这个值所对应的lua脚本序号。
首先是准备工作,我们需要给主角一个道具,这里设为“铁铲”。在添加物品的时候顺便设定其UnKnow7的值:
  1. PutItemPro(1090,195,44); --将铁铲的UnKnow7设定为1090,44是这一属性的地址,可以自己试验出来
  2. GetItem(195,1); --给予物品
复制代码
这里我新建了一个oldevent_1090.lua文件,添加如下代码:
  1. clear();
  2. CurScene=GetCurrentScence();  --获取当前场景
  3. if CurScene>0 then  --只有在大地图才能触发
  4.    Talk(0,"一般只有野外才能挖东西吧。。。",-2,0,0,0);
  5. else
  6.   x,y=getmainmapposition(); --获取大地图坐标
  7.   if getrolepro(0,21)>10 then --体力大于10才能触发
  8.      if x>=357 and x<=359 and y>=234 and y<=236 then --在指定矩形区域内才能触发
  9.        rand=math.random(100);
  10.            if rand<=30 then
  11.               Talk(0,"挖到东西了",-2,0,0,0);
  12.               randitem=math.random(198)-1; --物品序号从0开始,所以要减1
  13.                   GetItem(randitem,1);                  
  14.            else Talk(0,"居然什么都没有挖到。。。",-2,0,0,0);
  15.            end
  16.            clear();
  17.            putrolepro(getrolepro(0,21)-10,0,21) --扣除体力
  18.            ShowString(250, 200, "一番忙碌之后,体力下降10点",0xFF00,0xFF00);
  19.            pause();
  20.          else Talk(0,"这个地方什么也没有",-2,0,0,0);
  21.          end
  22.   else Talk(0,"没有体力了,我得休息一会儿",-2,0,0,0);
  23.   end
  24. end
复制代码
效果如下:

这个挖宝系统也还是比较粗糙的,因为没有藏宝图相关的东西,但添加藏宝图的话,又涉及到藏宝图显示的问题,以及全局变量的读写问题,这里先不细讲。

其实这两个系统是不一定非要用在大地图上的,只不过它相对于原版的子场景事件触发方式有了一定的改变。因而也可以去掉大地图的限制,在子场景中使用。

顺带提一下这里的lua程序用到的函数:
PutItemPro:改变指定物品的指定属性,三个参数分别为要赋的值,物品编号,属性编号
Getrolepro:获取人物的某项属性,两个参数依次为人物序号,属性序号
Putrolepro:改变人物的某项属性,三个参数依次为要赋的值,人物序号,属性序号

ShowString:屏幕上显示字符串,五个参数,前两个是显示的位置坐标,第三个是要显示的字符串,第四个和第五个是颜色。为什么有两个颜色参数呢?因为ShowString为了将字体加粗,采用了生成两个一样的字,错开一定位置重叠的方法,来达到加粗的效果,因而这两个颜色参数依次对应两行重叠的字。这里的颜色参数采用16进制数字标识,0xFF0000即为纯红,0xFF00为纯绿,0xFF为纯蓝,每两位16进制分别表示0~255的RGB值。
如果想设定更详细的参数,如字体大小,字体类型等等,那就不能用这个函数了,得研究一下更底层的一些函数。

Talk:这是相对于原版加强了的对话函数,很容易用,总共六个参数。程序中的注释有一些错误,经尝试如下:
6个参数可以是5个数字,一个字符串,也可以是4个数字,2个字符串,数字和字符串之间任意排列。
第一个数字参数是对话人物的序号,用来设置人物头像,序号参看Rrole列表,头像参看\resource\head\。
第一个字符串参数是对话字符串,可以在其中添加^0,^1等标示符来对文字着色,其中^0是白色,^1是黄色,其他颜色可以自己尝试。
第二个字符串参数是指定姓名字符串,可以显示指定的姓名,而不显示对应序号的人物姓名。当这个值为大于等于0的数字的时候,表示显示指定序号的人物姓名,为-2的时候,自动采用头像序号对应的姓名。为数字时,它作为第二个数字参数。
倒数第三个数字为显示模式,即头像显示在左还是右,0时为左,1时为右。
倒数第二个数字为是否显示头像,0时显示去,其他不显示
最后一个数字为对话颜色,这个也可以在字符串里设置,此处颜色序号参照颜色标识,一般设为0,即为白色。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2014-3-11 17:21 | 显示全部楼层
暂时只写了这三个教程,自己也还在摸索,有精力的话抽空再进行更新。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-3-11 22:00 | 显示全部楼层
好评,太牛了。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-3-12 02:05 | 显示全部楼层
论坛藏龙卧虎啊,楼主好厉害
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-3-13 00:38 | 显示全部楼层
如果想把升级加点的随机变量去除的话,不知道可不可行?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-3-13 06:13 | 显示全部楼层
参考了其他一些mod的制作,发现有像慕容老恭大大的《山寨江湖》那样,每次按键就进行判断的,这是一个不错的思路。

..................本来看得好好的,看到这里就无语了...........................

点评

看来您有幻之第六人的潜质。  发表于 2014-3-13 09:29
可怜的二宫大 路过安慰一下  发表于 2014-3-13 09:14
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2014-3-13 10:26 | 显示全部楼层
二宫和也 发表于 2014-3-13 06:13
..................本来看得好好的,看到这里就无语了...........................

不好意思。。。我真不是故意的。。主要也是没多少时间玩mod,只是看了看代码,结果几个mod记岔了。现已修正

一开始学习的时候也看了您的教程,受益不少,这里再次表示感谢
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2014-3-13 10:39 | 显示全部楼层
prettysnow 发表于 2014-3-13 00:38
如果想把升级加点的随机变量去除的话,不知道可不可行?

我现在还没有研究到战斗及人物属性这一块。不过这肯定是没问题的,因为金水的pascal已经是完全透明了的,人物属性就是Rrole里面的各种值,想怎么调怎么调,只要写好自己的升级分配属性点算法就行。

简单看了下pascal中的程序,有这样的函数:
//selecttype: 十位-武功升级模式 个位-等级升级模式
//要增加的等级, 最低目标等级, 最高目标等级
procedure SetAttribute(rnum, selecttype, modlevel, minlevel, maxlevel: integer)
里面提供了好几个升级时加属性的模式
也有更底层的:CalAddPro(magictype: integer; var attackadd, speedadd, defenceadd, HPadd, MPadd: integer);修改攻防速血内

即使只用lua的话,用setrolepro这个函数也可以很方便地设置

点评

表示没有pascal的源码一切都是浮云...  发表于 2014-3-14 05:26
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2014-3-19 10:56 | 显示全部楼层
工具sfe0.72.22呢?說了這麼多,沒有這個怎麼改啊?

点评

这个版本的sfe好像并没有公布,不过大多数png图片与smp中是一样的,所以可以暂时先用演示版附带的sfe0.72.21。  发表于 2014-3-19 16:43
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-12-21 22:52

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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