凌华 的个人资料张凌华照片日志列表更多 工具 帮助

日志


11月9日

供不应求!NDS电视接受器接受网络预定

  任天堂于昨天(11月8日)下午正式开始对DS的ONE SEG信号接收器“DS电视”接受预约。因为是网络销售,所以从接受预定开始,任天堂的服务器就十分难连上,可以看出这款产品还是相当有需求的。 等国内有卖的了(当然是水货了)我也弄一个 ,尝尝鲜!

 

  ONE SEG放送是主要针对便携机器放送的数字电视,即使移动的时候,也可以接受到稳定而清晰的电视图像。最早登陆手机,目前应用范围逐渐广泛。DS版的电视接收器活用了2个画面的特性,上屏显示电视,下屏显示操作画面和工具机能。

8月14日

任天堂公布Wii Fit帮助玩家达成理想身材

除了《Wii Sport》外,《Wii Fit》更可以陪你做伏地挺身、瑜珈、玩呼拉圈、顶足球,帮助你达到理想的BMI值!

  任天堂 E3 记者会上,宫本茂展示《Wii Fit》,结合具有压力感应功能的「Wii Balance Board(暂定名称)」周边,玩家可以藉此游戏进行肌肉伸展、瑜珈与动态游戏等。

  此游戏将让Wii的动态游戏体验从当初 Wii Sport 的集中于手臂等上半身,延伸到玩家全身,且这些动作将强调较和缓、可控制的动作,言下之意就是已考虑到避免运动伤害的问题;任天堂现场展示如何藉由 Wii Balance Board 进行《Wii Fit》游戏,同时也实际以任天堂美国总裁Reggie Fils-Aime为模特儿,秀出游戏如何计算他的身体「BMI」值。

  玩家在游戏前,必须先让游戏测量最原始的BMI值,也就是得让游戏拥有个人的身高、体重与年纪等信息,直到游戏拥有这些信息后,你可以设定目标来帮助自己减重或是增加重量以达到理想的BMI水平;有趣的是,个人的BMI水平出现后,代表玩家的Mii图像也会相对应有些改变,例如突出小腹等。



 
《Wii Fit》有多样化活动来帮助玩家全身运动,像是玩「呼拉圈」时,玩家得站在「Wii Balance Board」上,扭动个人的臀部使屏幕中的虚拟呼拉圈持续旋转,另外两个Mii人物还会不断地丢呼拉圈让你得维持越来越多的呼拉圈平衡。

  另一个平衡球游戏,是玩家必须利用个人身体的平衡,让屏幕中的球能够通过迷宫般的考验、移动到合适的洞中;至于现场展示另一个滑雪跳跃游戏,则是让玩家模拟滑雪跳跃的状况,必须弯曲身体以让速度加快,还有类似跳舞的游戏。

  此外,还有足球游戏有许多的Mii人物将踢球来给玩家,玩家得尽力把球顶出去;至于瑜珈部分,玩家可以进行许多瑜珈姿势,若是姿势持续越久、舒展越开,可代表个人越来越进步,游戏似乎还可因个人震动感应来判断个人动作适当的区域。

  另外,玩家也可以藉由《Wii Fit》测量个人的平衡感等。游戏预定今年第四季在日本上市,明年第一、二季在美国推出。





Wii Fit 零售价最终确认 欧美2008年上市

看来,是应该购买Wii了 。 这就是生活。并非只是游戏。

如果你希望早日站在Wii Fit 之上,并体验它独特的乐趣,那么你不得不等到2008年才行,除非你住在日本。  而且最近Wii Fit 也已经确认了它的零售价格为$69.99,并且配合Wii Fit 的正式上市,到时将会有捆绑了Wii Fit 的限定版主机一同上市,据业内人士估计,这样的限定版主机售价将在$249.99元左右。只是希望到时候不要缺货太严重。

 关于Will Fit的介绍,请看:
10月18日

新北斗神拳 新番出击

 

嗯……今天无意中看到有部“新北斗神拳”的动画 , 一下子勾起了儿时的回忆 ……

因为觉得自己到现在还米有看实在有些不甘心,所以干脆就看完了(用了1个半小时,拖啊拖)……

到了现在啊……啊,真辛苦……

其实画面还比较精致的说……相对之前的TV而言,虽然龟说JJ啊这种画面XXOO什么的,但是相对而言,尤其是相对于抱春的OVA尤其是2而言已经强了很多了的说……啊啊啊啊……真是不满啊!!!TvT

故事情节还是很老套的北斗神拳式的:坏人出现——健次郎登场——美女被抢走——健次郎英雄救美——坏人boss的悲惨过去被揭露——对决——死掉一些人,于是健次郎继续旅程……

嗯……说的自己都觉得没有什么看头了…………(-_-||||)但是真的觉得已经很程序化的故事了……说实在的觉得剧情到了后来变得很牵强,虽然h某一直强调这个是硬派肌肉男云云……可惜我喜欢的是如片尾所示的gackt殿的歌曲脸身体和才华啊>_<——由此可知,事实上我对健次郎的兴趣只是在于子安武人这个声优而已……

子安的“啊哒哒哒哒”明显要比ga的好很多,由此终于再次深刻体会了什么是专业声优什么是非专业声优的区别……呵呵,其实本来就是因为子安担演了健次郎才关注这部的,就像只是为了南斗水鸟才关注之前版本的北斗动画一样——只是因为那个阿力是我家盐大的角色而已~

最近的新番欠了一批,就连蜂蜜也欠了好几集了……唉,太忙了……

 

知道我说什么么?不是动漫迷应该不知道吧 :)

9月10日

最近玩操纵机器人MG这款游戏,本来打算汉化一下,造福大家的,但...

最近玩操纵机器人MG这款游戏,本来打算汉化一下,正好前一阵子研究了一下NDSL上游戏的汉化,破解还有开发 。 现在可以派上用场了 。
看了一下。这款游戏的字模采用了压缩变形+翻转变形 ,不过还是被我搞定,并且导出了 。 还建立了新的字模导入 。
 
但是,当我导出游戏中的文本后,被下了一跳 , 接近十万字的翻译量  。 我还是决定放弃了 。 用着个时间还是赚钱吧(俗人啊) 。
这里把部分导出的文本贴出来 , 供人YY一下吧 :
 
任务篇:

敵を倒せ!
※オメガカーゴが破壊
 されると作戦失敗
仲間と力を合わせ、
すべての敵を倒せ!
すべての敵を倒せ!
※アンマリーが倒さ
 れると作戦失敗
すべての敵を倒せ!
喫茶店を駅の近くまで運べ!
......
 
