该文档的所有命名均来自泄露的黑白2源码,仅供参考,小心出警
一些公用的类型:
相机移动类型,一共有三种类型:
0 = BTLEFF_CAMERA_MOVE_DIRECT 直接将坐标设置指定的位置,没有任何动画使用该类型
1 = BTLEFF_CAMERA_MOVE_INTERPOLATION 插值移动,会从当前坐标平滑移动到指定的位置
2 = BTLEFF_CAMERA_MOVE_INTERPOLATION_RELATIVITY 同插值移动,相对性的,参数的值可以不是指定的位置 而是以当前位置增减
注意:并不是所有的命令都能使用这三种类型,请注意文档里的注释,没有提示无法使用哪种参数的命令才能使用以上所有的移动类型
正交投影:图片不会根据摄像机的位置缩放,如下
透视投影:图片根据摄像机的位置缩放
将相机移动到指定的对象位置
参数:type,move_pos, frame, wait, brake
type:相机移动类型,无法使用BTLEFF_CAMERA_MOVE_INTERPOLATION_RELATIVITY
move_pos:移动到的目标位置
frame:当相机类型为INTERPOLATION时,指定到达目标位置所需的帧数
wait:移动等待时间
brake:指定开始减速的帧数
很常用的指令,通常用于技能动画的开头,将镜头移动并聚焦到某只宝可梦身上
例子:将正在乱动的摄像机移动并固定到被技能攻击的防御方,并从第8帧开始运动速度变慢:
CAMERA_MOVE( BTLEFF_CAMERA_MOVE_INTERPOLATION, BTLEFF_CAMERA_POS_DEFENCE, 16, 0, 8 );
将相机移动到指定的位置,不同于CAMERA_MOVE,该命令的目标位置是坐标而不是宝可梦对象.
参数:type, pos_x, pos_y, pos_z, tar_x, tar_y, tar_z, frame, wait, brake
type:相机移动类型
pos_x:移动到的X坐标,浮点数
pos_y:移动到的Y坐标,浮点数
pos_z:移动到的Z坐标,浮点数
tar_x:目标点X坐标,浮点数
tar_y:目标点Y坐标,浮点数
tar_z:目标点Z坐标,浮点数
frame:当相机类型为INTERPOLATION时,指定到达目标位置所需的帧数
wait:移动等待时间
brake:指定开始减速的帧数
通常配合BTLEFF_CAMERA_MOVE_INTERPOLATION_RELATIVITY运动类型改变相机的当前位置
比如当相机聚焦到某一只宝可梦身上后以该宝可梦的位置为起始点进行移动:
例子:19号技能飞翔技能动画,此时的摄像机在攻击方,以当前坐标为相对位置将相机的Y轴每一帧递增10一共运行12帧,达到将摄像机向上方移动的效果
CAMERA_MOVE_COODINATE( BTLEFF_CAMERA_MOVE_INTERPOLATION_RELATIVITY, 0, 0, 0, 0, FX32_CONST(10.0), 0, 12, 0, 10 );
将相机移动到指定的球坐标系,由于原版宠物战斗时只有正面或者反面,控制角度时宠物图片会很怪异,所以技能动画里没有任何使用该命令的动画 不是很详细
参数:type,angle_phi, angle_theta, frame, wait, brake
type:相机移动类型,无法使用BTLEFF_CAMERA_MOVE_INTERPOLATION_RELATIVITY
angle_phi:俯仰角,即相机在垂直方向上的角度。浮点数
angle_theta:方位角,即相机在水平面上的角度。浮点数
frame:当相机类型为INTERPOLATION时,指定到达目标位置所需的帧数
wait:移动等待时间
brake:指定开始减速的帧数
请自行探索
CAMERA_MOVE_ANGLE( BTLEFF_CAMERA_MOVE_INTERPOLATION, FX32_CONST(3.0), FX32_CONST(3.0), 16, 0, 8 );
相机震动效果
参数:dir, value, offset, frame, wait, count
dir:晃动的方向类型
value:震动幅度,浮点数
offset:每次震动的偏移量,浮点数,占了个位置但是代码里没用上
frame:每多少帧震动一次
wait:每帧等待的时间
count:震动的次数
摄像机以每帧0.4的振幅在垂直方向抖动
CAMERA_SHAKE( BTLEFF_CAMERA_SHAKE_VERTICAL, FX32_CONST(0.4), 0, 1, 0, 8 );
相机的投影模式(正交投影或透视投影)的切换
参数:type, pos
type:类型
pos:对象
切换相机的正交投影和透视投影
不确定该命令是否有这种效果,目前暂时没测试出来
BTLEFF_CAMERA_PROJECTION_ORTHO 正交投影
BTLEFF_CAMERA_PROJECTION_PERSPECTIVE 透视投影
保存当前相机的坐标位置,如果之前有保存的坐标会被覆盖
无参数
通常配合相机目标类型的BTLEFF_CAMERA_POS_PUSH使用,原版没有使用该命令的技能动画 自行测试
加载粒子文件,播放粒子动画前必备的命令,单个动画里能加载的最大粒子文件数量为16,单个粒子文件里的最大粒子动画数量为16
参数:dataID
dataID:粒子文件的编号
加载并初始化粒子文件,粒子文件可以使用nitro effect maker查看和修改(a/0/0/6),配合PARTICLE_PLAY命令可以达到播放粒子动画的效果,所有加载的粒子文件会在END指令里销毁释放,无需手动清除,文件编号将作为后续播放粒子的一个标志
播放粒子动画
参数:num, index, start_pos, dir_pos, ofs_y, dir_angle, dummy, radius, life, scale, speed
num:粒子文件的编号,用PARTICLE_LOAD加载过的文件编号
index:粒子文件里的粒子动画编号
start_pos:发射器位置
dir_pos:目标方向位置
ofs_y:y坐标。浮点数
dir_angle:发射器方向角度。浮点数
dummy:空,默认为0 没任何作用
radius:粒子发射器的半径,决定粒子生成的范围。浮点数,默认为1.0
life:粒子的生命周期,决定粒子存在的时间。浮点数,默认为1.0
scale:粒子的缩放比例,决定粒子的大小。浮点数,默认为1.0
speed:粒子的速度,决定粒子的移动速度。浮点数,默认为1.0
最常用的粒子播放命令,从已经加载的粒子文件里在指定对象的位置向目标对象位置播放指定的粒子动画,通常默认的控制模式下不会等待粒子播放结束,而是继续后面的命令,所以可以多个动画组合播放,也可以配合EFFECT_END_WAIT( BTLEFF_EFFENDWAIT_ALL );命令等待播放结束后再继续后面的命令
在播放前请尽量保证摄像机位置和播放粒子的对象位置相同,否则可能出现粒子在宝可梦后面播放的错误
当目标对象位置为BTLEFF_PARTICLE_PLAY_SIDE_NONE时,目标位置等于播放位置
例子:加载一堆乱七八糟的效果,并同时播放
CAMERA_MOVE( BTLEFF_CAMERA_MOVE_INTERPOLATION, BTLEFF_CAMERA_POS_DEFENCE, 16, 0, 8 );
EFFECT_END_WAIT( BTLEFF_EFFENDWAIT_ALL );
PARTICLE_LOAD( 151 );
PARTICLE_LOAD( 166 );
PARTICLE_LOAD( 169 );
PARTICLE_LOAD( 239 );
PARTICLE_PLAY( 239, 0, MOVE_ANIM_PARTICLE_PLAY_SIDE_DEFENCE, MOVE_ANIM_PARTICLE_PLAY_SIDE_NONE, FX32_CONST(2.0), 0,
0, FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0) );
PARTICLE_PLAY( 169, 0, MOVE_ANIM_PARTICLE_PLAY_SIDE_DEFENCE, MOVE_ANIM_PARTICLE_PLAY_SIDE_NONE, FX32_CONST(2.0), 0,
0, FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0) );
PARTICLE_PLAY( 166, 1, MOVE_ANIM_PARTICLE_PLAY_SIDE_DEFENCE, MOVE_ANIM_PARTICLE_PLAY_SIDE_NONE, FX32_CONST(2.0), 0,
0, FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0) );
PARTICLE_PLAY( 151, 0, MOVE_ANIM_PARTICLE_PLAY_SIDE_DEFENCE, MOVE_ANIM_PARTICLE_PLAY_SIDE_NONE, FX32_CONST(2.0), 0,
0, FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0) );
EFFECT_END_WAIT( BTLEFF_EFFENDWAIT_ALL );
END();
播放粒子动画
参数:num, index, start_pos_x, start_pos_y, start_pos_z, dir_pos_x, dir_pos_y, dir_pos_z, ofs_y, dir_angle,dummy,radius, life, scale,speed
num:粒子文件的编号,用PARTICLE_LOAD加载过的文件编号
index:粒子文件里的粒子动画编号
start_pos_x:发射器的X位置,浮点数
start_pos_y:发射器的Y位置,浮点数
start_pos_z:发射器的Z位置,浮点数
dir_pos_x:目标方向的X位置,浮点数
dir_pos_y:目标方向的Y位置,浮点数
dir_pos_z:目标方向的Z位置,浮点数
ofs_y:y坐标。浮点数
dir_angle:发射器方向角度。浮点数
dummy:空,默认为0 没任何作用
radius:粒子发射器的半径,决定粒子生成的范围。浮点数,默认为1.0
life:粒子的生命周期,决定粒子存在的时间。浮点数,默认为1.0
scale:粒子的缩放比例,决定粒子的大小。浮点数,默认为1.0
speed:粒子的速度,决定粒子的移动速度。浮点数,默认为1.0
与PARTICLE_PLAY相同,在指定的位置播放粒子而不是指定的对象位置
例子:灭亡之歌的粒子效果
CAMERA_MOVE_COODINATE( BTLEFF_CAMERA_MOVE_INTERPOLATION_RELATIVITY, FX32_CONST(3.0), 0, FX32_CONST(3.0), 0, 0, 0, 32, 0, 28 );
PARTICLE_LOAD( 365 );
PARTICLE_PLAY_COORDINATE( 365, 1, 0, FX32_CONST(5.0), 0, 0, 0, 0, 0, 0, 0, FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.1999), FX32_CONST(1.0) );
PARTICLE_PLAY_COORDINATE( 365, 0, 0, FX32_CONST(4.0), 0, 0, 0, 0, 0, 0, 0, FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0) );
PARTICLE_PLAY_COORDINATE( 365, 2, 0, FX32_CONST(4.0), 0, 0, 0, 0, 0, 0, 0, FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0) );
PARTICLE_PLAY_COORDINATE( 365, 3, 0, FX32_CONST(4.0), 0, 0, 0, 0, 0, 0, 0, FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0) );
EFFECT_END_WAIT( BTLEFF_EFFENDWAIT_ALL );
播放粒子动画
参数:num, index, start_pos, dir, ofs_x, ofs_y, ofs_z, radius, life, scale, speed
num:粒子文件的编号,用PARTICLE_LOAD加载过的文件编号
index:粒子文件里的粒子动画编号
start_pos:发射器的位置
dir:目标位置
ofs_x:粒子播放偏移量X,浮点数
ofs_y:粒子播放偏移量Y,浮点数
ofs_z:粒子播放偏移量Z,浮点数
radius:粒子发射器的半径,决定粒子生成的范围。浮点数,默认为1.0
life:粒子的生命周期,决定粒子存在的时间。浮点数,默认为1.0
scale:粒子的缩放比例,决定粒子的大小。浮点数,默认为1.0
speed:粒子的速度,决定粒子的移动速度。浮点数,默认为1.0
与PARTICLE_PLAY相同,当发射器位置为BTLEFF_PARTICLE_PLAY_SIDE_ATTACKOFS时关闭正交投影?不是很懂这个的具体效果,自行测试,可能是开关宝可梦图像根据摄像机位置缩放
播放粒子动画
参数:num, start_pos, dir_pos, ofs_y, dir_angle, proj, radius, life, scale, speed
num:粒子文件的编号,用PARTICLE_LOAD加载过的文件编号
start_pos:发射器的位置
dir_pos:目标位置
ofs_y:粒子播放y坐标,浮点数
dir_angle:方向角度,浮点数
proj:正交投影开关
radius:粒子发射器的半径,决定粒子生成的范围。浮点数,默认为1.0
life:粒子的生命周期,决定粒子存在的时间。浮点数,默认为1.0
scale:粒子的缩放比例,决定粒子的大小。浮点数,默认为1.0
speed:粒子的速度,决定粒子的移动速度。浮点数,默认为1.0
与PARTICLE_PLAY相同,在指定的位置按顺序同时播放加载的粒子文件里的所有的粒子动画
例子:
CAMERA_MOVE_COODINATE( BTLEFF_CAMERA_MOVE_INTERPOLATION_RELATIVITY, FX32_CONST(3.0), 0, FX32_CONST(3.0), 0, 0, 0, 32, 0, 28 );
PARTICLE_LOAD( 365 );
PARTICLE_PLAY_ALL( 365, MOVE_ANIM_PARTICLE_PLAY_SIDE_ATTACK, MOVE_ANIM_PARTICLE_PLAY_SIDE_NONE, FX32_CONST(2.0), 0,
0, FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0) );
EFFECT_END_WAIT( BTLEFF_EFFENDWAIT_ALL );
PARTICLE_LOAD( 377 );
PARTICLE_PLAY_ALL( 377, MOVE_ANIM_PARTICLE_PLAY_SIDE_DEFENCE, MOVE_ANIM_PARTICLE_PLAY_SIDE_NONE, FX32_CONST(2.0), 0,
0, FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0), FX32_CONST(1.0) );
EFFECT_END_WAIT( BTLEFF_EFFENDWAIT_ALL );
END();
移除粒子加载过的文件
参数:num
num:粒子文件的编号,用PARTICLE_LOAD加载过的文件编号
清除加载过的指定粒子文件,释放内存
播放粒子动画,并且让发射器运动
参数:num, index, move_type, start_pos, end_pos, ofs_y, move_frame, top, life, speed, wave
num:粒子文件的编号,用PARTICLE_LOAD加载过的文件编号
index:粒子文件里的粒子动画编号
move_type:运动类型
start_pos:开始位置
end_pos:结束位置
ofs_y:y坐标,浮点数
move_frame:移动帧数
top:抛物线顶点(仅抛物线时有效),浮点数
life:粒子的生命周期,决定粒子存在的时间。浮点数
speed:粒子的速度,决定粒子的移动速度。浮点数
wave:波次数(仅波动时有效)
效果同PARTICLE_PLAY系列命令,不同的是发射器不是固定位置的而是会运动
当粒子动画里勾选了跟随发射器运动(Particle follow emitter)时粒子会跟随运动
注意:不同的类型对粒子动画的参数有所要求,请参考原版调整
例子:发射器以抛物线的方式运动
PARTICLE_LOAD( 216 );
EMITTER_MOVE( 216, 1, 2, BTLEFF_CAMERA_POS_ATTACK, BTLEFF_CAMERA_POS_DEFENCE,
FX32_CONST(2.0), FX32_CONST(20.0), FX32_CONST(1.5), FX32_CONST(1.0), FX32_CONST(1.0), 0 );
WAIT( 50 );
1 条评论
来学习技术了