标题: 猪猪版三国志孔明传的兵种攻防升级能力修改(附修改器下载)
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-6-14 01:11 资料 个人空间 短消息 只看该作者 QQ
现在可以了,多谢。

战役的名字存在hexzmap.e2的末尾。(需要解压)

溪峰战役” 错写成 “溪峰战役” 的错误就可以从那里修正。

[ 本帖最后由 阿尔法孝直 于 2010-6-14 12:30 编辑 ]


顶部
性别:男-离线 lewulezo


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


发表于 2010-6-14 14:55 资料 文集 短消息 只看该作者
有解压过的hexzmap.e2文件吗


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

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

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


发表于 2010-6-14 15:05 资料 个人空间 短消息 只看该作者 QQ
这个


附件: HEXZMAP.rar (2010-6-14 15:05, 67.88 K)
该附件被下载次数 187
顶部
性别:男-离线 lewulezo


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


发表于 2010-6-16 22:19 资料 文集 短消息 只看该作者
修改器最近更新:

敌军出场设定增加了AI的设定
商店售卖道具修改

只要更新jar文件即可。

非常感谢阿尔法孝直的提供的解压HEXZMAP.rar文件。不过我暂时还没有采用读取其中的战役名称。

[ 本帖最后由 lewulezo 于 2010-6-16 22:22 编辑 ]
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-6-16 22:58 资料 个人空间 短消息 只看该作者 QQ
1、不知能不能增加修改存档文件里面的金钱、红心、孔明的位置(在大地图还是某城的议事厅等地点)、剧本的位置(就是运行到游戏的哪里了)

2、能不能共享源代码?
顶部
性别:男-离线 lewulezo


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


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


QUOTE:
原帖由 阿尔法孝直 于 2010-6-16 22:58 发表
1、不知能不能增加修改存档文件里面的金钱、红心、孔明的位置(在大地图还是某城的议事厅等地点)、剧本的位置(就是运行到游戏的哪里了)

2、能不能共享源代码?

1. 那几个位置具体在哪里我还没细看。如果有现成的结果,那我可以马上加进去。

2. 因为陆陆续续改的关系,目前的代码稍微有点乱,我想稍微重构一下再分享出来。

目前界面有些地方输入起来感觉不太顺手,易用性不好。我考虑调整一下。
顶部
性别:男-离线 lewulezo


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


发表于 2010-6-17 11:13 资料 文集 短消息 只看该作者
我现在最想改的是孔明传中的兵种相克设置。

我对孔明传中兵种相克的弱化感觉太不爽了,不知道有高手能分析一下吗。
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-6-17 11:37 资料 个人空间 短消息 只看该作者 QQ
回复 #127 lewulezo 的帖子

干脆就分析一下整个物理攻击伤害公式吧。

我一直找不到函数入口。
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-6-18 20:30 资料 个人空间 短消息 只看该作者 QQ
http://www.xycq.net/forum/viewthread.php?tid=192374

孔明传的秘籍,偶尔发现的,但总是找不准触发的充要条件。麻烦分析一下。
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-6-22 01:28 资料 个人空间 短消息 只看该作者 QQ
既然攻击速度关系到命中率/回避率、双击率/被双击率,那么暴击率/被暴击率由什么决定呢?
顶部
性别:男-离线 lewulezo


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


发表于 2010-6-22 11:54 资料 文集 短消息 只看该作者


QUOTE:
原帖由 阿尔法孝直 于 2010-6-22 01:28 发表
既然攻击速度关系到命中率/回避率、双击率/被双击率,那么暴击率/被暴击率由什么决定呢?

这个还真看不出。我没有实测过各种兵种互相攻击时的暴击率差异。目前凭感觉似乎是随机的。曹操传有士气的设定,但是孔明传里没有发现过。

关于兵种的攻击速度,虽然是隐藏的属性,但是有个策略叫“牵制”,是用来削弱攻击速度的。所以对玩家来说,并不是算是完全隐藏的。
但是暴击率还真没有任何其他地方有提示。我怀疑孔明传中尚未加入士气类的因素。
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-6-22 12:10 资料 个人空间 短消息 只看该作者 QQ
一般来说,练级时尽量减少暴击,使得
经验值/伤害 尽可能高。

