forked from triacontane/RPGMakerMV
-
Notifications
You must be signed in to change notification settings - Fork 0
/
AutoLoad.js
396 lines (365 loc) · 16.3 KB
/
AutoLoad.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
//=============================================================================
// AutoLoad.js
// ----------------------------------------------------------------------------
// (C)2016 Triacontane
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// Version
// 2.0.0 2019/11/25 コミュニティ版コアスクリプト1.6以降のオートセーブ機能との競合を解消
// タイトル画面をスキップせず、コンティニュー選択時にオートロードする機能を追加
// パラメータ仕様変更
// 1.2.4 2018/09/16 LoadPoint.jsとの競合を解消
// 1.2.3 2018/08/30 MadeWithMv.jsとの競合を解消
// 1.2.2 2018/01/10 マップ画面を使った独自のタイトルでセーブ時のピクチャが表示されていた問題を修正
// 1.2.1 2016/09/18 YEP_EquipCore.jsとの競合を解消
// 1.2.0 2016/09/17 マップ画面を使った独自のタイトル画面が作成できる機能を追加
// 1.1.1 2016/09/16 完全スキップがONかつセーブデータが存在しない場合にゲームを開始できない問題を修正
// 1.1.0 2016/09/16 ゲーム終了やタイトルに戻るの場合もタイトル画面をスキップできる機能を追加
// 1.0.0 2016/05/22 初版
// ----------------------------------------------------------------------------
// [Blog] : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
//=============================================================================
/*:
* @plugindesc Auto load plugin
* @author triacontane
*
* @param PlaySe
* @desc セーブ成功時にシステム効果音を演奏します。
* @default true
* @type boolean
*
* @param TileSkipPolicy
* @desc タイトル画面のスキップ仕様です。
* @default 1
* @type select
* @option None
* @value 0
* @option Normal Skip
* @value 1
* @option Completely Skip
* @value 2
*
* @param TitleMapID
* @desc 独自にタイトル画面用のマップを作成する場合に指定するマップIDです。
* @default 0
* @type number
*
* @help 以下の機能でタイトル画面の仕様を変更します。
* マップ画面を使ったオリジナルタイトル画面などが作れます。
*
* 1.セーブファイルが存在する場合、タイトル画面をスキップします。
*
* 2.セーブ画面を経由せずに最後にアクセスしたセーブファイルに
* 直接セーブするプラグインコマンドを提供します。
*
* 3.設定次第で通常のタイトル画面を完全にスキップできます。
* 「タイトルに戻る」場合もニューゲームか最新のセーブファイルを
* ロードするようになります。
*
* 4.特定のマップをオリジナルタイトル画面として定義できます。
* マップや遠景などを使って独自のタイトル画面を演出できます。
* 以下の手順を踏んでください。
*
* 4-1.「タイトルマップID」にタイトル用マップのマップIDを設定する。
* 4-2.タイトル用マップのイベントでタイトル処理を実装する。
* 4-3.プラグインコマンド「AL_MOVE_LAST_SAVEPOINT」で最後セーブ地点に移動する。
*
* プラグインコマンド詳細
* イベントコマンド「プラグインコマンド」から実行。
* (パラメータの間は半角スペースで区切る)
*
* AL_オートセーブ # 最後にアクセスしたセーブIDにセーブします。
* AL_AUTO_SAVE # 同上
* AL_最終セーブ地点へ移動 # 最後にセーブした場所へ移動します。
* AL_MOVE_LAST_SAVEPOINT # 同上
* AL_初期位置へ移動 # データベース上のパーティの初期位置へ移動します。
* AL_MOVE_INITIAL_POINT # 同上
*
* This plugin is released under the MIT License.
*/
/*:ja
* @plugindesc タイトル画面仕様変更プラグイン
* @author トリアコンタン
*
* @param 効果音演奏
* @desc オートセーブ成功時にシステム効果音を演奏します。
* @default true
* @type boolean
*
* @param タイトルスキップポリシー
* @desc タイトル画面のスキップ仕様です。
* @default 1
* @type select
* @option スキップなし(コンティニューを選択するとオートロード)
* @value 0
* @option 通常スキップ(起動時のみスキップ)
* @value 1
* @option 完全スキップ(タイトルに戻った場合もスキップ)
* @value 2
*
* @param タイトルマップID
* @desc 独自にタイトル画面用のマップを作成する場合に指定するマップIDです。
* @default 0
* @type number
*
* @help 以下の機能でタイトル画面の仕様を変更します。
* マップ画面を使ったオリジナルタイトル画面などが作れます。
*
* 1.セーブファイルが存在する場合、タイトル画面をスキップします。
*
* 2.セーブ画面を経由せずに最後にアクセスしたセーブファイルに
* 直接セーブするプラグインコマンドを提供します。
*
* 3.設定次第で通常のタイトル画面を完全にスキップできます。
* 「タイトルに戻る」場合もニューゲームか最新のセーブファイルを
* ロードするようになります。
*
* 4.特定のマップをオリジナルタイトル画面として定義できます。
* マップや遠景などを使って独自のタイトル画面を演出できます。
* 以下の手順を踏んでください。
*
* 4-1.「タイトルマップID」にタイトル用マップのマップIDを設定する。
* 4-2.タイトル用マップのイベントでタイトル処理を実装する。
* 4-3.プラグインコマンド「AL_MOVE_LAST_SAVEPOINT」で最後セーブ地点に移動する。
*
* プラグインコマンド詳細
* イベントコマンド「プラグインコマンド」から実行。
* (パラメータの間は半角スペースで区切る)
*
* AL_オートセーブ # 最後にアクセスしたセーブIDにセーブします。
* AL_AUTO_SAVE # 同上
* AL_最終セーブ地点へ移動 # 最後にセーブした場所へ移動します。
* AL_MOVE_LAST_SAVEPOINT # 同上
* AL_初期位置へ移動 # データベース上のパーティの初期位置へ移動します。
* AL_MOVE_INITIAL_POINT # 同上
*
* MadeWithMv.jsと併用するときは、このプラグインを下に配置してください。
*
* 利用規約:
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
* についても制限はありません。
* このプラグインはもうあなたのものです。
*/
(function() {
'use strict';
var pluginName = 'AutoLoad';
var metaTagPrefix = 'AL';
var getCommandName = function(command) {
return (command || '').toUpperCase();
};
var getParamBoolean = function(paramNames) {
var value = getParamOther(paramNames);
return (value || '').toUpperCase() === 'ON';
};
var getParamNumber = function(paramNames, min, max) {
var value = getParamOther(paramNames);
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(value, 10) || 0).clamp(min, max);
};
var getParamOther = function(paramNames) {
if (!Array.isArray(paramNames)) paramNames = [paramNames];
for (var i = 0; i < paramNames.length; i++) {
var name = PluginManager.parameters(pluginName)[paramNames[i]];
if (name) return name;
}
return null;
};
//=============================================================================
// パラメータの取得と整形
//=============================================================================
var paramPlaySe = getParamBoolean(['PlaySe', '効果音演奏']);
var paramTitleMapId = getParamNumber(['TitleMapID', 'タイトルマップID'], 0);
var paramTileSkipPolicy = getParamNumber(['TileSkipPolicy', 'タイトルスキップポリシー'], 0, 2);
var $gameScreenBack = null;
//=============================================================================
// Game_Interpreter
// プラグインコマンドを追加定義します。
//=============================================================================
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.apply(this, arguments);
var commandPrefix = new RegExp('^' + metaTagPrefix);
if (!command.match(commandPrefix)) return;
this.pluginCommandAutoLoad(command.replace(commandPrefix, ''), args);
};
Game_Interpreter.prototype.pluginCommandAutoLoad = function(command) {
switch (getCommandName(command)) {
case '_オートセーブ' :
case '_AUTO_SAVE' :
this._index++;
$gameSystem.saveLastAccess();
this._index--;
break;
case '_初期位置へ移動' :
case '_MOVE_INITIAL_POINT' :
$gamePlayer.moveInitialPoint();
this.setWaitMode('transfer');
break;
case '_最終セーブ地点へ移動' :
case '_MOVE_LAST_SAVEPOINT' :
$gamePlayer.moveLastSavePoint();
this.setWaitMode('transfer');
break;
}
};
//=============================================================================
// Game_System
// 自動セーブ処理を追加定義します。
//=============================================================================
Game_System.prototype.saveLastAccess = function() {
this.onBeforeSave();
var result = DataManager.saveLastAccessGame();
if (result && paramPlaySe) {
SoundManager.playSave();
}
};
var _Game_System_onBeforeSave = Game_System.prototype.onBeforeSave;
Game_System.prototype.onBeforeSave = function() {
_Game_System_onBeforeSave.apply(this, arguments);
$gamePlayer.setLastSavePoint();
};
//=============================================================================
// Game_Player
// セーブ時点での状態を保持します。
//=============================================================================
Game_Player.prototype.setLastSavePoint = function() {
this._lastSaveMapId = $gameMap.mapId();
this._lastSaveX = this.x;
this._lastSaveY = this.y;
this._lastSaveTransparent = this.isTransparent();
};
Game_Player.prototype.moveLastSavePoint = function() {
if (this.isExistLastSavePoint()) {
this.setTransparent(this._lastSaveTransparent);
this.reserveTransfer(this._lastSaveMapId, this._lastSaveX, this._lastSaveY, this.direction(), 0);
this._requestLoad = true;
}
if ($gamePlayer.moveLoadPoint) {
$gamePlayer.moveLoadPoint();
}
};
var _Game_Player_clearTransferInfo = Game_Player.prototype.clearTransferInfo;
Game_Player.prototype.clearTransferInfo = function() {
_Game_Player_clearTransferInfo.apply(this, arguments);
if (this._requestLoad) {
$gameSystem.onAfterLoad();
$gameScreen = $gameScreenBack;
$gameScreen.startFadeIn(1);
this._requestLoad = false;
}
};
Game_Player.prototype.moveInitialPoint = function() {
$gamePlayer.reserveTransfer($dataSystem.startMapId,
$dataSystem.startX, $dataSystem.startY, this.direction(), 0);
this.setTransparent($dataSystem.optTransparent);
};
Game_Player.prototype.isExistLastSavePoint = function() {
return !!this._lastSaveMapId;
};
//=============================================================================
// DataManager
// 自動セーブ処理を追加定義します。
//=============================================================================
var _DataManager_loadDatabase = DataManager.loadDatabase;
DataManager.loadDatabase = function() {
if (this.processEquipNotetags1 !== undefined) {
Yanfly._loaded_YEP_EquipCore = false;
}
_DataManager_loadDatabase.apply(this, arguments);
};
DataManager.saveLastAccessGame = function() {
var saveFileId = this.lastAccessedSavefileId();
var result = this.saveGame(saveFileId);
if (result) StorageManager.cleanBackup(saveFileId);
return result;
};
DataManager.autoLoadGame = function() {
var saveFileId = this.latestSavefileId();
var result = false;
if (this.isAnySavefileExists()) {
result = this.loadGame(saveFileId);
}
return result;
};
//=============================================================================
// Scene_Boot
// タイトル画面をとばしてマップ画面に遷移します。
//=============================================================================
var _Scene_Boot_start = Scene_Boot.prototype.start;
Scene_Boot.prototype.start = function() {
_Scene_Boot_start.apply(this, arguments);
if (this.isTitleSkip()) {
this.goToAutoLoad();
}
};
Scene_Boot.prototype.isTitleSkip = function() {
return !DataManager.isBattleTest() && !DataManager.isEventTest() &&
typeof Scene_Splash === 'undefined' && paramTileSkipPolicy !== 0;
};
Scene_Boot.prototype.goToAutoLoad = function() {
var result = this.applyAutoLoad();
if (!result && (paramTileSkipPolicy === 2 || paramTitleMapId > 0)) {
this.goToNewGame();
}
if (paramTitleMapId > 0) {
$gamePlayer.reserveTransfer(paramTitleMapId, 0, 0);
$gamePlayer.setTransparent(true);
}
};
Scene_Boot.prototype.goToNewGame = function() {
DataManager.setupNewGame();
SceneManager.goto(Scene_Map);
};
Scene_Base.prototype.applyAutoLoad = function() {
var result = DataManager.autoLoadGame();
if (result) {
Scene_Load.prototype.reloadMapIfUpdated.call(this);
SceneManager.goto(Scene_Map);
if (!paramTitleMapId) {
$gameSystem.onAfterLoad();
} else {
$gameScreenBack = $gameScreen;
$gameScreen = new Game_Screen();
}
if ($gamePlayer.moveLoadPoint) {
$gamePlayer.moveLoadPoint();
}
}
return result;
};
//=============================================================================
// Scene_Title
// 完全スキップの場合にScene_Bootで上書きします。
//=============================================================================
if (paramTileSkipPolicy === 2 || paramTitleMapId > 0) {
Scene_Title = Scene_Boot;
}
var _Scene_Title_commandContinue = Scene_Title.prototype.commandContinue;
Scene_Title.prototype.commandContinue = function() {
_Scene_Title_commandContinue.apply(this, arguments);
this.fadeOutAll();
this._requestAutoLoad = true;
};
var _Scene_Title_terminate = Scene_Title.prototype.terminate;
Scene_Title.prototype.terminate = function() {
_Scene_Title_terminate.apply(this, arguments);
if (this._requestAutoLoad) {
this.applyAutoLoad();
}
};
if (typeof Scene_Splash !== 'undefined') {
Scene_Splash.prototype.goToAutoLoad = Scene_Boot.prototype.goToAutoLoad;
Scene_Splash.prototype.goToNewGame = Scene_Boot.prototype.goToNewGame;
var _Scene_Splash_gotoTitleOrTest = Scene_Splash.prototype.gotoTitleOrTest;
Scene_Splash.prototype.gotoTitleOrTest = function() {
_Scene_Splash_gotoTitleOrTest.apply(this, arguments);
if (SceneManager.isNextScene(Scene_Title)) {
this.goToAutoLoad();
}
};
}
})();