O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Cheat Menu [Shep]

Iniciado por Shephiroth, 06/03/2020 às 19:02

06/03/2020 às 19:02 Última edição: 09/03/2020 às 17:32 por Shephiroth
Menu de Cheat

Compativel com: RMMV

[box class=titlebg]
Condições de Uso
[/box]
Livre para uso comercial e não comercial, edição e/ou compartilhamento.

[box class=titlebg]
Para que serve o script
[/box]
O Script adiciona um menu de save no seu game, permitindo o uso do teclado. Um personagem deve ser mantido em "branco" pra servir como parte do script.
O plugin aceita parâmetros para configurar qual o exato código que o jogador deverá digitar.

[box class=titlebg]
Imagens
[/box]
Spoiler

[close]

[box class=titlebg]
Script
[/box]
/*:
 * @plugindesc Este plugin abrirá um Menu de Cheat e permite que você use o teclado para digitar.
 * @author Shephiroth v.1.0
 *
 *
 * @param titulo
 * @desc Título da janela.
 * @default cheat
 *
 * @param Index do personagem
 * @desc Selecione qual o personagem que será utilizado para abrir a janela de cheat (O PERSONAGEM NÃO PODE JOGÁVEL!)
 * @default 6
 *
 * @param tecla que ativa o pause
 * @desc Define qual o botão ativa/desativa o menu de cheat
 * @default 80
 * 
 * @param Cheat Code 1
 * @desc Aumenta o LV do Heroi 1 em +1
 * @default LVLUUP
 * 
 * @param Cheat Code 2
 * @desc Aumenta o LV do Grupo em +1
 * @default LVLUUPG
 * 
 * @param Cheat Code 3
 * @desc Aumenta o ouro do grupo em +5000
 * @default GIVGOLD
 * 
 * @param Cheat Code 4
 * @desc Aumenta a experiencia do grupo em +5000
 * @default MOREXP
 * 
 * @param Cheat Code 5
 * @desc Recebe todos itens do jogo 
 * @default ALLITENS
 * 
 * @param Cheat Code 6
 * @desc Recebe todas armaduras do jogo
 * @default ALLARMOR
 * 
 * @param Cheat Code 7
 * @desc Recebe todas armas do jogo
 * @default ALLGUNS
 * 
 * @param Cheat Code 8
 * @desc Recupera todo o HP de todo grupo
 * @default FULLHP
 * 
 * @param Cheat Code 9
 * @desc Recupera todo o MP de todo grupo
 * @default FULLMP
 * 
 * @param Cheat Code 10
 * @desc Aumenta em 10 todos os status (Ataque, Defesa, Ataque Mágico, Defesa Mágica, Agilidade e Sorte)
 * @default ZEUS
 *
 * @help
 * ================================================================================
 *    Configurações dos parâmetros
 * ================================================================================
 * No campo dos parâmetros ao lado você poderá configurar qual tecla deverá ser
 * utilizada para ativar/desativar o menu de cheat.
 *
 * CUIDADO: Tome cautela para não utilizar uma tecla importante para outra função!
 *
 * Por padrão a tecla "P" é selecionada. Caso deseje trocar, mude o parâmetro
 * "botao" seguindo a lista abaixo:
 *
 * a    65          j   74          s   83
 * b    66          k   75          t   84
 * c    67          l   76          u   85
 * d    68          m   77          v   86
 * e    69          n   78          w   87
 * f    70          o   79          x   88
 * g    71          p   80          y   89
 * h    72          q   81          z   90
 * i    73          r   82
 * 
 * ================================================================================
 *  Configurações dos Cheats
 * ================================================================================
 *  No campo ao lado você pode definir qual o código que ativará a função.
 * São 10 funções pré-cadastradas sendo elas:
 * 
 *  - Aumenta o LV do Heroi 1 em +1
 *  - Aumenta o LV do Grupo em +1
 *  - Aumenta o ouro do grupo em +5000
 *  - Aumenta a experiencia do grupo em +5000
 *  - Recebe todos itens do jogo
 *  - Recebe todas armaduras do jogo
 *  - Recebe todas armas do jogo
 *  - Recupera todo o HP de todo grupo
 *  - Recupera todo o MP de todo grupo
 *  - Aumenta em 10 todos os stats do grupo
 * 
 *  
 *
 * ================================================================================
 *
*/

