标题: 孔明传攻击性策略和攻击性道具伤害分析
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-7-31 18:09 资料 文集 短消息 只看该作者


QUOTE:
原帖由 lewulezo 于 2010-7-30 20:08 发表


后勤三兵种貌似是没有攻击型策略的。但是,补给类策略的效果,依然和武器的加成有关。

可是这个地方只有伤害计算,补给类的不在这个函数里


顶部
性别:男-离线 lewulezo


Rank: 4
组别 校尉
级别 仁勇校尉
功绩 27
帖子 158
编号 58100
注册 2006-1-22
来自 上海


发表于 2010-7-31 20:49 资料 文集 短消息 只看该作者
回复 #30 阿尔法孝直 的帖子

藤甲兵直接=1,其实只要把伤害修正为1%,效果几乎是类似的。而且我看ctermiii的修改代码中保留着这段呢
相克值设定为75,就是3/4
设定为50,就是1/2
设定为150,就是3/2
实际上,他的条件判断默认也就这几种情况。

但是,想要设定相克修正是120%就做不到了,从这点来看,明显还是数据区的写法灵活啊。


顶部
性别:男-离线 lewulezo


Rank: 4
组别 校尉
级别 仁勇校尉
功绩 27
帖子 158
编号 58100
注册 2006-1-22
来自 上海


发表于 2010-7-31 20:51 资料 文集 短消息 只看该作者
回复 #31 ctermiii 的帖子

那会不会是计算策略防御力的需要呢?
顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-8-1 12:48 资料 文集 短消息 只看该作者
但这个地方只被伤害函数调用了,所以才奇怪呢
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-8-2 00:08 资料 个人空间 短消息 只看该作者 QQ
非攻击性策略成功,要求
随机数%攻击方智力>=防御方智力/x
压迫类、骂声来、假情报类、反间类、封策,x=3
查看类:x=4
止步、牵制,x=5

有策略减伤buff的再算一次,两次都成功了才附加状态上去。

此类函数由0x40221B进入。与蛇兵象兵攻击附加状态(那时x=2)用的是同一个函数。

