注册 | 登录

游侠NETSHOW论坛





查看: 15809|回复: 20
打印 上一主题 下一主题

【原创教程】深入Mod核心:Skrit&GAS [复制链接]

帖子
65
精华
3
积分
633
金钱
385
荣誉
0
人气
0
评议
0
跳转到指定楼层
楼主
发表于 2005-9-5 15:47:17 |只看该作者 |倒序浏览
注:因精力有限,我不保证我会把它写完

目前Mod制作的现状大多以改GAS文件为主,并没有深入DS2的整个体系去研究过。所以我在这里写一些东西,希望对DS2的深入修改会有帮助。

这篇文章需要读者有一定编程基础。

首先大致介绍一下游戏是怎样运行的:
一个游戏,基本由一个引擎,一些脚本,一堆资源组成。
引擎负责按照脚本的要求读取模型/声音/贴图/动画等资源在屏幕上画出来,也负责接收用户输入,和其他一些必要的工作。这些基本都是些很基础的工作,如文件管理,脚本编译等等。
脚本保存的是游戏的情节、规则等等,脚本负责指挥引擎的工作。游戏下一步如何发展,游戏的规则如何执行等等,都是脚本决定的。
资源包括人物模型,道具,贴图,声音,动画等等。这些都会由引擎在脚本的指导下被读入内存,并在适当的时候显示出来。

Mod的工作是修改脚本和资源,以改变游戏原来的特征。我想大家都体会过10倍经验,超级武器等Mod的作用。这些Mod就是替换了游戏中原来一些脚本的设置,引擎按照新的设置执行的结果。

DS2的脚本大致由3类文件组成:
GAS、Skrit、Flick
GAS大概是这里最常见的文件了,GAS文件的作用和Windows的注册表差不多。它本身没有可执行代码,也不执行。他只保存一些数据而已。这些数据会被游戏引擎或者脚本调用来处理具体问题。例如,当需要计算升级后奖励的经验点数时,就会用到GAS中保存的数据,然后按照GAS的设置进行奖励。
Skrit是程序文件,里面包含的是可以由引擎执行的代码。他负责判断、处理问题。Skrit文件应该说是DS2中真正的统治者,游戏的规则,AI控制,NPC的动作等等全部都是由Skrit进行控制的。更改Skrit可以把DS2改成完全不同的另一种游戏,不同的规则,不同的处理方式等等。
Flick是对话和特效文件。它负责处理人物之间的对话,语法和Skrit比较接近,很容易理解。

所有这些脚本,资源,引擎文件被分成几大部分,分别存放在游戏安装目录中:
游戏的安装目录和system目录:里面存放的是引擎和附带的DLL文件,还有一些如EULA等杂类文件。
dev:保存的是调试用的DLL(看名字猜得,大概是这个了)
Resource:保存了绝大多数资源与脚本,其中大部分存放与剧情关系不是很紧密的一些数据,如模型/声音/通用脚本/对话等等。
maps:剧情。保存了场景信息,地图信息,地图构成,场景组件信息等等。总的来说,就是包含了与剧情相关的信息,比如第一场是谁出场,然后主角和它要说哪些话,说了之后进行什么动作等等。

如果把这些文件都解开,就会发现它们是这样进行分类的:

art:保存了贴图(bitmaps),模型(meshes),动作(animations)信息。
相关文件:Terrain.ds2res,Objects.ds2res,Logic.ds2res,Language.ds2res

auto:网络相关的脚本和其他
相关文件:Logic.ds2res

config:配置信息,游戏引擎开始的时候就会读取。
相关文件:Logic.ds2res,language.ds2res

language:保存了翻译文件,中文版的中文就在这里。
相关文件:language.ds2res

movie:动画,包括片头,过场等,其中的文件格式为Bink,可以用RadGameTools观看。
相关文件:movies1.ds2res,movies2.ds2res

sound:包含了音效,背景音乐,语音等声音文件。游戏中听到的杂东西啊,怪物惨叫啊,主角对话阿都在这里,中文版的中文声音也在这里。替换掉这些声音,就可以改变游戏的声音。
相关文件:Voice.ds2res,Sound1.ds2res,Sound2.ds2res

ui:用户界面相关的脚本/配置文件。用户界面上的按钮如何配置等信息,都在这里。
相关文件:Logic.ds2res

World:剧情及规则文件,是游戏的生命。里面保存了和游戏本身有关的绝大部分脚本和配置文件。这里也是制作Mod的主要部分。
相关文件:World.ds2map,Logic.ds2res

==========模版和Skrit==========

大致了解这些以后,就来看一下GAS和Skrit是如何起作用的吧。
首先,引擎按照config里面的设置开始读取地图以后,会按照地图建立场景,然后把人物啊,物品阿什么的都放到场景里面来,然后主角进入,游戏开始。
这些场景中的物品,包括主角在内,都是由模版定义的。模版保存在world\contentdb\templates里面,按照种类分别保存在不同的文件夹里。场景里面所有的东西在这里都有定义。这些在场景中的物品叫做组件。他们包含的范围很广泛,包括魔法,射出去的箭等等,都是。

