Board logo

标题: [老游杂谈] 发现ss恶魔城按菜单慢的原因了 [打印本页]

作者: yzb    时间: 2020-4-18 14:41     标题: 发现ss恶魔城按菜单慢的原因了

posted by wap, platform: 小米NOTE

继续更新2组对比视频


原版
https://www.bilibili.com/video/BV17K411W7m4/


优化版
https://www.bilibili.com/video/BV1yZ4y1s7yj/






原版
https://www.bilibili.com/video/BV1Gk4y1k7mE/


优化版
https://www.bilibili.com/video/BV18f4y1m7C4/


2020.04.19
更新一下,关于这个标题的读取方式,虽然我不是专业的程序员,但是我觉得以下这种方式挺傻的,
在进入标题画面,我们已经知道需要读取标题相关的4个文件,如果我们进入音乐模式,在退出音乐模式以后,前面的4个文件还要重新读一次.......
然后还有,在标题画面按A进去以后,如果你想退回到标题画面的话,这4个文件还是要重新读一次

还有一个地方,关于这3个角色的状态,
如果角色在非静止状态,程序会不停的把角色的状态图形数据写入到内存,然后再经过计算以后传送到显存,这也没什么,但是这些数据是压缩的,要先解压,解压以后才计算,这些是实时的,虽然我知道汇编跑得很快,但是架不住量多啊,这3个角色,少的也有100多个姿态,随便走一下也有好几个需要不停的解压计算,如果在大场景的情况下,肯定会拖慢。
所以a少身后漂亮的残影要付出代价的。


不知道火星了没有,最近对这游戏感兴趣,所
以用模拟器研究了一下读盘为什么这么慢,发个帖子记录一下,当作备忘录吧

在这之前,先说明一下ss的内存,ss的运行内存是2M,对,你没看错,是2M,好像比ps的多0.5M,ps是1.5M来着??

然后先研究一下这个游戏的文件结构吧

虚拟光驱载入镜像,以下是这个游戏ss的文件结构初步分析,有说错的地方请指正

第1个文件夹OMKAE,分别有8bit色和24bit色的游戏相关的壁纸,以及一个DOC的文档,里面应该是记录了此游戏工作人员的吐槽吧

第2个文件夹SD,里面是音频 音效相关的文件,带声音的文件都在这个文件夹里面了

接下来到游戏根目录

3个txt文件,这个是自带的,貌似每个游戏都有


下面开始是重点

0.bin  游戏的主程序之一



以下3个是A少的文件,CHR为图片,PRG为程序
ALUCARD.PRG
ALUCARD.CHR
ALC_W.CHR



以下3个是拿鞭子角色的文件1,CHR为图片,PRG为程序
RICHTER.PRG
RICHTER.CHR
RIC_W.CHR


以下3个是拿鞭子角色的文件2,这个游戏中应该没用到?也许有特殊的选择方法?
把内存地址605CEAC改成1,605C6D0改成1,就可以用下面这些文件了,貌似就是衣服不一样?
RICHTER2.PRG
RICHTER2.CHR
RIC_W2.CHR





以下3个是玛丽亚的文件,CHR为图片,PRG为程序
MARIA.PRG
MARIA.CHR
MAR_W.CHR


以下4个文件都是标题画面用到的文件,CHR为图片数据,PRG为程序,MAP为打包的压缩图片(包括后面的关卡和boss  那些索引都在相应的prg程序里,丧心病狂),fon为字库
ASCII.FON
TITLE.CHR
TITLE.MAP
TITLE.PRG


接下来BOSS开头的文件
看文件名就知道是和boss相关,CHR为图片数据,PRG为程序,MAP为打包的压缩图片
BOSS_02.PRG
BOSS_02.CHR
BOSS_02.MAP
......................
.......................
......................
BOSS_R14.PRG
BOSS_R14.CHR
BOSS_R14.MAP


在然后是几个AVI文件,电脑上都可以播放,就不说了
BREAK.AVI
KONAMI.AVI
OPENING.AVI
ENDING.AVI


接下来是通关以后的程序和图片
ENDING.CHR
ENDING.PRG


接下来
下面这些都是剧情图片,角色台词,遇到带剧情的关卡都会加载,其实s40开头的为通关剧情
EVENT020.001  
S011.CHR  
S011.PTN  
...................
...................
...................
SR14.CHR
SR14.PTN
SWATA.CHR
SWATA.PTN


继续
GAME.PRG   游戏主程序之一

GAMEOVER.MAP  GAMEOVER结束图片



LOAD.MAP  正城存档房间数据
RLOAD.MAP 逆城存档房间数据



LOGO.PRG  开头显示logo的程序
KCEN.MAP  开头显示的2张图片

MOVIE.PRG   播放AVI的程序

以下3个为新游戏打完伯爵以后调用的剧情说明文件,CHR为图片数据,PRG为程序,MAP为打包的压缩图片
OPEN.PRG
OPENNING.CHR
OPENNING.MAP


