A9VG电玩部落论坛

 找回密码
 注册
搜索
查看: 14967|回复: 6

蓝光导航命令

[复制链接]

精华
25
帖子
65375
威望
53 点
积分
76450 点
种子
13 点
注册时间
2003-8-23
最后登录
2024-10-28
 楼主| 发表于 2009-10-18 21:31  ·  四川 | 显示全部楼层 |阅读模式
本帖最后由 天神十三煞 于 2014-1-20 08:21 编辑

如果你有一定编程经验,本文非常简单易懂
如果没有,请问搜索引擎,查询这些关键字

Navigations Commands
导航命令,类似汇编语言,一般从上到下顺序执行,使用goto来实现结构嵌套[label]
储存于MovieObject或MenuButton中,用于完成一些目的程序操作而实现用户与BD媒体的交互
两者所支持命令项略有不同,但大部分内容相同,未列出不同的命令较简单或者基本不会用到

预载型:命令触发器是Movie Object本身,即进入此movieObject就开始顺序执行其导航命令
临时型:命令触发器是Menu Button激活,用户激活该菜单按钮时顺序执行该按钮里储存的导航命令

使用BDedit可以看到此类命令,并有十六进制值可参考
打开Scenarist BD可以看到此类命令,有视图命令编辑框

精华
25
帖子
65375
威望
53 点
积分
76450 点
种子
13 点
注册时间
2003-8-23
最后登录
2024-10-28
 楼主| 发表于 2009-10-18 21:32  ·  四川 | 显示全部楼层
本帖最后由 天神十三煞 于 2014-1-20 08:19 编辑

命令后面的操作值[或序号]可以是IMM,也可以来自PSR或GPR
IMM、PSR、GPR这些缩写常见于各类BD编辑软件,含义如下

IMM: Immediate value
表示直接赋值,数值为指定的常数

PSR: Player Status Registers
播放器状态值专用寄存器,不可被用户赋值
总共已有30个不同的PSR,用来标示播放器当前状态
例如PSR1储存的值是当前主音轨序号
又例PSR2储存的值是当前字幕[含PIP的]轨序号和开启状态
部分PSR的值为播放器自动预设,另外的则是根据命令操作而变化

GPR: General Purpose Registers
通用寄存器,可以被用户赋值
总共允许添加4096个GPR,GPR里的值通常直接或间接受命令操作而变化
一般来说GPR是用来储存用户的变量值以实现某些操作目的(注:倒数5个已被系统使用)
如果是完全新建[无任何movieObject或menu]项目添加GPR寄存器时可按正序从0开始
如果是修改既存命令时想添加寄存器,不知道已用多少个GPR,建议从4090倒序开始

Nop
空白命令项,一般用来配合goto分离命令的嵌套

GoTo
转到指定的命令行

Break
中断并退出当前命令

JumpObject
跳转到指定的MovieObject

JumpTitle
跳转到指定的Title

CallObject
停止当前播放内容并跳转到指定的MovieObject

CallTitle
停止当前播放内容并跳转到指定的Title

Resume
恢复之前停止的播放内容

Play PL
播放指定playlist

Play PL_PI
从指定playlist的某playitem开始播放

Play PL_MK
从指定playlist的某playlistmark开始播放

TerminatePL
从当前列表播放内容退出

Link PI
转到指定PlayItem

Link MK
转到指定PlayListMark

BC 或 If &
把某GPR或PSR内的值和某值进行二进制比较,结果为真则……

EQ 或 If ==
如果某GPR或PSR内的值和某值相等就进行以下操作……

NE 或 If !=
如果某GPR或PSR内的值和某值不等就进行以下操作……

GE 或 If >=
如果某GPR或PSR内的值大于等于某值就进行以下操作……

GT 或 If >
如果某GPR或PSR内的值大于某值就进行以下操作……

LE 或 If <=
如果某GPR或PSR内的值小于等于某值就进行以下操作……

LT 或 If <
如果某GPR或PSR内的值小于某值就进行以下操作……

Move
将某值[或另个GPR内的值]赋值给目标GPR

Swap
交换两个GPR内的值

Add
把目标GPR内的值增加某值并储存到这个GPR内

Sub
把目标GPR内的值减少某值并储存到这个GPR内

Mul
把目标GPR内的值乘以几倍并储存到这个GPR内

Div
把目标GPR内的值缩小几倍并储存到这个GPR内

Mod
把目标GPR内的值除以某个值,然后将获得的余数再储存进这个GPR

Rnd
从某范围内随机一个值赋值给目标GPR

And
将目标GPR内的值和某数进行与运算得结果并储存进这个GPR

Or
将目标GPR内的值和某数进行或运算得结果并储存进这个GPR

Xor
将目标GPR内的值和某数进行异或运算得结果并储存进这个GPR

BitSet
将目标GPR内的值[二进制的]第某位赋为1

BitClear
将目标GPR内的值[二进制的]第某位赋为0

ShiftLeft
将目标GPR内的值[二进制的]左移几位[bit]

