방금 다른 글에서 게임 실행시 무반응이여서, nwjs 를 교체해 고쳤다는 말이 있기도 하고,
게임의 nwjs를 업그레이드 (게임 성능/보안/등 향상을 위한) 해서 올리는 자료 글들이 종종 보이는 거 같습니다.
그래서 만약 개개인이 어렵지 않게 고치거나 업그레이드 할 수 있는 거면,
별도로 문제 제시 게시글을 작성하기 전이나 직접 업그레이드 할 시 시도해 볼 수 있지 않을까 해서 텍스트 작성중입니다.
아래 작성된 텍스트에 의견 부탁드립니다.
좋은 가이드가 완성 되는 시, '정보' 탭으로 게시글을 올리도록 하겠습니다.
nw.js 업그레이드 및 문제해결
여기 자료들 받아 게임 하시거나 다른 RPG Maker 게임을 하시다보면 nw.js 실행 파일을 자주 보실겁니다.
nw.js 은 알만툴 런타임(RPG Maker Runtime) 입니다.
nw.js 는 RPG Maker MV 와 MZ 가 사용합니다.
nw.js를 업그레이드 하는 주된 이유는 최신 Chromium 및 Node.js 버전을 반영하여
퍼포먼스(속도) 향상, 보안 취약점 해결, 그리고 새로운 웹 API 및 ES 기능 지원을 통해 애플리케이션의 안정성과 기능성을 확보하기 위함입니다.
최신 버전은 더 나은 렌더링 성능과 안정성을 제공합니다
이 가이드는 얘초에 실행이 불가하던 게임에 대한 문제해결이 아니라,
잘 되던 게임이 nw.js와 윈도우 시스템 호환 문제를 겪을 시의 문제해결 대처 가이드이며, 동시에 nw.js 버전 바꾸기 가이드이기도 합니다.
알만툴이 안 깔려있는 일반 유저가 따라할 수 있기 위해 작성 되었습니다.
nw.js 업그레이드로 문제해결이 더 많겠지만, 모든 상위 nw.js 버전이 전 버전에 호환이 된다는 보장은 없습니다.
문제 #1:
nw.js 버전 불일치로 게임 실행시 무반응일 때가 있습니다.
문제 #2:
게임 실행 후 타이틀까진 문제 없는데, '게임 실행' 누르면 꺼져버립니다.
오래 된 버전의 runtime 사용 시 발생할 수 있습니다.
참고#1 - 정의:
nw.js 특정 하나의 파일명이 아니라, 알만툴 런타임인 nw.js 그 자체 관련된 전반적인 것들
RPGMV RPG Maker MV
RPGMZ RPG Maker MZ
참고#2 - RPGMV 파일 구조:
my-app/
├─ credits.html ← 게임/프로그램 크레딧을 표시하는 HTML 파일
├─ d3dcompiler_47.dll ← Direct3D 셰이더 컴파일러 라이브러리 파일
├─ ffmpeg.dll ← 오디오/비디오 변환 및 처리용 FFmpeg 라이브러리
├─ Game.exe ← 게임 실행 파일
├─ icudtl.dat ← ICU (International Components for Unicode) 국제화 데이터 파일
├─ libEGL.dll ← OpenGL ES와 같은 그래픽 API와의 인터페이스를 제공하는 라이브러리 파일
├─ libGLESv2.dll ← OpenGL ES 2.0 API를 구현하는 라이브러리 파일
├─ natives_blob.bin ← 네이티브 코드 초기화를 위한 이진 파일
├─ node.dll ← Node.js 실행 환경을 제공하는 DLL 파일
├─ nw.dll ← NW.js 프레임워크의 핵심 DLL 파일
├─ nw_100_percent.pak ← NW.js 리소스 파일(100% 해상도)
├─ nw_200_percent.pak ← NW.js 리소스 파일(200% 해상도)
├─ nw_elf.dll ← NW.js 관련 ELF 파일을 처리하는 관련 라이브러리 파일
├─ package.json ← Node.js 애플리케이션의 패키지 정보와 의존성을 정의하는 JSON 파일
├─ resources.pak ← 게임/애플리케이션 리소스를 담은 압축 파일
├─ snapshot_blob.bin ← Electron 앱의 빠른 시작을 위한 스냅샷 파일
├─ ...
├─ www/
│ ├─ index.html ← 웹 애플리케이션의 메인 HTML 파일.
│ ├─ package.json ← 프로젝트 설정, 의존성, 스크립트 등을 정의하는 JSON 파일.
│ ├─ audio/
│ │ └─ ...
│ ├─ data/
│ │ └─ ...
│ ├─ fonts/
│ │ └─ ...
│ ├─ icon/
│ │ └─ ...
│ ├─ img/
│ │ └─ ...
│ ├─ js/
│ │ ├─main.js ← 애플리케이션의 실행 시작점이며, 주요 기능을 처리하는 JavaScript 파일
│ │ ├─plugins.js ← 애플리케이션에서 사용하는 플러그인들의 설정 및 초기화 파일
│ │ ├─rpg_core.js ← RPG 게임의 핵심 기능을 정의하는 JavaScript 파일
│ │ ├─rpg_managers.js ← 게임의 관리 시스템(게임 진행, 타이머 등)을 처리하는 파일
│ │ ├─rpg_objects.js ← 게임 내 객체들(플레이어, 아이템 등)을 정의하는 파일
│ │ ├─rpg_scenes.js ← 게임 씬(장면, 화면) 처리 및 전환을 담당하는 파일
│ │ ├─rpg_sprites.js ← 게임의 스프라이트(캐릭터, 객체)의 그래픽 처리 파일
│ │ ├─rpg_windows.js ← RPG 게임의 윈도우(메뉴, 대화창 등) 처리 파일
│ │ ├─node_modules/ ← JS 모듈 (필요 시)
│ │ └─ ...
│ └─ ...
└─ ...
참고#3 - RPGMZ 파일 구조:
my-app/
├─ credits.html ← 게임/프로그램 크레딧을 표시하는 HTML 파일
├─ d3dcompiler_47.dll ← DirectX 3D 그래픽 컴파일러 라이브러리 파일
├─ ffmpeg.dll ← 비디오 및 오디오 파일을 처리하는 FFmpeg 라이브러리의 DLL 파일
├─ Game.exe ← 게임 실행 파일
├─ icudtl.dat ← ICU (International Components for Unicode) 데이터 파일
├─ index.html ← 웹 애플리케이션의 시작 페이지를 정의하는 HTML 파일
├─ libEGL.dll ← OpenGL ES와 같은 그래픽 API와의 인터페이스를 제공하는 라이브러리 파일
├─ libGLESv2.dll ← OpenGL ES 2.0 API를 구현하는 라이브러리 파일
├─ node.dll ← Node.js 실행 환경을 제공하는 DLL 파일
├─ notification_helper.exe ← 프로그램에서 사용자에게 알림을 제공하는 실행 파일
├─ nw.dll ← NW.js 프레임워크의 핵심 DLL 파일
├─ nw_100_percent.pak ← NW.js 리소스 파일(100% 해상도)
├─ nw_200_percent.pak ← NW.js 리소스 파일(200% 해상도)
├─ nw_elf.dll ← NW.js에서 사용하는 ELF 관련 라이브러리 파일
├─ package.json ← Node.js 애플리케이션의 패키지 정보와 의존성을 정의하는 JSON 파일
├─ resources.pak ← NW.js 애플리케이션의 리소스 패키지 파일
├─ v8_context_snapshot.bin ← V8 JavaScript 엔진의 초기화 상태를 저장한 바이너리 파일
├─ ...
├─ audio/
├─ data/
├─ img/
├─ js/
│ ├─ main.js ← 애플리케이션의 실행 시작점이며, 주요 기능을 처리하는 JavaScript 파일
│ ├─ plugins.js ← 애플리케이션에서 사용하는 플러그인들의 설정 및 초기화 파일
│ ├─ rmmz_core.js ← RPG Maker MZ의 핵심 기능을 제공하는 JavaScript 파일
│ ├─ rmmz_managers.js ← RPG Maker MZ의 게임 관리 기능을 담당하는 JavaScript 파일
│ ├─ rmmz_objects.js ← RPG Maker MZ의 게임 오브젝트 및 클래스 정의 파일
│ ├─ rmmz_scenes.js ← RPG Maker MZ의 게임 씬 관련 로직을 처리하는 JavaScript 파일
│ ├─ rmmz_sprites.js ← RPG Maker MZ의 스프라이트 렌더링 관련 기능을 담당하는 JavaScript 파일
│ ├─ rmmz_windows.js ← RPG Maker MZ의 윈도우와 관련된 UI 요소를 처리하는 JavaScript 파일
│ └─ ...
├─ fonts/
├─ movies/
└─ ...
해결 시도 #1:
우선 게임이 RPGMMV인지 RPGMMZ인지 확인합시다.
참고#1, 참고#2 를 확인해주세요.
RPGMV일 경우, 게임파일\www\js 경로 파일명들이 rpg_..js 로 보이며,
RPGMZ일 경우, 게임파일\www\js 경로 파일명들이 rmmz_..js 로 보입니다.
최신 nw.js 버전 다운로드를 해주세요.
https://nwjs.io/downloads 에서 Stable normal 최신 버전을 받아주세요.
다음은 구버전 nw.js 파일들을 게임 폴더에서 치우도록 하겠습니다.
아래 파일들을 제외하고, 나머지 파일들을 치워주세요 (우선 지우지 말고 백업).
게임이 RPGMV일 경우:
www 폴더
credits.html
package.json
그리고 같이 동봉 되어 있는 게임 제품 설명서, .txt, .pdf 등 (이 파일들을 날려버리는 분들이 많아 보이는데, 보존하는 걸 권장합니다)
게임이 RPGMZ일 경우:
audio 폴더
data 폴더
img 폴더
js 폴더
fonts 폴더
movies 폴더
credits.html
그리고 같이 동봉 되어 있는 게임 제품 설명서, .txt, .pdf 등 (이 파일들을 날려버리는 분들이 많아 보이는데, 보존하는 걸 권장합니다)
이제 최신 nw.js 파일들을 게임 폴더에 넣어 nw.js를 업그레이드 합니다.
'nw.exe'를 전에 게임실행 파일의 이름이였던 파일명으로 바꿔주세요.
보통 'Game.exe' 파일명을 사용합니다.
그리고 게임 실행.
게임 실행시 'Required value 'name' is missing or invalid' 라는 오류 창이 뜬다면,
게임을 끄고, 'package.json' 파일을 열어 "name"의 값을 아무거나 쓰고 저장.
"name"의 값은 소문자영어/숫자/-/_ 외의 사용은 권장하지 않습니다.
게임을 다시 실행해주세요.
nw.js 호환 오류 창이 뜬다면, 플러그인이 nw.js와 호환이 안 맞아서일 수도 있습니다.
MV 에서 최신 nw.js로 안 된다면, 최대 많은 플러그인과 호환이 맞는 v0.49.2 를 권장하기도 합니다.
그 외의 오류 메세지 창이 뜬다면 어렵지 않게 검색으로 답을 찾으실 수 있을겁니다.
해결 시도 #2:
nw.js는 앱 폴더 구조가 깨지면 바로 무반응 될 수 있습니다.
package.json이나 node_modules 폴더가 없거나 잘못되면 nw.js가 시작하지 못합니다.
참고#2, 참고#3 의 게임 폴더 구조 재확인을 해보십시요.
nw.js 는 package.json 을 보고 게임을 실행합니다.
{
"name": "my-app", ← "" 공백일 수도 있음
"main": "index.html",
"nwVersion": "0.71.0" ← 여기에 안 적혀 있을 수도 있음
}
이미 앞서 '해결 시도 #1'에서 언급했듯이, 업그레이드 했을 시 "name"에 값을 줘야 할 수도 있습니다.
해결 시도 #3:
로그 확인.
A. 게임 실행 자체가 안 된다면 '해결 시도 #1'에서 받은 nw.js 로 실험.
cmd 실행
> cd 게임폴더\경로
> 신규nw.js파일경로\nw.exe .
실행 → 에러 메시지 확인.
B. 게임의 타이틀까지만 들어갈 수 있다면,
타이틀에서 f12 눌러 개발자 도구 (Developer Tools) 실행.
콘솔에 입력:
> process.versions
펼쳐보면 nw 버전 확인 가능.
게임이 요구하는 nw.js 버전을 알 수 있을 텐데,
이 특정 nw.js 버전을 https://dl.nwjs.io/ 에서 다운해서 시도.
해결 시도 #4:
특정 DLL이 관리자 권한이 없어 접근이 안되 무반응이 될 수도 있음.
게임을 관리자 권한으로 실행.
추가 #1:
nw.js 업데이트시 게임 화면이 상좌 측에 붙어 실행이 될 때가 있는데,
고치자면 'package.json' 에서 아래로 수정:
...
"window": {
...
"icon": "www/icon/icon.png",
"position": "center"
}
추가 #2:
pixiJS 업그레이드.
PixiJS는 WebGL과 WebGPU를 사용하여 웹 브라우저에서 풍부하고
상호작용적인 그래픽, 애니메이션 및 게임을 표시하는 고성능 오픈 소스 2D 렌더링 라이브러리입니다.
앞서 말했듯, nw.js 는 Chromium (웹) 소스 기반입니다.
RPGMV일 경우 '게임파일경로\www\js\libs\pixi.js' 을 백업.
RPGMZ일 경우 '게임파일경로\js\libs\pixi.js' 을 백업.
RPG Maker MV 에선 기본적으로 v4를 쓰며, 그 이하/이상을 쓰면 플로그인 등 호환 문제가 생길 수 있어, v4.8.9 를 사용합니다.
https://github.com/pixijs/pixijs/releases/tag/v4.8.9 에서, 'pixi.js' 파일을 받아 '게임파일경로\www\js\libs\pixi.js' 로 이동시키세요.
RPG Maker MZ 에선 기본적으로 v5를 쓰며, 그 이하/이상을 쓰면 플로그인 등 호환 문제가 생길 수 있어, v5.3.10 를 사용합니다.
https://github.com/pixijs/pixijs/releases/tag/v5.3.10 에서, 'pixi.js' 파일을 받아 '게임파일경로\js\libs\pixi.js' 로 이동시키세요.
추가 #3:
RPG Maker는 nw.js(Chromium) 기반으로 해, GPU 사용이 제한됩니다.
기기마다 성능에 따라 다르기에, 렌더링 문제 시 'package.json' 에서 아래로 수정:
...
"chromium-args": "--ignore-gpu-blacklist --ignore-gpu-blocklist",
"window": {
...
}
이 부분은 왠만해선 건들이지 않아도 됩니다.
추가 #4:
nw.js 앱은 Visual C++ Redistributable 또는 DirectX 같은 시스템 DLL에 의존할 수 있습니다.
MSVCP140.dll, VCRUNTIME140.dll 같은 파일이 있어야 한다는 뜻이죠.
보통이라면 이 파일들이 없을 경우엔 위 특정 파일들이 없다고 오류 메세지가 뜨긴 합니다.
Microsoft Visual C++ Redistributable 또는 DirectX End-User Runtime 가 설치 안 되어 있으면 설치해주세요.
게임이 고쳐졌다는 게 확인이 됐고 재배포할 생각이시라면, 백업했던 nw.js 파일들을 지워주세요.
또한, 차후 자료 버전 비교 확인을 하는 이용자나 파일 업데이트/개선 등 하는 개발자 분들을 위해,
본인이 한 파일 변경이 명시가 되도록 package.json 에 '해결 시도 #2' 에 보이듯이 "nwVersion" 을 작성해 주시기 바랍니다.
pixi.js 업그레이드는, pixi.js 파일을 열면 버전이 적혀 있는 것으로 확인이 됩니다.
또한 파일 복구 공유 시, 파일을 다운로드 하기 사전에 자료 버전을 구별할 수 있기 위해, 버전을 명시해 주시기 바랍니다 (예: nwjs-v0.108.0-win-x64).
