铁血丹心

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

[通用] Lua中显示使用黑夜,黄昏等场景,更新代码:可任意调节比重

[复制链接]
发表于 2010-3-15 22:54 | 显示全部楼层 |阅读模式
先把成品发上来,接下来的关于制作方法会显得极其枯燥无味。。
上一张效果图大大


更新代码后的效果图。。(过于变态)
当蓝色权重为200%时的金庸群侠传。。。



主程序放到lua里运行即可,增加三个api函数
  1. lib.DarkScene(); --黑夜
  2. lib.EveningScene();  --黄昏
  3. lib.NormalScene( *Filename ,RR,GG,BB); --正常
复制代码
其中*Filename可以是任何一款调色板,RR是red占的比重,GG是green占的比重,BB是blue占得比重,取值范围0-255;即比重是0%~255%
比如说,黑夜场景可以这么写:lib.NormalScene(CC.PaletteFile,30,80,100);蓝色权重占得多看起来就像黑夜了

如果想调用回正常就是
  1. lib.NormalScene(CC.PaletteFile,100,100,100);
复制代码
使用方法:
  1.     lib.DarkScene();--三句里的任意一句
  2.     lib.PicLoadFile(CC.SMAPPicFile[1],CC.SMAPPicFile[2],0);
复制代码
后面那句根据情况定,可能在大地图,可能在场景里。。
上面那句应该就是在场景里
或者可以直接写
  1. DarkScene();
  2. EvenScene();
  3. LoadCol(RR,GG,BB);
复制代码
==================================================
制作方法,其实方法很简单

首先感谢我的好盆友KG大大提供了调色板的50指令(鼓掌)

我用vb写了一个50指令转C语言的程式,附上源码供大家参观。。(我觉得很丑。。不过开源万岁)

转换后可以在程序目录下的"3.txt"中找到代码
用不来上面软件的可以直接用以下的代码

  1. //正常
  2. int NormalScene(char *PalletteFilename,int RR,int GG,int BB)
  3. {
  4.        
  5.     FILE *fp;
  6.         char color[3];
  7.         int p[3],C[3];
  8.         int i,j,tmp;

  9.         p[0]=RR;p[1]=GG;p[2]=BB;
  10.         if(strlen(PalletteFilename)==0)   
  11.                 return 1;
  12.         if((fp=fopen(PalletteFilename,"rb"))==NULL){
  13.         JY_Error("Pallette File not open ---%s",PalletteFilename);
  14.                 return 1;
  15.         }
  16.         for(i=0;i<256;i++)
  17.         {
  18.         fread(color,1,3,fp);
  19.                 for(j=0;j<3;j++){
  20.                         //tmp=
  21.                         if(color[j] * 4 * p[j]/100 >= 255)
  22.                                 C[j]='255';
  23.                         else
  24.                                 C[j]=color[j]*4 * p[j]/100;
  25.                 }
  26.         m_color32[i]=C[0]*65536l+C[1]*256+C[2] ;
  27.         }
  28.         fclose(fp);
  29.         return 0;
  30. }
复制代码
原来代码可以这么长啊啊啊 啊啊啊啊。。。。

接下来就是封装api了
封装api似乎是一个很痛苦的过程,不难,但是绝对痛苦
(你必须有源码)

1.将以上代码复制进piccache.c
2.在jymain.h中写上
  1. //dark scene BY KG
  2. int DarkScene();
  3. //Evening Scene BY KG
  4. int EveningScene();
  5. //Normal Scene BY XuChangLong
  6. int NormalScene(char *PalletteFilename);
复制代码
3.在luafun.h中加入
  1. //Ds BY KA
  2. int HAPI_DarkScene(lua_State *pL);
  3. //Es BY KA
  4. int HAPI_EveningScene(lua_State *pL);

  5. int HAPI_NormalScene(lua_State *pL);
复制代码
4.在luafun.c中加入
  1. int HAPI_DarkScene(lua_State *pL)
  2. {
  3.         DarkScene();
  4.         return 0;
  5. }
  6. //Es BY KA
  7. int HAPI_EveningScene(lua_State *pL)
  8. {
  9.         EveningScene();
  10.         return 0;
  11. }

  12. int HAPI_NormalScene(lua_State *pL)
  13. {   
  14.         char *filename;
  15.         int RP,BP,GP;
  16.     if(lua_isnoneornil(pL,1)==0 )
  17.         filename=(char*)lua_tostring(pL,1);            
  18.     else
  19.         filename="\0";
  20.           RP=(int)lua_tonumber(pL,2);
  21.         GP=(int)lua_tonumber(pL,3);
  22.         BP=(int)lua_tonumber(pL,4);
  23.         NormalScene(filename,RP,GP,BP);
  24.        
  25.         return 0;
  26. }
