骑马与砍杀中文站论坛

 找回密码
 注册(Register!)

QQ登录

只需一步,快速开始

搜索
购买CDKEY 小黑盒加速器
查看: 523|回复: 5

[经验与教程] 素材自动检测系统做可选用扩展包;及规划素材管理方案

[复制链接]

202

主题

984

回帖

986

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2893127
第纳尔
14521
精华
0
互助
90
荣誉
18
贡献
325
魅力
775
注册时间
2017-11-5
鲜花(428) 鸡蛋(0)
发表于 2023-9-24 09:39:56 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 vegetto 于 2023-9-24 14:22 编辑

前言:如果当我们需要为自己的mod提供一种扩展的可选补丁,并且是具有与相应功能联系的一定体积的模型贴图素材,并且这种补丁的类别和同类别数量较多,以及部分同类别素材存在互斥关系(即互相覆盖mod的同一处内容),如何将该内容的不同情况的代码预设到mod主体后,把模型贴图等素材单独剥离出来做成补丁,让玩家自主选择,复制黏贴覆盖后进入游戏就自动启用,且不需要外部程序帮助,也不需要做个复杂界面让玩家勾选或改txt文件等等,以免那些不喜欢看说明的伸手玩家直接漠视这种不能一眼就看到的功能选择。所以本文就是围绕这个展开。

简单讲就是我有两个补丁,补丁1里的a模型和补丁2里的a模型,名称相同,位于的brf名称也相同叫a,如果丢到原始mod覆盖原始mod的a brf,如何在战团能力范围内在游戏中识别出你到底打的补丁1还是补丁2,进而自动检测采用相应补丁专属的代码功能,然后不同补丁都可以享受基础mod内容的通用功能。


正文:


这个应该一般mod没什么应用意义。是我做3d动作格斗mugen类骑砍mod时的一种设想和应用。就是我如何方便玩家安装不同格斗游戏主题的美工类素材包后,做到不同主题子mod素材不堆积占用,并且系统可以自动检测到你当时使用的是哪个主题的素材包(brf,贴图),进而自动适配相应的代码功能。
或者简单点来说就是给战团做一种先提前预设好所有剧本的代码、不需要要求一般玩家进行txt修改或者另外加界面判定采用哪种剧本的代码、靠直接丢一个素材包并且不用任何复杂的外界程序就能实现的mod使用类似DLC扩展内容,可以让不同子主题剧本通用一部分基础的内容并自己检测适配属于各自主题本身的内容,由于不同剧本包的不通用专属素材是拆分开来作为补丁,可以减少无关素材占用,更大程度的发挥平行发展的内容并共用一部分基础的代码成果。


取个例子
首先假定基础mod含abcdef六个剧本专属brf和若干基础公用brf,如a.brf中规定某类生物模型占位a1~a10,贴图规定每个模型预留10张贴图,同理其他用途的模型等等。预留但没有使用的贴图采用64X64纯黑贴图暂时减少体积占用。

这时候我的3d格斗mugen游戏的模组(没有大地图,这一点是使用前提否则与大地图像关联的话就要手动过渡一下场景自检)
假如安排两个不同格斗游戏主题,一个是街霸,一个是火影。
他们非公用的主题专属brf素材及相关贴图都按我那个上面假定的方式排布(即塞到abcdef brf中,部分公用的素材可以留在基础mod包中)
那么不同主题的专属素材包之间就存在一比一的文件名称上的覆盖关系。但是具体同名素材加载到游戏里面体现的内容不一样,特别是brf中的。

而接下来就是重点,就是我把不同主题的素材包丢到基础包里面,假如街霸主题a.brf中有一个叫a的模型是街头霸王里面的春丽,但火影主题a.brf中叫a的模型是小樱。那么怎么才能让不通过代码让玩家手动选设置的情况下,装了对应主题启动游戏场景后游戏自检识别出当前使用模型a的是小樱还是春丽,并使用对应人物的动作动画和技能事件呢?

切入点便是如何让brf中放个特征判断用途的模型载入游戏后可以用代码检测出同id模型的一些不同游戏特征。
而这种可以在同id模型载入后只从模型素材反馈给程序的特征,实际上有两种。
一个是模型碰撞体高度,一个比较冷门,是顶点动画是否存在的鉴定。

模型碰撞体高度判断法举例,在a brf放个用于剧本检测的长方体碰撞体gameno,但春丽的a brf中是小樱a brf中gameno碰撞体高度的2倍。
注册一个sceneprop,模型为空但碰撞叫gameno,则开局进战场(注意本游戏无大地图)先presentation拉黑幕盖住战场场景进行″见不得人的前期预设判断及处理",半空不影响后续战斗的地方刷出spr gameno,然后利用ground level和to terrain两种get z方式在spr gameno上方取点求高度,作差,便是gameno碰撞体的高度值。
然后前期见不得人的预设求此高度后,就识别出你目前加载的abcdef专属主题brf包是街霸还是火影主题。这时候就可以给不同主题brf素材包中实际上的外观或动作不同模型素材对应的主体代码预设的同一个对象id选用不同主题的控制代码和功能

