forked from munokura/tomoaky-MV-plugins
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTMMoveRouteEx.js
156 lines (139 loc) · 5.08 KB
/
TMMoveRouteEx.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
//=============================================================================
// TMVplugin - 自律移動拡張
// 作者: tomoaky (http://hikimoki.sakura.ne.jp/)
// Version: 1.1
// 最終更新日: 2016/04/12
//=============================================================================
/*:
* @plugindesc イベントに新しい自律移動パターンを追加します。
*
* @author tomoaky (http://hikimoki.sakura.ne.jp/)
*
* @help
* 使い方:
* イベントの自律移動タイプをカスタムに設定し、移動ルートで
* 以下のスクリプトを実行してください。『動作を繰り返す』に
* チェックをいれれば設定は完了です。
* イベントコマンド『移動ルートの設定』でも同様に使用できます。
*
* this.moveTowardEvent(10);
* イベント10番に近づく
*
* this.moveAwayFromEvent(5);
* イベント5番から遠ざかる
*
* this.moveLeft45();
* 今向いている方向から左斜め前へ移動する
*
* this.moveRight45();
* 今向いている方向から右斜め前へ移動する
*
* this.moveLeft135();
* 今向いている方向から左斜め後ろへ移動する
*
* this.moveRight135();
* 今向いている方向から右斜め後ろへ移動する
*
* this.moveRouteEx1();
* 壁に右手を付いて移動し続けます。this.moveRouteEx1(true); にすると
* 移動可能範囲が同じリージョン内に限定されます。
*
* this.moveRouteEx2();
* 壁に左手を付いて移動し続けます。this.moveRouteEx2(true); にすると
* 移動可能範囲が同じリージョン内に限定されます。
*
* プラグインコマンドはありません。
*
*/
var Imported = Imported || {};
Imported.TMMoveRouteEx = true;
(function() {
//-----------------------------------------------------------------------------
// Game_Character
//
Game_Character.prototype.moveTowardEvent = function(eventId) {
var event = $gameMap.event(eventId);
if (event) this.moveTowardCharacter(event);
};
Game_Character.prototype.moveAwayFromEvent = function(eventId) {
var event = $gameMap.event(eventId);
if (event) this.moveAwayFromCharacter(event);
};
Game_Character.prototype.moveLeft45 = function() {
var d = this.direction();
var horz = d / 2 % 2 === 1 ? 6 : 4;
var vert = d <= 4 ? 2 : 8;
this.moveDiagonally(horz, vert);
};
Game_Character.prototype.moveRight45 = function() {
var d = this.direction();
var horz = d <= 4 ? 4 : 6;
var vert = d / 2 % 2 === 1 ? 2 : 8;
this.moveDiagonally(horz, vert);
};
Game_Character.prototype.moveLeft135 = function() {
var d = this.direction();
var horz = d <= 4 ? 6 : 4;
var vert = d / 2 % 2 === 1 ? 8 : 2;
this.moveDiagonally(horz, vert);
};
Game_Character.prototype.moveRight135 = function() {
var d = this.direction();
var horz = d / 2 % 2 === 1 ? 4 : 6;
var vert = d <= 4 ? 8 : 2;
this.moveDiagonally(horz, vert);
};
Game_Character.prototype.moveRouteEx1 = function(sameRegion) {
this.turnRight90();
if (this.canPassSameRegion(this.x, this.y, this.direction(), sameRegion)) {
var x = $gameMap.roundXWithDirection(this.x, this.direction());
var y = $gameMap.roundYWithDirection(this.y, this.direction());
var d = this.directionTurnRight90();
if (!this.canPassSameRegion(x, y, d, sameRegion)) {
this.moveStraight(this.direction());
return;
}
}
for (var i = 0; i < 3; i++) {
this.turnLeft90();
if (this.moveStraightSameRegion(this.direction(), sameRegion)) return;
}
};
Game_Character.prototype.moveRouteEx2 = function(sameRegion) {
this.turnLeft90();
if (this.canPassSameRegion(this.x, this.y, this.direction(), sameRegion)) {
var x = $gameMap.roundXWithDirection(this.x, this.direction());
var y = $gameMap.roundYWithDirection(this.y, this.direction());
var d = this.directionTurnLeft90();
if (!this.canPassSameRegion(x, y, d, sameRegion)) {
this.moveStraight(this.direction());
return;
}
}
for (var i = 0; i < 3; i++) {
this.turnRight90();
if (this.moveStraightSameRegion(this.direction(), sameRegion)) return;
}
};
Game_Character.prototype.moveStraightSameRegion = function(d, sameRegion) {
if (!this.canPassSameRegion(this.x, this.y, d, sameRegion)) return false;
this.moveStraight(d);
return true;
};
Game_Character.prototype.canPassSameRegion = function(x, y, d, sameRegion) {
var x2 = $gameMap.roundXWithDirection(x, d);
var y2 = $gameMap.roundYWithDirection(y, d);
if (sameRegion && $gameMap.regionId(x, y) !== $gameMap.regionId(x2, y2)) {
return false;
}
return this.canPass(x, y, d);
};
Game_Character.prototype.directionTurnRight90 = function() {
var d = this.direction();
return d === 2 ? 4 : (d === 4 ? 8 : (d === 6 ? 2 : 6));
};
Game_Character.prototype.directionTurnLeft90 = function() {
var d = this.direction();
return d === 2 ? 6 : (d === 4 ? 2 : (d === 6 ? 8 : 4));
};
})();