复制代码
5.在jymain.c中加入
  1. //封装api
  2.           {"DarkScene", HAPI_DarkScene},
  3.           {"EveningScene", HAPI_EveningScene},
  4.           {"NormalScene", HAPI_NormalScene},
复制代码
大功告成欧也。。。
  1. -----------调色板jymodify中加入
  2. function DarkScene()
  3.     lib.DarkScene();
  4.     if JY.Status==GAME_SMAP then
  5.        lib.PicLoadFile(CC.SMAPPicFile[1],CC.SMAPPicFile[2],0);
  6.     elseif JY.Status==GAME_MMAP then
  7.        lib.PicLoadFile(CC.MMAPPicFile[1],CC.MMAPPicFile[2],0);   
  8.     elseif JY.Status==GAME_WMAP then
  9.        lib.PicLoadFile(CC.WMAPPicFile[1],CC.WMAPPicFile[2],0);
  10.     end
  11. end   

  12. function EvenScene()
  13.     lib.EveningScene();
  14.     if JY.Status==GAME_SMAP then
  15.        lib.PicLoadFile(CC.SMAPPicFile[1],CC.SMAPPicFile[2],0);
  16.     elseif JY.Status==GAME_MMAP then
  17.        lib.PicLoadFile(CC.MMAPPicFile[1],CC.MMAPPicFile[2],0);   
  18.     elseif JY.Status==GAME_WMAP then
  19.        lib.PicLoadFile(CC.WMAPPicFile[1],CC.WMAPPicFile[2],0);
  20.     end
  21. end  

  22. function LoadCol(RR,GG,BB)
  23.     lib.NormalScene(CC.PaletteFile,RR,GG,BB);
  24.     if JY.Status==GAME_SMAP then
  25.        lib.PicLoadFile(CC.SMAPPicFile[1],CC.SMAPPicFile[2],0);
  26.     elseif JY.Status==GAME_MMAP then
  27.        lib.PicLoadFile(CC.MMAPPicFile[1],CC.MMAPPicFile[2],0);   
  28.     elseif JY.Status==GAME_WMAP then
  29.        lib.PicLoadFile(CC.WMAPPicFile[1],CC.WMAPPicFile[2],0);
  30.     end
  31. end  
复制代码
[发帖际遇]: 黄顺坤闯入绝情谷,从裘千尺手中夺取“绝情丹”,转手卖于杨过,得到银两11。


[ 本帖最后由 黄顺坤 于 2010-3-16 12:49 编辑 ]

本帖子中包含更多资源

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

x

评分

参与人数 1声望 +15 收起 理由
weyl + 15 好贴奖励

查看全部评分

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

评分

参与人数 1声望 +14 收起 理由
黄顺坤 + 14 一个+7,吹捧技术帝

查看全部评分

【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-15 22:59 | 显示全部楼层
难道是KG技术帝写的所以给他加分
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-15 23:02 | 显示全部楼层
你可以考虑一下每个值都加一上一个固定的值,或者按固定的比例。这样代码就短了。
其实我推测原本的指令就是让色值偏蓝或偏黄。

[发帖际遇]: weyl吃烧饼的时候,发现烧饼里藏着一枚“玄铁令”,转手卖掉后,赚到银两3。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-15 23:05 | 显示全部楼层
哇好东西!看来今晚要好好研究才行了。这适合苍龙的吧?

[发帖际遇]: 小庞和阿珂携手外出游玩,路上被韦小宝派人暗算,花费银两12治伤。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-15 23:13 | 显示全部楼层
可以用这句
  1. lib.PicInit(str)
复制代码
str是调色板文件名

只是调色板文件是什么结构 我就不懂了
==========
似乎就是黄大发的
从0-255,按三个字节
[发帖际遇]: jy02785317发现石破天准备用银票擦屁股,赶紧送上两卷草纸,换回一张银票,兑换银两25。


