背景
我可能是一个很怀旧的人,喜欢听老歌,看老电影,玩一些小时候的游戏。小时候趁着爸妈去田里,赶紧叫上小伙伴搬来小霸王插上卡带进入到游戏的世界里,当时有一个小霸王是所有小孩的梦想,后来才知道当年玩的超级玛丽,魂斗罗都属于FC游戏,运行FC游戏的叫做FC游戏机是日本任天堂出品的,小霸王属于国产的“山寨机”
上高中的时候,家里给买了一台步步高的学习机,这应该是我接触的第一款电子产品,对我学习上倒是没帮助多少,但是让我第一次接触到了RPG游戏,步步高上有一款非常经典的游戏叫做伏魔记,当时玩的如痴如醉,那段时间玩的都没心思上课,玩到后面有些关卡总是走不下去,才知道有攻略这东西,有了攻略后玩的更疯狂,一遍一遍的玩,当时步步高平台上能下载的游戏还有很多,比较经典的还有侠客行
,魔塔
等,后来升高三了要高考了,才不得不把机器给藏起来。
高考后报了软件学院,我一直觉得是步步高游戏启蒙了我对电子产品和游戏的认知,报软件一定程度上也是受了这个影响。当时一个宿舍六个人,我们因为是软件学院,可以正大光明的带电脑,那时dota很火,五人组队,他们五个人刚好组成一队,我从来不玩dota,甚至整个大学都没怎么玩过游戏,原因很简单,我觉得编程比游戏更好玩。
后面毕了业,工作,写了很多很多的代码,突然某一天想起步步高的游戏,可惜机子已经找不到,步步高官网也不提供下载,好在有一群跟我一样恋旧的人专门做了一个资源站点,分享当年步步高的一些游戏文件,并且有模拟器,游戏还是当年的游戏,但玩不出当年的味道,也就试玩了一下,后面甚至还去闲鱼上买了一台二手的步步高学习机来玩,玩是不会去玩了,更像是找到了一个老朋友,也很满足。
任天堂是一个很伟大的公司,坚持做游戏,做掌机,给全世界的儿童带来梦想和欢乐,我一直在想,为什么中国没有属于自己的掌机产品,当年的步步高游戏可玩性真的不输任天堂,国产的游戏真的不输给国外,可能国人过于急功急利,没法慢慢打磨好一款产品,如果当年小霸王能坚持自主研发,如果当年步步高发展掌机业务,经过这么多年的迭代,不敢说和任天堂平起平坐,但也不至于现在中国山寨掌机满天飞。
我自己一直也有做游戏的梦想,目前的编码能力也是足够独立完成一款游戏的编码,所以也是出于兴趣想做一款小游戏圆了自己小小的梦想,一开始计划是用java写,因为我是java程序员,后来看到家里躺着一台3ds,想着写了放到3ds上玩,那java肯定是不合适的,就想用3ds直接开发,但3ds开发一方面资料少,另外一方面3ds的模拟器还不成熟,而且3ds通过烧录卡可以流畅的玩nds游戏,nds的模拟器和资料都很丰富,就决定用nds,这个教程就是这么来的,我因为是做企业应用开发,养成了写文档的习惯,所以就准备写一个系列的教程,把研究过程记录下。
以上是背景,有点长。
devkitpro
devkitpro提供了一个开发任天堂游戏完整的开发环境,基本所有的任天堂游戏都可以通过devkitpro进行开发,devkitpro支持多种操作系统,Windows,MAC,Linux都支持,因为我的电脑是MAC,所以接下来的教程都是基于MAC,不过差别也不是很大。
- 1. 你需要具备科学上网的能力。
- 2. 下载devkitpro
默认安装在/opt/devkitpro
目录下。
- 3. 设置环境变量
编辑文件~/.bash_profile
,加入以下内容
export DEVKITPRO=/opt/devkitpro export DEVKITARM=${DEVKITPRO}/devkitARM export DEVKITPPC=${DEVKITPRO}/devkitPPC export PATH=${DEVKITPRO}/tools/bin:$PATH
执行source ~/.bash_profile
令其生效
- 4. 安装
xcode-select
工具(可选)
执行以下命令即可
xcode-select --install
- 5. pacman只是包管理工具,并没有开发环境,我们需要通过pacman安装相应的nds包
sudo dkp-pacman -S nds-dev
如果安装顺利,输出如下:
➜ ~ sudo dkp-pacman -S nds-dev :: There are 16 members in group nds-dev: :: Repository dkp-libs 1) default-arm7 2) devkitarm-crtls 3) devkitarm-rules 4) dswifi 5) libfat-nds 6) libfilesystem 7) libnds 8) maxmod-nds 9) nds-examples :: Repository dkp-osx 10) devkitARM 11) dstools 12) general-tools 13) grit 14) mmutil 15) ndstool 16) pkg-config 输入某个选择 ( 默认=全部选定 ): 正在解决依赖关系... 正在查找软件包冲突... 软件包 (16) default-arm7-0.7.4-2 devkitARM-r53-1 devkitarm-crtls-1.0.3-1 devkitarm-rules-1.0.0-1 dstools-1.2.1-1 dswifi-0.4.2-1 general-tools-1.0.3-1 grit-0.8.16-1 libfat-nds-1.1.3-2 libfilesystem-0.9.14-1 libnds-1.7.3-3 maxmod-nds-1.0.11-2 mmutil-1.8.7-1 nds-examples-20181226-1 ndstool-2.1.2-1 pkg-config-0.29.2-1 下载大小: 41.98 MiB 全部安装大小: 217.22 MiB :: 进行安装吗? [Y/n] Y :: 正在获取软件包...... devkitarm-rules-1.0.0-1-any 3.6 KiB 602K/s 00:00 [################################] 100% libnds-1.7.3-3-any 410.6 KiB 919K/s 00:00 [################################] 100% default-arm7-0.7.4-2-any 99.7 KiB 5.41M/s 00:00 [################################] 100% dswifi-0.4.2-1-any 161.9 KiB 3.95M/s 00:00 [################################] 100% libfat-nds-1.1.3-2-any 103.7 KiB 3.90M/s 00:00 [################################] 100% libfilesystem-0.9.14-1-any 17.7 KiB 0.00B/s 00:00 [################################] 100% maxmod-nds-1.0.11-2-any 24.6 KiB 24.0M/s 00:00 [################################] 100% nds-examples-20181226-1-any 810.8 KiB 2.81M/s 00:00 [################################] 100% devkitARM-r53-1-any 38.1 MiB 3.06M/s 00:12 [################################] 100% dstools-1.2.1-1-any 993.3 KiB 915K/s 00:01 [################################] 100% general-tools-1.0.3-1-any 21.1 KiB 20.6M/s 00:00 [################################] 100% grit-0.8.16-1-any 1023.1 KiB 1068K/s 00:01 [################################] 100% mmutil-1.8.7-1-any 66.6 KiB 3.42M/s 00:00 [################################] 100% ndstool-2.1.2-1-any 48.1 KiB 47.0M/s 00:00 [################################] 100% pkg-config-0.29.2-1-any 179.0 KiB 923K/s 00:00 [################################] 100% (16/16) 正在检查软件包完整性 [########################################] 100%((((16/16) 正在加载软件包文件 [#########################################] 100% (16/16) 正在检查文件冲突 [#########################################] 100% (16/16) 正在检查可用硬盘空间 [#########################################] 100% :: 正在处理软件包的变化... ( 1/16) 正在安装 devkitarm-rules [#########################################] 100% ( 2/16) 正在安装 devkitarm-crtls [#########################################] 100% ( 3/16) 正在安装 devkitARM [#########################################] 100% ( 4/16) 正在安装 libnds [#########################################] 100% ( 5/16) 正在安装 default-arm7 [#########################################] 100% ( 6/16) 正在安装 dswifi [#########################################] 100% ( 7/16) 正在安装 libfat-nds [#########################################] 100% ( 8/16) 正在安装 libfilesystem [#########################################] 100% ( 9/16) 正在安装 maxmod-nds [#########################################] 100% (10/16) 正在安装 nds-examples [#########################################] 100% (11/16) 正在安装 dstools [#########################################] 100% (12/16) 正在安装 general-tools [#########################################] 100% (13/16) 正在安装 grit [#########################################] 100% (14/16) 正在安装 mmutil [#########################################] 100% (15/16) 正在安装 ndstool [#########################################] 100% (16/16) 正在安装 pkg-config [#########################################] 100%
- 6. 更改权限
/opt/devkitpro
默认拥有者(owner)是root,需要更改为当前用户。
sudo chown -R $USER /opt/devkitpro
如果不更改权限,当编译程序时会报以下错误
sudo make Makefile:6: *** "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM". Stop.
hello world
安装完nds的开发包后,会默认安装一些examle,位于/opt/devkitpro/examples/nds
路径下,执行下面命令编译hello word的程序
$ cd /opt/devkitpro/examples/nds/hello_world $ make Nintendo DS rom tool 2.1.2 - Jun 13 2018 by Rafael Vuijk, Dave Murphy, Alexei Karpenko built ... hello_world.nds
编译完会在当前路径生成一个nds文件
ll total 1048 drwxr-xr-x 9 asan wheel 288 5 9 15:23 ./ drwxr-xr-x 18 asan wheel 576 5 9 10:05 ../ -rw-r--r-- 1 asan wheel 4906 5 9 01:48 Makefile drwxr-xr-x 5 asan wheel 160 5 9 10:04 build/ -rwxr-xr-x 1 asan wheel 362660 5 9 10:04 hello_world.elf* -rw-r--r-- 1 asan wheel 154112 5 9 15:23 hello_world.nds -rw-r--r-- 1 asan wheel 294 12 27 2018 hello_world.pnproj -rw-r--r-- 1 asan wheel 441 12 27 2018 hello_world.prj drwxr-xr-x 3 asan wheel 96 5 9 01:39 source/
你可以将该nds文件直接拷贝到nds机器或者3ds机器上运行,也可以通过模拟器运行
模拟器
nds的模拟器很多,这里推荐desmume,有mac版的,安装完后点击File->LoadROM
选择上面的nds文件即可,如果一切正常,会出现以下画面

恭喜你,完成了第一个nds游戏。
源码
这里贴下hello world的源码,下个章节会进行讲解
/*--------------------------------------------------------------------------------- $Id: main.cpp,v 1.13 2008-12-02 20:21:20 dovoto Exp $ Simple console print demo -- dovoto ---------------------------------------------------------------------------------*/ #include <nds.h> #include <stdio.h> volatile int frame = 0; //--------------------------------------------------------------------------------- void Vblank() { //--------------------------------------------------------------------------------- frame++; } //--------------------------------------------------------------------------------- int main(void) { //--------------------------------------------------------------------------------- touchPosition touchXY; irqSet(IRQ_VBLANK, Vblank); consoleDemoInit(); iprintf(" Hello DS dev'rs\n"); iprintf(" \x1b[32mwww.devkitpro.org\n"); iprintf(" \x1b[32;1mwww.drunkencoders.com\x1b[39m"); while(1) { swiWaitForVBlank(); scanKeys(); int keys = keysDown(); if (keys & KEY_START) break; touchRead(&touchXY); // print at using ansi escape sequence \x1b[line;columnH iprintf("\x1b[10;0HFrame = %d",frame); iprintf("\x1b[16;0HTouch x = %04X, %04X\n", touchXY.rawx, touchXY.px); iprintf("Touch y = %04X, %04X\n", touchXY.rawy, touchXY.py); } return 0; }
no comment untill now