关卡篇:
NO.6
近代人形を求めて
日本03_晴れ
NO.7
アイゼンベルグへの旅
ハイウェイ05_晴れ
......
 
装备篇:
真鍮装甲
耐久力+20
 人形の骨格を補強する部品。骨格を金
属で包み、強度を高める。
青銅装甲
耐久力+40
 人形の骨格を補強する部品。骨格を金
属で包み、強度を高める。
......
 
设计图篇:
設計図31_A
人形船ダイダル号の設計図
......
 
剧情篇:
第一回バトルト
ーナメントの優勝
 山ごもりなど、
ワイルドな特訓で
実力をつけたらし
アイン
......
 
 
 
 
 

有几天没有更新博客了,真是不好意思,前几天迷上了一款NDSL游戏

真是不好意思,几天没有更新日志了。这几天忙着玩NDSL最新出的一款游戏 "超操纵机器人MG"  。 喜欢机器人大战的朋友有福了 。
这款游戏因为是日文版的,因此要不断的查词典 。 有上百个机器人可以操作,爽啊 。 终于用了18个小时完成了一周目 ,达到通关了 。
这里给个视频和图片看看:)
视频
 
9月5日

汉化NDS模拟器基础(2)

以下的文章是我转的一篇网上文章 , 我看过了 , 里面有些漏洞和不详尽的地方 , 以后可以看我写的文章来进行进一步学习。
----------------------------------------------------------------------------------------------------------
 
嗨!大家还好吗?还是我这只菜鸟啦!^ ^ 今天还是继续我们的菜鸟学汉化!教大家汉化的后续工作!上次教大家的都学会了吧!应该做完码表的说。OK!继续。。。。。
导出文本的工具有很多,像thincy(dos),script-e,dumper…都不错,各有千秋。
我先以script-e讲解怎么导出文本,其它的我会在后面提提!
呵呵!先来认识我们的朋友script-e吧!如图
 
 
使用script-e应该不成问题。上图可以让你一目了然!
但我还是说说“文本开始地址”,如其名,就是在这行中输入你要导出文本的开始地址。
像我的地址就是12490H,加个H是告诉script-e这是个十六进制地址!不加则是十进制的!
这个你的明白?呵呵!建议大家还是用十六进制,因为可以直接得到!而十进制的还要进行换算!下面一行是要你输入文本的间隔大小!比如结束地址为12590H 那间隔大小就是
12590H-12490H=100。输入100就行了!(你可以用WINDOWS自带的计算器进行运算!)
导出的文本效果(如图)
 
可能你导出的文本,会很乱,看不清!— —|||| 呵呵!不要急,我们找找问题的源头----码表。还记的我上次说的吗?要完善你的码表!现在正好依据导出的文本来完善!在ROM中
00表示换行,FF表示结束,在码表中可以用line和msg中来定义!
像这样
line:00
01=
。。。。。。
。。。。。
FE=
msg:FF
现在你保存再导一次看看!呵呵!现在是不是比以前的好看多了!而如果导出文本还出现像这样:< xx> 那说明你没有做全码表!没有定义没用到的代码!大家应该从00 一直定义到FF这样就不会出现上述现象了!( 没有意义的代码用空格表示如 01= 空格 )
呵呵!导出文本之后!就该翻译了….不会日文?汗~~~~找人吧!(其实我也不会日文啦!)
去各个汉化论坛发贴试试!如果文本不是很多,会有人帮助你的! ^ ^
下面讲讲thincy的用法:
thincy运行于DOS。先看看它的尊容:
 
 
这个导出工具支持使用双码表!但我没有怎么用过!进入之后!我们可以在右边直接看到文本!怎么样,是不是很冲动?按J跳转到文本开始地址,把光标移到文本开始导出的地方,按D——>回车——>再移到文本结束处——>按D,之后会提示你保存文件。之后回车…之后就看到导出的文本啦!………………
基于dumper由国人写的,所以就不多说了!中国人都看的懂嘛!(不然我们就汉,呵呵)
OK!文本导出了,也翻译好了(假设!)那下面就要把汉字导入ROM了!如果你会编程。那要庆祝一下!因为那可以提高你的工作效力!大大的加快汉化进度,而不会的---没事
我们手工,不要跟我说烦!我也不想啊!哎!谁叫我们是菜鸟呢!
在导入汉字时!我们先要对翻译后的文本出现的汉字进行下统计。这样可以避免重复导入而白白浪费字库的空间!在这介绍小弟编的工具(界面极丑)。如图
 
左边是统计文字出现的次数,右边是快速转换文字代码!
我们先用左边的!打开翻译好的文本,之后就会出现统计结果
如果你想看看一个字出现的次数,你可以在统计结束框内双击
就行了!之后保存!之后再做个中文码表!原理和做日文码表一样!这里就不多说了!
现在根据你的中文码表,把汉字一个个导入ROM中。在TLP中有个tile editor窗口。你可以在这用鼠标画字!而你画的每一笔,都会在主窗口中显示
像这样:
我只是把第一个改写成了“土”字
(呵呵!很丑吧!)之后的就一个画吧!(注意颜色的使用)
说实在,我真不想介绍这种方法,因为如果真的是一个个字去画,那非死人不可!但是为了测试你对汉化有多大的耐心,我只有忍心了!其实汉化游戏,不需要很强的技术,更需要的是你对汉化持之以恒的耐心。。。。。。。。。。。。。。。。
呵呵!告诉大家吧!可以用TLP的插入位图功能实现大面积的导入汉字!具体怎么做!
还是靠大家自己摸索吧!
继续!导入翻译文本!这步就是把翻译好的文本写入ROM中,先前的那些工作都是为这步服务!所以这步也是收官工作。
假设翻译中把“フリ-スタイル”译成“练习”
在日文码表中フリ-スタイル的代码是分别CB D5 2D BE C1 B4 D6
在中文码表中 练习的码表是 CB CC
我们要做的,就是把练习的代码CB CC 替换掉フリ-スタイル的代码。以达到汉化目的
而有人问CB表示“フ”怎么又表示“练”,那我只能-----倒了!呵呵!因为我们已经把原来ROM中的日文字库全都替换成汉字字库了!所以“フ”也就自然被“练”代替了!
好了开始替换代码吧!在这之前,我们用一个工具,还记的小弟的那个吗?我们还没有用到右边的功能呢!它的作用就是把你输入的文字转成对应的代码表示出来!比如你在“欲输入字符”框内输入“练习”回车后,在下面你就可以看到“练习”的代码CB CC了。是不是很方便,这样省的你一个个去查了!当然在下面你首先要打开码表文件!
替换代码在文本编辑器内进行,打开TRANSLHEXTION,跳到要“翻译”的地址
上图中我把CB D5 2D BE C1 B4 D6 替换成 CB 20 20 20 CC 20 20 了!(其中20 表示空一格)保存进入游戏查看效果,如下图!
怎么样?呵呵!就这么简单!你也行的!
要提醒大家的是,在文本前面都有显示坐标。像 04 09 就是表示“练习”在X=9 Y=4的坐标出现!而 FREE STYILE 的坐标是 X=9 Y=6,那说明该句在“练习”下面,在游戏中的确也是这样显示的。为了更好的继续工作,我们应该尽可能去读懂这些可疑的代码。
好了!到这汉化全过程就结束了!你也应该能理解汉化原理!(如果还不懂,只怪我写作水平有限)那就拿个游戏来练练手吧!希望你也能汉化自己喜欢的游戏!完成儿时的梦想!祝你成功!

