1. 개요
온스크립터(ONScripter)는 다카하시 나오키(高橋直樹)가 개발한 엔스크립터(NScripter)의 비공식 호환 게임 엔진이다. ogapee가 개발하여 Studio OGA(사이트는 여기)에서 소스 코드를 배포하고 있으며, Android와 Zaurus는 바이너리 파일도 제공하고 있다. ogapee의 설명에 따르면 NScripter의 명령어를 온스크립터의 독자적인 방식으로 해석하여 작동한다고 한다. 최신 버전은 2019년 5월 27일 판으로, 동영상 재생 부분을 개선했다. 개발일지는 여기에서 확인할 수 있다.오늘날 웹상에서는 호환 엔진에 불과한 ONScripter가 NScripter보다 훨씬 잘 알려져 있는데, 그 이유는 NScripter가 Windows만을 지원하는 데 반해 ONScripter는 Android나 iOS와 같은 다양한 플랫폼을 지원하는 범용성을 가졌기 때문이다. 이로 인하여 Windows에서 실행할 수 있는 NScripter 게임을, 거의 수정 없이 바로 Android와 iOS에서 실행할 수 있는 특장점을 가진다.
2. 비공식 호환 엔진
온스크립터[1]는 기본적으로 NScripter[2] 호환용으로 제작되었으므로 명령어 또한 NScripter의 것을 공유한다. 그러나 NScripter의 모든 명령어를 지원하는 것은 아니며, 모든 명령어가 NScripter에서 구현되는 것과 같이 동일하게 작동하는 것을 보증하지 않는다. 이 부분은 특히 음악과 동영상 재생에서 차이가 크다.NScripter는 또한 Windows 동적 링크 라이브러리 즉, DLL을 통한 기능 확장을 제공하지만, ONScripter에서는 이에 대한 호환성을 전혀 제공하지 않는다. 다만 dll.txt이라는 임시변통용 수단을 통하여 dll 실행 시 반환하는 값에 대한 지정만 가능할 뿐이다. 이는 NScripter가 전적으로 Windows에서만 작동하는 것으로 설계되었는 데 반하여 ONScripter는 더 다양한 플랫폼에서 작동되도록 고안되었으므로 Windows에서만 제대로 작동될 수 있는 DLL에 대한 호환성을 제공하는 것이 곤란하기 때문이다.
2.1. 구조와 특징
기본적으로 구조는 NScripter를 똑같이 모방하였기 때문에 이 부분에 대한 내용은 사실 NScripter에 대한 설명과 동일하다. NScripter는 스크립트 언어로 엔스크립트(NScript)를 사용하며, 온스크립터 역시 이와 같다.NScript 언어의 문법은 BASIC을 닮았기 때문에 BASIC을 이전에 배웠다면 금방 숙달 가능하다. 이 NScript는 인터프리터인 NScripter(혹은 그 호환 엔진인 ONScripter)에 의해서 순차적으로 한 줄씩 해석되며 구현된다. NScript의 작성은 메모장과 같은 텍스트 편집기로 가능하고, 작성된 텍스트 파일의 문자 인코딩은 반드시 사전에 컴파일된 인터프리터의 인코딩과 동일해야 한다. 그렇지 않으면 인터프리터가 스크립트를 제대로 읽지 못하여 문자 깨짐이 발생한다. 즉, 인터프리터가 Shift_JIS 932로 인코딩되었다면 텍스트 파일의 문자 인코딩 역시 Shift_JIS 932이어야 한다.
NScript의 주된 특징은 바로 문자열의 출력이 단지 전각문자(全角文字)를 기술하는 것으로 해결된다는 것이다. 이를테면, 프로그램상에 Hello,World!를 출력하고 싶다면 아래와 같이 텍스트 파일을 작성하면 된다.
*define game *start Hello,World! |
NScript에서는 특정한 지시가 없는 이상, 모든 전각문자가 화면상에 출력해야 할 문자열로 간주된다. 반면에 반각문자(半角文者)는 명령어로 간주된다. 이러한 특징 때문에 NScript는 대용량의 텍스트가 포함되는 특정 어드벤처 장르 게임 제작에 특화되어 있다. 그러나 이러한 특징으로 인해 같은 줄에서 출력되는 문자열의 크기를 서로 다르게 하는 것이 매우 까다롭다. 이를테면, 아래와 같이 화면상에 문자열을 출력하는 것은 고급 기술을 요구한다.
이 바보 녀석아, 대체 뭐 하는 거야! |
한편, 반각문자는 특정한 지시 없이는 항상 명령어로 처리되므로, 대개 반각 문자로 쓰는 로마자 알파벳은 문자열로 출력하기 위해서 일일이 전각으로 바꿔주어야 한다. 이를테면, 'Sindo ricoh'는 'Sindo ricoh'로 표기하여야 한다. 공백 역시 전각 문자인 것을 알 수 있다. 단, 제한적으로 english 명령어를 통해서 문자열 출력을 반각으로 하는 것이 가능하다.
NScript로 작성된 텍스트 파일은 반드시 0.txt로 저장되어 인터프리터와 같은 경로에 존재하여야 인터프리터가 불러올 수 있다. 만약 NScript로 작성된 스크립트를 여러 파일로 나누어 관리하고자 한다면 추가적으로 0.txt ~ 99.txt 사이의 이름이 가능하다. 단, 0.txt는 반드시 존재하여야 하며 모든 텍스트 파일의 이름은 서로 연속되어야 한다. 즉 5.txt가 존재한다면 4.txt, 3.txt, 2.txt, 1.txt도 존재해야 한다.
평문으로 된 0.txt ~ 99.txt는 개발자인 다카하시 나오키가 제공하는 암호화 도구 nscr.exe를 통하여 암호화할 수 있다. 이렇게 암호화된 파일은 NScript.dat의 이름으로 저장된다. 또, NScript.dat 자체가 0.txt ~ 99.txt를 대신하므로 NScript.dat가 존재한다면 0.txt 등을 인터프리터와 같은 경로에 위치시켜서는 안 된다.
nscr.exe를 통한 암호화 방식은 연식이 몹시 오래되어서 웹상에서 돌아다니는 전용 복호화 도구를 통해서 간단히 파훼된다. NScript를 통한 게임 개발과 보안을 모두 고려한다면 독자적인 전용 문자 인코딩을 사용하여 스크립트 내용을 볼 수 없게 만드는 것이 현재까지는 제일 유효한 방법이다. 이 방식도 Hex 값 분석을 통한 문자 특정으로 파훼될 수 있으나, nscr.exe에 의한 암호화보다는 훨씬 안전하고 강력하다.
이하부터는 ONScripter 고유의 특징을 기술한다.
NScripter는 스크립트 작성 시 엄격한 문법 준수를 요구하기 때문에 스크립트상에 약간의 문제가 있더라도 바로 인터프리터를 종료시키지만, ONScripter는 스크립트 읽기에 큰 문제가 존재하지 않는 이상 종료시키지 않을 뿐더러 잘못 쓰인 명령어 구문도 제대로 읽어내는 경우가 있다. ONScripter가 이렇게 스크립트 문법 준수에 관용적인 이유는 기본적으로 호환 엔진이기 때문에, NScripter의 구현하는 모든 것을 모방할 수 없기 때문이다. 이를테면 NScripter는 지원하지만 ONScripter는 지원하지 못하는 Windows 기능 관련 명령어가 그러하다. 이러한 명령어는 ONScripter에서 모두 무시되고 실행되지 않는다.
또, ONScripter를 사용할 때는 반드시 인터프리터가 위치한 경로에 default.ttf가 존재해야 하며, ONScripter는 오로지 해당 default.ttf의 단일 글꼴을 통해서 문자열을 표현한다. 즉 글꼴은 하나밖에 사용할 수 없다. NScripter가 실시간으로 Windows상에 설치된 여러 글꼴을 불러와 문자열을 표현할 수 있는 것과 비교할 때 큰 단점이다. NScripter처럼 운영체제에 설치되지 않은 글꼴을 따로 DLL로 불러와 사용하는 것도 불가능하다.
세번째로, ONScripter는 NScripter와는 다른 독자적인 세이브 파일을 생성한다. 즉 ONScripter의 세이브 파일은 NScripter와는 호환성이 없다. 그러나 NScripter에서 생성된 세이브 파일을 ONScripter가 읽는 것은 가능하다.
마지막으로, ONScripter의 가장 큰 강점이자 특징은 Windows 이외에 Android, iOS 같은 운영체제를 지원한다는 것이다. 그러므로 Windows의 ONScripter 프로그램에서 어떤 스크립트가 제대로 작동한다면, 당연히 Android와 iOS에서도 제대로 작동한다. 개발자인 ogapee가 ONScripter의 소스 코드를 공개하고 있으므로, 충분한 실력과 의지가 있다면 코드를 컴파일하여 다양한 운영체제에서 사용할 수 있다.
ogapee는 개인 홈페이지에 Windows에서 ONScripter를 컴파일하는 방법을 기술해놓았고, Android와 Zaurus에 대해서는 개발자가 직접 컴파일한 바이너리 파일을 제공하여 바로 접근할 수 있다. 단, 개발자의 Zaurus에 대한 바이너리 파일 제공은 2011년에 종료되었다. Android에 대한 제공은 2019년 5월 현재 계속 지속되고 있다. 이는 구글 플레이의 여기에서 내려받을 수 있다.
한편, ONScripter가 다양한 운영체제를 지원한다는 점 때문에 ONScripter의 활용은 게임 개발보다는 주로 Windows용 게임을 Android나 iOS로 이식하는 데에 초점이 맞추어져 왔다. NScripter 게임은 명령어를 공유하므로 스크립트 수정 없이, 혹은 극히 약간의 스크립트 수정으로 쉽게 이식 가능하다. 월희, 쓰르라미 울 적에 등 게임이 대표적이다.
2.2. 라이선스
여기에서 중요한 사실이 있다. ONScripter는 일반적으로 NScripter 게임을 다른 플랫폼에 이식하는 데 더 많이 쓰이지만[3] 일단 어쨌든 게임 엔진이라는 것이다.NScripter로 상용(商用) 게임을 만들기 위해서는 반드시 라이선스료를 지불해야 하는데, 호환 엔진인 ONScripter를 쓸 때는 그럴 필요가 없다. 공식 배포 사이트에 따르면 사용 목적을 권리자에 알리거나 영리적 목적으로 사용할 때 라이선스료를 지불할 의무는 없다. 이 때문에 라이선스료 지불을 피하기 위해서 구글 플레이에서 NScripter 기반이 아닌 ONScripter 기반으로 제작된 상용 게임을 찾아볼 수 있다.
2.3. 다양한 지원 플랫폼
ONScripter는 많은 플랫폼을 지원하는 것이 가장 큰 특징으로, 개발자는 다음과 같은 운영체제를 지원한다고 소개하고 있다:지원하는 운영체제
꼭 알고 넘어가야 하는 점은 Android, Zaurus를 제외하고는(그것도 일본어판 한정) 모두 배포된 소스 코드를 가지고 다른 개발자가 컴파일한 것이라는 것이다.[4]
게다가 운영 체제별, 버전별, 언어별, 지원하는 명령어 등등 수많은 변수가 있기 때문에 ONScripter마다 스크립트를 미묘한 차이로 다르게 읽는다. 또한 머신 성능과 머신 해상도 문제도 있어서 한 스크립트를 여러 조건과 환경에서 일관되게 읽기란 꽤나 어려운 일이다.[5]
그러나 이렇게 다양한 운영체제를 지원하는 점이 오히려 인터넷 통신망에서 ONScripter가 유명해지게 일조하였고[6] 지금도 그 생명력을 이어나가는 데 큰 부분을 차지하고 있다.
3. 지원하는 게임
ONScripter는 NScripter 호환 엔진으로 엔스크립터 엔진 게임만 지원할 것이라고 생각되겠지만 그렇지 않다. 다른 엔진으로 제작된 게임의 스크립트를 펄(Perl)을 이용하여 ONScripter가 읽을 수 있는 스크립트로 변환하는 과정을 통해 지원하게 하는 것이 가능하다. 이러한 작업을 컨버팅이라고 하고, 컨버팅을 자동적으로 수행해주는 프로그램은 컨버터라고 한다. 다 되는 것은 아니다. 괴악한 게임 엔진을 사용하는 것이라면 컨버팅하기 힘들거나 불가능하다. 물론 펄 말고 다른 언어로도 컨버팅이 가능하다. C언어로 컨버팅한 게임도 있고 심지어 배치파일로도 가능하다.아래 항목의 게임만 지원하는 것은 아니며 더 많은 게임이 있다.
3.1. 컨버터가 제작된 게임
- 가월십야
- 가을 하늘에 춤추는 컨페티
- 가족계획
- 갑작스레 널 사랑하게 됐어
- 귀부 시리즈
- 그녀×그녀×그녀
- 그녀와 나와 연인과
- 그리자이아의 과실
- 그리자이아의 미궁
- 그리자이아의 낙원
- 기쁘다 구주 오셨네
- 너무 인기 있어서 아수라장인 나
- 너의 목소리가 들려
- 노을빛으로 물드는 언덕
- 달에 다가가는 소녀의 작법
- 달은 동쪽으로 해는 서쪽으로
- 동거 러브러블
- 다이아믹 데이즈
- 다카포 시리즈
- 대도서관의 양치기
- 대도서관의 양치기 Dreaming Sheep
- 대도서관의 양치기 방과 후 꼬리데이즈
- 동급생 2
- 듀얼리스트 X 엔게이지
- 라무네
- 루이는 토모를 부른다
- 리틀 버스터즈!
- 러브러블
- 레미니센스
- 레미니센스 Recollect
- 마가렛 스피어
- 마법 전사 페어리 메이즈
- 매즙
- 미소녀 만화경
- 미즈이로
- 변함없는 별하늘
- 별하늘에 걸린 다리
- 브라반
- 비치는 햇빛의 노스탤지카
- 사나라라
- 사랑하는 소녀와 수호의 방패
- 사야의 노래
- 새벽녘보다 유리색인
- 새벽녘보다 유리색인 Moonlight Cradle
- 센스 오프
- 소녀가 만든 사랑의 캔버스 ~두 사람의 갤러리~
- 소녀는 언니를 사랑한다
- 소녀이론과 그 주변
- 수평선까지 몇 마일?
- 스이카
- 스즈노네 세븐!
- 스피파라
- 시로쿠마 벨스타즈♪
- 새벽의 호위
- 신성하기에 침범할 수 없는
- 신부 찾기가 너무 순조로워 위험하다
- 쓰르라미 울 적에, 문제편/해답편/레이
- 아가씨는 기분나나메
- 아득히 우러러본 아름다운
- 아마츠미소라니!
- 얀데레 ~정말 좋아해 그러니까 □하고 싶어~
- 여동생 덕분에 너무 인기있어 위험하다
- 여름 눈 ~Summer snow~
- 여름 하늘의 페르세우스
- 연검소녀
- 연검소녀 ~재연~
- 연애 0킬로미터
- 예익의 유스티아
- 왈큐레 로만체 -소녀기사 이야기-
- 왈큐레 로만체 -More & More-
- 월희
- 유격경함 파트베셀
- 은색
- 이 넓은 하늘에, 날개를 펼치고
- 이 넓은 하늘에, 날개를 펼치고 Flight Diary
- 이 푸른 하늘에 약속을
- 지금 당장 오빠에게 여동생이라고 말하고 싶어!
- 차륜의 나라, 해바라기의 소녀
- 참마대성 데몬베인
- 첫사랑 예보
- 첫사랑 전선
- 축제의 캄파넬라!
- 코스모스의 하늘에
- 코코로@평션!
- 콘체르트 노트
- 크로스채널
- 킬러 퀸
- 투하트2
- 폴트!!
- 푸른 눈물
- 푸른 하늘이 보이는 언덕
- 풍차 마을의 멜로디
- 프리즘◇리콜렉션
- 프리프레
- 프리프레2
- 프린세스 러버!
- 프라이미니스타
- 하나이로 햅타그램
- 하루카나소라
- 학☆왕 - THE ROYAL SEVEN STARS -
- 해바라기의 교회와 긴 여름방학
- 호치키스
- anise
- CANVAS ~세피아 색의 모티브~
- CLANNAD[7]
- ef - a fairy tale of the two
- Fate/stay night Realta Nua[8]
- G선상의 마왕
- Golden Marriage
- HHG 女神の終焉
- Kanon
- LEAVEs
- Like a Butler
- MeltyMoment
- narcissu, narcissu SIDE 2nd
- narcissu, 3rd ~Die Dritte Welt~
- Princess Frontier
- Princess Style
- SWAN SONG
- Wind -a breath of heart-
- Wind -a breath of heart- Re-gratitude
- XXX인 그녀가 시골생활을 만끽하는 비밀의 방법
- 世界と世界の真ん中で
- 空飛ぶ羊と真夏の花 -When girls wish upon a star.-
- 桜舞う乙女のロンド
- 桜舞う乙女のロンド ~あなたと見る冬桜~
- 恋する夏のラストリゾート
- 恋する姉妹の六重奏
- キスと魔王と紅茶
- バカ燃えハートに愛をこめて!
- イノセントガール ~Innocent Girl~
- リベリオンズ Secret Game 2nd Stage
- あなたの事を好きと言わせて
3.2. ONScripter 기반 게임
- NOeSIS -거짓말했던 기억의 이야기- (일본어)
- NOeSIS -우화- (일본어)
- 너는 키메라R (일본어)
- 개구리와 검귀 3 (일본어)
- 아사루와 스파이 (일본어)
- 누군가가 나에게 반해 있다 (일본어)
4. 관련 사이트
이 문서에서는 ONScripter 개발이나 게임 포팅(컨버팅)을 위한 정보를 제공하는 사이트에 대해서 서술한다.4.1. 레퍼런스
(일본어) http://senzogawa.s90.xrea.com/reference/NScrAPI.html(영어) http://unclemion.com/onscripter/api/NScrAPI.html
5. 기타
한국에도 ONScripter와 비슷한 바실리어트라는 개발 도구가 있다. 무료이므로 게임을 개발해보겠다는 한국인은인터넷 비주얼 노블인 UC노벨도 생각해볼 수 있다. 사용자가 직접 만들고 배포할 수 있는 인터렉티브 멀티미디어 콘텐츠를 만드는 플랫폼 및 사이트로, 비주얼 노블 같은 것을 GUI기반의 제작 도구를 통해 쉽고 간단하고 빠르게 만들 수 있는것이 장점이나 빨리 만들 수 있는 만큼 장난 반으로 올라오는 컨텐츠가 굉장히 많으며 후자가 대다수라는 것이 엄청난 단점이다.
그 외에 VNAP, 네코노벨등이 있으며 렌파이 같은 것도 좋다.
[1] 사실 정식 발음은 오엔스크립터(オエヌスクリプター)이나 아무도 언급하지 않는다. 앞의 '오'는 개발자 이름인 ogapee의 o를 따온 것이다. 즉 ogapee's NScripter이 된다.[2] Naoki's Scripter, 즉 나오키의 스크립터이다.[3] 그리고 그중 과반수는, 아니 99%는 미연시나 다름없다.[4] 즉, 온스크립터마다 지원하는 기능, 성능이 다르다.[5] 특히 Windows CE에서는… 더 이상의 자세한 설명은 생략한다.[6] 사실 Android와 iOS의 덕을 많이 받고 있다[7] 한글패치가 나오기 전의 물건이라 첫부분(나기사와의 만남) 부분만 제대로 한글패치 돼있고 나머지는 모두 번역기를 돌려놓았다(...)[8] 단 엑스트라 메뉴의 해금이 이벤트 회수율이 100%가 되었을때. 즉, 세개의 루트 클리어 이후 열리는 진앤딩과 나머지 배드엔딩까지 다 봐야지 해금이 된다.