0040221B  /$  55            PUSH EBP
0040221C  |.  8BEC          MOV EBP,ESP
0040221E  |.  83EC 18       SUB ESP,18
00402221  |.  53            PUSH EBX
00402222  |.  56            PUSH ESI
00402223  |.  57            PUSH EDI
00402224  |.  33C0          XOR EAX,EAX
00402226  |.  8A45 08       MOV AL,BYTE PTR SS:[EBP+8]
00402229  |.  8BC8          MOV ECX,EAX
0040222B  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
0040222E  |.  C1E0 03       SHL EAX,3
00402231  |.  2BC1          SUB EAX,ECX
00402233  |.  8D88 98C04600 LEA ECX,DWORD PTR DS:[EAX+46C098]
00402239  |.  E8 F26E0000   CALL EKD2W95.00409130
0040223E  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
00402241  |.  03C0          ADD EAX,EAX
00402243  |.  8D04C0        LEA EAX,DWORD PTR DS:[EAX+EAX*8]
00402246  |.  05 E8564500   ADD EAX,EKD2W95.004556E8
0040224B  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
0040224E  |.  33C0          XOR EAX,EAX
00402250  |.  8A45 0C       MOV AL,BYTE PTR SS:[EBP+C]
00402253  |.  8BC8          MOV ECX,EAX
00402255  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
00402258  |.  C1E0 03       SHL EAX,3
0040225B  |.  2BC1          SUB EAX,ECX
0040225D  |.  8D88 98C04600 LEA ECX,DWORD PTR DS:[EAX+46C098]
00402263  |.  E8 C86E0000   CALL EKD2W95.00409130
00402268  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
0040226B  |.  03C0          ADD EAX,EAX
0040226D  |.  8D04C0        LEA EAX,DWORD PTR DS:[EAX+EAX*8]
00402270  |.  05 E8564500   ADD EAX,EKD2W95.004556E8
00402275  |.  8945 F4       MOV DWORD PTR SS:[EBP-C],EAX
00402278  |.  C745 F8 01000>MOV DWORD PTR SS:[EBP-8],1
0040227F  |.  C645 EC 01    MOV BYTE PTR SS:[EBP-14],1
00402283  |.  6A 08         PUSH 8                                   ; /Arg1 = 00000008
00402285  |.  33C0          XOR EAX,EAX                              ; |
00402287  |.  8A45 0C       MOV AL,BYTE PTR SS:[EBP+C]               ; |
0040228A  |.  8BC8          MOV ECX,EAX                              ; |
0040228C  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]         ; |
0040228F  |.  C1E0 03       SHL EAX,3                                ; |
00402292  |.  2BC1          SUB EAX,ECX                              ; |
00402294  |.  8D88 98C04600 LEA ECX,DWORD PTR DS:[EAX+46C098]        ; |
0040229A  |.  E8 B16E0000   CALL EKD2W95.00409150                    ; \EKD2W95.00409150
0040229F  |.  85C0          TEST EAX,EAX
004022A1  |.  0F84 04000000 JE EKD2W95.004022AB
004022A7  |.  C645 EC 02    MOV BYTE PTR SS:[EBP-14],2
004022AB  |>  C645 FC 00    MOV BYTE PTR SS:[EBP-4],0
004022AF  |.  E9 03000000   JMP EKD2W95.004022B7
004022B4  |>  FE45 FC       /INC BYTE PTR SS:[EBP-4]
004022B7  |>  33C0           XOR EAX,EAX
004022B9  |.  8A45 FC       |MOV AL,BYTE PTR SS:[EBP-4]
004022BC  |.  33C9          |XOR ECX,ECX
004022BE  |.  8A4D EC       |MOV CL,BYTE PTR SS:[EBP-14]
004022C1  |.  3BC1          |CMP EAX,ECX
004022C3  |.  0F8D 7B000000 |JGE EKD2W95.00402344
004022C9  |.  837D F8 00    |CMP DWORD PTR SS:[EBP-8],0
004022CD  |.  0F84 71000000 |JE EKD2W95.00402344
004022D3  |.  33C0          |XOR EAX,EAX
004022D5  |.  8A45 14       |MOV AL,BYTE PTR SS:[EBP+14]
004022D8  |.  83F8 02       |CMP EAX,2
004022DB  |.  0F85 5E000000 |JNZ EKD2W95.0040233F
004022E1  |.  8B4D F0       |MOV ECX,DWORD PTR SS:[EBP-10]
004022E4  |.  E8 276E0000   |CALL EKD2W95.00409110
004022E9  |.  33C9          |XOR ECX,ECX
004022EB  |.  8AC8          |MOV CL,AL
004022ED  |.  51            |PUSH ECX                                ; /Arg1
004022EE  |.  E8 35500400   |CALL EKD2W95.00447328                   ; \EKD2W95.00447328
004022F3  |.  83C4 04       |ADD ESP,4
004022F6  |.  8BD8          |MOV EBX,EAX
004022F8  |.  895D E8       |MOV DWORD PTR SS:[EBP-18],EBX
004022FB  |.  8B4D F4       |MOV ECX,DWORD PTR SS:[EBP-C]
004022FE  |.  E8 0D6E0000   |CALL EKD2W95.00409110
00402303  |.  33C9          |XOR ECX,ECX
00402305  |.  8AC8          |MOV CL,AL
00402307  |.  33DB          |XOR EBX,EBX
00402309  |.  8A5D 10       |MOV BL,BYTE PTR SS:[EBP+10]
0040230C  |.  8BC1          |MOV EAX,ECX
0040230E  |.  99            |CDQ
0040230F  |.  F7FB          |IDIV EBX
00402311  |.  8B4D E8       |MOV ECX,DWORD PTR SS:[EBP-18]
00402314  |.  3BC8          |CMP ECX,EAX
00402316  |.  0F83 23000000 |JNB EKD2W95.0040233F
0040231C  |.  33C0          |XOR EAX,EAX
0040231E  |.  8A45 18       |MOV AL,BYTE PTR SS:[EBP+18]
00402321  |.  85C0          |TEST EAX,EAX
00402323  |.  0F84 0F000000 |JE EKD2W95.00402338
00402329  |.  68 00DD4400   |PUSH EKD2W95.0044DD00
0040232E  |.  6A 00         |PUSH 0
00402330  |.  E8 006C0300   |CALL EKD2W95.00438F35
00402335  |.  83C4 08       |ADD ESP,8
00402338  |>  C745 F8 00000>|MOV DWORD PTR SS:[EBP-8],0
0040233F  |>^ E9 70FFFFFF   \JMP EKD2W95.004022B4
00402344  |>  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
00402347  |.  E9 00000000   JMP EKD2W95.0040234C
0040234C  |>  5F            POP EDI
0040234D  |.  5E            POP ESI
0040234E  |.  5B            POP EBX
0040234F  |.  C9            LEAVE
00402350  \.  C3            RETN

