やりたいこと
16px/32pxのタイルセットやキャラクターセットを使いつつ48pxと同じ画面サイズ感にする。
まず
RPGツクールMVのリサイズ・スケール周りは何かとややこしい
- F4 でフルスクリーンモード
- F3 Streach Mode(ウィンドウサイズに応じてゲーム画面がリサイズされる)
- スマホ・プレイヤー(nwui)の場合はデフォルトON、PCの場合はOFF
- 参考:
_updateRealScale()
(rpg_core.js:1644)
初期ウィンドウサイズ(スケール)を変えたい
Graphics.scale
を書き換えてウィンドウサイズを変えればよい
var Graphics_initialize = Graphics.initialize;
Graphics.initialize = function (width, height, type) {
Graphics_initialize.call(Graphics, width, height, type);
// streach mode = offの場合、scaleをもとに計算される
Graphics.scale = 2;
// streach mode = onの場合は、ウィンドウサイズ=スケールなのでウィンドウを変えてしまう
window.resizeTo(SceneManager._screenWidth * Graphics.scale, SceneManager._screenHeight * Graphics.scale);
}
整数倍でスケールさせる
http://www.yanfly.moe/wiki/Core_Engine_(YEP)
の Update Real Scale
をtrueにする
デフォルトでは 0.5, 1, 1.5, 2, 3倍。 1.5が邪魔なら消してしまう。
このプラグインを導入すると上記のスケールが動かなくなる
(後述のゲーム解像度変更のためウィンドウサイズを初期化時にかえるため)
Graphics._updateRealScale = function() {
if (this._stretchEnabled) {
var h = window.innerWidth / this._width;
var v = window.innerHeight / this._height;
this._realScale = Math.min(h, v);
if (this._realScale >= 3) this._realScale = 3;
else if (this._realScale >= 2) this._realScale = 2;
else if (this._realScale >= 1.5) this._realScale = 1.5;
else if (this._realScale >= 1) this._realScale = 1;
else this._realScale = 0.5;
} else {
this._realScale = this._scale;
}
};
ゲーム画面のピクセル数(デフォルト:816x624)を変える
上記プラグインのScreen Width
とScreen Height
を変えるだけ。
いわゆるビューポート自体が変わるので画面に映る範囲は狭くなる
本題
RPGツクール2000みたいな化石の資産を使おうとしてもMVではタイルセットが48px固定になっている。
(逆にキャラクターセットは比率が合っていればどのサイズでもOK。なぜ? https://tkool.jp/mv/course/04.html)
そのためプラグインでタイルセットの基準サイズを変えるプラグインを入れる
https://forums.rpgmakerweb.com/index.php?threads/change-tile-size.46748/
- これ単体で16pxタイルセットを使うと広い画面に対して小さなタイルセットが並んでしまうので
- 上記解像度を1/3(272x208)にするとぴったり納まる
- ウィンドウが小さいのでスケールで2~3倍にする
- たぶんいい感じになる
問題点
- いろいろ描画が壊れる。テキストボックスとか。
結論
下手にプログラムをいじらずに素材を48pxにスケールしてそのまま使ったほうが楽。