Thursday, February 19, 2009

为Delphi的控制台程式添加图标

一般来说,在delphi中可以通过 Project – Options – Application 来加载图标,但是有时这个选项是灰掉的,特别在控制台程序中是不可用的。让它出现的方法如下:

在dpr文件uses部分添加 form
在begin之前添加 {$R *.res}
在运行的部分添加 Application.Initialize;

如果提示没有res文件的话,就自己建立一个,可以随意建立一个空文件用 工程名.res 命名,之后 Load Icon 就变成可用了。你可以注意到在我发布的源码中这些部分已经添加过,只是注释掉了。

这就是说,让 Load Icon 这个按钮不为灰色必须同时满足上面说的4个条件,即3处代码和一个res文件。这样实际上是认为此程序是一个基于Form的程序,而使得这个选项能够被使用。

但是在编译的时候,是否载入res文件则只由 {$R *.res} 是否存在决定,这就是说完全可以在载入图标之后将另外两处代码注释掉。

Tuesday, January 27, 2009

金庸群侠传之回忆

DOS下的安装程序总是非常无聊的,一大串白色的文字和永远不变的黑色背景。许多排文字刷过去之后,最好再看看磁盘空间是不是足够。毕竟100MB的空间在当时并不是一个小数目。

或许正版游戏的安装程序会绚丽一些?

经历大约两分钟左右硬盘的哀号之后,终于看到了游戏画面,一个拳套和一把剑和一个磁盘。拳套好像是拳击时候用的,中国古代可能没这个东西;而剑的做工看来十分粗糙,磁盘更不必提了,大侠们行侠仗义时是不会带这种可靠性低的东西的。

终于进了游戏,一个看起来明显不是人的东西讲了一些莫名其妙的话,而每句话都要等半天才能出现下一句。不要作任何怀疑,没有加载smartdrv的硬盘效率就是这么低。

image

终于软体之星把废话说完了,出来还得跟跟南贤废话。废话完了想存个档,再次经历一分钟的硬盘哀号之后,几个英文字输了出来,之后计算机死机了。

有一个软件叫诺顿,可以检测硬盘文件的逻辑错误,于是检测一番,果然有几个文件有错,修复之后满怀希望再次进入游戏存档(中间浪费至少一个小时),再次出错,于是陷入了一个存档出错查错再存档的死循环。

在经历了出招的不可理喻的速度之后,我决定放弃在486电脑上运行这个游戏的念头。

终于数月之后,找了一台Pentium 100MHz的电脑,重新找了一个安装版,终于能够顺利运行这个游戏了,于是开始了一个旷日持久的旅程。我开始并未打算能够通关,只是碰运气,能撞到啥算啥。

在用debug将主角的许多属性改为100之后,我发现还是到处被人灭掉。在这个武侠世界,光有体格是没用的。还要有绝世武功。

于是我试着将主角的第一门武功改成10级,我是绝不会老老实实打那680下的(这个计算结果其实是错误的)。于是我开始试着修改存档的其余部分,终于成功将野球拳改成了343级,在经历了一下莫名的满屏拳影之后,又回到了1级。大概是修改得太大了,于是再次修改,结果又变成了4级和了85级,终于85级在一下之后变成了10级,从此之后明白了e7 03代表着属性的终极。

而再次之前,第一次的失踪,是来自阎基的痛苦回忆,第二次则是番僧。这个江湖之上,主角只是个武功低劣的无名小辈。

那么我得到的第一本书是什么来着?是《飞狐外传》还是《书剑恩仇录》?后者的可能性也许大些,因为主角武力高便可以,而花大力气练胡斐我不一定干的出来。至少我记得我是喝着什么酒,扔了一大堆金蛇锥,才搞定了这个难缠的苗大伯。

练了一堆奇怪武功之后,本想抢到葵花宝典,体会一下东方不败的绝世神功,想不到这里的葵花宝典只是一本单纯增加属性的秘籍。于是读回先前的存档,把宝典给了石破天。

许多的回忆杂糅在一起,已经不记得是哪一次了:
武功全满之后,心想战斗经验不要浪费,就一直挂着一本医书,后来得到了50多个九转熊蛇丸。

主角练九阳神功特别的慢,张无忌好一点,但是因为攻击差抢经验少,也练得很慢。谁规定打架主角必须上的?

生生造化丹是个好东西,但是金轮法王身上的好像又不是,是啥呢?

令狐冲的独孤九剑,看到就能打到。

林平之居然冲上去单挑,结果全体失踪了。

程瑛虚竹狄云不跟我走,于是改掉道德,有多少都跟来吧。