[ 本帖最后由 阿尔法孝直 于 2010-8-2 01:56 编辑 ]
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-8-2 01:35 资料 个人空间 短消息 只看该作者 QQ
0x405235开始是查看类策略和道具的伤害算法:

QUOTE:
unsigned __int8 __cdecl sub_405235(char a1, unsigned __int8 a2, unsigned __int8 a3)
{
  unsigned __int8 v4; // [sp+14h] [bp-8h]@1
  char v5; // [sp+10h] [bp-Ch]@1
  int v6; // [sp+Ch] [bp-10h]@1
  unsigned __int8 v7; // [sp+18h] [bp-4h]@23

  v4 = 0;
  v5 = 0;
  v6 = a2;
  switch ( v6 )  //判断策略代码:v6==0xC是查看,0xD是侦察,0xE是谍报;a3==2使用策略,a3==3使用道具
  {
    case 0xC:
      if ( a3 == 2 )
        v5 = 8;
      else
        v5 = 5;
      if ( a3 == 2 )
        v4 = 5;
      else
        v4 = 4;
      break;
    case 0xD:
      if ( a3 == 2 )
        v5 = 15;
      else
        v5 = 10;
      if ( a3 == 2 )
        v4 = 11;
      else
        v4 = 6;
      break;
    case 0xE:
      if ( a3 == 2 )
        v5 = 30;
      else
        v5 = 20;
      v4 = 11;
      break;
  }
  v7 = v5 + (unsigned __int8)sub_447328(v4);//伤害=基本值v5+随机数%v4

   //若有减轻策略损伤Buff,伤害/2
  if ( sub_409150((int)((char *)&dword_46C098 + 23 * (unsigned __int8)a1), 8) )
    v7 = (signed int)v7 >> 1;

   //伤害不能超过剩余策略值
  if ( (unsigned __int8)sub_409260((int)((char *)&dword_46C098 + 23 * (unsigned __int8)a1)) < (signed int)v7 )
    v7 = sub_409260((int)((char *)&dword_46C098 + 23 * (unsigned __int8)a1));

  return v7;//返回查看类的伤害值
}

[ 本帖最后由 阿尔法孝直 于 2010-8-7 17:47 编辑 ]
顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-8-2 11:59 资料 文集 短消息 只看该作者

00403918   $  55            PUSH EBP
00403919   .  8BEC          MOV EBP,ESP
0040391B   .  83EC 78       SUB ESP,78

这个是处理道具使用的总函数;

00407E2B   $  55            PUSH EBP                                          
00407E2C   .  8BEC          MOV EBP,ESP
00407E2E   .  83EC 0C       SUB ESP,0C
00407E31   .  53            PUSH EBX

这个是使用策略的总函数