在不考虑补给频率的情况下,一般反击出连击越多越好,但又要少暴击。

这时候“牵制”就很有用了。

---------------------------------------------------------------------

暴击相关的属性有没有可能隐藏在文件另一段数据中?

[ 本帖最后由 阿尔法孝直 于 2010-6-23 11:50 编辑 ]
顶部
性别:男-离线 lewulezo


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


发表于 2010-6-23 11:48 资料 文集 短消息 只看该作者
我还真没想过那么多。实际上我一般都不特意练级。为了保持难度,总是压制己方将领的等级不高于敌人2级以上。要想打压赵云还真难,除非从来不派他上场。

至于暴击率的问题,不同的兵种,暴击率真的不一样吗?
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-6-23 11:50 资料 个人空间 短消息 只看该作者 QQ
回复 #133 lewulezo 的帖子

同问
顶部
性别:男-离线 lewulezo


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


发表于 2010-6-23 12:46 资料 文集 短消息 只看该作者
恐怕只有等高人来做战斗函数分析才能得到结论了吧。

说实话,我以前从没想过能这么改孔明传。直到看见有大大破解的孔明传exe出现。

我喜爱孔明传主要是因为它的剧情。一直想自己把诸多不合理的设定修改一下,现在已经离实现迈进了许多了。
顶部
性别:未知-离线 acmilan3102

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 35
编号 286470
注册 2008-7-13


发表于 2010-7-16 11:36 资料 短消息 只看该作者
很强悍的技术贴,慢慢学习中。
顶部
性别:男-离线 lewulezo


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


发表于 2010-7-16 14:45 资料 文集 短消息 只看该作者
孔明传引擎的缺陷:

孔明传(PC版)这个游戏,和曹操传不同的是,他的将领之间的差距只有初始数值不同,而升级的得到的提升却没有任何差异。比如说同样是骑兵,用赵云对比一个无名骑兵队,升级时候提升的武力值,除去随机因素外就都一样。

也就是说,越到后面,名将和普通武将的差距就越小。而且因为随机波动,甚至会出现同等级下,名将的数值还不如一个平庸武将的结果。这个设定真是让人郁闷。PS/GBA版本为了改变这个问题把升级的随机因素去掉,改成固定值。但是这样一来就不得不完全抛弃那些武力果之类额外提升固定属性的设定。

而且由于初期初始数字差距比较大,所以名将砍杂毛小兵一刀一个。但是到了后期40级以上时候,通过升级得到的属性值已经占了主导地位,武将初期数字的差异已经显得非常不明显。

还有一个问题就是属性255封顶,导致50级之后光升级,除了血量还在上升以外别的数字满了没有任何提升。这样导致高等级后面练级就没啥意义了。

还有就是每关出场只能有30个敌人。比起曹操传的每关最多80个敌人的设定少多了。而且似乎也没有武将复活的设定。这样导致剧本增强受到了一定的限制。

[ 本帖最后由 lewulezo 于 2010-7-16 14:50 编辑 ]
顶部
性别:未知-离线 ctermiii


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


发表于 2010-7-17 13:52 资料 文集 短消息 只看该作者
04 05 06 04 05 06 05 06 07 03 03 03 02 02 02 05
06 07 04 04 04 05 05 08 0A 06 08 03 03 03 05 07
07 07 05 05 02 05 04 05
exe里0x451F50的位置这40个数是什么?
台词:某某某全力一击的时候,会先取对应兵种的这个数,比如骑兵(代号06)取第7个数05
然后取100以内的随机数,如果随机数小于这个05,就发生:“某某某全力一击”。

某个状态下,这个值会被/2