(function() {


    // PARÂMETROS #############################################
    var parameters = PluginManager.parameters('CheatsMenuShep');
    var personagemCheat = Number(parameters['Index do personagem'] || '6');
    var titulo = String(parameters['Título da janela'] || 'Cheats');
    var botao = String(parameters['tecla que ativa o pause'] || '80');

    Input.keyMapper[botao] = "CheatMenu";
    

    //  #######################################################

    // FUNÇÃO QUE ATUALIZA NO MAPA ############################

    _cheat_alias_scene_map_update = Scene_Map.prototype.update;
    Scene_Map.prototype.update = function(){
        _cheat_alias_scene_map_update.call(this);
        if (Input.isTriggered("CheatMenu")) SceneManager.push(Scene_Cheats);
    };

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

    Scene_Cheats.prototype = Object.create(Scene_MenuBase.prototype);
    Scene_Cheats.prototype.constructor = Scene_Cheats;

    Scene_Cheats.prototype.initialize = function() {
        Scene_MenuBase.prototype.initialize.call(this);
    };

    Scene_Cheats.prototype.create = function() {
        Scene_MenuBase.prototype.create.call(this);
        this._actor = $gameActors.actor(personagemCheat);
        this.createEditWindow();
        this.createInputWindow();
    };

    Scene_Cheats.prototype.start = function() {
        Scene_MenuBase.prototype.start.call(this);
        this._editWindow.refresh();
    };


    Scene_Cheats.prototype.createEditWindow = function() {
        this._editWindow = new Window_CheatEdit(this._actor, 8);
        this.addWindow(this._editWindow);
    };


    Scene_Cheats.prototype.createInputWindow = function() {
        this._inputWindow = new Window_CheatInput(this._editWindow);
        this._inputWindow.setHandler('ok', this.onInputOk.bind(this));
        this.addWindow(this._inputWindow);
    };

    Scene_Cheats.prototype.update = function () {
        Scene_MenuBase.prototype.update.call(this);
        // Input.keyMapper[27] = "Cancel";
        if (Input.isTriggered('Cancel')) {
            Input.keyMapper[botao] = "CheatMenu"
            this.popScene();
        }
    }

    Scene_Cheats.prototype.onInputOk = function() {
        this._actor.setName(this._editWindow.name());
        this.popScene();
    };

    //##############################################################################
    //######################################################### CHEATEDIT
    //##############################################################################

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

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

    Window_CheatEdit.prototype.initialize = function(actor, maxLength) {
        var width = this.windowWidth();
        var height = this.windowHeight();
        var x = (Graphics.boxWidth - width) / 2;
        var y = (Graphics.boxHeight - (height + this.fittingHeight(9) + 8)) / 2;
        Window_Base.prototype.initialize.call(this, x, y, width, height);
        this._actor = actor;
        this._name = actor.name().slice(0, this._maxLength);
        this._index = this._name.length;
        this._maxLength = maxLength;
        this._defaultName = this._name;
        this.deactivate();
        this.refresh();
        ImageManager.reserveFace(actor.faceName());
    };

    Window_CheatEdit.prototype.windowWidth = function() {
        return 480; // Largura
    };

    Window_CheatEdit.prototype.windowHeight = function() {
        return this.fittingHeight(3); //Altura
    };

    Window_CheatEdit.prototype.name = function() {
        return this._name;
    };

    Window_CheatEdit.prototype.restoreDefault = function() {
        this._name = this._defaultName;
        this._index = this._name.length;
        this.refresh();
        return this._name.length > 0;
    };

    Window_CheatEdit.prototype.add = function(ch) {
        if (this._index < this._maxLength) {
            this._name += ch;
            this._index++;
            this.refresh();
            return true;
        } else {
            return false;
        }
    };

    Window_CheatEdit.prototype.back = function() {
        if (this._index > 0) {
            this._index--;
            this._name = this._name.slice(0, this._index);
            this.refresh();
            return true;
        } else {
            return false;
        }
    };

    Window_CheatEdit.prototype.charWidth = function() {
        var text = $gameSystem.isJapanese() ? '\uff21' : 'A';
        return this.textWidth(text);
    };

    Window_CheatEdit.prototype.left = function() {
        var nameCenter = (this.contentsWidth() + 72);
        var nameWidth = (this._maxLength + 1) * this.charWidth();
        return Math.min(nameCenter - nameWidth / 2, this.contentsWidth() - nameWidth);
    };

    Window_CheatEdit.prototype.itemRect = function(index) {
        return {
            x: this.left() + index * this.charWidth()-150,
            y: 54,
            width: this.charWidth(),
            height: this.lineHeight()
        };
    };

    Window_CheatEdit.prototype.underlineRect = function(index) {
        var rect = this.itemRect(index);
        rect.x++;
        rect.y += rect.height - 4;
        rect.width -= 2;
        rect.height = 2;
        return rect;
    };

    Window_CheatEdit.prototype.drawUnderline = function(index) {
        var rect = this.underlineRect(index);
        var color = this.normalColor();
        this.contents.paintOpacity = 255;
        this.contents.fillRect(rect.x, rect.y, rect.width, rect.height, color);
        this.contents.paintOpacity = 255;
    };

    Window_CheatEdit.prototype.drawChar = function(index) {
        var rect = this.itemRect(index);
        this.resetTextColor();
        this.drawText(this._name[index] || '', rect.x, rect.y);
    };

    Window_CheatEdit.prototype.refresh = function() {
        this.contents.clear();
        this.drawActorFace(this._actor, 0, 0);
        this.drawText(parameters.titulo,0,0,150,"center");
        for (var i = 0; i < this._maxLength; i++) {
            this.drawUnderline(i);
        }
        for (var j = 0; j < this._name.length; j++) {
            this.drawChar(j);
        }
        var rect = this.itemRect(this._index);
        this.setCursorRect(rect.x, rect.y, rect.width, rect.height);
    };



    //##############################################################################
    //######################################################## CHEATINPUT
    //##############################################################################


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

    Window_CheatInput.prototype = Object.create(Window_Selectable.prototype);
    Window_CheatInput.prototype.constructor = Window_CheatInput;
    Window_CheatInput.LATIN1CHEAT =
        [ 'A','B','C','D','E',  'a','b','c','d','e',
        'F','G','H','I','J',  'f','g','h','i','j',
        'K','L','M','N','O',  'k','l','m','n','o',
        'P','Q','R','S','T',  'p','q','r','s','t',
        'U','V','W','X','Y',  'u','v','w','x','y',
        'Z','[',']','^','_',  'z','{','}','|','~',
        '0','1','2','3','4',  '!','#','$','%','&',
        '5','6','7','8','9',  '(',')','*','+','-',
        '/','=','@','<','>',  ':',';',' ','Fechar','OK' ];


    Window_CheatInput.prototype.initialize = function(editWindow) {
        var x = editWindow.x;
        var y = editWindow.y + editWindow.height + 8;
        var width = editWindow.width;
        var height = this.windowHeight();
        Window_Selectable.prototype.initialize.call(this, x, y, width, height);
        this._editWindow = editWindow;
        this._page = 0;
        this._index = 0;
        this.refresh();
        this.updateCursor();
        this.activate();
    };

    Window_CheatInput.prototype.windowHeight = function() {
        return this.fittingHeight(9);
    };

    Window_CheatInput.prototype.table = function() {
        return [Window_CheatInput.LATIN1CHEAT];
    };

    Window_CheatInput.prototype.maxCols = function() {
        return 5;
    };

    Window_CheatInput.prototype.maxItems = function() {
        return 90;
    };

    Window_CheatInput.prototype.character = function() {
        return this._index < 88 ? this.table()[this._page][this._index] : '';
    };

    Window_CheatInput.prototype.isCheatSubmit = function() {
        Input.keyMapper[botao] = "CheatMenu";
        this.callOkHandler();
    };

    Window_CheatInput.prototype.isOk = function() {
        return this._index === 89;
    };

    Window_CheatInput.prototype.itemRect = function(index) {
        return {
            x: index % 10 * 42 + Math.floor(index % 10 / 5) * 24,
            y: Math.floor(index / 10) * this.lineHeight(),
            width: 42,
            height: this.lineHeight()
        };
    };

    Window_CheatInput.prototype.refresh = function() {
        var table = this.table();
        this.contents.clear();
        this.resetTextColor();
        for (var i = 0; i < 90; i++) {
            var rect = this.itemRect(i);
            rect.x += 3;
            rect.width -= 6;
            this.drawText(table[this._page][i], rect.x, rect.y, rect.width, 'center');
        }
    };

    Window_CheatInput.prototype.updateCursor = function() {
        var rect = this.itemRect(this._index);
        this.setCursorRect(rect.x, rect.y, rect.width, rect.height);
    };

    Window_CheatInput.prototype.isCursorMovable = function() {
        return this.active;
    };

    Window_CheatInput.prototype.cursorDown = function(wrap) {
        if (this._index < 80 || wrap) {
            this._index = (this._index + 10) % 90;
        }
    };

    Window_CheatInput.prototype.cursorUp = function(wrap) {
        if (this._index >= 10 || wrap) {
            this._index = (this._index + 80) % 90;
        }
    };

    Window_CheatInput.prototype.cursorRight = function(wrap) {
        if (this._index % 10 < 9) {
            this._index++;
        } else if (wrap) {
            this._index -= 9;
        }
    };

    Window_CheatInput.prototype.cursorLeft = function(wrap) {
        if (this._index % 10 > 0) {
            this._index--;
        } else if (wrap) {
            this._index += 9;
        }
    };

    Window_CheatInput.prototype.processCursorMove = function() {
        var lastPage = this._page;
        Window_Selectable.prototype.processCursorMove.call(this);
        this.updateCursor();
        if (this._page !== lastPage) {
            SoundManager.playCursor();
        }
    };

    Window_CheatInput.prototype.processHandling = function() {
        if (this.isOpen() && this.active) {

            // Bloco que configura as teclas corretamente
            Input.keyMapper[8] = "Backspace";
            Input.keyMapper[65] = "LetraA";
            Input.keyMapper[66] = "LetraB";
            Input.keyMapper[67] = "LetraC";
            Input.keyMapper[68] = "LetraD";
            Input.keyMapper[69] = "LetraE";
            Input.keyMapper[70] = "LetraF";
            Input.keyMapper[71] = "LetraG";
            Input.keyMapper[72] = "LetraH";
            Input.keyMapper[73] = "LetraI";
            Input.keyMapper[74] = "LetraJ";
            Input.keyMapper[75] = "LetraK";
            Input.keyMapper[76] = "LetraL";
            Input.keyMapper[77] = "LetraM";
            Input.keyMapper[78] = "LetraN";
            Input.keyMapper[79] = "LetraO";
            Input.keyMapper[80] = "LetraP";
            Input.keyMapper[81] = "LetraQ";
            Input.keyMapper[82] = "LetraR";
            Input.keyMapper[83] = "LetraS";
            Input.keyMapper[84] = "LetraT";
            Input.keyMapper[85] = "LetraU";
            Input.keyMapper[86] = "LetraV";
            Input.keyMapper[87] = "LetraW";
            Input.keyMapper[88] = "LetraX";
            Input.keyMapper[89] = "LetraY";
            Input.keyMapper[90] = "LetraZ";

            if (Input.isTriggered('shift')) this.processJump();

            if (Input.isRepeated('ok')) this.processOk();
            
            // Bloco que verifica qual a tecla pressionada e insere o caractere correspondente de acordo com o Index
            if (Input.isTriggered('LetraA')) this.clicando(0);
            if (Input.isTriggered('LetraB')) this.clicando(1);
            if (Input.isTriggered('LetraC')) this.clicando(2);
            if (Input.isTriggered('LetraD')) this.clicando(3);
            if (Input.isTriggered('LetraE')) this.clicando(4);
            if (Input.isTriggered('LetraF')) this.clicando(10);
            if (Input.isTriggered('LetraG')) this.clicando(11);
            if (Input.isTriggered('LetraH')) this.clicando(12);
            if (Input.isTriggered('LetraI')) this.clicando(13);
            if (Input.isTriggered('LetraJ')) this.clicando(14);
            if (Input.isTriggered('LetraK')) this.clicando(20);
            if (Input.isTriggered('LetraL')) this.clicando(21);
            if (Input.isTriggered('LetraM')) this.clicando(22);
            if (Input.isTriggered('LetraN')) this.clicando(23);
            if (Input.isTriggered('LetraO')) this.clicando(24);
            if (Input.isTriggered('LetraP')) this.clicando(30);
            if (Input.isTriggered('LetraQ')) this.clicando(31);
            if (Input.isTriggered('LetraR')) this.clicando(32);
            if (Input.isTriggered('LetraS')) this.clicando(33);
            if (Input.isTriggered('LetraT')) this.clicando(34);
            if (Input.isTriggered('LetraU')) this.clicando(40);
            if (Input.isTriggered('LetraV')) this.clicando(41);
            if (Input.isTriggered('LetraW')) this.clicando(42);
            if (Input.isTriggered('LetraX')) this.clicando(43);
            if (Input.isTriggered('LetraY')) this.clicando(44);
            if (Input.isTriggered('LetraZ')) this.clicando(50);
            if (Input.isTriggered('Backspace')) this.processCancel();
        }
    };

    Window_CheatInput.prototype.clicando = function(index){
        this._index = index;
        this.onNameAdd();
    }

    Window_CheatInput.prototype.processCancel = function() {
        this.processBack();
    };

    Window_CheatInput.prototype.processJump = function() {
        if (this._index !== 89) {
            this._index = 89;
            SoundManager.playCursor();
        }
    };

    Window_CheatInput.prototype.processBack = function() {
        if (this._editWindow.back()) {
            SoundManager.playCancel();
        }
    };

    Window_CheatInput.prototype.processOk = function() {
        if (this.character()) {
            this.onNameAdd();
        } else if (this.isCheatSubmit()) {
            SoundManager.playOk();
            this.cursorPagedown();
        } else if (this.isOk()) {
            this.onNameOk();
        }
    };

    Window_CheatInput.prototype.onNameAdd = function() {
        if (this._editWindow.add(this.character())) {
            SoundManager.playOk();
        } else {
            SoundManager.playBuzzer();
        }
    };

// FUNÇÃO DOS CHEATS

    Window_CheatInput.prototype.cheatAtivado = function(cheatCode){
        switch (cheatCode) {
            case 1: // +1 LV para o personagem 1
                $gameActors._data[1]._level = $gameActors._data[1]._level+1;
                this.mensagemConfirmacao();
                break;
            case 2: // +1 LV para todos personagens
                for (i=1;i < $gameParty._actors.length;i++){
                    $gameActors._data[i]._level = $gameActors._data[i]._level+1
                }   
                this.mensagemConfirmacao();
                break;
            case 3: // +5000 de ouro
                $gameParty.gainGold(5000);
                this.mensagemConfirmacao();
                break;
            case 4: // +5000 exp para o persoonagem 1
                $gameParty.allMembers().forEach(function(actor) {
                    actor.gainExp(5000);
                });
                this.mensagemConfirmacao();
                break;
            case 5: // Recebe todos os itens
                for (i=0;i < $dataItems.length;i++){
                    $gameParty.gainItem($dataItems[i], 1,);
                }   
                this.mensagemConfirmacao();
                break;
            case 6: // Recebe todos equipamentos
                for (i=0;i < $dataArmors.length;i++){
                    $gameParty.gainItem($dataArmors[i], 1,);
                } 
                this.mensagemConfirmacao();
                break;
            case 7: // Recebe todas armas
                for (i=0;i < $dataWeapons.length;i++){
                    $gameParty.gainItem($dataWeapons[i], 1,);
                } 
                this.mensagemConfirmacao();
                break;
            case 8: // Recupera toda vida de todos membros
                for (i=1;i < $gameParty._actors.length;i++){
                    $gameActors.actor(i)._hp = $gameActors.actor(i).param(0);
                }  
                this.mensagemConfirmacao();
                break;
            case 9: // Recupera toda mana de todos membros
                for (i=1;i < $gameParty._actors.length;i++){
                    $gameActors.actor(i)._mp = $gameActors.actor(i).param(1);
                }  
                this.mensagemConfirmacao();
                break;
            case 10: // Aumenta em 10 pontos todos atributos (Atq, Def, Atq Magico, Def Magica, Agilidade e Sorte)
                for (i=1;i < $gameParty._actors.length;i++){
                    $gameActors.actor(i).addParam(2, 10);
                    $gameActors.actor(i).addParam(3, 10);
                    $gameActors.actor(i).addParam(4, 10);
                    $gameActors.actor(i).addParam(5, 10);
                    $gameActors.actor(i).addParam(6, 10);
                    $gameActors.actor(i).addParam(7, 10);
                }  
                this.mensagemConfirmacao();
                break;

            default:

                break;
        }
    }

    Window_CheatInput.prototype.mensagemConfirmacao = function(){
        $gameMessage.setPositionType(1);
        $gameMessage.setBackground(1);
        $gameMessage.add("Código ativado!");
        $gameActors.actor(personagemCheat)._name = ""
    }

    Window_CheatInput.prototype.onNameOk = function() {
        if (this._editWindow.name() === '') {
            if (this._editWindow.restoreDefault()) {
                SoundManager.playOk();

            } else {
                SoundManager.playBuzzer();
            }
        } else {
            // BLOCO QUE SETA VARIÁVEIS COM O CONTEÚDO DIGITADO NOS PARÂMETROS
            var parameters = PluginManager.parameters('CheatsMenuShep');
            var cheatCode1 = String(parameters['Cheat Code 1'] || 'CHEAT1')
            var cheatCode2 = String(parameters['Cheat Code 2'] || 'CHEAT2')
            var cheatCode3 = String(parameters['Cheat Code 3'] || 'CHEAT3')
            var cheatCode4 = String(parameters['Cheat Code 4'] || 'CHEAT4')
            var cheatCode5 = String(parameters['Cheat Code 5'] || 'CHEAT5')
            var cheatCode6 = String(parameters['Cheat Code 6'] || 'CHEAT6')
            var cheatCode7 = String(parameters['Cheat Code 7'] || 'CHEAT7')
            var cheatCode8 = String(parameters['Cheat Code 8'] || 'CHEAT8')
            var cheatCode9 = String(parameters['Cheat Code 9'] || 'CHEAT9')
            var cheatCode10 = String(parameters['Cheat Code 10'] || 'CHEAT10')

            // BLOGO QUE VERIFICA SE O JOGADOR DIGITOU O CÓDIGO CERTO
            if (this._editWindow.name() == cheatCode1) this.cheatAtivado(1);
            if (this._editWindow.name() == cheatCode2) this.cheatAtivado(2);
            if (this._editWindow.name() == cheatCode3) this.cheatAtivado(3);
            if (this._editWindow.name() == cheatCode4) this.cheatAtivado(4);
            if (this._editWindow.name() == cheatCode5) this.cheatAtivado(5);
            if (this._editWindow.name() == cheatCode6) this.cheatAtivado(6);
            if (this._editWindow.name() === cheatCode7) this.cheatAtivado(7);
            if (this._editWindow.name() === cheatCode8) this.cheatAtivado(8);
            if (this._editWindow.name() === cheatCode9) this.cheatAtivado(9);
            if (this._editWindow.name() === cheatCode10) this.cheatAtivado(10);
        }
    };


})();