汉化NDS模拟器基础(1)

以下的文章是我转的一篇网上文章 , 我看过了 , 里面有些漏洞和不详尽的地方 , 以后可以看我写的文章来进行进一步学习。
---------------------------------------------------------------------------------------------------------- 
 
大家好,看这标题就知道要讲什么了吧!
没错,就是学怎样汉化游戏。我是菜鸟!你是吗?群呼:不是不是,那就没有理由学不会汉化,我相信你比我聪明,也相信你一定能看懂我这只菜鸟写的东东。OK 废话少说 下面开始:先准备工具和ROM(本文提到的ROM冠军桌球本地可以下载)
1. 运行ROM。此游戏是一个桌球游戏。之所以选这个ROM就是能让大家快速入门汉化这个ROM不难 这样也会有成就感。对游戏的有初步认识之后,我们继续。
2. 用TLP打开ROM。此工具是个精灵编辑器,可以直接查看ROM的字库。不错的工具,就像狼组所说,每个汉化者必备利器。(如下图)

在E1C00处发现字库(如果看不清,可以按1来改变模式至到看清为主)该字库用了两个格子放一个字母说明是8*16格式,为了证明字库就在此,我们做个实验:
抄下选项的这句日文:"フリ-スタイル" 再在TLP中把第一个字"フ"全部涂黑! (如下图
存档,再次进入游戏!发现了没有。你涂黑的那个字没有了(如下图)
呵呵 说明ROM的字库就在止。找到字库就好办了。下面继续

3. 找到字库,但是我们还不知道每个字对应码,假如你把“フリ-スタイル”翻译成"练习"。在TLP把“フ”改成"练" 把“リ”改成"习"其他的全部涂黑,的确你可以在局部达到汉化。但是在别的句中也出现“フ”和“リ”时,那就......
试想:如果我们能随心所欲的控制字母的出现,那我们就可以。。。。嘿嘿
下面我们就来找码表:
还是那句话“フリ-スタイル”。为了方面,在TLP中我们以“イ”为开头,算出“スタイル”在字库中的每个顺序。(为什么这样做我下面会讲到) 算出:ス=11 タ=14 イ=1 ル=35
用工具Translhextion相对搜索打开ROM,选取菜单的SEARCH->Value scan Relative
这时会出现一个窗口,在Values框内输入我们算出的顺序:11,14,1,35(输入一个数字按Add value添加)之后SCAN.........
之后Loading……………………………
之后在右边框内会出现地址(如下图)
不多只有六个(输入的顺序数字最好能大于3,不然出现的地址够你找了,),我们一个个试,找出“スタイル”所在的地址。
找啊找,找啊找。终于在74913处找到所在地(10000) 嘿嘿。。。。。。。

为了证明真假,再做个实验。把BE C1 B4 D6改成BE BE BE BE
存档,进入游戏,啊。。。。。。。。。。。(如下图)

兴奋一下,你找到码表了!恭喜。
其实有一个超简单的方法。就是打开菜单Seach->Find输入 “FREE”
就行!怎么样!找到的地址是不是就是在1000附近!而我们知道“FREE STYLE”就在“フリ-スタイル”的下面,那不就说明“フリ-スタイ”的码表就在这附近!改改试试就找到嘛(不要扔臭鸡蛋。。。)
而为何要数字库中字母的顺序?这是因为在用Translhextion相对搜索时,原理就是在ROM中找出第一个和第二个相差3,第二个和第三个相差-13。。。。。。。。。(11 14 1 35 )我们数顺序就是找出他们的相差值,让Translhextion找出ROM中所有这样的地址。像上面我们就找到了五个不同地址(有一个地址相同),而我们找到的那个地址中BE C1 B4 D6 就是相差+3,-13 +34。
4. 找到码表还没有完,你还没有把每个字对应码做出来。这步教大家怎么做字符对照表。知道BE=ス,就好办“ス”在字库的顺序是 11 那我可以肯定下一个BF=セ不信你试试。。。。。现在你看出了什么苗头了吧。我们根据BE=ス就可以把ROM中的每个字的对应码推出来!(应该懂十六进制吧!)
如果你为了正确,你也可以一个个试,再进入游戏查看!
推完之后,那我们就要把它编成册了,保存成 .TBL文件。这样码表就做好了。但那些没有用到的十六进制怎么办?(会不会有人问)那就要你试出它们所代表的意思尽量完善
又进一步了。。嘿嘿
OK,先休息。下次我再讲怎样把游戏中的文本提出来.
9月3日

NDS(L)开发之PALib(2)输入输出

输入/输出

目前我们谈论的输出系统只指基本的文本系统...下面,我们会看到不同的输入系统:按钮、笔和键盘...


输出:文本


事实上,文本对每个DS游戏都很重要。想象一下,一个没有大量文本或使用说明的游戏。自己建立一个文本函数可能很难,但这就是PAlib所做的。PAlib带有许多方便的文本函数。

想要初始化文本,用use PA_InitText (bool screen, u8 bg_select)

第1个参数是屏幕(1=上屏,0=下屏),第2个是背景(0-3)。对于每个屏幕上的简单文本函数,使用相同的背景。

简单文本(simple text)


创建简单的文本很简单,否则就不会叫做简单的文本。使用PA_OutputSimpleText(bool screen, u16 x, u16 y, const char *text)。参数screen表示所用的屏幕。x表示x坐标,0-31。y表示y坐标,0-19。text表示,就是文本了。

这儿有些例子代码...

CODE:
void printText()
{
  PA_InitText(1,0);
  PA_SetTextCol(1,31,31,31);

  PA_OutputSimpleText(1,0,0,"This is an example");
}
 


如果你想删掉一些文本,只需要用空格改写它们就行了,如PA_OutputSimpleText(0, 0, 0, "   ");

方框文本(box text)

简单文本很有用,但经常它不能停下来。有时,你需要文本换行,限制在屏幕上的一个方框里。这就是PA_BoxText()所做的工作。它的参数如下:

1.screen -- 所使用的屏幕(0或1 )
2.basex -- 方框左上角的x坐标
3.basey -- 方框左上角的y坐标
4.maxx -- 方框右下角的x坐标
5.maxy -- 方框右下角的y坐标
6.text -- 要输出的文本
7.limit -- 一次显示文本的最大数量(可以用来缓慢显示文本)

这个函数返回实际输出的文本个数。

为了缓慢显示文本,只需要将limit每次增加1。当返回的数字不发生变化时,就可以停止了(因为没有更多的文本,或已达到极限)。这时,你可以停止增加limit。

如果你有很长的一段话,需要知道能输出文本的最大数量。这时,可以用这个公式...

CODE:
u8 maxChar = (maxx - basex)*(maxy - basey);


它会工作的

高级文本(advanced text)

现在你已经知道了如何在屏幕上显示一些基本的文本,下来是最重要的文本函数:PA_OutputText(bool screen, u16 x, u16 y, const char *text, arguments...)。如你所见,它和第1个简单文本函数区别不大,除了很重要的参数列表。它允许你在屏幕上直接显示变量和字符串,这对调试很有用!

你可以看一下Text/Text的一些例子...

显示整数

下面是显示笔位置的示例代码...(你很快会看到如何使用笔...)

CODE:
PA_OutputText(1,0,0,"Stylus X : %d   Stylus Y : %d", Stylus.X, Stylus.Y);


首先看到的是%d...它用来显示整数(S32..)。如果在文本中写入%d,它会在你所给的参数中寻找参数(这里是Stylus.X和Stylus.Y)。如果有几个%d,它会按参数出现的顺序来...因此第1个"%d"表示Stylus.X,第2个表示Stylus.Y。

显示浮点数

显示浮点数与显示整数差不多...只有2个地方不同:

1.使用%f代替%d
2.加入你想在小数点后显示几位数字...

就象这样:

CODE:
float test = 4.678;
PA_OutputText(1,0,0,"Float value : %f3", test);


看,不难吧!这会显示浮点数:4.678

显示字符串

最后一个如何显示字符串...这很有用,例如可以在文本加入玩家的名字,产生个性化的信息!对于字符串,只要使用%s就行了!

就象这样:

CODE:
char name[10] = "Mollusk";
PA_OutputText(1,0,0,"Hi %s", &name);


看,不难吧!它会显示Hi Mollusk。一个重要的事情:你的字符串,基本上是一个字符数组,最后一个必须是0...如果不是,就会一直输出下来直到碰到0为止,这会花一些时间...因此如果你是把字符一个一个地加入到字符串中的话,就象是"a",下来是"b"等等...记住最后一个是0。

文本的颜色

有三种选择文本颜色的方法:

PA_SetTextCol

你可以在任何位置使用这个简单的函数PA_SetTextCol(screen, r, g, b)来改变字体的颜色。它在可以如你所愿设置1屏的颜色...所有屏幕上的文本都会变成一种颜色,即使你以前改变过颜色。r,g,b是什么?

r代表红色...它是颜色中红色的数量,从0(没有红色)到31(红色最多)。
g代表绿色
b代表蓝色

下面有些例子:

蓝色:PA_SetTextCol(screen, 0, 0, 31)
红色:PA_SetTextCol(screen, 31, 0, 0)
白色:PA_SetTextCol(screen, 31, 31, 31)
黑色:PA_SetTextCol(screen, 0, 0, 0)
灰色:PA_SetTextCol(screen, 22, 22, 22)

你可以看一下Text/Text的例子

PA_SetTextTileCol

PA_SetTextTileCol与PA_SetTextCol有点不同,因为它不改变已存在文本的颜色...它允许一个屏幕上有不同的颜色(这很不错)。PAliB例子是Text/TextColors

CODE:
PA_SetTextTileCol(1, i); // Change the color on the top screen, values 0 to 6
PA_OutputSimpleText(1, 2, i, "Color test..."); // Screen 1 has different colors


PA_SetTextTileCol(1, i);设置新的文本颜色为i...没有其它了。n可以取0-7,测试一下它所给的颜色...

%cX

最后一个方法是在你的字符串使用%cX,X表示颜色的数字(0-7,就象以前一样)。这个方法的好处是你可以在一个字符串中有不同的颜色!以下例子再一次来源于TextColors:

CODE:
PA_OutputText(0, 0, 0, "Color test...%c1another one, %c2again, %c3 again...");


如你所见,改变颜色只需写%cX。(如果你不相信就在模拟器上测试一下吧)。它很简单lol

定制字体&文本边框

PA_lib允许你很简单地定制字体和文本边框。你需要导入图像到工程中,它很难因为需要一些图像转换。如果你是按顺序来看这个wiki,可能会有点失望。

事实上,图像数据(如果jpg图像,gif,png...)不能直接用于DS硬件。你需要把它们转换成DS能理解的原始格式。

转换数据会在精灵(sprites)和背景教程中阐述。因此我建议你跳过定制字体和文本边框教程直到你学过用PAGfx转换(第4天)和平铺背景(第5天)


定制字体

定制文本边框


输入:按钮、笔、键盘


DS有三种基本的输入方式:用按钮(所有的...),笔,或PAlib的键盘 ..我猜最后一种方法可能用到麦克风,不过我们在后面的声音教程里再讨论...

按钮

使用按钮很简单!它会每帧自动更新,并允许你访问一个简单的结构(structure)。这个结构名字是Pad,它包含多个结构,取决于按的方式:Held(按住)、Released(释放)、Newpress(新按)

1.Held缺省是0,当按钮被按住时变成1
2.当按钮放开时Released变成1,只有1帧输出为1
3.按下时Newpress变成1,只有1帧为1

每一种按的结构(Held,Released,Newpress)包含所有按钮:

1. 方向键Left,Right,Up,Down
2. A,B,X,Y键
3. L,R键
4. 开始键Start,选择键Select

最后,要检查一个键,需要Pad.Checktype.Keyyoucheck,如果A键按住,就要检查Pad.Held.A!A键释放就要检查Pad.Released.A,新按A键检查Pad.Newpress.A...

就这样简单。这儿有个快速简单的例子(不能工作),只显示如何使用这些键:

CODE:
if(Pad.Held.Up)
{
  MoveUp();
}
if(Pad.Held.Down)
{
  MoveDown();
}


简单吧?

如果你愿意,可以看看Input/Pad例子...



笔的工作方式和按钮差不多...它每帧自动更新,使用一个结构名字是Stylus(简单...)。不同的变量是:

1. Held,Released,Newpress和按钮的变量一样...
2. X,Y表示笔的坐标

下面是基本的代码实例:

if (Stylus.Held)
{
PA_SetSpriteXY(screen, sprite, Stylus.X, Stylus.Y);
}


如你所想的那样,这个简单的代码检查笔是否按下。如果笔按在屏幕上,它会将精灵(sprite)的左上角放在笔的位置上...没有其它的了

如果你愿意,可以看看Input/Stylusexample例子...

键盘

使用PAlib的键盘很简单,就象你在Input/Keyboard例子中看到的那样...

键盘要工作,必须载入到一个给定的背景中(0-3),与文本及其它的背景都不一样...

CODE:
PA_Init();   // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL
 
PA_InitText(1, 0); // Initialise the text system
 
PA_InitKeyboard(2); // Load the keyboard on background 2...
 
PA_KeyboardIn(20, 100); // This scrolls the keyboard from the bottom, until it's at the right position
 
PA_OutputSimpleText(1, 7, 10, "Text : ");
 
s32 nletter = 0; // Next letter to right. 0 since no letters are there yet
char letter = 0; // New letter to write.
char text[200]; // This will be our text.
 
// Infinite loop to keep the program running
while (1)
{
  // We'll check first for color changes, with A, B, and X
  if (Pad.Newpress.A) PA_SetKeyboardColor(0, 1); // Blue and Red
  if (Pad.Newpress.B) PA_SetKeyboardColor(1, 0); // Red and Blue
  if (Pad.Newpress.X) PA_SetKeyboardColor(2, 1); // Green and Red
  if (Pad.Newpress.Y) PA_SetKeyboardColor(0, 2); // Blue and Green
   
  letter = PA_CheckKeyboard();
   
  if (letter > 31) { // there is a new letter
    text[nletter] = letter;
    nletter++;
  }
  else if ((letter == PA_BACKSPACE)&&nletter) { // Backspace pressed
    nletter--;
    text[nletter] = ' '; // Erase the last letter
  }
  else if (letter == '\n'){ // Enter pressed
    text[nletter] = letter;
    nletter++;
  }
   
  PA_OutputSimpleText(1, 8, 11, text); // Write the text
  PA_WaitForVBL();


我想,这是一个比较复杂的例子(相对其它例子而言...),让我们来一步一步地看。

程序开始是初始化文本,因为...我们需要显示一些文本!

下来是

CODE:
PA_InitKeyboard(2); // Load the keyboard on background 2...
PA_KeyboardIn(20, 100); // This scrolls the keyboard from the bottom, until it's at the right position


第1个函数在下屏的背景2中载入键盘...你可以使用0-3的任何背景(没有内容)...每2个函数卷动键盘,让它好看一些。它把键盘放在(20,100)位置,不过你可以把它放在任何位置...

PA_SetKeyboardColor(0, 1);改变键盘的颜色...选择你最喜欢的...

letter = PA_CheckKeyboard();是最重要的函数!CheckKeyboard检查你是否用笔按下一个键,返回所按的字符,如果没按就返回0.

CODE:
if (letter > 31) { // there is a new letter
  text[nletter] = letter;
  nletter++;
}


另一个重要的部分...如果按的键是一个字母,就加到当前文本中...由于文本中不止一个字母,所以nletter++!

PA_OutputSimpleText(1, 8, 11, text);显示我们正输出的文本...我跳过一些代码(backspace键和回车),你自己解决吧。

编译并测试这个演示程序,可以在DualiS上运行!享受乐趣吧!!

手写识别

最后一个很有趣...你可以用2种方式:

1. 采用PAlib的Graffiti识别
2. 采用你自己定制的形状,象Lost Magic(http://en.wikipedia.org/wiki/Lost_Magic)或Pac_Pix(http://en.wikipedia.org/wiki/Pac-Pix)!

PA Graffiti

这些代码可以让你使用Graffiti手写识别系统...随着时间的推移它会被改进。这些代码基于键盘例子,因此并不难。后面你能看到,背景上会有一些模糊的8位素材。



代码来自Input/RecoGraffiti

CODE:
PA_InitText(1, 0); // Initialise the text system on the top screen
PA_Init8bitBg(0, 0); // We'll draw the characters on the screen...
 
u16 *pal = (u16*)PAL_BG0;
pal[1] = PA_RGB(31, 31, 31); // colors...
 
PA_WaitForVBL();

u8 nletter = 0;
 
// Infinite loop to keep the program running
while (1)
{
   
  if(Stylus.Newpress) PA_Clear8bitBg(0); // Reset the screen when we start a new character
   
  PA_8bitDraw(0, 1);
       
  char letter = PA_CheckLetter(); // Returns the letter !!!
   
  if (letter > 31) { // there is a new letter
    text[nletter] = letter;
    nletter++;
  }
  else if ((letter == PA_BACKSPACE)&&nletter) { // Backspace pressed
    nletter--;
    text[nletter] = ' '; // Erase the last letter
  }
  else if (letter == '\n'){ // Enter pressed
    text[nletter] = letter;
    nletter++;
  }
   
  PA_OutputText(1, 2, 2, text); // Write the text
   
  PA_OutputSimpleText(1, 0, 10, "Draw a PAGraffiti letter to have it recognized by the system...");
   
  PA_WaitForVBL();
}


一部分一部分来看...

CODE:
PA_InitText(1, 0); // Initialise the text system on the top screen
PA_Init8bitBg(0, 0); // We'll draw the characters on the screen...
 
u16 *pal = (u16*)PAL_BG0;
pal[1] = PA_RGB(31, 31, 31); // colors...
 
PA_WaitForVBL();


这部分初始化文本和画布背景,后面你会学到更多...

nletter = 0; 用来计算字母的个数

CODE:
if(Stylus.Newpress) PA_Clear8bitBg(0); // Reset the screen when we start a new character  
PA_8bitDraw(0, 1);


当你再次用笔时,这部分用来在屏幕上画图及擦除...稍后,稍后...

CODE:
char letter = PA_CheckLetter(); // Returns the letter !!!


现在,我们到这儿了!这个代码检查字母!!!要想工作必须每帧都执行(象键盘一样,象键盘...)如果字母没有完成就返回0...

其它代码和键盘的例子一样,我不会再次讨论了...

定制图形

这个系统真的很好的地方在于你可以定制图形!加入图形只是几秒钟的事情,下面是个例子...

这些代码来自于Input/RecoAddShape

CODE:
PA_UsePAGraffiti(0); // Do not use the provided Graffiti shapes...
   
PA_RecoAddShape('a', "AAAAAAAAAAAAAAA"); // Straight right-going line
PA_RecoAddShape('b', "111111111111111"); // Straight left-going line    
PA_RecoAddShape('c', "IIIIIIIIIIIIIII"); // Straight left-going line    
PA_RecoAddShape('d', "999999999999999"); // Straight left-going line            
       
PA_WaitForVBL();

   
// Infinite loop to keep the program running
while (1)
{
     
   if(Stylus.Newpress) PA_Clear8bitBg(0); // Reset the screen when we start a new character
     
   PA_8bitDraw(0, 1);
         
             
   char letter[2]; letter[1] = 0;
   letter[0] = PA_CheckLetter(); // Returns the letter !!!
       
   if (Stylus.Released){ // only show if released
       PA_OutputText(1, 2, 7, "Shape Recognized : %s", letter); // Letter recognized
       PA_OutputText(1, 0, 1, "A for right, B for left, C for up, D for down");
   }        
       
   PA_OutputText(1, 4, 22, "Shape : %s", PA_RecoShape); // Write the shape string
       
   PA_OutputSimpleText(1, 0, 10, "Draw a PAGraffiti letter to have it recognized by the system...");
       
   PA_WaitForVBL();
}


下面是注释:

CODE:
PA_UsePAGraffiti(0); 去掉graffiti识别,只载入我们的图形...

PA_RecoAddShape('a', "AAAAAAAAAAAAAAA"); // Straight right-going line
PA_RecoAddShape('b', "111111111111111"); // Straight left-going line    
PA_RecoAddShape('c', "IIIIIIIIIIIIIII"); // Straight up-going line    
PA_RecoAddShape('d', "999999999999999"); // Straight down-going line
   

这里我们告诉PALIB要识别的新的图形...看上去不那么直观...我如何得到它们?通过运行这个ROM,lol.你会看到更多。你所需要理解的就是一个图形由2个参数定义:
1.调用时返回的字母(或数字1-255)
2.字符串,如这个ROM所示...当用这些代码绘制一个图形时,会显示字符串,允许你拷贝使用它!很好。

其余的代码实际上与上一个例子很相象,因此我不会再多说了。只是有1行还是很重要:

CODE:
PA_OutputText(1, 4, 22, "Shape : %s", PA_RecoShape); // Write the shape string
PA_RecoShape保存图形...这就是我如何获得前面的4个图形!


程序会识别我们的图形

图形信息

后来我在lib的最后一个版本中增加了第三个例子...它把信息加入到图形识别中。信息很基本,但在特点的环境中很有用。信息保存在PA_RecoInfo结构中的Stylus.Released里。它包含:

1.Length,图画的总长度(像素)
2.startX和startY,第一笔的位置。这很有用,例如在一个游戏里可以来确认某个给定的物体或精灵(sprite)是否被激活。
3.endX和endY,最后一笔的位置。
4.minX, minY, maxX和maxY,界定图形。可以用来确认图形有多大及中心在哪里。
5.Angle,第一笔和最后一笔之间的角度...不是很常用。

下面是使用它的代码,只是从定制图形那个例子拷贝过来的,因此我只贴出改变的部分...这部分在一个无限循环里...

CODE:
if (Stylus.Released){ // only show if released
   PA_OutputText(1, 2, 7, "Shape Recognized : %s", letter); // Letter recognized
   PA_OutputText(1, 0, 1, "A for right, B for left, C for up, D for down");
           
   // Use all the info to draw the shape outline, start and end...
   // Rectangle around the drawing zone
   PA_Draw8bitLine(0, PA_RecoInfo.minX, PA_RecoInfo.minY, PA_RecoInfo.maxX, PA_RecoInfo.minY, 2);
   PA_Draw8bitLine(0, PA_RecoInfo.minX, PA_RecoInfo.maxY, PA_RecoInfo.maxX, PA_RecoInfo.maxY, 2);        
   PA_Draw8bitLine(0, PA_RecoInfo.minX, PA_RecoInfo.minY, PA_RecoInfo.minX, PA_RecoInfo.maxY, 2);        
   PA_Draw8bitLine(0, PA_RecoInfo.maxX, PA_RecoInfo.minY, PA_RecoInfo.maxX, PA_RecoInfo.maxY, 2);
           
   // Plot points on the start and end :
   PA_Put8bitPixel(0, PA_RecoInfo.startX, PA_RecoInfo.startY, 2);
   PA_Put8bitPixel(0, PA_RecoInfo.endX, PA_RecoInfo.endY, 2);            
}        
       
PA_OutputText(1, 4, 22, "Shape : %s", PA_RecoShape); // Write the shape string
PA_OutputText(1, 4, 23, "Length : %d pixels ", PA_RecoInfo.Length); // Length in pixels

我不会再重复刚才所说的:-)我只是不喜欢重复我自己,lol。代码基本上是围绕图形画一个矩形:

CODE:
PA_Draw8bitLine(0, PA_RecoInfo.minX, PA_RecoInfo.minY, PA_RecoInfo.maxX, PA_RecoInfo.minY, 2);
PA_Draw8bitLine(0, PA_RecoInfo.minX, PA_RecoInfo.maxY, PA_RecoInfo.maxX, PA_RecoInfo.maxY, 2);        
PA_Draw8bitLine(0, PA_RecoInfo.minX, PA_RecoInfo.minY, PA_RecoInfo.minX, PA_RecoInfo.maxY, 2);        
PA_Draw8bitLine(0, PA_RecoInfo.maxX, PA_RecoInfo.minY, PA_RecoInfo.maxX, PA_RecoInfo.maxY, 2);

它只使用min/max X/Y 坐标画出4根线,很好理解...

下面,在开始和结束的坐标处画2个像素:

CODE:
PA_Put8bitPixel(0, PA_RecoInfo.startX, PA_RecoInfo.startY, 2);
PA_Put8bitPixel(0, PA_RecoInfo.endX, PA_RecoInfo.endY, 2);
 


...

PA_OutputText(1, 4, 23, “Length : %d pixels “, PA_RecoInfo.Length); 用来显示长度。

没有其它的东西了...如果你发现一些很重要的东西没写,请写封mail给我(mailto:mollusk@palib.info)或在论坛上训斥...

哦,这个例子中没有使用Angle,因为它不常用...
9月2日

NDS(L)开发之PALib(1)安装和编译

这个教程包含2部分:
1.安装devkitPro和PAlib,以及你可能需要的其它东西
2.编译一个hello world程序,并理解模板(template)是什么

安装

想要建立DS开发环境,你首先得下载并安装devkitPro : devkitPro updater (http://sourceforge.net/project/showfiles.php?group_id=114505&package_id=160396)。现在,用这个比较好的安装程序来安装devkitPro。注意!你可以不选择PSP和GBA库,但不要动其它选项(MSYS,devkitarm,libnds ...)。如果省了一些东西,它会罢工的。如果你不能确定,那就选中全部,如果安装多了不会有问题的。

现在PAlib需要你安装.Net框架。PAGfx(图像转换),PAFS(文件系统),和VHaM(IDE)安装需要它。
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=0856eacb-4362-4b0d-8edd-aab15c5e04f5

下一步,下载并安装PAlib(使用安装程序):PAlib Installer http://sourceforge.net/project/showfiles.php?group_id=142901&package_id=168612   把它安装到devkitPro的目录里,这样所有事情就完了。

对于devkitPro和PAlib,注意,不能安装到一个名字中含有空格的目录中(如:c:\DS Development\PA Lib)。同样,也不能安装桌面,因为桌面的目录是c:\Documents and Settings\...

现在完成了,进行下一步:)

编译测试


检查安装正确与否不需要大量的方法...它不难,来吧,希望它工作正常!

我们将要编译第一个例子。打开PAlibExamples\Text\Helloworld\,双击build.bat来编译...如果一切正常,会生成helloworld.ds.gba和helloworld.nds文件。

嘿,就这么简单!

现在,有2种方法来运行rom:使用模拟器(注意,有很多bug)或硬件(flashme/passme/wifime/wmb)。

模拟器


目前只有4种模拟器,不过现在我们只有其中2种。

HyperDs是第一种模拟器,从未公开发布,从未用过...lol

Dualis(
http://dualis.1emulation.com/),运行得很好。我经常用它。它对2D测试表现得很好,能支持大量选项。缺陷:R12版本有一个bug--当使用笔时会崩溃,因此只好使用R11版来测试...我个人把.nds文件与Dualis程序相关联,双击rom会执行它。

iDeaS(
http://www.rascalboy.nzone.it/ideas.html)是另一个比较好的模拟器!它是第一个也是目前唯一一个支持3D和声音的模拟器。最新版本1.0.0.5已经出来很久了,而且WIP版本的截图让我们相信下一个版本很震撼,但是还没有出来...

最后一个是DSemu,可能有新的插件功能,但我不用它。以后说不定会

将ROM上传到DS上(略)


SuperCard(略)



编译


这是一个编译方面的快速教程...

PA模板机密


首先,你需要打开PAlib模板。我将会说明一下它是如何工作的...可以看到,它包含一些文件和3个目录。

模板说明

先想一想...这个问题以前经常被问到...什么是模板(template)?知道了!你会说,模板是设计的一些形式,把内容分成不同的形式和结构。换句话说,它是一种组织结构,包含针对一个工程的所有开发文件。在模板里,有C文件,精灵(sprites)图像,背景,声音等。

对应目录:

source --> 最重要的部分,源代码,基本是执行代码(.c或.cpp文件)。
include --> 头文件,提供源文件的帮助信息(.h文件)

data --> 后面会用到,声音等...

对应文件:

Makefile --> 重要但复杂的文件,描述如何编译程序,不要担心它:P

logo.bmp和logo_wifi.bmp --> 通过wifi传输ROM时用到的图像文件,不要在意它

build.bat --> 重要文件,用来建立(编译、生成)ROM

clean.bat --> 当你想要发布源代码或完成编程时,clean.bat删除所有建立的文件和ROM。它会减小体积...基本上它会删除所有build.bat生成的文件。

project.vhw --> 它很cool--在VisualHam(我们将要用到的编辑器)中打开整个工程。

模板主要代码

现在,打开template.pnproj或进入source目录打开main.c。就像它的名字一样,main.c是你的主程序文件。它包含了ROM开始时默认载入的内容。main.c包含了运行PAlib所需的基本内容。如果你编译并运行这个ROM在模拟器或DS上,它不会做任何事情,只显示2个白屏...以下是第一次打开main.c所看到的:

CODE:
// Includes
#include <PA9.h>     // Include for PA_Lib

// Function: main()
int main(int argc, char ** argv)
{
  PA_Init();   // Initializes PA_Lib
  PA_InitVBL(); // Initializes a standard VBL
 
  // Infinite loop to keep the program running
  while (1)
  {
    PA_WaitForVBL();
  }
 
  return 0;
} // End of main()



解释代码!

如果你懂C语言,它的含义就很清楚了。对于其它人可能不会,因此我来一行一行地解释,尽管内容只有三样...

CODE:
// Includes


简单://意思是后面的文字是注释...当写下//,就是告诉编译器不要编译后面的内容...因此你可以随意写些东西做为内容!这行是告诉你可以把文件(图像等)包含在这儿。
CODE:
#include <PA9.h>

意思是请把PAlib包含在我的代码中,我需要它。如果不写的话,就不能认别PAlib函数,并会得到错误信息。后面使用include的概念会很重要,它可以加入图像文件、其它重要的代码等。
CODE:
int main(int argc, char ** argv)

看上去很古怪,但每个工程都要有:它是程序的开始,所有东西开始的地方。不要抱怨(int argc, char ** argv)是什么意思,不需要注意,你永远不会用到它:)只要知道{下面是执行的代码!
CODE:
PA_Init();   // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL

这2行在所有使用PAlib的工程中都能找到。第1行是通常的初始化。它为你的程序准备好使用精灵(sprites)、背景、文字、所有的东西。没有它PAlib就不会工作。高级用户可以修改第2行。基本上,VBL能将程序与屏幕同步,每秒60帧。如果不初始化VBL,程序要么运行很快(每秒100000帧,不能玩),要么完全不能工作(呆在第1帧)。一定在程序写上这2行。
CODE:
// Infinite loop to keep the program running
  while (1){
 
当括号里不是0时(这里它是1),while命令执行后面的代码。这儿它永远是1,所以这是一个无限循环。为什么?如果没有这个循环,每行代码只执行一次,程序就会结束而不显示任何东西。它会让程序永远执行下去,或直到玩家关机。在每一个循环中,程序会计算出所有下一次所需的所有东西并画到屏幕上。
CODE:
PA_WaitForVBL();

最后一个命令将无限循环与屏幕速率(60fps)同步。如果没有,程序会象前面说的那样比屏幕快很多。
CODE:
  }
 
  return 0;
} // End of main()

上面这些是结束代码,永远会是这样,不要烦它,让它呆一边:P

现在,你了解模板的全部,继续来看如何显示文字!


Hello World


简单的hello world,显示PAlib有多容易...不会深入DS编程的细节,只说明它确实很简单,以及可能是第2天了:P

这个文字系统使用背景,一个背景(每个屏幕有4层),你可以选择使用哪个屏幕和哪个背景。还可以用其它功能,如设置字体或改变颜色,但不是现在:P

在PAlibExamples/Text/HelloWorld中可以找到以下代码(或相似的版本)

CODE:
#include <PA9.h> //Include PAlib

int main(void)
{
  PA_Init();   //Initialize the main library
  PA_InitVBL(); // Initialize Vertical Blanking

  PA_InitText(1,2); //Tell it to use text on screen 1, background number 2
  PA_OutputSimpleText(1,1,1,"Hello World !"); //Print the text on screen 1, with coordinate 1,1

  while(1)
  {
    //Loop forever
  }
 
  return 0;
}
 


如你所见,大部分代码与模板代码很相似。基本上,加了2行:

CODE:
PA_InitText(1,2); //Tell it to use text on screen 1, background number 2
PA_OutputSimpleText(1,1,1,"Hello World !"); //Print the text on screen 1, with coordinate 1,1


第1行用来初始化文字,载入字体到DS视频RAM中。没有它,输出的文字就象垃圾...会显示文字,但每个字母会是一个随机的图案...不太好:)PA_InitText 有2个参数:所用的屏幕(0表示DS机器的下屏,1表示上屏)和背景(0表示最上面的一层,1是下一层,2,3表示最下面的一层...)。

PA_OutputSimpleText(1,1,1,”Hello World !”), 就象它的名字一样,如果背景用InitText初始化过,就在屏幕上输出简单的文字...(到这里,你可能知道所有PAlib函数开头都是PA_...)。这个函数有4个参数:

1.屏幕(0-1)

2.开始的水平位置,0-31。每一个位置是一个8×8像素的方块,因此第0块在第0个像素,每1块在第个8像素,等等...

3.垂直位置,和水平位置一样

4.文字...以"开始和结束,C编译器靠这个来识别...

当你理解之后,按F6来编译并在DualiS中运行,或按F7来编译并在DesmuMe中运行!按F5只编译不运行ROM(可以用来编译,再传到你的DS上...)


问与答--安装和编译


Q1.当我想编译一个例子,有以下错误:make’ is not recognized as an internal or external command, operable program or batch file.

A1.我猜可能devkitPro没有安装好,或一些包(MSys)没有安装...试着重安一次。记住,安装需要设好环境变量。同时,如果你下载后移动了任何目录,也可能不工作出现错误。请安装在一个目录中(c:/devkitpro/ preferably)并且不要移动它。

Q2.当我想编译一个例子,有以下错误:Devkitpro has reached an internal error, it must shut down” or something to that effect.

A2.不确定为什么会发生,不过你可以这样处理。确保安装最新的Devkitpro安装程序并选择“Download only, don’t install”。做好之后,选择重新运行程序并选择“Download and install”。它不会重新下载文件,你不用担心。如果还不能工作,你可以单独执行每个EXE文件来达到同样的效果。
请看一个简单的文本输出例子:

NDS(L)开发平台的搭建

我介绍两种主流平台的搭建 :
1.DevkitPro + PALib
2.Codewarrior for NDS + LibNDS
 
1. DevkitPro + PAlib 。 穷人的开发基地 。
没有办法 ,都是开源的 , 因此是最容易搭建的开发平台 。 当然,随之而来的自然就是对大型商业游戏的开发劣势  。 可提供的类库也太少 ,还需要PaLib一点一滴的努力 。
首先下载devkitPro 和 PAlib
 
1)首先安装DevkitPro ,注意 , 安装目录不能有空格 (真是变态),因此,我直接安装在了C:\DevkitPro目录下面 。
 
2)其次,安装PALib(开源的开发库,方便开发) , 安装到DevkitPro同级目录 。
 
