code:
var __extends =
  (this && this.__extends) ||
  (function () {
    var extendStatics = function (d, b) {
      extendStatics =
        Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array &&
          function (d, b) {
            d.__proto__ = b;
          }) ||
        function (d, b) {
          for (var p in b)
            if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
        };
      return extendStatics(d, b);
    };
    return function (d, b) {
      if (typeof b !== "function" && b !== null)
        throw new TypeError(
          "Class extends value " + String(b) + " is not a constructor or null"
        );
      extendStatics(d, b);
      function __() {
        this.constructor = d;
      }
      d.prototype =
        b === null
          ? Object.create(b)
          : ((__.prototype = b.prototype), new __());
    };
  })();
var Nore;
(function (Nore) {
  var _Scene_Message_update = Scene_Message.prototype.update;
  Scene_Message.prototype.update = function () {
    if (
      Input.isTriggered("cancel") ||
      Input.isTriggered("ok") ||
      TouchInput.isTriggered()
    ) {
      if (!$gameTemp.isMessageVisible()) {
        $gameTemp.changeMessageVisible();
        Input.clear();
        return;
      }
    }
    _Scene_Message_update.call(this);
    if (Input.isTriggered("pageup")) {
      $gameTemp.changeMessageVisible();
    }
  };
  var Game_UiCharacter = /** @class */ (function (_super) {
    __extends(Game_UiCharacter, _super);
    function Game_UiCharacter(cos, x, y) {
      var _this = _super.call(this) || this;
      _this._monotone = false;
      _this._stepAnime = false;
      _this._cos = cos;
      _this._x = x;
      _this._y = y;
      _this._baseY = y;
      _this.refresh();
      return _this;
    }
    Game_UiCharacter.prototype.refresh = function () {
      //const characterName = this.actor().characterName();
      //const characterIndex = this.actor().characterIndex();
      //this.setImage(characterName, characterIndex);
    };
    Game_UiCharacter.prototype.actor = function () {
      return $gameActors.actor(this._cos.actorId());
    };
    Game_UiCharacter.prototype.screenX = function () {
      return this._x;
    };
    Game_UiCharacter.prototype.screenY = function () {
      return this._y;
    };
    Game_UiCharacter.prototype.setMonoTone = function (b) {
      this._monotone = b;
    };
    Game_UiCharacter.prototype.isMonoTone = function () {
      return this._monotone;
    };
    Game_UiCharacter.prototype.setStepAnime = function (stepAnime) {
      //this._stepAnime = stepAnime;
      return;
      if (stepAnime) {
        this._y = this._baseY - 30;
      } else {
        this._y = this._baseY;
      }
    };
    Game_UiCharacter.prototype.hasStepAnime = function () {
      return false;
      //return this._stepAnime;
    };
    Game_UiCharacter.prototype.animationWait = function () {
      return 15;
    };
    Game_UiCharacter.prototype.hasWalkAnime = function () {
      return false;
    };
    return Game_UiCharacter;
  })(Game_Character);
  Nore.Game_UiCharacter = Game_UiCharacter;
})(Nore || (Nore = {}));


code:
var Nore;
(function (Nore) {
  Nore.shuffle = function (_a) {
    var _b;
    var arr = _a.slice(0);
    var m = arr.length;
    while (m) {
      var i = Math.floor(Math.random() * m--);
      (_b = [arr[i], arr[m]]), (arr[m] = _b[0]), (arr[i] = _b[1]);
    }
    return arr;
  };
})(Nore || (Nore = {}));

repo_name: onms/dead

license: unknown


code:
var __extends =
  (this && this.__extends) ||
  (function () {
    var extendStatics = function (d, b) {
      extendStatics =
        Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array &&
          function (d, b) {
            d.__proto__ = b;
          }) ||
        function (d, b) {
          for (var p in b)
            if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
        };
      return extendStatics(d, b);
    };
    return function (d, b) {
      if (typeof b !== "function" && b !== null)
        throw new TypeError(
          "Class extends value " + String(b) + " is not a constructor or null"
        );
      extendStatics(d, b);
      function __() {
        this.constructor = d;
      }
      d.prototype =
        b === null
          ? Object.create(b)
          : ((__.prototype = b.prototype), new __());
    };
  })();
var WarpDestination = /** @class */ (function () {
  function WarpDestination(type) {
    this._type = type;
  }
  WarpDestination.prototype.name = function () {
    return getDestinationName(this._type);
  };
  WarpDestination.prototype.type = function () {
    return this._type;
  };
  WarpDestination.prototype.iconIndex = function () {
    switch (this._type) {
      case DestType.base:
        return 480;
      case DestType.dousei:
        return -1;
      case DestType.room:
        return 483;
      case DestType.kaijin:
        return 486;
      case DestType.locker:
        return 518;
    }
    return -1;
  };
  return WarpDestination;
})();
var Scene_Warp = /** @class */ (function (_super) {
  __extends(Scene_Warp, _super);
  function Scene_Warp() {
    return (_super !== null && _super.apply(this, arguments)) || this;
  }
  Scene_Warp.prototype.create = function () {
    _super.prototype.create.call(this);
    this.createWarpWindow();
  };
  Scene_Warp.prototype.createWarpWindow = function () {
    this._warpWindow = new Window_Warp();
    this.addChild(this._warpWindow);
    this._warpWindow.refresh();
    this._warpWindow.setHandler("ok", this.onOk.bind(this));
    this._warpWindow.setHandler("cancel", this.onCancel.bind(this));
  };
  Scene_Warp.prototype.onOk = function () {
    var item = this._warpWindow.selectedItem();
    var nextPlaceId = item.type();
    if ($gameSystem.currentPlace() == nextPlaceId) {
      this.onCancel();
      return;
    }
    $gameVariables.setValue(73, nextPlaceId);
    $gameTemp.reserveCommonEvent(13);
    SceneManager.pop();
  };
  Scene_Warp.prototype.onCancel = function () {
    $gameSwitches.setValue(20, true);
    SceneManager.pop();
  };
  Scene_Warp.prototype.createCancelButton = function () {
    this._cancelButton = new Sprite_Button2("cancel", true);
    this._cancelButton.x = 1072;
    this._cancelButton.y = 42;
    this.addWindow(this._cancelButton);
  };
  return Scene_Warp;
})(Scene_MenuBase);
var Window_Warp = /** @class */ (function (_super) {
  __extends(Window_Warp, _super);
  function Window_Warp() {
    var _this =
      _super.call(this, new Rectangle(720, 110, 424, 232 + 124)) || this;
    _this._list = [];
    return _this;
  }
  Window_Warp.prototype.makeItemList = function () {
    this._list = [];
    this._list.push(new WarpDestination(DestType.base));
    this._list.push(new WarpDestination(DestType.room));
    this._list.push(new WarpDestination(DestType.dousei));
    this._list.push(new WarpDestination(DestType.kaijin));
    this._list.push(new WarpDestination(DestType.locker));
    //this._list.push(new WarpDestination(DestType.baby));
  };
  Window_Warp.prototype.maxCols = function () {
    return 1;
  };
  Window_Warp.prototype.refresh = function () {
    this.makeItemList();
    _super.prototype.refresh.call(this);
    this.select(0);
    this.activate();
  };
  Window_Warp.prototype.maxItems = function () {
    return this._list.length;
  };
  Window_Warp.prototype.lineHeight = function () {
    return 58;
  };
  Window_Warp.prototype.drawItem = function (index) {
    var rect = this.itemRect(index);
    var item = this._list[index];
    if (this.isCurrentPlace(item.type())) {
      this.drawEquip(rect.y + 12);
    }
    var offset = 40;
    this.contents.textColor = ColorManager.normalColor();
    if (item.type() == DestType.dousei) {
      this.drawDouseiIcon(rect, offset);
    } else {
      this.drawIcon(item.iconIndex(), rect.x + 16 + 6 + offset, rect.y + 5);
    }
    this.drawText(item.name(), rect.x + 144 + offset, rect.y, 200);
  };
  Window_Warp.prototype.isCurrentPlace = function (type) {
    if ($gameSystem.currentPlace() == type) {
      return true;
    }
    return false;
  };
  Window_Warp.prototype.drawEquip = function (y) {
    var baseTexture = this.getBaseTexture();
    var texture = new PIXI.Texture(
      baseTexture,
      new PIXI.Rectangle(0, 36, 40, 36)
    );
    var sprite = new PIXI.Sprite(texture);
    sprite.x = 18;
    sprite.y = y + 12;
    this._windowContentsSprite.addChild(sprite);
  };
  Window_Warp.prototype.drawDouseiIcon = function (rect, offset) {
    var iconList = this.douseiIconIndexList();
    var x = rect.x + 6 + offset;
    var ww = 32;
    switch (iconList.length) {
      case 0:
        return;
      case 1:
        x += ww * 1.5;
        break;
      case 2:
        x += ww * 1;
        break;
      case 3:
        x += ww * 0.5;
        break;
    }
    for (var _i = 0, iconList_1 = iconList; _i < iconList_1.length; _i++) {
      var icon = iconList_1[_i];
      this.drawIcon(icon, x, rect.y + 14);
      x += 32;
    }
  };
  Window_Warp.prototype.douseiIconIndexList = function () {
    var result = [];
    var actorList = [9, 4, 13, 17];
    for (var _i = 0, actorList_1 = actorList; _i < actorList_1.length; _i++) {
      var actorId = actorList_1[_i];
      var actor = $gameActors.actor(actorId);
      if (actor.dousei().manId() > 0) {
        result.push(actor.iconIndex());
      }
    }
    return result;
  };
  Window_Warp.prototype.selectedId = function () {
    var item = this.selectedItem();
    return item.type();
  };
  Window_Warp.prototype.selectedItem = function () {
    return this._list[this.index()];
  };
  Window_Warp.prototype.isCurrentItemEnabled = function () {
    return true;
  };
  Window_Warp.prototype.drawLock = function (x, y, isEnabled) {
    if (isEnabled === void 0) {
      isEnabled = true;
    }
    var baseTexture = this.getBaseTexture();
    var texture = new PIXI.Texture(
      baseTexture,
      new PIXI.Rectangle(0, 103, 40, 36)
    );
    var sprite = new PIXI.Sprite(texture);
    sprite.x = x + 14;
    sprite.y = y + 14;
    if (!isEnabled) {
      sprite.alpha = 0.4;
    }
    this._windowContentsSprite.addChild(sprite);
  };
  Window_Warp.prototype.getBaseTexture = function () {
    var baseTexture = PIXI.utils.BaseTextureCache["system/skill_tree"];
    if (!baseTexture) {
      var bitmap = ImageManager.loadSystem("skill_tree");
      if (!bitmap.isReady()) {
        return;
      }
      baseTexture = new PIXI.BaseTexture(bitmap._image);
      baseTexture.resource.url = "system/skill_tree";
      PIXI.utils.BaseTextureCache["system/skill_tree"] = baseTexture;
    }
    return baseTexture;
  };
  return Window_Warp;
})(Window_Selectable);
var DestType;
(function (DestType) {
  DestType[(DestType["base"] = 0)] = "base";
  DestType[(DestType["room"] = 1)] = "room";
  DestType[(DestType["dousei"] = 2)] = "dousei";
  DestType[(DestType["baby"] = 3)] = "baby";
  DestType[(DestType["kaijin"] = 4)] = "kaijin";
  DestType[(DestType["locker"] = 5)] = "locker";
})(DestType || (DestType = {}));
var _Scene_Map_prototype_updateCallMenu = Scene_Map.prototype.updateCallMenu;
Scene_Map.prototype.updateCallMenu = function () {
  _Scene_Map_prototype_updateCallMenu.call(this);
  if (this.isMenuEnabled()) {
    if (this.isWarpCalled()) {
      this.warpCalling = true;
    }
    if (this.warpCalling && !$gamePlayer.isMoving()) {
      this.callWarp();
    }
  } else {
    this.warpCalling = false;
  }
};
Scene_Map.prototype.isWarpCalled = function () {
  return Input.isTriggered("pageup") || Input.isTriggered("warp");
};
Scene_Map.prototype.callWarp = function () {
  SoundManager.playOk();
  SceneManager.push(Scene_Warp);
  Window_MenuCommand.initCommandPosition();
  $gameTemp.clearDestination();
  this._waitCount = 2;
};


code:
var Nore;
(function (Nore) {
  var webInfos = {};
  function exportWebpInfo() {
    var fs;
    var path;
    if (Utils.isNwjs()) {
      fs = require("fs");
      path = require("path");
    }
    var fileName = "Nore_WebpFiles.js";
    var DATA_PATH = (function () {
      var p = window.location.pathname.replace(
        /(\/www|)\/[^\/]*$/,
        "/img/ero/"
      );
      if (p.match(/^\/([A-Z]\:)/)) {
        p = p.slice(1);
      }
      var result = decodeURIComponent(p);
      if (result[0] == "/") {
        return "." + result;
      }
      return result;
    })();
    var OUTPUT_PATH = (function () {
      var p = window.location.pathname.replace(
        /(\/www|)\/[^\/]*$/,
        "/js/plugins/" + fileName
      );
      if (p.match(/^\/([A-Z]\:)/)) {
        p = p.slice(1);
      }
      var result = decodeURIComponent(p);
      if (result[0] == "/") {
        return "." + result;
      }
      return result;
    })();
    fs.readdir(DATA_PATH, function (err, files) {
      if (err) {
        console.error(err.message);
        return;
      }
      if (!files) {
        return;
      }
      try {
        for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {
          var file = files_1[_i];
          var reg = /ero([0-9]+)_([0-9]+)_([0-9]+)\.json/;
          var result = reg.exec(file);
          if (result) {
            putWebp(result[1], result[2], result[3]);
          }
        }
      } catch (e) {
        console.error(e);
      }
      writeWebpInfo();
    });
    function writeWebpInfo() {
      var json = {};
      for (var key in webInfos) {
        var info = webInfos[key];
        json[key] = info.max;
      }
      fs.writeFileSync(
        OUTPUT_PATH,
        "const WEBP_FILES = " + JSON.stringify(json)
      );
    }
    function putWebp(actorId, imageId, index) {
      var key = actorId + "_" + imageId;
      if (!webInfos[key]) {
        webInfos[key] = new WebpInfo(key);
      }
      var info = webInfos[key];
      info.putIndex(parseInt(index));
    }
  }
  Nore.exportWebpInfo = exportWebpInfo;
  var WebpInfo = /** @class */ (function () {
    function WebpInfo(imageId) {
      this.imageId = imageId;
      this.max = 0;
    }
    WebpInfo.prototype.putIndex = function (index) {
      if (this.max < index) {
        this.max = index;
      }
    };
    return WebpInfo;
  })();
})(Nore || (Nore = {}));


code:
var __extends =
  (this && this.__extends) ||
  (function () {
    var extendStatics = function (d, b) {
      extendStatics =
        Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array &&
          function (d, b) {
            d.__proto__ = b;
          }) ||
        function (d, b) {
          for (var p in b)
            if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
        };
      return extendStatics(d, b);
    };
    return function (d, b) {
      if (typeof b !== "function" && b !== null)
        throw new TypeError(
          "Class extends value " + String(b) + " is not a constructor or null"
        );
      extendStatics(d, b);
      function __() {
        this.constructor = d;
      }
      d.prototype =
        b === null
          ? Object.create(b)
          : ((__.prototype = b.prototype), new __());
    };
  })();
/*:ja
 * @target MZ
 * @author ル
 *
 * @command startHanyouMsg
 * @text 55番のIDの男との汎用エロを実行
 * @arg scenarioId
 * @type string
 *
 *
 */
var Nore;
(function (Nore) {
  var pluginName = "Nore_WideUseEro";
  PluginManager.registerCommand(pluginName, "startHanyouMsg", function (args) {
    var manId = $gameVariables.value(55);
    var manParam = MAN_PARAMS[manId];
    var scenarioId = args.scenarioId;
    {
      var manName = $gameActors.actor(manId).nameJp();
      var text = scenarioId.format(manName);
      var list = $dataScenario[text];
      if (list) {
        console.log(
          "Scenario \u30B3\u30DE\u30F3\u30C9\u5B9F\u884C: ".concat(text)
        );
        this.setupChild(list, this._eventId);
        return;
      }
    }
    {
      var text2 = scenarioId.format(manParam.type);
      var list2 = $dataScenario[text2];
      if (!list2) {
        console.error("id:" + text2 + " のデータが見つかりません");
        return;
      }
      console.log(
        "Scenario \u30B3\u30DE\u30F3\u30C9\u5B9F\u884C: ".concat(text2)
      );
      this.setupChild(list2, this._eventId);
    }
  });
})(Nore || (Nore = {}));
var Sprite_AvMan = /** @class */ (function (_super) {
  __extends(Sprite_AvMan, _super);
  function Sprite_AvMan(event) {
    var _this = _super.call(this, event) || this;
    _this.calcAvActor(event);
    return _this;
  }
  Sprite_AvMan.prototype.calcAvActor = function (event) {
    this._avVarId = parseInt(event.event().meta["avMan"]);
  };
  Sprite_AvMan.prototype.updateBitmap = function () {
    if (this.isImageChanged()) {
      this._tilesetId = $gameMap.tilesetId();
      this._tileId = this._character.tileId();
      this._characterName = this.characterName();
      this._characterIndex = this.characterIndex();
      if (this._tileId > 0) {
        this.setTileBitmap();
      } else {
        this.setCharacterBitmap();
      }
    }
  };
  Sprite_AvMan.prototype.characterName = function () {
    if (this._character.characterName() == "") {
      return "";
    }
    var avVar = $gameVariables.value(this._avVarId);
    if (avVar == 0) {
      return "";
    }
    var man = $gameActors.actor(avVar);
    if (!man) {
      console.error(avVar + "の男が見つかりません");
      return "";
    }
    return man.characterName();
  };
  Sprite_AvMan.prototype.characterIndex = function () {
    var avVar = $gameVariables.value(this._avVarId);
    if (avVar == 0) {
      return 0;
    }
    var man = $gameActors.actor(avVar);
    if (!man) {
      console.error(avVar + "の男が見つかりません");
      return 0;
    }
    return man.characterIndex();
  };
  Sprite_AvMan.prototype.updatePosition = function () {
    this.x = this._character.screenX();
    this.y = this._character.screenY();
    this.z = this._character.screenZ();
  };
  Sprite_AvMan.prototype.isImageChanged = function () {
    return (
      this._characterName !== this.characterName() ||
      this._characterIndex !== this.characterIndex()
    );
  };
  Sprite_AvMan.prototype.characterBlockX = function () {
    var index = this.characterIndex();
    return (index % 4) * 3;
  };
  Sprite_AvMan.prototype.characterBlockY = function () {
    var index = this.characterIndex();
    if (this._character.characterIndex() >= 4) {
      if (index < 4) {
        index += 4;
      }
    }
    return Math.floor(index / 4) * 4;
  };
  return Sprite_AvMan;
})(Sprite_Character);
function isAvManEvent(event) {
  if (!event) {
    return false;
  }
  if (!event.event()) {
    return false;
  }
  return event.event().meta["avMan"] != null;
}


code:
Window.prototype._createBackSprite = function () {
  this._backSprite = new Sprite();
  this._backSprite.addChild(new TilingSprite());
  this._backSprite.addChild(new Sprite());
  this._backSprite.addChild(new Sprite());
  this._container.addChild(this._backSprite);
};
Window.prototype._refreshBack = function () {
  var m = this._margin;
  var w = Math.max(0, this._width - m * 2);
  var h = Math.max(0, this._height - m * 2);
  var sprite = this._backSprite;
  var tilingSprite = sprite.children[0];
  // [Note] We use 95 instead of 96 here to avoid blurring edges.
  var sprite2 = sprite.children[1];
  sprite2.bitmap = this._windowskin;
  sprite2.setFrame(0, 0, 95, 95);
  sprite2.move(m, m);
  sprite2.scale.x = w / 95;
  sprite2.scale.y = h / 95;
  tilingSprite.bitmap = this._windowskin;
  tilingSprite.setFrame(0, 96, 96, 96);
  tilingSprite.move(0, 0, w, h);
  tilingSprite.scale.x = 1 / sprite.scale.x;
  tilingSprite.scale.y = 1 / sprite.scale.y;
  //tilingSprite.alpha = 0.8
  //sprite2.alpha = 0.2
  sprite.setColorTone(this._colorTone);
  var mm = 10;
  var sumiSprite = sprite.children[2];
  sumiSprite.removeChildren();
  if (this._isNoSumi) {
    return;
  }
  var baseTexture = Nore.getSystemBaseTexture("Window_sumi");
  var ww = baseTexture.width / 2;
  var hh = baseTexture.height / 2;
  {
    var texture = new PIXI.Texture(baseTexture, new Rectangle(0, 0, ww, hh));
    var spriteOption1 = new PIXI.Sprite(texture);
    spriteOption1.x = mm;
    spriteOption1.y = mm;
    sumiSprite.addChild(spriteOption1);
  }
  {
    var texture = new PIXI.Texture(baseTexture, new Rectangle(ww, 0, ww, hh));
    var spriteOption2 = new PIXI.Sprite(texture);
    spriteOption2.x = this._width - mm - ww;
    spriteOption2.y = mm;
    sumiSprite.addChild(spriteOption2);
  }
  {
    var texture = new PIXI.Texture(baseTexture, new Rectangle(0, hh, ww, hh));
    var spriteOption2 = new PIXI.Sprite(texture);
    spriteOption2.x = mm;
    spriteOption2.y = this._height - mm - hh;
    sumiSprite.addChild(spriteOption2);
  }
  {
    var texture = new PIXI.Texture(baseTexture, new Rectangle(ww, hh, ww, hh));
    var spriteOption2 = new PIXI.Sprite(texture);
    spriteOption2.x = this._width - mm - ww;
    spriteOption2.y = this._height - mm - hh;
    sumiSprite.addChild(spriteOption2);
  }
};


code:
//=============================================================================
// RPG Maker MZ - Plugin Analysis Common Base
//=============================================================================
// Version
// 1.0.5 2022/02/21 TextScriptBase.jsの\txの制御文字のなかに\s[n]を使ったときに正常に返還されない問題を修正
// 1.0.4 2021/12/19 オブジェクトのクラス名を取得する共通関数が一部のパターン
//                  （functionを使った宣言かつ名称の後ろにスペースがあるケース等）で正常に取得できない問題を修正
// 1.0.3 2021/10/07 文章の表示で「\\」が正しく表示されない問題を修正
// 1.0.2 2021/05/15 プラグインコマンドにもsuffixで型変換しない仕様を適用
// 1.0.1 2021/04/15 プラグイン名称取得で全角文字を考慮
//                  配列の要素のパラメータの制御文字が正常に取得できない問題を修正
// 1.0.0 2020/08/20 初版
//=============================================================================

/*:
 * @target MZ
 * @plugindesc Plugin Analysis Common Base
 * @author triacontane
 *
 * @help PluginCommonBase.js
 *
 * This plugin is a base plugin that is meant to be referenced from other plugins.
 * This plugin allows you to use the following control characters in a variety of situations.
 *
 * Usable Control Characters
 * \v[n]  : nis converted to the value of the nth variable.
 * \s[n]  : nis converted to the value (true, false) of the nth switch.
 * \ss[n] : nis converted to the value (true, false) of the nth self switch.
 * n -> A, B, C, D
 *
 * The situations where control characters can be used are as follows.
 * -Text display
 * -Notes field (*)
 * -Plugin command (*)
 * -Plugin parameter (*)
 * -Explanation fields for skills, etc.
 * *Only for plugins that take PluginCommonBase.js as a base.
 *
 * Below is an explanation for developers.
 *
 * Introducing this plugin as a base allows conversion of parameter types and control characters,
 * when analyzing parameters or fetching plugin commands/note fields, to be automated.
 * Standardizing control character allows conversion processing, and consistent
 * control character conversion specs to be implemented in all subordinate plugins.
 *
 * -Plugin Parameter Type Analysis
 * Automatically analyzes type and converts plugin parameters.
 * Also automatically converts control characters when the parameter is fetched.
 * Calls the following methods to fetch return values.
 *  Always specifies "document.currentScript" in the argument.
 *
 * PluginManagerEx.createParameter(document.currentScript);
 *
 * However, if the end of the parameter name (regardless of case)
 * is one of the following values, the value will be returned as-is without control character or type conversion.
 * text
 * name
 * note
 * desc
 * script
 *
 * -Plugin Command Parameter Type Analysis
 * Automatically analyzes type and converts plugin command parameters.
 * Also automatically converts control characters when the parameter is fetched.
 * Uses the following in place of PluginManager.registerCommand.
 * Always specifies "document.currentScript" in the argument.
 *
 * PluginManagerEx.registerCommand(document.currentScript, "command", args => {
 * });
 *
 * -Notes Field Analysis
 * Retrieves notes field information from specified objects.
 * Automatically converts control characters.
 * Multiple names can be specified.
 *
 * PluginManagerEx.findMetaValue(obj, tagName1, tagName2...);
 *
 * -Dynamic Common Event Execution
 * Executions dynamic common events.
 * Dynamic common events are stacked parallel processed common events.
 * Use to execute as many common events with the same ID in parallel as you want.
 * It can register as many common events as you want and automatically discards those that have been executed.
 *
 * $gameMap.setupDynamicCommon(commonEventId);
 *
 */

/*:ja
 * @target MZ
 * @plugindesc パラメータ解析を提供する共通基盤です
 * @author トリアコンタン
 * @url \dlc\BasicResources\plugins\official
 *
 * @help PluginCommonBase.js
 *
 * 本プラグインは他のプラグインから参照されることを前提としたベースプラグインです。
 * 本プラグインを導入すると様々な場面で以下の制御文字が使えるようになります。
 *
 * 利用可能な制御文字
 * \v[n]  : n番目の変数の値に変換されます。
 * \s[n]  : n番目のスイッチの値(true, false)に変換されます。
 * \ss[n] : セルフスイッチの値(true, false)に変換されます。
 * n -> A, B, C, D
 *
 * 制御文字を利用可能な場面は以下の通りです。
 * ・文章の表示
 * ・メモ欄(※)
 * ・プラグインコマンド(※)
 * ・プラグインパラメータ(※)
 * ・スキルなどの説明欄
 * ※ PluginCommonBase.jsをベースとして取り込んだプラグインのみ
 *
 * 以下は開発者向けの解説です。
 *
 * このプラグインをベースとして取り込むことで、パラメータの解析や
 * プラグインコマンド、メモ欄の取得時にパラメータ型および制御文字の変換を自動化します。
 * 制御文字の変換処理を共通化することで配下の全てのプラグインで一貫した
 * 制御文字の変換仕様を実現します。
 *
 * ・プラグインパラメータの型解析
 * プラグインパラメータを自動で型解析し変換します。
 * また、パラメータ取得時に制御文字の変換を自動で行います。
 * 以下のメソッドを呼んで戻り値を取得します。
 * 引数には必ず「document.currentScript」を指定します。
 *
 * PluginManagerEx.createParameter(document.currentScript);
 *
 * ただし、パラメータ名の末尾が(大文字小文字問わず)以下の値の場合
 * 制御文字や型の変換は行われず、そのままの値を返します。
 * text
 * name
 * note
 * desc
 * script
 *
 * ・プラグインコマンドパラメータの型解析
 * プラグインコマンドパラメータを自動で型解析し変換します。
 * また、パラメータ取得時に制御文字の変換を自動で行います。
 * PluginManager.registerCommandの代わりに以下を使用します。
 * 引数には必ず「document.currentScript」を指定します。
 *
 * PluginManagerEx.registerCommand(document.currentScript, "command", args => {
 * });
 *
 * ・メモ欄の解析
 * 指定したオブジェクトからメモ欄情報を取得します。
 * 制御文字の変換を自動で行います。
 * 名称は複数指定することも可能です。
 *
 * PluginManagerEx.findMetaValue(obj, tagName1, tagName2...);
 *
 * ・動的コモンイベントの実行
 * 動的コモンイベントを実行できます。
 * 動的コモンイベントとは、スタック型の並列処理コモンイベントです。
 * 同一IDのコモンイベントも好きなだけ並列実行できます。
 * 実行が終わったものから自働で破棄されます。
 *
 * $gameMap.setupDynamicCommon(commonEventId);
 */

(() => {
  "use strict";

  /**
   * PluginParam
   */
  class PluginParam {
    constructor(parameter, needParse = true) {
      if (needParse) {
        parameter = JSON.parse(JSON.stringify(parameter, this._paramReplacer));
      }
      this.setup(parameter);
    }

    setup(parameter) {
      this._parameter = parameter;
      for (let paramName in parameter) {
        if (!parameter.hasOwnProperty(paramName)) {
          continue;
        }
        const subParam = parameter[paramName];
        if (this._isStructArray(subParam)) {
          subParam.forEach((subParamItem, index) => {
            subParam[index] = new PluginParam(subParamItem, false);
          });
        } else if (this._isStruct(subParam)) {
          parameter[paramName] = new PluginParam(subParam, false);
        }
        this._createAccessor(paramName);
      }
    }

    _createAccessor(paramName) {
      Object.defineProperty(this, paramName, {
        get() {
          return this._convert(this._param(paramName), paramName);
        },
        set(value) {
          this._parameter[paramName] = value;
        },
        configurable: true,
      });
    }

    _convert(param, paramName) {
      if (this._isStruct(param) || this._isStructArray(param)) {
        return param;
      } else if (Array.isArray(param)) {
        return param.map((paramItem) => this._convert(paramItem, paramName));
      }
      if (
        !PluginManagerEx.findTextParamSuffixList().some((regExp) =>
          paramName.match(regExp)
        )
      ) {
        return PluginManagerEx.convertVariables(param);
      } else {
        return String(param);
      }
    }

    _isStructArray(param) {
      return (
        Array.isArray(param) && (param.length === 0 || this._isStruct(param[0]))
      );
    }

    _isStruct(param) {
      return Object.prototype.toString.call(param) === "[object Object]";
    }

    _param(name) {
      return this._parameter[name];
    }

    _paramReplacer(key, value) {
      if (value === "null") {
        return value;
      }
      if (value[0] === '"' && value[value.length - 1] === '"') {
        return value;
      }
      try {
        return JSON.parse(value);
      } catch (e) {
        return value;
      }
    }
  }

  /**
   * PluginManagerEx
   */
  class PluginManagerEx {
    static convertVariables(text, data = null) {
      if (text !== String(text)) {
        return text;
      }
      text = this.convertEscapeCharacters(text, data);
      if (text === "true") {
        return true;
      } else if (text === "false") {
        return false;
      } else if (Number(text) === parseFloat(text)) {
        return parseFloat(text);
      } else {
        return text;
      }
    }

    static convertEscapeCharacters(text, data = null, needEscape = true) {
      if (needEscape) {
        text = text.replace(/\\/g, "\x1b");
        text = text.replace(/\x1b\x1b/g, "\\");
      }
      text = TextConverter.convertEscapeCharactersBase(text, data);
      text = this.convertEscapeCharactersEx(text, data);
      text = TextConverter.convertEscapeCharactersBase(text, data);
      return text;
    }

    // Additional Escape Characters
    static convertEscapeCharactersEx(text, data = null) {
      text = text.replace(/\x1bS\[(\d+)]/gi, (_, p1) => {
        return $gameSwitches ? $gameSwitches.value(parseInt(p1)) : "";
      });
      text = text.replace(/\x1bSS\[(\w+)]/gi, (_, p1) => {
        const key = this._selfSwitchKey;
        if (!key) {
          return false;
        }
        key[2] = p1.toUpperCase();
        return $gameSelfSwitches ? $gameSelfSwitches.value(key) : "";
      });
      return text;
    }

    static createParameter(currentScript) {
      const paramText = PluginManager.parameters(
        this.findPluginName(currentScript)
      );
      return new PluginParam(paramText);
    }

    static createCommandArgs(args) {
      const hasObject = Object.keys(args).some((key) => {
        return args[key].match(/^[\[{].*[}\]]$/);
      });
      if (hasObject) {
        return new PluginParam(args);
      }
      const newArgs = {};
      Object.keys(args).forEach((key) => {
        if (
          !this.findTextParamSuffixList().some((regExp) => key.match(regExp))
        ) {
          newArgs[key] = this.convertVariables(args[key]);
        } else {
          newArgs[key] = args[key];
        }
      });
      return newArgs;
    }

    static findMetaValue(object, nameList) {
      if (!Array.isArray(nameList)) {
        nameList = [nameList];
      }
      const meta = this.findMetaProperty(object);
      this.generateSelfSwitchKey(object.id);
      for (const name of nameList) {
        if (meta.hasOwnProperty(name)) {
          return this.convertVariables(meta[name], object);
        }
      }
    }

    static findMetaObject(object, nameList) {
      if (!Array.isArray(nameList)) {
        nameList = [nameList];
      }
      const meta = this.findMetaProperty(object);
      this.generateSelfSwitchKey(object.id);
      for (const name of nameList) {
        if (meta.hasOwnProperty(name)) {
          return new PluginParam(meta[name]);
        }
      }
    }

    static findMetaProperty(object) {
      const meta = object.meta;
      if (!meta) {
        throw new Error(`Meta property not found : ${object}`);
      }
      return meta;
    }

    static findPluginName(currentScript) {
      return currentScript.src.replace(/^.*\/(.*).js$/, function () {
        return decodeURIComponent(arguments[1]);
      });
    }

    static registerCommand(currentScript, commandName, funcName) {
      const pluginName = this.findPluginName(currentScript);
      const key = pluginName + ":" + commandName;
      const func =
        typeof funcName === "function"
          ? funcName
          : Game_Interpreter.prototype[funcName];
      if (!func) {
        throw new Error(`Not found function Game_Interpreter : ${funcName}`);
      }
      PluginManager.registerCommand(pluginName, commandName, function (args) {
        func.call(this, PluginManagerEx.createCommandArgs(args, key));
      });
    }

    static isExistPlugin(pluginName) {
      return Object.keys(PluginManager.parameters(pluginName)).length > 0;
    }

    static generateSelfSwitchKey(eventId) {
      if (!$gameMap) {
        return;
      }
      this._selfSwitchKey = [$gameMap.mapId(), eventId, null];
    }

    static findClassName(object) {
      const define = object.constructor.toString();
      if (define.match(/^class/)) {
        return define.replace(/class\s+(.*?)\s+[\s\S]*/m, "$1");
      }
      return define.replace(/function\s+(.*?)\s*\([\s\S]*/m, "$1");
    }

    static throwError(message, currentScript) {
      const pluginName = this.findPluginName(currentScript);
      throw new Error(`By ${pluginName} : ${message}`);
    }

    static escapeXmlTag(text) {
      text = text.replace(/>?/gi, ">");
      return text.replace(/<?/gi, "<");
    }

    static findTextParamSuffixList() {
      return [/text$/gi, /name$/gi, /desc$/gi, /note$/gi, /script$/gi];
    }
  }
  window.PluginManagerEx = PluginManagerEx;

  class TextConverter {
    // Copy of Window_Base.prototype.convertEscapeCharacters
    static convertEscapeCharactersBase(text, data = null) {
      text = text.replace(/\x1bV\[(\d+)]/gi, (_, p1) =>
        $gameVariables ? $gameVariables.value(parseInt(p1)) : ""
      );
      text = text.replace(/\x1bV\[(\d+)]/gi, (_, p1) =>
        $gameVariables ? $gameVariables.value(parseInt(p1)) : ""
      );
      text = text.replace(/\x1bN\[(\d+)]/gi, (_, p1) =>
        this.actorName(parseInt(p1))
      );
      text = text.replace(/\x1bP\[(\d+)]/gi, (_, p1) =>
        this.partyMemberName(parseInt(p1))
      );
      if ($dataSystem) {
        text = text.replace(/\x1bG/gi, TextManager.currencyUnit);
      }
      return text;
    }

    static actorName(n) {
      const actor = n >= 1 && $gameActors ? $gameActors.actor(n) : null;
      return actor ? actor.name() : "";
    }

    static partyMemberName(n) {
      const actor = n >= 1 && $gameParty ? $gameParty.members()[n - 1] : null;
      return actor ? actor.name() : "";
    }
  }

  const _PluginManager_callCommand = PluginManager.callCommand;
  PluginManager.callCommand = function (self, pluginName, commandName, args) {
    PluginManagerEx.generateSelfSwitchKey(self.eventId());
    _PluginManager_callCommand.apply(this, arguments);
  };

  const _Window_Base_convertEscapeCharacters =
    Window_Base.prototype.convertEscapeCharacters;
  Window_Base.prototype.convertEscapeCharacters = function (text) {
    text = _Window_Base_convertEscapeCharacters.apply(this, arguments);
    return PluginManagerEx.convertEscapeCharacters(text, null, false);
  };

  const _Game_System_onAfterLoad = Game_System.prototype.onAfterLoad;
  Game_System.prototype.onAfterLoad = function () {
    _Game_System_onAfterLoad.apply(this, arguments);
    $gameMap.initDynamicEvents();
  };

  /**
   * Game_Map
   * Support dynamic events.
   */
  const _Game_Map_setupEvents = Game_Map.prototype.setupEvents;
  Game_Map.prototype.setupEvents = function () {
    _Game_Map_setupEvents.apply(this, arguments);
    this.initDynamicEvents();
  };

  Game_Map.prototype.initDynamicEvents = function () {
    if (!this._dynamicEvents) {
      this._dynamicEvents = [];
    }
  };

  Game_Map.prototype.isInterpreterOf = function (interpreter) {
    return this._interpreter === interpreter;
  };

  Game_Map.prototype.setupDynamicCommon = function (id) {
    const event = $dataCommonEvents[id];
    if (event) {
      this.setupDynamicInterpreter(event.list);
    }
  };

  Game_Map.prototype.setupDynamicInterpreter = function (list) {
    const interpreter = new Game_Interpreter();
    interpreter.setup(list, 0);
    this._dynamicEvents.push(interpreter);
    this._dynamicEvents = this._dynamicEvents.filter((interpreter) =>
      interpreter.isRunning()
    );
  };

  const _Game_Map_updateEvents = Game_Map.prototype.updateEvents;
  Game_Map.prototype.updateEvents = function () {
    _Game_Map_updateEvents.apply(this, arguments);
    this._dynamicEvents.forEach((interpreter) => interpreter.update());
  };

  /**
   * Game_Event
   */
  Game_Event.prototype.findMeta = function (metaNames) {
    return PluginManagerEx.findMetaValue(this.event(), metaNames);
  };

  /**
   * Game_Interpreter
   */
  const _Game_Interpreter_setup = Game_Interpreter.prototype.setup;
  Game_Interpreter.prototype.setup = function (list, eventId) {
    _Game_Interpreter_setup.apply(this, arguments);
    if (eventId) {
      PluginManagerEx.generateSelfSwitchKey(eventId);
    }
  };
})();


code:
var CHITSU_TIGHTENING;
var ANAL_TIGHTENING;
var MANKO_BLACKHEAD;
var REPUTATION_NONOKA;
var REPUTATION_MARINA;
var REPUTATION_SAKI;
var REPUTATION_KOKONA;
var DEPRAVITY_NONOKA;
var DEPRAVITY_MARINA;
var DEPRAVITY_SAKI;
var DEPRAVITY_KOKONA;
var SIKYU_TEXT;
var getBabyFuture;
var getEroParamTitle;
var getAvParamTitle;
var getBodyParamTitle;
var getDungeonName;
var getChokyoName;
var getTaneoyaName;
var getDestinationName;
var getAvParamType;
function initVocabJp() {
  // Title
  TextManager._newGame = "New Game";
  TextManager._continue_ = "Continue";
  TextManager.recollection = "Recollection";
  TextManager._options = "Options";
  TextManager._gameEnd = "Game End";
  TextManager.gameActive = "Game Always Active";
  TextManager.autoSpeed = "Message Auto Speed";
  TextManager.autoSpeed1 = "Slow";
  TextManager.autoSpeed2 = "Normal";
  TextManager.autoSpeed3 = "Fast";
  TextManager.autoSpeed4 = "Very Fast";
  TextManager.autoSpeed5 = "Fastest";
  // Menu
  TextManager.language = "Language";
  TextManager._save = "Save";
  TextManager._load = "Load";
  TextManager.kigae = "Costume Change";
  TextManager.count = "%1 times";
  TextManager.cohabiting = "Cohabiting →";
  TextManager.avNg1 = "During pregnancy, cannot film until childbirth";
  TextManager.avNg2 = "Filming is not possible";
  TextManager.douseiNg1 = "During pregnancy, cannot change until childbirth";
  TextManager.douseiNg2 = "Cannot change cohabitation partner";
  TextManager.douseiNg3 = "Cannot change until Nonoka gives birth";
  TextManager.nextTarget = "Next Goal";
  TextManager.target_0_1 = "Recruit an actor and increase films available";
  TextManager.target_0_2 = "Build Marina's cohabitation room";
  TextManager.target_0_3 = "Try training the monsters";
  TextManager.target_1_1 = "Film Senri's movie";
  TextManager.target_1_3 = "Build the factory";
  TextManager.target_1_4 = "Film Senri's main scene";
  TextManager.target_1_5 = "Engage in battle and defeat the heroes";
  TextManager.target_1_6 = "Conquer antenna base in battle";
  TextManager.target_1_7 = "Click to communicate with Dr. Gary";
  TextManager.target_2_1 = "Film Nonoka's first scene";
  TextManager.target_2_2 = "Build the cohabitation room";
  TextManager.target_2_3 = "Film Nonoka's childbirth scene";
  TextManager.target_2_4 =
    "Include monsters in the battle team via 'Formation' (last position recommended)";
  TextManager.target_2_5 = "Conquer Marina's nearby base in battle";
  TextManager.target_2_6 = "Confront Marina in the decisive battle";
  TextManager.target_2_7 =
    "Have many children and win the battle against Marina";
  TextManager.target_2_8 = "Make Nonoka and Basujima cohabit";
  TextManager.target_2_10 = "Build the soup kitchen";
  TextManager.target_2_11 =
    "Have Nonoka produce more children to strengthen allies";
  TextManager.target_2_12 = "Watch the cohabitation until Nonoka gets pregnant";
  TextManager.target_2_13 = "Wait until Nonoka is able to give birth";
  TextManager.target_3_1 = "Film Marina's movie";
  TextManager.target_3_2 = "Build the radar device";
  TextManager.target_3_5 = "Film Marina and Tarou's movie";
  TextManager.target_3_6 = "Make Marina and Tarou cohabit";
  TextManager.target_3_7 = TextManager.target_2_10;
  TextManager.target_3_8 = "Win the decisive battle against Saki";
  TextManager.target_4_1 = "Film Saki's movie";
  TextManager.target_4_2 = "Build Saki's cohabitation room";
  TextManager.target_4_3 = "Make Saki and Kasuzou cohabit";
  TextManager.target_4_4 =
    "Build a Level 1 lab to increase monster variety born";
  TextManager.target_4_8 = "Produce 14 monsters (currently %1)";
  TextManager.target_4_9 = "Build a dummy factory";
  TextManager.target_4_10 = "Engage in battle and defeat the hero";
  TextManager.target_4_11 = "Win the decisive battle against Kokona";
  TextManager.target_4_12 = "Wait for Miyu's intelligence activities";
  TextManager.target_5_1 = "Film Kokona's movie";
  TextManager.target_5_2 = "Build Kokona's cohabitation room";
  TextManager.target_5_3 =
    "Build a Level 2 lab to increase monster variety born";
  TextManager.target_5_5 = "Make Kokona and Oliver cohabit";
  TextManager.target_5_10 = "Conquer the hero's stronghold in battle";
  TextManager.target_5_11 = "Build a missile base";
  TextManager.target_5_12 = "Attack the hero headquarters and take it down";
  TextManager.target_5_13 =
    "Engage in battle and start the hero headquarters invasion plan";
  // Option
  TextManager._alwaysDash = "Always Dash";
  TextManager._touchUI = "Touch UI";
  TextManager._bgmVolume = "BGM Volume";
  TextManager._bgsVolume = "BGS Volume";
  TextManager._meVolume = "ME Volume";
  TextManager._seVolume = "SE Volume";
  TextManager._voiceVolume = "Voice Volume";
  TextManager.showSikyu = "Display Cross-section";
  TextManager.windowAlpha = "Message Window Opacity";
  TextManager.skipKey = "Message Skip Key";
  TextManager.rightClickSkip = "Right Click to Skip Message";
  TextManager.battleSe = "Battle SE";
  TextManager.autoTimeEvent = "Auto Time Event Execution";
  TextManager.simpleMenu = "Simple Left Menu Display";
  TextManager.outerTransparentEnabled = "Change clothing transparency during conversation";
  // Slg
  TextManager.av = "Filming";
  TextManager.facility = "Facility";
  TextManager.information = "Information";
  TextManager.character = "Character";
  TextManager.decisiveBattle = "Decisive Battle";
  TextManager.money = "Money";
  TextManager.jusei = "%1 Fertilizing";
  TextManager.toNinshin = "%1 Pregnant";
  TextManager.changeActor = "Update Actor Candidates";
  TextManager.saleAv = "AV on Sale";
  // decisiveBattle
  TextManager.decisiveBattleStage1 = "Conquer Antenna Base";
  TextManager.decisiveBattleStage1_2 = "Dr. Gary's Support";
  TextManager.decisiveBattleConfirm = "Execute the Decisive Battle?";
  TextManager.decisiveBattleStage2 = "Conquer the base near Marina's house";
  TextManager.decisiveBattleStage3 = "Build the Radar Device";
  TextManager.decisiveBattleStage4 = "Build a Dummy Factory";
  TextManager.decisiveBattleStage5 = "Build a Missile Base";
  TextManager.decisiveBattleStage5_2 = "Conquer the Hero's Defense Stronghold";
  TextManager.decisiveBattleDialog = "Conditions not met";
  TextManager.decisiveBattleMonster = "Number of Monsters";
  // Man
  TextManager.soupKichen = "Actor Recruitment";
  TextManager.manageMan = "Actor Management";
  TextManager.hireMan = "Hire (%1G)";
  TextManager.manExperience = "Experience Info with Girls";
  TextManager.noSoupKichenFacility = "Build a Soup Kitchen";
  TextManager.noSoupKichenMan = "No actors available for recruitment";
  // Military
  TextManager.selectTarget = "Select Target of Invasion";
  TextManager.battleDifficulty = "Enemy Strength";
  TextManager.areaReward = "Area Reward";
  TextManager.clearReward = "Conquest Reward";
  TextManager.invasion = "Battle";
  TextManager._formation = "Formation";
  TextManager.inBattle = "Currently in Battle!";
  TextManager.interval = "SPD";
  TextManager.confirmBattle = "Invade this area?";
  TextManager.rewardDesc1 = "Nonoka’s AV will be unlocked";
  TextManager.rewardDesc2 = "You can capture Marina";
  TextManager.rewardDesc3 = "Nonoka’s AV will be unlocked";
  TextManager.rewardDesc4 = "The decisive battle with Marina will be available";
  TextManager.rewardDesc5 = "Ally monster's attack power will increase by 5%";
  TextManager.rewardDesc6 = "Enemy hero’s HP will decrease by 5%";
  TextManager.rewardDesc7 = "You can capture Saki";
  TextManager.rewardDesc8 = "You can capture Kokona";
  TextManager.rewardDesc9 = "Marina’s AV will be unlocked";
  TextManager.rewardDesc10 = "Kanami’s AV will be unlocked";
  TextManager.rewardDesc11 = "Advance to the final battle";
  TextManager.rewardDesc12 = "No chance of winning. Prepare for the decisive battle";
  TextManager.rewardDesc13 = "Nonoka’s exposure event will be unlocked";
  TextManager.rewardDesc14 = "Marina’s exposure event will be unlocked";
  TextManager.rewardDesc15 = "Saki’s exposure event will be unlocked";
  TextManager.rewardDesc16 = "Kokona’s exposure event will be unlocked";
  TextManager.rewardDesc17 = "Condition for the decisive battle";
  TextManager.rewardDesc18 = "The ending will change";
  TextManager.rewardDesc19 = "No chance of winning. Prepare for the decisive battle";
  TextManager.rewardDesc20 = "Game cleared. Don't forget to save";
  TextManager.rewardDesc21 = "Victory won’t allow capturing Marina";
  TextManager.enemyDesc1 =
    "Opponent is heavily injured, with greatly reduced abilities.\nNow is the time! Kanami, don't lose!";
  TextManager.enemyDesc2 = "Opponent's wide-range attacks are sealed!\nIt's a head-to-head fight now!";
  TextManager.enemyDesc3 = "Kanami, there's no chance of winning!\nRetreat!";
  TextManager.enemyDesc4 = "Conquering this base will make future movements easier.";
  TextManager.enemyDesc5 =
    "If captured here,\nfilming at Nonoka's school should be possible.";
  TextManager.enemyDesc6 = "Expose Nonoka in front of the public";
  TextManager.enemyDesc7 =
    "Eradicate the villain who was trying to brainwash even us.\nOffer a release to the cloned monster king.";
  TextManager.enemyDesc8 =
    "A facility trying to brainwash even us.\nDestroy it thoroughly!";
  TextManager.enemyDesc9 =
    "Again, it's teacher Ritsuko's request.\nEliminate disturbances to film AVs.";
  TextManager.enemyDesc10 =
    "Teacher Ritsuko requests filming at Marina's workplace.\nDeal with heroes first to avoid disruptions.";
  TextManager.enemyDesc11 =
    "To expose Saki,\nremove the enemy defense units.";
  TextManager.enemyDesc12 =
    "These guards remain vigilant.\nRemove obstacles to expose Marina.";
  TextManager.enemyDesc13 =
    "To film Saki’s AV at the school,\nremove this hero.";
  TextManager.enemyDesc14 =
    "Purify Dr. Gary who aids the hero association!";
  TextManager.enemyDesc15 =
    "Capture Marina's son by conquering this base!";
  TextManager.enemyDesc16 =
    "Kanami, without strategy, you can't defeat Nonoka!\nReturn before getting hurt!";
  TextManager.enemyDesc17 =
    "To film Nonoka’s AV in the city,\nneutralize this base!";
  TextManager.enemyDesc18 = "Attack the base protected by Marina,\nand capture Marina!";
  TextManager.enemyDesc19 =
    "Finally, the decisive battle!\nDefeat Kokuryu, the avenger!";
  // Formation
  TextManager.formationLevelUp = "Level Up?";
  TextManager.levelUpSec = "%1s";
  TextManager.levelUpMinSec = "%1m %2s";
  TextManager.inTraining = "%1 is training";
  TextManager.inTraining2 = "In training";
  TextManager.formationTarget = "← Often targeted";
  TextManager.reset = "Reset";
  TextManager.flame = "Fire";
  TextManager.water = "Water";
  TextManager.wood = "Wood";
  TextManager.probability = "Chance";
  TextManager.passive = "Passive Skill";
  TextManager.training = "Train";
  TextManager.trainingTime = "Training Time";
  TextManager.learnNewSkill = "Learn New Skill";
  TextManager.learnSkillLv = "Learn LV: ";
  TextManager.detailLvUp = "Level Up";
  TextManager.detailLvUpCost = "Cost";
  // EroStatus
  TextManager.peopleUnit = "%1 People";
  TextManager.countUnit = "%1 Times";
  TextManager.pointUnit = "%1 Points";
  TextManager.avUnit = "%1 Copies";
  TextManager.normal = "Normal";
  TextManager.pregnant = "Pregnant";
  TextManager.pregnant2 = "Pregnant with %1's child";
  TextManager.father = "Fathering Parent";
  TextManager.syusanOther = "Others %1 People";
  TextManager.syusanZero = "None";
  // Save
  TextManager._file = "File";
  TextManager._autosave = "Autosave";
  TextManager.chapter = "Ch %1";
  TextManager.saveLatest = "Latest %1";
  TextManager._saveMessage = "Which file would you like to save to?";
  TextManager._loadMessage = "Which file would you like to load?";
  TextManager.prologue = "Prologue";
  // Actor
  TextManager.showEroStatus = "Show Ero Status";
  TextManager.charAv = "Film";
  TextManager.charKigae = "Change";
  TextManager.charDousei = "Cohabit";
  TextManager.charStatus = "Ero Status";
  // Facility
  TextManager.levelUpFacility = "Construction Cost %1G";
  TextManager.underConstruction = "Under Construction %1";
  TextManager.facilityTaikenbanNg = "Cannot build this facility in trial version";
  TextManager.facilityFactory1 = "Battles will be unlocked";
  TextManager.facilityFactory2 = "Fighters will become slightly stronger";
  TextManager.facilityConstrunction = "Construction in Progress";
  // Av
  TextManager.setMainMan = "Set the main actor";
  TextManager.setSubMan1 = "Set actors to meet AV parameters";
  TextManager.setSubMan2 = "Sub-actors add only half of the parameters";
  TextManager.setAvSkill = "Set actors with required skills";
  TextManager.canMakeAv = "AV filming is possible!";
  TextManager.canMakeAv2nd = "With the 2nd filming, difficulty increases";
  TextManager.canMakeAv2nd3 = "Childbirth AV has no difficulty change beyond the 2nd time";
  TextManager.canMakeAv2nd4 = "However, rewards decrease";
  TextManager.canMakeAv2nd5 = "This AV does not change in difficulty beyond the 2nd time";
  TextManager.avResult1 = "Amateur AV actress %1's %2nd film";
  TextManager.avResult2 = "sales results report";
  TextManager.avReward = "Reward";
  TextManager.contraception = "Use Contraception";
  TextManager.contraceptionOk = "OK (Will not get pregnant)";
  TextManager.contraceptionNg = "NG (Will get pregnant)";
  TextManager.contraceptionUnnecessary = "Unnecessary";
  TextManager.once = "Only once";
  TextManager.recordingCount = "%1 filmings";
  TextManager.childbirth = "Childbirth";
  TextManager.confirmRecording = "Film this AV?";
  TextManager.needParam = "Required AV Parameters";
  TextManager.actorRequiredSkill = "Required Actor Skills";
  TextManager.actorBetterSkill = "Effective Actor Skills";
  TextManager.paramRemain = "Remaining %1";
  TextManager.mainActor = "Main Actor";
  TextManager.subActor = "Sub Actor";
  TextManager.recordingContents = "Filming Contents";
  TextManager.confirmAvOk = "Proceed with AV filming?";
  TextManager.confirmAvCancel = "Cancel?";
  TextManager.confirmMakeJacket = "Is this okay?";
  TextManager.shootJacket1 = "Shot AV jacket";
  TextManager.shootJacket2 = "captured";
  TextManager.taikenbanNg = "Not available in trial version";
  TextManager.confirmAvSkip1 = "Previously filmed AVs can skip";
  TextManager.confirmAvSkip2 = "from jacket creation to Miyu's report";
  TextManager.placeholder = "Jacket Title";
  TextManager.hpNg = "Let's recover stamina";
  TextManager.avCount = "%1 %2nd time";
  TextManager.hireNg = "Hire a hypnotist";
  // Kigae
  TextManager.hint = "Hints for Acquisition";
  TextManager.curse = "Cannot change yet";
  TextManager.nakedOnly = "This accessory displays only when naked";
  TextManager.cosLabel = "Costume";
  TextManager.innerLabel = "Underwear";
  TextManager.acceLabel = "Accessory";
  TextManager.faceLabel = "Expression";
  TextManager.curseLabel = "Physical Change";
  TextManager.kigaeError1 = "Cannot change due to insufficient lewdness";
  TextManager.kigaeError2 = "Cannot change due to insufficient submission";
  TextManager.kigaeNormal = "Set costume for normal times";
  TextManager.kigaeChokyo = "Set costume for submissive times";
  TextManager.rakugakiLabel = "Doodle";
  TextManager.jacketLabel = "Main Image";
  TextManager.jacketTextLabel1 = "Text 1";
  TextManager.jacketTextLabel2 = "Text 2";
  TextManager.jacketAuto = "Auto";
  TextManager.jacketFont1 = "Font Color 1";
  TextManager.jacketFont2 = "Font Color 2";
  TextManager.jacketLayout = "Layout";
  TextManager.jacketBack = "Background";
  TextManager.jacketParts = "Custom Parts";
  TextManager.jacketTextInput = "Text Input";
  TextManager.jacketMan = "Actor Settings";
  TextManager.kigaeChikubi1 = "Reflecting darkened nipples if applicable.";
  TextManager.kigaeChikubi2 = "Current intensity %1%";
  TextManager.kigaePierce = "Build a piercing studio";
  TextManager.kigaeBodyModification1 =
    "Not reflected in standing picture, only in ero status screen's";
  TextManager.kigaeBodyModification2 = "open leg image";
  // Dousei
  TextManager.douseiRubber1 = "Will not get pregnant";
  TextManager.douseiRubberTaikenban2 = "Mandatory in the trial version";
  TextManager.douseiRubber2 = "Mandatory if no childbirth experience";
  TextManager.douseiAutoSyusan = "Skip pregnancy/childbirth events in cohabitation";
  TextManager.douseiAutoSyusan2 = "";
  TextManager.douseiNinshinSkip = "Skip pregnancy events in AV filming";
  TextManager.douseiNinshinSkip2 = "";
  TextManager.douseiTaikenbanNg = "Cannot set in trial version";
  TextManager.douseiTaikenbanNg2 = "Only Nonoka can cohabit";
  TextManager.douseiNinshin = "Pregnant";
  TextManager.douseiSyusan = "Childbirthing in cohabitation";
  TextManager.douseiJusei = "Fertilizing";
  TextManager.douseiCondom = "Using Condom";
  TextManager.douseiFriendship = "Friendship Level";
  TextManager.douseiMan = "Male";
  TextManager.douseiTitile = "%1's cohabitation room settings";
  TextManager.douseiAlready = "Cohabiting with %1";
  TextManager.douseiNinshinMan = "Pregnant with %1 while cohabiting";
  TextManager.douseiJenre = "Play Genre";
  TextManager.douseiName = "Name";
  TextManager.douseiManTitle1 =
    "Eligible if experienced finishing inside as the main actor";
  TextManager.douseiManTitle2 = "Increases play genres with improved friendship level";
  TextManager.douseiDecide = "Permission to play";
  TextManager.douseiFertilization = "Fertilization Rate: %1%";
  TextManager.douseiAlreadyDialog1 = "%1 is already cohabiting with %2";
  TextManager.douseiAlreadyDialog2 = "Cohabit with %1?";
  // SalesPage
  TextManager.screenShot1 = "Image saved in the screenshot folder.";
  TextManager.screenShot2 = "Feel free to share on DL channels etc.";
  TextManager.screenShot3 = "For erotic jacket images, please be mindful of uploading locations";
  TextManager.screenShot4 = "";
  // monster status
  TextManager.atkFlame = "ATK of fire attribute monster";
  TextManager.atkWater = "ATK of water attribute monster";
  TextManager.atkWood = "ATK of wood attribute monster";
  TextManager.hpFlame = "HP of fire attribute monster";
  TextManager.hpWater = "HP of water attribute monster";
  TextManager.hpWood = "HP of wood attribute monster";
  TextManager.atkFlame2 = "\\C[2]ATK of fire\\C[0] attribute monster";
  TextManager.atkWater2 = "\\C[1]ATK of water\\C[0] attribute monster";
  TextManager.atkWood2 = "\\C[3]ATK of wood\\C[0] attribute monster";
  TextManager.hpFlame2 = "\\C[2]HP of fire\\C[0] attribute monster";
  TextManager.hpWater2 = "\\C[1]HP of water\\C[0] attribute monster";
  TextManager.hpWood2 = "\\C[3]HP of wood\\C[0] attribute monster";
  // さらし者
  TextManager.syusanName = "%1's child %2 people";
  var ParamTitle = /** @class */ (function () {
    function ParamTitle(label, unit) {
      this._label = label;
      this._unit = unit;
    }
    ParamTitle.prototype.label = function () {
      return this._label;
    };
    ParamTitle.prototype.unit = function () {
      return this._unit;
    };
    return ParamTitle;
  })();
  getEroParamTitle = function (label) {
    switch (label) {
      case EroType.nakadashi:
        return getParamTitle("Internal", TextManager.countUnit);
      case EroType.anal:
        return getParamTitle("Anal Sex", TextManager.countUnit);
      case "baisyun":
        return getParamTitle("Prostitution", TextManager.countUnit);
      case "bukkake":
        return getParamTitle("Bukkake", TextManager.countUnit);
      case "seiekiNomu":
        return getParamTitle("Swallowing Semen", TextManager.countUnit);
      case "oshikkoNomu":
        return getParamTitle("Swallowing Pee", TextManager.countUnit);
      case EroType.syusan:
        return getParamTitle("Childbirth", TextManager.countUnit);
      case EroType.fela:
        return getParamTitle("Fellatio", TextManager.countUnit);
      case EroType.acme:
        return getParamTitle("Climax", TextManager.countUnit);
      case EroType.acme:
        return getParamTitle("Vaginal Orgasm", TextManager.countUnit);
      case "anal_acme":
        return getParamTitle("Anal Orgasm", TextManager.countUnit);
      case EroType.chichi:
        return getParamTitle("Reputation", TextManager.countUnit);
      case EroType.depravity:
        return getParamTitle("Depravity", "%1");
      case EroType.reputation:
        return getParamTitle("Reputation", "%1");
    }
    return getParamTitle("", TextManager.pointUnit);
  };
  getAvParamTitle = function (label) {
    switch (label) {
      case AvEroType.avCount:
        return getParamTitle("Filming Times", TextManager.countUnit);
      case AvEroType.popularity:
        return getParamTitle("Popularity", TextManager.pointUnit);
      case AvEroType.number:
        return getParamTitle("＃ Sold", TextManager.avUnit);
    }
    return getParamTitle("", TextManager.pointUnit);
  };
  getBodyParamTitle = function (label) {
    switch (label) {
      case BodyType.manko:
        return getParamTitle("Vagina", TextManager.pointUnit);
      case BodyType.cri:
        return getParamTitle("Clitoris", TextManager.pointUnit);
      case BodyType.chichi:
        return getParamTitle("Breasts", TextManager.pointUnit);
      case BodyType.anal:
        return getParamTitle("Anus", TextManager.pointUnit);
    }
    return getParamTitle("", TextManager.pointUnit);
  };
  getAvParamType = function (label) {
    switch (label) {
      case AvRequired.kiss:
        return "Mouth";
      case AvRequired.manko:
        return "Vagina";
      case AvRequired.chichi:
        return "Nipples";
      case AvRequired.cri:
        return "Clitoris";
      case AvRequired.anal:
        return "Anus";
      case AvRequired.sm:
        return "SM";
    }
    return "";
  };
  var cache = {};
  function getParamTitle(text, unit) {
    if (cache[text]) {
      return cache[text];
    }
    cache[text] = new ParamTitle(text, unit);
    return cache[text];
  }
  getTaneoyaName = function (taneoyaId) {
    switch (taneoyaId) {
      case TaneoyaId.banzoku:
        return $gameActors.actor(30).name();
      case TaneoyaId.chosyuhei:
        return $gameActors.actor(61).name();
      case TaneoyaId.charles:
        return $gameActors.actor(7).name();
      case TaneoyaId.goblin:
        return $gameActors.actor(85).name();
      case TaneoyaId.minister:
        return $gameActors.actor(13).name();
      case TaneoyaId.vagrant:
        return $gameActors.actor(93).name();
      case TaneoyaId.bar:
        return $gameActors.actor(113).name();
      case TaneoyaId.gray:
        return $gameActors.actor(16).name();
      case TaneoyaId.loli:
        return $gameActors.actor(140).name();
    }
    return "Unnamed";
  };
  getDestinationName = function (type) {
    switch (type) {
      case DestType.base:
        return "Headquarters";
      case DestType.room:
        return "The Three Sisters' Room";
      case DestType.dousei:
        return "Cohabitation Room";
      case DestType.baby:
        return "Nursery";
      case DestType.kaijin:
        return "Monster Creation Room";
      case DestType.locker:
        return "Locker Room";
    }
  };
}
// Syusan
TextManager.syusanCancel = "Stop";
TextManager._cancel = "Cancel";
CHITSU_TIGHTENING = {
  1: "Almost no experience\nExtremely tight vagina.",
  2: "Still very little experience,\nTightness remains the same.",
  3: "Average tightness.\nFeels slightly more experienced.",
  4: "Loose, but maybe that's good?",
  5: "Quite a loose vagina\nFeels well-used.",
  6: "Entering the territory of a \"loose woman.\"\nNot well-regarded by men.",
  7: "Overused loose vagina.\nMen continue to fail to climax.",
};
ANAL_TIGHTENING = {
  1: "Extremely tight anus.\nAlmost no experience.",
  2: "Tightly pinched butthole.",
  3: "Still a struggle to penetrate,\nGood tightness in the anus.",
  4: "Butthole feels more experienced.\nBeginner-level anus no more.",
  5: "Loosely expanded anus.",
  6: "Pathetically constantly expanded anus.",
  7: "Overly loose anus\nClearly well-used.",
};
MANKO_BLACKHEAD = {
  1: "Elegant pink.",
  2: "Still maintains its pinkness.",
  3: "Starting to darken a bit.",
  4: "Heavily used, discoloration is progressing.",
  5: "Well-used and\nDarkening.",
  6: "Used overly and\nConsiderably darkened.",
  7: "Darkened to a point\nThat repels men...",
};
REPUTATION_NONOKA = {
  1: "Widely popular as 'The Idol of Thunder'",
  2: "Even when captured,\nPopularity persists",
  3: "Hearts of many fans\nbegin to drift away",
  4: "Despised as 'The Fallen Idol'",
  5: "Scorned by most as 'The Whore Idol'",
};
REPUTATION_MARINA = {
  1: "Supported across generations as\n'The Mother of Light'",
  2: "Even when captured,\nPopularity persists",
  3: "Hearts of many fans\nbegin to drift away",
  4: "Scorned as 'Promiscuous', especially by women",
  5: "Scorned as 'Lewd Mother',\nAlmost no supporters remain",
};
REPUTATION_SAKI = {
  1: "High approval mainly at\nher former school",
  2: "Even when captured,\nPopularity persists",
  3: "Hearts of many fans\nbegin to drift away",
  4: "Almost no supporters left\nEven at her former school",
  5: "Expelled from the academy,\nShe has no place anymore...",
};
REPUTATION_KOKONA = {
  1: "The strongest, ultimate hero.",
  2: "Even when captured,\nPopularity persists",
  3: "Hearts of many fans\nbegin to drift away",
  4: "Almost no one remembers\nher strength anymore",
  5: "The ultimate, pathetic meat toilet",
};
DEPRAVITY_NONOKA = {
  1: "Never bow to evil,\nEven in defeat!",
  2: "Despite being filmed for AV,\nHer heart does not fall",
  3: "No way, my vagina's\nToo weak...?",
  4: "On the brink of mental collapse...",
  5: "Neither mind nor womb could\nResist the dick overlord...",
};
DEPRAVITY_MARINA = {
  1: "An unwavering\nnoble hero",
  2: "Heart starts\nTaking damage",
  3: "Body and mind\nbeginning to strain",
  4: "Just one step from falling...",
  5: "Fallen completely\nMother-slave of dick",
};
DEPRAVITY_SAKI = {
  1: "I won't give in to this!",
  2: "I won't lose to\na dick!",
  3: "Enough of the dick\nEnough of the dick...",
  4: "Someone, anyone,\nPlease help...",
  5: "Ahh! The dick is amazing!",
};
DEPRAVITY_KOKONA = {
  1: "I'll escape from here\nIn no time!",
  2: "Watch out,\nvillains!",
  3: "I must wipe out\nthe villains quickly...",
  4: "Quickly, quickly,\nI must flee...",
  5: "I can't resist His Dick anymore...",
};
SIKYU_TEXT = {
  1: "No childbirth experiences.\nBrand new womb.",
  2: "Experienced childbirth.\nNew mom's womb.",
  3: "Childbirth done a few times.\nWomb of a mother with many children.",
  4: "Realm of a large family.\nVeteran mother's womb.",
  5: "Can form a baseball team.\nSuperior mother's womb.",
  6: "Can aim for Guinness.\nHeavily birthed womb.",
  7: "Almost daily childbirth.\nWomb of a hero in the depopulated world.",
};
function getPunishEroName(itemId) {
  switch (itemId) {
    case Nore.PunishCommad.NAKADASHI:
      return "Confess internal times";
    case Nore.PunishCommad.ACME:
      return "Confess climax times";
    case Nore.PunishCommad.ANAL:
      return "Confess anal experiences";
    case Nore.PunishCommad.SHOJO:
      return "About virginity loss";
    case Nore.PunishCommad.PUNISH:
      return "Impose punishment";
    case Nore.PunishCommad.LABIA:
      return "Confess about labia piercings";
    case Nore.PunishCommad.END:
      return "End";
    default:
      return "";
  }
}
// Description of Milk
function getMilkText(actorId) {
  switch (actorId) {
    case 1:
      return "Sweet and smooth milk\nSupposedly has a refined taste like royalty.\n\nThough the quantity is high, it often runs scarce due to a large fanbase.";
    case 2:
      return "Rich flavor.\nHas a gentle sweetness that follows.\n\nQuantity is decent.\nTanya supposedly prefers giving it to babies, so it's scarcely available.";
    case 3:
      return "Milk with an elegant sweetness.\nPossibly due to magic power, the sweetness is rich.\n\nThough the quantity is high, it often runs scarce due to a large fanbase.";
    case 4:
      return "Light taste. The gentle sweetness is popular.\n\nQuantity is low, leading to a competitive battle among maiden enthusiasts and sister milk experts.";
    case 5:
      return "Light taste. Has a smooth aftertaste, making it easy to drink.\n\nExtremely high quantity, popular among customers who enjoy milk from strict women.";
    case 6:
      return "Rich in sweetness, but the amount produced at once is small.\n\nApparently, there's a fierce competition among enthusiasts of maiden milk.";
    case 7:
      return "Flavor is fairly rich.\nAbundant in vitality and magic power.\n\nA decent quantity, it's popular among a wide range of people, from noblewomen to homosexuals and magicians.";
    case 10:
      return "Light flavor. Refreshing aftertaste, promising in taste.\n\nLimited quantity and is especially popular among fans of Serena, the mother and hero.";
    case 12:
      return "Very rich flavor yet bold.\nThe aftertaste has a certain elegance.\n\nHowever, the quantity is said to be very low, leading to competition among royal fans and her fans as an adventurer.";
  }
}
function getParamTitle(param) {
  switch (param) {
    case Parameter.anal:
      return "Anal Looseness";
    case Parameter.omanko:
      return "Vaginal Looseness";
    case Parameter.shame:
      return "Shame Level";
    case Parameter.sm:
      return "Masochism Level";
  }
}
function getAbilityTitle(ability) {
  switch (ability) {
    case Ability.hp:
      return "Condition";
    case Ability.tolerance:
      return "Man Acceptance Level";
    //case Ability.appearance: return 'Appearance';
    case Ability.popularity:
      return "Popularity";
    case Ability.childbirth:
      return "Number of Births";
    case Ability.cuteness:
      return "Cuteness";
    case Ability.beautiful:
      return "Beauty";
  }
}


code:
function initVocabEn() {
  // Title
  TextManager._newGame = "New Game";
  TextManager._continue_ = "Continue";
  TextManager.recollection = "Memories";
  TextManager._options = "Options";
  TextManager._gameEnd = "Quit";
  TextManager.gameActive = "Always Active";
  TextManager.autoSpeed = "Message Auto Speed";
  TextManager.autoSpeed1 = "Slow";
  TextManager.autoSpeed2 = "Normal";
  TextManager.autoSpeed3 = "Fast";
  TextManager.autoSpeed4 = "Quite Fast";
  TextManager.autoSpeed5 = "Fastest";
  // Menu
  TextManager.language = "Language";
  TextManager._save = "Save";
  TextManager._load = "Load";
  TextManager.kigae = "Costume";
  TextManager.count = "%1回";
  TextManager.cohabiting = "Cohabiting →";
  TextManager.avNg1 = "同棲妊娠中は自動で出産するまで";
  TextManager.avNg2 = "撮影できません";
  TextManager.douseiNg1 = "同棲妊娠中は自動で出産するまで";
  TextManager.douseiNg2 = "同棲相手の変更はできません";
  TextManager.douseiNg3 = "ノノカが出産するまで変更できません";
  TextManager.nextTarget = "Next Goal";
  TextManager.target_0_1 =
    "Recruit actors and increase the number of adult films you can shoot!";
  TextManager.target_0_2 = "Let's build a room for Marina to live together.";
  TextManager.target_0_3 = "Let's train the monster.";
  TextManager.target_1_1 = "Let's shoot a Senri's AV.";
  TextManager.target_1_3 = "Let's build a factory.";
  TextManager.target_1_4 = "Let's shoot a Senri's Sex AV.";
  TextManager.target_1_5 = "Select a decisive battle and defeat the heroes!";
  TextManager.target_1_6 = "Let's occupy the antenna base.";
  TextManager.target_1_7 = "Dr.ゲーリーとの通信をクリックしましょう";
  TextManager.target_2_1 =
    "Let's shoot a video of Nonoka losing her virginity.";
  TextManager.target_2_2 = "Let's build a shared room.";
  TextManager.target_2_3 = "Shoot a video of the birth of a child by Nonoka!";
  TextManager.target_2_4 =
    "Put a monster into a battle member in the “Formation” section.";
  TextManager.target_2_5 =
    "Let's destroy the base near Marina's house in battle.";
  TextManager.target_2_6 = "Let's execute a decisive battle with Marina.";
  TextManager.target_2_7 =
    "Let's have lots of children and win the battle with Marina!";
  TextManager.target_2_8 = "Let Nonoka and Busujima live together.";
  TextManager.target_2_10 = "Build a soup kitchen.";
  TextManager.target_2_11 =
    "Let Nonoka have more children and strengthen our allies.";
  TextManager.target_2_12 =
    "Let's watch the live-in h until Nonoka gets pregnant.";
  TextManager.target_2_13 = "Wait until Nonoka is ready to give birth.";
  TextManager.target_3_1 = "Let's shoot Marina's AV.";
  TextManager.target_3_2 = "Build a Radar Device.";
  TextManager.target_3_5 = "Let's shoot a porno of Marina and Taro.";
  TextManager.target_3_6 = "Let's have Marina and Taro live together.";
  TextManager.target_3_7 = TextManager.target_2_10;
  TextManager.target_3_8 = "Let's win the decisive battle against Saki.";
  TextManager.target_4_1 = "Let's shoot Saki's AV.";
  TextManager.target_4_2 = "Let's build a room for Saki to live together.";
  TextManager.target_4_3 = "Let Saki and Kasuzo live together.";
  TextManager.target_4_4 = "Let's build a labo LV1.";
  TextManager.target_4_8 = "Let's produce 14 monsters.(%1/14)";
  TextManager.target_4_9 = "Let's build a dummy factory.";
  TextManager.target_4_10 = "Fight a decisive battle and defeat the heroes!";
  TextManager.target_4_11 = "Let's win the decisive battle against Cocona.";
  TextManager.target_4_12 = "Let's wait for Miyu's espionage.";
  TextManager.target_5_1 = "Let's shoot Kokona's AV.";
  TextManager.target_5_2 = "Let's build Kokona's hared  room.";
  TextManager.target_5_3 = "Let's build a labo LV2.";
  TextManager.target_5_10 = "Take control of the enemy hero's defense base!";
  TextManager.target_5_11 = "Let's build a missile base.";
  TextManager.target_5_12 = "Let's attack down the heroes' headquarters.";
  // Option
  TextManager._alwaysDash = "Always Dash";
  TextManager._touchUI = "Touch UI";
  TextManager._bgmVolume = "BGM Volume";
  TextManager._bgsVolume = "BGS Volume";
  TextManager._meVolume = "ME Volume";
  TextManager._seVolume = "SE Volume";
  TextManager._voiceVolume = "VOICE Volume";
  TextManager.showSikyu = "Cross Section View";
  TextManager.windowAlpha = "Message Window Alpha";
  TextManager.skipKey = "Message Skip Key";
  TextManager.rightClickSkip = "Right-click to skip msgs";
  TextManager.battleSe = "Battle SE";
  TextManager.autoTimeEvent = "Event Auto-Execution";
  TextManager.simpleMenu = "Simple display of left menu";
  TextManager.outerTransparentEnabled = "Change alpha of clothing with ←→ keys";
  // Slg
  TextManager.av = "Shoot";
  TextManager.facility = "Facilities";
  TextManager.information = "情報";
  TextManager.character = "キャラ";
  TextManager.decisiveBattle = "Decisive Battle";
  TextManager.money = "お金";
  TextManager.jusei = "%1 will get pregnant";
  TextManager.toNinshin = "%1 is pregnant";
  TextManager.changeActor = "Update Actor Candidate";
  TextManager.saleAv = "Selling AV";
  // decisiveBattle
  TextManager.decisiveBattleStage1 = "Destroy the antenna base";
  TextManager.decisiveBattleStage1_2 = "Dr. Gary's support";
  TextManager.decisiveBattleConfirm = "Execute a decisive battle?";
  TextManager.decisiveBattleStage2 = "Destroy base near Marina's house.";
  TextManager.decisiveBattleStage3 = "Build a Radar Device.";
  TextManager.decisiveBattleStage4 = "Build a dummy factory";
  TextManager.decisiveBattleStage5 = "Build missile facilities";
  TextManager.decisiveBattleStage5_2 = "Attack the hero's defensive base";
  TextManager.decisiveBattleDialog = "Condition not met.";
  TextManager.decisiveBattleMonster = "Number of monsters";
  // Man
  TextManager.soupKichen = "Hire Actors";
  TextManager.manageMan = "Manage Actors";
  TextManager.hireMan = "Hire(%1Ｇ)";
  TextManager.manExperience = "経験情報";
  TextManager.noSoupKichenFacility = "炊き出し所を建設しましょう";
  TextManager.noSoupKichenMan = "勧誘できる男優はいません";
  // Military
  TextManager.selectTarget = "Invasion Destination";
  TextManager.battleDifficulty = "Enemy Strength";
  TextManager.areaReward = "Area Reward";
  TextManager.clearReward = "Clear Reward";
  TextManager.invasion = "Invasion";
  TextManager._formation = "Formation";
  TextManager.inBattle = "現在戦闘中!";
  TextManager.interval = "SPD";
  TextManager.confirmBattle = "Do you want to invade this area?";
  TextManager.rewardDesc1 = "Nonoka's AV will be released.";
  TextManager.rewardDesc2 = "We can catch Marina.";
  TextManager.rewardDesc3 = "Nonoka's AV will be released.";
  TextManager.rewardDesc4 = "A decisive battle with Marina will be possible.";
  TextManager.rewardDesc5 =
    "Attack power of allied monsters is increased by 5%.";
  TextManager.rewardDesc6 = "Enemy hero HP is reduced by 5%.";
  TextManager.rewardDesc7 = "We can catch the saki.";
  TextManager.rewardDesc8 = "Cocona can be captured";
  TextManager.rewardDesc9 = "Marina's AV will be released.";
  TextManager.rewardDesc10 = "Kanami's AV will be released.";
  TextManager.rewardDesc11 = "The final battle can be executed.";
  TextManager.rewardDesc12 = "There is no way to win.";
  TextManager.rewardDesc13 = "We can expose Nonoka to the people.";
  TextManager.rewardDesc14 = "We can expose Marina to the people.";
  TextManager.rewardDesc15 = "We can expose Saki to the people.";
  TextManager.rewardDesc16 = "We can expose Kokona to the people.";
  TextManager.rewardDesc17 = "It is a condition of the decisive battle";
  TextManager.rewardDesc18 = "The ending changes.";
  TextManager.rewardDesc19 = "There is no way to win.";
  TextManager.rewardDesc20 = "The game will be clear. Don't forget to save.";
  TextManager.rewardDesc21 = "Even if we win, we can't catch her.";
  TextManager.enemyDesc1 =
    "The opponent is seriously injured and his ability is greatly reduced.\nNow is the time to victory!";
  TextManager.enemyDesc2 =
    "The opponent's broad attack was blocked!\nIt's a contest of strength!";
  TextManager.enemyDesc3 =
    "Kanami, you don't stand a chance! \n Draw your troops!";
  TextManager.enemyDesc4 =
    "If we can control this base,\nit will make it easier to move in the future.";
  TextManager.enemyDesc5 = "We would be able to shoot at a school in Nonoka.";
  TextManager.enemyDesc6 = "Let's expose Nonoka in front of the citizens.";
  TextManager.enemyDesc7 = "Let's give the monster king his due.";
  TextManager.enemyDesc8 = "Destroy the brainwashing facility!";
  TextManager.enemyDesc9 =
    "Let's say you want to get rid of the guys\n who are getting in the way of your porn shoot.";
  TextManager.enemyDesc10 =
    "Let's say you want to get rid of the guys\n who are getting in the way of your porn shoot.";
  TextManager.enemyDesc11 = "Let's expose Saki in front of the citizens.";
  TextManager.enemyDesc12 = "Let's expose Marina in front of the citizens.";
  TextManager.enemyDesc13 = "Defeat the enemy to film Sak's porn at school.";
  TextManager.enemyDesc14 = "Purge Dr. Gary!";
  TextManager.enemyDesc15 =
    "We must destroy this base \nin order to kidnap Marina's son!";
  TextManager.enemyDesc16 =
    "Kanami, you can't beat Nonoka without a plan!\nCome back before you get hurt!";
  TextManager.enemyDesc17 =
    "Neutralize this base in order to\n film Nonoka's porn in the city!";
  TextManager.enemyDesc18 =
    "Attack the base that Marina defends \nand capture Marina!";
  TextManager.enemyDesc19 =
    "It's finally the final battle!\nDefeat Kokuryu, our mother's avenger!";
  // Formation
  TextManager.formationLevelUp = "Do you want to level up?";
  TextManager.levelUpSec = "%1sec";
  TextManager.levelUpMinSec = "%1m %2s";
  TextManager.inTraining = "%1 is in training";
  TextManager.inTraining2 = "In training";
  TextManager.formationTarget = "← Easy to be targeted";
  TextManager.reset = "Reset";
  TextManager.flame = "Flame";
  TextManager.water = "Water";
  TextManager.wood = "Wood";
  TextManager.probability = "probability";
  TextManager.passive = "Passive Skill";
  TextManager.training = "Training";
  TextManager.trainingTime = "Training Time";
  TextManager.learnNewSkill = "Learn New SKILL";
  TextManager.learnSkillLv = "Learn LV: ";
  TextManager.detailLvUp = "LV up";
  TextManager.detailLvUpCost = "Cost";
  // EroStatus
  TextManager.peopleUnit = "%1";
  TextManager.countUnit = "%1";
  TextManager.pointUnit = "%1 　";
  TextManager.avUnit = "%1";
  TextManager.normal = "通常";
  TextManager.pregnant = "妊娠中";
  TextManager.pregnant2 = "%1の子を妊娠中";
  TextManager.father = "種親";
  TextManager.syusanOther = "the other %1";
  TextManager.syusanZero = "なし";
  // Save
  TextManager._file = "File";
  TextManager._autosave = "Auto Save";
  TextManager.chapter = "Ch %1";
  TextManager.saveLatest = "Latest %1";
  TextManager._saveMessage = "Which file do you want to save to?";
  TextManager._loadMessage = "Which files do you want to load?";
  TextManager.prologue = "prologue";
  // Actor
  TextManager.showEroStatus = "エロステータス表示";
  TextManager.charAv = "Shoot";
  TextManager.charKigae = "Costume";
  TextManager.charDousei = "Cohabitation";
  TextManager.charStatus = "Status";
  // Facility
  TextManager.levelUpFacility = "Build Cost %1G";
  TextManager.underConstruction = "Building a %1";
  TextManager.facilityTaikenbanNg = "体験版ではこの施設を建設できません";
  TextManager.facilityFactory1 = "Battle mode will be opened.";
  TextManager.facilityFactory2 = "Combatants will be a little stronger.";
  TextManager.facilityConstrunction = "Time";
  // Av
  TextManager.setMainMan = "Let's set the main actor.";
  TextManager.setSubMan1 = "Set up your actor to meet AV parameters!";
  TextManager.setSubMan2 = "Sub actor adds only half of the parameters.";
  TextManager.setAvSkill = "Set up an actor with required skills.";
  TextManager.canMakeAv = "AV shooting is available!";
  TextManager.canMakeAv2nd = "２回目以降の撮影は、難易度が上昇します";
  TextManager.canMakeAv2nd3 =
    "Childbirth AV does not change in difficulty after the second";
  TextManager.canMakeAv2nd4 = "However, rewards will be reduced";
  TextManager.canMakeAv2nd5 =
    "There is no change in difficulty for this AV after the second";
  TextManager.avResult1 = "Amateur porn star %1's %2(th) film";
  TextManager.avResult2 = "Sales Result Report";
  TextManager.avReward = "Reward";
  TextManager.contraception = "Contraception";
  TextManager.contraceptionOk = "OK (not pregnant)";
  TextManager.contraceptionNg = "NG (get pregnant)";
  TextManager.contraceptionUnnecessary = "Unnecessary";
  TextManager.once = "Only Once";
  TextManager.recordingCount = "Shoot %1 time(s)";
  TextManager.childbirth = "Childbirth";
  TextManager.confirmRecording = "Do you want to shoot this Av?";
  TextManager.needParam = "Required AV Parameters";
  TextManager.actorRequiredSkill = "Required Actor Skills";
  TextManager.actorBetterSkill = "Effective Actor Skills";
  TextManager.paramRemain = "Remain %1";
  TextManager.mainActor = "Main Actor";
  TextManager.subActor = "Sub Actor";
  TextManager.recordingContents = "Contents";
  TextManager.confirmAvOk = "Do you shoot AV?";
  TextManager.confirmAvCancel = "Do you want to cancel?";
  TextManager.confirmMakeJacket = "Is this alright with you?";
  TextManager.shootJacket1 = "AV jacket was shot.";
  TextManager.shootJacket2 = "";
  TextManager.taikenbanNg = "体験版では不可";
  TextManager.confirmAvSkip1 = "Once filmed, AV can be skipped from ";
  TextManager.confirmAvSkip2 = " jacket creation to Miyu's report.";
  TextManager.placeholder = "jacket title";
  TextManager.hpNg = "Recover the girl's HP.";
  TextManager.avCount = "%1 %2回目";
  TextManager.hireNg = "催眠術師を雇用しましょう";
  // Kigae
  TextManager.hint = "獲得のヒント";
  TextManager.curse = "このアクセは物理的に外すことができません";
  TextManager.nakedOnly = "このアクセは裸の時のみ表示されます";
  TextManager.cosLabel = "Costume";
  TextManager.innerLabel = "Inner";
  TextManager.acceLabel = "Accessory";
  TextManager.faceLabel = "Facial Expression";
  TextManager.curseLabel = "Body Modification";
  TextManager.kigaeError1 = "淫乱度が足りないために装備変更できません";
  TextManager.kigaeError2 = "服従度が足りないために装備変更できません";
  TextManager.kigaeNormal = "通常時の衣装の設定";
  TextManager.kigaeChokyo = "肉便器時の衣装の設定";
  TextManager.rakugakiLabel = "Graffiti";
  TextManager.jacketLabel = "Main Image";
  TextManager.jacketTextLabel1 = "Text 1";
  TextManager.jacketTextLabel2 = "Text 2";
  TextManager.jacketAuto = "Auto";
  TextManager.jacketFont1 = "Font 1";
  TextManager.jacketFont2 = "Font 2";
  TextManager.jacketLayout = "Layout";
  TextManager.jacketBack = "Background";
  TextManager.jacketParts = "Custom Parts";
  TextManager.jacketTextInput = "Input Texts";
  TextManager.jacketMan = "Actor";
  TextManager.kigaeChikubi1 =
    "If the nipples are darkened, it will reflect this.";
  TextManager.kigaeChikubi2 = "Current concentration 1%";
  TextManager.kigaePierce = "Build a piercing studio.";
  TextManager.kigaeBodyModification1 =
    "立ち絵には反映されず、エロステータス画面の";
  TextManager.kigaeBodyModification2 = "開脚画像に反映されます";
  // Dousei
  TextManager.douseiRubber1 = "Prevent Pregnancy";
  TextManager.douseiRubber2 = "Required if no childbirth experience";
  TextManager.douseiAutoSyusan = "Skip pregnancy and birth ";
  TextManager.douseiAutoSyusan2 = "events in cohabitation.";
  TextManager.douseiNinshinSkip = "Skip pregnancy events ";
  TextManager.douseiNinshinSkip2 = "in porn shoots";
  TextManager.douseiTaikenbanNg = "体験版では設定できません";
  TextManager.douseiTaikenbanNg2 = "ノノカのみ同棲可能です";
  TextManager.douseiNinshin = "while pregnant";
  TextManager.douseiSyusan = "while childbirth";
  TextManager.douseiJusei = "fertilization";
  TextManager.douseiCondom = "using condom";
  TextManager.douseiFriendship = "Friendship";
  TextManager.douseiMan = "Man";
  TextManager.douseiTitile = "%1's shared room";
  TextManager.douseiAlready = "Living with %1";
  TextManager.douseiNinshinMan = "Pregnant living together with %1";
  TextManager.douseiJenre = "Play Genre";
  TextManager.douseiName = "Name";
  TextManager.douseiManTitle1 =
    "It's for men who have had a sexual intercourse.";
  TextManager.douseiManTitle2 =
    "More genres to play as her friendship level increases.";
  TextManager.douseiDecide = "プレイを許可してください";
  TextManager.douseiFertilization = "Pregnancy:%1%";
  TextManager.douseiAlreadyDialog1 = "%1 is already living with %2.";
  TextManager.douseiAlreadyDialog2 = "Can I let them live with %1？";
  // SalesPage
  TextManager.screenShot1 = "The image has been saved";
  TextManager.screenShot2 = "in the screenshot folder.";
  TextManager.screenShot3 = "エッチなジャケット画像の場合は";
  TextManager.screenShot4 = "アップロード先にご注意ください";
  // monster status
  TextManager.atkFlame = "ATK of flame monsters";
  TextManager.atkWater = "ATK of water monsters";
  TextManager.atkWood = "ATK of wood monsters";
  TextManager.hpFlame = "HP of flame monsters";
  TextManager.hpWater = "HP of water monsters";
  TextManager.hpWood = "HP of wood monsters";
  TextManager.atkFlame2 = "\\C[2]Flame\\C[0] monster's ATK";
  TextManager.atkWater2 = "\\C[1]Water\\C[0] monster's ATK";
  TextManager.atkWood2 = "\\C[3]Wood\\C[0] monster's ATK";
  TextManager.hpFlame2 = "\\C[2]Flame\\C[0] monster's HP";
  TextManager.hpWater2 = "\\C[1]Water\\C[0] monster's HP";
  TextManager.hpWood2 = "\\C[3]Wood\\C[0] monster's HP";
  // さらし者
  TextManager.syusanName = "%1の子を%2人";
  var ParamTitle = /** @class */ (function () {
    function ParamTitle(label, unit) {
      this._label = label;
      this._unit = unit;
    }
    ParamTitle.prototype.label = function () {
      return this._label;
    };
    ParamTitle.prototype.unit = function () {
      return this._unit;
    };
    return ParamTitle;
  })();
  getEroParamTitle = function (label) {
    switch (label) {
      case EroType.nakadashi:
        return getParamTitle("Creampie", TextManager.countUnit);
      case EroType.anal:
        return getParamTitle("Anal Sex", TextManager.countUnit);
      case "baisyun":
        return getParamTitle("売春", TextManager.countUnit);
      case "bukkake":
        return getParamTitle("ぶっかけ", TextManager.countUnit);
      case "seiekiNomu":
        return getParamTitle("精液ごっくん", TextManager.countUnit);
      case "oshikkoNomu":
        return getParamTitle("おしっこごっくん", TextManager.countUnit);
      case EroType.syusan:
        return getParamTitle("Childbirth", TextManager.countUnit);
      case EroType.fela:
        return getParamTitle("Blowjob", TextManager.countUnit);
      case EroType.acme:
        return getParamTitle("Acme", TextManager.countUnit);
      case EroType.acme:
        return getParamTitle("膣イキ", TextManager.countUnit);
      case "anal_acme":
        return getParamTitle("アナルイキ", TextManager.countUnit);
      case EroType.chichi:
        return getParamTitle("乳搾り", TextManager.countUnit);
      case EroType.depravity:
        return getParamTitle("Depravity", "%1");
      case EroType.reputation:
        return getParamTitle("Reputation", "%1");
    }
    return getParamTitle("", TextManager.pointUnit);
  };
  getAvParamTitle = function (label) {
    switch (label) {
      case AvEroType.avCount:
        return getParamTitle("Number of Titles", TextManager.countUnit);
      case AvEroType.popularity:
        return getParamTitle("人気度", TextManager.pointUnit);
      case AvEroType.number:
        return getParamTitle("Number of Sales", TextManager.avUnit);
    }
    return getParamTitle("", TextManager.pointUnit);
  };
  getBodyParamTitle = function (label) {
    switch (label) {
      case BodyType.manko:
        return getParamTitle("おまんこ", TextManager.pointUnit);
      case BodyType.cri:
        return getParamTitle("クリ", TextManager.pointUnit);
      case BodyType.chichi:
        return getParamTitle("胸", TextManager.pointUnit);
      case BodyType.anal:
        return getParamTitle("アナル", TextManager.pointUnit);
    }
    return getParamTitle("", TextManager.pointUnit);
  };
  getAvParamType = function (label) {
    switch (label) {
      case AvRequired.kiss:
        return "Mouth";
      case AvRequired.manko:
        return "Vagina";
      case AvRequired.chichi:
        return "Nipple";
      case AvRequired.cri:
        return "Clitoris";
      case AvRequired.anal:
        return "Anus";
      case AvRequired.sm:
        return "SM";
    }
    return "";
  };
  var cache = {};
  function getParamTitle(text, unit) {
    if (cache[text]) {
      return cache[text];
    }
    cache[text] = new ParamTitle(text, unit);
    return cache[text];
  }
  getTaneoyaName = function (taneoyaId) {
    switch (taneoyaId) {
      case TaneoyaId.banzoku:
        return $gameActors.actor(30).name();
      case TaneoyaId.chosyuhei:
        return $gameActors.actor(61).name();
      case TaneoyaId.charles:
        return $gameActors.actor(7).name();
      case TaneoyaId.goblin:
        return $gameActors.actor(85).name();
      case TaneoyaId.minister:
        return $gameActors.actor(13).name();
      case TaneoyaId.vagrant:
        return $gameActors.actor(93).name();
      case TaneoyaId.bar:
        return $gameActors.actor(113).name();
      case TaneoyaId.gray:
        return $gameActors.actor(16).name();
      case TaneoyaId.loli:
        return $gameActors.actor(140).name();
    }
    return "名称未設定";
  };
  getDestinationName = function (type) {
    switch (type) {
      case DestType.base:
        return "Headquarters";
      case DestType.room:
        return "3 Sisters' Room";
      case DestType.dousei:
        return "Shared Room";
      case DestType.baby:
        return "託児所";
      case DestType.kaijin:
        return "Labo";
      case DestType.locker:
        return "Locker Room";
    }
  };
}
// Syusan
TextManager.syusanCancel = "Cancel";
TextManager._cancel = "Cancel";
/*
CHITSU_TIGHTENING = {
    '1':'締まり抜群、最高の\n極上ロリまんこ',
    '2':'まだまだキツキツな\nロリまんこ',
    '3':'平均的な締まり具合\n少しこなれてきた感',
    '4':'ユルマンといわれる領域に\n達した',
    '5':'自他ともに認めるガバガバまんこ\nレオがかわいそう',
};
ANAL_TIGHTENING = {
    '1':'キツキツアナル。\nほぼ経験なし',
    '2':'挿れるのにまだ苦労する、\n締まり良きアナル',
    '3':'少しこなれてきた尻穴。\n脱初心者アナル',
    '4':'ゆるゆるになったアナル。\n街に数人レベル',
    '5':'ガバガバなアナル。\n国に数人いるかレベル',
};
*/
function getPunishEroName(itemId) {
  switch (itemId) {
    case Nore.PunishCommad.NAKADASHI:
      return "中出し回数を告白させる";
    case Nore.PunishCommad.ACME:
      return "絶頂回数を告白させる";
    case Nore.PunishCommad.ANAL:
      return "アナルの経験を告白させる";
    case Nore.PunishCommad.SHOJO:
      return "処女喪失について";
    case Nore.PunishCommad.PUNISH:
      return "罰を与える";
    case Nore.PunishCommad.LABIA:
      return "ラビアピアスについて告白させる";
    case Nore.PunishCommad.END:
      return "終える";
    default:
      return "";
  }
}
// 母乳の説明文
function getMilkText(actorId) {
  switch (actorId) {
    case 1:
      return "甘くのど越しの良い母乳\n王族のものらしく上品な味がする。\n\n一度の量は多いがファンが多く品薄になりやすい。";
    case 2:
      return "味は濃厚系。\nあとから来る優しい甘みがある。\n\n量はそこそこ。\nターニャが赤ん坊にあげたがるので量がなかなか出回らないらしい。";
    case 3:
      return "上品な甘さの母乳。\n魔力量ゆえか甘さが濃厚。\n\n一度の量は多いがファンが多く品薄になりやすい。";
    case 4:
      return "味は薄味。優しい甘みが人気だそう。\n\n量が少なく、少女愛好家やシスター母乳専門家が争奪戦を\n繰り広げているらしい。";
    case 5:
      return "味は薄味。サラりとした後味で飲みやすいらしい。\n\n量がかなり多く、お堅い系の女性の母乳を飲みたがる客に人気が高いそうだ。";
    case 6:
      return "甘さが濃厚だが、一度に出る量は少ない。\n\n少女母乳の愛好家が争奪戦を繰り広げているらしい。";
    case 7:
      return "味はまぁまぁの濃さ。\nかなりの生命力と魔力に溢れている。\n\n量はなかなか多い。\n貴族の女性から男色家、魔術師まで幅広い者に人気のようだ。";
    case 10:
      return "味は薄味。さわやかな後味で、可能性を感じる味。\n\n量も少なく、母親で、勇者であるセレナのファンから特に人気が高いようだ。";
    case 12:
      return "味は大味ながらとても濃厚。\n後味にどこか上品さがあるらしい。\n\nただ、量はとても少ないらしく、王族ファンや、\n冒険者としての彼女のファンの間で取り合いになっているそうだ。";
  }
}
function getParamTitle(param) {
  switch (param) {
    case Parameter.anal:
      return "アナルガバ度";
    case Parameter.omanko:
      return "おまんこガバ度";
    case Parameter.shame:
      return "恥辱度";
    case Parameter.sm:
      return "マゾ度";
  }
}
function getAbilityTitle(ability) {
  switch (ability) {
    case Ability.hp:
      return "体調";
    case Ability.tolerance:
      return "男許容度";
    //case Ability.appearance: return '容姿';
    case Ability.popularity:
      return "人気";
    case Ability.childbirth:
      return "出産数";
    case Ability.cuteness:
      return "かわいらしさ";
    case Ability.beautiful:
      return "美しさ";
  }
}