我写伤害显示的时候,就是在处理耐久力伤害的道具和策略公用的函数里增加了一个开关。
道具和策略有相同功能的话,函数也是同一个。
顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-8-2 12:08 资料 文集 短消息 只看该作者
除以2那个地方:
sub_409150((int)((char *)&dword_46C098 + 23 * (unsigned __int8)a1), 8)
注意这个参数8,是检查是否有策略减伤buffer的,如果有,上面计算结果/2
这个函数:
00409150 >/$  55            PUSH EBP                                          ;  10混乱20某个下降01移动力下降02攻击力下降04封策08减轻策略损伤
00409151  |.  8BEC          MOV EBP,ESP
00409153  |.  83EC 04       SUB ESP,4
00409156  |.  53            PUSH EBX
00409157  |.  56            PUSH ESI
00409158  |.  57            PUSH EDI
00409159  |.  894D FC       MOV DWORD PTR SS:[EBP-4],ECX
0040915C  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0040915F  |.  33C9          XOR ECX,ECX
00409161  |.  8A48 16       MOV CL,BYTE PTR DS:[EAX+16]
00409164  |.  33C0          XOR EAX,EAX
00409166  |.  8A45 08       MOV AL,BYTE PTR SS:[EBP+8]
00409169  |.  23C8          AND ECX,EAX
0040916B  |.  8BC1          MOV EAX,ECX
0040916D  |.  E9 00000000   JMP EKD2Win.00409172
00409172  |>  5F            POP EDI
00409173  |.  5E            POP ESI
00409174  |.  5B            POP EBX
00409175  |.  C9            LEAVE
00409176  \.  C2 0400       RETN 4

就是检测有没有异常状态buffer的,一共6种不良状态


良性状态2种,加攻加防,而且都有2次叠加效果
加攻(防)2次的话,攻击(防御)增加到150%;
顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-8-2 15:17 资料 文集 短消息 只看该作者


QUOTE:
原帖由 阿尔法孝直 于 2010-8-2 00:08 发表
非攻击性策略成功,要求
随机数%攻击方智力>=防御方智力/x
压迫类、骂声来、假情报类、反间类、封策,x=3
查看类:x=4
止步、牵制,x=5

有策略减伤buff的再算一次,两次都成功了才附加状态上去。

...

我来注释一下:

