2023-12-11 01:19
普罗_puluo
R半身像对话技术
[size=3]估计大部分人都玩过galgame,对半身像对话的剧情模式应该不陌生。对于作者懒得摆R形象 或者R剧情出场人数很少的作品,可以考虑使用半身像对话来代替R剧情。
[attach]149836[/attach]
要注意的是,这次我准备开辟一条新的技术路线:DLL静态注入技术。听名字好像很高大上,其实就是 我把功能写到了dll中,大家直接把dll接入exe即可,不需要大段大段抄代码了。
DLL注入是日后引擎发展的一个趋势,可以对引擎架构进行解耦(即把不同的功能分散到不同的DLL模块中,彼此之间互不干扰的设计)。因此本帖会对“dll注入”的具体方法做一个简单的介绍。[/size]
[size=5][b]实装方法[/b][/size]
[size=3]首先发布一下dll文件:
[attach]149828[/attach]
将该文件放置到游戏目录中,然后打开Stud_PE,用该软件打开ekd5.exe,来到【函数】一栏:
[attach]149829[/attach]
如上图 在空白区域右键,选择【输入新的输入表】,dll选择DanTiao.dll,函数选择Chat,然后点【加入】:
[attach]149830[/attach]
加入成功后,在左侧可以看到DanTiao.dll,我们展开这一项,可以看到下图中箭头处有个数字,该数字+400000H称作[color=Red]外部函数指针[/color],大家记住这个数字就好,后面有用。
[attach]149831[/attach]
接下来改一点汇编,改的内容非常少,6.2~6.4都是这样改(6.1及以下未测试):
004139A0 > \8B45 F4 mov eax,dword ptr ss:[ebp-C]
004139A3 . 8038 30 cmp byte ptr ds:[eax],30
004139A6 . 75 04 jnz short Ekd5.004139AC
004139A8 . 6A 01 push 1
004139AA . EB 02 jmp short Ekd5.004139AE
004139AC > 6A 00 push 0
004139AE > FF75 FC push dword ptr ss:[ebp-4]
004139B1 . FF75 F8 push dword ptr ss:[ebp-8]
004139B4 . FF75 F4 push dword ptr ss:[ebp-C]
004139B7 . FF15 14315400 call dword ptr ds:[543110] ; 这里的这个543110 就是上面说的[color=Red]外部函数指针[/color],大家按照自己的情况填入该数值
[attach]149832[/attach]
现在引擎已经具备半身像对话的功能了。接下来讲一下剧本的写法,也非常简单:
[attach]149833[/attach]
第一行是说话人,取值1~2;
第二行开始是对话内容,目前对话框的尺寸最多支持两行。
然后说一下图片的要求,
首先需要建立一个BMP文件夹,每一个角色的头像名称为 data编号+“.bmp”,尺寸为192×272;每一个角色还需要一个暗掉的头像 名称为 data编号+"_.bmp";
然后需要往BMP文件夹放一个对话框图像,名称为border.bmp,尺寸为600×120。
示例:
[attach]149834[/attach]
(对话框图片取自【国风轶事】,因为没有获得公开授权,所以这里不会公开对话框的原图)[/size]
[size=5][b]字体参数[/b][/size]
[size=3]本节为非必需项,如果想自定义文字风格的可以看一下。
用od打开dll,查找到以下地址:(如果找不到的话可以直接搜索二进制:6A 00 6A 00 6A 01 6A 02 6A 01 6A 00 6A 00 6A 00 68 90 01 00 00 6A 00 6A 00 6A F9 6A F0)
[attach]149835[/attach]
对于这些参数,可以查询[url]https://learn.microsoft.com/zh-cn/windows/win32/api/wingdi/nf-wingdi-createfonta[/url],来获悉各个参数的意义并做修改,主要是字体高度和宽度可能需要修改,至于加粗、斜体、下划线个人不推荐用,影响观感。[/size]
[size=5][b]更新前瞻[/b][/size]
[size=3]下一版本准备优化一下图片显示,尝试制作渐入渐出的效果;
尝试实现简易的gif半身像;
实现彩色文字 以及 文字显示整型变量数字的功能。
以上全是饼,现在需要测试当前版本是否稳定 以及是否有恶性bug,待初版完善后会继续更新上述的功能。
[/size]
[b][size=5]因为本人精力有限,测试不多,欢迎大家测试反馈bug[/size][/b]
[color=Silver][[i] 本帖最后由 普罗_puluo 于 2023-12-22 02:33 编辑 [/i]][/color]
2023-12-11 09:46
斑鸠凉
:hz1048:普罗大大回来了呢~
2023-12-11 11:27
ささきこじろう
有点意思。
2023-12-11 12:39
鲍三郎
:hz1003::hz1003::hz1003::hz1020::hz1020::hz1020:
2023-12-11 14:20
59054695
:!!
我的天,你真是小天使啊!!!!
2020202020202020
2023-12-11 15:16
star175
回复 #1 普罗_puluo 的帖子
这种修改方法很有意思,以后换引擎就方便了
2023-12-12 09:21
norton
大佬们都回来了。看到希望了!
2023-12-12 11:57
鲍三郎
:hz1003::hz1003::hz1003::hz1020::hz1020::hz1020:
2023-12-12 13:43
十里风波恶
:hz1004::hz1004:好哎
2023-12-12 20:18
一流也
[quote]原帖由 [i]star175[/i] 于 2023-12-11 15:16 发表
这种修改方法很有意思,以后换引擎就方便了 [/quote]
6.3exe 和6.4exe可以再重发帖子吗?谢谢。
2023-12-14 13:57
狂笑四海
前些日子有想过类似橙光游戏剧情模式,写起来比较轻松。
请问为啥要多准备一张暗色的头像?
2023-12-14 23:45
普罗_puluo
回复 #11 狂笑四海 的帖子
两个人说话的时候,说话的人是亮的,没说话的人是暗的,这样可以很快速地区分出谁在说话。
2023-12-16 00:45
狂笑四海
回复 #12 普罗_puluo 的帖子
可是……如果当前场景人物超过2个呢?
2023-12-16 01:45
普罗_puluo
回复 #13 狂笑四海 的帖子
目前最多支持2人同屏,可以用对话2切换当前显示的角色。
当然增加到3人也完全可以,不过感觉容易扰乱视线,让人摸不清谁在发言
2023-12-16 08:47
狂笑四海
回复 #14 普罗_puluo 的帖子
我想问的是:同屏A和B两个人,如果A(或者B)不说话也有必要显示头像吗?
按之前引擎设定,谁说话就显示谁,是不是更好一点。
2023-12-16 15:37
普罗_puluo
回复 #15 狂笑四海 的帖子
可以,只要你使用【对话2】的时候,把另一个人设置成无就好了。
不过对话2的第一行依旧要标注说话人是1还是2
2023-12-18 01:53
狂笑四海
回复 #16 普罗_puluo 的帖子
谢谢解答,基本明白了。在指令15中1和2两个位置不指定人物,则不会显示头像。
其实用这个办法也不用准备暗色头像图片了吧?
2023-12-18 12:26
普罗_puluo
回复 #17 狂笑四海 的帖子
如果全程都是单头像对话的话 就不需要暗色头像了。
[attach]149843[/attach]
占楼传个头像(逃
[color=Silver][[i] 本帖最后由 普罗_puluo 于 2023-12-22 02:37 编辑 [/i]][/color]
页:
[1]
Powered by Discuz! Archiver 5.0.0
© 2001-2006 Comsenz Inc.