ページ 11

【解決済み】HalfMove.jsとMOG_PickupThrow.jsを併用したい

Posted: 2017年7月25日(火) 21:24
by higara
よろしければご教授ください。

題名の通りです。
トリアコンタン様が配布されているHalfMove.jsを組み込んでゲームを作成しています。
Atelier Rgss様の所で配布されているMOG_PickupThrow.jsを新たに導入したいと思い、先走って持ち上げ・投げモーションのキャラチップを作ってしまったのですが、
HalfMove.jsをONにした状態だと、〇.5の座標にいる状態でスクリプトが上手く動作しないようで、
石を投げることができなくなってしまいます。

この2つを共存させて、ゲーム上で違和感なく操作できる方法はあるでしょうか?
片方を採用したら、片方を諦めるしかないでしょうか。


よろしくお願いします。

Re: HalfMove.jsとMOG_PickupThrow.jsを併用したい

Posted: 2017年7月25日(火) 23:21
by まっつUP
higara様
お世話になります。

追記:原因は!$gameMap.isPassable(x3, y3)がtrueしか返さないことだと思いました。
色々試した結果力技が一番いい挙動になったため貼っておきます。
(普通に歩ける場所でも通行不可と少しでも重なっていると投げられない場合はあります。)
MOG_PickupThrow.jsの既存の関数を以下の通り書き換えてください。

コード: 全て選択

Game_Player.prototype.throwEvent = function(event) {
	var r = event._throw.range;	var xr = 0;	var yr = 0;	
	if (this._direction === 2) {
		var x = this._x, y = this._y + r - 1, x2 = 0, y2 = +r;
		for (var i = 0; i < r * 2; i++) {
	    	if (this.canPassThrow(x,y,this._direction)) {xr = x2; yr = y2;break};
			y--;y2--;
			y += 0.5;
			y2 += 0.5;
		};	
    } else if (this._direction === 4) {
		var x = this._x - r + 1, y = this._y, x2 = -r, y2 = 0;
		for (var i = 0; i < r * 2; i++) {
	    	if (this.canPassThrow(x,y,this._direction)) {xr = x2; yr = y2;break};
			x++;x2++;
			x -= 0.5;
			x2 -= 0.5
		};	    
    } else if (this._direction === 6) {
		var x = this._x + r - 1, y = this._y, x2 = +r, y2 = 0;
		for (var i = 0; i < r * 2; i++) {
	    	if (this.canPassThrow(x,y,this._direction)) {xr = x2; yr = y2;break};
			x--;x2--;
			x += 0.5;
			x2 += 0.5;
		};			
    } else if (this._direction === 8) {
		var x = this._x, y = this._y - r + 1, x2 = 0, y2 = -r;
		for (var i = 0; i < r * 2; i++) {
	    	if (this.canPassThrow(x,y,this._direction)) {xr = x2; yr = y2;break};
			y++;y2++;
			y -= 0.5;
			y2 -= 0.5;
		};
	};
	if (xr === 0 && yr ===0) {return};
	event.jump(xr,yr)
	event._throw.enabled = false
    event._throw.wait = 30;
	event._through = this._throw.through;
	event._directionFix = this._throw._directionFix;	
	this._pickup.check = true;
};

Re: HalfMove.jsとMOG_PickupThrow.jsを併用したい

Posted: 2017年7月25日(火) 23:57
by higara
>まっつUP様
ありがとうございます!
その通りにスクリプトを書き換えてテストしてみたところ、
〇.5歩の場所からでも石を投げることができるようになりました!

まだ実際に仕掛けを作っていないので断言はできませんが、
仕掛けを置く場所にさえ気を付ければ、何とか共存させることができそうです。

どちらかを諦めなければいけないかも、と思っていたので
とても嬉しいです。助かりました。


質問を【解決済み】にさせていただきます。
ありがとうございました。

Re: 【解決済み】HalfMove.jsとMOG_PickupThrow.jsを併用したい

Posted: 2017年7月26日(水) 21:48
by まっつUP
既存の関数を以下のようにすると
かなりマシな挙動を取ってくれるようになりました。
しかし、穴を飛び越える挙動をつくるのが難しく(穴の真ん中でジャンプが止まる等)
共存させることができませんでした。
あらぬ方向へのジャンプをHalfMoveのリージョン設定でとめることは可能になりました。

改変は前のトピックで変更した関数も含みます。

コード: 全て選択

Game_CharacterBase.prototype.canPassThrow = function(x, y, d) {
    if (!$gameMap.isValid(x, y)) {
        return false;
    };
    if (this.isThrough() || this.isDebugThrough()) {
        return true;
    };
    if (!this.isMapPassable(x, y, d)) {
        return false;
    };
    if (this.isCollidedWithCharacters(x, y)) {
        return false;
    };
    return true;
};

Game_Player.prototype.throwEvent = function(event) {
	var r = event._throw.range;
	if(r === 0) return;
	var x = Math.floor(this._x);
	var y = Math.floor(this._y);
	var xr = 0;
	var yr = 0;
	var xr2 = 0;
	var yr2 = 0;
	var d = this.direction();
	for(var i = 0; i <= r; i++){
		xr2 = d === 4 ? -i : d === 6 ? i : 0;
		yr2 = d === 2 ? i : d === 8 ? -i : 0;
		if(!this.canPassThrow(x + xr, y + yr, d)) break;
		xr = xr2;
		yr = yr2;
	}
	if(xr === 0 && yr === 0) return;
	event.jump(xr,yr);
	event._throw.enabled = false;
    event._throw.wait = 30;
	event._through = this._throw.through;
	event._directionFix = this._throw._directionFix;	
	this._pickup.check = true;
};

Re: 【解決済み】HalfMove.jsとMOG_PickupThrow.jsを併用したい

Posted: 2017年7月26日(水) 23:32
by higara
>まっつUP様
さらに改造していただきありがとうございます!

確かに移動不可マスの先に投げることができなくなりましたが、
今まで石を置くことができなかった場所でも、通常通り動作するようになりました。

作ろうと思っていた仕掛けは移動可能マスの中のみで完結するものを考えていたので、
自分の場合はこちらの方が使い勝手がよさそうです。
色々と試してみようと思います!