暗黑mod吧 关注:5,932贴子:53,261
  • 13回复贴,共1

冷雨整合大背包(纯净,限制护符区域)

取消只看楼主收藏回复

最近,我整合制作了一版大背包。
发布一下,本贴共包含三个内容:
1、10×8版大背包。
2、16×10版大背包。
3、快速存取补丁计算器Excel。
适用1.13c和各种分辨率。(16×10版要求至少1024×768)


IP属地:黑龙江1楼2021-05-08 17:47回复
    先上图,10×8版



    IP属地:黑龙江3楼2021-05-08 17:48
    回复
      16×10版



      IP属地:黑龙江4楼2021-05-08 17:49
      收起回复
        先说大背包,
        特点有:
        1、纯净,除大背包,大方块(10×8)外,不含其他任何东西。
        2、划定了护符生效区(8×4),区域外的护符全部无效(但不会变红)。
        这个区域就是原版背包留两列捡东西。
        3、对以下分辨率制作了快速存取补丁。
        640 × 480
        800 × 600
        1024 × 768
        1280 × 720
        1440 × 900
        1600 × 900
        1920 × 1080
        未在列的分辨率可以用 快速存取补丁计算器Excel,自己改。


        IP属地:黑龙江5楼2021-05-08 17:50
        收起回复
          然后说 快速存取补丁计算器Excel,这个工具可以配合UE修复快速存取失效,简单易用,小白可用。不仅限于我发布的大背包,原版和其他版本也能用。
          提供【10×8】,【16×10】,【原版背包+大箱子PlugY】三个已经填好数据的版本。
          比如我现在要做一个10×8版1600×900的快速存取补丁。
          第一步,打开对应excel,填入分辨率。


          计算结果就出来了。

          第二步,用UE打开d2hackmap.dll,转到地址 0x2b4a0h (CTRL+G),把上面数据一股脑填进去保存就完事。

          如果是装了其他大背包/大盒子的,请参阅Excel中关于数据来源的说明。


          IP属地:黑龙江6楼2021-05-08 17:52
          回复
            最后说说这两个版本的来源。
            10×8版是在d2mods网站上的一版修改而来。
            16×10版是基于这个帖子修改的:
            暗黑破坏神吧-【超大型物品栏】顶 风 作 案
            作者:@慕雨昭夕
            发布贴完。


            IP属地:黑龙江7楼2021-05-08 18:00
            收起回复
              然后讨论下技术,目前我能想到三个需要改进的点。
              第一点,护符区域移动到上方更加合理。切换原版背包 / 大背包更方便些。
              但是目前会产生一个BUG:

              大板子可以通过蹭边的方式生效。这是因为暗黑2的物品坐标是第一个格子的坐标。下面贴出我用(Chao)的代码:
              D2Common.dll
              Address Hex dump Command Comments
              6FD78843F7D8NEG EAX
              6FD788455EPOP ESI
              6FD78846E9 A2390400JMP 6FDBC1ED ;|Jump to custom code
              Address Hex dump Command Comments
              6FDBC1ED 85C0 TEST EAX,EAX
              6FDBC1EF 75 03 JNE SHORT 6FDBC1F4
              6FDBC1F1 C2 0800 RETN 8
              6FDBC1F4 8B44E4 04 MOV EAX,DWORD PTR SS:[ESP+4]
              6FDBC1F8 8B40 2C MOV EAX,DWORD PTR DS:[EAX+2C]
              6FDBC1FB 8378 0C 00 CMP DWORD PTR DS:[EAX+0C],0
              6FDBC1FF 72 1A JB SHORT 6FDBC21B
              6FDBC201 8378 0C 07 CMP DWORD PTR DS:[EAX+0C],7
              6FDBC205 77 14 JA SHORT 6FDBC21B
              6FDBC207 8378 10 04 CMP DWORD PTR DS:[EAX+10],4
              6FDBC20B 72 0E JB SHORT 6FDBC21B
              6FDBC20D 8378 10 07 CMP DWORD PTR DS:[EAX+10],7
              6FDBC211 77 08 JA SHORT 6FDBC21B
              6FDBC213 B8 01000000 MOV EAX,1
              6FDBC218 C2 0800 RETN 8
              6FDBC21B 31C0 XOR EAX,EAX
              6FDBC21D C2 0800 RETN 8
              这段代码是参考的 The Phrozen Keep 和 snej 上的帖子得到。
              查阅资料得知 6FD787D0 处的函数应该是这样的:
              __stdcall AreCharmReqsMet(struct Unit *pItem, struct Unit *pUnit)
              而 6FDBC1FB 处 CMP 指令 EAX 寄存器存的显然是 某个结构体基址指针。看前面的代码可以知道, MOV EAX,DWORD PTR SS:[ESP+4] 得到的是 struct Unit pItem 的基址, MOV EAX,DWORD PTR DS:[EAX+2C] 得到 Path 结构体基址(DWORD),然后 EAX+0C 得到X坐标(DWORD),EAX+10 得到Y坐标(DWORD)。
              这两个结构体的结构应该是:
              struct Unit {
              ...
              Path * path // 0x2C
              ....
              }
              Path {
              ...
              x // 0x0C
              y // 0x10
              ...
              }
              Unit结构体里面应该会有物品信息,只要能找到物品类型,就能判断是否为大板子,后面的程序就好写了。
              目前我正在翻 PlugY 大箱子的源代码 ,The Phrozen Keep 还有 d2Common.dll 的汇编代码。争取解决这个问题。


              IP属地:黑龙江9楼2021-05-08 20:34
              收起回复
                护符区域移动到上方的BUG,已经解决。现在 10×8 和 16×10 的都变成区域在上面了。
                更新到网盘链接了。


                IP属地:黑龙江18楼2021-05-09 13:23
                收起回复
                  解决这个BUG是我自己写的代码,分享下写法。
                  思路核心是利用 6FD74430(D2Common #10744)处的函数
                  int __stdcall D2COMMON_CheckItemType(UnitAny* pItem,DWORD itemType)
                  物品类型可以在 ItemType.txt 找到,但和它不完全一致。0x53是中板子,0x54是大板子。
                  D2Common.dll
                  CPU Disasm
                  Address Hex dump Command Comments
                  6FDBC1ED 85C0 TEST EAX,EAX
                  6FDBC1EF 75 03 JNE SHORT 6FDBC1F4
                  6FDBC1F1 C2 0800 RETN 8
                  6FDBC1F4 8B54E4 04 MOV EDX,DWORD PTR SS:[ESP+4]
                  6FDBC1F8 8B4A 2C MOV ECX,DWORD PTR DS:[EDX+2C]
                  6FDBC1FB 8379 0C 00 CMP DWORD PTR DS:[ECX+0C],0
                  6FDBC1FF 72 49 JB SHORT 6FDBC24A
                  6FDBC201 8379 0C 07 CMP DWORD PTR DS:[ECX+0C],7
                  6FDBC205 77 43 JA SHORT 6FDBC24A
                  6FDBC207 8379 10 00 CMP DWORD PTR DS:[ECX+10],0
                  6FDBC20B 72 3D JB SHORT 6FDBC24A
                  6FDBC20D 6A 54 PUSH 54
                  6FDBC20F 52 PUSH EDX
                  6FDBC210 E8 1B82FBFF CALL 6FD74430
                  6FDBC215 85C0 TEST EAX,EAX
                  6FDBC217 B8 01000000 MOV EAX,1
                  6FDBC21C 75 18 JNE SHORT 6FDBC236
                  6FDBC21E 8B54E4 04 MOV EDX,DWORD PTR SS:[ESP+4]
                  6FDBC222 6A 53 PUSH 53
                  6FDBC224 52 PUSH EDX
                  6FDBC225 E8 0682FBFF CALL 6FD74430
                  6FDBC22A 85C0 TEST EAX,EAX
                  6FDBC22C B8 02000000 MOV EAX,2
                  6FDBC231 75 03 JNE SHORT 6FDBC236
                  6FDBC233 83C0 01 ADD EAX,1
                  6FDBC236 8B4CE4 04 MOV ECX,DWORD PTR SS:[ESP+4]
                  6FDBC23A 8B49 2C MOV ECX,DWORD PTR DS:[ECX+2C]
                  6FDBC23D 3941 10 CMP DWORD PTR DS:[ECX+10],EAX
                  6FDBC240 77 08 JA SHORT 6FDBC24A
                  6FDBC242 B8 01000000 MOV EAX,1
                  6FDBC247 C2 0800 RETN 8
                  6FDBC24A 31C0 XOR EAX,EAX
                  6FDBC24C C2 0800 RETN 8


                  IP属地:黑龙江19楼2021-05-09 13:32
                  收起回复
                    【注意】
                    请务必按照使用说明安装,卸载。
                    否则可能造成意外丢失物品,big error等后果。
                    目前大背包更适用于单机自己玩。如果有群或参与交易,请先确认你所在的环境能否接受。


                    IP属地:黑龙江28楼2021-05-17 18:07
                    收起回复
                      第一个点短时间内解决不了了,先说说后面的问题。
                      第二个需要改进的点,16×10大背包的黑色背景太丑,如图。


                      这个黑色区域是怎么产生的呢?这还要从D2MultiRes说起。也就是现在大部分人用的高清补丁。
                      这个补丁由 Sluggy 在 2008年 原发于 Frozen Keep,未给出源代码,且当时并不支持 1.13c,这个作者据说是个Chinese Guy。后来国内有人用反汇编技术做了改版,支持了1.13c,才成了今天的高清补丁。
                      我的16×10大背包是基于暮雨昭夕的帖子修改的,他的原版无法用于高清,就是因为灰色图层会强行覆盖除原版背包以外的区域。我是怎么解决这个问题的呢?就是把灰色图层(D2MRStoneBack.dc6)改成了纯黑色,纯黑色会被暗黑2主程序处理成透明色(那个年代的游戏大都是用这个方式处理透明的)。
                      上图所看到的黑色,就是这个解决方案带来的副作用。


                      IP属地:黑龙江32楼2021-05-22 06:57
                      回复
                        这是问题得到解决后的样子,适用所有分辨率。
                        因为这次动的代码只有一个绘图方面的函数,而且仅仅是改动了其中的参数数字,应当不至于出现任何BUG。
                        等我经过足够的测试,就把这个改进更新到网盘资源中。



                        IP属地:黑龙江34楼2021-05-22 07:13
                        收起回复
                          第三个改进点,更大的背包,突破512×512的贴图限制。
                          (似乎只能到16×16,不过那也够大了)
                          我想这么改进,主要还是因为我觉得目前装备的摆放还是不够美观。
                          不知多少人对着这张图流下羡慕的口水,哈哈。。

                          我的设计不会和这个一模一样,具体什么样,还没开始画哈哈。
                          程序部分,这个需要修改d2client.dll,我找到了一份现成的参考代码,以我目前的技术基本没有问题,只是还需要一段时间,而且第一点我还没有放弃,这两个问题很可能要一起解决。


                          IP属地:黑龙江35楼2021-05-22 07:57
                          收起回复
                            此楼为 没有绘制护符限制区域的UI底图,方便其他想在我基础上修改的 Moder 使用。


                            IP属地:黑龙江43楼2021-05-31 01:22
                            收起回复