其中一些组件,比如门,可以被玩家打开,为了实现这种效果,组件会调用某个Skrit。下面看个例子:
这是个门的定义
[PHP]
[t:template,n:door_glb_elf_01]
{
        specializes     = base_door;
        doc             = "elf_door_straight";
        category_name   = "doors";

        [aspect]
        {
                material = kennel_door;
                model   = m_i_glb_elfdoor-01;
                [textures]  {0=b_i_glb_elfdoor-01;}
        }
        [body]
        {
                [chore_dictionary]
                {
                        chore_prefix = a_i_glb;

                        [chore_open]
                        {
                                skrit           = transition;
                                anim_files: 00  = elfdoor-01_open;
                        }
                        [chore_close]
                        {
                                skrit           = transition;
                                anim_files: 00  = elfdoor-01_close;
                        }
                }
        }
        [door_basic]
        {
        }
}
[/PHP]
其中最后一段[door_basic]实际上调用了一个文件名叫做door_basic.skrit的脚本。你可以在world\contentdb\components\interactive找到它。这个脚本包含了处理开门与关门的逻辑。
这就是模版和Skrit脚本结合的方式之一。
在使用这个模版的某扇门出现在游戏中的时候,这个脚本就开始运行,然后等玩家打开他的时候,这个脚本就会发挥他的作用了。

下面来做个实验:
在这一行
event OnGoDrawDebugHud$
上面插入新的一行,然后把这个写进去:
/*
然后在最后一行下面把这个写进去:
*/
打包之后放到resource里面看看。哈哈哈,你发现你再也无法打开门了。

GAS中的数据块(方括号加上后面大括号中的内容称为一个数据块)的作用不只是调用Skrit脚本,还可以被Skrit脚本所调用。如HasComponent("name")函数可以检查GAS中是否有名字叫做name的块,而GetComponent系列函数可以取得相应的数据。

有时候Skrit脚本会被引擎直接调用,比如rules.skrit。这个脚本控制着游戏的规则系统,所有击中测试,经验分配等工作都是由这个脚本完成的。不过没有模版调用它。

==========Skrit运行过程==========

使用道具 举报

帖子
322
精华
0
积分
161
金钱
2559
荣誉
0
人气
0
评议
0
沙发
发表于 2005-9-5 16:49:40 |只看该作者
楼主真是强啊
可惜现在map文件还没有办法改

使用道具 举报

帖子
682
精华
0
积分
341
金钱
2994
荣誉
0
人气
0
评议
0
板凳
发表于 2005-9-5 16:52:12 |只看该作者
楼主强啊,支持你一下.........................【支持】 【汗水】

使用道具 举报

帖子
65
精华
3
积分
633
金钱
385
荣誉
0
人气
0
评议
0
地板
发表于 2005-9-5 16:53:18 |只看该作者
大致了解这些以后,就来看一下GAS和Skrit是如何起作用的吧。
首先,引擎按照config里面的设置开始读取地图以后,会按照地图建立场景,然后把人物啊,物品阿什么的都放到场景里面来,然后主角进入,游戏开始。
这些场景中的物品,包括主角在内,都是由模版定义的。模版保存在world\contentdb\templates里面,按照种类分别保存在不同的文件夹里。场景里面所有的东西在这里都有定义。
待续~~~

使用道具 举报

猪头帮主
精灵族[P*]风暴祭祀

帖子
3886
精华
15
积分
4944
金钱
4030
荣誉
0
人气
0
评议
0
5#
发表于 2005-9-5 17:31:02 |只看该作者
嘻稀夕
俺也来叉一脚
==================

GAS、Skrit、Flick

GAS提供静态数据
Skrit提供动态代码
Flick提供游戏的电影带入感


Skrit根据GAS提供的数据初始化,结合用户的操作执行一系列的指令
伴随Flick提供游戏的电影带入感
配合游戏的引擎和内核执行代码
展现出来的就是游戏的动态交互以及怪物的AI

使用道具 举报

猪头帮主
精灵族[P*]风暴祭祀

帖子
3886
精华
15
积分
4944
金钱
4030
荣誉
0
人气
0
评议
0
6#
发表于 2005-9-7 07:35:50 |只看该作者
楼主晋升MASTER!
......................................................

使用道具 举报

帖子
63
精华
0
积分
32
金钱
283
荣誉
0
人气
0
评议
0
7#
发表于 2005-10-2 08:10:21 |只看该作者

使用道具 举报

猪头帮主
精灵族[P*]风暴祭祀

帖子
3886
精华
15
积分
4944
金钱
4030
荣誉
0
人气
0
评议
0
8#
发表于 2005-11-14 08:57:47 |只看该作者
重新看了一下
这个帖子的含金量非常的高
厉害!
顶一下
奖励增加到100LTB
确实厉害!