经历过多方提示之后,终于干掉了10大邪派高手,成功通关了。

这是一个引擎,画面落后时代的游戏,但同时也是一个创意极度超前的游戏。中文游戏的历史上永远会有这一座伟大的丰碑。

Delphi中使用Lua脚本语言的几点注意

1. 想在delphi里面使用lua,如果不懂安装那么就可以不安装,把下来的lua.pas文件和两个dll文件放在工程目录里,并且在工程里的uses部分加上lua就可以了。

2. 如果想仅仅运行文件中的一个函数,似乎必须先运行整个文件,也就是需要两次调用pcall函数。这可能是运行函数之前需要先给出一个函数列表。

lua_pcall(Lua_script, 0, 0, 0);
lua_getglobal(Lua_script, functionname);
result := lua_pcall(Lua_script, 0, 1, 0);

3. 若函数的某个参数是表,即{1, 2, 3}这样的形式,那么如果想读取表中的第三个值(就是3),必须按照以下顺序使用4个函数:

lua_pushnumber(L, 3); //3指表中第3位
lua_gettable(L, -2); //-2指表在栈中的位置。这个例子里表参数是最后一个入栈,一般的说应是-1,但是由于方才又压入了一个值,所以变成了-2,同时,表在栈中的位置这个值会被出栈,而从表中读取到的值会入栈。
p := lua_tostring(L, -1); //把栈顶的数据读出来。
lua_pop(L, 1); //清栈。

4. lua的delphi译本似乎很多,我用的是http://www.matrix44.de/lua/下载的。

Thursday, January 15, 2009

Lua复刻版

由游泳的鱼制作,大部分使用脚本编写。

如果在2007年或2008前半年这个东西能出来的话,那确是一个伟大的进步,但是现在这个版本,与开了源的复刻版相比,竞争力并不大。

不过我可能是不适宜讲这些话的。

Sunday, January 04, 2009

换一个主题色


很久没更新,借MSN终于能重新登陆之机换一个主题。


看起来比较暗淡,说不定过几天再换一个。


Saturday, January 03, 2009

是不是该写点什么

但是该写什么呢?

Sunday, December 07, 2008

脚本化


将事件脚本化或许是一个可行的趋势,二进制的流改成类似高级语言的形式,一定能够方便理解和编写。

现在我是试图用Rem Object Pascal Script来扩充,但是这个控件在KG的电脑上似乎有些问题。

Sunday, November 23, 2008

Fishedit之血泪控诉

 

fishedit是一个非常好的修改器,但同时也是一个很糟糕的应用程序。作为修改器,fishedit是一个上品;但是作为一个应用程序,只好不及格。

fishedit的作者是金庸MOD历史上最为著名的技术大师——游泳的鱼,在一开始他选择了VB作为程序设计的主要语言。如今VB.net已经问世,他当年的决定到如今成为MOD历史上最大的一个方向错误。VB对类型转换的保护异常脆弱,稍不留神就会导致程序整体崩溃,一步一存已经成为许多作者的习惯。此外,很多时候也不可想像,为什么事件编辑牵扯到如许多的设定,fishedit内部的许多逻辑被隐藏在了代码之后,无人可以完整理解。而所有问题的根源,便是fishedit使用的平台,是一个功能极度简单的VB。时至今日,VB新版已经强大稳定了许多,但是.net的诸多变化导致这份在VB6上面能够基本正确执行的代码已经完全不可能移植,这段曾经光辉的历史如今却成了一个极大的障碍。如果你能够了解作者打不开自己辛苦编辑的事件文件时候的焦急。

在作者公开源码之后不久,我曾经试图对其进行修整,但是如今越来越觉得这实在是一个不可能完成的任务。我们需要感谢游泳的鱼在MOD制作上做出的光辉贡献,但是fishedit糟糕的稳定性和易用性实在让我们付出了太多的代价。

现在的技术部里面似乎很多人在做将复刻版的代码译成其他语言的工作。老实说我觉得这些工作并无多大意义。我从不认为我的代码能够成为规范,所以也不赞成不加思考地将其译成其他语言。Pascal或是C不过只是工具,并无本质的区别,重复工作追求那种东西还不如把精力拿回来作优化和修改器。我编写Pascal代码用了2周多的时间,如果不能保证在更短的时间内将翻译完成的话,还是放弃为好。

Thursday, November 13, 2008

复刻计划最终结束