QUOTE:
0040221B  /$  55            PUSH EBP
0040221C  |.  8BEC          MOV EBP,ESP
0040221E  |.  83EC 18       SUB ESP,18
00402221  |.  53            PUSH EBX
00402222  |.  56            PUSH ESI
00402223  |.  57            PUSH EDI
00402224  |.  33C0          XOR EAX,EAX
00402226  |.  8A45 08       MOV AL,BYTE PTR SS:[EBP+8]   ;攻击方战场ID,就是秘籍图片里显示的ID,就是部队序号
00402229  |.  8BC8          MOV ECX,EAX
0040222B  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
0040222E  |.  C1E0 03       SHL EAX,3
00402231  |.  2BC1          SUB EAX,ECX
00402233  |.  8D88 98C04600 LEA ECX,DWORD PTR DS:[EAX+46C098]
00402239  |.  E8 F26E0000   CALL EKD2W95.00409130
0040223E  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
00402241  |.  03C0          ADD EAX,EAX
00402243  |.  8D04C0        LEA EAX,DWORD PTR DS:[EAX+EAX*8]
00402246  |.  05 E8564500   ADD EAX,EKD2W95.004556E8
0040224B  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX  ;攻击方基本能力数据地址
0040224E  |.  33C0          XOR EAX,EAX
00402250  |.  8A45 0C       MOV AL,BYTE PTR SS:[EBP+C]      ;防御方战场ID
00402253  |.  8BC8          MOV ECX,EAX
00402255  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
00402258  |.  C1E0 03       SHL EAX,3
0040225B  |.  2BC1          SUB EAX,ECX
0040225D  |.  8D88 98C04600 LEA ECX,DWORD PTR DS:[EAX+46C098]
00402263  |.  E8 C86E0000   CALL EKD2W95.00409130
00402268  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
0040226B  |.  03C0          ADD EAX,EAX
0040226D  |.  8D04C0        LEA EAX,DWORD PTR DS:[EAX+EAX*8]
00402270  |.  05 E8564500   ADD EAX,EKD2W95.004556E8
00402275  |.  8945 F4       MOV DWORD PTR SS:[EBP-C],EAX     ;防御方能力地址
00402278  |.  C745 F8 01000>MOV DWORD PTR SS:[EBP-8],1    ;初始化默认计策效果,1成功0失败,方便道具的计算
0040227F  |.  C645 EC 01    MOV BYTE PTR SS:[EBP-14],1             ;普通武将1次赌博机会
00402283  |.  6A 08         PUSH 8                                   ; /Arg1 = 00000008;确认是否有减伤buffer
00402285  |.  33C0          XOR EAX,EAX                              ; |
00402287  |.  8A45 0C       MOV AL,BYTE PTR SS:[EBP+C]               ; |
0040228A  |.  8BC8          MOV ECX,EAX                              ; |
0040228C  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]         ; |
0040228F  |.  C1E0 03       SHL EAX,3                                ; |
00402292  |.  2BC1          SUB EAX,ECX                              ; |
00402294  |.  8D88 98C04600 LEA ECX,DWORD PTR DS:[EAX+46C098]        ; |
0040229A  |.  E8 B16E0000   CALL EKD2W95.00409150                    ; \EKD2W95.00409150
0040229F  |.  85C0          TEST EAX,EAX
004022A1  |.  0F84 04000000 JE EKD2W95.004022AB
004022A7  |.  C645 EC 02    MOV BYTE PTR SS:[EBP-14],2      ;有减伤buffer两次赌博机会
004022AB  |>  C645 FC 00    MOV BYTE PTR SS:[EBP-4],0
004022AF  |.  E9 03000000   JMP EKD2W95.004022B7
004022B4  |>  FE45 FC       /INC BYTE PTR SS:[EBP-4]
004022B7  |>  33C0           XOR EAX,EAX
004022B9  |.  8A45 FC       |MOV AL,BYTE PTR SS:[EBP-4]
004022BC  |.  33C9          |XOR ECX,ECX
004022BE  |.  8A4D EC       |MOV CL,BYTE PTR SS:[EBP-14]
004022C1  |.  3BC1          |CMP EAX,ECX
004022C3  |.  0F8D 7B000000 |JGE EKD2W95.00402344
004022C9  |.  837D F8 00    |CMP DWORD PTR SS:[EBP-8],0
004022CD  |.  0F84 71000000 |JE EKD2W95.00402344
004022D3  |.  33C0          |XOR EAX,EAX
004022D5  |.  8A45 14       |MOV AL,BYTE PTR SS:[EBP+14]
004022D8  |.  83F8 02       |CMP EAX,2                              ;道具3策略2,道具一定成功的;
004022DB  |.  0F85 5E000000 |JNZ EKD2W95.0040233F
004022E1  |.  8B4D F0       |MOV ECX,DWORD PTR SS:[EBP-10]
004022E4  |.  E8 276E0000   |CALL EKD2W95.00409110     ;攻智力
004022E9  |.  33C9          |XOR ECX,ECX
004022EB  |.  8AC8          |MOV CL,AL
004022ED  |.  51            |PUSH ECX                                ; /Arg1
004022EE  |.  E8 35500400   |CALL EKD2W95.00447328                   ; \随机数
004022F3  |.  83C4 04       |ADD ESP,4
004022F6  |.  8BD8          |MOV EBX,EAX
004022F8  |.  895D E8       |MOV DWORD PTR SS:[EBP-18],EBX
004022FB  |.  8B4D F4       |MOV ECX,DWORD PTR SS:[EBP-C]
004022FE  |.  E8 0D6E0000   |CALL EKD2W95.00409110   ;防智力
00402303  |.  33C9          |XOR ECX,ECX
00402305  |.  8AC8          |MOV CL,AL
00402307  |.  33DB          |XOR EBX,EBX
00402309  |.  8A5D 10       |MOV BL,BYTE PTR SS:[EBP+10]      ;策略成功率基数,越大计策越容易成功。
0040230C  |.  8BC1          |MOV EAX,ECX
0040230E  |.  99            |CDQ
0040230F  |.  F7FB          |IDIV EBX
00402311  |.  8B4D E8       |MOV ECX,DWORD PTR SS:[EBP-18]
00402314  |.  3BC8          |CMP ECX,EAX
00402316  |.  0F83 23000000 |JNB EKD2W95.0040233F
0040231C  |.  33C0          |XOR EAX,EAX
0040231E  |.  8A45 18       |MOV AL,BYTE PTR SS:[EBP+18]    ;0兵种附带攻击特效,1策略,兵种特效不会显示下边的策略失败字样
00402321  |.  85C0          |TEST EAX,EAX
00402323  |.  0F84 0F000000 |JE EKD2W95.00402338
00402329  |.  68 00DD4400   |PUSH EKD2W95.0044DD00       ;策略失败字样
0040232E  |.  6A 00         |PUSH 0                                       ;对话框风格,多个样式
00402330  |.  E8 006C0300   |CALL EKD2W95.00438F35
00402335  |.  83C4 08       |ADD ESP,8
00402338  |>  C745 F8 00000>|MOV DWORD PTR SS:[EBP-8],0  ;失败标识0
0040233F  |>^ E9 70FFFFFF   \JMP EKD2W95.004022B4
00402344  |>  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
00402347  |.  E9 00000000   JMP EKD2W95.0040234C
0040234C  |>  5F            POP EDI
0040234D  |.  5E            POP ESI
0040234E  |.  5B            POP EBX
0040234F  |.  C9            LEAVE
00402350  \.  C3            RETN

