铁血丹心

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

求教调色板颜色在系统中真实颜色

[复制链接]
发表于 2012-12-10 16:06 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

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

x
玩过DOS版本的玩家都知道,大地图上“崆峒派”,河岸边等地皆有类似于“闪光”的动态效果。
有人能详细介绍这个“闪光”效果的原理么?不胜感谢。。。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-10 16:41 | 显示全部楼层
本帖最后由 蓝烟清 于 2012-12-10 16:42 编辑

调色版都丢这么久了,一下子还真没想起来。还是翻了一下代码
  1. Integer[] temp = new Integer[3];
  2. temp[0] = (buf[i] & 0xFF) << 2;
  3. temp[1] = (buf[i+1] & 0xFF) << 2;
  4. temp[2] = (buf[i+2] & 0xFF) << 2;

  5. int tmp = 0;
  6. tmp += temp[0] << 16;
  7. tmp += temp[1] << 8;
  8. tmp += temp[2];
复制代码

连续取三个字节, 每个字节左移两位(据说DOS下最高是240,没有255)。

然后一左移16,二左移8,再加上三,就得到真实的值了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-10 16:45 | 显示全部楼层
传说中的“闪烁”效果应该是换贴图,而且应该是在建筑那一层换的

评分

参与人数 1声望 +2 收起 理由
winson7891 + 2 热血助人,但答错了亲

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-10 17:30 | 显示全部楼层
反汇编原游戏主程序得知,闪烁的原理是实时更换调色板。具体如下:
调色板中的以下两组颜色(E0~E7,F4~FC),会不断从前往后顺序更替,最后一个替换最前面。


本帖子中包含更多资源

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

x

点评

KA
甚好。成品居然被凯歌抢着做了  发表于 2012-12-10 17:55

评分

参与人数 1声望 +6 收起 理由
winson7891 + 6 热血助人

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-10 18:01 | 显示全部楼层
我觉得没这么复杂,原理我说不好,请LZ参阅DOS版苍龙逐日里的田归农。。。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-11 09:06 | 显示全部楼层
回复 weyl 的帖子

原来如此, 这么说调色板换了, 某些人物的也会跟着闪了

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

任何地方加入新过程 ChangeCol
  1. procedure ChangeCol;
  2. var
  3.   i, a, b: integer;
  4.   temp: array[0..2] of byte;
  5. begin

  6.   a := $e7 * 3;
  7.   temp[0] := ACol[a];
  8.   temp[1] := ACol[a + 1];
  9.   temp[2] := ACol[a + 2];

  10.   for i := $e7 downto $e1 do
  11.   begin
  12.     b := i * 3;
  13.     a := (i - 1) * 3;
  14.     ACol[b] := ACol[a];
  15.     ACol[b + 1] := ACol[a + 1];
  16.     ACol[b + 2] := ACol[a + 2];
  17.   end;

  18.   b := $e0 * 3;
  19.   ACol[b] := temp[0];
  20.   ACol[b + 1] := temp[1];
  21.   ACol[b + 2] := temp[2];

  22.   a := $fc * 3;
  23.   temp[0] := ACol[a];
  24.   temp[1] := ACol[a + 1];
  25.   temp[2] := ACol[a + 2];

  26.   for i := $fc downto $f5 do
  27.   begin
  28.     b := i * 3;
  29.     a := (i - 1) * 3;
  30.     ACol[b] := ACol[a];
  31.     ACol[b + 1] := ACol[a + 1];
  32.     ACol[b + 2] := ACol[a + 2];
  33.   end;

  34.   b := $f4 * 3;
  35.   ACol[b] := temp[0];
  36.   ACol[b + 1] := temp[1];
  37.   ACol[b + 2] := temp[2];   

  38. end;
复制代码
Walk子程中加入
  1.     if (integer(now - next_time2) > 0)  then
  2.     begin
  3.       ChangeCol;
  4.       next_time2 := now + 200; //200为毫秒数
  5.       DrawMMap;
  6.       SDL_UpdateRect(screen, 0, 0, screen.w, screen.h);
  7.     end;
复制代码
其余语言的均可用类似方法处理。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-12-18 11:24 | 显示全部楼层
好久没来这里,看到这个帖子还以为自己穿越了……
闪烁的就是调色板最后几个颜色,想当初用FISHEDIT转贴图转近似色,经常不小心被转到闪烁色去,要么自己手动拿其他颜色点回来,要么就直接在Z编辑里屏蔽闪烁,当然,几年之后某某楼主的高版本SFE可以直接换颜色……

点评

请不要乱讲话,也不要歪自己的楼以及在自己的地盘点评版聊……  发表于 2012-12-19 09:53
KA
我女儿甚思念您,何时把她娶回家  发表于 2012-12-19 09:01
才忙完工作……现在跟MOD已经没任何关系了,更没有其他想法……  发表于 2012-12-19 00:42
KA
其实可以不用转到闪烁色的,您要么  发表于 2012-12-18 16:14
KA
穿越无罪;啥时候回来当当斑竹。  发表于 2012-12-18 16:07
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-5-3 13:02

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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