ons(游戏引擎(ONScripter))原身为NScripter,经过linux的改进出现了ONScripter。 ONScripter是一个通用GalGame引擎,被很多同人乃至商业AVG游戏所采用,包括《月姫》《Fate》《ひぐらしのなく顷に》(寒蝉鸣泣之时)《ToHeart》《月は东?に日は西に》《银色》《朱-Aka-》等。其中使用NS(NScripter)的著名Gal《水仙》是很棒的代表作。
同时,在PSP、DS甚至PPC上也出现了各种ONS(ONScripter)的移植版本,其中的资源和脚本文件互通,是一款不错的移植用软件。例如荼荼丸用ONS移植的PSP版本《夜明前的琉璃色》,经过一定的修改之后也可以在低端WM手机上运行。现在已有GBK版本在持续更新中。
Onscripter(Open Source Nscripter )是一个用来解析NScripter脚本的第三方开源Galgame游戏引擎,可以在多种平台和设备上(Windows,Linux,FreeBSD,Android,iOS,Symbian……etc)上运行使用NScripter脚本编译的文字冒险类游戏。
1发展历史编辑
最初是一个叫Ogapee的家伙想在自己的Zaurus(SHARP公司推出的高性能PDA)上运行游戏,于是自己写了一个在Linux下运行的NScripter等效引擎,命名为ONScripter(Open-source NScripter),并不断完善之。由于开放源代码并且是用高度可移植的SDL库编写的,很多爱好者就把它移植到不同的平台上,并不断地把使用其他游戏引擎的AVG游戏移植到该平台上,使得ONScripter不断地发扬光大。
流传的中文版并无官方授权,乃由玩家自行改版产生。
使用ONScripter开发的游戏(3张)
2目的编辑
与NScripter为了编写新游戏不同,ONScripter设计当初就是为了在别的平台运行用NScripter制作的游戏。目前发展最成熟的是安卓和Linux平台,大多数游戏都能够顺利移植。目前,通用引擎只有Waffle(AVG32)和ONScripter已经成功移植,而ONScripter又是当中资料和工具比较多的,因此也会有人把本来不是NS引擎编写的游戏用NS重新编写并用ONS在别的平台上运行,例如《Fate / stay night》和《CLANNAD》等。
3应用案例编辑
商用作品(不完全列表)
オーガスト
(August)
月は东に日は西に ~Operation Sanctuary~
バイナリィ・ポット
Princess Holiday ~転がるりんご亭千夜一夜~
NekoNeko Soft(猫猫社) 银色
水色
同人作品(不完全列表)
07th Expansion
(龙骑士07)
寒蝉鸣泣之时系列
海猫鸣泣之时
TYPE-MOON 月姫
王宫魔法剧団 One Way Love~ミントちゃん物语
お竜 ひとかた
stage-nana 水仙~narcissu~1&2
移植作品(不完全列表)
Key
AIR \ Clannad \ Planetarian \ Little Busters!
KID
Memories Off 2nd/3rd \ ever17
minori
eden* \ ef-the first tale \ ef-the latter tale \ 天使的日曜日
AKABEiSOFT2
车轮之国-向日葵的少女 \ 车轮之国-悠久的少年少女
猫猫社
弹珠汽水 \ Scarlett
八月社
秽翼的尤斯蒂娅 \ 夜明前的琉璃色
Sphere
缘之空 \ 悠之空
PULLTOP
遥仰凰华
Lass
3days
TYPE-MOON
Fate stay Night
4技术编辑
与Nscripter的区别
由于NScripter上手容易,运行速度快,扩充性也不错,广泛受到同人游戏制作群的欢迎。引擎代码本身虽然为非公开,但是在非商业用途下是属于免费软件。
NScripter本身只支持Windows,不过兼容度极高非官方的ONScripter可支持跨平台的需求。
ONScripter兼容大多数NS指令,但两者的API及指令集仍然有区别,少数命令有不兼容的现象。
开发者可利用所谓的中间语言来撰写游戏的代码。
5开发、分支与维护编辑
运行环境
Onscripter能在以下平台运行:
Android (1.6 or later)
Zaurus (SL-C700, etc.)
Linux
MacOSX
Windows
Windows Mobile
Windows CE
PSP
iOS 4或以上
NetWalker
Brain (WindowsCE 6.0)
NetBSD, DragonFly BSD
OS2/Warp
Playstation3
Wii
FreeBSD
Dreamcast
……
开发环境
以下为必须:
●C++ 环境:
○g++ 4.4.4 或更高(Linux)
○Visual Studio 2008 C++ 或更高(Windows)
●Unicode集的 TTF 字体(文件名default.ttf)
●libjpeg-6b (Independent JPEG Group)
●bzip2-1.0.5 (bzip2)
●SDL-1.2.14, SDL_image-1.2.10, SDL_mixer-1.2.8, SDL_ttf-2.0.9 (Simple Directmedia Layer)
●FreeType 2.3.11 (the Free Type Project)
以下为推荐项目,可根据自己的实际情况酌情考虑:
●Mpeg Audio Decoder
●avifile Decoder
基于NScripter产生的其它分支
ONScripter-EN:
ONScripter-EN是一个主要由英文社区维护的分支,目的是为了更简单方便地引进适合英文社区的引擎增强。 举例来说,ONScripter-EN支持游戏内切换英文-日文,而在ONScripter中,支持的游戏语言在编译时就已经确定了。
这个引擎被用于很多的英化游戏中,比如英文版《水仙》和《月姬》等。
Proportional ONScripter:
PONScripter ("Proportional-OnScripter"的简称) 是ONScripter-EN的一个分支。侧重于为西方语言化翻译作品提供一个简单的移植工具。PONScripter在ONScripter-EN代码基础上做出了大量的改动,并故意不向后兼容。
PONScripter 最初由Peter "Haeleth" Jolly维护。从2009年七月起主要由寒蝉鸣泣之时英化小组的Mion of Sonozaki Futago-tachi维护。
使用PONScripter移植的游戏有:英文版《沙耶之歌》、《水仙2》。
ONScripter-GBK:
ONScripter-GBK版最早出现在PSP上,其后又出现在魅族M8上(由WinCE版修改而来),而Android版的ONScripter-GBK最早由nbnb001修改ONScripter-JIS版而来,而后一直是natdon在进行维护。相比起原版而言,GBK版本的ONScripter支持新的脚本加密格式(nt2/nt3),以及新的命令(控制震动等)。Android上最新版的ONScripter-GBK被整合进了面包工坊的MiNE模拟器中。
维护
Onscripter-jis
Ogapee
Onscripter-gbk
natdon及面包工坊
Onscripter-en
Uncle Mion等
6优缺点编辑
优点
1.SDL & ONScripter: 可移植性。
ONScripter 最大的优点就是其高度可移植性,这不仅是由于它基于移植性极佳的 SDL,更是因为它自身就是以高度可移植性为目标编写的。
ONScripter 的作者原先使用的设备是 Sharp 的 Zaurus. 这台跑 Linux 的设备性能非常有限,还是很佩服作者下决心去做这件事情的。 假如它只能跑在 Zaurus 上的话,那么随着 Zaurus 的离去,它也会逐渐化为尘土。 但是开源和可移植性带给了它更长久的生命力。
ONScripter 选择 SDL 为其基础是一个很好的决策——SDL 大概是目前能跑的设备最多的图像引擎之一。 ONScripter 使用的其他库基本也都是移植性比较好的库,对比用了 boost 的 rlvm,移植了后者的设备就少了很多。
开源的好处就是大家都可以贡献自己的力量。 在大家的支持下,ONScripter 支持的设备越来越多。 国内的设备一但移植上了SDL,接下来最常见的被移植的游戏就是 opal(开源版仙剑,同样基于 SDL) 和 ONScripter 了。 这也是为什么十年过去了,ONScripter 仍然被我们所使用的原因。
对于移植者来说,大家选择 ONScripter 最大的理由就是它实在是太能跨平台了。 纵使它有这样那样的缺点,很多时候也没有更好的选择。 对比 ONScripter 一次写成造福万设,能做到这一点的其他引擎实在是找不到了。
2.NScripter: 完善的基本功能。
ONScripter 的另一大成功之处在于,它的目的在于模拟 NScripter。
高桥的 NScripter 在当年大受欢迎, 虽然现在看来功能还是欠缺不少,但不得不承认, NScripter 的确是一个合格的 Galgame 引擎。 它具备实现一个 Galgame 所需要的全部基本功能的能力。
并且,假如你依照它给的框架走,实现起来也非常精炼。
大量原版 NScripter 引擎的游戏被移植也使得 ONScripter 大受欢迎,同时也焕发了那些老游戏以及 NScripter 自身的第二生命。
缺点
1.性能。
性能问题一方面是 SDL 的问题,一方面是 ONScripter 自己编写的问题。
SDL 的主要问题在于最初移植过去的时候一般是基于软解的。 当然该来的总是会来的,硬件加速还是会来的。
ONScripter 的代码里的确有些写的很“素”的地方。 平芜泫的评价一语中的:
“该说不愧是日本人的思维么?在指定环境下面能够非常好地工作,不是这个环境就糟糕了……”
顺提,该贴里的 bug 是 Arch 里的 SDL_ttf 的问题,其实和 ONScripter 关系不大,现已修复。
我倒不觉得性能是极度重要的问题。当然它确实重要。
一方面,只要总的框架没有大问题,先保证正确再优化也不为过,毕竟过早优化是万恶之源,开源对这种问题也是一种好的解决方案。
另一方面,ONScripter 很大的瓶颈还是在 IO 和显示上。 对于那些 label 用链表 lookup 之类的,倒也真不是什么性能问题。
2.NScripter 的表达能力。
我想这部分才是我对 ONScripter 意见最大的部分——尽管这部分应该归到 NScripter 的问题上。
平芜泫的评价在这里仍然适用: 如果你照着高桥佬的想法走,NScripter 是非常爽快的; 但如果不是这样的话,你就会觉得 NScripter 处处捆人手脚。
不幸的是,移植的目的是模仿另一款游戏重新实现它,想完全照着 NScripter 的思路走往往没那么容易。
高桥是很清楚一款 Galgame 引擎需要什么的,但是除此之外的事情他就懒得管了。NScripter 的语言设计明显是混乱的。命令式的风格,一些计算上的东西又明显是汇编的样式,很多函数明显是后头擦屁股添上的,最终发现这事没法弄了又开始支持 lua……
总之,NScripter 自己从语言角度而言还是很不灵活的。 说实在的,很多事情不是不能实现,而是实现太麻烦。
3.动画效果实现繁琐。
NScripter 的动画基本要靠自己写循环控制。不讲究时间精确性可以用 for 循环,追求时间卡准可以 while(即 if-goto) 循环靠 timer 精确控制,当然可以抽象到自定义过程中,总归还是麻烦的很。更别提缩放和旋转了。
要是实现全屏雨点效果呢?那就不得不依赖插件,而那是平台相关的,移植性很差。
顺提,msp 的移动效率不咋样。
NScripter 语言的混乱之处还在于,它竟然有lsp、lsp2、drawsp、blt等不同体系的功能去做类似的事情。
并行动画实现困难。
怎样让两个移动共同实现?你不得不在一个循环中同时做两个移动。 如果你已经把移动抽象到一个过程中了呢? 如果是全屏震动的同时移动呢? 如果是移动同时缩放呢? 上面这些 Fate 里都不少,而且我希望抽象到一个过程中。我当时很头疼。
对比 Kirikiri2 里解析脚本默认不阻塞动画执行,这边表达起来的确费劲的多。
但还好,上面起码还算是好表达的。如果想表达类似秽翼序章窗外的雨滴落下,或者魔法使之夜里人物对话时背景缓缓移动的效果呢?
NScripter 对话过程中同步画面移动的方法只有利用多帧图片动画,这得做多少张?对魔夜这种大背景图缓慢移动的,恐怕图片都载入不进去。
4.画面再加工能力匮乏。
很多引擎会对图片加效果,比如通过色调和光线变化可以将一张图重复利用在多个场景。 也有图片直接翻转和旋转使用的。
NScripter 倒是支持黑白和反色。如果不需要考虑统一处理,也可以做旋转。 除此之外就很有限了。
当然总可以靠图像处理软件预先处理,然后替换文件名(fate 移植时是这么做的)。只是,麻烦。
5.声音部分的控制能力简单。
一些其他引擎的游戏,有时会将一段音乐分为两段, 一段是 head 只播放一次,一段是 loop 只循环这部分。 有些引擎干脆就把两段合并为一个文件,设定好 loop 的时间段即可。
对语音有时需要更精确的控制时间,比如语音结束的时候触发 XX 效果。
NScripter 中很难实现这些部分。最大的难点还是在“如果当前正在对话,将无法控制其他部分”。
6.语言表达能力缺乏。
NScripter 从语言特性上和 php 有部分地方挺有共同之处的, 比如它们在自己的领域表现都不错,但是语言设计的都挺不考量的。
NScripter 里真正有的是过程而非函数,注意它定义过程用的是 defsub. 比如说,对于类似$2 = str(int($1) + int($0)) 这种东西,你就不得不一堆 atoi/itoa 过去,还要产生一堆临时变量,简洁度大打折扣。
NScripter 最缺乏的是临时变量。 NScripter 里的所有变量都是全局相关的。 假如你需要实现很多过程的时候,你就不得不担心变量分配问题了。这实际上是很恶心的。
NScripter 里没有自定义结构。你需要自己设计地址分配,自己设计接口。
NScripter 缺乏一些反射功能(也许用这个词不妥),比如,某层加载的图片文件名是什么?在什么位置?是否真的加载了文件(而不是加载但不显示)? 如果你需要,那就只好自己保存下来——用自定义的结构。
拿 NScripter 计算是一件痛苦的事情。
---------------------------------------------------------------------------------------------------------------来自百度百科
简单,摆渡 瑷欲合 ,剩下的就看你的了,告诉你吧想办法说好话,
直到她答应你可以出来啦,那就成了百分之八十了,见了之后就看你的了
哈哈,一般都能成呢!
你懂得,ons指One Night Sex