[ 本帖最后由 ctermiii 于 2010-8-2 15:19 编辑 ]
顶部
性别:男-离线 lewulezo


Rank: 4
组别 校尉
级别 仁勇校尉
功绩 27
帖子 158
编号 58100
注册 2006-1-22
来自 上海


发表于 2010-8-2 15:36 资料 文集 短消息 只看该作者
代码都看明白了,我是不是可以对原有的逻辑进行改造,定义自己的孔明传逻辑。

目前比较关心的问题是

1. 策略的威力和它的范围定义怎样才能分离。我想让焦热术范围大但是威力小,就没法实现

2. 如何扩展策略对应地形的限制。突破火计,石计各自只能有4种地形的限制

3. 是否能像英杰传那样拥有地形伤害加成。火计在丛林中应该有额外的伤害加成。
伤害类策略似乎只有火和石。需要准备一个地形数量*2字节的数据区。

4. 能否自由设定兵种对应的策略伤害加成,而不是固定写死藤甲兵*2之类。
需要一个兵种数量*2字节的数据区。

这恐怕要修改好多地方。

[ 本帖最后由 lewulezo 于 2010-8-2 15:52 编辑 ]
顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-8-2 15:56 资料 文集 短消息 只看该作者
实现起来都不难的,不过你说对了,要改的地方不少呢
精简一下代码未必能写的下,那就要像我写伤害预测的地方一样,另占空白区
而且还要看一下,AI判断的时候是否也采用同样的函数:不然你扩展了,AI不知道,也没多大意思了。
可以找时间看看
我之前曾经欺骗了电脑一次,让它以为草地上可以落石,结果它用了落石,画面显示草地不能用-_-
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-8-2 15:59 资料 个人空间 短消息 只看该作者 QQ


QUOTE:
原帖由 ctermiii 于 2010-8-2 15:56 发表
我之前曾经欺骗了电脑一次,让它以为草地上可以落石,结果它用了落石,画面显示草地不能用-_-

是在没修改的情况下搞出来的吗?求截图。
顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-8-2 16:23 资料 文集 短消息 只看该作者


QUOTE:
原帖由 阿尔法孝直 于 2010-8-2 15:59 发表

是在没修改的情况下搞出来的吗?求截图。

肯定要修改,是调试的时候改了寄存器试着玩的;



策略和攻击的范围,简单的是通过查表来算的:
位置在:
0x44BFA8:
01 00 00 00 FF FF FF FF 01 00 00 00 01 00 00 00 FF FF FF FF 01 00 00 00 FF FF FF FF FF FF FF FF
01 00 00 00 00 00 00 00 FF FF FF FF 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 FF FF FF FF
00 00 00 01 02 00 00 00 00 00 00 00 FF FF FF FF 01 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00
FF FF FF FF 00 00 00 00 01 00 00 00 FF FF FF FF 01 00 00 00 01 00 00 00 FF FF FF FF 01 00 00 00