0042397D  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
00423980  |.  8B0C88        MOV ECX,DWORD PTR DS:[EAX+ECX*4]
00423983  |.  E8 0E6A0000   CALL 0042A396         ;这里就是取0x451F50表格里的某个兵种对应的数并查看武将状态
00423988  |.  33DB          XOR EBX,EBX
0042398A  |.  8AD8          MOV BL,AL      ;这个就是上边提到的结果05
0042398C  |.  6A 64         PUSH 64                                          
0042398E  |.  E8 95390200   CALL 00447328           ;这两个是求100以内的随机数
00423993  |.  83C4 04       ADD ESP,4
00423996  |.  3BD8          CMP EBX,EAX
00423998  |.  0F86 16000000 JBE EKD2Win.004239B4                     ;  全力一击的概率
0042399E  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
004239A1  |.  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
004239A4  |.  99            CDQ
004239A5  |.  2BC2          SUB EAX,EDX
004239A7  |.  C1F8 01       SAR EAX,1
004239AA  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
004239AD  |.  C745 F0 01000>MOV DWORD PTR SS:[EBP-10],1

本帖最近评分记录
阿尔法孝直 2010-7-17 13:55 +100 破解暴击算法!!
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-7-17 13:57 资料 个人空间 短消息 只看该作者 QQ
这么说,暴击的概率只与攻击方兵种有关?

QUOTE:
原帖由 ctermiii 于 2010-7-17 13:52 发表
某个状态下,这个值会被/2

这么说,“牵制”策略不仅影响攻击速度,还影响暴击率?

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


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


发表于 2010-7-17 14:52 资料 文集 短消息 只看该作者
从代码来看只有这种情况,只跟兵种和随机数有关;你可以把哪个64H改成比表格里最小的数还小的,比如改为02,除了打不中之外,次次全力一击
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-7-18 00:15 资料 个人空间 短消息 只看该作者 QQ
计算随机数的函数:

sub_447328 proc near

arg_0= dword ptr  8

push    ebp
mov     eax, 0
mov     ebp, esp
cmp     [esp+arg_0], 2
jb      short loc_447343

---------------------------------------------

unsigned int __cdecl sub_447328(unsigned int a1)
{
  unsigned int result; // eax@1

  result = 0;
  if ( a1 >= 2 )
    result = sub_4472FC() % a1;
  return result;
}

---------------------------------------------------

显然采用求余算法,再看看调用的4472FC:

---------------------------------------------------

sub_4472FC proc near
mov     eax, dword_453B20
imul    eax, 41C64E6Dh
add     eax, 3039h
mov     dword_453B20, eax
and     eax, 7FFF0000h
shr     eax, 10h
retn
sub_4472FC endp

---------------------------------------------------

unsigned int __cdecl sub_4472FC()
{
  dword_453B20 = 1103515245 * dword_453B20 + 12345;
  return ((1103515245 * dword_453B20 + 12345) & 0x7FFF0000u) >> 16;
}

---------------------------------------------------

可见这是一个迭代算法,那么,知道了当前的随机数,就可以直接算出下一个随机数;
而0x453B20处在每一战开始时都恢复成 01 00,即双字节的0x00 01,那么每战随机序列都是相同的。
于是就可以解释为什么打法及结果可以百分之百重现的问题。
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-7-18 01:06 资料 个人空间 短消息 只看该作者 QQ
用IDA看了一下138楼的代码,发现这是其中的一小部分,其完整代码为:

signed int __thiscall sub_4238AF(int this, unsigned int a2)
{
  signed int result; // eax@26
  unsigned int v3; // ebx@6
  int v4; // eax@10
  int v5; // eax@12
  char v6; // al@14
  unsigned int v7; // ebx@14
  char v8; // al@14
  char v9; // al@16
  char v10; // al@17
  unsigned int v11; // eax@17
  int v12; // [sp+Ch] [bp-14h]@1
  int v13; // [sp+14h] [bp-Ch]@1
  int v14; // [sp+18h] [bp-8h]@1
  signed int v15; // [sp+1Ch] [bp-4h]@1
  signed int v16; // [sp+10h] [bp-10h]@1

  v12 = this;
  v13 = (int)((char *)&dword_4556E8 + 54 * sub_409130(*(_DWORD *)(this + 4 * *(_BYTE *)(this + 16))));
  v14 = (int)((char *)&dword_4556E8 + 54 * sub_409130(*(_DWORD *)(v12 + 4 * *(_BYTE *)(v12 + 17))));
  v15 = 0;
  v16 = 0;
  switch ( *(_BYTE *)(v12 + 18) )
  {
    case 1:
      v15 =  sub_42A4AD(*(_DWORD *)(v12 + 4 * *(_BYTE *)(v12 + 16)), v14, 1); //怀疑这个是攻击伤害函数!!!
      if ( a2 >= 1 || *(_BYTE *)(v12 + 19) == 1 )  //如果是反击
        v15 /= 2;   //反击伤害减半
      sub_423769(v12);
      if ( v15 > 0 )
      {
        v3 = (unsigned __int8)sub_42A396(*(_DWORD *)(v12 + 4 * *(_BYTE *)(v12 + 16)));
        if ( v3 > sub_447328(0x64u) )  //如果是暴击
        {
          v15 = 3 * v15 / 2; //暴击伤害为150%
          v16 = 1;
        }
      }
      break;
    case 2:
      v4 = v12;
      LOBYTE(v4) = *(_BYTE *)(v12 + 19);
      v15 = sub_4087E1(v14, v4);
      break;
    case 3:
      v5 = v12;
      LOBYTE(v5) = *(_BYTE *)(v12 + 19);
      v15 = sub_408907(v14, v5);
      break;
  }
  if ( v15 > 0 )
  {
    v6 = sub_409280(v14);
    v7 = sub_447328((unsigned __int8)v6);
    v8 = sub_409280(v13);
    if ( v7 >= sub_447328((unsigned __int8)v8) && v16 != 1 )
    {
      v10 = sub_409280(v14);
      v11 = sub_447328((unsigned __int8)v10);
      v15 = sub_4472CB(v15, v11 % 6);
    }
    else
    {
      v9 = sub_409280(v13);
      v15 += sub_447328((unsigned __int8)v9) % 6;  //原来攻击伤害的随机加成是0~5的随机数
    }
  }
  if ( sub_409220() == 1 )
  {
    if ( !sub_40BAB0() )
      v15 = 8 * v15 / 10;
    if ( sub_40BAB0() == 2 )
      v15 = 12 * v15 / 10;
  }
  if ( v16 == 1 )
  {
    if ( v15 > 0 )
    {
      sub_409580();
      sub_438F35(0, (char)(char *)dword_45181C);
    }
  }
  result = *(_DWORD *)(v12 + 4 * *(_BYTE *)(v12 + 17) + 26);
  if ( result >= v15 )
    result = v15;
  *(_DWORD *)(v12 + 42) = result;
  return result;
}

------------------------------------------------------------------------------------