[box class=titlebg]
Créditos e Avisos
[/box]
Criador: Não é necessário, mas caso se sinta a vontade pode citar Shephiroth
Aceito todas sugestões para melhora-lo :D
.

Mais um plugin que vai servir bem em vários projetos! Eu usaria no meu, caso não estivesse com a frescurinha de não usar nenhum plugin e tentar fazer tudo por eventos!!!

Boa SHEP!

+1 REP!

Ah! Isso me dá uma baita duma nostalgia...

Sempre curti muito a ideia de códigos e esse script parece realizar essa função de forma bem eficiente e fácil de configurar.

Mais uma ótima nova função para o RMMV! Belo trabalho, Shep! :ok:
Procuro nos versos e nas entrelinhas
Consolo para'as falhas minhas
Para então transmitir com enlevo
O mesmo nesta canção que vos escrevo.

@ELIYUD

Muito obrigado pelo comentário :D
É bom ver que está empenhado em desenvolver os eventos, falando nisso eu preciso refazer uns sistemas que foram perdidos D:

Valeeu!




@DRAKYSM

Não é???

Eu amo jogos que permitem isso, eu gosto de aproveitar o jogo e depois usar os cheats pra poder explorar ainda mais e melhor outros aspectos do game.
Valeu pelo comentário! :D
.