>青猫_様
お役に立てたようで嬉しいです。
さて,いろいろ要望が出てきたようですね。
先にも申しました通り,すべてにはお応えできない可能性が高いです。
私自身の時間もそうですが,なにより私のMVでの開発スタイルがプラグイン不使用によるためです。
私は本家MVのコードを直接編集して開発を進めています。
従って,本家MVでの挙動を確かめるのが少し億劫です。
それが私のプラグイン制作を致さない理由です。
まあ言い訳はこのくらいにして。
一つ一つ見ていきましょう。
>ダッシュするとずれてしまいますが、これは敵が居るエリアのダッシュを禁止すればいいだけなので問題ありません。
本当にそれで宜しいですか?
ゲーム制作では改善意欲が大切だと思います。
下記のコードではプレイヤーのダッシュ状態に応じてイベントの速度をそれに合わせています。
>キーボードの「C」を押すと、その場で行動量(moveWeigh)を6増やす「足踏み」や、
下記のコードで実装しておきました。
動作の保証は致しません。
>メニューからアイテムを使うと1ターン使用し、相手のターンが来るようにしたいのですが……
たぶんデフォルトのシステムだと難しいですね。
どのようなシステムをご希望かによります。
相手のターンというとアイテムを使うたびにメニューを閉じるのですか?
下記のコードではメニューを閉じない方法を採用してみました。
アイテムを使った回数だけ,メニューを閉じた途端にイベントが動きます。
シンボルエンカウントならアリだとは思いますが,いかがでしょうか。
残念ながら機能の追加は致しません。
ご容赦ください。
>1つ目はマップの中に実行内容が無い、空イベントを一つでも設置すると、
>全てのイベント(敵シンボル)が、ゲームスタートから、二回行動したところで自律行動を停止してしまう現象が起きました。
上記のコードはあくまで参考として載せておきました。
不完全なので動作の保証は致しません。
あまり細かい所に行くとゲームを作るに等しいので,下記のコード以上は致せません。
>2つ目はイベントを最初「固定」にしておき、特定のスイッチが入ると、「近づく」に変更するイベントを作ったのですが、
下記のコードで解決できているでしょうか。
申し訳ないですが,タイムリミットです。
以降の対応について私では致しかねます。
他を当たっていただくか,この際ご自分で勉強なさってはいかがでしょうか。
ちなみに,MV本体のコードはJavaScriptという言語で書かれています。
ネット上でも書籍でもかなり情報がありますので覚えやすい言語です。
初心者向けかどうかは微妙ですが,色んな所で使われているし,損はないです。
プログラミングは楽しいですよー。
下記のコードを未来のローグライク作者のために書き置きしておきます。
後ほど来られた方がコピペで気軽に試せるよう,他のプラグインとの競合問題になるべく配慮しました。
それでご勘弁ください。
コード: 全て選択
/*以下のコードには不具合があります。
* 最新版は後ろの投稿をご覧ください。
*/
(function() {
'use strict';// 厳格モード
// 番号は「pc キーボード コード 一覧」等でググって下さい。
Input.keyMapper[67] = 'idle';// C
/////////////////////////////////////////////////////////////////////////////
// Game_Map
var _Game_Map_setup = Game_Map.prototype.setup;
Game_Map.prototype.setup = function(mapId) {// add.マップ開始時の初期化
_Game_Map_setup.apply(this, arguments);
this._turn = -1;// add.現マップでの経過ターン
$gamePlayer._stepAnime = true;// 常に足踏み(この辺りはエディタのスクリプトで設定しましょう)
$gamePlayer.setMoveSpeed(4);// 通常速度(これも状態変化で変わるためイベントで書きましょう)
};
var _Game_Map_update = Game_Map.prototype.update;
Game_Map.prototype.update = function(sceneActive) {// add.毎フレームの更新
$gameMap.checkNextTurn();// add.ターン進行チェック
_Game_Map_update.apply(this, arguments);
};
// add.......................................................................
Game_Map.prototype.checkNextTurn = function() {
if ($gamePlayer.isRestMover() || $gameMap.isEventRunning()) {
return;// イベント実行中はターンを更新しません。
}
for (var i = 1; i < this._events.length; i++) {
if (this._events[i].isRestMover()) {
return;
}
}
for (var i = 1; i < this._events.length; i++) {
if (this._events[i].isNearThePlayer()) {
this._events[i].addMoveWeight();
} else {
this._events[i].zeroWeight();
}
}
$gamePlayer.addMoveWeight();
this._turn++;
};
/////////////////////////////////////////////////////////////////////////////
// Game_CharacterBase
var _Game_CharacterBase_initMembers = Game_CharacterBase.prototype.initMembers;
Game_CharacterBase.prototype.initMembers = function() {// add.
_Game_CharacterBase_initMembers.apply(this, arguments);
this._moveWeight = 0;// 行動量
};
var _Game_CharacterBase_setMovementSuccess = Game_CharacterBase.prototype.setMovementSuccess;
Game_CharacterBase.prototype.setMovementSuccess = function(success) {// add.
_Game_CharacterBase_setMovementSuccess.apply(this, arguments);
if (success) {// 移動に成功した際
this.removeWeight();
} else {// 囲まれていた場合
for (var i = 1; i <= 9; i++) {
if (this.canPass(this.x, this.y, i)) {
return;
}
}
this.removeWeight();
}
};
var _Game_CharacterBase_realMoveSpeed = Game_CharacterBase.prototype.realMoveSpeed;
Game_CharacterBase.prototype.realMoveSpeed = function() {// add.
var speed = _Game_CharacterBase_realMoveSpeed.apply(this, arguments);
if (speed < 4) {
speed = 4;// 標準未満は遅いので標準に合わせる
}
return speed;
};
var _Game_CharacterBase_isDashing = Game_CharacterBase.prototype.isDashing;
Game_CharacterBase.prototype.isDashing = function() {// mod.
return $gamePlayer.isDashButtonPressed();// プレイヤーに合わせてダッシュ
};
// add.......................................................................
Game_CharacterBase.prototype.getBaseWeight = function() {
if (this._moveType === 0) {
return 0;// 固定
}
switch (this._moveSpeed) {
case 1: return 0;// 停止
case 2: return 18;// 1/3倍速
case 3: return 12;// 1/2倍速
case 4: return 6;// 通常
case 5: return 3;// 2倍速
case 6: return 2;// 3倍速
case 7: return 1;// ダッシュ用
default: throw new Error('The getBaseWeight() value is invalid');
}
};
Game_CharacterBase.prototype.addMoveWeight = function() {
if (!this.getBaseWeight()) {
this.zeroWeight();
return;
}
this._moveWeight += $gamePlayer.getBaseWeight() || 6;
};
Game_CharacterBase.prototype.removeWeight = function() {
if ($gameMap.isEventRunning()) {
return;
}
this._moveWeight -= this.getBaseWeight() || this._moveWeight;
};
Game_CharacterBase.prototype.zeroWeight = function() {
this._moveWeight = 0;
};
Game_CharacterBase.prototype.isRestMover = function() {
if ($gameMap.isEventRunning()) {
return true;
} else if (!this.getBaseWeight()) {
return false;
}
return this._moveWeight >= this.getBaseWeight();
};
/////////////////////////////////////////////////////////////////////////////
// Game_Player
var _Game_Player_moveByInput = Game_Player.prototype.moveByInput;
Game_Player.prototype.moveByInput = function() {// add.
_Game_Player_moveByInput.apply(this, arguments);
if (!this.isMoving() && this.canMove()) {
if (Input.isRepeated('idle')) {// add.「C」キーで足踏み
this.removeWeight();
}
}
};
var _Game_Player_canMove = Game_Player.prototype.canMove;
Game_Player.prototype.canMove = function() {// add.
return _Game_Player_canMove.apply(this, arguments) && this.isRestMover();
};
/////////////////////////////////////////////////////////////////////////////
// Game_Event
var _Game_Event_updateSelfMovement = Game_Event.prototype.updateSelfMovement;
Game_Event.prototype.updateSelfMovement = function() {// mod.
if (!this._locked && this.canMove()) {
switch (this._moveType) {
case 1: this.moveTypeRandom(); break;
case 2: this.moveTypeTowardPlayer(); break;
case 3: this.moveTypeCustom(); break;
default:
}
}
};
// add.......................................................................
Game_Event.prototype.canMove = function() {
return !$gamePlayer.isRestMover() && this.isRestMover();
};
/////////////////////////////////////////////////////////////////////////////
// Scene_Map
var _Scene_Map_updateCallMenu = Scene_Map.prototype.updateCallMenu;
Scene_Map.prototype.updateCallMenu = function() {// mod.
if (this.isMenuEnabled()) {
if (this.isMenuCalled()) {
this.menuCalling = true;
}
if (this.menuCalling && !$gamePlayer.isMoving() && $gamePlayer.canMove()) {// add.
this.callMenu();
}
} else {
this.menuCalling = false;
}
};
/////////////////////////////////////////////////////////////////////////////
// Scene_ItemBase
var _Scene_ItemBase_useItem = Scene_ItemBase.prototype.useItem;
Scene_ItemBase.prototype.useItem = function() {// add.
_Scene_ItemBase_useItem.apply(this, arguments);
$gamePlayer.removeWeight();
};
})();
とりあえず動作確認お願いします。
もし何か不備がございましたらご連絡ください。
機能の追加は致しません。
【2017-11-17追記】
青猫_様の熱心さは伝わりました。
私事ですが、ただいま祖母が危篤状態なので返信が遅れます。
しばらくお待ち下さい。
【2017-11-18追記】
最新版を投稿しました。
後ろの記事をご覧ください。