如果你要用到命令行编译请执行3) ,也可暂时跳过 。
3)设置环境变量:在"我的电脑"右键->"属性"->"高级"->"环境变量"下边的"系统变量"下选择"新建",在变量名内输入"DEVKITARM"(无引号,下同),变量值内输入"/X/devkitpro/devkitARM"("X"为DEVKIT的安装盘,下同),再新建一个,变量名为"DEVKITPRO",变量值为"/X/devkitpro".然后选中"Path"编辑,在后面加入"X:\devkitpro\devkitarm\bin;X:\devkitpro\msys\bin"与前面用分号隔开,然后确定.
安装完成了,我们编译测试一下 :
4)编译例子:在DOS下进入x:\DEVKITPRO\nds-examples\,里面有很多例子,键入"make"编译,如果前面设好了的话,就可以得到NDS ROM了(后缀为".nds"的文件).烧到烧录卡中,就可以运行了.我用的是SC-CF卡,不用转换,直接拷进去运行.

 

2.Codewarrior for NDS + LibNDS  。官方推荐 。

Codewarrior  , 做过掌上设备开发的都知道这个品牌 。 大名鼎鼎啊 。 当年开发Palm系统的时候我简直离不开CW9.0  。 而在各种掌上设备上的开发都是首推这款产品 。 OK,废话不多说了,我们先下一个泄漏出来的CW for NDS :

哎呀,不好意思,地址忘了, 有兴趣的问我要吧 。

下载来的只有一个CW IDE , 没有关系,到处可以找到LibNDS SDK (在安装过程需要) 。 我们可以到这里去下载:

http://sourceforge.net/project/showfiles.php?group_id=114505&package_id=151608

然后安装过程还需要提供任天堂官方模拟器Ensata安装地址 ,到网上自己去下吧 , 推荐安装Ensata v1.4d版本 。

然后安装过程完成 , 可以开始开发了  。 王者的利器 , 可惜这个泄漏出来的版本调试功能太弱 。 没有办法了。

 


8月24日

研究NDSL游戏ROM的汉化

任天堂的NDSL确实是个好东西, 作为一款掌上游戏机,他的销售量已经突破2100万 。比PS2卖的还好 。于是乎,我也没有抵抗住他的迷人诱惑 , 入手了一款 。
机器已经玩了快两个月了。游戏可以慢慢玩 ,毕竟一边玩一边要查日语词典,所以进度比较慢 。
但是却喜欢上了NDSL上的游戏汉化工作和软件开发 。 也算是造福大众吧 ,目前正在研究这块儿 。
把收集到的汉化资料先放在这里,作为备份吧 。