铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 3148|回复: 23

[通用] 简单修改,革命性效果3——不起眼的地图显示修正(副二楼的一个猜想)

[复制链接]
发表于 2009-9-20 12:25 | 显示全部楼层 |阅读模式
----又是唠叨的前言-----

昨天刚做完第二弹,想搞搞那些贴图文件~~

但很悲哀地发现,复刻版又有bug了,为什么我无论做什么都可以发现bug呢?泪流满面啊~~

还好,一会儿就修正了,想到这个bug的广泛性和修改难度,于是写起了第三弹

对了,除了复刻版的游戏中,这个显示bug同样存在于fe和sfe中,dos版不存在

----------BUG展示和解释--------------

好,废话不说(其实是说完了),我们来看看下图的bug,不知道你们有没有发现呢?

第一幅图,树叶穿到了山壁上,觉得郁闷不?


第二幅,墙壁被地面和地毯覆盖上了,囧不?

其实这两幅图看似相似,其实造成的bug的原因是不一样的~~

什么原因呢?我们得首先看一下初始化地图的中心代码:
//Save the image informations of the whole scence.
//生成场景映像

procedure InitialScence();
var
  i1, i2, x, y: integer;
  pos: TPosition;
begin
  for i1 := 0 to 63 do
    for i2 := 0 to 63 do
    begin
      x := -i1 * 18 + i2 * 18 + 1501;
      y := i1 * 9 + i2 * 9 + 9;
        InitialSPic(SData[CurScence, 0, i1, i2] div 2, x, y, 0, 0, 2304, 1502);
      if (SData[CurScence, 1, i1, i2] > 0) then
        InitialSPic(SData[CurScence, 1, i1, i2] div 2, x, y - SData[CurScence, 4, i1, i2], 0, 0, 2304, 1502);
      if (SData[CurScence, 2, i1, i2] > 0) then
        InitialSPic(SData[CurScence, 2, i1, i2] div 2, x, y - SData[CurScence, 5, i1, i2], 0, 0, 2304, 1502);
      if (SData[CurScence, 3, i1, i2] >= 0) and (DData[CurScence, SData[CurScence, 3, i1, i2], 5] > 0) then
        InitialSPic(DData[CurScence, SData[CurScence, 3, i1, i2], 5] div 2, x, y - SData[CurScence, 4, i1, i2], 0, 0, 2304, 1502);
    end;

end;

这是原版的,我们可以看到,这地图是从(0,0)开始,每格按照地板,建筑,空中三层的顺序逐个贴图画上,然后到下一格,直到(63,63)结束,顺序如下图


够清楚了吧?
所以,很明显地,如果有某个格子的某个贴图越界,就是向下超过地面的那个菱形,向左右超过36像素的宽度,就有可能被其他格子的贴图覆盖,我们上面第一幅图就是属于左右超界,而第二幅图则属于向下超界(姑且这么叫吧)

向下超界还比较不常见,除了像金轮寺这样的斜墙壁,其他的很少见到了(其实还有林平之和少林打拳的和尚等),但左右超界这问题就比较普遍了,不信?把任何一棵树放到墙壁的旁边试试看

这bug对游戏进程并不影响,但对mod作者来说,实在有点郁闷,画地图时难免诸多掣肘

——————解决方法实现与解释———————

幸好,解决这些bug并不困难,处理向下超界,我们抛弃原来地板与建筑物一同画的方法,把所有地板单独画上,这是由于地板永远处于底部,没有遮挡问题,不过像恒山派那种高一截的地板,那用墙壁挡一下吧~~

而处理左右超界,则需要一种新的画图顺序,像这样:


图中很明显了吧~~对于45度地图,就等于从最后方一直画到最前方了

具体算法如下:
//Save the image informations of the whole scence.
//生成场景映像

procedure InitialScence();
var
  i1, i2, j1, j2, x, y: integer;
  pos: TPosition;
