44指令:播放效果
格式:50 44 type 战斗序号 人物动作类型 效果编号
type:b0=0 战斗序号为数值,=1 战斗序号为变量
b1=0 人物动作类型为数值, =1人物动作类型为变量
b2=0 效果编号为数值, =1效果编号为变量
人物动作类型设定为0、1、2、3、4对应医毒、拳、剑、刀、特,设为负值时人物不做任何动作,相当于暗器动画效果。
效果编号指定武功对应的动画与音效,相当于R中武功的偏移26。
指令用途:战场中使用,控制人物出招并播放武功效果动画及音效。
注意:在44指令之前必需用46指令设定效果层,在44指令之后必需用使用47指令重置出招者战场贴图。此外,不是每个特技都需要播放效果的,试想在胡斐狂挥刀之后,程灵素获得一次额外的行动机会是多么囧的事情……
事件举例:
例44-1
;Kdefnum=1572
50 46 0 0 0 64 64 1 ; 50(32):设定效果层 起始点(0,0)长度(64,64)有效果
50 44 1 28005 0 0 0 0 ; 50(32):播放效果 序号[X28005]动作类型0效果编号0
50 0 1020 -1 0 0 0 0 ; 50(32):变量赋值 [X1020]=-1
;:Label1
;:Label3
;:Label6
50 3 0 0 1020 1020 1 0 ; 50(32):四则运算 [X1020]=[X1020]+1
50 4 0 2 1020 26 0 0 ; 50(32):变量判断 If[X1020]=26 then JMP=0 else JMP=1
36 256 200 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label0
50 30 1 1020 0 1030 0 0 ; 50(32):读取人物战斗属性 战斗序号[X1020]偏移0=[X1030]
50 4 0 0 1030 0 0 0 ; 50(32):变量判断 If[X1030]<0 then JMP=0 else JMP=1
36 256 -40 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label1
50 30 1 1020 2 1021 0 0 ; 50(32):读取人物战斗属性 战斗序号[X1020]偏移2=[X1021]
50 4 0 2 1021 0 0 0 ; 50(32):变量判断 If[X1021]=0 then JMP=0 else JMP=1
36 256 36 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label2
;:Label4
50 30 1 1020 4 1022 0 0 ; 50(32):读取人物战斗属性 战斗序号[X1020]偏移4=[X1022]
50 30 1 1020 6 1023 0 0 ; 50(32):读取人物战斗属性 战斗序号[X1020]偏移6=[X1023]
50 46 19 1022 1023 1 1 0 ; 50(32):设定效果层 起始点([X1022],[X1023])长度(1,1)无效果
50 4 0 6 1021 0 0 0 ; 50(32):变量判断 JMP=0
36 256 -96 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label3
;:Label2
50 30 1 1020 10 1031 0 0 ; 50(32):读取人物战斗属性 战斗序号[X1020]偏移10=[X1031]
50 4 0 2 1031 1 0 0 ; 50(32):变量判断 If[X1031]=1 then JMP=0 else JMP=1
36 256 -56 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label4
50 30 1 1020 0 1030 0 0 ; 50(32):读取人物战斗属性 战斗序号[X1020]偏移0=[X1030]
50 17 1 0 1030 34 1004 0 ; 50(32):读取属性 [X1004]=人物[X1030]属性偏移34
50 17 1 0 1030 36 1006 0 ; 50(32):读取属性 [X1006]=人物[X1030]属性偏移36
50 3 0 3 1005 1006 10 0 ; 50(32):四则运算 [X1005]=[X1006]/10
50 3 1 0 1007 1004 1005 0 ; 50(32):四则运算 [X1007]=[X1004]+[X1005]
50 4 1 1 1007 1006 0 0 ; 50(32):变量判断 If[X1007]<=[X1006] then JMP=0 else JMP=1
36 256 16 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label5
50 3 0 0 1007 1006 0 0 ; 50(32):四则运算 [X1007]=[X1006]+0
50 3 1 1 1005 1006 1004 0 ; 50(32):四则运算 [X1005]=[X1006]-[X1004]
;:Label5
50 16 1 0 1030 38 0 0 ; 50(32):保存属性 人物[X1030]属性偏移38=0
50 16 5 0 1030 34 1007 0 ; 50(32):保存属性 人物[X1030]属性偏移34=[X1007]
50 31 5 1020 18 1005 0 0 ; 50(32):保存人物战斗属性 战斗序号[X1020]偏移18=[X1005]
50 4 1 6 1009 1006 0 0 ; 50(32):变量判断 JMP=0
36 256 -220 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label6
;:Label0
50 45 0 4 0 1 0 0 ; 50(32):显示数字 数字颜色4闪烁 闪烁颜色1
50 47 1 28005 0 0 0 0 ; 50(32):重置战场贴图 战斗序号=[X28005]
-1 ; -1(FFFF):事件结束
(上图为全屏回复特效,风格相当山寨(╯▽╰))
此为武功调用事件,作用为全屏显示特效,对所有队友进行医疗,回复量为生命最大值的1/10。事件开始时将效果层设为X=0~63,Y=0~63,即全战场地图特效,然后播放出招人的医疗动作,效果编号0对应医疗效果动画及音效。然后遍历26个战斗序号,若为敌人或已阵亡者则将此处效果层关闭,若为己方存活队友则最多补充1/10生命,并将生命实际恢复值保存在各人物战斗属性偏移18内,显示数字效果为黄色数字,人物贴图闪烁,闪烁色为白色。本事件未考虑敌人使用,由于回复生命与所选攻击点无关,故只要攻击范围内存在敌人便可在自动中被AI使用。
例44-2
;Kdefnum=1573
50 0 1025 0 0 0 0 0 ; 50(32):变量赋值 [X1025]=0
50 26 0 0 28374 30 1081 0 ; 50(32):读取给定地址数据 [X1081]=[1E-6ED6+0](Int)
50 3 0 2 1082 1081 2 0 ; 50(32):四则运算 [X1082]=[X1081]*2
50 3 0 0 1082 1082 146 0 ; 50(32):四则运算 [X1082]=[X1082]+146
50 30 1 28005 0 1000 0 0 ; 50(32):读取人物战斗属性 战斗序号[X28005]偏移0=[X1000]
50 17 3 0 1000 1082 1083 0 ; 50(32):读取属性 [X1083]=人物[X1000]属性偏移[X1082]
50 3 0 3 1084 1083 100 0 ; 50(32):四则运算 [X1084]=[X1083]/100
50 3 0 2 1011 1084 2 0 ; 50(32):四则运算 [X1011]=[X1084]*2
50 3 0 1 1085 1082 20 0 ; 50(32):四则运算 [X1085]=[X1082]-20
50 17 3 0 1000 1085 999 0 ; 50(32):读取属性 [X999]=人物[X1000]属性偏移[X1085]
50 0 1045 0 0 0 0 0 ; 50(32):变量赋值 [X1045]=0
50 30 1 28005 2 1074 0 0 ; 50(32):读取人物战斗属性 战斗序号[X28005]偏移2=[X1074]
50 17 1 0 1000 110 1042 0 ; 50(32):读取属性 [X1042]=人物[X1000]属性偏移110
50 17 1 0 1000 86 1043 0 ; 50(32):读取属性 [X1043]=人物[X1000]属性偏移86
50 17 1 0 1000 46 1044 0 ; 50(32):读取属性 [X1044]=人物[X1000]属性偏移46
50 4 0 0 1044 0 0 0 ; 50(32):变量判断 If[X1044]<0 then JMP=0 else JMP=1
36 256 8 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label0
50 17 1 1 1044 104 1045 0 ; 50(32):读取属性 [X1045]=物品[X1044]属性偏移104
;:Label0
50 17 1 0 1000 48 1046 0 ; 50(32):读取属性 [X1046]=人物[X1000]属性偏移48
50 4 0 0 1046 0 0 0 ; 50(32):变量判断 If[X1046]<0 then JMP=0 else JMP=1
36 256 16 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label1
50 17 1 1 1046 104 1047 0 ; 50(32):读取属性 [X1047]=物品[X1046]属性偏移104
50 3 1 0 1045 1045 1047 0 ; 50(32):四则运算 [X1045]=[X1045]+[X1047]
;:Label1
50 3 0 0 1012 1011 76 0 ; 50(32):四则运算 [X1012]=[X1011]+76
50 17 3 3 999 1012 1020 0 ; 50(32):读取属性 [X1020]=武功[X999]属性偏移[X1012]
50 3 0 2 1060 1020 2 0 ; 50(32):四则运算 [X1060]=[X1020]*2
50 3 0 0 1060 1060 1 0 ; 50(32):四则运算 [X1060]=[X1060]+1
50 3 0 0 1012 1011 36 0 ; 50(32):四则运算 [X1012]=[X1011]+36
50 17 3 3 999 1012 1021 0 ; 50(32):读取属性 [X1021]=武功[X999]属性偏移[X1012]
50 26 0 0 22234 5 1001 0 ; 50(32):读取给定地址数据 [X1001]=[5-56DA+0](Int)
50 26 0 0 22236 5 1002 0 ; 50(32):读取给定地址数据 [X1002]=[5-56DC+0](Int)
50 3 1 1 1061 1001 1020 0 ; 50(32):四则运算 [X1061]=[X1001]-[X1020]
50 3 0 0 1062 1002 0 0 ; 50(32):四则运算 [X1062]=[X1002]+0
50 3 1 0 1063 1001 1020 0 ; 50(32):四则运算 [X1063]=[X1001]+[X1020]
50 3 0 0 1064 1002 0 0 ; 50(32):四则运算 [X1064]=[X1002]+0
;:Label16
50 4 0 0 1061 0 0 0 ; 50(32):变量判断 If[X1061]<0 then JMP=0 else JMP=1
36 256 544 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label2
50 4 0 5 1061 63 0 0 ; 50(32):变量判断 If[X1061]>63 then JMP=0 else JMP=1
36 256 532 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label3
50 3 1 1 1062 1002 1024 0 ; 50(32):四则运算 [X1062]=[X1002]-[X1024]
;:Label14
50 4 0 0 1062 0 0 0 ; 50(32):变量判断 If[X1062]<0 then JMP=0 else JMP=1
36 256 492 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label4
50 4 0 5 1062 63 0 0 ; 50(32):变量判断 If[X1062]>63 then JMP=0 else JMP=1
36 256 480 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label5
50 46 3 1061 1062 1 1 1 ; 50(32):设定效果层 起始点([X1061],[X1062])长度(1,1)有效果
50 3 0 2 1065 1061 2 0 ; 50(32):四则运算 [X1065]=[X1061]*2
50 3 0 2 1066 1062 128 0 ; 50(32):四则运算 [X1066]=[X1062]*128
50 3 1 0 1067 1065 1066 0 ; 50(32):四则运算 [X1067]=[X1065]+[X1066]
50 26 1 0 18948 30 1004 1067 ; 50(32):读取给定地址数据 [X1004]=[1E-4A04+[X1067]](Int)
50 4 0 0 1004 0 0 0 ; 50(32):变量判断 If[X1004]<0 then JMP=0 else JMP=1
36 256 428 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label6
50 30 1 1004 2 1009 0 0 ; 50(32):读取人物战斗属性 战斗序号[X1004]偏移2=[X1009]
50 4 1 2 1009 1074 0 0 ; 50(32):变量判断 If[X1009]=[X1074] then JMP=0 else JMP=1
36 256 384 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label7
50 30 1 1004 0 1005 0 0 ; 50(32):读取人物战斗属性 战斗序号[X1004]偏移0=[X1005]
50 0 1035 0 0 0 0 0 ; 50(32):变量赋值 [X1035]=0
50 17 1 0 1005 34 1030 0 ; 50(32):读取属性 [X1030]=人物[X1005]属性偏移34
50 17 1 0 1005 110 1032 0 ; 50(32):读取属性 [X1032]=人物[X1005]属性偏移110
50 17 1 0 1005 90 1033 0 ; 50(32):读取属性 [X1033]=人物[X1005]属性偏移90
50 17 1 0 1005 48 1034 0 ; 50(32):读取属性 [X1034]=人物[X1005]属性偏移48
50 4 0 0 1034 0 0 0 ; 50(32):变量判断 If[X1034]<0 then JMP=0 else JMP=1
36 256 8 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label8
50 17 1 1 1034 108 1035 0 ; 50(32):读取属性 [X1035]=物品[X1034]属性偏移108
;:Label8
50 17 1 0 1005 46 1036 0 ; 50(32):读取属性 [X1036]=人物[X1005]属性偏移46
50 4 0 0 1036 0 0 0 ; 50(32):变量判断 If[X1036]<0 then JMP=0 else JMP=1
36 256 16 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label9
50 17 1 1 1036 108 1037 0 ; 50(32):读取属性 [X1037]=物品[X1036]属性偏移108
50 3 1 0 1035 1035 1037 0 ; 50(32):四则运算 [X1035]=[X1035]+[X1037]
;:Label9
50 3 0 2 1051 1043 3 0 ; 50(32):四则运算 [X1051]=[X1043]*3
50 3 1 0 1051 1051 1021 0 ; 50(32):四则运算 [X1051]=[X1051]+[X1021]
50 3 0 3 1051 1051 2 0 ; 50(32):四则运算 [X1051]=[X1051]/2
50 3 1 0 1050 1042 1051 0 ; 50(32):四则运算 [X1050]=[X1042]+[X1051]
50 3 1 0 1050 1050 1045 0 ; 50(32):四则运算 [X1050]=[X1050]+[X1045]
50 3 0 3 1053 1050 10 0 ; 50(32):四则运算 [X1053]=[X1050]/10
50 3 1 1 1050 1050 1032 0 ; 50(32):四则运算 [X1050]=[X1050]-[X1032]
50 3 1 0 1051 1033 1032 0 ; 50(32):四则运算 [X1051]=[X1033]+[X1032]
50 3 1 0 1051 1051 1035 0 ; 50(32):四则运算 [X1051]=[X1051]+[X1035]
50 3 0 2 1051 1051 3 0 ; 50(32):四则运算 [X1051]=[X1051]*3
50 3 1 1 1050 1050 1051 0 ; 50(32):四则运算 [X1050]=[X1050]-[X1051]
50 3 0 3 1050 1050 3 0 ; 50(32):四则运算 [X1050]=[X1050]/3
50 3 0 2 1050 1050 2 0 ; 50(32):四则运算 [X1050]=[X1050]*2
50 38 0 20 1051 0 0 0 ; 50(32):随机数 [X1051]=Random(20)
50 3 1 1 1050 1050 1051 0 ; 50(32):四则运算 [X1050]=[X1050]-[X1051]
50 38 0 20 1051 0 0 0 ; 50(32):随机数 [X1051]=Random(20)
50 3 1 0 1050 1050 1051 0 ; 50(32):四则运算 [X1050]=[X1050]+[X1051]
50 38 0 4 1051 0 0 0 ; 50(32):随机数 [X1051]=Random(4)
50 3 1 1 1053 1053 1051 0 ; 50(32):四则运算 [X1053]=[X1053]-[X1051]
50 38 0 4 1051 0 0 0 ; 50(32):随机数 [X1051]=Random(4)
50 3 1 0 1053 1053 1051 0 ; 50(32):四则运算 [X1053]=[X1053]+[X1051]
50 4 1 0 1053 1050 0 0 ; 50(32):变量判断 If[X1053]<[X1050] then JMP=0 else JMP=1
36 256 8 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label10
50 3 0 0 1050 1053 0 0 ; 50(32):四则运算 [X1050]=[X1053]+0
;:Label10
50 30 1 28005 26 1055 0 0 ; 50(32):读取人物战斗属性 战斗序号[X28005]偏移26=[X1055]
50 3 1 0 1055 1055 1050 0 ; 50(32):四则运算 [X1055]=[X1055]+[X1050]
50 31 5 28005 26 1055 0 0 ; 50(32):保存人物战斗属性 战斗序号[X28005]偏移26=[X1055]
50 31 5 1004 18 1050 0 0 ; 50(32):保存人物战斗属性 战斗序号[X1004]偏移18=[X1050]
50 4 1 5 1030 1050 0 0 ; 50(32):变量判断 If[X1030]>[X1050] then JMP=0 else JMP=1
36 256 20 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label11
50 0 1030 0 0 0 0 0 ; 50(32):变量赋值 [X1030]=0
50 4 1 6 1030 1050 0 0 ; 50(32):变量判断 JMP=0
36 256 8 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label12
;:Label11
50 3 1 1 1030 1030 1050 0 ; 50(32):四则运算 [X1030]=[X1030]-[X1050]
;:Label12
50 16 5 0 1005 34 1030 0 ; 50(32):保存属性 人物[X1005]属性偏移34=[X1030]
50 4 1 6 1030 1050 0 0 ; 50(32):变量判断 JMP=0
36 256 24 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label13
;:Label7
50 3 0 0 1025 1025 1 0 ; 50(32):四则运算 [X1025]=[X1025]+1
50 1 3 0 1100 1025 1061 0 ; 50(32):数组变量赋值 数组1100([X1025])=[X1061](Int)
50 1 3 0 1200 1025 1062 0 ; 50(32):数组变量赋值 数组1200([X1025])=[X1062](Int)
;:Label13
;:Label6
;:Label5
;:Label4
50 3 0 0 1062 1062 1 0 ; 50(32):四则运算 [X1062]=[X1062]+1
50 4 1 5 1062 1064 0 0 ; 50(32):变量判断 If[X1062]>[X1064] then JMP=0 else JMP=1
36 256 0 -524 ; 36(24):跳转变量JMP是否为0否则跳转到:Label14
;:Label3
;:Label2
50 3 0 0 1061 1061 1 0 ; 50(32):四则运算 [X1061]=[X1061]+1
50 3 1 1 1024 1001 1061 0 ; 50(32):四则运算 [X1024]=[X1001]-[X1061]
50 4 0 4 1024 0 0 0 ; 50(32):变量判断 If[X1024]>=0 then JMP=0 else JMP=1
36 256 8 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label15
50 3 0 2 1024 1024 -1 0 ; 50(32):四则运算 [X1024]=[X1024]*-1
;:Label15
50 3 1 1 1024 1020 1024 0 ; 50(32):四则运算 [X1024]=[X1020]-[X1024]
50 3 1 0 1064 1002 1024 0 ; 50(32):四则运算 [X1064]=[X1002]+[X1024]
50 4 1 5 1061 1063 0 0 ; 50(32):变量判断 If[X1061]>[X1063] then JMP=0 else JMP=1
36 256 0 -620 ; 36(24):跳转变量JMP是否为0否则跳转到:Label16
50 44 1 28005 -1 44 0 0 ; 50(32):播放效果 序号[X28005]动作类型-1效果编号44
50 4 0 2 1025 0 0 0 ; 50(32):变量判断 If[X1025]=0 then JMP=0 else JMP=1
36 256 52 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label17
50 0 1026 0 0 0 0 0 ; 50(32):变量赋值 [X1026]=0
;:Label18
50 3 0 0 1026 1026 1 0 ; 50(32):四则运算 [X1026]=[X1026]+1
50 2 1 0 1100 1026 1061 0 ; 50(32):取数组变量值 [X1061]=数组1100([X1026])(Int)
50 2 1 0 1200 1026 1062 0 ; 50(32):取数组变量值 [X1062]=数组1200([X1026])(Int)
50 46 3 1061 1062 1 1 0 ; 50(32):设定效果层 起始点([X1061],[X1062])长度(1,1)无效果
50 4 1 5 1025 1026 0 0 ; 50(32):变量判断 If[X1025]>[X1026] then JMP=0 else JMP=1
36 256 -44 0 ; 36(24):跳转变量JMP是否为0是则跳转到:Label18
;:Label17
50 45 0 1 1 0 0 0 ; 50(32):显示数字 数字颜色1不闪烁 闪烁颜色0
-1 ; -1(FFFF):事件结束
(上图为菱形的攻击范围,因金群为斜45度地图,这个菱形看起来颇象矩形)
此为面攻武功调用事件,但武功攻击范围为菱形,菱形的对角线长度同原面攻范围。、事件开始时先读取地址1E6ED6内保存的当前使用武功在角色十项武功中的序号(0~9),再根据此序号推算出此武功在R中的编号以及角色经验值对应的武功杀伤范围、武功攻击力,获取出招者的攻击、武常以及武器防具攻击力。根据武功杀伤范围与选择的目标点坐标使用双重循环计算菱形纵横坐标范围,排除坐标超出地图范围的情况后逐一为菱形范围内每一点开启效果层,使用读取1E4A04+x×2+y×128的公式读取战场人物层此点人物的战斗序号,若返回值小于0则此处无人直接判断下一点,若有人则判断阵营,为己方则将其坐标存入数组,判断下一点,若为敌方则根据公式计算伤害(公式基本同原版伤害公式,但武学常识计算方法有区别)。当菱形范围内所有点判断完成后播放武功效果,人物无动作,效果编号44对应暗器效果动画及音效(注意:因人物无动作,事件结尾处便未使用50 47指令,当然,使用了也不会有任何影响)。播放武功效果后通过数组将菱形范围内己方人物坐标取出,关闭其所在位置的效果层再显示数字,数字为红色,人物无闪烁效果。因逐点设置效果层的缘故,本事件中50 44的位置偏后,之前有大量计算,在配置较低的电脑上用复刻版运行可能会出现出招前有停顿的情况,如果是普通方阵面攻则可将50 44放至事件前端,不会出现出招前停顿(变成较为合理的出招中停顿o(╯□╰)o)。本事件已考虑敌我双方使用。
关于面攻武功事件:方阵型的面攻武功事件有两种实现方式:一种方式是计算出攻击范围后根据X、Y坐标进行双重循环遍历攻击范围内所有点,判断是否有人,是否为敌方,如为己方则关闭效果层,如为敌方则计算伤害值。另一种方式是遍历26个战斗序号,判断此序号是否非空,是否为敌方,若为敌方则看其位置是否落入面攻攻击范围,若在攻击范围内则计算伤害值并开启此位置效果层(在44指令播放效果后关闭所有区域效果层)。当面攻范围很大时后一种方法的效率比较高。非方阵型的面攻武功需要先总结出计算公式,只要攻击范围能被公式所描述,就能逐一计算出对应范围内的各点,事件总体流程类似于例44-2。当然,由于50指令本身只具备简单的四则运算功能,想要使梅超风的长鞭攻击范围对应正弦曲线应该很难实现……
[ 本帖最后由 凶神恶煞 于 2010-2-12 14:48 编辑 ] |