游戏立绘的制作全过程(眨眼动口型复杂版)
后附KAG指令全封包(20100804) by: Tranpol
本文的难度= =。。。
技术算是勉强成熟(要懂点KAG的人才吃的透)
俺的讲解应该说是很基础的(就是面向还不是很懂KRKR的受众)
其实只要懂些原理和如何去用就行了
我中文封装系统都会包装好的= =
不用纠结的太深的= =
===
首先要感谢华丽丽的画师鬼九音同学
这次用来做演示的立绘模特就是鬼九音画的巫师
===
俺的游戏要求是
所有的立绘都有眨眼和对话时有动口型的小动画的
立绘的表情也是按这个基础去做的
立绘的眉眼嘴都是分层的
PS打开成品立绘的PSD
把所有的表情去掉保存为立绘的底PNG
尺寸的话请事先按游戏需要调好大小
我的游戏立绘格式为按宽800高不限
空的地方PNG格式也不会多加多少空间
(我的游戏是按左上角这个点来定立绘显示XY位置的
还有另一种立绘显示格式
就是切好半身像
游戏自动底边对齐
这个我这里就先不说了)
用鼠标在要切的表情的左上角停留
可以在信息里看到座标
图1
估算成整数
就把表情的位置定为X300Y150
(如果信息里不是像素
可以在编辑-》首选项-》单位与标尺里面调整)
图2
就把表情的位置定为X300Y150
(如果信息里不是像素
可以在编辑-》首选项-》单位与标尺里面调整)
图2
按CTRL+ALT+C打开画布大小
把图的实际像素尺寸减去刚才的定位XY
就是
X-300
Y-150
定位定在右下角
确认
图3
把图的实际像素尺寸减去刚才的定位XY
就是
X-300
Y-150
定位定在右下角
确认
图3
然后再次打开画布大小
这次的立绘表情尺寸定200x200像素
确认
图4
这次的立绘表情尺寸定200x200像素
确认
图4
Paragraph. 单击此处进行编辑.
把立绘的底图层隐藏
表情请一个个分开保存为PNG
就是每种眉每种眼每种嘴都分开保存为一个PNG文件
图6,图7
表情请一个个分开保存为PNG
就是每种眉每种眼每种嘴都分开保存为一个PNG文件
图6,图7
都保存好
就可以开始拼装了=
=
我定的格式为
第一行是眉
第二行是眼
第三行是嘴
第四行是各种表情特效
拼装好是这个样子的= =
图8
就可以开始拼装了=
=
我定的格式为
第一行是眉
第二行是眼
第三行是嘴
第四行是各种表情特效
拼装好是这个样子的= =
图8
另附送一个PS的动作
BRSBOX:
http://www.brsbox.com/filebox/down/fc/44bd934c98eaa70d7bf8def11a7a29a4
RAYFILE下载地址:
(以前的文件少了表情开始= =不过了解如何运作的话复制一下就行了)
http://www.rayfile.com/zh-cn/files/ebc8c261-9fd9-11df-acdf-0015c55db73d/
具体过程可以打来这个动作看一下
在PS里有透明像素的粘贴会自动中心对齐= =
所以每个表情贴时我都在图片的左上角和右下角事先点上艳绿色的点
再表情全都贴完后再全并层再用颜色范围把艳绿色去掉就行了
这个动作俺可拼了好久TWT
请注意你一行是不是有这么多的图片
我的动作是一行有6个左右的图片
如果没有这么多图片要拼的话
请把多余的动作勾取消了= =
否则会出错的
如果比6个表情还多的话
还有一个动作是表情开始
然后手动用选区选中地方贴就好啦
好了到这里立绘的图片就处理完毕~~
==========
接下来俺就说下游戏里面是咋用到的
不做KRKR游戏的同学就不用看下去了= =
呃我说的非常非常之基础
以原理为主
图9
BRSBOX:
http://www.brsbox.com/filebox/down/fc/44bd934c98eaa70d7bf8def11a7a29a4
RAYFILE下载地址:
(以前的文件少了表情开始= =不过了解如何运作的话复制一下就行了)
http://www.rayfile.com/zh-cn/files/ebc8c261-9fd9-11df-acdf-0015c55db73d/
具体过程可以打来这个动作看一下
在PS里有透明像素的粘贴会自动中心对齐= =
所以每个表情贴时我都在图片的左上角和右下角事先点上艳绿色的点
再表情全都贴完后再全并层再用颜色范围把艳绿色去掉就行了
这个动作俺可拼了好久TWT
请注意你一行是不是有这么多的图片
我的动作是一行有6个左右的图片
如果没有这么多图片要拼的话
请把多余的动作勾取消了= =
否则会出错的
如果比6个表情还多的话
还有一个动作是表情开始
然后手动用选区选中地方贴就好啦
好了到这里立绘的图片就处理完毕~~
==========
接下来俺就说下游戏里面是咋用到的
不做KRKR游戏的同学就不用看下去了= =
呃我说的非常非常之基础
以原理为主
图9
把巫师立绘的底和表情图片CO到游戏目录下
表情图片重命名为巫师表情_a.png
文件名_a是KRKR里面asd动画的必需格式
巫师表情.png这个文件用了立绘的大小的空的透明PNG
(就是把那张立绘底的图片里内容全删了另存=
=。。。全黑是WIN显示问题并不是一张黑图)
再做个叫做巫师表情.asd的动画文件(可用TXT软件做好改后缀名)
这里要先说一下思路和要点
KRKR可以自由控制asd小动画的播放标签
也就是你什么时候要什么样的小动画
就跳到你写的那栏标签去就行了
平时眉和嘴是不动的
只有眼有眨眼小动画
和在对话时要动口型动画
对话框里的字都弹完了
人物的口型也就停下来了
一个人物底的话(就是没有动作变化的就为一个人物底)
上面的所有表情最后做成一个表情文件
这个比较好管理
就算不同的人物底(就是一人物多动作的话)
也可以共用一个表情表的= =。。。。
这里先说下表情的分配
比如说
我拼好表情
把立绘的表情编了个号
;11眉4失望 12眉3生气 13眉2惊讶
14眉1普通
;21眼5 22眼4 23眼3 24眼2 25眼1
;31嘴严肃2 32嘴严肃1 33嘴笑3 34嘴笑2 35嘴笑1
36嘴生气
;41脸红 42黑线
11就是第一行第一个的意思
以下以此类推
;▽巫师表情[胸有成竹的表情]=眼睛3+嘴笑2+眉毛1
这个是九音亲的表情组合
游戏里其实就是……
;▽巫师表情[胸有成竹的表情]=23+34+14
………………现在看上去真的很像游戏密技发招表啊= =…………远目
在游戏中打的中文指令为
[立绘 巫师 表情=胸有成竹的表情]
然后那个封包里
如果表情是胸有成竹的表情的话就
@eval
exp="f.巫师眉='14',f.巫师眼='23',f.巫师嘴='34'"
f.XXX就是存档变量的意思
因为要保证关了游戏重读存档立绘还是能动不出错=
=
就用到了可以存档的变量
以一号立绘来说
我定的图层为
1号立绘
6立绘底/7眉/8眼/9嘴
共四个图层
就是6号图层读的是巫师.png
7号~9号图层读的都是巫师表情.png
图片与asd动画文件必须是一样的名字才可以使用
比如说
巫师表情.png
巫师表情.asd
在游戏脚本中用animstart指令来控制跳到asd里哪个动画标签
动画可以分seg就是通道
把他理解为和图层一样有层数就行了
这样游戏画面就能同时放在同一个asd文件里的不同小动画了
一个动画层只能放一个动画
叠加无效=
=。。。。这个俺试了很久OTL。。。。
@animstart layer=9 page=fore seg=3 target=*嘴
layer=9图层编号是9
page=fore 显示层在表层
seg=3 动画图层是3
target=*嘴 跳到叫嘴的标签去
然后跳到刚才的说的巫师表情.asd来看下是如何写的吧
巫师表情.asd一开始的几行可以打上
*start
[s]
就是如果正常读这个动画文件的话
到了[s]这里就会停下来不动了
这时就要用animstart指令来启动下面不同的动画
===
*眉
@loadcell
@loop
@if exp="f.巫师眉=='11'"
@eval
exp="tf.巫师眉x=0,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='12'"
@eval
exp="tf.巫师眉x=200,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='13'"
@eval
exp="tf.巫师眉x=400,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='14'"
@eval
exp="tf.巫师眉x=600,tf.巫师眉y=0"
@endif
@copy dx=300 dy=150 sx=&tf.巫师眉x
sy=&tf.巫师眉y sw=200 sh=200
[s]
@loadcell
@loop
这两个指令不用管他
只要知道一开始必须要打的就行了= =
这一小段的意思就是
一开始分辩下是哪种的眉=
=
然后告诉他要去图片的哪个座标找
因为是200x200的豆腐干
所以方位很好算的XD
@if是如果的意思
==(这是两个等于符号= =|||不是俺的表情符号)就是问系统两边的值是不是一样?
如果一样?
就会把@if
后面的东东执行一遍后直接跳到@endif结束
如果不是?
跳到@elsif看条件是不是一样= =
以此类推直到@endif
tf.XXX是临时变量
就是游戏关了以后就会消失的变量
也不能保存在存档里
dx=300就是在大图片巫师表情.png的位置X
dy=150就是在大图片的位置Y
sx与sy就是表情豆腐干图片巫师表情_a.png的xy座标了
sw=200
sh=200是这个表情豆腐干要宽多少高多少
sx=&tf.巫师眉x
在指令赋值时
前面的&符号一定要打
就是把这个变量变成游戏能认识的=
=
这么理解就行了
最后也是用[s]来结尾
眉不用动画的
读完图就可以停了
===
*眼
@loadcell
@loop
@if exp="f.巫师眼=='21'"
@eval
exp="tf.巫师眼x=0,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='22'"
@eval
exp="tf.巫师眼x=200,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='23'"
@eval
exp="tf.巫师眼x=400,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='24'"
@eval
exp="tf.巫师眼x=600,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='25'"
@eval
exp="tf.巫师眼x=800,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='26'"
@eval
exp="tf.巫师眼x=1000,tf.巫师眼y=200"
@endif
*眼开始
@copy dx=300 dy=150
sx=&tf.巫师眼x sy=&tf.巫师眼y sw=200 sh=200
@wait time=150
@if
exp="f.巫师眼=='22'||f.巫师眼=='23'"
@jump target=*眼结束
@endif
@eval
exp="tf.rand = intrandom(2000, 5000)"
@wait time=&tf.rand
@eval
exp="tf.眨眼 = intrandom(1, 3)"
@jump target=&('*'+tf.眨眼)
*1
@copy
dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300
dy=150 sx=400 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150
sx=1000 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150
sx=&tf.巫师眼x sy=&tf.巫师眼y sw=200 sh=200
@wait time=150
@copy dx=300
dy=150 sx=1000 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150
sx=400 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=1000
sy=200 sw=200 sh=200
@wait time=150
@jump target=*眼开始
*2
@copy
dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300
dy=150 sx=400 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150
sx=1000 sy=200 sw=200 sh=200
@wait time=150
@jump
target=*眼开始
*3
@copy dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait
time=150
@copy dx=300 dy=150 sx=400 sy=200 sw=200 sh=200
@wait
time=500
@copy dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait
time=150
@jump target=*眼开始
*眼结束
[s]
@wait
time=150
就是每一帧等待的时间了
毫秒为单位
1000毫秒=1秒
150毫秒就是0.15秒
这个就看你要的动画精度了
好的动画片是一秒24帧
日本动画12/秒
不过你既然不是专业的
0.15秒一秒7帧左右也差不多了=
=
@if exp="f.巫师眼=='22'||f.巫师眼=='23'"
@jump
target=*眼结束
@endif
就是在闭眼OR笑的时候不用眨眼= =
这时眨眼就是眼抽了= =。。。。。
||这个符号就是或的意思
&&是并且的意思
@jump target=*眼结束
就是跳到标签名字叫眼结束的标签= =
眼这里就是眨眼小动画了
用了乱数来让眨眼自然一点intrandom(2000, 5000)
@eval exp="tf.rand =
intrandom(2000, 5000)"
@eval把他理解为计算器就行了= =
他会把右边的公式值算出来赋值给左边的变量
@jump
target=&('*'+tf.眨眼)
这里的&('*'+tf.眨眼)就是变量与不是变量的字符写在一起的方式
记住就行了=
=
每个眨眼小动画结束后跳回到开始循环
这样。。。。眼就可以一直眨下去了= =~~永不疲倦~~
小动画过程啥的我就不说了
每个人都有自已做动画的一套方式
===
*嘴与*眉一样的内容
跳过= =
*嘴动画
@loadcell
@loop
@if exp="f.巫师嘴=='31'"
@eval
exp="tf.巫师嘴x=0,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='32'"
@eval
exp="tf.巫师嘴x=200,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='33'"
@eval
exp="tf.巫师嘴x=400,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='34'"
@eval
exp="tf.巫师嘴x=600,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='35'"
@eval
exp="tf.巫师嘴x=800,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='36'"
@eval
exp="tf.巫师嘴x=1000,tf.巫师嘴y=400"
@endif
*嘴动画开始
@eval exp="tf.说话 = intrandom(1, 4)"
@jump target=&('*嘴'+tf.说话)
*嘴1
@copy dx=300 dy=150 sx=0 sy=400
sw=200 sh=200
@wait time=150
@jump target=*嘴动画开始
*嘴2
@copy dx=300
dy=150 sx=400 sy=400 sw=200 sh=200
@wait time=150
@jump
target=*嘴动画开始
*嘴3
@copy dx=300 dy=150 sx=600 sy=400 sw=200
sh=200
@wait time=150
@jump target=*嘴动画开始
*嘴4
@copy dx=300 dy=150
sx=&tf.巫师嘴x sy=&tf.巫师嘴y sw=200 sh=200
@wait time=150
@jump
target=*嘴动画开始
嘴动画这里一样用了乱数
这样口型动画不会死板
第四张嘴用了人物当前表情的嘴
这样更能符合当前表情的神态
===
asd文件就讲完了
再去说一下游戏脚本时是如何用的
在读[立绘]指令时
把表情动画启动
@animstart layer=7 page=fore seg=1
target=*眉
@animstart layer=8 page=fore seg=2 target=*眼
@animstart layer=9
page=fore seg=3 target=*嘴
在对话时[对话立绘指令]启动嘴动画
@animstart layer=7 page=fore seg=1
target=*眉
@animstart layer=8 page=fore seg=2 target=*眼
@animstart layer=9
page=fore seg=3 target=*嘴动画
这时对话弹字时人物口型就是有动画的了
[对话立绘 巫师 表情=温和的微笑]
………………………………[tp]
弹字完毕会跳到[tp]指令
这时就会
@animstart layer=9 page=fore seg=3
target=*嘴
跳回到不动的嘴标签那里
好了
以上~~~~
这就是一个游戏人物的制作诞生过程= =。。。。。远目
===
下面贴上封包的全指令仅供参考= =
深的地方我就不讲解了
你其实只要懂如何用中文指令去用就行了= =
还有表情可以用实心的图来做
方法差不多的
这里就不啰嗦了
===
[macro name=巫师]
@if exp="mp.表情=='胸有成竹的表情'"
@eval
exp="f.巫师眉='14',f.巫师眼='23',f.巫师嘴='34'"
@elsif exp="mp.表情=='正常正经'"
@eval
exp="f.巫师眉='14',f.巫师眼='25',f.巫师嘴='32'"
@elsif exp="mp.表情=='正常正经微笑'"
@eval
exp="f.巫师眉='14',f.巫师眼='25',f.巫师嘴='35'"
@elsif
exp="mp.表情=='非常非常正常正经'"
@eval
exp="f.巫师眉='14',f.巫师眼='24',f.巫师嘴='32'"
@elsif
exp="mp.表情=='非常非常正常正经的微笑'"
@eval
exp="f.巫师眉='14',f.巫师眼='22',f.巫师嘴='35'"
@elsif
exp="mp.表情=='正经有点陶醉的传教中……'"
@eval
exp="f.巫师眉='13',f.巫师眼='23',f.巫师嘴='33'"
@elsif exp="mp.表情=='小小的小吃惊'"
@eval
exp="f.巫师眉='13',f.巫师眼='21',f.巫师嘴='32'"
@elsif exp="mp.表情=='失望'"
@eval
exp="f.巫师眉='11',f.巫师眼='23',f.巫师嘴='31'"
@elsif exp="mp.表情=='哦想起什么'"
@eval
exp="f.巫师眉='13',f.巫师眼='21',f.巫师嘴='31'"
@elsif exp="mp.表情=='温和的微笑'"
@eval
exp="f.巫师眉='14',f.巫师眼='24',f.巫师嘴='35'"
@elsif exp="mp.表情=='……'"
@eval
exp="f.巫师眉='14',f.巫师眼='24',f.巫师嘴='32'"
@elsif exp="mp.表情=='小小的不愉快'"
@eval
exp="f.巫师眉='14',f.巫师眼='24',f.巫师嘴='32'"
@endif
[endmacro]
[macro name=立绘]
@if exp="mp.巫师"
@巫师 *
@eval
exp="mp.眉=f.巫师眉"
@eval exp="mp.眼=f.巫师眼"
@eval exp="mp.嘴=f.巫师嘴"
@eval
exp="mp.文件='巫师'"
@eval exp="mp.表情文件=mp.文件+'表情'"
@eval
exp="mp.表情位置x=300,mp.表情位置y=150"
@eval exp="mp.名='巫师'"
@endif
@if
exp="mp.近"
@eval exp="mp.x=0,mp.y=0,mp.大小=100"
@elsif exp="mp.远"
@eval
exp="mp.x=200,mp.y=100,mp.大小=40"
@else
@eval
exp="mp.x=140,mp.y=30,mp.大小=60"
@endif
;位置
[eval exp="mp.x=mp.x-200"
cond="mp.位置 == '左'"]
[eval exp="mp.x=mp.x-100" cond="mp.位置 ==
'偏左'"]
[eval exp="mp.x=mp.x+100" cond="mp.位置 == '偏右'"]
[eval
exp="mp.x=mp.x+200" cond="mp.位置 == '右'"]
[eval exp="mp.x=mp.x-200"
cond="mp.左"]
[eval exp="mp.x=mp.x-100" cond="mp.偏左"]
[eval
exp="mp.x=mp.x+100" cond="mp.偏右"]
[eval exp="mp.x=mp.x+200"
cond="mp.右"]
@eval exp="mp.编号='1'" cond="mp.编号==void"
[eval
exp="mp.图层编号=6" cond="mp.编号=='1'"]
[eval exp="mp.图层编号=10"
cond="mp.编号=='2'"]
[eval exp="mp.图层编号=14" cond="mp.编号=='3'"]
@if
exp="f.立绘号1表情==true&&mp.编号=='1'||f.立绘号2表情==true&&mp.编号=='2'||f.立绘号3表情==true&&mp.编号=='3'"
@animstart
layer=&mp.图层编号+1 page=fore seg=&mp.编号*1 target=*眉
@animstart
layer=&mp.图层编号+2 page=fore seg=&mp.编号*2 target=*眼
@animstart
layer=&mp.图层编号+3 page=fore seg=&mp.编号*3 target=*嘴
@else
[image
storage=%文件 layer=&mp.图层编号 page=fore visible=true opacity=0 left=%x top=%y
zoom=%大小]
@if exp="mp.表情文件!=void"
@eval
exp="mp.表情文件a=mp.表情文件+'_a'"
@eval exp="mp.x2=0,mp.y2=0"
cond="mp.眉=='11'"
@eval exp="mp.x2=200,mp.y2=0" cond="mp.眉=='12'"
@eval
exp="mp.x2=400,mp.y2=0" cond="mp.眉=='13'"
@eval exp="mp.x2=600,mp.y2=0"
cond="mp.眉=='14'"
@eval exp="mp.x2=800,mp.y2=0" cond="mp.眉=='15'"
@eval
exp="mp.x2=1000,mp.y2=0" cond="mp.眉=='16'"
[pimage storage=%表情文件a
layer=&mp.图层编号 page=fore visible=true opacity=255 dx=%表情位置x dy=%表情位置y
sx=%x2 sy=%y2 sw=200 sh=200 zoom=%大小]
@eval exp="mp.x2=0,mp.y2=200"
cond="mp.眼=='21'"
@eval exp="mp.x2=200,mp.y2=200" cond="mp.眼=='22'"
@eval
exp="mp.x2=400,mp.y2=200" cond="mp.眼=='23'"
@eval exp="mp.x2=600,mp.y2=200"
cond="mp.眼=='24'"
@eval exp="mp.x2=800,mp.y2=200" cond="mp.眼=='25'"
@eval
exp="mp.x2=1000,mp.y2=200" cond="mp.眼=='26'"
[pimage storage=%表情文件a
layer=&mp.图层编号 page=fore visible=true opacity=255 dx=%表情位置x dy=%表情位置y
sx=%x2 sy=%y2 sw=200 sh=200 zoom=%大小]
@eval exp="mp.x2=0,mp.y2=400"
cond="mp.嘴=='31'"
@eval exp="mp.x2=200,mp.y2=400" cond="mp.嘴=='32'"
@eval
exp="mp.x2=400,mp.y2=400" cond="mp.嘴=='33'"
@eval exp="mp.x2=600,mp.y2=400"
cond="mp.嘴=='34'"
@eval exp="mp.x2=800,mp.y2=400" cond="mp.嘴=='35'"
@eval
exp="mp.x2=1000,mp.y2=400" cond="mp.嘴=='36'"
[pimage storage=%表情文件a
layer=&mp.图层编号 page=fore visible=true opacity=255 dx=%表情位置x dy=%表情位置y
sx=%x2 sy=%y2 sw=200 sh=200 zoom=%大小]
@endif
[action layer=&mp.图层编号
module=LayerFadeToModeModule opacity=0 time=0]
[action layer=&mp.图层编号
module=LayerFadeToModeModule opacity=255 time=500 x=%x y=%y]
[wait
time=500]
@if exp="mp.表情文件!=void"
[image storage=%表情文件
layer=&mp.图层编号+1 page=fore visible=true opacity=255 left=%x top=%y
zoom=%大小]
[image storage=%表情文件 layer=&mp.图层编号+2 page=fore visible=true
opacity=255 left=%x top=%y zoom=%大小]
[image storage=%表情文件
layer=&mp.图层编号+3 page=fore visible=true opacity=255 left=%x top=%y
zoom=%大小]
[image storage=%文件 layer=&mp.图层编号 page=fore visible=true
opacity=255 left=%x top=%y zoom=%大小]
@animstart layer=&mp.图层编号+1
page=fore seg=&mp.编号*1 target=*眉
@animstart layer=&mp.图层编号+2
page=fore seg=&mp.编号*2 target=*眼
@animstart layer=&mp.图层编号+3
page=fore seg=&mp.编号*3 target=*嘴
@endif
@eval exp="f.立绘号1表情 = true"
cond="mp.表情文件!=void&&mp.编号=='1'"
@eval exp="f.立绘号2表情 = true"
cond="mp.表情文件!=void&&mp.编号=='2'"
@eval exp="f.立绘号3表情 = true"
cond="mp.表情文件!=void&&mp.编号=='3'"
@eval exp="f.立绘号1 =
true,f.立绘号1x=mp.x,f.立绘号1y=mp.y" cond="mp.编号=='1'"
@eval exp="f.立绘号2 =
true,f.立绘号2x=mp.x,f.立绘号2y=mp.y" cond="mp.编号=='2'"
@eval exp="f.立绘号3 =
true,f.立绘号3x=mp.x,f.立绘号3y=mp.y" cond="mp.编号=='3'"
@eval exp="f.立绘号1名=mp.名"
cond="mp.编号=='1'&&mp.名!=void"
@eval exp="f.立绘号2名=mp.名"
cond="mp.编号=='2'&&mp.名!=void"
@eval exp="f.立绘号3名=mp.名"
cond="mp.编号=='3'&&mp.名!=void"
@endif
[endmacro]
[macro
name=对话立绘]
@eval exp="mp.编号='1'" cond="mp.编号==void"
[eval exp="mp.图层编号=6"
cond="mp.编号=='1'"]
[eval exp="mp.图层编号=10" cond="mp.编号=='2'"]
[eval
exp="mp.图层编号=14" cond="mp.编号=='3'"]
@if exp="mp.巫师"
@巫师
*
@endif
@if exp="kag.fore.layers[mp.图层编号+1].visible==true"
@animstart
layer=&mp.图层编号+1 page=fore seg=&mp.编号*1 target=*眉
@endif
@if
exp="kag.fore.layers[mp.图层编号+2].visible==true"
@animstart
layer=&mp.图层编号+2 page=fore seg=&mp.编号*2 target=*眼
@endif
@if
exp="kag.fore.layers[mp.图层编号+3].visible==true"
@animstart
layer=&mp.图层编号+3 page=fore seg=&mp.编号*3
target=*嘴动画
@endif
[endmacro]
[macro name=tp]
@if
exp="kag.fore.layers[9].visible==true"
@animstart layer=9 page=fore seg=3
target=*嘴
@endif
@if
exp="kag.fore.layers[13].visible==true"
@animstart layer=13 page=fore seg=6
target=*嘴
@endif
@if
exp="kag.fore.layers[17].visible==true"
@animstart layer=17 page=fore seg=9
target=*嘴
@endif
@if
exp="kag.fore.layers[21].visible==true"
@animstart layer=21 page=fore seg=12
target=*嘴
@endif
@if
exp="kag.fore.layers[25].visible==true"
@animstart layer=25 page=fore seg=15
target=*嘴
@endif
@endif
[endmacro]
[macro name=立绘消]
@eval
exp="mp.编号='1'" cond="mp.编号==void"
[eval
exp="mp.图层编号=6,mp.x=f.立绘号1x,mp.y=f.立绘号1y" cond="mp.编号=='1'"]
[eval
exp="mp.图层编号=10,mp.x=f.立绘号2x,mp.y=f.立绘号2y" cond="mp.编号=='2'"]
[eval
exp="mp.图层编号=14,mp.x=f.立绘号3x,mp.y=f.立绘号3y" cond="mp.编号=='3'"]
[action
layer=&mp.图层编号 module=LayerFadeToModeModule opacity=0 time=500
x=&mp.x-30 y=&mp.y+20]
[action layer=&mp.图层编号+1
module=LayerFadeToModeModule opacity=0 time=500 x=&mp.x-30
y=&mp.y+20]
[action layer=&mp.图层编号+2 module=LayerFadeToModeModule
opacity=0 time=500 x=&mp.x-30 y=&mp.y+20]
[action
layer=&mp.图层编号+3 module=LayerFadeToModeModule opacity=0 time=500
x=&mp.x-30 y=&mp.y+20]
[wait time=500]
@freeimage
layer=&mp.图层编号 page=fore
@freeimage layer=&mp.图层编号+1
page=fore
@freeimage layer=&mp.图层编号+2 page=fore
@freeimage
layer=&mp.图层编号+2 page=fore
[eval
exp="f.立绘号1=void,f.立绘号1表情=void,f.立绘号1名=void,f.立绘号1x=void,f.立绘号1y=void"
cond="mp.编号=='1'"]
[eval
exp="f.立绘号2=void,f.立绘号2表情=void,f.立绘号2名=void,f.立绘号2x=void,f.立绘号2y=void"
cond="mp.编号=='2'"]
[eval
exp="f.立绘号3=void,f.立绘号3表情=void,f.立绘号3名=void,f.立绘号3x=void,f.立绘号3y=void"
cond="mp.编号=='3'"]
[endmacro]
===
巫师表情.asd(20110623版)
(因为眉和嘴会因取档问题失踪
现在的版本眉和嘴加上了刷新)
@loadcell
@loop
*start
[s]
*眉
@loadcell
@loop
@if exp="f.巫师眉=='11'"
@eval
exp="tf.巫师眉x=0,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='12'"
@eval
exp="tf.巫师眉x=200,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='13'"
@eval
exp="tf.巫师眉x=400,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='14'"
@eval
exp="tf.巫师眉x=600,tf.巫师眉y=0"
@endif
@copy dx=300 dy=150 sx=&tf.巫师眉x
sy=&tf.巫师眉y sw=200 sh=200
@wait time=150
@jump target=*眉
*眼
@loadcell
@loop
@if exp="f.巫师眼=='21'"
@eval
exp="tf.巫师眼x=0,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='22'"
@eval
exp="tf.巫师眼x=200,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='23'"
@eval
exp="tf.巫师眼x=400,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='24'"
@eval
exp="tf.巫师眼x=600,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='25'"
@eval
exp="tf.巫师眼x=800,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='26'"
@eval
exp="tf.巫师眼x=1000,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='27'"
@eval
exp="tf.巫师眼x=1200,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='28'"
@eval
exp="tf.巫师眼x=1400,tf.巫师眼y=200"
@endif
@copy dx=300 dy=150 sx=&tf.巫师眼x sy=&tf.巫师眼y sw=200 sh=200
@wait
time=150
@if exp="f.巫师眼=='22'||f.巫师眼=='23'"
@jump
target=*眼
@endif
@if exp="f.巫师眼=='27'||f.巫师眼=='28'"
@jump
target=*眼特别
@endif
@eval exp="tf.rand = intrandom(2000, 5000)"
@wait time=&tf.rand
@eval exp="tf.眨眼 = intrandom(1, 3)"
@jump target=&('*'+tf.眨眼)
*1
@copy dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait
time=150
@copy dx=300 dy=150 sx=400 sy=200 sw=200 sh=200
@wait
time=150
@copy dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait
time=150
@copy dx=300 dy=150 sx=&tf.巫师眼x sy=&tf.巫师眼y sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=1000 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=1000 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*2
@copy dx=300 dy=150 sx=1000
sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200
sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=1000 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*3
@copy dx=300 dy=150 sx=1000
sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200
sw=200 sh=200
@wait time=500
@copy dx=300 dy=150 sx=1000 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*眼特别
@eval exp="tf.rand = intrandom(2000, 5000)"
@wait
time=&tf.rand
@eval exp="tf.眨眼 = intrandom(4, 6)"
@jump
target=&('*'+tf.眨眼)
*4
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=&tf.巫师眼x sy=&tf.巫师眼y
sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*5
@copy dx=300 dy=150 sx=1400
sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200
sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*6
@copy dx=300 dy=150 sx=1400
sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200
sw=200 sh=200
@wait time=500
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*嘴
@loadcell
@loop
@if exp="f.巫师嘴=='31'"
@eval
exp="tf.巫师嘴x=0,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='32'"
@eval
exp="tf.巫师嘴x=200,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='33'"
@eval
exp="tf.巫师嘴x=400,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='34'"
@eval
exp="tf.巫师嘴x=600,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='35'"
@eval
exp="tf.巫师嘴x=800,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='36'"
@eval
exp="tf.巫师嘴x=1000,tf.巫师嘴y=400"
@endif
@copy dx=300 dy=150 sx=&tf.巫师嘴x
sy=&tf.巫师嘴y sw=200 sh=200
@wait time=150
@jump target=*嘴
*嘴动画
@loadcell
@loop
@if exp="f.巫师嘴=='31'"
@eval
exp="tf.巫师嘴x=0,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='32'"
@eval
exp="tf.巫师嘴x=200,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='33'"
@eval
exp="tf.巫师嘴x=400,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='34'"
@eval
exp="tf.巫师嘴x=600,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='35'"
@eval
exp="tf.巫师嘴x=800,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='36'"
@eval
exp="tf.巫师嘴x=1000,tf.巫师嘴y=400"
@endif
@eval exp="tf.说话 = intrandom(1, 4)"
@jump target=&('*嘴'+tf.说话)
*嘴1
@copy dx=300 dy=150 sx=0 sy=400
sw=200 sh=200
@wait time=150
@jump target=*嘴动画
*嘴2
@copy dx=300
dy=150 sx=1200 sy=400 sw=200 sh=200
@wait time=150
@jump
target=*嘴动画
*嘴3
@copy dx=300 dy=150 sx=600 sy=400 sw=200 sh=200
@wait
time=150
@jump target=*嘴动画
*嘴4
@copy dx=300 dy=150 sx=&tf.巫师嘴x
sy=&tf.巫师嘴y sw=200 sh=200
@wait time=150
@jump target=*嘴动画
*眨眼
@loadcell
@loop
@if exp="f.巫师眼=='21'"
@eval
exp="tf.巫师眼x=0,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='22'"
@eval
exp="tf.巫师眼x=200,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='23'"
@eval
exp="tf.巫师眼x=400,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='24'"
@eval
exp="tf.巫师眼x=600,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='25'"
@eval
exp="tf.巫师眼x=800,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='26'"
@eval
exp="tf.巫师眼x=1000,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='27'"
@eval
exp="tf.巫师眼x=1200,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='28'"
@eval
exp="tf.巫师眼x=1400,tf.巫师眼y=200"
@endif
@copy dx=300 dy=150 sx=&tf.巫师眼x sy=&tf.巫师眼y sw=200 sh=200
@wait
time=150
@if exp="f.巫师眼=='27'||f.巫师眼=='28'"
@jump
target=*4
@endif
@jump target=*1
*眉停
[s]
*眼停
[s]
*嘴停
[s]
表情图片重命名为巫师表情_a.png
文件名_a是KRKR里面asd动画的必需格式
巫师表情.png这个文件用了立绘的大小的空的透明PNG
(就是把那张立绘底的图片里内容全删了另存=
=。。。全黑是WIN显示问题并不是一张黑图)
再做个叫做巫师表情.asd的动画文件(可用TXT软件做好改后缀名)
这里要先说一下思路和要点
KRKR可以自由控制asd小动画的播放标签
也就是你什么时候要什么样的小动画
就跳到你写的那栏标签去就行了
平时眉和嘴是不动的
只有眼有眨眼小动画
和在对话时要动口型动画
对话框里的字都弹完了
人物的口型也就停下来了
一个人物底的话(就是没有动作变化的就为一个人物底)
上面的所有表情最后做成一个表情文件
这个比较好管理
就算不同的人物底(就是一人物多动作的话)
也可以共用一个表情表的= =。。。。
这里先说下表情的分配
比如说
我拼好表情
把立绘的表情编了个号
;11眉4失望 12眉3生气 13眉2惊讶
14眉1普通
;21眼5 22眼4 23眼3 24眼2 25眼1
;31嘴严肃2 32嘴严肃1 33嘴笑3 34嘴笑2 35嘴笑1
36嘴生气
;41脸红 42黑线
11就是第一行第一个的意思
以下以此类推
;▽巫师表情[胸有成竹的表情]=眼睛3+嘴笑2+眉毛1
这个是九音亲的表情组合
游戏里其实就是……
;▽巫师表情[胸有成竹的表情]=23+34+14
………………现在看上去真的很像游戏密技发招表啊= =…………远目
在游戏中打的中文指令为
[立绘 巫师 表情=胸有成竹的表情]
然后那个封包里
如果表情是胸有成竹的表情的话就
@eval
exp="f.巫师眉='14',f.巫师眼='23',f.巫师嘴='34'"
f.XXX就是存档变量的意思
因为要保证关了游戏重读存档立绘还是能动不出错=
=
就用到了可以存档的变量
以一号立绘来说
我定的图层为
1号立绘
6立绘底/7眉/8眼/9嘴
共四个图层
就是6号图层读的是巫师.png
7号~9号图层读的都是巫师表情.png
图片与asd动画文件必须是一样的名字才可以使用
比如说
巫师表情.png
巫师表情.asd
在游戏脚本中用animstart指令来控制跳到asd里哪个动画标签
动画可以分seg就是通道
把他理解为和图层一样有层数就行了
这样游戏画面就能同时放在同一个asd文件里的不同小动画了
一个动画层只能放一个动画
叠加无效=
=。。。。这个俺试了很久OTL。。。。
@animstart layer=9 page=fore seg=3 target=*嘴
layer=9图层编号是9
page=fore 显示层在表层
seg=3 动画图层是3
target=*嘴 跳到叫嘴的标签去
然后跳到刚才的说的巫师表情.asd来看下是如何写的吧
巫师表情.asd一开始的几行可以打上
*start
[s]
就是如果正常读这个动画文件的话
到了[s]这里就会停下来不动了
这时就要用animstart指令来启动下面不同的动画
===
*眉
@loadcell
@loop
@if exp="f.巫师眉=='11'"
@eval
exp="tf.巫师眉x=0,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='12'"
@eval
exp="tf.巫师眉x=200,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='13'"
@eval
exp="tf.巫师眉x=400,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='14'"
@eval
exp="tf.巫师眉x=600,tf.巫师眉y=0"
@endif
@copy dx=300 dy=150 sx=&tf.巫师眉x
sy=&tf.巫师眉y sw=200 sh=200
[s]
@loadcell
@loop
这两个指令不用管他
只要知道一开始必须要打的就行了= =
这一小段的意思就是
一开始分辩下是哪种的眉=
=
然后告诉他要去图片的哪个座标找
因为是200x200的豆腐干
所以方位很好算的XD
@if是如果的意思
==(这是两个等于符号= =|||不是俺的表情符号)就是问系统两边的值是不是一样?
如果一样?
就会把@if
后面的东东执行一遍后直接跳到@endif结束
如果不是?
跳到@elsif看条件是不是一样= =
以此类推直到@endif
tf.XXX是临时变量
就是游戏关了以后就会消失的变量
也不能保存在存档里
dx=300就是在大图片巫师表情.png的位置X
dy=150就是在大图片的位置Y
sx与sy就是表情豆腐干图片巫师表情_a.png的xy座标了
sw=200
sh=200是这个表情豆腐干要宽多少高多少
sx=&tf.巫师眉x
在指令赋值时
前面的&符号一定要打
就是把这个变量变成游戏能认识的=
=
这么理解就行了
最后也是用[s]来结尾
眉不用动画的
读完图就可以停了
===
*眼
@loadcell
@loop
@if exp="f.巫师眼=='21'"
@eval
exp="tf.巫师眼x=0,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='22'"
@eval
exp="tf.巫师眼x=200,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='23'"
@eval
exp="tf.巫师眼x=400,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='24'"
@eval
exp="tf.巫师眼x=600,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='25'"
@eval
exp="tf.巫师眼x=800,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='26'"
@eval
exp="tf.巫师眼x=1000,tf.巫师眼y=200"
@endif
*眼开始
@copy dx=300 dy=150
sx=&tf.巫师眼x sy=&tf.巫师眼y sw=200 sh=200
@wait time=150
@if
exp="f.巫师眼=='22'||f.巫师眼=='23'"
@jump target=*眼结束
@endif
@eval
exp="tf.rand = intrandom(2000, 5000)"
@wait time=&tf.rand
@eval
exp="tf.眨眼 = intrandom(1, 3)"
@jump target=&('*'+tf.眨眼)
*1
@copy
dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300
dy=150 sx=400 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150
sx=1000 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150
sx=&tf.巫师眼x sy=&tf.巫师眼y sw=200 sh=200
@wait time=150
@copy dx=300
dy=150 sx=1000 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150
sx=400 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=1000
sy=200 sw=200 sh=200
@wait time=150
@jump target=*眼开始
*2
@copy
dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300
dy=150 sx=400 sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150
sx=1000 sy=200 sw=200 sh=200
@wait time=150
@jump
target=*眼开始
*3
@copy dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait
time=150
@copy dx=300 dy=150 sx=400 sy=200 sw=200 sh=200
@wait
time=500
@copy dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait
time=150
@jump target=*眼开始
*眼结束
[s]
@wait
time=150
就是每一帧等待的时间了
毫秒为单位
1000毫秒=1秒
150毫秒就是0.15秒
这个就看你要的动画精度了
好的动画片是一秒24帧
日本动画12/秒
不过你既然不是专业的
0.15秒一秒7帧左右也差不多了=
=
@if exp="f.巫师眼=='22'||f.巫师眼=='23'"
@jump
target=*眼结束
@endif
就是在闭眼OR笑的时候不用眨眼= =
这时眨眼就是眼抽了= =。。。。。
||这个符号就是或的意思
&&是并且的意思
@jump target=*眼结束
就是跳到标签名字叫眼结束的标签= =
眼这里就是眨眼小动画了
用了乱数来让眨眼自然一点intrandom(2000, 5000)
@eval exp="tf.rand =
intrandom(2000, 5000)"
@eval把他理解为计算器就行了= =
他会把右边的公式值算出来赋值给左边的变量
@jump
target=&('*'+tf.眨眼)
这里的&('*'+tf.眨眼)就是变量与不是变量的字符写在一起的方式
记住就行了=
=
每个眨眼小动画结束后跳回到开始循环
这样。。。。眼就可以一直眨下去了= =~~永不疲倦~~
小动画过程啥的我就不说了
每个人都有自已做动画的一套方式
===
*嘴与*眉一样的内容
跳过= =
*嘴动画
@loadcell
@loop
@if exp="f.巫师嘴=='31'"
@eval
exp="tf.巫师嘴x=0,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='32'"
@eval
exp="tf.巫师嘴x=200,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='33'"
@eval
exp="tf.巫师嘴x=400,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='34'"
@eval
exp="tf.巫师嘴x=600,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='35'"
@eval
exp="tf.巫师嘴x=800,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='36'"
@eval
exp="tf.巫师嘴x=1000,tf.巫师嘴y=400"
@endif
*嘴动画开始
@eval exp="tf.说话 = intrandom(1, 4)"
@jump target=&('*嘴'+tf.说话)
*嘴1
@copy dx=300 dy=150 sx=0 sy=400
sw=200 sh=200
@wait time=150
@jump target=*嘴动画开始
*嘴2
@copy dx=300
dy=150 sx=400 sy=400 sw=200 sh=200
@wait time=150
@jump
target=*嘴动画开始
*嘴3
@copy dx=300 dy=150 sx=600 sy=400 sw=200
sh=200
@wait time=150
@jump target=*嘴动画开始
*嘴4
@copy dx=300 dy=150
sx=&tf.巫师嘴x sy=&tf.巫师嘴y sw=200 sh=200
@wait time=150
@jump
target=*嘴动画开始
嘴动画这里一样用了乱数
这样口型动画不会死板
第四张嘴用了人物当前表情的嘴
这样更能符合当前表情的神态
===
asd文件就讲完了
再去说一下游戏脚本时是如何用的
在读[立绘]指令时
把表情动画启动
@animstart layer=7 page=fore seg=1
target=*眉
@animstart layer=8 page=fore seg=2 target=*眼
@animstart layer=9
page=fore seg=3 target=*嘴
在对话时[对话立绘指令]启动嘴动画
@animstart layer=7 page=fore seg=1
target=*眉
@animstart layer=8 page=fore seg=2 target=*眼
@animstart layer=9
page=fore seg=3 target=*嘴动画
这时对话弹字时人物口型就是有动画的了
[对话立绘 巫师 表情=温和的微笑]
………………………………[tp]
弹字完毕会跳到[tp]指令
这时就会
@animstart layer=9 page=fore seg=3
target=*嘴
跳回到不动的嘴标签那里
好了
以上~~~~
这就是一个游戏人物的制作诞生过程= =。。。。。远目
===
下面贴上封包的全指令仅供参考= =
深的地方我就不讲解了
你其实只要懂如何用中文指令去用就行了= =
还有表情可以用实心的图来做
方法差不多的
这里就不啰嗦了
===
[macro name=巫师]
@if exp="mp.表情=='胸有成竹的表情'"
@eval
exp="f.巫师眉='14',f.巫师眼='23',f.巫师嘴='34'"
@elsif exp="mp.表情=='正常正经'"
@eval
exp="f.巫师眉='14',f.巫师眼='25',f.巫师嘴='32'"
@elsif exp="mp.表情=='正常正经微笑'"
@eval
exp="f.巫师眉='14',f.巫师眼='25',f.巫师嘴='35'"
@elsif
exp="mp.表情=='非常非常正常正经'"
@eval
exp="f.巫师眉='14',f.巫师眼='24',f.巫师嘴='32'"
@elsif
exp="mp.表情=='非常非常正常正经的微笑'"
@eval
exp="f.巫师眉='14',f.巫师眼='22',f.巫师嘴='35'"
@elsif
exp="mp.表情=='正经有点陶醉的传教中……'"
@eval
exp="f.巫师眉='13',f.巫师眼='23',f.巫师嘴='33'"
@elsif exp="mp.表情=='小小的小吃惊'"
@eval
exp="f.巫师眉='13',f.巫师眼='21',f.巫师嘴='32'"
@elsif exp="mp.表情=='失望'"
@eval
exp="f.巫师眉='11',f.巫师眼='23',f.巫师嘴='31'"
@elsif exp="mp.表情=='哦想起什么'"
@eval
exp="f.巫师眉='13',f.巫师眼='21',f.巫师嘴='31'"
@elsif exp="mp.表情=='温和的微笑'"
@eval
exp="f.巫师眉='14',f.巫师眼='24',f.巫师嘴='35'"
@elsif exp="mp.表情=='……'"
@eval
exp="f.巫师眉='14',f.巫师眼='24',f.巫师嘴='32'"
@elsif exp="mp.表情=='小小的不愉快'"
@eval
exp="f.巫师眉='14',f.巫师眼='24',f.巫师嘴='32'"
@endif
[endmacro]
[macro name=立绘]
@if exp="mp.巫师"
@巫师 *
@eval
exp="mp.眉=f.巫师眉"
@eval exp="mp.眼=f.巫师眼"
@eval exp="mp.嘴=f.巫师嘴"
@eval
exp="mp.文件='巫师'"
@eval exp="mp.表情文件=mp.文件+'表情'"
@eval
exp="mp.表情位置x=300,mp.表情位置y=150"
@eval exp="mp.名='巫师'"
@endif
@if
exp="mp.近"
@eval exp="mp.x=0,mp.y=0,mp.大小=100"
@elsif exp="mp.远"
@eval
exp="mp.x=200,mp.y=100,mp.大小=40"
@else
@eval
exp="mp.x=140,mp.y=30,mp.大小=60"
@endif
;位置
[eval exp="mp.x=mp.x-200"
cond="mp.位置 == '左'"]
[eval exp="mp.x=mp.x-100" cond="mp.位置 ==
'偏左'"]
[eval exp="mp.x=mp.x+100" cond="mp.位置 == '偏右'"]
[eval
exp="mp.x=mp.x+200" cond="mp.位置 == '右'"]
[eval exp="mp.x=mp.x-200"
cond="mp.左"]
[eval exp="mp.x=mp.x-100" cond="mp.偏左"]
[eval
exp="mp.x=mp.x+100" cond="mp.偏右"]
[eval exp="mp.x=mp.x+200"
cond="mp.右"]
@eval exp="mp.编号='1'" cond="mp.编号==void"
[eval
exp="mp.图层编号=6" cond="mp.编号=='1'"]
[eval exp="mp.图层编号=10"
cond="mp.编号=='2'"]
[eval exp="mp.图层编号=14" cond="mp.编号=='3'"]
@if
exp="f.立绘号1表情==true&&mp.编号=='1'||f.立绘号2表情==true&&mp.编号=='2'||f.立绘号3表情==true&&mp.编号=='3'"
@animstart
layer=&mp.图层编号+1 page=fore seg=&mp.编号*1 target=*眉
@animstart
layer=&mp.图层编号+2 page=fore seg=&mp.编号*2 target=*眼
@animstart
layer=&mp.图层编号+3 page=fore seg=&mp.编号*3 target=*嘴
@else
[image
storage=%文件 layer=&mp.图层编号 page=fore visible=true opacity=0 left=%x top=%y
zoom=%大小]
@if exp="mp.表情文件!=void"
@eval
exp="mp.表情文件a=mp.表情文件+'_a'"
@eval exp="mp.x2=0,mp.y2=0"
cond="mp.眉=='11'"
@eval exp="mp.x2=200,mp.y2=0" cond="mp.眉=='12'"
@eval
exp="mp.x2=400,mp.y2=0" cond="mp.眉=='13'"
@eval exp="mp.x2=600,mp.y2=0"
cond="mp.眉=='14'"
@eval exp="mp.x2=800,mp.y2=0" cond="mp.眉=='15'"
@eval
exp="mp.x2=1000,mp.y2=0" cond="mp.眉=='16'"
[pimage storage=%表情文件a
layer=&mp.图层编号 page=fore visible=true opacity=255 dx=%表情位置x dy=%表情位置y
sx=%x2 sy=%y2 sw=200 sh=200 zoom=%大小]
@eval exp="mp.x2=0,mp.y2=200"
cond="mp.眼=='21'"
@eval exp="mp.x2=200,mp.y2=200" cond="mp.眼=='22'"
@eval
exp="mp.x2=400,mp.y2=200" cond="mp.眼=='23'"
@eval exp="mp.x2=600,mp.y2=200"
cond="mp.眼=='24'"
@eval exp="mp.x2=800,mp.y2=200" cond="mp.眼=='25'"
@eval
exp="mp.x2=1000,mp.y2=200" cond="mp.眼=='26'"
[pimage storage=%表情文件a
layer=&mp.图层编号 page=fore visible=true opacity=255 dx=%表情位置x dy=%表情位置y
sx=%x2 sy=%y2 sw=200 sh=200 zoom=%大小]
@eval exp="mp.x2=0,mp.y2=400"
cond="mp.嘴=='31'"
@eval exp="mp.x2=200,mp.y2=400" cond="mp.嘴=='32'"
@eval
exp="mp.x2=400,mp.y2=400" cond="mp.嘴=='33'"
@eval exp="mp.x2=600,mp.y2=400"
cond="mp.嘴=='34'"
@eval exp="mp.x2=800,mp.y2=400" cond="mp.嘴=='35'"
@eval
exp="mp.x2=1000,mp.y2=400" cond="mp.嘴=='36'"
[pimage storage=%表情文件a
layer=&mp.图层编号 page=fore visible=true opacity=255 dx=%表情位置x dy=%表情位置y
sx=%x2 sy=%y2 sw=200 sh=200 zoom=%大小]
@endif
[action layer=&mp.图层编号
module=LayerFadeToModeModule opacity=0 time=0]
[action layer=&mp.图层编号
module=LayerFadeToModeModule opacity=255 time=500 x=%x y=%y]
[wait
time=500]
@if exp="mp.表情文件!=void"
[image storage=%表情文件
layer=&mp.图层编号+1 page=fore visible=true opacity=255 left=%x top=%y
zoom=%大小]
[image storage=%表情文件 layer=&mp.图层编号+2 page=fore visible=true
opacity=255 left=%x top=%y zoom=%大小]
[image storage=%表情文件
layer=&mp.图层编号+3 page=fore visible=true opacity=255 left=%x top=%y
zoom=%大小]
[image storage=%文件 layer=&mp.图层编号 page=fore visible=true
opacity=255 left=%x top=%y zoom=%大小]
@animstart layer=&mp.图层编号+1
page=fore seg=&mp.编号*1 target=*眉
@animstart layer=&mp.图层编号+2
page=fore seg=&mp.编号*2 target=*眼
@animstart layer=&mp.图层编号+3
page=fore seg=&mp.编号*3 target=*嘴
@endif
@eval exp="f.立绘号1表情 = true"
cond="mp.表情文件!=void&&mp.编号=='1'"
@eval exp="f.立绘号2表情 = true"
cond="mp.表情文件!=void&&mp.编号=='2'"
@eval exp="f.立绘号3表情 = true"
cond="mp.表情文件!=void&&mp.编号=='3'"
@eval exp="f.立绘号1 =
true,f.立绘号1x=mp.x,f.立绘号1y=mp.y" cond="mp.编号=='1'"
@eval exp="f.立绘号2 =
true,f.立绘号2x=mp.x,f.立绘号2y=mp.y" cond="mp.编号=='2'"
@eval exp="f.立绘号3 =
true,f.立绘号3x=mp.x,f.立绘号3y=mp.y" cond="mp.编号=='3'"
@eval exp="f.立绘号1名=mp.名"
cond="mp.编号=='1'&&mp.名!=void"
@eval exp="f.立绘号2名=mp.名"
cond="mp.编号=='2'&&mp.名!=void"
@eval exp="f.立绘号3名=mp.名"
cond="mp.编号=='3'&&mp.名!=void"
@endif
[endmacro]
[macro
name=对话立绘]
@eval exp="mp.编号='1'" cond="mp.编号==void"
[eval exp="mp.图层编号=6"
cond="mp.编号=='1'"]
[eval exp="mp.图层编号=10" cond="mp.编号=='2'"]
[eval
exp="mp.图层编号=14" cond="mp.编号=='3'"]
@if exp="mp.巫师"
@巫师
*
@endif
@if exp="kag.fore.layers[mp.图层编号+1].visible==true"
@animstart
layer=&mp.图层编号+1 page=fore seg=&mp.编号*1 target=*眉
@endif
@if
exp="kag.fore.layers[mp.图层编号+2].visible==true"
@animstart
layer=&mp.图层编号+2 page=fore seg=&mp.编号*2 target=*眼
@endif
@if
exp="kag.fore.layers[mp.图层编号+3].visible==true"
@animstart
layer=&mp.图层编号+3 page=fore seg=&mp.编号*3
target=*嘴动画
@endif
[endmacro]
[macro name=tp]
@if
exp="kag.fore.layers[9].visible==true"
@animstart layer=9 page=fore seg=3
target=*嘴
@endif
@if
exp="kag.fore.layers[13].visible==true"
@animstart layer=13 page=fore seg=6
target=*嘴
@endif
@if
exp="kag.fore.layers[17].visible==true"
@animstart layer=17 page=fore seg=9
target=*嘴
@endif
@if
exp="kag.fore.layers[21].visible==true"
@animstart layer=21 page=fore seg=12
target=*嘴
@endif
@if
exp="kag.fore.layers[25].visible==true"
@animstart layer=25 page=fore seg=15
target=*嘴
@endif
@endif
[endmacro]
[macro name=立绘消]
@eval
exp="mp.编号='1'" cond="mp.编号==void"
[eval
exp="mp.图层编号=6,mp.x=f.立绘号1x,mp.y=f.立绘号1y" cond="mp.编号=='1'"]
[eval
exp="mp.图层编号=10,mp.x=f.立绘号2x,mp.y=f.立绘号2y" cond="mp.编号=='2'"]
[eval
exp="mp.图层编号=14,mp.x=f.立绘号3x,mp.y=f.立绘号3y" cond="mp.编号=='3'"]
[action
layer=&mp.图层编号 module=LayerFadeToModeModule opacity=0 time=500
x=&mp.x-30 y=&mp.y+20]
[action layer=&mp.图层编号+1
module=LayerFadeToModeModule opacity=0 time=500 x=&mp.x-30
y=&mp.y+20]
[action layer=&mp.图层编号+2 module=LayerFadeToModeModule
opacity=0 time=500 x=&mp.x-30 y=&mp.y+20]
[action
layer=&mp.图层编号+3 module=LayerFadeToModeModule opacity=0 time=500
x=&mp.x-30 y=&mp.y+20]
[wait time=500]
@freeimage
layer=&mp.图层编号 page=fore
@freeimage layer=&mp.图层编号+1
page=fore
@freeimage layer=&mp.图层编号+2 page=fore
@freeimage
layer=&mp.图层编号+2 page=fore
[eval
exp="f.立绘号1=void,f.立绘号1表情=void,f.立绘号1名=void,f.立绘号1x=void,f.立绘号1y=void"
cond="mp.编号=='1'"]
[eval
exp="f.立绘号2=void,f.立绘号2表情=void,f.立绘号2名=void,f.立绘号2x=void,f.立绘号2y=void"
cond="mp.编号=='2'"]
[eval
exp="f.立绘号3=void,f.立绘号3表情=void,f.立绘号3名=void,f.立绘号3x=void,f.立绘号3y=void"
cond="mp.编号=='3'"]
[endmacro]
===
巫师表情.asd(20110623版)
(因为眉和嘴会因取档问题失踪
现在的版本眉和嘴加上了刷新)
@loadcell
@loop
*start
[s]
*眉
@loadcell
@loop
@if exp="f.巫师眉=='11'"
@eval
exp="tf.巫师眉x=0,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='12'"
@eval
exp="tf.巫师眉x=200,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='13'"
@eval
exp="tf.巫师眉x=400,tf.巫师眉y=0"
@elsif exp="f.巫师眉=='14'"
@eval
exp="tf.巫师眉x=600,tf.巫师眉y=0"
@endif
@copy dx=300 dy=150 sx=&tf.巫师眉x
sy=&tf.巫师眉y sw=200 sh=200
@wait time=150
@jump target=*眉
*眼
@loadcell
@loop
@if exp="f.巫师眼=='21'"
@eval
exp="tf.巫师眼x=0,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='22'"
@eval
exp="tf.巫师眼x=200,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='23'"
@eval
exp="tf.巫师眼x=400,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='24'"
@eval
exp="tf.巫师眼x=600,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='25'"
@eval
exp="tf.巫师眼x=800,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='26'"
@eval
exp="tf.巫师眼x=1000,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='27'"
@eval
exp="tf.巫师眼x=1200,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='28'"
@eval
exp="tf.巫师眼x=1400,tf.巫师眼y=200"
@endif
@copy dx=300 dy=150 sx=&tf.巫师眼x sy=&tf.巫师眼y sw=200 sh=200
@wait
time=150
@if exp="f.巫师眼=='22'||f.巫师眼=='23'"
@jump
target=*眼
@endif
@if exp="f.巫师眼=='27'||f.巫师眼=='28'"
@jump
target=*眼特别
@endif
@eval exp="tf.rand = intrandom(2000, 5000)"
@wait time=&tf.rand
@eval exp="tf.眨眼 = intrandom(1, 3)"
@jump target=&('*'+tf.眨眼)
*1
@copy dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait
time=150
@copy dx=300 dy=150 sx=400 sy=200 sw=200 sh=200
@wait
time=150
@copy dx=300 dy=150 sx=1000 sy=200 sw=200 sh=200
@wait
time=150
@copy dx=300 dy=150 sx=&tf.巫师眼x sy=&tf.巫师眼y sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=1000 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=1000 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*2
@copy dx=300 dy=150 sx=1000
sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200
sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=1000 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*3
@copy dx=300 dy=150 sx=1000
sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200
sw=200 sh=200
@wait time=500
@copy dx=300 dy=150 sx=1000 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*眼特别
@eval exp="tf.rand = intrandom(2000, 5000)"
@wait
time=&tf.rand
@eval exp="tf.眨眼 = intrandom(4, 6)"
@jump
target=&('*'+tf.眨眼)
*4
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=&tf.巫师眼x sy=&tf.巫师眼y
sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200 sw=200
sh=200
@wait time=150
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*5
@copy dx=300 dy=150 sx=1400
sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200
sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*6
@copy dx=300 dy=150 sx=1400
sy=200 sw=200 sh=200
@wait time=150
@copy dx=300 dy=150 sx=400 sy=200
sw=200 sh=200
@wait time=500
@copy dx=300 dy=150 sx=1400 sy=200 sw=200
sh=200
@wait time=150
@jump target=*眼
*嘴
@loadcell
@loop
@if exp="f.巫师嘴=='31'"
@eval
exp="tf.巫师嘴x=0,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='32'"
@eval
exp="tf.巫师嘴x=200,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='33'"
@eval
exp="tf.巫师嘴x=400,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='34'"
@eval
exp="tf.巫师嘴x=600,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='35'"
@eval
exp="tf.巫师嘴x=800,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='36'"
@eval
exp="tf.巫师嘴x=1000,tf.巫师嘴y=400"
@endif
@copy dx=300 dy=150 sx=&tf.巫师嘴x
sy=&tf.巫师嘴y sw=200 sh=200
@wait time=150
@jump target=*嘴
*嘴动画
@loadcell
@loop
@if exp="f.巫师嘴=='31'"
@eval
exp="tf.巫师嘴x=0,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='32'"
@eval
exp="tf.巫师嘴x=200,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='33'"
@eval
exp="tf.巫师嘴x=400,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='34'"
@eval
exp="tf.巫师嘴x=600,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='35'"
@eval
exp="tf.巫师嘴x=800,tf.巫师嘴y=400"
@elsif exp="f.巫师嘴=='36'"
@eval
exp="tf.巫师嘴x=1000,tf.巫师嘴y=400"
@endif
@eval exp="tf.说话 = intrandom(1, 4)"
@jump target=&('*嘴'+tf.说话)
*嘴1
@copy dx=300 dy=150 sx=0 sy=400
sw=200 sh=200
@wait time=150
@jump target=*嘴动画
*嘴2
@copy dx=300
dy=150 sx=1200 sy=400 sw=200 sh=200
@wait time=150
@jump
target=*嘴动画
*嘴3
@copy dx=300 dy=150 sx=600 sy=400 sw=200 sh=200
@wait
time=150
@jump target=*嘴动画
*嘴4
@copy dx=300 dy=150 sx=&tf.巫师嘴x
sy=&tf.巫师嘴y sw=200 sh=200
@wait time=150
@jump target=*嘴动画
*眨眼
@loadcell
@loop
@if exp="f.巫师眼=='21'"
@eval
exp="tf.巫师眼x=0,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='22'"
@eval
exp="tf.巫师眼x=200,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='23'"
@eval
exp="tf.巫师眼x=400,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='24'"
@eval
exp="tf.巫师眼x=600,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='25'"
@eval
exp="tf.巫师眼x=800,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='26'"
@eval
exp="tf.巫师眼x=1000,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='27'"
@eval
exp="tf.巫师眼x=1200,tf.巫师眼y=200"
@elsif exp="f.巫师眼=='28'"
@eval
exp="tf.巫师眼x=1400,tf.巫师眼y=200"
@endif
@copy dx=300 dy=150 sx=&tf.巫师眼x sy=&tf.巫师眼y sw=200 sh=200
@wait
time=150
@if exp="f.巫师眼=='27'||f.巫师眼=='28'"
@jump
target=*4
@endif
@jump target=*1
*眉停
[s]
*眼停
[s]
*嘴停
[s]