比如策略范围0和攻击类型0是一样的,都是从
0x44FBF0开始:00 00 00 00 FF FF FF FF 01 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF 00 00 00 00
以当前坐标(X,Y)为基准
每8个字节一组,分别是(X,Y)的增量
四个数据:
A=X,Y-1
B=X+1,Y
C=X,Y+1
D=X-1,Y
图示@为当前坐标的话:
0A0
B@D
0C0
这个跟三国志5里边算范围的方法基本一致,可能差别在于+1-1的时候的地图方向而已。

最根本的范围计算函数在这个函数里:

QUOTE:
004197D1 >/$  55            PUSH EBP
004197D2  |.  8BEC          MOV EBP,ESP
004197D4  |.  83EC 18       SUB ESP,18
004197D7  |.  53            PUSH EBX
004197D8  |.  56            PUSH ESI
004197D9  |.  57            PUSH EDI
004197DA  |.  894D E8       MOV DWORD PTR SS:[EBP-18],ECX
004197DD  |.  C645 FC FF    MOV BYTE PTR SS:[EBP-4],0FF
004197E1  |.  68 FF000000   PUSH 0FF                                 ; /Arg2 = 000000FF
004197E6  |.  68 FF000000   PUSH 0FF                                 ; |Arg1 = 000000FF
004197EB  |.  8D4D F4       LEA ECX,DWORD PTR SS:[EBP-C]             ; |
004197EE  |.  E8 5D4A0000   CALL EKD2Win.0041E250                    ; \EKD2Win.0041E250
004197F3  |.  33C0          XOR EAX,EAX
004197F5  |.  8A45 14       MOV AL,BYTE PTR SS:[EBP+14]
004197F8  |.  85C0          TEST EAX,EAX
004197FA  |.  0F85 0A000000 JNZ EKD2Win.0041980A
00419800  |.  C705 A8A64600>MOV DWORD PTR DS:[46A6A8],EKD2Win.004549>
0041980A  |>  33C0          XOR EAX,EAX
0041980C  |.  8A45 0C       MOV AL,BYTE PTR SS:[EBP+C]
0041980F  |.  3D FF000000   CMP EAX,0FF

顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-8-2 16:29 资料 个人空间 短消息 只看该作者 QQ
一个坐标的增量居然要4个字节表示这也太浪费了……空出来写其他东西吧
顶部
性别:未知-离线 ctermiii


Rank: 5Rank: 5
轩辕春秋年度最佳(游戏人生区)
组别 羽林都尉
级别 破贼校尉
好贴 1
功绩 92
帖子 90
编号 50655
注册 2005-10-7


发表于 2010-8-2 16:36 资料 文集 短消息 只看该作者
这个是32位数据导致的,eax用起来总比al方便一点嘛
而且这个是在数据区,可以大大增加范围倒是没问题

孔明传复刻的时候,不知道为什么数据和代码区都加了可写可执行的属性
不过这样导致代码和数据可以混写,这样对方便改编来说,倒挺好
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

闽国公
遂安军节度使
★★★★★★

Rank: 19Rank: 19Rank: 19Rank: 19
柱国(正二品) 轩辕春秋年度最佳(游戏人生区)
组别 节度使
级别 卫将军
好贴 2
功绩 1796
帖子 6034
编号 19070
注册 2004-10-16
家族 轩辕雀党


发表于 2010-8-7 18:04 资料 个人空间 短消息 只看该作者 QQ


QUOTE:
原帖由 ctermiii 于 2010-8-2 12:08 发表
除以2那个地方:
sub_409150((int)((char *)&dword_46C098 + 23 * (unsigned __int8)a1), 8)
注意这个参数8,是检查是否有策略减伤buffer的,如果有,上面计算结果/2
这个函数:
00409150 >/$  55            PUSH EBP                                          ;  10混乱20某个下降01移动力下降02攻击力下降04封策08减轻策略损伤

02是攻击速度下降的状态。
20是耐久力每回合减少状态。

40一直怀疑是行动结束的状态,但不敢肯定。

[ 本帖最后由 阿尔法孝直 于 2010-8-7 18:16 编辑 ]
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2024-11-20 16:37
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.016258 second(s), 8 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP