diff --git a/data/Plugin/1待機型移動範囲と自軍攻撃範囲の表示変更.js b/data/Plugin/1待機型移動範囲と自軍攻撃範囲の表示変更.js index fbf495c..8e22cd1 100644 --- a/data/Plugin/1待機型移動範囲と自軍攻撃範囲の表示変更.js +++ b/data/Plugin/1待機型移動範囲と自軍攻撃範囲の表示変更.js @@ -445,7 +445,8 @@ UnitRangePanel._setRangeData= function() { if (isWeapon & 2) { this._simulator_wand.startSimulationWeapon(this._unit, mov, startRange, endRange); } - var unit = getActorByName3('シャルロット') || getActorByName3('Charlotte'); + var unit = getActorByName3('シャルロット') || getActorByName3('Charlotte') || + getActorByName3('シャルロ') || getActorByName3('Char'); this._simulatorOrder.startSimulationWeapon(unit, 0, 1, 3); } diff --git a/data/Plugin/charillust.js b/data/Plugin/charillust.js index 1734fe3..5c3941a 100644 --- a/data/Plugin/charillust.js +++ b/data/Plugin/charillust.js @@ -326,7 +326,8 @@ BaseMessageView._setupIllustImage = function(messageViewParam) { unit3 = getActor1(unit); } this._isAlpha = true; - if (unit.getName() == 'Giacomo' || unit.getName() == 'Karla' || unit.getName() == 'Karla') { + if (unit.getName() == 'Giacomo' || unit.getName() == 'ジャコモ' || unit.getName() == 'Giac' || + unit.getName() == 'Karla' || unit.getName() == 'カーラ' || unit.getName() == 'Karl') { this._isAlpha = false; } this._unit = unit; @@ -437,26 +438,37 @@ function getNameByVal(name) { if (name.indexOf('_') > 1) { name = name.substr(0, name.indexOf('_')); } + // Handle numbered variants (e.g., "Char1" -> "Char", "Lena2" -> "Lena") + if (name.length > 1 && name.match(/[0-9]$/)) { + name = name.substr(0, name.length - 1); + } switch (name) { case 'シャルロット': return 1; case 'Charlotte': return 1; + case 'シャルロ': return 1; + case 'Char': return 1; case 'コルネ': return 2; case 'Corne': return 2; + case 'Corn': return 2; case 'レナ': return 3; case 'Lena': return 3; case 'ルリエル': return 4; case 'Luriel': return 4; + case 'Luri': return 4; case 'カエデ': return 5; case 'Kaede': return 5; + case 'Kaed': return 5; case 'カーラ': return 6; case 'Karla': return 6; - case 'Karla': return 6; + case 'Karl': return 6; case 'アンジェラ': return 7; case 'Angela': return 7; case 'クリス': return 7; case 'Chris': return 7; + case 'Chri': return 7; case 'シェリー': return 8; case 'Sherry': return 8; + case 'Sher': return 8; case 'メル': return 9; case 'Mel': return 9; case 'ティナ': return 10; @@ -465,10 +477,18 @@ function getNameByVal(name) { case 'Lou': return 11; case 'サリア': return 12; case 'Saria': return 12; + case 'Sari': return 12; //case 'ジャコモ': return 13; //case 'Giacomo': return 13; case 'タバサ': return 14; case 'Tabatha': return 14; + case 'Taba': return 14; + case 'ダレス': return 15; + case 'Dalles': return 15; + case 'Dall': return 15; + case 'ジャコモ': return 16; + case 'Giacomo': return 16; + case 'Giac': return 16; default: return -1; } } @@ -610,7 +630,7 @@ BaseMessageView.isNakad = function() { var valId = this._getValId(); var swId = valId * 10 + 5; - if (this._name == 'Luriel' || this._name == 'ルリエル') { + if (this._name == 'Luriel' || this._name == 'ルリエル' || this._name == 'Luri') { return false; } if (root.getCurrentSession() == null) { @@ -623,10 +643,10 @@ BaseMessageView.isNakad = function() { return true; } if (root.getMetaSession().getGlobalSwitchTable().isSwitchOn(153)) { - if (this._name == 'Giacomo' || this._name == 'ジャコモ') { + if (this._name == 'Giacomo' || this._name == 'ジャコモ' || this._name == 'Giac') { return false; } - if (this._name == 'Karla' || this._name == 'Karla' || this._name == 'カーラ') { + if (this._name == 'Karla' || this._name == 'カーラ' || this._name == 'Karl') { return false; } return true; diff --git a/data/Plugin/face.js b/data/Plugin/face.js index 29d4fb4..5ad8c31 100644 --- a/data/Plugin/face.js +++ b/data/Plugin/face.js @@ -76,12 +76,43 @@ function getActor1(unit) { } } else { var list = root.getBaseData().getPlayerList(); + var name = unit.getName(); + + // Strip suffix after underscore + if (name.indexOf('_') > 1) { + name = name.substr(0, name.indexOf('_')); + } + // Strip trailing numbers + if (name.length > 1 && name.match(/[0-9]$/)) { + name = name.substr(0, name.length - 1); + } + + // Map full English names to abbreviated forms + switch(name) { + case 'Charlotte': name = 'Char'; break; + case 'Corne': name = 'Corn'; break; + case 'Lena': name = 'Lena'; break; + case 'Luriel': name = 'Luri'; break; + case 'Kaede': name = 'Kaed'; break; + case 'Karla': name = 'Karl'; break; + case 'Chris': name = 'Chri'; break; + case 'Sherry': name = 'Sher'; break; + case 'Mel': name = 'Mel'; break; + case 'Tina': name = 'Tina'; break; + case 'Lou': name = 'Lou'; break; + case 'Saria': name = 'Sari'; break; + case 'Tabatha': name = 'Taba'; break; + case 'Dalles': name = 'Dall'; break; + case 'Giacomo': name = 'Giac'; break; + } + + // For Japanese names, truncate to 4 chars + if (name.length > 4) { + name = name.substr(0, 4); + } + for (var i = 0; i < list.getCount(); i++) { var u = list.getData(i); - var name = unit.getName(); - if (name.length > 4) { - name = name.substr(0, 4); - } if ((name + '1') == u.getName()) { actor1Map[unit.getId()] = u; return u; @@ -140,12 +171,43 @@ function getActor2(unit) { } } else { var list = root.getBaseData().getPlayerList(); + var name = unit.getName(); + + // Strip suffix after underscore + if (name.indexOf('_') > 1) { + name = name.substr(0, name.indexOf('_')); + } + // Strip trailing numbers + if (name.length > 1 && name.match(/[0-9]$/)) { + name = name.substr(0, name.length - 1); + } + + // Map full English names to abbreviated forms + switch(name) { + case 'Charlotte': name = 'Char'; break; + case 'Corne': name = 'Corn'; break; + case 'Lena': name = 'Lena'; break; + case 'Luriel': name = 'Luri'; break; + case 'Kaede': name = 'Kaed'; break; + case 'Karla': name = 'Karl'; break; + case 'Chris': name = 'Chri'; break; + case 'Sherry': name = 'Sher'; break; + case 'Mel': name = 'Mel'; break; + case 'Tina': name = 'Tina'; break; + case 'Lou': name = 'Lou'; break; + case 'Saria': name = 'Sari'; break; + case 'Tabatha': name = 'Taba'; break; + case 'Dalles': name = 'Dall'; break; + case 'Giacomo': name = 'Giac'; break; + } + + // For Japanese names, truncate to 4 chars + if (name.length > 4) { + name = name.substr(0, 4); + } + for (var i = 0; i < list.getCount(); i++) { var u = list.getData(i); - var name = unit.getName(); - if (name.length > 4) { - name = name.substr(0, 4); - } if ((name + '2') == u.getName()) { actor2Map[unit.getId()] = u; return u; @@ -229,6 +291,35 @@ function getSearchName(unit) { if (name.indexOf('_') > 1) { name = name.substr(0, name.indexOf('_')); } + + // Handle numbered variants (e.g., remove trailing numbers) + if (name.length > 1 && name.match(/[0-9]$/)) { + name = name.substr(0, name.length - 1); + } + + // Map full English names to abbreviated forms + switch(name) { + case 'Charlotte': return 'Char'; + case 'Corne': return 'Corn'; + case 'Lena': return 'Lena'; + case 'Luriel': return 'Luri'; + case 'Kaede': return 'Kaed'; + case 'Karla': return 'Karl'; + case 'Chris': return 'Chri'; + case 'Sherry': return 'Sher'; + case 'Mel': return 'Mel'; + case 'Tina': return 'Tina'; + case 'Lou': return 'Lou'; + case 'Saria': return 'Sari'; + case 'Tabatha': return 'Taba'; + case 'Dalles': return 'Dall'; + case 'Giacomo': return 'Giac'; + case 'Angela': return 'Ange'; + case 'Carlos': return 'Carl'; + case 'Majid': return 'Maji'; + } + + // For Japanese names and already-abbreviated names, truncate to 4 chars if (name.length > 4) { name = name.substr(0, 4); } diff --git a/data/Plugin/エロステ.js b/data/Plugin/エロステ.js index b5e1638..ed32905 100644 --- a/data/Plugin/エロステ.js +++ b/data/Plugin/エロステ.js @@ -316,26 +316,41 @@ function getNameByValEroStatus(name) { } function getNameByVal2(name) { + // Strip suffix after underscore for variants + if (name.indexOf('_') > 1) { + name = name.substr(0, name.indexOf('_')); + } + // Handle numbered variants (e.g., "Char1" -> "Char", "Lena2" -> "Lena") + if (name.length > 1 && name.match(/[0-9]$/)) { + name = name.substr(0, name.length - 1); + } switch (name) { case 'シャルロット': return 1; case 'Charlotte': return 1; + case 'シャルロ': return 1; + case 'Char': return 1; case 'コルネ': return 2; case 'Corne': return 2; + case 'Corn': return 2; case 'レナ': return 3; case 'Lena': return 3; case 'ルリエル': return 4; case 'Luriel': return 4; + case 'Luri': return 4; case 'カエデ': return 5; case 'Kaede': return 5; + case 'Kaed': return 5; case 'カーラ': return 6; case 'Karla': return 6; - case 'Karla': return 6; + case 'Karl': return 6; case 'アンジェラ': return 7; case 'Angela': return 7; case 'クリス': return 7; case 'Chris': return 7; + case 'Chri': return 7; case 'シェリー': return 8; case 'Sherry': return 8; + case 'Sher': return 8; case 'メル': return 9; case 'Mel': return 9; case 'ティナ': return 10; @@ -344,10 +359,13 @@ function getNameByVal2(name) { case 'Lou': return 11; case 'サリア': return 12; case 'Saria': return 12; + case 'Sari': return 12; case 'ダレス': return -1; case 'Dalles': return -1; + case 'Dall': return -1; case 'タバサ': return 14; case 'Tabatha': return 14; + case 'Taba': return 14; default: return -1; } } diff --git a/data/Plugin/ギャラリー画面.js b/data/Plugin/ギャラリー画面.js index 829d3fd..e5d063c 100644 --- a/data/Plugin/ギャラリー画面.js +++ b/data/Plugin/ギャラリー画面.js @@ -15,7 +15,8 @@ CharacterScreen.drawDictionaryImage = function(obj) { x += 70; y -= 100; var actor = getActorByName2(obj.getName()); - if (actor.getName() != 'シャルロット' && actor.getName() != 'Charlotte') { + if (actor.getName() != 'シャルロット' && actor.getName() != 'Charlotte' && + actor.getName() != 'シャルロ' && actor.getName() != 'Char') { x -= 70; } drawImage(actor.getCharIllustImage(19), x, y); diff --git a/data/Plugin/ステージ進むとH回数増加.js b/data/Plugin/ステージ進むとH回数増加.js index bcb146e..f89cf8a 100644 --- a/data/Plugin/ステージ進むとH回数増加.js +++ b/data/Plugin/ステージ進むとH回数増加.js @@ -15,11 +15,14 @@ function upEroCount() { switch (unit.getName()) { case 'シャルロット': case 'Charlotte': + case 'シャルロ': + case 'Char': nakaMin = 5; nakaMax = 15; break; case 'コルネ': case 'Corne': + case 'Corn': break; case 'レナ': case 'Lena': @@ -28,14 +31,17 @@ function upEroCount() { break; case 'カエデ': case 'Kaede': + case 'Kaed': break; case 'クリス': case 'Chris': + case 'Chri': nakaMax = 3; analMin = 0; analMax = 0; case 'シェリー': case 'Sherry': + case 'Sher': break; case 'メル': case 'Mel': @@ -51,11 +57,13 @@ function upEroCount() { break; case 'サリア': case 'Saria': + case 'Sari': analMin = 10; analMax = 20; break; case 'タバサ': case 'Tabatha': + case 'Taba': break; } var valId = val * 10 + 6; diff --git a/data/Plugin/ユニット並び順.js b/data/Plugin/ユニット並び順.js index e136895..36263e4 100644 --- a/data/Plugin/ユニット並び順.js +++ b/data/Plugin/ユニット並び順.js @@ -23,41 +23,60 @@ function sortUnit() { function getSortIndex(unit) { - switch(unit.getName()) { + var name = unit.getName(); + // Strip suffix after underscore for variants + if (name.indexOf('_') > 1) { + name = name.substr(0, name.indexOf('_')); + } + // Handle numbered variants (e.g., "Char1" -> "Char", "Lena2" -> "Lena") + if (name.length > 1 && name.match(/[0-9]$/)) { + name = name.substr(0, name.length - 1); + } + switch(name) { case 'シャルロット': return 1; case 'Charlotte': return 1; + case 'シャルロ': return 1; + case 'Char': return 1; case 'レナ': return 2; case 'Lena': return 2; case 'アンジェラ': return 3; case 'Angela': return 3; case 'クリス': return 3; case 'Chris': return 3; + case 'Chri': return 3; case 'コルネ': return 5; case 'Corne': return 5; + case 'Corn': return 5; case 'ルリエル': return 4; case 'Luriel': return 4; + case 'Luri': return 4; case 'カーラ': return 6; case 'Karla': return 6; - case 'Karla': return 6; + case 'Karl': return 6; case 'サリア': return 7; case 'Saria': return 7; + case 'Sari': return 7; case 'メル': return 12; case 'Mel': return 12; case 'シェリー': return 13; case 'Sherry': return 13; + case 'Sher': return 13; case 'ルゥ': return 14; case 'Lou': return 14; case 'タバサ': return 15; case 'Tabatha': return 15; + case 'Taba': return 15; case 'カエデ': return 16; case 'Kaede': return 16; + case 'Kaed': return 16; case 'ティナ': return 17; case 'Tina': return 17; case 'ダレス': return 90; case 'Dalles': return 90; + case 'Dall': return 90; case 'マジード': return 91; case 'Majid': return 91; case 'カルロス': return 92; diff --git a/data/Plugin/着替え.js b/data/Plugin/着替え.js index 68499c2..bc6a759 100644 --- a/data/Plugin/着替え.js +++ b/data/Plugin/着替え.js @@ -654,27 +654,42 @@ function getActorSyusanCount(name) { } function getActorChokyoId(name) { + // Strip suffix after underscore for variants + if (name.indexOf('_') > 1) { + name = name.substr(0, name.indexOf('_')); + } + // Handle numbered variants (e.g., "Char1" -> "Char", "Lena2" -> "Lena") + if (name.length > 1 && name.match(/[0-9]$/)) { + name = name.substr(0, name.length - 1); + } switch (name) { case 'シャルロット': return 6; case 'Charlotte': return 6; + case 'シャルロ': return 6; + case 'Char': return 6; case 'コルネ': return 1; case 'Corne': return 1; + case 'Corn': return 1; case 'レナ': return 2; case 'Lena': return 2; case 'ルリエル': return -1; case 'Luriel': return -1; + case 'Luri': return -1; case 'カエデ': return 82; case 'Kaede': return 82; + case 'Kaed': return 82; case 'カーラ': return -1; case 'Karla': return -1; - case 'Karla': return -1; + case 'Karl': return -1; case 'アンジェラ': return 7; case 'Angela': return 7; case 'クリス': return 7; case 'Chris': return 7; + case 'Chri': return 7; case 'シェリー': return 0; case 'Sherry': return 0; + case 'Sher': return 0; case 'メル': return 8; case 'Mel': return 8; case 'ティナ': return 10; @@ -683,10 +698,13 @@ function getActorChokyoId(name) { case 'Lou': return 5; case 'サリア': return 9; case 'Saria': return 9; + case 'Sari': return 9; case 'ジャコモ': return -1; case 'Giacomo': return -1; + case 'Giac': return -1; case 'タバサ': return 79; case 'Tabatha': return 79; + case 'Taba': return 79; } return -1; } diff --git a/data/Plugin/調教.js b/data/Plugin/調教.js index 64328c5..38890d6 100644 --- a/data/Plugin/調教.js +++ b/data/Plugin/調教.js @@ -579,6 +579,13 @@ QuestDetailWindow.setQuestData = function(quest) { this._equipView._illustId = 3; var actorName = this._quest.custom.actorName || 'シャルロット'; var unit = getActorByName(actorName); + + // If unit not found, don't proceed + if (!unit) { + root.log('Warning: Could not find actor with name: ' + actorName); + return; + } + var messageViewParam = {unit: unit}; if (this._equipView._name == actorName) { @@ -639,14 +646,50 @@ QuestScreen.drawScreenBottomText = function(textui) { }; function getActorByName(name) { + // Map Japanese names to their English equivalents + var nameMap = { + 'シャルロット': 'Charlotte', + 'シャルロ': 'Char', + 'コルネ': 'Corne', + 'レナ': 'Lena', + 'ルリエル': 'Luriel', + 'カエデ': 'Kaede', + 'カーラ': 'Karla', + 'クリス': 'Chris', + 'アンジェラ': 'Angela', + 'シェリー': 'Sherry', + 'メル': 'Mel', + 'ティナ': 'Tina', + 'ルゥ': 'Lou', + 'サリア': 'Saria', + 'タバサ': 'Tabatha', + 'ジャコモ': 'Giacomo', + 'ダレス': 'Dalles', + 'マジード': 'Majid', + 'カルロス': 'Carlos' + }; + var list = root.getBaseData().getPlayerList(); + + // First try exact match for (var i = 0; i < list.getCount(); i++) { var u = list.getData(i); - if (name == u.getName()) { return u; } } + + // If no exact match, try mapped name (Japanese to English) + var mappedName = nameMap[name]; + if (mappedName) { + for (var i = 0; i < list.getCount(); i++) { + var u = list.getData(i); + if (mappedName == u.getName()) { + return u; + } + } + } + return null; }