以下这3个为按开始键以后需要读取到的文件
SUB.PRG       菜单主程序
SUB_DISP.MAP  菜单图片数据以及地址数据
KANJI.FON     道具说明字库


以下这4个为图书馆老爷爷房间文件,CHR为图片数据,PRG为程序,MAP为打包的压缩图片
LIBRARY.PRG
LIBRARY.CHR
LIBRARY.MAP
OYAJI.CHR   图书馆字库


RSTAG以及STAG开头的为关卡相关文件,CHR为图片数据,PRG为程序,MAP为打包的压缩图片
这个有很多,就不一一列出了,带R的是逆城

逆城
RSTAGE01.PRG
RSTAGE01.CHR
RSTAGE01.MAP
...................
...................
...................
...................
正城
STAGE01.PRG
STAGE01.CHR
STAGE01.MAP


然后,下面这2个应该是通关以后出现的字幕数据,PRG为程序
STAFF.PRG
STAFROLL.MAP


接下来来是T_开头的文件名为使魔数据,共7个,CHR为图片数据,PRG为程序

T_BAT.CHR
T_BAT.PRG
...............
..................
T_SWORD.CHR
T_SWORD.PRG


接下来
WEAPON0.PRG   装备左手的程序
WEAPON0.CHR   装备左手的图片

WEAPON1.PRG   装备右手的程序
WEAPON1.CHR   装备右手手的图片



ITEM.CHR   查了一下程序,这个文件应该没用上



最后下面这2组文件没搞明白,想不起来哪还有地方要读盘了,如果有知道的请告知
正城,逆城都有一组相应的文件

WARP.PRG
WARP.CHR
WARP.MAP



RWARP.PRG
RWARP.CHR
RWARP.MAP



文件分析说完了,但是还有地方要补充一点,关于那个WEAPON装备文件的

WEAPON0.PRG   左手的道具程序
WEAPON0.CHR   左手的道具图片

WEAPON1.PRG   右手的道具程序
WEAPON1.CHR   右手的道具图片

不知道ps是不是这样,ss的这些文件是分开存放的
其中有64个左手的程序和64个左手的道具图片,以及64个右手的程序和64个右手的道具图片
其中左右手的道具图片是一样的
然后程序是按每0x3000块打包在一起的,图片是按0x4000打包在一起,读取的时候按装备来定位读取



//////////////////////////////////////////////////////////////////////////
文件分析完毕,下面简单来说一下原游戏的读取方式
开头读取都是固定的这几个文件(声音相关的文件暂时忽略)
MOVIE.PRG
GAME.PRG
LOGO.PRG
KCEN.MAP
TITLE.PRG
TITLE.CHR
ASCII.FON
TITLE.MAP

接着就可以看见标题画面了

然后开始新游戏和读取存档都是差不多的套路

判断角色ID,读取相应的文件,然后读关卡数据,剧情图片(如果有的话)


略有差别的是读取存档会接着读取下面这些文件如果有的话,没有就跳过
左手装备
右手装备
使魔

读完上面这些文件就可以出现游戏画面了
/////////////////////////////////////////////////////////////////


然后重点说一下这个按开始键出现菜单以及关闭菜单的流程吧

按一下开始键,然后准备调出菜单,程序会读取以下文件(注意,每次进菜单都会读取)!
SUB.PRG       菜单主程序
SUB_DISP.MAP  菜单图片数据以及地图数据
KANJI.FON     道具说明字库

每次进菜单都会读取是不是感觉特别傻???


更傻的是后面

当你关闭菜单的时候,程序会读取以下文件(注意,每次关闭菜单都会读取)
左手装备  2个文件   如果是空手就不读取
右手装备  2个文件   如果是空手就不读取
使魔     2个文件   如果没有就不读取,如果和上次一样也不读取(看起来这里做了一点优化)


当前关卡的map文件  必读


如果关卡有剧情,还要读剧情文件

我们来算一下最少需要读取几个文件

左手装备   +0  空手
右手装备   +0  空手
使魔       +0  没有
关卡文件   +1  1
剧情文件   +0  没有
----------------------
           =1

我们退出菜单最少的一次只需要读取1个文件,算上我们进入菜单的3个,按一次开始键再退出总共需要读取4个文件


看起来还不错吧,我们来算一下最多的一次需要读取几个文件

左手装备   +2
右手装备   +2
使魔       +2
关卡文件   +1
剧情文件   +2
----------------------
          =9

就是说最多一次我们退出菜单需要读取9个文件,算上我们进入菜单的3个,按一次开始键再退出总共需要读取12个文件!

天啦,这还敢按吗,难怪每次都要黑屏很久,这还不算上每次读取关卡map文件以后还需要的等待的解压时间

最后可以下结论了,为什么读取这么慢,都怪ss内存太小了,才2M,每次都要读取读取读取........

