public

Rpg Maker Developers Group

Simple enough for a child, powerful enough for a developer

2 Followers

Switching Message Window Face & Facename for Actor Face & Facename (Irina_VisualNovelBusts Issue)

BMM Archive · July 15, 2026

Preserved forum archive. This topic stores the original first post and locally mirrored RPG Maker Web attachments when available. It is posted by the BMMPlay archive account, not by the original creator.

Original Source

  • Original title: Switching Message Window Face & Facename for Actor Face & Facename (Irina_VisualNovelBusts Issue)
  • Original author: Anyone
  • Original date: November 4, 2019
  • Source thread: https://forums.rpgmakerweb.com/threads/switching-message-window-face-facename-for-actor-face-facename-irina_visualnovelbusts-issue.114897/
  • Source forum path: Game Development Engines > RPG Maker Javascript Plugins > Javascript/Plugin Support

Summary

Hey, javascript newbie here. My team bought the Visual Novel Busts plugin for RPG Maker MV by RPG Maker Irina. Unfortunately, the plugin does not support using the Actor's face, only the message face. All attempts to bypass that via script calls, script calls in text via escape plugins, \af[x] commands by Yanfly's Message Core plugin or even the \f[x] escape of the MoreEscapeCodes plugin by Shaz, have all failed.

Archived First Post

Hey, javascript newbie here.

My team bought the Visual Novel Busts plugin for RPG Maker MV by RPG Maker Irina.

Unfortunately, the plugin does not support using the Actor's face, only the message face.
All attempts to bypass that via script calls, script calls in text via escape plugins, \af[x] commands by Yanfly's Message Core plugin or even the \f[x] escape of the MoreEscapeCodes plugin by Shaz, have all failed.

The best result I've got is that the face does change, but in a glitchy, glaring manner where the many other faces briefly pop in before only the selected face bust appears.
At this point, I've spent over 30 hours experimenting with trying to get this to work. It's been excruciatingly frustrating.

We wrote a message to the original author almost a week ago but so far we didn't hear anything back, not even any acknowledgement. So I have to act under the assumption that we won't either, and somehow get this fixed without the author's help.

I've come to the conclusion that the only solution is through editing the original plugin code, since using different text messages based on conditional checks of what the character has equipped aren't a viable option - there are too many variants for all the different actors, which would essentially multiply every dialogue x 30, since different armors should yield different bust graphics.

Fortunately, the terms allow for that.
TOS:
3. You are allowed to edit the code.

Unfortunatey, I don't have any meaningful javascript experience.

I think I've isolated the specific part of the code that I think handles the selection of the face:
(I've split it up a little. The original code was just one endlessly long single line. While the coder allows editing, it's certainly not encouraged and there are no code annotations whatsoever)
Code:
var duration=array[1]===undefined?Imported.Irina_VisualNovelBusts.BustClearDuration:parseInt(array[1])||0;
sprite.clear(duration)}else{Imported.Irina_VisualNovelBusts.Window_Base_processEscapeCharacter.call(this,code,textState)}};

Window_Base.prototype.obtainVNBustMsgEscapeString=function(t){var e=/^\[(.*?)\]/.exec(t.text.slice(t.index));
if(e){t.index+=e[0].length;
return String(e[0].slice(1,e[0].length-1))}else{return""}};
Imported.Irina_VisualNovelBusts.Window_Message_initMembers=Window_Message.prototype.initMembers;

Window_Message.prototype.initMembers=function(){Imported.Irina_VisualNovelBusts.Window_Message_initMembers.call(this);
this.createMessageBustSprites()};

Window_Message.prototype.createMessageBustSprites=function(){this._messageBodyBustSprite=new Sprite_VisualNovelBust(0);
this.addChildToBack(this._messageBodyBustSprite)};

Window_Message.prototype.isUsingFaceBust=function(){
if($gameMessage.faceName().match(/\[BUST\]/i))return true;
if($gameMessage.allText().match(/\\BUST\[(\d+)\]/i)||$gameMessage.allText().match(/\x1bBUST\[(\d+)\]/i))return true;
return false};

Imported.Irina_VisualNovelBusts.Window_Message_loadMessageFace=Window_Message.prototype.loadMessageFace;