unsigned int __thiscall sub_42A4AD(int this, int a2, int a3)
{
  unsigned int result; // eax@2
  int v4; // eax@1
  char v5; // al@1
  int v6; // [sp+10h] [bp-24h]@1
  char v7; // [sp+28h] [bp-Ch]@1
  char *v8; // [sp+18h] [bp-1Ch]@3
  char *v9; // [sp+1Ch] [bp-18h]@3
  unsigned __int8 v10; // [sp+2Ch] [bp-8h]@3
  unsigned __int8 v11; // [sp+20h] [bp-14h]@3
  unsigned int v12; // [sp+24h] [bp-10h]@3
  unsigned int v13; // [sp+30h] [bp-4h]@3
  unsigned int v14; // [sp+14h] [bp-20h]@3
  unsigned int v15; // [sp+Ch] [bp-28h]@10

  v6 = this;
  v4 = sub_41EF0C(a2);
  v5 = sub_429061(v4);
  v7 = v5;
  if ( (unsigned __int8)v5 == 255 )
  {
    result = 0;
  }
  else
  {
    v8 = (char *)&dword_46C098 + 23 * (unsigned __int8)v7;
    v9 = (char *)&dword_4556E8 + 54 * *(_DWORD *)v6;
    v10 = sub_42A321();
    v11 = sub_42A321();
    v12 = 0;
    v13 = (unsigned int)v10 * sub_42A137() / 0xA;
    v14 = (unsigned int)v11 * sub_42A227() / 0xA;
    if ( sub_447328(v13) >= v14 / 0xA || !a3 || sub_409150(16) )
    {
      if ( (v14 + 1) >> 1 < v13 )
        v12 = v13 - (v14 >> 1);
      else
        v12 = 1;
      v15 = (unsigned __int8)sub_4092A0();
      v15 -= 9;
      if ( v15 <= 0x1E )
      {
        switch ( *((_BYTE *)byte_42A66D + v15) )  //这个会不会是求兵种相克的修正?
        {
          case 0:
          case 5:
            v12 = 3 * v12 >> 2;
            break;
          case 1:
            v12 = 3 * v12 >> 1;
            break;
          case 2:
          case 4:
          case 6:
            v12 >>= 1;
            break;
          case 3:
            v12 = 1;  //藤甲兵??
            break;
          case 7:
            break;
        }
      }
      result = v12;
    }
    else
    {
      result = 0;
    }
  }
  return result;
}

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


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


发表于 2010-7-18 11:59 资料 文集 短消息 只看该作者
IDA真强大……


光荣的随机数,从三国志4~9(我只改过这些,其他不知道)以及英杰传系列,随机数都是差不多的算法;
肯定有41C64E6DH和3039H这两个数并且一前一后,所以我直接去搜索这两个数,先确认随机数函数是哪个,对它下断点,然后进游戏攻击一下,断下来就肯定是相关的函数了,剩下的就是分析程序了。

你说哪个随机数的问题,只能尽量多的让处理玩家动作的函数调用随机函数,才有现在经常说的改变行动顺序来改变随机结果的办法;但早期系统资源有限,如果调用太多会影响系统响应速度,所以只有某些情况下才调用;

你可以改啊,改成每战开始,随机数不复位就行。

不过据我所知,这个0001不是每战开始复位的,而是每次运行exe文件的时候才这样;

[ 本帖最后由 ctermiii 于 2010-7-18 12:10 编辑 ]
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-7-18 12:01 资料 个人空间 短消息 只看该作者 QQ
回复 #143 ctermiii 的帖子

你先看看0x0042A4AD开始的这段,我怀疑这儿是攻击伤害的算法
顶部
性别:男-离线 阿尔法孝直
(雀力日进)

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

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


发表于 2010-7-18 12:21 资料 个人空间 短消息 只看该作者 QQ
回复 #143 ctermiii 的帖子

试了第1战,第1回合(赵云不动,直接回合结束转到敌军行动,1骑兵攻击赵云-2血,被赵云反击连击剩4血;另一骑兵攻击赵云不中被赵云反击-23血)之后总撤退,再次执行第1回合,结果和前面的相同。证明总撤退后随机数复位。

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


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


发表于 2010-7-18 12:40 资料 文集 短消息 只看该作者
嗯,那跟战旗类有关,其他界面都是剧情没有战斗,可能没有参与随机数;
像三国志类的,一般这个随机数会写入存档的
顶部
性别:未知-离线 ctermiii


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


发表于 2010-7-18 14:27 资料 文集 短消息 只看该作者
截取一小部分:

这里应该只是物理攻击伤害吧,我的诸葛亮才1级,没策略,没试。
这个伤害算出来后,返回我之前贴的函数后边计算,
最最终的伤害是你已经写出来的那些:
1、致命一击
2、反击
3、加上或者减去等级因素的随机值