今天复刻版最后一个难题解开了,就是战场上人物和建筑的遮挡问题。是使用小小猪提示的递归方法判定角色可移动范围的。这样复刻版的最后一个算法难关被解决,已经基本完备,以其为基础的修改不再存在任何技术障碍。

这样,从5月4日开始的“All Heros in Kam Yung’s Stories复刻计划”正式宣布最终的结束,DOS版的所有功能已经完整实现。目前仅音乐不稳定无法解决,这个可能是系统本身的问题。而其余的修改仅仅是普通的工作了。

Tuesday, November 04, 2008

不算工作室

 

呃……这个名字确实有点诡异。

大概就算是制作MOD的工作室吧。主要领导还是一帮动物……

 

此外这个站里的东西应该都能在http://txdx.cech.com.cn下载到。

Friday, October 24, 2008

高桥大师的战国之旅



带着平静的情绪阅读高桥大师的新作《犬夜叉》,这是一出浪漫惊险的战国之旅,人和妖怪的感情如微风一般流露。


这是一个让人愉悦的故事,可以在寂寞时清扫纷乱的心情。


不管他们追寻奈落的结局如何,都希望他们在战国时代的旅行一直能够继续,如同每天初沐的阳光一样,并不精彩,但让人感到温暖。


Monday, September 29, 2008

名句的集中地—《琵琶行》



白居易的《琵琶行》,在声音的描写堪称绝无仅有。在唐诗中,有3篇被称为“摹写声音至文”,《琵琶行》当之无愧位于首位,另外两个是《听颖师弹琴》《李凭箜篌引》。但是仔细读来,另外两首跟《琵琶行》比起来,实在逊了半畴。韩愈时而外泄时而内敛的感情和李贺的上天入地奇思妙想,《琵琶行》兼而有之又并不落于下风。



而就诗的整体成就来说,韩愈和李贺只是写了声音,全诗是佳作,但是每句话拿出来,却难让人印象深刻。白居易却在《琵琶行》里留下了很多至今仍光辉四射的句子。比如:



千呼万唤始出来,犹抱琵琶半遮面。


别有忧愁暗恨生,此时无声胜有声。


同是天涯沦落人,相逢何必曾相识。



这些句子妙就妙在,当后人在引用它们的时候,甚至并不一定记得出处。



关于名句,每个有名的诗人都会留下几句。我们也可以调侃一下,用“引用次数”来描述诗句的著名程度。毫无疑问,李白杜甫肯定是非常高的。在晚唐时期的李商隐因为写了很多有名的无题诗,也会很高。李贺大概有几句是很高的,但可惜都是一句,上句或者下句总被人忘了。而像同一首诗里面能出好几句,除了《琵琶行》还真的很难找,当然这也跟诗的篇幅有关。


Saturday, September 27, 2008

孤篇盖全唐—《春江花月夜》



张若虚(660年—约720年),是唐代的著名诗人,他传世的诗仅有两首。
对他来说,这两首诗就足够他名留千古了。或者说,就算再失传一首问题也不大。因为很多人根本不知道另一首诗的名字和任何细节,但很少人不知道《春江花月夜》这个极度浪漫的名字。




春江潮水连海平,海上明月共潮生。滟滟随波千万里,何处春江无月明?江流宛转绕芳甸,月照花林皆似霰。空里流霜不觉飞,汀上白沙看不见。江天一色无纤尘,皎皎空中孤月轮。江畔何人初见月,江月何年初照人?人生代代无穷已,江月年年祇相似。不知江月待何人?但见长江送流水。白云一片去悠悠,青枫浦上不胜愁。谁家今夜扁舟子,何处相思明月楼?可怜楼上月裴回,应照离人妆镜台。玉户帘中卷不去,捣衣砧上拂还来。此时相望不相闻,愿逐月华流照君。鸿雁长飞光不度,鱼龙潜跃水成文。昨夜闲潭梦落花,可怜春半不还家。江水流春去欲尽,江潭落月复西斜。斜月沈沈藏海雾,碣石潇湘无限路。不知乘月几人归,落月摇情满江树。



就韵律来讲,有少数地方并不流畅,但是这多半是来自音韵上千年的变化。除此之外,全诗一气呵成,堪称完美。



在思绪上如此流畅的作品,长诗中并不多见。在唐代著名诗人中,恐怕只有李白的作品能与之相比。而杜甫的少数长句与之相比则略显苍凉,《饮中八仙歌》当属例外,但是严格来讲,《饮中八仙歌》属于罕见的同韵诗,韵律的流畅远大于情绪。