Window_Message.prototype.loadMessageFace=function(){if(this.isUsingFaceBust()){
this._faceBitmap=ImageManager.reserveFace("",0,this._imageReservationId)}
else{Imported.Irina_VisualNovelBusts.Window_Message_loadMessageFace.call(this)}};
Imported.Irina_VisualNovelBusts.Window_Message_drawMessageFace=Window_Message.prototype.drawMessageFace;

Window_Message.prototype.drawMessageFace=function(){
if(!this.isUsingFaceBust()){Imported.Irina_VisualNovelBusts.Window_Message_drawMessageFace.call(this)}};

Window_Message.prototype.refreshMessageBustSprite=function(){if(!this.isUsingFaceBust())return;
var t=$gameMessage.allText();
if(t.match(/\\BUST\[(\d+)\]/i)||t.match(/\x1bBUST\[(\d+)\]/i)){var e=parseInt(RegExp.$1).clamp(0,10);
if(e>0){var a=$bust(e);
if(a){a.loadBitmap("face",$gameMessage.faceName())}}
else{this.makeMessageWindowBust($gameMessage.faceName())}}
else{this.makeMessageWindowBust($gameMessage.faceName())}};

Window_Message.prototype.makeMessageWindowBust=function(t){
this._messageBodyBustSprite.x=Imported.Irina_VisualNovelBusts.BustDefaults[0].ScreenX.call(this);
this._messageBodyBustSprite.y=Imported.Irina_VisualNovelBusts.BustDefaults[0].ScreenY.call(this);
this._messageBodyBustSprite.loadBitmap("face",t)};
Imported.Irina_VisualNovelBusts.Window_Message_newLineX=Window_Message.prototype.newLineX;

Window_Message.prototype.newLineX=function(){var t=$gameMessage.allText();
if(t.match(/\\BUST\[(\d+)\]/i)||t.match(/\x1bBUST\[(\d+)\]/i)){var e=parseInt(RegExp.$1);
if(e>0){return 0}
else{return Imported.Irina_VisualNovelBusts.Window_Message_newLineX.call(this)}}
else{return Imported.Irina_VisualNovelBusts.Window_Message_newLineX.call(this)}};

The way that it works is that the script uses tags in the face name to decide what operations to do.
So: ThisIsMyFace[BUST][Exp5x2] tells the plugin that it consists of 2 rows of 5 expressions each and that it should automatically display as Bust(which will make it automatically display in Bust[0] location).

What I'd like to do is introduce a line of code in the script before this happens, that also reads the Face's name and if it detects the tag (ActorX) or something like that whereby X is any number between 1-99, it switches the face.png file in the message with the face.png file of ActorX entirely. Both the face and the facename need to be switched for the Actor's as if I had assigned that Actor's face in the RPGMV editor itself, so that the VisualNovelBusts plugin behaves correctly.

So that, with the new code, I can use ThisIsMyFace(Actor1)[BUST][Exp5x2] as message face and it will not use the face & name in the message window, but instead straight up use the one currently used by Actor1.

You'd be doing me a tremendous favor by helping me get this done, because at this point, I'm just utterly exhausted by this plugin.

--------------------------------------------------------------------------------------------
Update 1:
I've searched around and come up with this attempt to change the face:
Code:
Window_Message.prototype.checkActorFace=function(){
   if ($gameMessage.faceName().match(/Actor/gi))return true
};

Window_Message.prototype.ActorFaceNumber=function(){
   if (this.checkActorFace()){
   var ActorId=$gameMessage.faceName().match(/Actor(\d+)/gi)};
   if ($gameMessage.faceName() != $gameActors.actor(ActorId).faceName()) {
       $gameMessage.setFaceImage(actor.faceName(ActorId), actor.faceIndex(0))
   }
};
It's not working, though. There's something that I'm probably doing wrong, but the console doesn't report any errors, leaving me stranded.

Downloads / Referenced Files

Log in to download

Log in, then follow the RPG Maker Developers Group to see these download links.

Log in to download
Creator Claims / Removal

If you are the original creator and want this listing reassigned, edited, or removed, join BMMPlay and contact the moderators with proof that matches the original RPG Maker Web profile, linked GitHub, itch.io page, or another public creator identity.

#039#rpg-maker-archive#js-support

Replies (0)

No replies yet.

0 replies 1 view

Log in to reply.

User Avatar