【ツクールMV Tips】プラグインにするまでもないスクリプト小技集(卑弥呼テクニック)
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

【ツクールMV Tips】プラグインにするまでもないスクリプト小技集(卑弥呼テクニック)

2016-02-18 16:30
    フリーのローグライクアクションRPG
    『AliasAche:エイリアスエイク』

    ……を公開してます、さいきんツクラー兼業はじめました、ボカロPで絵描きのterunonです。

    それにあたって、エイリアスエイクの宣伝の一環として、エイリアスエイクで度々直面した
    ・コモンイベントでは微妙に出来ない
    ・けどスクリプトでやるとあっさりできすぎちゃうからプラグイン素材化しない
    そんな微妙な問題を解決する
    物女が日坊主のスクリプト学習でさえたテクニック集」、
    略して「卑弥呼テクニック」を書いていこうと思います。
    なお、卑弥呼なので処理のきれいさよりも簡便さを優先しています。

    宣伝が目的なので、参考にしてくださった方は、是非
    素材クレジットのところとかに「卑弥呼テクニック terunon」とか書いてくれたり、
    エイリアスエイク楽しいーー!!ってツイートしてくれたりしてください。
    (※半分ジョークなので、別にしなくてもいいですが、してくれたら拡散等支援します)


    ※ここでの「末尾に追加」とは、たとえば
    Scene_Skill.prototype.create = function() {
    Scene_ItemBase.prototype.create.call(this);
    this.createHelpWindow();
    this.createSkillTypeWindow();
    this.createStatusWindow();
    this.createItemWindow();
    this.createActorWindow();
    this.refreshActor();
    };

    を、
    Scene_Skill.prototype.create = function() {
    Scene_ItemBase.prototype.create.call(this);
    this.createHelpWindow();
    this.createSkillTypeWindow();
    this.createStatusWindow();
    this.createItemWindow();
    this.createActorWindow();
    this.refreshActor();
    this._skillTypeWindow.updateHelp; //追加
    };

    のようにすることを言います。

    ※スペースが勝手に消されて少し見づらいので、適宜.jsファイルを参照してください。
    -----------------------------------------------------------------------------------
    ①立ち絵が邪魔にならないよう、マップ上のスクロール中心点を数マスずらす
    ずらす量を足し引きするだけ。
    Game_Player.prototype.centerX = function() {

    return (Graphics.width / $gameMap.tileWidth() - 1) / 2.0 - ずらすマス数;
    };

    ②特定スイッチがONの間に戦闘中、戦闘外も含めて何ターン経過したかを変数で知る
    Game_Battler.prototype.onTurnEnd (RPG_objects.js内にある。)の末尾に追加(※アクター1がいるとき):
    if (this._actorId == 1 && 好きなスイッチ) $gameVariables.setValue(好きな変数, $gameVariables.value(好きな変数) + 1)


    ③MPが割合ではなく1ずつ回復するステートを作る
    Game_Battler.prototype.onTurnEnd (RPG_objects.js内にある。)の末尾に追加:
    if (this.isStateAffected(ステート番号)) this.gainMp(1);


    ④通常、スキルタイプを選んだときにヘルプウィンドウに説明文は表示されないが、アイテムID1~3の説明文を代わりに表示させることで説明する
    スキルタイプ選択中にヘルプを更新する処理を新しく定義
    Window_SkillType.prototype.updateHelp = function() {
    var itemdata = $dataItems[[1,2,3][this.currentExt() - 1]]; //アイテムIDのデータを拾って
    this._helpWindow.setItem(itemdata) //ヘルプウィンドウに表示させる
    };

    Scene_Skill.prototype.create の末尾に追加:

    this._skillTypeWindow.updateHelp; //実際に処理に加える

    ⑤魔法反射で受けるダメージがそのままだと即死級なので、反射時のみ1/2に減らす
    →反射ダメージの直前に魔法ダメージを50%カットするステートをつけ、その後すぐ外す
    BattleManager.invokeMagicReflection = function(subject, target) {
    this._logWindow.displayReflection(target);
    subject.addState(好きなステートID); //追加
    this._action.apply(subject);
    subject.removeState(好きなステートID); //追加
    this._logWindow.displayActionResults(subject, subject);
    };


    ⑥「かばう」(身代わり)の発動条件 HP1/4未満の味方 が厳しすぎるので発動しやすく
    →瀕死状態かどうかの判定をHP1/4でなく1/2にする
    Game_BattlerBase.prototype.isDying = function() {
    return this.isAlive() && this._hp < this.mhp / 2; //元々は 2 でなくて 4 で割ってた
    };


    ⑦被ダメージでの獲得TP量を調節する
    (デフォルト…基準値=50。最大HPと同量のダメージを受けたときTPが50溜まる計算。溜まりすぎ。)
    Game_Battler.prototype.chargeTpByDamage = function(damageRate) {
    var value = Math.floor(基準値 * damageRate * this.tcr);
    this.gainSilentTp(value);
    };

    ⑧「~が現れた!」とか見りゃわかるから早く戦闘させてくれパッチ
    BattleManager.startBattle = function() {
    this._phase = 'start';
    $gameSystem.onBattleStart();
    $gameParty.onBattleStart();
    $gameTroop.onBattleStart();
    //this.displayStartMessages();   ←これが原因なので//で消した
    };


    ⑨エンカウント時に画面が切り替わる「バシュウウウ」を短くして早く戦闘に移行させる
    Scene_Map.prototype.encounterEffectSpeed = function() {
    return 好きな値;
    };


    ⑩逃走成功率基準値をデフォの50%より高く(基準値×味方敏捷平均/敵敏捷平均=成功率)
    BattleManager.makeEscapeRatio = function() {
    this._escapeRatio = 新しい基準値 * $gameParty.agility() / $gameTroop.agility();
    };

    ⑪ダメージポップアップがあるんだから文章の「~ダメージを与えた!」はクドい
    Window_BattleLog.prototype.displayHpDamage = function(target) {
    if (target.result().hpAffected) {
    if (target.result().hpDamage > 0 && !target.result().drain) {
    this.push('performDamage', target);
    }
    if (target.result().hpDamage < 0) {
    this.push('performRecovery', target);
    }
    // this.push('addText', this.makeHpDamageText(target));  ←こいつが原因
    }
    };
    ※displayMpDamage等も同様


    ⑫ターン終了時にコモンイベント
    応用例:変数加算でターン数をカウントし、ターンが経つほど威力が上がる技などに
    応用例:アクター○○が居るとき、味方全員が毎ターンHP5ずつ回復
    応用例:ここで処理を組めば、毎ターン状態異常の数x5だけTPが増加する特徴などを作れる
    BattleManager.endTurn の末尾に追加:
    $gameTemp.reserveCommonEvent(好きなコモンID);


    ⑬船に乗ったときのスピードを速く
    Game_Vehicle.prototype.getOn の末尾に追加:
    $gamePlayer.setMoveSpeed(5);
    Game_Vehicle.prototype.getOff の末尾に追加:
    $gamePlayer.setMoveSpeed(4);


    ⑭アクターID1が装備している武器のメモ欄に<hogehoge>が含まれるとき真
    イベントコマンド(スクリプト):
    $gameVariables.setValue(好きな変数ID, $gameActors.actor(1)._equips[0]._itemId)
    条件分岐:$dataWeapons[$gameVariables.value(好きな変数ID)].note.match(/<(?:hogehoge)>/i)


    ⑮イベントコマンドの「このイベント」に当たるイベントを途中で別イベントに差し替える
    イベントコマンド(スクリプト):this._eventId = 別イベントのID

    ⑯移動ルートの指定において、好きなタイミングでアニメーションを再生
    スクリプト:this.requestAnimation(アニメーションID);

    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。