var actorMap = {}; var actorGameMap = {}; var actor1Map = {}; var actor2Map = {}; var actorEroMap = {}; var actorEro2Map = {}; var actorEro3Map = {}; var clearActorIndex = 0; function clearActorMap() { actorMap = {}; actorGameMap = {}; actor1Map = {}; actor2Map = {}; actorEroMap = {}; actorEro2Map = {}; actorEro3Map = {}; setNaked(false); root.log('clearActorMap' + clearActorIndex++); } ContentRenderer.drawUnitFace = function(x, y, unit, isReverse, alpha, isBig) { var handle = unit.getFaceResourceHandle(); var pic = GraphicsRenderer.getGraphics(handle, GraphicsType.FACE); if (pic === null) { return; } if (isBig) { var u; var val = getNameByVal2(unit.getName()); var switchId = getEroEquipSwitchId(val, -2); var isOn = root.getMetaSession().getGlobalSwitchTable().isSwitchOn(switchId); if (isEro() || isOn) { var session = root.getCurrentSession(); if (root.getCurrentScene() === SceneType.FREE && session != null) { var mapType = session.getCurrentMapInfo().getMapType(); if (mapType === MapType.NORMAL) { u = getActorEro3(unit); } else { u = getActorEro2(unit); } } else { u = getActorEro2(unit); } } else { u = getActor2(unit); } if (u) { handle = u.getFaceResourceHandle(); pic = GraphicsRenderer.getGraphics(handle, GraphicsType.FACE); } else { x += 20; y += 12; } } pic.setReverse(isReverse); pic.setAlpha(alpha); this._drawShrinkFace(x, y, handle, pic); }; function getActor1(unit) { if (! unit) { return null } if (actor1Map[unit.getId()] !== undefined) { if (actor1Map[unit.getId()] == null) { return null; } else { return actor1Map[unit.getId()]; } } 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); if ((name + '1') == u.getName()) { actor1Map[unit.getId()] = u; return u; } } actor1Map[unit.getId()] = null; return null; } } function getActorByName2(name) { if (actorMap[name] !== undefined) { if (actorMap[name] == null) { return null; } else { return actorMap[name]; } } else { var list = root.getBaseData().getPlayerList(); for (var i = 0; i < list.getCount(); i++) { var u = list.getData(i); if (u.getName() == name) { actorMap[name] = u; return u; } } actorMap[name] = null; return null; } } function getActorByName3(name) { if (actorGameMap[name] !== undefined) { if (actorGameMap[name] == null) { return null; } else { return actorGameMap[name]; } } else { var list = root.getCurrentSession().getPlayerList(); for (var i = 0; i < list.getCount(); i++) { var u = list.getData(i); if (u.getName() == name) { actorGameMap[name] = u; return u; } } actorGameMap[name] = null; return null; } } function getActor2(unit) { if (actor2Map[unit.getId()] !== undefined) { if (actor2Map[unit.getId()] == null) { return null; } else { return actor2Map[unit.getId()]; } } 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); if ((name + '2') == u.getName()) { actor2Map[unit.getId()] = u; return u; } } actor2Map[unit.getId()] = null; return null; } } function getActorEro(unit) { if (! unit) { return null; } if (actorEroMap[unit.getId()] !== undefined) { if (actorEroMap[unit.getId()] == null) { return null; } else { return actorEroMap[unit.getId()]; } } else { var name = getSearchName(unit); var list = root.getBaseData().getPlayerList(); for (var i = 0; i < list.getCount(); i++) { var u = list.getData(i); if ((name + '_ero') == u.getName()) { actorEroMap[unit.getId()] = u; return u; } } actorEroMap[unit.getId()] = null; return null; } } function getActorEro2(unit) { if (actorEro2Map[unit.getId()] !== undefined) { if (actorEro2Map[unit.getId()] == null) { return null; } else { return actorEro2Map[unit.getId()]; } } else { var name = getSearchName(unit); var list = root.getBaseData().getPlayerList(); for (var i = 0; i < list.getCount(); i++) { var u = list.getData(i); if ((name + '_ero2') == u.getName()) { actorEro2Map[unit.getId()] = u; return u; } } actorEro2Map[unit.getId()] = null; return null; } } function getActorEro3(unit) { if (actorEro3Map[unit.getId()] !== undefined) { if (actorEro3Map[unit.getId()] == null) { return null; } else { return actorEro3Map[unit.getId()]; } } else { var name = getSearchName(unit); var list = root.getBaseData().getPlayerList(); for (var i = 0; i < list.getCount(); i++) { var u = list.getData(i); if ((name + '_ero3') == u.getName()) { actorEro3Map[unit.getId()] = u; return u; } } actorEro3Map[unit.getId()] = null; return null; } } function getSearchName(unit) { var name = unit.getName(); 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); } return name; } ContentRenderer._drawShrinkFace = function(xDest, yDest, handle, pic) { var xSrc, ySrc; var destWidth = GraphicsFormat.FACE_WIDTH; var destHeight = GraphicsFormat.FACE_HEIGHT; var srcWidth = destWidth; var srcHeight = destHeight; xSrc = handle.getSrcX() * srcWidth; if (root.isLargeFaceUse() && pic.isLargeImage()) { srcWidth = root.getLargeFaceWidth(); srcHeight = root.getLargeFaceHeight(); destWidth = root.getLargeFaceWidth(); destHeight = root.getLargeFaceHeight(); xSrc = handle.getSrcX() * srcWidth; } ySrc = handle.getSrcY() * srcHeight; pic.drawStretchParts(xDest, yDest, destWidth, destHeight, xSrc, ySrc, srcWidth, srcHeight); }; BaseMessageView.drawFace = function(xDest, yDest) { var pic, xSrc, ySrc; var destWidth = GraphicsFormat.FACE_WIDTH; var destHeight = GraphicsFormat.FACE_HEIGHT; var srcWidth = destWidth; var srcHeight = destHeight; var handle = this._faceHandle; var facialExpressionId = this._faceId; if (handle === null) { return; } pic = GraphicsRenderer.getGraphics(handle, GraphicsType.FACE); if (pic === null) { return; } /*if (root.isLargeFaceUse() && false) { destWidth = root.getLargeFaceWidth(); destHeight = root.getLargeFaceHeight(); if (pic.isLargeImage()) { srcWidth = destWidth; srcHeight = destHeight; } }*/ if (facialExpressionId === 0) { xSrc = handle.getSrcX(); ySrc = handle.getSrcY(); } else { xSrc = Math.floor(facialExpressionId % 6); ySrc = Math.floor(facialExpressionId / 6); } if (this._messageLayout.isFaceReverse()) { pic.setReverse(true); } xSrc *= srcWidth; ySrc *= srcHeight; pic.drawStretchParts(xDest, yDest, destWidth, destHeight, xSrc, ySrc, srcWidth, srcHeight); }; BaseMessageView._setupName = function(messageViewParam) { var name = ''; if (messageViewParam.unit !== null) { name = messageViewParam.unit.getName(); } else if (messageViewParam.npc !== null) { name = messageViewParam.npc.getName(); } if (name == '_') { name = ''; } if (name.indexOf('_') > 1) { name = name.substr(0, name.indexOf('_')); } if (name == 'Char') { name = 'Charlotte'; } if (name == 'シャルロ') { name = 'シャルロット'; } this._name = name; };