文章摘要
Carl Enlund开发了一款可在任天堂DS上直接编写和运行游戏的脚本化3D游戏引擎。该引擎使用C语言编写,体积仅约100KB,支持60帧实时渲染。下屏提供触控代码编辑器,上屏显示3D画面,并内置了一个3D乒乓球游戏作为示例脚本。
文章总结
DS可编程游戏引擎与代码编辑器
作者:Carl Enlund
核心亮点
开发者基于任天堂DS掌机打造了一款可编程3D游戏引擎,支持直接在掌机上编写并运行游戏。该引擎采用C语言开发,基于libnds库,最终编译生成的.nds ROM文件仅约100KB,并能实现60帧/秒的流畅运行。其特色在于:下屏配备触控代码编辑器,上屏实时渲染3D画面,默认自带可玩的3D乒乓球游戏脚本。
核心功能
- 硬件加速3D渲染:利用DS的3D硬件绘制彩色立方体,支持模型位置(X,Y,Z)、旋转角度和颜色设置,摄像机可自由控制
- 触控代码编辑器:包含指令选择器、数字键盘、变量选择器(A-Z)和运行控制按钮,支持6个脚本槽位
- 轻量级脚本语言:每帧执行一行脚本(约60行/秒),提供26个变量和9个只读寄存器(用于输入检测和系统状态)
技术细节
- 开发工具链:devkitPro工具集 + libnds库
- 代码规模:约3100行C代码(main.c)
- 性能表现:在2006年发布的DS Lite上稳定60FPS
- 限制条件:
- 单脚本最多128行
- 同时显示16个3D模型(基础立方体)
- 仅支持数值运算(浮点数),无字符串变量
使用示例
内置的3D乒乓球游戏脚本展示了核心功能:
basic
MODEL 0 ; 创建球体
MODEL 1 ; 创建球拍
CAM_POS 0 8 18 ; 设置摄像机
LOOP
ADD A B ; 移动球体
IF_GT A 10 ; 碰撞检测
MULTIPLY B -1 ; 速度反转
END_IF
POSITION 0 A 0 0 ; 更新位置
SLEEP 0.016 ; 维持60FPS
END_LOOP
获取方式
(注:实际运行需要DS烧录卡支持,原文中部分技术实现细节和代码示例已作简化处理)
评论总结
总结评论内容:
正面评价:
- 对项目表示兴奋,认为可以在改装设备上使用 "Are you kidding me? This is awesome!"(你在开玩笑吗?这太棒了!) "I'm loading this onto my DSi XL right now."(我正把这个装到我的DSi XL上)
技术性质疑:
- 认为脚本语言可能比C语言更繁琐 "The scripting language looks like it would be more cumbersome to use than C."(这个脚本语言看起来比C语言更难用)
设备改装兴趣:
- 对任天堂设备的可破解性表示关注 "Are {,3}DSs easily hackable?"(3DS容易破解吗?) "I wish Nintendo hardware was more hackable."(希望任天堂硬件更容易破解)
设备赞誉:
- 认为NDS是最佳便携游戏系统 "The Nintendo DS is probably the greatest portable gaming system to ever exist."(任天堂DS可能是有史以来最棒的便携游戏系统)
开发应用:
- 开发者表示项目符合当前开发需求 "this is right up my alley with my current projects"(这正符合我当前的项目) "making little demo apps with libnds"(正在用libnds制作小演示程序)