RMMV Displaying a window while the game is active?

bishiba

Adept
Veteran
Joined
Apr 6, 2016
Messages
278
Reaction score
163
First Language
Swedish
Primarily Uses
N/A
So the question is wheter or note the post name is possible. I know that you can add sprites and such.

But if I would like to have a window that displays in the top left constantly during play, is that doable? I would've tried but I am currently not at home, and if it's possible I'd just like to know where to start when I get back

best regards,
Bishiba
 

caethyril

^_^
Global Mod
Joined
Feb 21, 2018
Messages
4,487
Reaction score
3,515
First Language
EN
Primarily Uses
RMMZ
Like a HUD? Yes, it's possible: create a new window instance and use the scene's addWindow method to add it to the scene~
 

bishiba

Adept
Veteran
Joined
Apr 6, 2016
Messages
278
Reaction score
163
First Language
Swedish
Primarily Uses
N/A
Like a HUD? Yes, it's possible: create a new window instance and use the scene's addWindow method to add it to the scene~
Alright, been trying to get this window to show. But I am getting the error:
1638458881073.png

It is pointing to this function:
JavaScript:
Scene_Base.prototype.addWindow = function(window) {
    this._windowLayer.addChild(window);
};
I don't understand why the Scene._windowLayer would be undefined?

And here is the function I am using, it doesn't have a feature, it's just me trying to get a window to show.
JavaScript:
Scene_Map.prototype.create = function() {
    Scene_Base.prototype.create.call(this);
    this._transfer = $gamePlayer.isTransferring();
    var mapId = this._transfer ? $gamePlayer.newMapId() : $gameMap.mapId();
    DataManager.loadMapData(mapId);
    this.createMapWindow();
};

Scene_Map.prototype.createMapWindow = function() {
    var x = 44;
    var y = 22;
    var width = 66;
    var height = 400;
    this._mapWindow = new Window_MapWindow(x, y, width, height);
    this.addWindow(this._mapWindow);
};

function Window_MapWindow() {
    this.initialize.apply(this, arguments);
}

Window_MapWindow.prototype = Object.create(Window_Base.prototype);
Window_MapWindow.prototype.constructor = Window_MapWindow;

Window_MapWindow.prototype.initialize = function(x, y, width, height) {
    Window_Base.prototype.initialize.call(this, x, y, width, height);
    this._touching = false;
    this._enemy = null;
};


EDIT:
Changed the two functions in my code. Not getting the error, but I am not getting any window displayed.


JavaScript:
Scene_Map.prototype.create = function() {
    Scene_Base.prototype.create.call(this);
    this._transfer = $gamePlayer.isTransferring();
    var mapId = this._transfer ? $gamePlayer.newMapId() : $gameMap.mapId();
    DataManager.loadMapData(mapId);
    this.createWindowLayer()
    this.createMapWindow();
};

Scene_Map.prototype.createMapWindow = function() {
    var x = 44;
    var y = 22;
    var width = 600;
    var height = 400;
    this._mapWindow = new Window_MapWindow(x, y, width, height);
    this.addWindow(this._mapWindow);
};
 
Last edited:

caethyril

^_^
Global Mod
Joined
Feb 21, 2018
Messages
4,487
Reaction score
3,515
First Language
EN
Primarily Uses
RMMZ
It's because the window layer will generally not have been added by the end of the scene's create method. The scene creates its display objects only after the map data has loaded:
JavaScript:
Scene_Map.prototype.onMapLoaded = function() {
    if (this._transfer) {
        $gamePlayer.performTransfer();
    }
    this.createDisplayObjects();
};
Instead, you should patch the createDisplayObjects method, which gets called when the database has loaded. E.g.
JavaScript:
// Private scope to avoid naming clashes
(function() {
  // Store original method
  var _Scene_Map_createDisplayObjects = Scene_Map.prototype.createDisplayObjects;
  // Define override
  Scene_Map.prototype.createDisplayObjects = function() {
    // Invoke stored method
    _Scene_Map_createDisplayObjects.apply(this, arguments);
    // Run extra code
    this.createMapWindow();
  };
})();
Also, note that a patch/alias, like I've used here, usually lets you write less code than a full override and gives a better chance of compatibility with other plugins~

Edit: I didn't see your edit before, sorry. :kaoslp:
EDIT:
Changed the two functions in my code. Not getting the error, but I am not getting any window displayed.


JavaScript:
Scene_Map.prototype.create = function() {
    Scene_Base.prototype.create.call(this);
    this._transfer = $gamePlayer.isTransferring();
    var mapId = this._transfer ? $gamePlayer.newMapId() : $gameMap.mapId();
    DataManager.loadMapData(mapId);
    this.createWindowLayer()
    this.createMapWindow();
};
// snip //
The window layer is re-created when the map data loads, which is why this doesn't work. createDisplayObjects is the way to go! :kaohi:
 
Last edited:

Latest Threads

Latest Posts

Latest Profile Posts

Someday, I hope they make a game where 95% of the animation budget went to turning valves and opening door animations, leaving every other animation looking like a CDI zelda cutscene.
programming at 12 years old: "I love how it works!"
programming at 18: "I love that it works."
programming at 25: "I love why it works."
programming at 30: "I love when it works."
programming at 50: "How did this work?"
Why can't I insert picture in this profile post? Only insert image -> by URL. No option to upload from my pc?
Trying out a new Battle Ui.
BattleUI.png
And.... I couldn't help myself. I linked my card game Lore and Concepts back to my RPG Maker game and made them take place in the same universe. I think that means I need to get back to work on my RPG Maker Game. There's obviously a story here my brain wants to tell.

Forum statistics

Threads
129,758
Messages
1,204,885
Members
170,846
Latest member
suball
Top