非常奇怪,之前我误将out 43,0就是StretchBltPage当成StretchBltPageEx来处理,测试大富翁运行正常,所以一直没有发现。前两天测试剑侠风云,发现错了,改正之后剑侠风云贴图没有问题了,大富翁又出问题了,仔细分析,发现很奇怪的一件事,如下是大富翁反汇编得到的:

总共是push了8个参数,最后的CAL int ADD rs,0x20也就是32,确定了DB6应该是个处理8个参数的函数,而事实上的DB6却是StretchBltPage,StretchBltPage应该是4个参数的。如下:

图中的OUT 43,0就是StretchBltPage,StretchBltPageEx是OUT 80,0。我查找了下,在整个汇编代码中也没有找到OUT 80,0,证明大富翁只用了StretchBltPage。
但是,照这个汇编代码来看,第一张图的汇编代码应该是由类似stretchbltpage(0,240,x,80,0,0,x,x)编译而来的。这就诡异了,要让大富翁正确贴图,OUT 43,0必须能实现StretchBltPageEx的功能,不然前面的0,240,x,80这几个参数不起作用了。我的代码就是正确实现了stretchbltpage,大富翁就贴图错误,把out 43,0当成out80,0处理就好了。这么说来out 43,0莫非能分情况处理?根据参数个数?
我这几天脑子被各种蛋疼的BUG烧坏了,帮我看一看 @kydkong9288S

总共是push了8个参数,最后的CAL int ADD rs,0x20也就是32,确定了DB6应该是个处理8个参数的函数,而事实上的DB6却是StretchBltPage,StretchBltPage应该是4个参数的。如下:

图中的OUT 43,0就是StretchBltPage,StretchBltPageEx是OUT 80,0。我查找了下,在整个汇编代码中也没有找到OUT 80,0,证明大富翁只用了StretchBltPage。
但是,照这个汇编代码来看,第一张图的汇编代码应该是由类似stretchbltpage(0,240,x,80,0,0,x,x)编译而来的。这就诡异了,要让大富翁正确贴图,OUT 43,0必须能实现StretchBltPageEx的功能,不然前面的0,240,x,80这几个参数不起作用了。我的代码就是正确实现了stretchbltpage,大富翁就贴图错误,把out 43,0当成out80,0处理就好了。这么说来out 43,0莫非能分情况处理?根据参数个数?
我这几天脑子被各种蛋疼的BUG烧坏了,帮我看一看 @kydkong9288S