[ 本帖最后由 jy02785317 于 2010-3-15 23:15 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-15 23:27 | 显示全部楼层
不错,加个调色板很好的思路,我都是直接按比例改RGB的~

一大堆计算似乎有点没必要了

这个方法不错~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-15 23:28 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-15 23:31 | 显示全部楼层
跳出请把debug.txt发上来
不然无法判断
(个人猜测是你没有使用新的主程序,由于新加了api,旧exe无法使用)
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-15 23:57 | 显示全部楼层
E:\data\JY\SCRIPT\OLDEVENT\jysdllua.exe解压包jysdllua.rar解到这个路径对吧?苍龙lua

[发帖际遇]: 小庞私入铁掌峰禁地,盗取各种珠宝,共贩卖得银两39两。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-16 00:03 | 显示全部楼层
学习大作,崇拜中

能否搞成数组:
比如:data[257] = { 巴拉巴拉巴拉 }
for i=0:1:256
m_color32 =data

[发帖际遇]: 夏海吃烧饼的时候,发现烧饼里藏着一枚“玄铁令”,转手卖掉后,赚到银两12。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-3-16 00:16 | 显示全部楼层
bt的想法似乎不错…等以后有空了改进下……

[发帖际遇]: 黄顺坤协助郭靖守护襄阳多年,得郭靖称赞,增加声望5。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-16 01:13 | 显示全部楼层
原帖由 夏海 于 2010-3-16 00:03 发表
学习大作,崇拜中

能否搞成数组:
比如:data[257] = { 巴拉巴拉巴拉 }
for i=0:1:256
m_color32 =data

[发帖际遇]: 夏海吃烧饼的时候,发现烧饼里藏着一枚“玄铁令”,转手卖掉后,赚到银两12。

从效率考虑循环的开销比直接运行要大。而且前面也要写一堆的赋值指令。
不过在现代的处理器中,循环的开销基本可以忽略。所以通过计算会简单明了一些。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-16 07:31 | 显示全部楼层
jysdllua放到lua5.1应用程序文件夹里然后不知道为什么又出现找不到smpeg.dll求解?(补充下,来自苍龙lua版)

[ 本帖最后由 小庞 于 2010-3-16 07:33 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-16 07:56 | 显示全部楼层
和原exe同一目录
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-16 08:23 | 显示全部楼层
H:\\jy\data文件是z游戏运行文件(放到这里提示lua5.1.dll未能启动)。H:\jy\script 就是lua5.1应用文件(放到这里提示smpeg.dll未能启动)?

[发帖际遇]: 小庞在万劫谷和段延庆下棋获胜,得到段正明、黄眉僧奖励银两39两。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-16 08:30 | 显示全部楼层
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

都说了原exe的目录
你原来的exe目录在那两个文件夹吗???????

H:\jy\

[发帖际遇]: jy02785317替小昭千里送信给张无忌,赶到光明顶得到奖励银两22。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-16 09:06 | 显示全部楼层
H:\jy\这里是没有任何运行文件的。H:\jy\data应该是这个吧
H:\jy\script 就是lua5.1应该是jysdllua.exe放在的位置吧(不过是出了问题,等下去重下苍龙lua今天早上下不了)

[发帖际遇]: 小庞和郭靖比赛砍树,结果电锯敌不过十八掌,输掉赌资银两33。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-16 12:34 | 显示全部楼层
原帖由 weyl 于 2010-3-16 01:13 发表

从效率考虑循环的开销比直接运行要大。而且前面也要写一堆的赋值指令。
不过在现代的处理器中,循环的开销基本可以忽略。所以通过计算会简单明了一些。


明白了,是这样啊,谢谢

[发帖际遇]: 金花婆婆和灭绝师太对战时,被倚天剑削飞的一大块珊瑚金杖,正好砸晕了观战的夏海,卖碎金块换得银两12两的膏药钱去治伤。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2010-3-16 12:50 | 显示全部楼层
原帖由 夏海 于 2010-3-16 12:34 发表


明白了,是这样啊,谢谢

[发帖际遇]: 金花婆婆和灭绝师太对战时,被倚天剑削飞的一大块珊瑚金杖,正好砸晕了观战的夏海,卖碎金块换得银两12两的膏药钱去治伤。

lua处理循环似乎不如直接赋值?

[发帖际遇]: 黄顺坤为救乔峰,聚贤庄大战群侠后身负重伤,花费银两20治伤。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-16 23:21 | 显示全部楼层
这个蛮有创意,还有新意的有空多写点!呵呵(但还没弄成功lua版会不会不支持50指令或新编)

[发帖际遇]: 小庞跟踪成昆进入明教密道,结果:奋勇救小昭脱险,得到小昭感谢银两22。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2010-3-17 00:02 | 显示全部楼层
原帖由 黄顺坤 于 2010-3-16 12:50 发表

lua处理循环似乎不如直接赋值?

[发帖际遇]: 黄顺坤为救乔峰,聚贤庄大战群侠后身负重伤,花费银两20治伤。


明白了,直接赋值可以节约计算时间

[发帖际遇]: 夏海救治何太冲五姑,被何太冲恩将仇报,千辛万苦逃出损失银两26两。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2017-10-27 10:03 | 显示全部楼层
顶顶顶顶顶
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

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

GMT+8, 2024-5-2 18:28

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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