GTP WOLF MENU

● ARCHIVED · READ-ONLY
Started by Eliaquim 1 posts View original ↗
  1. I've been playing this plugin for some time ... and I'm taking a beating ... Here's a picture of it.
    Spoiler
    jwj258V.png

    I'm trying to put a way to get 3 members per line, instead of 2. And for the third line, do not show the windows in half. So showing 6 at a time. And when I press down, it shows 3 more and so on ...
    - 3 in the first row
    - 3 in the second row
    (press down)
    - 3 in the third and etc ...

    I already tried to mess with the code. I put an actor window over the other side to side and top to bottom. I was also able to change the width and height of each window. But I can not put 3 windows on the same line and the rest I explained above. I do not know where else to look inside the codes. SUSPECT, in my ignorance, that maybe it's importing some configuration from rpg_windows?
    That part of the code that I met is that of the Scene Menu comment, line 300. And there on line 346 I started to see something related to the windows of the party window.

    If you can not help, let me know if this is too complicated for a layman, because in this case he would give up and try another menu ....
    The code change is allowed by the creator.
    I found the plugin here https://forums.rpgmakerweb.com/index.php?threads/gtp-gamefall-team-plugins.73607/

    But if you want to see the forum ..

    Spoiler
    Code:
    /*
     * ==============================================================================
     * * GTP: Gamefall Team Plugins - Alternative Menu Scene: Wolf Rpg Editor
     * ------------------------------------------------------------------------------
     *  AltMenu-WolfRpg.js  Version 1.3
     * ==============================================================================
     */
    
    var Imported = Imported || {};
    Imported.WolfMenu = true;
    Imported.WolfMenu.version = 1.3;
    
    var Gamefall = Gamefall || {};
    Gamefall.WolfMenu = Gamefall.WolfMenu || {};
    
    Gamefall.WolfMenu.sceneManager_initialize = SceneManager.initialize;
    SceneManager.initialize = function() {
        Gamefall.WolfMenu.sceneManager_initialize.call(this);
        this.checkYanflyCore(1.23);
    };
    
    SceneManager.checkYanflyCore = function(version) {
        if(!Imported.YEP_CoreEngine) {
            var errorCore = "The plugin needs Yanfly Engine Core " + version + " version or higher to run";
            throw new Error(errorCore);
        }
    };
    /*:
    * @plugindesc this plugin creates a menu scene similar to the one of Wolf Rpg Editor.
    * IMPORTANT: Trigger PAGEUP or PAGEDOWN to switch between the actors' window status in the menu.
    * @author Gamefall Team || Luca Mastroainni || Nebula Games
    * @help All the details about the costumization are included in the plugin parameters itself.
    * More features could be planned in next updates. To change the gauge colors, you should change
    * the values of YEP_CoreEngine's parameters about HP, MP and TP (for exp gauge) bar color.
    * IMPORTANT: Trigger PAGEUP or PAGEDOWN to switch between the actors' window status in the menu. 
    * CHANGELOG: Version 1.0 -- Plugin Released
    *            Version 1.1 -- Some bugs resolved.
    *            Version 1.2 -- Improved the code and added new PIXI Text Features;
    *            Version 1.3 -- Added Cursor sound and compatibility with more than 4 party members;
    * @param Show Face Or Sprite
    * @desc Show Actor Face or Sprite in the menu status.
    * FACE - true    SPRITE - false
    * Default: true
    * @default true
    *
    * @param Save help window text
    * @desc Text in the help window of the Save Scene
    * Default: Choose a slot to save in
    * @default Choose a slot to save in
    *
    * @param Frame Color
    * @desc The color of the frame around the faces or sprites
    * Default: 0x9797a8
    * @default 0x9797a8
    *
    */
    
    //###############################################################################
    //
    // PLUGIN COMMANDS
    //
    //###############################################################################
    
    Gamefall.WolfMenu.parameters = PluginManager.parameters('GTP_WolfMenu');
    Gamefall.WolfMenu.Show = eval(Gamefall.WolfMenu.parameters["Show Face Or Sprite"] || true);
    Gamefall.WolfMenu.frameColor = Number(Gamefall.WolfMenu.parameters["FrameColor"] || 0x9797a8);
    Gamefall.WolfMenu.saveText = String(Gamefall.WolfMenu.parameters["Save help window text"] || "Choose a slot to save in");
    
    Gamefall.WolfMenu.styleHp = {
        fontFamily: 'GameFont',
        fontSize: '50px',
        fill: '#80feb2',
        strokeThickness: 10
    }
    
    Gamefall.WolfMenu.styleMp = {
        fontFamily: 'GameFont',
        fontSize: '50px',
        fill: '#80d2ff',
        strokeThickness: 10
    }
    
    
    //###############################################################################
    //
    // WINDOW PARTY
    //
    //###############################################################################
    
    function Window_Party() {
        this.initialize.apply(this, arguments);
    }
    
    Window_Party.prototype = Object.create(Window_Selectable.prototype);
    Window_Party.prototype.constructor = Window_Party;
    
    Window_Party.prototype.initialize = function(x, y, actorId) {
        var width = this.windowWidth();
        var height = this.windowHeight();
        this._actorId = actorId;
        Window_Selectable.prototype.initialize.call(this, x, y, width, height);
        this._formationMode = false;
        this.drawFrame();
        this.refresh();
    };
    
    Window_Party.prototype.standardBackOpacity = function() {
        return 255;
    };
    
    Window_Party.prototype.drawActorClass = function(actor, x, y, width) {
        width = width || 168;
        this.changeTextColor(this.textColor(8));
        this.drawText(actor.currentClass().name, x, y, width);
    };
    
    Window_Party.prototype.drawActorLevel = function(actor, x, y) {
        this.drawText(TextManager.levelA, x, y, 48);
        this.resetTextColor();
        this.drawText(actor.level, x + 10, y, 36, 'right');
    };
    
    Window_Party.prototype.drawActorExp = function(actor, x, y) {
        this.resetTextColor();
        this.drawTextEx('\\}' + "To Next Lv: " + actor.nextRequiredExp() + '\\{', x, y);
    };
    
    Window_Party.prototype.drawFrame = function() {
        var graph = new PIXI.Graphics();
        graph.lineStyle(1, Gamefall.WolfMenu.frameColor);
        graph.drawRect(0 + this.standardPadding(), 40 + this.standardPadding(), 144, 144);
        this.addChild(graph);
    };
    
    Window_Party.prototype.drawFaceStatus = function(index) {
        if (Gamefall.WolfMenu.Show == true) {
            this.drawActorFace($gameParty.members()[index], 0, 40); }
        else if (Gamefall.WolfMenu.Show == false) {
            this.drawActorCharacter($gameParty.members()[index], 75, 135);
        }
    };
    
    Window_Party.prototype.drawActorExpGauge = function(actor, x, y, width) {
        width = width || 186;
        var color1 = this.tpGaugeColor1();
        var color2 = this.tpGaugeColor2();
        var exp = actor.currentExp() - actor.expForLevel(actor._level);
        var ExpS = actor.expForLevel(actor._level + 1) - actor.expForLevel(actor._level);
        var expRate = (exp / ExpS);
        this.drawGauge(x, y, width, expRate, color1, color2);
    };
    
    Window_Party.prototype.makeFontBigger = function() {
        if (this.contents.fontSize <= 96) {
            this.contents.fontSize += 15;
        }
    };
    
    Window_Party.prototype.makeFontSmaller = function() {
        if (this.contents.fontSize >= 24) {
            this.contents.fontSize -= 15;
        }
    };
    
    Window_Party.prototype.processOk = function() {
        Window_Selectable.prototype.processOk.call(this);
        $gameParty.setMenuActor(this.actor());
    };
    
    Window_Party.prototype.selectLast = function() {
        this.select($gameParty.menuActor().index() || 0);
    };
    
    Window_Party.prototype.formationMode = function() {
        return this._formationMode;
    };
    
    Window_Party.prototype.setFormationMode = function(formationMode) {
        this._formationMode = formationMode;
    };
    
    Window_Party.prototype.updateCursor = function() {
        if (this._cursorAll) {
            var ARH = this.maxRows() * this.itemHeight();
            this.setCursorRect(0, 0, this.contents.width, ARH);
            this.setTopRow(0);
        } else if (this.isCursorVisible()) {
            var rect = this.itemRect(this.index());
            rect.x = 0; 
            rect.y = 0; 
            rect.width = 280; 
            rect.height = 250; 
            this.setCursorRect(rect.x, rect.y, rect.width, rect.height);
        } else {
            this.setCursorRect(0, 0, 0, 0);
        }
    };
    
    Window_Party.prototype.windowWidth = function() {
        return 280;
    };
    
    Window_Party.prototype.windowHeight = function() {
        return 250;
    };
    
    Window_Party.prototype.actor = function() {
        return $gameParty.members()[this._actorId];
    };
    
    Window_Party.prototype.refresh = function() {
        var x = this.textPadding();
        var width = this.contents.width - this.textPadding() * 2;
        this.contents.clear();
        this.contents.fontSize = 19;
        this.drawActorName(this.actor(), 5, 0);
        this.drawFaceStatus(this._actorId);
        this.drawActorClass(this.actor(), 135, 0);
        this.drawActorHp(this.actor(), 150, 40, this.contents.width - 150);
        this.drawActorMp(this.actor(), 150, 90, this.contents.width - 150);
        this.drawActorExpGauge(this.actor(), 110, 180, this.contents.width - 110);
        this.drawActorLevel(this.actor(), 55, 183);
        this.drawActorExp(this.actor(), 120, 170);
    
    };
    
    Window_Party.prototype.open = function() {
        this.refresh();
        Window_Base.prototype.open.call(this);
    };
    
    Window_Party.prototype._refreshCursor = function() {
        var pad = 0;
        var x = this._cursorRect.x + pad - this.origin.x;
        var y = this._cursorRect.y + pad - this.origin.y;
        var w = this._cursorRect.width;
        var h = this._cursorRect.height;
        var m = 4;
        var x2 = Math.max(x, pad);
        var y2 = Math.max(y, pad);
        var ox = x - x2;
        var oy = y - y2;
        var w2 = Math.min(w, this._width - 0 - x2);
        var h2 = Math.min(h, this._height - 0 - y2);
        var bitmap = new Bitmap(w2, h2);
    
        this._windowCursorSprite.bitmap = bitmap;
        this._windowCursorSprite.setFrame(0, 0, w2, h2);
        this._windowCursorSprite.move(x2, y2);
    
        if (w > 0 && h > 0 && this._windowskin) {
            var skin = this._windowskin;
            var p = 96;
            var q = 48;
            bitmap.blt(skin, p+m, p+m, q-m*2, q-m*2, ox+m, oy+m, w-m*2, h-m*2);
            bitmap.blt(skin, p+m, p+0, q-m*2, m, ox+m, oy+0, w-m*2, m);
            bitmap.blt(skin, p+m, p+q-m, q-m*2, m, ox+m, oy+h-m, w-m*2, m);
            bitmap.blt(skin, p+0, p+m, m, q-m*2, ox+0, oy+m, m, h-m*2);
            bitmap.blt(skin, p+q-m, p+m, m, q-m*2, ox+w-m, oy+m, m, h-m*2);
            bitmap.blt(skin, p+0, p+0, m, m, ox+0, oy+0, m, m);
            bitmap.blt(skin, p+q-m, p+0, m, m, ox+w-m, oy+0, m, m);
            bitmap.blt(skin, p+0, p+q-m, m, m, ox+0, oy+h-m, m, m);
            bitmap.blt(skin, p+q-m, p+q-m, m, m, ox+w-m, oy+h-m, m, m);
        }
    };
    
    //###############################################################################
    //
    // MENU COMMAND
    //
    //###############################################################################
    
    Window_MenuCommand.prototype.numVisibleRows = function() {
        return 5;
    };
    
    Window_MenuCommand.prototype.standardBackOpacity = function() {
        return 255;
    };
    
    Window_MenuCommand.prototype.makeCommandList = function() {
        this.addMainCommands();
        this.addOriginalCommands();
        this.addOptionsCommand();
        this.addSaveCommand();
        this.addGameEndCommand();
    };
    
    //###############################################################################
    //
    // WINDOW GOLD
    //
    //###############################################################################
    
    Window_Gold.prototype.standardBackOpacity = function() {
        return 255;
    };
    
    //###############################################################################
    //
    // SCENE MENU
    //
    //###############################################################################
    
    
    Scene_Menu.prototype.create = function() {
        Scene_MenuBase.prototype.create.call(this);
        this.createAllWindows();
        this.setup();
    };
    
    Scene_Menu.prototype.createAllWindows = function() {
        this.createCommandWindow();
        this.createGoldWindow();
        this.createAllParty();
        this.createHelpWindow();
        this.createItemWindow();
        this.createItemDesc();
        this.createWolfWindow();
        this.createSkillWindow();
    };
    
    Scene_Menu.prototype.setup = function() {
        this._actualIndex = 0;
        this._forItem = false;
        this._forSkill = false;
        this._textHp = null;
        this._textMp = null;
        this._time = 100;
        this._startAnimation = false;
        this._commandWindow.x = 0;
        this._goldWindow.x = 0;
        this._goldWindow.y = 551;
    };
    
    
    Scene_Menu.prototype.updateHelpPosition = function() {
        if(this._itemWindow.isOpenAndActive() || this._skillWindow.isOpenAndActive()) {
            this._helpWindow.x = this._itemWindow.x;
            this._helpWindow.y = this._itemWindow.height + this._itemWindow.y;
            this._helpWindow.width = this._itemWindow.width;
            if(this._helpWindow.isClosed()) this._helpWindow.open();
        }
    };
    
    Scene_Menu.prototype.createAllParty = function() {
        this._partyWindow = [];
        for(i = 0; i < $gameParty.size(); i++) {
            var x = this.determineX(i);
            var y = this.determineY(i);
            this._partyWindow[i] = new Window_Party(x, y, i);
            this.addWindow(this._partyWindow[i]);
        }
    };
    
    Scene_Menu.prototype.createItemDesc = function() {
        this._itemDesc = new Window_ItemSpec(this._goldWindow);
        this.addWindow(this._itemDesc);
    };
    
    Scene_Menu.prototype.createSkillWindow = function() {
        var wx = this._itemWindow.x;
        var wy = this._itemWindow.y;
        var ww = this._itemWindow.width;
        var wh = this._itemWindow.height;
        this._skillWindow = new Window_SkillList(wx, wy, ww, wh);
        this._skillWindow.setHelpWindow(this._helpWindow);
        this._skillWindow.setHandler('ok',     this.onItemOk.bind(this));
        this._skillWindow.setHandler('cancel', this.onItemCancel.bind(this));
        this._skillWindow.openness = 0;
        this._skillWindow.setStypeId(0);
        this._skillWindow.select(0);
        this.addWindow(this._skillWindow);
    };
    
    
    Scene_Menu.prototype.update = function() {
        Scene_MenuBase.prototype.update.call(this);
        this.checkTrigger();
        this.updateHelpPosition();
        if(this._startAnimation) this.textAnimation();
    };
    
    Scene_Menu.prototype.commandItem = function() {
        this._itemWindow.open();
        this._forItem = true;
        this._commandWindow.deactivate();
        this._itemWindow.activate();
    };
    
    Scene_Menu.prototype.commandSave = function() {
        this._wolfWindow.open();
        this._helpWindow.setText(Gamefall.WolfMenu.saveText)
        this._helpWindow.open()
        this._commandWindow.deactivate();
        this._wolfWindow.activate();
    };
    
    Scene_Menu.prototype.determineX = function(num) {
        if(num % 2 === 0) return this._commandWindow.width
        else return this._partyWindow[num - 1].width + 240
    };
    
    Scene_Menu.prototype.determineY = function(num) {
        if(num % 2 === 0) return this._commandWindow.y + (250 * (num / 2))
        else return this._commandWindow.y + (250 * ((num - 1) / 2))
       
    }
    
    Scene_Menu.prototype.start = function() {
        Scene_MenuBase.prototype.start.call(this);
        this._partyWindow.forEach(function(window) { return window.refresh()});
    };
    
    
    Scene_Menu.prototype.commandPersonal = function() {
        var actual = this._partyWindow[this._actualIndex];
        actual.setFormationMode(false);
        actual.selectLast();
        actual.activate();
        if(this._forItem || this._forSkill) actual.setHandler('ok', this.onActorOk.bind(this));
        else actual.setHandler('ok', this.onPersonalOk.bind(this));
        actual.setHandler('cancel', this.onPersonalCancel.bind(this));
    };
    
    Scene_Menu.prototype.checkTrigger = function() {
        if(this._partyWindow.some(function(window) { return window.active == true })) {
            if(Input.isTriggered('right')) {
                var actual = this._partyWindow[this._actualIndex];
                actual.deactivate();
                actual.deselect()
                if(this._actualIndex === $gameParty.size() - 1) this._actualIndex = 0;
                else this._actualIndex += 1;
                this.commandPersonal();
                SoundManager.playCursor()
                this.checkScreenTouch()
            }
            else if(Input.isTriggered('left')) {
                var actual = this._partyWindow[this._actualIndex];
                actual.deactivate();
                actual.deselect()
                if(this._actualIndex == 0) this._actualIndex = $gameParty.size() - 1;
                else this._actualIndex -= 1;
                this.commandPersonal();
                SoundManager.playCursor()
                this.checkScreenTouch()
            }
            if($gameParty.size() > 2) {
                if(Input.isTriggered('down')) {
                    var actual = this._partyWindow[this._actualIndex];
                    actual.deactivate();
                    actual.deselect()
                    var num = this._actualIndex % 2 === 0 ? this._actualIndex : this._actualIndex - 1
                    if(this._actualIndex + 2 > $gameParty.size() - 1) this._actualIndex = this._actualIndex - num;
                    else this._actualIndex += 2;
                    this.commandPersonal();
                    SoundManager.playCursor()
                    this.checkScreenTouch()
                }
                else if(Input.isTriggered('up')) {
                    var actual = this._partyWindow[this._actualIndex];
                    actual.deactivate();
                    actual.deselect()
                    var num = this._actualIndex === 0 ? ($gameParty.size() - 1) - (($gameParty.size() - 1) % 2) : $gameParty.size() - ((($gameParty.size()) % 2) + 1)
                      console.log(this._actualIndex)
                    if(this._actualIndex - 2 < 0) this._actualIndex = num;
                    else this._actualIndex -= 2;
                    this.commandPersonal();
                    SoundManager.playCursor()
                    this.checkScreenTouch()
                }
            }
        }
    }
    
    Scene_Menu.prototype.checkScreenTouch = function() {
        var y = this._partyWindow[this._actualIndex].y
        var height = this._partyWindow[this._actualIndex].height
        if(y < 0) {
            this._partyWindow.forEach(function(window) {
                window.y += Math.abs(y) 
            })
        }
        else if(y + height > Graphics.boxHeight) {
            this._partyWindow.forEach(function(window) {
                window.y -= Math.abs(Graphics.boxHeight - (y + height))
            })       
        }
        else return;
    }
    
    
    Scene_Menu.prototype.onPersonalOk = function() {
        switch (this._commandWindow.currentSymbol()) {
        case 'skill':
            this._skillWindow.setActor($gameParty.members()[this._actualIndex]);
            this._skillWindow.open();
            this._skillWindow.activate();
            this._forSkill = true;
            break;
        case 'equip':
            SceneManager.push(Scene_Equip);
            break;
        case 'status':
            SceneManager.push(Scene_Status);
            break;
        }
    };
    
    Scene_Menu.prototype.onPersonalCancel = function() {
        this._partyWindow.forEach(function(window, index) { 
            window.deselect();
            window.deactivate();
            window.y = this.determineY(index)
        }, this)
        this._actualIndex = 0;
        if(!this._forItem && !this._forSkill) this._commandWindow.activate();
        else if(this._forItem) {
            this._itemWindow.open();
            this._helpWindow.open();
            this._itemWindow.activate();
            this._itemDesc.close();
        }
        else if(this._forSkill) {
            this._skillWindow.open();
            this._helpWindow.open;
            this._skillWindow.activate();
            this._itemDesc.close();
        }
    };
    
    //--------------------------------------------------------- ITEM METHODS
    
    
    Scene_Menu.prototype.item = function() {
        if(this._forItem) return this._itemWindow.item();
        else if(this._forSkill) return this._skillWindow.item();
    };
    
    Scene_Menu.prototype.user = function() {
        if(this._forItem) { 
            var members = $gameParty.movableMembers();
            var bestActor = members[0];
            var bestPha = 0;
            for (var i = 0; i < members.length; i++) {
                if (members[i].pha > bestPha) {
                    bestPha = members[i].pha;
                    bestActor = members[i];
                }
            }
            return bestActor;
        }
        else if(this._forSkill) return this._skillWindow._actor;
    };
    
    Scene_Menu.prototype.onItemOk = function() {
        if(this._forItem) $gameParty.setLastItem(this.item());
        else if(this._forSkill) this._skillWindow._actor.setLastMenuSkill(this.item())
        this.determineItem();
        this._itemDesc.open();
        this._itemDesc.refresh();
    };
    
    Scene_Menu.prototype.onItemCancel = function() {
        if(this._forItem) {
            this._itemWindow.deactivate();
            this._commandWindow.activate();
            this._helpWindow.close();
            this._itemWindow.close();
            this._forItem = false;
        }
        else if(this._forSkill) {
            this._skillWindow.deactivate();
            this._helpWindow.close();
            this._skillWindow.close();
            this._partyWindow[this._actualIndex].activate()
            this._forSkill = false;       
        }
    };
    
    Scene_Menu.prototype.playSeForItem = function() {
        SoundManager.playUseItem();
    };
    
    Scene_Menu.prototype.useItem = function() {
        this.playSeForItem();
        this.user().useItem(this.item());
        this.applyItem();
        this.checkCommonEvent();
        this.checkGameover();
        this._partyWindow.forEach(function(window) { return window.refresh(); });
        if(this._forItem) this._itemWindow.redrawCurrentItem();
        else if(this._forSkill) this._skillWindow.refresh();
        this._partyWindow[this._actualIndex].activate();
        this._cursorFixed = true;
        if(this._forItem) this._startAnimation = true;
        this._itemDesc.refresh();
    };
    
    Scene_Menu.prototype.textAnimation = function() {
        this._time--;
        var item = $gameParty.lastItem();
        if(this._textHp == null && this._time > 0) {
            var plusHp = item.effects.filter(function(effect) { return effect.code == 11});
            if(plusHp.length > 0) {
                var txtHp = String(Math.floor(plusHp[0].value2 + (plusHp[0].value1 * this.user().hp)));
                this._textHp = new PIXI.Text(txtHp, Gamefall.WolfMenu.styleHp);
                this._textHp.x = this._partyWindow[this._actualIndex].x + this._partyWindow[this._actualIndex].width / 2 - 30;
                this._textHp.y = this._partyWindow[this._actualIndex].y + this._partyWindow[this._actualIndex].height / 2 - 40;
                this.addChild(this._textHp);
            }
        }
        if(this._textMp == null && this._time > 0) {
            var plusMp = item.effects.filter(function(effect) { return effect.code == 12});
            if(plusMp.length > 0) {
                var txtMp = String(Math.floor(plusMp[0].value2 + (plusMp[0].value1 * this.user().mp)));
                var delay = this._textHp !== null ? this._textHp.height : 0;
                this._textMp = new PIXI.Text(txtMp, Gamefall.WolfMenu.styleMp);
                this._textMp.x = this._partyWindow[this._actualIndex].x + this._partyWindow[this._actualIndex].width / 2 - 30;
                this._textMp.y = this._partyWindow[this._actualIndex].y + this._partyWindow[this._actualIndex].height / 2 - 40 + (delay);
                this.addChild(this._textMp);
            }
        }
        if(this._time <= 0 && (this._textHp !== null || this._textMp !== null)) {
            if(this._textHp !== null && this._textHp.alpha > 0) this._textHp.alpha -= 0.05;
            if(this._textMp !== null && this._textMp.alpha > 0) this._textMp.alpha -= 0.05;
    
            if((this._textHp !== null && this._textHp.alpha <= 0) || (this._textMp !== null && this._textMp.alpha <= 0)) {
                if(this._textHp !== null) this.removeChild(this._textHp);
                if(this._textMp !== null) this.removeChild(this._textMp);
                this._startAnimation = false;
                this._partyWindow[this._actualIndex]._windowCursorSprite.setColorTone([0, 0, 0, 0]);
                this._cursorFixed = false;
                this._textHp = null;
                this._textMp = null;
                this._time = 100;
            }
        } 
    };
    
    Scene_Menu.prototype.createItemWindow = function() {
        var wy = this._helpWindow.height;
        var wh = Graphics.boxHeight;
        this._itemWindow = new Window_ItemList(115, 50, 600, 445);
        this._itemWindow.setHelpWindow(this._helpWindow);
        this._itemWindow.setHandler('ok',     this.onItemOk.bind(this));
        this._itemWindow.setHandler('cancel', this.onItemCancel.bind(this));
        this._itemWindow.setCategory('all');
        this.addWindow(this._itemWindow);
        this._itemWindow.select(0);
    };
    
    Scene_Menu.prototype.onActorOk = function() {
        if (this.canUse()) {
            this._partyWindow[this._actualIndex]._windowCursorSprite.setColorTone([-100, 13, -102, 155]);
            this.useItem();
            console.log('ok!');
        } else {
            SoundManager.playBuzzer();
            this._partyWindow[this._actualIndex].activate();
            this._partyWindow[this._actualIndex].selectLast();
        }
    };
    
    Scene_Menu.prototype.determineItem = function() {
        var action = new Game_Action(this.user());
        var item = this.item();
        action.setItemObject(item);
        if (action.isForFriend()) {
            if(this._forItem) {
                this._itemWindow.close();
                this._helpWindow.close();
            }
            else if(this._forSkill) {
                this._skillWindow.close();
                this._helpWindow.close();
            }
                this.commandPersonal();
        } else {
            this.useItem();
            if(this._forItem) this.activateItemWindow();
            else if(this._forSkill) this.activateSkillWindow();
        }
    };
    
    Scene_Menu.prototype.activateItemWindow = function() {
        this._itemWindow.refresh();
        this._itemWindow.activate();
    };
    
    Scene_Menu.prototype.activateSkillWindow = function() {
        this._skillWindow.refresh();
        this._skillWindow.activate();
    };
    
    Scene_Menu.prototype.itemTargetActors = function() {
        var action = new Game_Action(this.user());
        action.setItemObject(this.item());
        if (!action.isForFriend()) {
            return [];
        } else if (action.isForAll()) {
            return $gameParty.members();
        } else {
            return [$gameParty.members()[this._actualIndex]];
        }
    };
    
    Scene_Menu.prototype.canUse = function() {
        return this.user().canUse(this.item()) && this.isItemEffectsValid();
    };
    
    Scene_Menu.prototype.isItemEffectsValid = function() {
        var action = new Game_Action(this.user());
        action.setItemObject(this.item());
        return this.itemTargetActors().some(function(target) {
            return action.testApply(target);
        }, this);
    };
    
    Scene_Menu.prototype.applyItem = function() {
        var action = new Game_Action(this.user());
        action.setItemObject(this.item());
        this.itemTargetActors().forEach(function(target) {
            for (var i = 0; i < action.numRepeats(); i++) {
                action.apply(target);
            }
        }, this);
        action.applyGlobal();
    };
    
    Scene_Menu.prototype.checkCommonEvent = function() {
        if ($gameTemp.isCommonEventReserved()) {
            SceneManager.goto(Scene_Map);
        }
    };
    
    //--------------------------------------------------------------------------------
    
    Scene_Menu.prototype.newSave = function() {
        DataManager.loadAllSavefileImages();
        this.createHelpSaveWindow();
        this._helpWindow.refresh();
        this.createWolfWindow();
    
    };
    
    
    Scene_Menu.prototype.saveFileId = function() {
        return this._wolfWindow.index() + 1;
    };
    
    Scene_Menu.prototype.createWolfWindow = function() {
        var x = 115;
        var y = this._helpWindow.height + 20;
        var width = Graphics.boxWidth;
        var height = Graphics.boxHeight - y;
        this._wolfWindow = new Window_SaveWolf(x, y, 600, 500);
        this._wolfWindow.setHandler('ok',     this.onSaveFileOk.bind(this));
        this._wolfWindow.setHandler('cancel', this.closeSave.bind(this));
        this._wolfWindow.select(this.firstSaveFileIndex());
        this._wolfWindow.setTopRow(this.firstSaveFileIndex() - 2);
        this._wolfWindow.setMode(this.mode());
        this._wolfWindow.refresh();
        this.addWindow(this._wolfWindow);
    };
    
    
    Scene_Menu.prototype.helpWindowText = function() {
        return '';
    };
    
    Scene_Menu.prototype.firstSaveFileIndex = function() {
        return 0;
    };
    
    Scene_Menu.prototype.onSaveFileOk1 = function() {
    };
    
    
    Scene_Menu.prototype.mode = function() {
        return 'save';
    };
    
    Scene_Menu.prototype.helpWindowText = function() {
        return saveText;
    };
    
    Scene_Menu.prototype.firstSaveFileIndex = function() {
        return DataManager.lastAccessedSavefileId() - 1;
    };
    
    Scene_Menu.prototype.onSaveFileOk = function() {
        Scene_Menu.prototype.onSaveFileOk1.call(this);
        $gameSystem.onBeforeSave();
        if (DataManager.saveGame(this.saveFileId())) {
            this.onSaveSuccess();
        } else {
            this.onSaveFailure();
        }
        this._wolfWindow.refresh();
    };
    
    Scene_Menu.prototype.onSaveSuccess = function() {
        SoundManager.playSave();
        StorageManager.cleanBackup(this.saveFileId());
        this._wolfWindow.deactivate();
        this._wolfWindow.close();
        this._helpWindow.close();
        this._helpWindow.clear()
        this._commandWindow.activate();
    };
    
    Scene_Menu.prototype.onSaveFailure = function() {
        SoundManager.playBuzzer();
        this._wolfWindow.activate();
    };
    
    Scene_Menu.prototype.closeSave = function() {
        this._wolfWindow.deactivate();
        this._wolfWindow.close();
        this._helpWindow.close();
        this._commandWindow.activate();
    };
    
    
    //###############################################################################
    //
    // ITEM LIST
    //
    //###############################################################################
    
    Gamefall.WolfMenu.oldItemListInitialize = Window_ItemList.prototype.initialize;
    Window_ItemList.prototype.initialize = function(x, y, width, height) {
        Gamefall.WolfMenu.oldItemListInitialize.call(this, x, y, width, height);
        if(SceneManager._scene instanceof Scene_Menu) this.openness = 0;
    };
    
    Gamefall.WolfMenu.oldItemListMaxCols = Gamefall.WolfMenu.oldItemListMaxCols
    Window_ItemList.prototype.maxCols = function() {
        if(!SceneManager._scene instanceof Scene_Menu) return Gamefall.WolfMenu.oldItemListMaxCols.call(this)
        return 2;
    };
    
    Gamefall.WolfMenu.oldItemListSpacing = Window_ItemList.prototype.spacing
    Window_ItemList.prototype.spacing = function() {
        if(!SceneManager._scene instanceof Scene_Menu) return Gamefall.WolfMenu.oldItemListSpacing.call(this)
        return 48;
    };
    
    Gamefall.WolfMenu.oldIncludes = Window_ItemList.prototype.includes;
    Window_ItemList.prototype.includes = function(item) {
        if(!SceneManager._scene instanceof Scene_Menu) Gamefall.WolfMenu.oldIncludes.call(this, item)
        if (this._category == 'all')
            return true;
        else
            return Gamefall.WolfMenu.oldIncludes.call(this, item);
    };
    
    
    //###############################################################################
    //
    // SAVE WOLF
    //
    //###############################################################################
    
    
    function Window_SaveWolf() {
        this.initialize.apply(this, arguments);
    }
    
    Window_SaveWolf.prototype = Object.create(Window_Selectable.prototype);
    Window_SaveWolf.prototype.constructor = Window_SaveWolf;
    
    Window_SaveWolf.prototype.initialize = function(x, y, width, height) {
        Window_Selectable.prototype.initialize.call(this, x, y, width, height);
        this._mode = null;
        this.openness = 0;
    };
    
    Window_SaveWolf.prototype.setMode = function(mode) {
        this._mode = mode;
    };
    
    Window_SaveWolf.prototype.maxItems = function() {
        return DataManager.maxSavefiles();
    };
    
    Window_SaveWolf.prototype.maxVisibleItems = function() {
        return 5;
    };
    
    Window_SaveWolf.prototype.itemHeight = function() {
        var innerHeight = this.height - this.padding * 2;
        return Math.floor(innerHeight / this.maxVisibleItems());
    };
    
    Window_SaveWolf.prototype.drawItem = function(index) {
        var id = index + 1;
        var valid = DataManager.isThisGameFile(id);
        var info = DataManager.loadSavefileInfo(id);
        var rect = this.itemRectForText(index);
        this.resetTextColor();
        if (this._mode === 'load') {
            this.changePaintOpacity(valid);
        }
        this.drawFileId(id, rect.x, rect.y);
        if (info) {
            this.changePaintOpacity(valid);
            this.drawContents(info, rect, valid);
            this.changePaintOpacity(true);
        }
    };
    
    Window_SaveWolf.prototype.drawFileId = function(id, x, y) {
        this.drawText(TextManager.file + ' ' + id, x, y, 180);
    };
    
    Window_SaveWolf.prototype.drawContents = function(info, rect, valid) {
        var bottom = rect.y + rect.height;
        if (rect.width >= 420) {
            if (valid) {
                this.drawPartyCharacters(info, rect.x + 220, bottom - 4);
            }
        }
        var lineHeight = this.lineHeight();
        var y2 = bottom - lineHeight;
        if (y2 >= lineHeight) {
            this.drawPlaytime(info, rect.x, y2, rect.width);
        }
    };
    
    
    Window_SaveWolf.prototype.drawPartyCharacters = function(info, x, y) {
        if (info.characters) {
            for (var i = 0; i < info.characters.length; i++) {
                var data = info.characters[i];
                this.drawCharacter(data[0], data[1], x + i * 48, y);
            }
        }
    };
    
    Window_SaveWolf.prototype.drawPlaytime = function(info, x, y, width) {
        if (info.playtime) {
            this.drawText(info.playtime, x, y, width, 'left');
        }
    };
    
    Window_SaveWolf.prototype.playOkSound = function() {
    };
    
    
    
    //###############################################################################
    //
    // WINDOW HELP
    //
    //###############################################################################
    
    Gamefall.WolfMenu.oldHelpInitialize = Window_Help.prototype.initialize;
    Window_Help.prototype.initialize = function(numLines) {
        Gamefall.WolfMenu.oldHelpInitialize.call(this, numLines);
        if(SceneManager._scene instanceof Scene_Menu) this.openness = 0;
    };
    
    
    //###############################################################################
    //
    // WINDOW ITEM DEF
    //
    //###############################################################################
    
    function Window_ItemSpec() {
        this.initialize.apply(this, arguments);
    }
    
    Window_ItemSpec.prototype = Object.create(Window_Base.prototype);
    Window_ItemSpec.prototype.constructor = Window_ItemSpec;
    
    Window_ItemSpec.prototype.initialize = function(goldWindow) {
        this._goldWindow = goldWindow
        Window_Base.prototype.initialize.call(this, this._goldWindow.x, this._goldWindow.y - (this._goldWindow.height + 40), this._goldWindow.width, this.fittingHeight(2));
        this.openness = 0;
    };
    
    Window_ItemSpec.prototype.standardBackOpacity = function() {
        return 255;
    };
    
    Window_ItemSpec.prototype.refresh = function() {
        this.contents.clear();
        if(SceneManager._scene._forItem) {
            var item = $gameParty.lastItem();
            if(item !== null) {
                this.drawText(item.name, 0, 0, this.textWidth(item.name), 'left');
                this.drawText('Quant. x ' + String($gameParty.numItems(item)), 0, this.fittingHeight(0), this.textWidth('Quantity X' + String($gameParty.numItems(item))), 'left');
            }
            else return this.contents.clear();
        }
        if(SceneManager._scene._forSkill) {
            var skill = $dataSkills[SceneManager._scene._skillWindow._actor._lastMenuSkill._itemId];
            console.log(skill);
            if(skill !== null) {
                this.drawText(skill.name, 0, 0, this.textWidth(skill.name), 'left');
                var mp = skill.mpCost > 0 ? 'MP ' + String(skill.mpCost) : '';
                var tp = skill.tpCost > 0 ? 'TP ' + String(skill.tpCost) : '';
                var cost = mp + tp;
                console.log(cost);
                this.drawText('Cost: ' + cost, 0, this.fittingHeight(0), this.textWidth('Cost: ' + cost), 'left');           
            }
            else return this.contents.clear();
        }
    };
    
    //###############################################################################
    //
    // WINDOW SKILLLIST
    //
    //###############################################################################
    
    Gamefall.WolfMenu.oldIncludesSkill = Window_SkillList.prototype.includes;
    Window_SkillList.prototype.includes = function(item) {
        if(this._stypeId == 0) return true;
        else return Gamefall.WolfMenu.oldIncludesSkill.call(this, item);
    };