begin
  //修正,首先画全部地面,防止地面盖过某些越界的时间层或建筑物
  for i1 := 0 to 63 do
    for i2 := 0 to 63 do
    begin
      x := -i1 * 18 + i2 * 18 + 1501;
      y := i1 * 9 + i2 * 9 + 9;
      InitialSPic(SData[CurScence, 0, i1, i2] div 2, x, y, 0, 0, 2304, 1502);
    end;

  //其他层
  i1 := 0;
  i2 := 0;
  while ( i1<64) and (i2<64) do
  begin
    for j2 := i2 to 63 do   //y first
    begin
      x := -i1 * 18 + j2 * 18 + 1501;
      y := i1 * 9 + j2 * 9 + 9;
      if (SData[CurScence, 1, i1, j2] > 0) then
        InitialSPic(SData[CurScence, 1, i1, j2] div 2, x, y - SData[CurScence, 4, i1, j2], 0, 0, 2304,

1502);
      if (SData[CurScence, 2, i1, j2] > 0) then
        InitialSPic(SData[CurScence, 2, i1, j2] div 2, x, y - SData[CurScence, 5, i1, j2], 0, 0, 2304,

1502);
      if (SData[CurScence, 3, i1, j2] >= 0) and (DData[CurScence, SData[CurScence, 3, i1, j2], 5] > 0)

then
        InitialSPic(DData[CurScence, SData[CurScence, 3, i1, j2], 5] div 2, x, y - SData[CurScence, 4,

i1, j2], 0, 0, 2304, 1502);
    end;
    i1:=i1+1;


    for j1 := i1 to 63 do    //then x
    begin
      x := -j1 * 18 + i2 * 18 + 1501;
      y := j1 * 9 + i2 * 9 + 9;
      if (SData[CurScence, 1, j1, i2] > 0) then
        InitialSPic(SData[CurScence, 1, j1, i2] div 2, x, y - SData[CurScence, 4, j1, i2], 0, 0, 2304,

1502);
      if (SData[CurScence, 2, j1, i2] > 0) then
        InitialSPic(SData[CurScence, 2, j1, i2] div 2, x, y - SData[CurScence, 5, j1, i2], 0, 0, 2304,

1502);
      if (SData[CurScence, 3, j1, i2] >= 0) and (DData[CurScence, SData[CurScence, 3, j1, i2], 5] > 0)

then
        InitialSPic(DData[CurScence, SData[CurScence, 3, j1, i2], 5] div 2, x, y - SData[CurScence, 4,

j1, i2], 0, 0, 2304, 1502);
    end;
    i2 := i2+1;

  end;      //end while

end;

——————修正后————————————

大家看到了,并不是什么困难的修改

改过之后,两处原来被遮挡的位置都修正了



而其他地图暂时未发现有显示出错

至于效率方面,由于初始化地图只是在进入地图发生,不见明显的速度减慢,

另外,在主角走到建筑物旁边的时候,一部分地图会被重画的,但应该不影响地图显示,所以暂时不对那部分作出修改



[发帖际遇]: winson7891偷拍五岳并派大会内幕,登上铁血晚报头条,刷新当晚销量,得到银两13。


