382 lines
16 KiB
JavaScript
382 lines
16 KiB
JavaScript
const SaveCount = 36;
|
|
const AutoSaveCount = 3;
|
|
const _SvDataCnt = 12;
|
|
let NowLoadNo = -1;
|
|
let AutoSaveViewNo = -1; //オートセーブを表示している時のNo(-1の時は表示しない)
|
|
let SaveSelPage = 0;
|
|
let SaveSelectNo = 0;
|
|
let SaveOverNo = -1;
|
|
let NLoadSuccessFlg = false;
|
|
let SaveVar = [];
|
|
let SavePsVar = [];
|
|
let Save_ZureX = 0;
|
|
let Save_ZureY = -20;
|
|
let LoadModeFlg = false;
|
|
Game_Interpreter.prototype.SaveVarGet = function () {
|
|
let _SetSaveStr = $gameVariables.value(VN_SaveStr);
|
|
SaveVar = [];
|
|
if (_SetSaveStr != 0) SaveVar = _SetSaveStr.split(',');
|
|
SavePsVar = [];
|
|
let _SetSaveStr_2 = $gameVariables.value(VN_SavePsStr);
|
|
if (_SetSaveStr_2 != 0) SavePsVar = _SetSaveStr_2.split(',');
|
|
}
|
|
let SaveVarSet = function () {
|
|
let _SetSaveStr = SaveVar.join(',');
|
|
$gameVariables.setValue(VN_SaveStr, _SetSaveStr);
|
|
let _SetSaveStr_2 = SavePsVar.join(',');
|
|
$gameVariables.setValue(VN_SavePsStr, _SetSaveStr_2);
|
|
}
|
|
Game_Interpreter.prototype.SaveVarReset = function () {
|
|
if (SaveVar.length == 0) {
|
|
let _SetSaveStrs = [];
|
|
for (let i = 0; i <= SaveCount + AutoSaveCount - 1; i++) {
|
|
_SetSaveStrs.push("--:--:--");
|
|
_SetSaveStrs.push("Unused Data");
|
|
_SetSaveStrs.push("SaveCharaNew");
|
|
_SetSaveStrs.push("");
|
|
_SetSaveStrs.push("---");
|
|
_SetSaveStrs.push("---");
|
|
}
|
|
SaveVar = _SetSaveStrs;
|
|
}
|
|
if (SavePsVar.length == 0) {
|
|
for (let i = 0; i <= SaveCount + AutoSaveCount - 1; i++) {
|
|
SavePsVar.push("");
|
|
}
|
|
}
|
|
while (SaveVar[((SaveCount + AutoSaveCount) * 6)] == undefined) {
|
|
SaveVar.push("--:--:--");
|
|
SaveVar.push("Unused Data");
|
|
SaveVar.push("SaveCharaNew");
|
|
SaveVar.push("");
|
|
SaveVar.push("---");
|
|
SaveVar.push("---");
|
|
SavePsVar.push("");
|
|
}
|
|
}
|
|
let _LoadOKFlg = false;
|
|
Game_Interpreter.prototype.MenuSaveView = function (_SetFlg) {
|
|
_SetFlg = typeof _SetFlg !== 'undefined' ? _SetFlg : false;
|
|
let _NotColCngFlg = false;
|
|
ViewSpriteArr_Reset();
|
|
if (SaveSelPage > 2) SaveSelPage = 2;
|
|
let _ViewSaveSelectNo = SaveSelectNo + (SaveSelPage * _SvDataCnt) + 1;
|
|
if (AutoSaveViewNo != -1) {
|
|
_ViewSaveSelectNo = SaveCount + AutoSaveViewNo + 1;
|
|
}
|
|
this.SaveVarGet();
|
|
this.SaveVarReset();
|
|
let _SetOpi = 255;
|
|
if (_SetFlg) _SetOpi = 0;
|
|
ViewSpriteArr = [];
|
|
this.SetSprite(PNo_SBase, MenuUIPath + "Save/S_Base", 566 + Save_ZureX, 190 + Save_ZureY, _SetOpi);
|
|
if (!LoadModeFlg) {
|
|
this.SetSprite(PNo_SBtn, MenuUIPath + "Save/S_SaveBtn", 663 + Save_ZureX, 633 + Save_ZureY, _SetOpi);
|
|
}
|
|
let _sPosl = 216;
|
|
let _sPosr = 386;
|
|
let _sPosY = 238;
|
|
for (let i = 0; i <= _SvDataCnt - 1; i++) {
|
|
let _fn = (SaveSelPage * _SvDataCnt) + i + 1;
|
|
if (_fn > 36) continue;
|
|
let _fr = Math.floor(i / 2);
|
|
if (i % 2 == 0) {
|
|
this.SetSprite(PNo_SFileBt + i, MenuUIPath + "Save/S_File" + _fn + "a",
|
|
_sPosl + Save_ZureX, _sPosY + Save_ZureY + (81 * _fr), _SetOpi);
|
|
} else {
|
|
this.SetSprite(PNo_SFileBt + i, MenuUIPath + "Save/S_File" + _fn + "a",
|
|
_sPosr + Save_ZureX, _sPosY + Save_ZureY + (81 * _fr), _SetOpi);
|
|
}
|
|
}
|
|
for (let i = 0; i <= ViewSpriteArr.length - 1; i++) {
|
|
this.MoveSprite(ViewSpriteArr[i], true, true, 10);
|
|
this.SpriteCngColor(ViewSpriteArr[i]);
|
|
}
|
|
for (let i = 0; i <= _SvDataCnt - 1; i++) {
|
|
let fNo = 1 + i + (_SvDataCnt * SaveSelPage);
|
|
let saveData = DataManager.loadSavefileInfo(fNo);
|
|
if (saveData == null) {
|
|
this.SpriteCngColor(PNo_SFileBt + i, [-100, -100, -100, 0]);
|
|
}
|
|
}
|
|
if (LoadModeFlg) {
|
|
for (let i = 0; i < AutoSaveCount; i++) {
|
|
let fNo = SaveCount + i + 1;
|
|
let saveData = DataManager.loadSavefileInfo(fNo);
|
|
this.SpriteCngColor(PNo_SAuto + i);
|
|
this.SetSprite(PNo_SAuto + i, MenuUIPath + "Save/S_AutoSave" + (i + 1) + "a", 444 + 175 * i, 699, 255);
|
|
if (saveData == null) {
|
|
this.SpriteCngColor(PNo_SAuto + i, [-100, -100, -100, 0]);
|
|
}
|
|
if ($gameVariables.value(VN_AutoSaveNo) == i + 1) {
|
|
this.SetSpriteC(PNo_SAutoNew, MenuUIPath + "Save/PNo_SAutoNew",
|
|
444 + 86 + 175 * i, 699 + 34, 255);
|
|
}
|
|
}
|
|
}
|
|
for (let i = 0; i <= 3 - 1; i++) {
|
|
this.SpriteCngColor(PN_SPage + i);
|
|
let _setPar = 90;
|
|
if (SaveSelPage == i) _setPar = 100;
|
|
this.SetSpriteC(PN_SPage + i, MenuUIPath + "Save/S_Page" + (i + 1),
|
|
269 + Save_ZureX + (117 * i), 210 + Save_ZureY, _SetOpi, _setPar, _setPar);
|
|
this.MoveSprite(PN_SPage + i, true, true, 10, 255, true, true);
|
|
}
|
|
this.SpriteCngColor(PN_SPage + SaveSelPage, [150, 150, 150, 0]);
|
|
if (SaveOverNo != -1 && !_NotColCngFlg) {
|
|
this.SpriteCngColor(SaveOverNo, [100, 100, 100, 0]);
|
|
}
|
|
ViewSpriteArr_Reset();
|
|
if (_ViewSaveSelectNo <= 0) _ViewSaveSelectNo = 1;
|
|
if (SaveSelectNo < 0) {
|
|
SaveSelectNo = 0;
|
|
}
|
|
let btnSelectNo = SaveSelectNo + 1 + (SaveSelPage * _SvDataCnt);
|
|
let _BtnName = "Save/S_File" + btnSelectNo + "b";
|
|
let _posX = _sPosl;
|
|
if (SaveSelectNo % 2 == 1) _posX = _sPosr;
|
|
let _posYc = Math.floor(SaveSelectNo / 2);
|
|
if (AutoSaveViewNo != -1 && LoadModeFlg) {
|
|
_BtnName = "Save/S_AutoSave" + (AutoSaveViewNo + 1) + "b";
|
|
this.SetSprite(PNo_SAuto + AutoSaveViewNo, MenuUIPath + _BtnName,
|
|
444 + 175 * AutoSaveViewNo, 699, _SetOpi);
|
|
} else {
|
|
this.SetSprite(PNo_SFileBt + SaveSelectNo, MenuUIPath + _BtnName,
|
|
_posX + Save_ZureX, _sPosY + Save_ZureY + (81 * _posYc), _SetOpi);
|
|
}
|
|
if (_File_CngFlg) {
|
|
let saveData = DataManager.loadSavefileInfo(_ViewSaveSelectNo);
|
|
let DrawPlayTimer = "--:--:--";
|
|
let DrawSaveTitle = "Unused Data";
|
|
let DrawCharaImg = "SaveCharaNew";
|
|
let DrawHintTxt = "";
|
|
let DrawRateTxt = "---";
|
|
let DrawHasCards = "---";
|
|
let DrawMapName = "";
|
|
let DrawTenki = "";
|
|
_LoadOKFlg = false;
|
|
if (LoadModeFlg) this.SetSprite(PNo_SBtn, MenuUIPath + "Save/S_LoadBtnb", 663 + Save_ZureX, 633 + Save_ZureY, _SetOpi);
|
|
if (saveData != null) {
|
|
_LoadOKFlg = true;
|
|
if (saveData.PlayTimer != undefined) DrawPlayTimer = saveData.PlayTimer;
|
|
if (saveData.SaveTitle != undefined) DrawSaveTitle = saveData.SaveTitle;
|
|
if (saveData.CharaImg != undefined) DrawCharaImg = saveData.CharaImg;
|
|
if (saveData.HintTxt != undefined) DrawHintTxt = saveData.HintTxt;
|
|
if (saveData.RateTxt != undefined) DrawRateTxt = saveData.RateTxt;
|
|
if (saveData.HasCards != undefined) DrawHasCards = saveData.HasCards;
|
|
if (saveData.MapName != undefined) DrawMapName = saveData.MapName;
|
|
if (saveData.Tenki != undefined) DrawTenki = saveData.Tenki;
|
|
if (LoadModeFlg) this.SetSprite(PNo_SBtn, MenuUIPath + "Save/S_LoadBtn", 663 + Save_ZureX, 633 + Save_ZureY, _SetOpi);
|
|
}
|
|
let _BtnName = "Save/S_File" + _ViewSaveSelectNo + "Str";
|
|
if (AutoSaveViewNo != -1) _BtnName = "Save/S_AutoSave" + (AutoSaveViewNo + 1) + "Str";
|
|
this.SetSprite(PNo_SFileP, MenuUIPath + _BtnName, 600 + Save_ZureX, 204 + Save_ZureY, _SetOpi);
|
|
this.DrawSaveDetail(DrawPlayTimer, DrawSaveTitle, DrawCharaImg, DrawHintTxt, DrawRateTxt, DrawHasCards , DrawMapName , DrawTenki, _SetOpi);
|
|
_File_CngFlg = false;
|
|
}
|
|
for (let i = 0; i <= ViewSpriteArr.length - 1; i++) {
|
|
this.MoveSprite(ViewSpriteArr[i], true, true, 10);
|
|
}
|
|
};
|
|
Game_Interpreter.prototype.DrawSaveDetail = function (DrawPlayTimer , DrawSaveTitle , DrawCharaImg , DrawHintTxt , DrawRateTxt , DrawHasCards , DrawMapName , DrawTenki , _SetOpi) {
|
|
D_Text_Cng_font = "Makinas";
|
|
this.SpriteStr(PNo_STmTxt, DrawPlayTimer, 24, 797 + Save_ZureX, 201 + Save_ZureY);
|
|
this.SpriteStr(PNo_STiTxt, DrawSaveTitle, 22, 621 + Save_ZureX, 255 + Save_ZureY);
|
|
this.PlaySpriteAnimeC(PNo_SChara, MenuUIPath + "Save/" + DrawCharaImg,
|
|
6, 10, 759 + Save_ZureX, 405 + Save_ZureY);
|
|
let _HintStr = DrawHintTxt;
|
|
let _hntRow1 = _HintStr;
|
|
let _hntRow2 = "";
|
|
let _hintFontSize = 21;
|
|
// Word-aware wrapping for English text; original char-count split for Japanese
|
|
let _isLatin = /[a-zA-Z]/.test(_HintStr);
|
|
if (_isLatin) {
|
|
// Measure approximate max chars per line at font size for the save detail area
|
|
let _maxChars = 34;
|
|
if (_HintStr.length > _maxChars) {
|
|
// Scale down font if text is very long to fit in 2 lines
|
|
if (_HintStr.length > _maxChars * 2) {
|
|
_hintFontSize = 17;
|
|
_maxChars = 44;
|
|
}
|
|
// Find last space at or before _maxChars for clean word wrap
|
|
let _splitPos = _HintStr.lastIndexOf(' ', _maxChars);
|
|
if (_splitPos <= 0) _splitPos = _maxChars;
|
|
_hntRow1 = _HintStr.substring(0, _splitPos);
|
|
_hntRow2 = _HintStr.substring(_splitPos).replace(/^\s+/, '');
|
|
}
|
|
} else {
|
|
if (_HintStr.length >= 17) {
|
|
_hntRow1 = _HintStr.substring(0, 16);
|
|
_hntRow2 = _HintStr.substring(16);
|
|
}
|
|
}
|
|
this.SpriteStr(PNo_SHTxt, _hntRow1, _hintFontSize, 599 + Save_ZureX, 479 + Save_ZureY);
|
|
this.SpriteStr(PNo_SHTxt + 1, _hntRow2, _hintFontSize, 599 + Save_ZureX, 505 + Save_ZureY);
|
|
this.SpriteStr(PNo_SSTxt, DrawRateTxt, 21, 822 + Save_ZureX, 556 + Save_ZureY);
|
|
this.SpriteStr(PNo_SCard, DrawHasCards, 21, 822 + Save_ZureX, 584 + Save_ZureY);
|
|
if (DrawTenki != "") {
|
|
this.SetSprite(PN_STenki, MenuUIPath + "Save/" + DrawTenki, 566 + Save_ZureX, 190 + Save_ZureY, _SetOpi);
|
|
} else {
|
|
this.DelSprite(PN_STenki);
|
|
}
|
|
if (DrawMapName != "") {
|
|
this.SetSpriteC(PN_SBasyo, MapPicPath + "MapName/" + DrawMapName, 760 + Save_ZureX, 330 + Save_ZureY, _SetOpi);
|
|
} else {
|
|
this.DelSprite(PN_SBasyo);
|
|
}
|
|
D_Text_Cng_font = "";
|
|
}
|
|
let _File_CngFlg = false;
|
|
Game_Interpreter.prototype.MenuSaveUpdate = function (_SetFlg) {
|
|
let _SaveCkFileArr = [];
|
|
for (let i = 0; i <= 11; i++) {
|
|
_SaveCkFileArr.push(PNo_SFileBt + i);
|
|
}
|
|
for (let i = 0; i <= AutoSaveCount - 1; i++) {
|
|
_SaveCkFileArr.push(PNo_SAuto + i);
|
|
}
|
|
_SaveCkFileArr.push(PNo_SBtn);
|
|
_SaveCkFileArr.push(PN_SPage + 0);
|
|
_SaveCkFileArr.push(PN_SPage + 1);
|
|
_SaveCkFileArr.push(PN_SPage + 2);
|
|
let _SaveOverFileNo = overPointerSpCkArr(_SaveCkFileArr);
|
|
if (_SaveOverFileNo != -1) {
|
|
if (TouchInput.isTriggered()) {
|
|
switch (_SaveOverFileNo) {
|
|
case PNo_SBtn:
|
|
if (!LoadModeFlg) {
|
|
this.SaveBtnClick();
|
|
} else {
|
|
this.LoadBtnClick();
|
|
}
|
|
break;
|
|
case PN_SPage + 0:
|
|
case PN_SPage + 1:
|
|
case PN_SPage + 2:
|
|
SaveSelPage = _SaveOverFileNo - PN_SPage;
|
|
SaveSelectNo = 0;
|
|
_File_CngFlg = true;
|
|
this.MenuSaveView();
|
|
SoundManager.playOk();
|
|
break;
|
|
default:
|
|
SaveOverNo = -1;
|
|
AutoSaveViewNo = -1;
|
|
SaveSelectNo = _SaveOverFileNo - PNo_SFileBt;
|
|
_File_CngFlg = true;
|
|
switch (_SaveOverFileNo) {
|
|
case PNo_SAuto + 0:
|
|
case PNo_SAuto + 1:
|
|
case PNo_SAuto + 2:
|
|
AutoSaveViewNo = _SaveOverFileNo - PNo_SAuto;
|
|
break;
|
|
}
|
|
this.MenuSaveView();
|
|
SoundManager.playOk();
|
|
break;
|
|
}
|
|
} else {
|
|
if (SaveOverNo != _SaveOverFileNo) {
|
|
SaveOverNo = _SaveOverFileNo;
|
|
this.MenuSaveView();
|
|
}
|
|
}
|
|
} else {
|
|
if (SaveOverNo != -1) {
|
|
SaveOverNo = -1;
|
|
this.MenuSaveView();
|
|
}
|
|
}
|
|
};
|
|
let SaveClickOffFlame = 0;
|
|
Game_Interpreter.prototype.SaveBtnClick = function () {
|
|
let _ViewSaveSelectNo = SaveSelectNo + (SaveSelPage * _SvDataCnt);
|
|
this.NDataSave(_ViewSaveSelectNo);
|
|
if (menuAutoCloseFlame > 0) {
|
|
menuAutoCloseFlame += 60;
|
|
}
|
|
_SaveWaitTimer = 15;
|
|
SaveClickOffFlame = 20;
|
|
_SaveFileNo = _ViewSaveSelectNo + 1;
|
|
SaveCompAction = (gi) => {
|
|
gi.MenuSaveView();
|
|
let infoData = DataManager.makeSavefileInfo();
|
|
gi.DrawSaveDetail(infoData.PlayTimer,
|
|
infoData.SaveTitle,
|
|
infoData.CharaImg,
|
|
infoData.HintTxt,
|
|
infoData.RateTxt,
|
|
infoData.HasCards,
|
|
infoData.MapName, infoData.Tenki ,255);
|
|
}
|
|
NowLoadNo = _ViewSaveSelectNo + 1;
|
|
$gameVariables.setValue(VN_BefSaveNo, _ViewSaveSelectNo + 1);
|
|
_File_CngFlg = true;
|
|
this.SetSprite(PNo_SBase_Flash, MenuUIPath + "Save/S_Base_Flash", 566 + Save_ZureX, 190 + Save_ZureY, 255);
|
|
this.MoveSprite(PNo_SBase_Flash, true, true, 10, 0);
|
|
SoundManager.playSave();
|
|
};
|
|
Game_Interpreter.prototype.NDataSave = function (_SaveNo) {
|
|
Live2D_Save();
|
|
SaveVarSet();
|
|
}
|
|
let GetSaveHintStr = function () {
|
|
var hintStr = $gameVariables.value(VN_HintStr);
|
|
if (hintStr == 0) return;
|
|
hintStr = hintStr.replace(/\\V\[(\d+)\]/gi, function() {
|
|
return $gameVariables.value(parseInt(arguments[1]));
|
|
});
|
|
return hintStr;
|
|
}
|
|
let GetSaveSijiView = function () {
|
|
if ($gameSwitches.value(SW_SijiView)) {
|
|
return $gameVariables.value(VN_Sijiritu) + " %";
|
|
}
|
|
return "---";
|
|
}
|
|
let _autoSaveFlame = -1;
|
|
const SetAutoAutoSaveFlame = 60 * 60 * 2;
|
|
let _AutoAutoSaveFlame = SetAutoAutoSaveFlame;
|
|
let _AutoSaveWait = 0;
|
|
Game_Interpreter.prototype.NAutoDataSave = function () {
|
|
this.SaveVarGet();
|
|
this.SaveVarReset();
|
|
_autoSaveFlame = 10;
|
|
}
|
|
let _AutoSaveUpdate = Game_Interpreter.prototype.NUpdateSc;
|
|
Game_Interpreter.prototype.NUpdateSc = function () {
|
|
_AutoSaveUpdate.call(this);
|
|
if (_AutoAutoSaveFlame > 0) _AutoAutoSaveFlame--;
|
|
if (_AutoSaveWait > 0) _AutoSaveWait--;
|
|
if (_AutoAutoSaveFlame == 0 && _AutoSaveWait <= 0 &&
|
|
!$gameMap.isEventRunning() && !battleflg && !RD_Flg && !MenuFlgSwich && !fuzokuFlg) {
|
|
this.NAutoDataSave();
|
|
_AutoAutoSaveFlame = SetAutoAutoSaveFlame;
|
|
}
|
|
if (_autoSaveFlame >= 0 && $gameVariables.value(VN_PrologueSN) >= 0) {
|
|
if (_autoSaveFlame == 0) {
|
|
var saveNo = $gameVariables.value(VN_AutoSaveNo);
|
|
saveNo++;
|
|
if (saveNo > 3) saveNo = 1;
|
|
$gameVariables.setValue(VN_AutoSaveNo ,saveNo);
|
|
this.NDataSave(SaveCount + saveNo - 1);
|
|
this.GameFileSave(SaveCount + saveNo);
|
|
this.SetPictC(PN_AutoSaveIcon , "PN_AutoSaveIcon" , 20 , 792);
|
|
$gameScreen.rotatePicture(PN_AutoSaveIcon, 20);
|
|
StacWaitPict(PN_AutoSaveIcon , 30);
|
|
StacMovePict(PN_AutoSaveIcon , true , true , 30 , 0);
|
|
this.SetPict( PN_AutoSaveTxt , "PN_AutoSaveTxt" , 35 , 785);
|
|
StacWaitPict(PN_AutoSaveTxt , 30);
|
|
StacMovePict(PN_AutoSaveTxt , true , true , 30 , 0);
|
|
}
|
|
_autoSaveFlame--;
|
|
}
|
|
}
|
|
let _AutoSave_performTransfer = Game_Player.prototype.performTransfer;
|
|
Game_Player.prototype.performTransfer = function () {
|
|
_AutoSave_performTransfer.call(this);
|
|
_AutoSaveWait = 60;
|
|
}
|
|
Game_Interpreter.prototype.LoadBtnClick = function () {
|
|
};
|