나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-06-29 04:22:45

온스크립터

ONScripter
파일:external/onscripter.sourceforge.jp/ons.png
1. 개요2. 비공식 호환 엔진
2.1. 구조와 특징2.2. 라이선스2.3. 다양한 지원 플랫폼
3. 지원하는 게임
3.1. 컨버터가 제작된 게임3.2. ONScripter 기반 게임
4. 관련 사이트
4.1. 레퍼런스
5. 기타

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. 컨버터가 제작된 게임

3.2. ONScripter 기반 게임

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] 사실 AndroidiOS의 덕을 많이 받고 있다[7] 한글패치가 나오기 전의 물건이라 첫부분(나기사와의 만남) 부분만 제대로 한글패치 돼있고 나머지는 모두 번역기를 돌려놓았다(...)[8] 단 엑스트라 메뉴의 해금이 이벤트 회수율이 100%가 되었을때. 즉, 세개의 루트 클리어 이후 열리는 진앤딩과 나머지 배드엔딩까지 다 봐야지 해금이 된다.

분류