结论是:
除了几个特殊兵种怕或者不怕物理攻击外,没有什么相克关系
可能是用兵种成长特性和初始特性来决定所谓的相克了
....................................
0042A514   .  8B4D DC       MOV ECX,DWORD PTR SS:[EBP-24]
0042A517   .  E8 05FEFFFF   CALL <EKD2Win.GetBingZhongDiXingXiuZheng>
0042A51C   .  8845 F8       MOV BYTE PTR SS:[EBP-8],AL
0042A51F   .  8B4D E4       MOV ECX,DWORD PTR SS:[EBP-1C]
0042A522   .  E8 FAFDFFFF   CALL <EKD2Win.GetBingZhongDiXingXiuZheng>
0042A527   .  8845 EC       MOV BYTE PTR SS:[EBP-14],AL
0042A52A   .  C745 F0 00000>MOV DWORD PTR SS:[EBP-10],0
0042A531   .  8B4D DC       MOV ECX,DWORD PTR SS:[EBP-24]
0042A534   .  E8 FEFBFFFF   CALL <EKD2Win.GetGongJi_>                                  ;  攻击方攻击力
0042A539   .  33C9          XOR ECX,ECX
0042A53B   .  8A4D F8       MOV CL,BYTE PTR SS:[EBP-8]
0042A53E   .  0FAFC1        IMUL EAX,ECX
0042A541   .  B9 0A000000   MOV ECX,0A
0042A546   .  2BD2          SUB EDX,EDX
0042A548   .  F7F1          DIV ECX
0042A54A   .  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX                               ;  攻击方攻击力x攻击方所在地形因素/10
0042A54D   .  8B4D E4       MOV ECX,DWORD PTR SS:[EBP-1C]
0042A550   .  E8 D2FCFFFF   CALL <EKD2Win.GetFangYu_>                                  ;  防御方防御力
0042A555   .  33C9          XOR ECX,ECX
0042A557   .  8A4D EC       MOV CL,BYTE PTR SS:[EBP-14]
0042A55A   .  0FAFC1        IMUL EAX,ECX
0042A55D   .  B9 0A000000   MOV ECX,0A
0042A562   .  2BD2          SUB EDX,EDX
0042A564   .  F7F1          DIV ECX
0042A566   .  8945 E0       MOV DWORD PTR SS:[EBP-20],EAX                              ;  防御力x地形因素/10
0042A569   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]                               ;  攻击方攻击力x攻击方所在地形因素/10
0042A56C   .  50            PUSH EAX                                                   ; /Arg1
0042A56D   .  E8 B6CD0100   CALL <EKD2Win.Random%Arg1>                                 ; \Random%Arg1
0042A572   .  83C4 04       ADD ESP,4
0042A575   .  8BC8          MOV ECX,EAX
0042A577   .  BB 0A000000   MOV EBX,0A
0042A57C   .  8B45 E0       MOV EAX,DWORD PTR SS:[EBP-20]
0042A57F   .  2BD2          SUB EDX,EDX
0042A581   .  F7F3          DIV EBX
0042A583   .  3BC8          CMP ECX,EAX                                                ; 随机数%(攻击力x地形因素/10)大于等于防御力x地形因素/10/10则往下走
0042A585   .  0F83 28000000 JNB EKD2Win.0042A5B3
0042A58B   .  837D 0C 00    CMP DWORD PTR SS:[EBP+C],0
0042A58F   .  0F84 1E000000 JE EKD2Win.0042A5B3
0042A595   .  6A 10         PUSH 10                                                    ; /这个不知道什么状态,如果满足前面条件,此状态下不会受伤
0042A597   .  8B4D E4       MOV ECX,DWORD PTR SS:[EBP-1C]                              ; |
0042A59A   .  E8 B1EBFDFF   CALL <EKD2Win.CheckIfSomeStatus>                           ; \CheckIfSomeStatus
0042A59F   .  85C0          TEST EAX,EAX
0042A5A1   .  0F85 0C000000 JNZ EKD2Win.0042A5B3
0042A5A7   .  33C0          XOR EAX,EAX
0042A5A9   .  E9 E6000000   JMP EKD2Win.0042A694
0042A5AE   .  E9 D9000000   JMP EKD2Win.0042A68C
0042A5B3   >  8B45 E0       MOV EAX,DWORD PTR SS:[EBP-20]                              ;  防御力x地形因素/10
0042A5B6   .  40            INC EAX
0042A5B7   .  C1E8 01       SHR EAX,1                                                  ;  (防御力x地形因素/10+1)/2
0042A5BA   .  3B45 FC       CMP EAX,DWORD PTR SS:[EBP-4]
0042A5BD   .  0F82 0C000000 JB EKD2Win.0042A5CF
0042A5C3   .  C745 F0 01000>MOV DWORD PTR SS:[EBP-10],1         ;(防御力x地形因素/10+1)/2大于攻击方攻击力x攻击方所在地形因素/10,只受1点伤害
0042A5CA   .  E9 0E000000   JMP EKD2Win.0042A5DD
0042A5CF   >  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0042A5D2   .  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]
0042A5D5   .  C1E9 01       SHR ECX,1
0042A5D8   .  2BC1          SUB EAX,ECX                                                ;  
0042A5DA   .  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX               ; 小于的话,伤害为:防御力x地形因素/10-攻击力x地形因素/10/2
0042A5DD   >  8B4D E4       MOV ECX,DWORD PTR SS:[EBP-1C]
0042A5E0   .  E8 BBECFDFF   CALL <EKD2Win.GetBingZhong_>                               ;  物理攻击只跟防御方兵种有关,除了下边特殊兵种,没有其他相克关系
0042A5E5   .  33C9          XOR ECX,ECX
0042A5E7   .  8AC8          MOV CL,AL
0042A5E9   .  894D D8       MOV DWORD PTR SS:[EBP-28],ECX
0042A5EC   .  E9 3C000000   JMP EKD2Win.0042A62D
0042A5F1   >  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]                              ; 防御方兵种代号9、A、B的时候伤害为75%
0042A5F4   .  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
0042A5F7   .  C1E8 02       SHR EAX,2
0042A5FA   .  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
0042A5FD   .  E9 8A000000   JMP EKD2Win.0042A68C
0042A602   >  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]                              ;  防御方兵种代号1B、1C、1D伤害达150%
0042A605   .  8D0440        LEA EAX,DWORD PTR DS:[EAX+EAX*2]
0042A608   .  C1E8 01       SHR EAX,1
0042A60B   .  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
0042A60E   .  E9 79000000   JMP EKD2Win.0042A68C
0042A613   >  C16D F0 01    SHR DWORD PTR SS:[EBP-10],1                                ;  兵种代号1E、1F被攻击只有伤害50%
0042A617   .  E9 70000000   JMP EKD2Win.0042A68C
0042A61C   >  C745 F0 01000>MOV DWORD PTR SS:[EBP-10],1                                ;  某个bt兵种,代号22H,只有1点伤害0042A623   .  E9 64000000   JMP EKD2Win.0042A68C                                       ;  其他没有另外加成伤害
0042A628   .  E9 5F000000   JMP EKD2Win.0042A68C
0042A62D   >  836D D8 09    SUB DWORD PTR SS:[EBP-28],9
0042A631   .  837D D8 1E    CMP DWORD PTR SS:[EBP-28],1E
0042A635   .  0F87 51000000 JA EKD2Win.0042A68C
0042A63B   .  8B45 D8       MOV EAX,DWORD PTR SS:[EBP-28]                              ;  兵种代号-9
0042A63E   .  33C9          XOR ECX,ECX
0042A640   .  8A88 6DA64200 MOV CL,BYTE PTR DS:[EAX+42A66D]
0042A646   .  FF248D 4DA642>JMP DWORD PTR DS:[ECX*4+42A64D]
0042A64D   .  F1A54200      DD EKD2Win.0042A5F1                                        ;  分支表 被用于 0042A646
0042A651   .  02A64200      DD EKD2Win.0042A602
0042A655   .  13A64200      DD EKD2Win.0042A613
0042A659   .  1CA64200      DD EKD2Win.0042A61C
0042A65D   .  13A64200      DD EKD2Win.0042A613
0042A661   .  F1A54200      DD EKD2Win.0042A5F1
0042A665   .  13A64200      DD EKD2Win.0042A613
0042A669   .  8CA64200      DD EKD2Win.0042A68C
0042A66D   .  00            DB 00                                                      ;  分支 0042A64D 索引表
0042A66E   .  00            DB 00
0042A66F   .  00            DB 00
0042A670   .  07            DB 07
0042A671   .  07            DB 07
0042A672   .  07            DB 07
0042A673   .  07            DB 07
0042A674   .  07            DB 07
0042A675   .  07            DB 07
0042A676   .  07            DB 07
0042A677   .  07            DB 07
0042A678   .  07            DB 07
0042A679   .  07            DB 07
0042A67A   .  07            DB 07
0042A67B   .  07            DB 07
0042A67C   .  07            DB 07
0042A67D   .  07            DB 07
0042A67E   .  07            DB 07
0042A67F   .  01            DB 01
0042A680   .  01            DB 01
0042A681   .  01            DB 01
0042A682   .  02            DB 02
0042A683   .  02            DB 02
0042A684   .  07            DB 07
0042A685   .  07            DB 07
0042A686   .  03            DB 03
0042A687   .  04            DB 04
0042A688   .  05            DB 05
0042A689   .  07            DB 07
0042A68A   .  07            DB 07
0042A68B   .  06            DB 06
0042A68C   >  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]                              ;  最终伤害
0042A68F   .  E9 00000000   JMP EKD2Win.0042A694
0042A694   >  5F            POP EDI
0042A695   .  5E            POP ESI
0042A696   .  5B            POP EBX
0042A697   .  C9            LEAVE
0042A698   .  C2 0800       RETN 8