评分

参与人数 1第纳尔 +20 互助 +2 魅力 +2 收起 理由
agjib + 20 + 2 + 2 您的帖子很有价值!

查看全部评分

202

主题

984

回帖

986

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2893127
第纳尔
14521
精华
0
互助
90
荣誉
18
贡献
325
魅力
775
注册时间
2017-11-5
鲜花(428) 鸡蛋(0)
 楼主| 发表于 2023-9-24 10:08:45 来自手机 | 显示全部楼层
本帖最后由 vegetto 于 2023-9-24 13:53 编辑

另外一个顶点动画鉴别法, 首先要指出一个概念就是顶点动画帧数的本质是什么,顶点动画我在顶点动画的理论中已经说明了是什么东西并且有哪些基本用途,但是对于顶点动画的帧数来说从brf看是动画的不同帧时刻模型形态对应的帧时刻,但是从程序的角度来讲它是所有有模型的场景物对象拥有的一种类似slot的状态。 也就是哪怕物体模型本身没做动画,帧也可以播放到成百上千的状态并get获取这个状态,哪怕你做了动画但是只做到一百帧时刻,你也能get frame取到成千上万。 也就是说prop的deform1~1000帧,对于任何有模型的场景物对象来说,可以理解成一种可以自动在1~1000变值循环的slot,每次1到1000总历时长就是一次动画循环播放的时间,所以实际上可以用顶点动画来模拟做计时器。  

但上面是题外话。

和本内容相关的是涉及到这个的一个特例。就是如果一个场景物没有模型,是none模型,或者填了一个所有brf里不存在的模型的模型名称,那么这种场景物就是特例,他没有顶点动画帧状态值或者说恒为0,所以利用这个特征我们就可以进行判断,若干个特征prop载入游戏后,经过强制播放不为0的动画帧区间,是否到达不为0的动画帧状态。  所以这时候定义四个prop,spr gameno1~4 并且对应模型名也采用gameno1~4。
然后街霸的a brf中只放一个含透明贴图游戏中不显示的gameno1名称的正方体模型,也就是gameno2~4对于街头霸王剧本  来说这三个场景物对应模型不存在,而火影a brf只放入gameno1和gameno2这种含透明贴图的正方体简易模型。  然后同理,按照上面模型碰撞体高度判断法中那种“见不得人"的前期预设做法,将gameno1~4刷入场景后,强制动画帧状态到比如100,然后看谁的动画帧状态还是0,显然如果是(100,0,0,0 )判断出来的游戏剧本就是街头霸王,(100,100,0,0)判断出来的剧本就是火影忍者

这样排列组合就2的4次方16种,可以用来判断十六种不同的剧本差别,想更多的话就再加几个这种定义prop   。                                                                           

202

主题

984

回帖

986

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2893127
第纳尔
14521
精华
0
互助
90
荣誉
18
贡献
325
魅力
775
注册时间
2017-11-5
鲜花(428) 鸡蛋(0)
 楼主| 发表于 2023-9-24 10:29:33 | 显示全部楼层
本帖最后由 vegetto 于 2023-9-24 10:34 编辑

具体用视频表达是个什么东西的话可以参照视频,
【骑砍mod】演示说明下我的刺客伍六七mod和嘉然及火影这三个mod是个什么关系-哔哩哔哩】 https://b23.tv/gVUSGaf

具体我的设定就是像csgo做图一样,只丢一个地图包不需要小白更改txt就能自动识别运行不同地图玩法。
【一名爱玩CSGO的二战老兵-哔哩哔哩】 https://b23.tv/ceoTA5z
比如这个可以运行CSGO
模拟黑神话【骑砍版黑神话悟空实机演示-哔哩哔哩】 https://b23.tv/ifYMEfK

抄袭流星蝴蝶剑
【骑砍武侠模组?!直接照抄流星蝴蝶剑-哔哩哔哩】 https://b23.tv/7MdxfKk

火影jumpfight
【以前的骑砍火影格斗demo温故-哔哩哔哩】 https://b23.tv/RUTjm0w

方便用骑砍来模拟更多的游戏,但是不把素材单独的叠加堆积内存,然后有空就可以试验一些有趣的小游戏。