什么,你说ps是秒读?那只能说是程序员的锅了,游戏构架不合理,构架的话应该算策划师的锅吗?

本帖最后由 yzb 于 2020-4-19 13:35 通过手机版编辑

[ 本帖最后由 yzb 于 2020-5-4 15:12 编辑 ]
作者: 日曜の雨    时间: 2020-4-18 15:03

楼主精神可嘉
作者: SONIC3D    时间: 2020-4-18 20:01

听明白你的意思了:

这几个菜单文件在游戏启动初始时压缩后放进加速卡,读取流程改成从加速卡内解压读取到主内存。降低开启菜单时间。
SUB.PRG       菜单主程序
SUB_DISP.MAP  菜单图片数据以及地图数据
KANJI.FON     道具说明字库

然后左右手装备和使魔全部在游戏启动时压缩进加速卡,读取流程也改成从加速卡内解压读取到主内存。降低关闭菜单回到游戏的时间。如果空间不够,至少做一个缓冲机制,在每次尝试读某个装备或使魔资源时,先查看加速卡内是否有已预加载的,如果没有,就去光盘读取并淘汰替换加速卡内最早的缓存。

最后如果加速卡还有空间,那么每次尝试读取关卡和剧本的流程也按照上面的自适应缓存机制来。

思路理清了,就等你yzb开动了,我4M土星加速卡已经插好了。

作者: sigmaxion    时间: 2020-4-18 20:49

posted by wap, platform: iPad
WARP会不会是传送点
作者: SONIC3D    时间: 2020-4-18 21:00

引用:
原帖由 sigmaxion 于 2020-4-18 20:49 发表
posted by wap, platform: iPad
WARP会不会是传送点
从字面意思看感觉极有可能
作者: 赵大锤    时间: 2020-4-18 21:31

妈的前几天玩SS版
没坏那个SS光头估计有点拉稀……
出图书馆黑屏5分钟,怒开盖还发现没有死机,就只是一直在瞎转……
妈的做游戏怎么不跟做吃的那么讲究了?
假名古屋人,假的!
作者: dtxyy    时间: 2020-4-18 23:21

posted by wap, platform: Android
ss版读盘真是很蛋疼
作者: yzb    时间: 2020-4-19 00:09

posted by wap, platform: 小米NOTE
引用:
原帖由 @SONIC3D  于 2020-4-18 21:00 发表
从字面意思看感觉极有可能
是的,因为懒得打过去,一直没测试,刚试出来了,那几个文件就是正逆城的传送点
还有里希特的那套衣服在选择他的时候按住上选择就可以了。
这个游戏ss版一次载入当前关卡的全部文件太傻了,不像ps版的,ps貌似还细分到每一个房间了,唯一的好处就是在该区域内只要不出现load画面的地方都可以畅通无阻

本帖最后由 yzb 于 2020-4-19 00:11 通过手机版编辑
作者: qazqaz    时间: 2020-4-19 03:29

posted by wap, platform: Android
lz好厉害好有爱
作者: hein    时间: 2020-4-19 10:17

细致的分析
作者: lizitaisha    时间: 2020-4-19 12:02

请问如何观测到加载流程的?真心厉害
作者: otz    时间: 2020-4-19 12:33

PS :主内存2 MB,视频内存1 MB
SS :  2 MB RAM, 1.5 MB VRAM, 512KB Sound RAM,
作者: yzb    时间: 2020-4-19 13:08

posted by wap, platform: 小米NOTE
引用:
原帖由 @lizitaisha  于 2020-4-19 12:02 发表
请问如何观测到加载流程的?真心厉害
在游戏主程序里面找到读文件的入口,然后把文件名写到内存就可以了,首页更新一下。
作者: cnmbanzhu    时间: 2020-4-19 13:20

生化危机1代也是PS版读盘比土星快,尤其是开门动画。
作者: 长尾景虎    时间: 2020-4-19 13:27

posted by wap, platform: iPhone
SS版每次最麻烦就是看个地图也要读盘了,非常考验耐心。。
作者: 江南恐龙    时间: 2020-4-19 23:46

posted by wap, platform: PlayStation 4
点阵假透明什么的我都可以忍,ss版地图这个地图读盘直接劝退
作者: xiaodd    时间: 2020-4-22 20:34

楼主就继续努力一下把ss恶魔城汉化了吧.。
作者: linkzzy    时间: 2020-4-22 21:17

楼主研究精神可嘉。
作者: 小岛秀夫    时间: 2020-4-23 14:08

所以土星版的蝙蝠可以一直飞到蓝耗尽
作者: yzb    时间: 2020-5-4 15:11

更新2组视频
作者: china_ktv    时间: 2020-5-4 16:45

效果很惊人啊
作者: simperen    时间: 2020-5-4 17:14

已经找到问题原因了,有机会有针对性的修改不……




欢迎光临 TGFC Lifestyle (http://tgfcer.com/) Powered by Discuz! 6.0.0