使用道具 举报

猪头帮主
精灵族[P*]风暴祭祀

帖子
3886
精华
15
积分
4944
金钱
4030
荣誉
0
人气
0
评议
0
9#
发表于 2005-11-14 09:11:29 |只看该作者
补充一些
components.gas
文件详细的介绍了组件的摸板信息

使用道具 举报

帖子
274
精华
0
积分
137
金钱
669
荣誉
0
人气
0
评议
0
10#
发表于 2005-11-26 18:45:07 |只看该作者
真牛人啊

楼主继续 一定支持  想自己改点东西出来

使用道具 举报

帖子
1423
精华
0
积分
712
金钱
2170
荣誉
0
人气
0
评议
0
11#
发表于 2005-12-23 22:17:48 |只看该作者
谢谢了啊~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
INTEL i7 920 盒     猫头鹰U12PSE 双风扇
技嘉GA-EX58-UD5    G.SKILLF3 12800CL9T-6GBNQ  2G*3
七彩虹 iGame260+ GD3 UP烈焰战神896M
希捷 1TB 7200.12 32M   酷冷 P100   AcBel康舒I8-570
明基V2400W   RAZER 金环蛇 + VX Revolution    Dell 8135蓝牙
Microlab M-111   XBOX360有线手柄   贝尔金F9G600zh2.5M 防浪涌

使用道具 举报

帖子
31
精华
0
积分
16
金钱
270
荣誉
0
人气
0
评议
0
12#
发表于 2006-1-1 19:09:13 |只看该作者
楼主真牛,好好厉害!小弟受益不浅呀!!

使用道具 举报

帖子
1
精华
0
积分
0
金钱
1
荣誉
0
人气
0
评议
0
13#
发表于 2006-1-19 16:10:22 |只看该作者
小弟初来报道~~看不懂~请不要见怪~

使用道具 举报

帖子
360
精华
0
积分
190
金钱
889
荣誉
1
人气
0
评议
0
14#
发表于 2006-2-8 00:33:18 |只看该作者
楼主真厉害~~~能发点有关物品模型的修改怎么改的教学吗?谢谢谢谢谢谢谢谢谢谢~~~~~!!!!!!!!!!【支持】 【支持】 【支持】 【支持】 【支持】 【支持】 【支持】 【支持】 【支持】 【支持】 【支持】 【支持】 【支持】 【支持】 【支持】 【支持】
有一天,我正看着我干女儿的玩具在想?这玩意儿千里迢迢从美国坐飞机过来,是不是真那么厉害?突然,一个熟悉的字跳进眼里,朋友贼笑着对我说:厉害吧,美国又怎么样?还不是用咱"卖不赢.拆啦"

使用道具 举报

帖子
23
精华
0
积分
7
金钱
37
荣誉
0
人气
0
评议
0
15#
发表于 2006-2-11 00:11:53 |只看该作者
请问 我用Tank Viewer将需要的文件打开后,却不能修改当中的内容?这是为什么?
是不是要先修改扩展名?
我不是学计算机的,只是想自己动手修改。
还有用uedit32 打开文件后 全是数字 根本看不懂

使用道具 举报

帖子
3
精华
0
积分
1
金钱
3
荣誉
0
人气
0
评议
0
16#
发表于 2006-2-12 15:02:30 |只看该作者
谢谢楼主~~~,不过偶还没有看明白!!!!!!!!

使用道具 举报

帖子
13
精华
0
积分
4
金钱
15
荣誉
0
人气
0
评议
0
17#
发表于 2006-2-23 16:08:18 |只看该作者
能教我怎么改变武器的颜色和外型吗?好像话不多要字来凑

使用道具 举报

帖子
21
精华
0
积分
11
金钱
251
荣誉
0
人气
0
评议
0
18#
发表于 2006-3-8 17:32:21 |只看该作者
【支持】 【支持】 【支持】
楼主真是偶像,深入讲解一下关于world 中global里的东西吧?
我想了解一下角色本身Exp\Skill\formula,里面规则是怎样定义和变化的,谢谢。

使用道具 举报

帖子
81
精华
0
积分
40
金钱
188
荣誉
0
人气
0
评议
0
19#
发表于 2006-12-5 21:24:21 |只看该作者
楼主真是牛人,太强了!欢欢喜喜,天天向上。

使用道具 举报

帖子
999
精华
0
积分
501
金钱
756
荣誉
0
人气
0
评议
0
20#
发表于 2006-12-7 17:18:54 |只看该作者
好想学习自己也做个心爱的MOD啊 有老师肯收徒弟吗?675566472
我只想学习怎么改的让钱更值钱 其他的无所谓 不想太变态

使用道具 举报

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

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-6-7 06:34 , Processed in 0.414571 second(s), 12 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到