ShiftRight
将目标GPR内的值[二进制的]右移几位[bit]

SetStream
更改音频、字幕、角度、或菜单的轨位为指定序号

SetNVTimer
当某时长[秒]后跳转到目标MovieObject

SetSecondaryStream
更改副视频、副音频或其字幕的轨位为指定序号

精华
25
帖子
65375
威望
53 点
积分
76450 点
种子
13 点
注册时间
2003-8-23
最后登录
2024-10-28
 楼主| 发表于 2014-1-21 00:20  ·  美国 | 显示全部楼层
范例之一
0. EQ GPR0, 0
1. GoTo 6
2. Move GPR5, GPR0
3. Sub GPR5, 1
4. Play PL_MK 1, GPR5
5. GoTo 8
6. NOP
7. Play PL 1
8. NOP
9. Jump Title 2

翻译解释
0. 如果GPR0的值等于0则执行下一行,否则执行再下一行
1. 转到第6行命令开始执行
2. 将GPR0的值赋给GPR5
3. 将GPR5里的值减去1,并储存到GPR5
4. 播放1号Playlist的某章节,此章节序号值来自GPR5
5. 转到第8行命令开始执行
6. 空
7. 播放1号Playlist
8. 空
9. 跳转到第2号Title

直观程序
if (gpr0 == 0)
{
    play (Playlist 1)
    Jump Title 2
}
else
{
    gpr5=gpr0
    gpr5=gpr5-1
    play (Playlist 1, playlistmark gpr5)
    Jump Title 2
}

结果样本
例如GPR0的值是0,那么播放mpls1[默认从0号章节开始],播完后跳到title2
例如GPR0的值是3,那么把这3-1=2储存进GPR5,再播放mpls1的2号章节[2从GPR5得],播完后跳到title2
一般来讲这个GPR0的值可能是playlist1的弹出菜单选章节后读取了章节所在PSR的值并储入GPR0
由于执行序号为0起,所以上面有个减1的操作,通过上述命令可以最终实现恢复播放上次的章节

                        
范例之二
0. NOP
1. Move GPR5, 2
2. NOP
3. EQ GPR4, 1
4. SetStream 1, 2, (0), (0)
5. EQ GPR4, 2
6. SetStream 2, 2, (0), (0)
7. EQ GPR4, 3
8. SetStream 3, 2, (0), (0)
9. SetButtonPage 5, (1)

翻译解释
0. 空
1. 将GPR5内的值赋为2
2. 空
3. 如果GPR4内的值等于1则执行下一行,否则执行再下一行
4. 将音频设置为第1轨、字幕第2轨
5. 如果GPR4内的值等于2则执行下一行,否则执行再下一行
6. 将音频设置为第2轨、字幕第2轨
7. 如果GPR4内的值等于3则执行下一行
8. 将音频设置为第3轨、字幕第2轨
9. 菜单光标转到按钮5

直观程序
gpr5=2
if (gpr4 == 1){setstream(Au1,PG2) }
if (gpr4 == 2){setstream(Au2,PG2) }
if (gpr4 == 3){setstream(Au3,PG2) }
setButtonPage(5)

结果样本
这是一个有三条音轨和两条字幕的菜单的导航命令,该按钮的作用是设置为第二轨字幕并保持音轨不变
GPR5用来存当前按钮设置后字幕轨的序号,而GPR4里存的则是上一次音轨设置按钮的设置后的音轨序号
首先将GPR5值储存为2[当前要设置的字幕轨],之后这个值可以在音轨设置按钮用来判断该保留的字幕轨
然后读取GPR4里的值,分别设置为三种情况,需要这么做的原因是setstream不可单独设置音频或字幕轨

精华
0
帖子
32
威望
0 点
积分
32 点
种子
0 点
注册时间
2010-1-8
最后登录
2019-5-9
发表于 2014-1-21 00:36  ·  北京 | 显示全部楼层
计算机语言门外汉路过,赶脚有点像中学时代的basic语言。

精华
0
帖子
55
威望
0 点
积分
55 点
种子
5 点
注册时间
2014-10-13
最后登录
2016-9-10
发表于 2014-12-13 11:06  ·  广西 | 显示全部楼层
好高森啊,看不懂
该用户已被禁言

精华
0
帖子
135
威望
0 点
积分
135 点
种子
5 点
注册时间
2003-12-1
最后登录
2020-5-1
发表于 2015-1-12 11:34  ·  上海 | 显示全部楼层
赞的,学习!感谢大神

精华
0
帖子
100
威望
0 点
积分
111 点
种子
12 点
注册时间
2004-8-8
最后登录
2024-1-6
发表于 2015-8-5 19:16  ·  河北 来自手机 | 显示全部楼层
这篇务必研习,一切的基础。太赞的文章!
想后期重建系统,重建菜单,修复不能播放的原盘,破解区码,一切的一切,都从这篇开始。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|A9VG电玩部落 川公网安备 51019002005286号

GMT+8, 2024-11-25 10:52 , Processed in 0.197700 second(s), 14 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部