当然把张若虚和李白并论,是无论如何及不上的,但是就《春江花月夜》来说,并不输给李白的《将进酒》《梦游天姥吟留别》等长句。张若虚不可能一生只写了这一首诗,作品失传的原因,很可能是那些诗并不出众。毕竟如果一首诗能口口传诵,想让它失传也很难。

对于一个名气并不大的诗人,他已经十分难得了。


所以作品不需要很多,或许仅仅一篇就足以让你千古不朽。


最近的一些


最近的修改主要是慕容玄恭需要的一些功能,先看看他在9.26给出的列表:

  • 医疗5倍效果,100医疗可回复500HP每次
  • 休息回复3%HP/MP/体力
  • 最大10000内力加成200攻400防
  • 黑地的问题
  • 升级属性增长,轻功固定每级+3
  • 北冥,吸星改为加当前内力,不加内力上限
  • 中毒时内力亦和生命时一样减少
  • 似乎还有很多

应该说这些都是为平衡性所作出的努力。这些日子,大家讨论的基本都是加强版的内容。加强版相对最早的复刻版,游戏性已经提高了很多。

在早期,伤害公式是一个非常热门的话题,如今真的能够随意修改了,又要考虑诸多的平衡。

 

除此之外,在发展史上回了一个帖子:

2007年末我当时比较无聊,又有些郁闷,所以想找些以往的DOS游戏来玩。
最开始找了《仙剑奇侠传》,很快就玩通了。然后就找了《金庸群侠传》来玩,刚开始玩就觉得无聊了,因为这个游戏的情节我实在太熟悉了,DOS时代大概玩了两三遍吧。我早就知道有一些金庸的修改档,所以就想找些修改档来玩玩找些新鲜感。
那些修改档我能记住名字的有“剑气碧烟横”之类,不过我倒是并不喜欢这个修改档。在网上找了一会,发现有被称为“苍龙逐日”的修改档,获得了很高的评价。于是下来玩了一下,发现用dosbox不能运行,于是搜索解决方案,这样就找到了轩辕春秋论坛,后来就从轩辕春秋链接到了这里。
(ps:轩辕春秋下载附件是不需要注册的)
我在这里就找到了fishedit修改器,里面有很多以前没见过的修改选项,比如高分辨率,水上漂。对于我这样的懒人来说,这些修改实在太好用了。我看了游泳的鱼写的说明,关于水上漂的修改介绍,我想,这不就是汇编么,以前我也了解过一些的,于是便想自己研究点什么出来。
我便四处收集相关的资料,刚开始我想自己来反汇编,但是很多都不懂,最早只能小小修改一下某些物品的效果。有一次在曾大虾的空间里下到了以前的反汇编结果,应该是游泳的鱼注释的。利用这个反汇编结果,我做出了扩大物品选单,扩大状态选单等修改。
我翻老帖的时候,发现很多问题集中在伤害公式上,而我也没弄清楚为什么修改引用地址做不到。后来从游泳的鱼留下的蛛丝马迹和LE文件格式中找到了原因,问题是在重定位表上。
这个问题解决之后,很多修改都可以做出来了,比如重写伤害公式,做出“增强功能”等。
有一次小小猪找我帮忙修改一个功能,这就是我跟管理层接触的开始。
之后我和飞虫,游客,KG共同战斗了很久,提出和解决了很多新的设想,比如物品调用事件,从这里又引出了战斗调用事件。之后就是在任意一个位置插入事件的方法,一般修改z.dat是我去做,具体的事件实现是KG做。那时觉得DOS版还能修改很多,发展的前景也无限广阔。
2008年4月,fenghou在论坛上发布了一个地图查看器,有些Windows版的意味。5月,我提出了一个“复刻计划”并在两周之内将整个计划基本完成了。老实说,在这次之前,我是根本不敢想像自己能去重新编写一个游戏的,在这次编写的过程中,我碰到了无数的困难。每个大功能的编写,就好像进入了一个漆黑的房间,之后将里面的东西一件一件摸清楚。当前面没有路的时候,就从别的房间搬来梯子,搭一个上去。
当完成最终的9000多行代码的程序,基本复制了原版的全部功能的时候,我自己都觉得我做了一个很伟大的工作。
在此之后我才出任的达摩堂掌门,那时我早已跟飞虫游客KG小猪共同战斗了很久。后来管理员更换,不久之后我出任了游戏区统领。现在打开程序的时间并不多,但是我在技术群看见有些懂编程的新人很有兴趣地修改,南宫老师也开始写pascal了。不管以后是谁继续搞,也不用面对似懂非懂的汇编了。

 

此外有人提问主角的行走图能否通过事件指定,答案是可以的。