当然实际上有心的也能看得出来,我之所以做这个模式,最主要的还是为了用顶点动画个性化人物动作之后做小队战斗的格斗游戏,并不是来做大规模战争游戏的,只有这个方式才能让顶点动画的利用到最大化,因为对于正常mod来说这个十分的占内存运算。
然后扩充更多的游戏模式,让骑砍出圈子放射文化,走出战争游戏圈子

202

主题

984

回帖

986

积分

子爵[版主]

Rank: 7Rank: 7Rank: 7

UID
2893127
第纳尔
14521
精华
0
互助
90
荣誉
18
贡献
325
魅力
775
注册时间
2017-11-5
鲜花(428) 鸡蛋(0)
 楼主| 发表于 2023-9-24 13:42:28 | 显示全部楼层
本帖最后由 vegetto 于 2023-9-24 14:09 编辑

素材管理规范化,为后续适配更多子MOD的超级战团出现提的设想

再题外话一下我这种做法到底想表达什么:
战团是不是所有的人物粒子场景物的模型可以胡乱装brf,然后代码统一写个文件可以各种对象杂烩到一个文件里。
但是有些游戏不一样,有些游戏素材是分类细化然后按对象单独包裹一套相关资源,比如一个人或物体,单独就一个文件夹套若干文件夹和文件,装了自己的模型动作声效配置文件等等(其实比较新的游戏,如骑砍2是不是也是这样),,所以这种游戏不像战团一样容易改剧本故事游戏模式结构框架这种大范围的东西,但是可以轻松diy不同的单体对象,并且不影响主体事情和其他对象,也不会打多补丁后素材一直堆积不方便删除,所以我这个就是想这么梳理成包裹的形态,约束不同剧本的专属内容在规定格式的brf和贴图格式内。然后丢过去覆盖后,还可以享受通用的基础内容,但是会根据剧本专属素材包的检测情况选择不同的动画序列和人物技能事件等等,
再大了说,假如后面做一个超级战团,我们可以约束不同时代主体的brf和素材在一定的格式名称命名规则内,然后经过场景过渡判断后,知道同一个武器都叫a,但古代剧本的a武器是弓,现代剧本的a武器是枪,这样就可以用顶点动画存在判断法和碰撞体高度判断法这两种判断法,得一个剧本识别号,启用不同的武器触发代码。
或者比如说我现在做一个任务可以得到使用顶点动画龙宠物的机会,但是模型太大,前期用不到的时候,直接做成压缩包加密码,完成任务可以解压压缩包时,下次战场自动识别你有没有覆盖打补丁,然后送你龙和控制配套的东西。这时候如果说,还有一个大猩猩宠物,这两个东西的补丁是互斥关系,同名称覆盖只能留一个,这样就可以游戏前自己选择性打补丁,然后游戏里识别一下打的什么补丁,然后识别出代号数字后,是龙有喷火技能,是大猩猩有捶地技能等等代码自动分化。

这种做法也是我经历东西塞了很多后容易使得战团这种32位游戏游戏跳出的无奈,以及我要想做大杂烩或开不属于现在主题但是想使用本主题部分功能开新主题时,避免原有素材堆积里面,而采取的方法和思路。

我之前说的贴图控制采用贴图数字化,也是与这种结合的准备,因为只有数字化,才能把不同主题 的mod素材梳理一致,形成一一替换的关系;否则像有些子mod,比如有人16th魔改现代战争,结果16th的古代装备贴图多的一比,再加点进去都快6个g了,也就是让模型和贴图像我们troop item一样,具有列表顺序化,1是什么兵种,2号是什么兵种,1号是什么贴图,2号是什么贴图。这样把素材规范化,以后就方便做一个最通用的mod出来,然后大家改子mod就方便一劳永逸了。

30

主题

200

回帖

169

积分

见习骑士

Rank: 3

UID
2462463
第纳尔
1472
精华
0
互助
20
荣誉
0
贡献
0
魅力
50
注册时间
2015-3-3
鲜花(43) 鸡蛋(0)
发表于 2023-9-26 08:17:41 | 显示全部楼层
贴上我个人的理解:就是在Windows下,替换mod的文件,实现其他游戏“打mod”的类似功能哈,希望能推广起来

23

主题

331

回帖

266

积分

见习骑士

Rank: 3

UID
3189500
第纳尔
2549
精华
0
互助
24
荣誉
4
贡献
10
魅力
235
注册时间
2020-6-13
鲜花(66) 鸡蛋(0)
发表于 2023-9-27 22:20:11 来自手机 | 显示全部楼层
奇思妙想      来自: Android客户端
您需要登录后才可以回帖 登录 | 注册(Register!)

本版积分规则

Archiver|手机版|小黑屋|骑马与砍杀中文站

GMT+8, 2024-5-1 00:06 , Processed in 0.115577 second(s), 27 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.

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