[ 本帖最后由 ctermiii 于 2010-7-18 14:36 编辑 ]
顶部
性别:男-离线 lewulezo


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


发表于 2010-7-18 21:34 资料 文集 短消息 只看该作者
抛砖引玉,沉寂几天,这帖子终于迎来分析高人。

我想如果在把伤害额外计算的代码修改一下,然后就像godtype自定义兵种对应装备那样搞个数据区,就可以自定义所有各种兵种之间的兵种相克关系了。真是功德无量啊。
顶部
性别:未知-离线 ctermiii


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


发表于 2010-7-24 17:54 资料 文集 短消息 只看该作者
按照不增加区段、不占用其他位置的原则

从0x42A5E9~0x42A693这大概150+字节的位置可以重写一下

要给代码留点位置,大概能用的作为数据的区域在80字节;

如果能把表格限制在80字节以内,重写一下就好了,你也会写程序的就不说什么了。

有难度的是,要40个兵种全列在表格里的话,按相克能力1个字节,也要40x40字节;

但如果按照大类来算的话,倒是可以

比如把弓和弓骑、炮车合并一类等等,如果能商定一个都可以接受的原则出来,

缩减为8或者9大类兵种的话,还是可以写的。

合并大类倒也不用担心相克太单调,毕竟还有兵种各自的地形适应性在那里呢,一起做个修改就是了

这种相克和合并大类的数据,每个人看法都不一样,标准难定。





我看了一下,0x4813A0之后位置好像有3000个字节可以用,如果想占用这个地方的话,就不是什么大问题了。
顶部
性别:男-离线 lewulezo


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


发表于 2010-7-24 21:22 资料 文集 短消息 只看该作者
回复 #149 ctermiii 的帖子

我同意。我觉得没必要搞40*40这么大的矩阵数据,这样修订数据也会很麻烦。首先带3转,2转的兵种算是一个兵科,这样也就只有23种了。

合并大类的做法可以参照兵种地形效果,设定一个数据区,把所有兵种分别指定对应的一个大类ID(40个字节),然后再设定各大类之间的相克值即可。

我对汇编不怎么熟,如果有高人能帮忙编写一下,将不胜感激。

[ 本帖最后由 lewulezo 于 2010-7-24 21:26 编辑 ]


顶部

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




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

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

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