[ 本帖最后由 winson7891 于 2009-9-20 15:55 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x

评分

参与人数 1声望 +8 收起 理由
黄顺坤 + 8 不错~\(≧▽≦)/~

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-9-20 12:26 | 显示全部楼层

一个猜想

占楼的楼终于有用了

其实weyl原来的算法和我改后的算法都不是完美的

而我想到原来每个场景是用单独的一套素材的,而且有指定是否山洞等

那是不是对个别的场景,画法不一样呢?

有谁跟我探讨一下?



[发帖际遇]: 参与红花会陈家洛的计划:行动失败,遭清廷缉捕损失银两19.


[ 本帖最后由 winson7891 于 2009-9-20 15:54 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-20 12:41 | 显示全部楼层
猪脚高大威猛,几个番僧跟他一比很渺小

[发帖际遇]: 古月说参与红花会陈家洛的计划:成功绑架乾隆,得到奖励银两11.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-20 13:49 | 显示全部楼层
地板也不是永远处于最下的,比较明显的是ptt版的令狐冲和田伯光打架的那个城,原版显示的顺序一直没弄清楚,后来我用的应该是一个尽量错误较少的方法。
还有事件层的顺序也很诡异,比较明显的是原版发光的石破天。

[发帖际遇]: weyl卖下一个mod的制作人绝密采访稿,狂赚银两47.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-9-20 13:56 | 显示全部楼层
对啊,我也是想不明白,所以才用说如果是恒山派那种,就拿墙壁挡一下咯~~

但这个改动后还是比原来要好一点啦~~

事件层再看看好了~

[发帖际遇]: winson7891在无量山洞玉像前巧遇段誉,并将其引为知己,请客吃饭花掉银两11。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-20 14:01 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-20 14:50 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-20 15:50 | 显示全部楼层
番僧縮小了


是我把主角變大了

[发帖际遇]: e122373356借钱给游坦之整容,手术成功,多还你银两12.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-9-20 15:56 | 显示全部楼层
老是有人在意些不相关的地方~~BS楼上两位~~

[发帖际遇]: winson7891遭遇四大恶人,狼狈逃窜,丢失银两10.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-20 23:43 | 显示全部楼层
我还是搞不懂你为什么一定要把地图放大两倍

[发帖际遇]: killer_zingy卖下一个mod的制作人绝密采访稿,狂赚银两38.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-9-21 01:18 | 显示全部楼层
原帖由 killer_zingy 于 2009-9-20 23:43 发表
我还是搞不懂你为什么一定要把地图放大两倍

[发帖际遇]: killer_zingy卖下一个mod的制作人绝密采访稿,狂赚银两38.


一点尝试罢了,就跟我所修改的其他地方一样,我觉得跟改头像,新增战斗动画等没有区别

有些东西,总是要有人去尝试的嘛~~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-21 02:08 | 显示全部楼层
原帖由 winson7891 于 2009-9-21 01:18 发表


一点尝试罢了,就跟我所修改的其他地方一样,我觉得跟改头像,新增战斗动画等没有区别

有些东西,总是要有人去尝试的嘛~~

其实。。你明明可以显示模式扩大两倍的啊。。。囧~。。

[发帖际遇]: 参与红花会陈家洛的计划:黄顺坤向清廷告密,遭到红花会追杀损失银两4.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-9-21 03:03 | 显示全部楼层
原帖由 黄顺坤 于 2009-9-21 02:08 发表

其实。。你明明可以显示模式扩大两倍的啊。。。囧~。。

[发帖际遇]: 参与红花会陈家洛的计划:黄顺坤向清廷告密,遭到红花会追杀损失银两4.


我自己的自然是扩大了两倍,但发给大众的东西是要考虑大众感受的吧~~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-9-21 03:05 | 显示全部楼层
原帖由 weyl 于 2009-9-20 13:49 发表
地板也不是永远处于最下的,比较明显的是ptt版的令狐冲和田伯光打架的那个城,原版显示的顺序一直没弄清楚,后来我用的应该是一个尽量错误较少的方法。
还有事件层的顺序也很诡异,比较明显的是原版发光的石破天。
...



呃,刚刚打完游戏,又按上面的方法改了一下事件层,发现这方法是可以让那石破天显示正常的了(原来是陷入地板的,因为石破天那动画偏移点是在动画中间的~~)

加上其他地方也没有什么错误

所以敲定这是最终的一个比较符合原版的合理显示算法~~可以吧?

[发帖际遇]: winson7891在河边遇到张三李四,得赠玄冰碧火酒,转手卖出赚到银两18。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-21 05:43 | 显示全部楼层
问题是你扩大了两倍
我们玩的时候走地图也要走两倍的时间啊
想起当时原版的左右

[发帖际遇]: killer_zingy挑衅裘千丈,谁知到竟然是裘千仞,结果被裘千仞打了一掌,治伤花费银两4。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-21 07:03 | 显示全部楼层
原版市内地面一律设置海拔3
而老版本的MOD中,好像除了我的再战没有再设置海拔了的
虽然我不知道那些场景有问题
不过看看是不是跟海拔的高度有关系
兴许会有发现也说不定

[发帖际遇]: 南宫梦贿赂韦小宝后加入天地会,探听到天地会机密,获得朝廷赏赐银两28。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-9-21 15:24 | 显示全部楼层
原帖由 killer_zingy 于 2009-9-21 05:43 发表
问题是你扩大了两倍
我们玩的时候走地图也要走两倍的时间啊
想起当时原版的左右

[发帖际遇]: killer_zingy挑衅裘千丈,谁知到竟然是裘千仞,结果被裘千仞打了一掌,治伤花费银两4。


不会的~~ ,时间一样

[发帖际遇]: winson7891巧遇神雕,习得玄铁剑法,在少林举办的武林大会上震惊群雄,生平事迹被说书人广为传颂,得到分红银两28。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-9-21 15:29 | 显示全部楼层
原帖由 南宫梦 于 2009-9-21 07:03 发表
原版市内地面一律设置海拔3
而老版本的MOD中,好像除了我的再战没有再设置海拔了的
虽然我不知道那些场景有问题
不过看看是不是跟海拔的高度有关系
兴许会有发现也说不定

[发帖际遇]: 南宫梦贿赂韦小宝后加入天 ...


这个我考虑过了,但高海拔的显示方式又不得不变回与原来weyl写的显示方式一样

所以还是保留了现在的方式

另外现在这方式同样适用于事件层,不像之前的,会被地板覆盖

不过还没知道有没有其他问题,有的话再改吧~~不想再花力气了~

[发帖际遇]: winson7891去天宁寺抢夺连城宝藏,侥幸抢到无毒的宝藏,卖掉得到银两31。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-21 17:10 | 显示全部楼层
有空反汇编原版的显示顺序吧

[发帖际遇]: weyl买通太监进宫偷葵花,转手挣到银两20.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-21 18:26 | 显示全部楼层
查看了一下反汇编的代码,原版似乎是先统一画无高度的地面,而有高度的地面和其他是一起绘制的。不过顺序似乎不是你这样的3D顺序,也许你可以试试这棵树如果在另一侧的墙边会有什么影响。

我想把你的改一下,先统一画出无高度地面,再按照你的顺序把有高度地面和其他部分一起绘出,应该就比较完美了

[发帖际遇]: weyl在牢房助狄云逃脱,获赠《神照经》,翻译成英语版《god bless you》贩卖后获利银两22。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-9-23 07:16 | 显示全部楼层
樓主真夠有心的...看得我眼花繚亂...pascal還是一知半解...

[发帖际遇]: Niv参与红花会解救文泰来,拾到败逃官兵遗失钱包,打开一看发现银两2。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-6 17:33 | 显示全部楼层
楼主的看法是正确的

分层画是正解,先底层再物体

源码应该这样改动

分层画处理不好效率要低,处理好就可以
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-6 18:56 | 显示全部楼层
原帖由 winson7891 于 2009-9-20 12:25 发表
----又是唠叨的前言-----

昨天刚做完第二弹,想搞搞那些贴图文件~~

但很悲哀地发现,复刻版又有bug了,为什么我无论做什么都可以发现bug呢?泪流满面啊~~

还好,一会儿就修正了,想到这个bug的广泛性 ...


lz 我对这个很感兴趣 请问在那里可一下载到 源代码

[发帖际遇]: 假修改器无意中获得赵敏的木制倚天剑,卖给摆地摊的,获利银两5.
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-10-6 20:18 | 显示全部楼层
原帖由 假修改器 于 2009-10-6 18:56 发表


lz 我对这个很感兴趣 请问在那里可一下载到 源代码

[发帖际遇]: 假修改器无意中获得赵敏的木制倚天剑,卖给摆地摊的,获利银两5.


这:
http://www.txdx.net/downpage.php?a=v&fid=39&type=1

[发帖际遇]: winson7891当选为年度“赏善罚恶”大使,路过襄阳城,赏给郭靖银两13。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-11-16 02:56

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表