Bienvenue visiteur !
|
Statistiques
Liste des membres
Contact
Mentions légales
627 connectés actuellement
30729192 visiteurs depuis l'ouverture
2809 visiteurs aujourd'hui
Partenaires
Tous nos partenaires
Devenir partenaire
|
❤ 0 Auteur : Zeus81
Logiciel : RPG Maker XP
Nombre de scripts : 1
Fonctionnalité
Ce script permet les déplacements au pixel près.
Installation
A insérer au-dessus de Main.
Utilisation
Le script est autonome. Vous pouvez juste décider de l'activer ou le désactiver via un interrupteur configurable en début de script ([color=gold]SUPER_WALK_SWITCH = 1).
Version 1.2 (recommandée)
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
| ##########################
# SUPER WALK 1.2 #
# Script créé par Zeus81 #
##########################
class Game_Player
SUPER_WALK_SWITCH = 1 # id de l'interrupteur pour activer/désactiver le script
end
class Game_Character
alias super_walk_game_character_initialize initialize
def initialize
@x2 = @y2 = 0
super_walk_game_character_initialize
end
def super_walk_distance
@move_speed > 4 ? @move_speed > 5 ? 0.5 : 0.25 : 0.125
end
def moving?
@real_x != @x2*128 or @real_y != @y2*128
end
def passable?(x, y, d)
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
return false unless $game_map.valid?(new_x, new_y)
return true if @through
return false unless $game_map.passable?(x, y, d, self)
return false unless $game_map.passable?(new_x, new_y, 10-d)
$game_map.events.each_value do |event|
return false if event.x == new_x and event.y == new_y and !event.through and
(self != $game_player or !event.character_name.empty?)
end
return false if $game_player.x == new_x and $game_player.y == new_y and
!$game_player.through and !@character_name.empty?
return true
end
def moveto(x, y)
@x = @x2 = x % $game_map.width
@y = @y2 = y % $game_map.height
@real_x = @x * 128
@real_y = @y * 128
@prelock_direction = 0
end
def update_jump
@jump_count -= 1
@real_x = (@real_x * @jump_count + @x2 * 128) / (@jump_count + 1)
@real_y = (@real_y * @jump_count + @y2 * 128) / (@jump_count + 1)
end
def update_move
x128, y128, distance = @x2*128, @y2*128, 2**@move_speed
if x128 < @real_x; @real_x = [@real_x-distance, x128].max
elsif x128 > @real_x; @real_x = [@real_x+distance, x128].min
end
if y128 < @real_y; @real_y = [@real_y-distance, y128].max
elsif y128 > @real_y; @real_y = [@real_y+distance, y128].min
end
if @walk_anime; @anime_count += 1.5
elsif @step_anime; @anime_count += 1
end
end
def move_down(turn_enabled=true, super_walk=false)
turn_down if turn_enabled
if passable?(@x, @y, 2)
turn_down
if super_walk
@x2 -= 0.125 if @x2 > @x and !passable?(@x+1, @y, 2)
@x2 += 0.125 if @x2 < @x and !passable?(@x-1, @y, 2)
@y2 += super_walk_distance
@y = @y2.round
else @y2 = @y += 1
end
increase_steps
elsif @y2 < @y
@y2 += 0.125
else
check_event_trigger_touch(@x, @y+1)
return false
end
return true
end
def move_left(turn_enabled=true, super_walk=false)
turn_left if turn_enabled
if passable?(@x, @y, 4)
turn_left
if super_walk
@y2 -= 0.125 if @y2 > @y and !passable?(@x, @y+1, 4)
@y2 += 0.125 if @y2 < @y and !passable?(@x, @y-1, 4)
@x2 -= super_walk_distance
@x = @x2.round
else @x2 = @x -= 1
end
increase_steps
elsif @x2 > @x
@x2 -= 0.125
else
check_event_trigger_touch(@x-1, @y)
return false
end
return true
end
def move_right(turn_enabled=true, super_walk=false)
turn_right if turn_enabled
if passable?(@x, @y, 6)
turn_right
if super_walk
@y2 -= 0.125 if @y2 > @y and !passable?(@x, @y+1, 6)
@y2 += 0.125 if @y2 < @y and !passable?(@x, @y-1, 6)
@x2 += super_walk_distance
@x = @x2.round
else @x2 = @x += 1
end
increase_steps
elsif @x2 < @x
@x2 += 0.125
else
check_event_trigger_touch(@x+1, @y)
return false
end
return true
end
def move_up(turn_enabled=true, super_walk=false)
turn_up if turn_enabled
if passable?(@x, @y, 8)
turn_up
if super_walk
@x2 -= 0.125 if @x2 > @x and !passable?(@x+1, @y, 8)
@x2 += 0.125 if @x2 < @x and !passable?(@x-1, @y, 8)
@y2 -= super_walk_distance
@y = @y2.round
else @y2 = @y -= 1
end
increase_steps
elsif @y2 > @y
@y2 -= 0.125
else
check_event_trigger_touch(@x, @y-1)
return false
end
return true
end
def move_lower_left(turn_enabled=true, super_walk=false)
last_dir = @direction
move1 = move_down(false, super_walk)
move2 = move_left(false, super_walk)
if !@direction_fix and turn_enabled ? move1 == move2 : move1 && move2
@direction = last_dir == 6 ? 4 : last_dir == 8 ? 2 : last_dir
@stop_count = 0
end
return move1 || move2
end
def move_lower_right(turn_enabled=true, super_walk=false)
last_dir = @direction
move1 = move_down( false, super_walk)
move2 = move_right(false, super_walk)
if !@direction_fix and turn_enabled ? move1 == move2 : move1 && move2
@direction = last_dir == 4 ? 6 : last_dir == 8 ? 2 : last_dir
@stop_count = 0
end
return move1 || move2
end
def move_upper_left(turn_enabled=true, super_walk=false)
last_dir = @direction
move1 = move_up( false, super_walk)
move2 = move_left(false, super_walk)
if !@direction_fix and turn_enabled ? move1 == move2 : move1 && move2
@direction = last_dir == 6 ? 4 : last_dir == 2 ? 8 : last_dir
@stop_count = 0
end
return move1 || move2
end
def move_upper_right(turn_enabled=true, super_walk=false)
last_dir = @direction
move1 = move_up( false, super_walk)
move2 = move_right(false, super_walk)
if !@direction_fix and turn_enabled ? move1 == move2 : move1 && move2
@direction = last_dir == 4 ? 6 : last_dir == 2 ? 8 : last_dir
@stop_count = 0
end
return move1 || move2
end
def move_random
case rand(8)
when 0; move_lower_left
when 1; move_down
when 2; move_lower_right
when 3; move_left
when 4; move_upper_left
when 5; move_right
when 6; move_upper_right
when 7; move_up
end
end
def jump(x_plus, y_plus)
loop do
if (x_plus == 0 and y_plus == 0) or passable?(@x+x_plus, @y+y_plus, 0)
if x_plus.abs > y_plus.abs
x_plus < 0 ? turn_left : turn_right
else y_plus < 0 ? turn_up : turn_down
end unless x_plus == 0 and y_plus == 0
straighten
@x += x_plus
@x2 += x_plus
@y += y_plus
@y2 += y_plus
@jump_peak = 10 - @move_speed + Math.hypot(x_plus, y_plus).round
@jump_count = @jump_peak * 2
@stop_count = 0
return
end
x_plus -= 1 if x_plus > 0
x_plus += 1 if x_plus < 0
y_plus -= 1 if y_plus > 0
y_plus += 1 if y_plus < 0
end
end
end
class Game_Player
def update
last_x, last_y, last_rx, last_ry = @x, @y, @real_x, @real_y
super_walk = $game_switches[SUPER_WALK_SWITCH]
unless last_moving = moving? or @move_route_forcing or
$game_temp.message_window_showing or
$game_system.map_interpreter.running?
case Input.dir8
when 1; move_lower_left( true, super_walk)
when 2; move_down( true, super_walk)
when 3; move_lower_right(true, super_walk)
when 4; move_left( true, super_walk)
when 6; move_right( true, super_walk)
when 7; move_upper_left( true, super_walk)
when 8; move_up( true, super_walk)
when 9; move_upper_right(true, super_walk)
end
end
last_moving = last_x != @x || last_y != @y if super_walk
super
$game_map.scroll_left(last_rx-@real_x) if @real_x < last_rx and @real_x-$game_map.display_x < CENTER_X
$game_map.scroll_right(@real_x-last_rx) if @real_x > last_rx and @real_x-$game_map.display_x > CENTER_X
$game_map.scroll_up(last_ry-@real_y) if @real_y < last_ry and @real_y-$game_map.display_y < CENTER_Y
$game_map.scroll_down(@real_y-last_ry) if @real_y > last_ry and @real_y-$game_map.display_y > CENTER_Y
unless moving?
if last_moving and !check_event_trigger_here([1,2])
if @encounter_count > 0 and !($DEBUG and Input.press?(Input::CTRL))
@encounter_count -= 1
end
end
if Input.trigger?(Input::C)
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end |
Spoiler (cliquez pour afficher) Version 1.0
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
| #########################
# SUPER WALK #
#Script créé par Zeus81#
#########################
class Game_Character
attr_reader :x2
attr_reader :y2
alias game_character_initialize initialize
def initialize
@x2 = 0
@y2 = 0
game_character_initialize
end
def moving?
return (@real_x != @x2 * 128 or @real_y != @y2 * 128)
end
def passable?(x, y, d)
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
unless $game_map.valid?(new_x, new_y)
return false
end
if @through
return true
end
unless $game_map.passable?(x, y, d, self)
return false
end
unless $game_map.passable?(new_x, new_y, 10 - d)
return false
end
for event in $game_map.events.values
if event.x == new_x and event.y == new_y
unless event.through
if event.character_name != ""
return false
end
end
end
end
if $game_player.x == new_x and $game_player.y == new_y
unless $game_player.through
if @character_name != ""
return false
end
end
end
return true
end
def moveto(x, y)
@x = @x2 = x % $game_map.width
@y = @y2 = y % $game_map.height
@real_x = @x * 128
@real_y = @y * 128
@prelock_direction = 0
end
def update_jump
@jump_count -= 1
@real_x = (@real_x * @jump_count + @x2 * 128) / (@jump_count + 1)
@real_y = (@real_y * @jump_count + @y2 * 128) / (@jump_count + 1)
end
def update_move
distance = 2 ** @move_speed
if @y2 * 128 > @real_y
@real_y = [@real_y + distance, @y2 * 128].min
end
if @x2 * 128 < @real_x
@real_x = [@real_x - distance, @x2 * 128].max
end
if @x2 * 128 > @real_x
@real_x = [@real_x + distance, @x2 * 128].min
end
if @y2 * 128 < @real_y
@real_y = [@real_y - distance, @y2 * 128].max
end
if @walk_anime
@anime_count += 1.5
elsif @step_anime
@anime_count += 1
end
end
def move_down(turn_enabled = true, player = false)
turn_down if turn_enabled
if passable?(@x, @y, 2)
if player
@x2 -= 0.125 if passable?(@x+1, @y, 2) == false and @x2 > @x
@x2 += 0.125 if passable?(@x-1, @y, 2) == false and @x2 < @x
multiplicateur = [(@move_speed - 4) * 2, 1].max
@y2 += 0.125 * multiplicateur
else
@y2 += 1
end
@y = @y2.round
increase_steps
else
if @y2 < @y
@y2 += 0.125
else
check_event_trigger_touch(@x, @y+1)
end
end
end
def move_left(turn_enabled = true, player = false)
turn_left if turn_enabled
if passable?(@x, @y, 4)
if player
@y2 -= 0.125 if passable?(@x, @y+1, 4) == false and @y2 > @y
@y2 += 0.125 if passable?(@x, @y-1, 4) == false and @y2 < @y
multiplicateur = [(@move_speed - 4) * 2, 1].max
@x2 -= 0.125 * multiplicateur
else
@x2 -= 1
end
@x = @x2.round
increase_steps
else
if @x2 > @x
@x2 -= 0.125
else
check_event_trigger_touch(@x-1, @y)
end
end
end
def move_right(turn_enabled = true, player = false)
turn_right if turn_enabled
if passable?(@x, @y, 6)
if player
@y2 -= 0.125 if passable?(@x, @y+1, 6) == false and @y2 > @y
@y2 += 0.125 if passable?(@x, @y-1, 6) == false and @y2 < @y
multiplicateur = [(@move_speed - 4) * 2, 1].max
@x2 += 0.125 * multiplicateur
else
@x2 += 1
end
@x = @x2.round
increase_steps
else
if @x2 < @x
@x2 += 0.125
else
check_event_trigger_touch(@x+1, @y)
end
end
end
def move_up(turn_enabled = true, player = false)
turn_up if turn_enabled
if passable?(@x, @y, 8)
if player
@x2 -= 0.125 if passable?(@x+1, @y, 8) == false and @x2 > @x
@x2 += 0.125 if passable?(@x-1, @y, 8) == false and @x2 < @x
multiplicateur = [(@move_speed - 4) * 2, 1].max
@y2 -= 0.125 * multiplicateur
else
@y2 -= 1
end
@y = @y2.round
increase_steps
else
if @y2 > @y
@y2 -= 0.125
else
check_event_trigger_touch(@x, @y-1)
end
end
end
def move_lower_left(turn_enabled = true, player = false)
turn_lower_left if turn_enabled
move_down(false, player)
move_left(false, player)
end
def move_lower_right(turn_enabled = true, player = false)
turn_lower_right if turn_enabled
move_down(false, player)
move_right(false, player)
end
def move_upper_left(turn_enabled = true, player = false)
turn_upper_left if turn_enabled
move_up(false, player)
move_left(false, player)
end
def move_upper_right(turn_enabled = true, player = false)
turn_upper_right if turn_enabled
move_up(false, player)
move_right(false, player)
end
def move_random
case rand(8)
when 0
move_lower_left
when 1
move_down
when 2
move_lower_right
when 3
move_left
when 4
move_upper_left
when 5
move_right
when 6
move_upper_right
when 7
move_up
end
end
def jump(x_plus, y_plus)
if x_plus != 0 or y_plus != 0
if x_plus.abs > y_plus.abs
x_plus < 0 ? turn_left : turn_right
else
y_plus < 0 ? turn_up : turn_down
end
end
loop do
new_x = @x + x_plus
new_y = @y + y_plus
if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
straighten
@x += x_plus
@x2 += x_plus
@y += y_plus
@y2 += y_plus
distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round
@jump_peak = 10 + distance - @move_speed
@jump_count = @jump_peak * 2
@stop_count = 0
return
end
x_plus -= 1 if x_plus > 0
x_plus += 1 if x_plus < 0
y_plus -= 1 if y_plus > 0
y_plus += 1 if y_plus < 0
end
end
def turn_lower_left
unless @direction_fix
@direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
@stop_count = 0
end
end
def turn_lower_right
unless @direction_fix
@direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
@stop_count = 0
end
end
def turn_upper_left
unless @direction_fix
@direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
@stop_count = 0
end
end
def turn_upper_right
unless @direction_fix
@direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
@stop_count = 0
end
end
end
class Game_Player < Game_Character
def update
last_x = @x
last_y = @y
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
case Input.dir8
when 1
move_lower_left(true, true)
when 2
move_down(true, true)
when 3
move_lower_right(true, true)
when 4
move_left(true, true)
when 6
move_right(true, true)
when 7
move_upper_left(true, true)
when 8
move_up(true, true)
when 9
move_upper_right(true, true)
end
end
last_moving = (last_x != @x or last_y != @y)
last_real_x = @real_x
last_real_y = @real_y
super
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
$game_map.scroll_down(@real_y - last_real_y)
end
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
$game_map.scroll_left(last_real_x - @real_x)
end
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
$game_map.scroll_right(@real_x - last_real_x)
end
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
$game_map.scroll_up(last_real_y - @real_y)
end
unless moving?
if last_moving
result = check_event_trigger_here([1,2])
if result == false
unless $DEBUG and Input.press?(Input::CTRL)
if @encounter_count > 0
@encounter_count -= 1
end
end
end
end
if Input.trigger?(Input::C)
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end |
Mis à jour le 4 juillet 2020.
|
bodomdeneige -
posté le 14/01/2010 à 01:24:31 (64 messages postés)
| homonyme du traducteur | Moi aussi, je me suis posé la question en ce qui concerne les problèmes de nombre de pas. Car non seulement le nombre est multiplié par 8 mais en plus ça dérègle complètement l'apparition des monstres.
Voici ce que j'ai fait pour y remédier.
Ligne 146 de la classe game_party, je l'ai remplacée par ça :
@steps = [@steps + 0.125, 9999999].min
(normalement il doit y avoir +1 à la place du +0.125)
Celà permet de ne plus augmenter le nombre de pas par 1 mais de 1/8.
Celà dit en faisant ça, ça va être moche à l'affichage du menu d'avoir des virgules.
Pour celà, il faut que vous alliez modifier votre script de menu en rajoutant à l'affichage de la variable de nombre de step Integer(lavariable).
Pour ma part j'utilise les scripts de menu de mog et dans la classe mog_menu ça me donne une ligne comme ça :
self.contents.draw_text(4, 32, 120, 32, (Integer($game_party.steps)).to_s, 2)
à la place de
self.contents.draw_text(4, 32, 120, 32, $game_party.steps.to_s, 2)
Pour ceux et celles qui n'utilisent pas les scripts de menu de mog, j'imagine que le nombre de pas doit s'afficher dans la classe scene_menu.
|
Passage004 -
posté le 29/04/2010 à 22:17:46 (95 messages postés)
| Projet en cours... | J'ai un probllème pour ce script : il ne fonctionne pas lorsque je lance un fichier de sauvegarde.
Il fonctionne pourtant parfaitement lorsque j'entamme une nouvelle partie...
Une solution?
On m'indique un problème à la ligne 19
1
2
|
return (@real_x != @x2 * 128 or @real_y != @y2 * 128) |
|
Créer un RPG c'est bien...le terminer c'est mieux T_T ... |
Zeus81 -
posté le 17/05/2010 à 18:58:15 (11071 messages postés)
| | Rectification :
il ne fonctionne pas lorsque je lance un ancien fichier de sauvegarde.
Et c'est normal.
|
sriden -
posté le 17/05/2010 à 19:01:19 (16646 messages postés)
- | | Citation: C'est Monos qui a rajouté le titre ?
|
Escapade | La 7e porte | Vader Ou La Fin des Haricots | Ketsuro | Polaris 03 | Blog ciné/jv | Mes albums de zyk : Diaphanous Horizons & Retranchements ౡ |
Zeus81 -
posté le 21/05/2010 à 00:10:42 (11071 messages postés)
| | Le pire c'est que c'est un pote qui l'avait posté pour moi (j'avais pas le net à l'époque) et il a une bien meilleure orthographe que moi (en plus c'est un fils de prof... de français).
Je sais pas comment il en est arrivé là, j'imagine que c'était une faute de frappe ou d'inattention.
|
| Chanter l'hyperchleuasme | Mmmh...
Il empiète sur le tile du dessous plutôt que sur le tile du dessus...
Très ingénieux ça, il respecte donc parfaitement la traversabilité des cases.
ZOMG j'ai compris cette ligne !!!1
1
| distance = Math.sqrt(x_plus * x_plus + y_plus * y_plus).round |
=>[]
Mais bon, je ne peux pas l'utiliser parce que j'ai dans mon jeu des énigmes basées sur l'alignement case par case comme le quadrillage de verglas dans pokémon or/argent.
Et ce script non seulement empêche non seulement l'interaction à long terme avec les events "verglas" mais détruit aussi tous les alignements case par case donc l'énigme elle-même.
Peut-être que ce n'est dû qu'au déplacement dans les 8 directions, et si jamais tu fais une version qui divise toujours les pas mais qui conserve 4 directions, ça m'intéresse...
|
Es-tu une star ? | Kujira no Hara | Muma|Rope | Polaris 03 | La 7e porte |
Zeus81 -
posté le 28/07/2010 à 18:51:49 (11071 messages postés)
| | Si tu veux 4 directions, à un endroit dans le script il faut que tu remplaces dir8 par dir4.
|
WintersRemix -
posté le 16/10/2010 à 09:24:01 (62 messages postés)
| MakInG | J'ai 2 questions :
-Il y a un problème pour le compteur des pas dans le menu (tu en fais une centaine en moins d'une seconde )
-Ou se trouve dir8 dans le script ?
EDIT : Non c'est bon j'ai trouvé dir8 mais je ne sais pas comment régler le nombre de pas du menu
|
| J'aime les trains. | Ouah je suis si fier de moi =D
J'ai trouvé la solution a ton problème Winters
CommeZeus l'a dit, on ne se déplace plus par case mais pas huitièmes de cases. Donc une case equivaut a ... 8 pas.
Va dans Window_Steps, puis dans la méthode (def) refresh (l 21) :
Ecris ensuite juste en dessous (l 22) :
@nbredepas = $game_party.steps / 8
Puis remplace $game_party.steps.to_s (l 27) par @nbredepas.to_s
Voila ! (J'ai enfin l'impression de servir a qque chose)
Au plaisir
|
Que Dieu vous garde, j'ai plus de place chez moi ... |
WintersRemix -
posté le 27/11/2010 à 09:42:03 (62 messages postés)
| MakInG | Oh super merci
|
trllaracroft -
posté le 30/12/2010 à 13:19:53 (1 messages postés)
| | c'est ou quon le place le script ?
|
Heavy Rain -
posté le 30/12/2010 à 15:38:28 (1053 messages postés)
| | Hum. Bah écoute. Je dirais bien DTC, mais vu que c'est ton premier message je vais pas aller sur la bizute
Le script, tu le copies, tu ouvres ton projet, t'appuies sur F11,
Tu vas en bas de la liste des scripts (le dernier s'appelle "main"), tu fais clic droit sur main, insérer, tu nommes le script et tu le colles dans le grand champ a droite.
|
| J'aime les trains. | Heavy Rain a dit:
Hum. Bah écoute. Je dirais bien DTC, mais vu que c'est ton premier message je vais pas aller sur la bizute
|
Ahah j'aime x)
|
Que Dieu vous garde, j'ai plus de place chez moi ... |
Luryio -
posté le 07/08/2012 à 02:27:44 (5 messages postés)
| | Salut, j'utilise ce script pour mes déplacements et c'est vrai que c'est bien plus fluide et ça améliore grandement la jouabilité, mais il y a un hic, c'est qu'on peut réussir à traverser (presque) tout les éléments du décors. Bon j'exagére, mais vu qu'on ne fonctionne plus case par case, alors on peut se placer à un endroit de la case et traverser, ceci bien sûr quand on permet certains déplacements en modifiant les tiles dans la base de donnée. Vous me direz, il n'y a qu'a rien modifier, mais parfois ça me semble plus que nécessaire, quand on se retrouve à 1 mètre d'un objet et qu'on ne peut plus avancer bêtement, ça fait pas très joli dans un jeu. Bref ces déplacements me sont maintenant indispensables, il ne me reste plus qu'a faire des bidouillages pour que le joueur ne puisse pas traverser mon décor impunément
|
Zeus81 -
posté le 07/08/2012 à 03:50:37 (11071 messages postés)
| | Update.
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
| ##########################
# SUPER WALK 1.2 #
# Script créé par Zeus81 #
##########################
class Game_Player
SUPER_WALK_SWITCH = 1 # id de l'interrupteur pour activer/désactiver le script
end
class Game_Character
alias super_walk_game_character_initialize initialize
def initialize
@x2 = @y2 = 0
super_walk_game_character_initialize
end
def super_walk_distance
@move_speed > 4 ? @move_speed > 5 ? 0.5 : 0.25 : 0.125
end
def moving?
@real_x != @x2*128 or @real_y != @y2*128
end
def passable?(x, y, d)
new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
return false unless $game_map.valid?(new_x, new_y)
return true if @through
return false unless $game_map.passable?(x, y, d, self)
return false unless $game_map.passable?(new_x, new_y, 10-d)
$game_map.events.each_value do |event|
return false if event.x == new_x and event.y == new_y and !event.through and
(self != $game_player or !event.character_name.empty?)
end
return false if $game_player.x == new_x and $game_player.y == new_y and
!$game_player.through and !@character_name.empty?
return true
end
def moveto(x, y)
@x = @x2 = x % $game_map.width
@y = @y2 = y % $game_map.height
@real_x = @x * 128
@real_y = @y * 128
@prelock_direction = 0
end
def update_jump
@jump_count -= 1
@real_x = (@real_x * @jump_count + @x2 * 128) / (@jump_count + 1)
@real_y = (@real_y * @jump_count + @y2 * 128) / (@jump_count + 1)
end
def update_move
x128, y128, distance = @x2*128, @y2*128, 2**@move_speed
if x128 < @real_x; @real_x = [@real_x-distance, x128].max
elsif x128 > @real_x; @real_x = [@real_x+distance, x128].min
end
if y128 < @real_y; @real_y = [@real_y-distance, y128].max
elsif y128 > @real_y; @real_y = [@real_y+distance, y128].min
end
if @walk_anime; @anime_count += 1.5
elsif @step_anime; @anime_count += 1
end
end
def move_down(turn_enabled=true, super_walk=false)
turn_down if turn_enabled
if passable?(@x, @y, 2)
turn_down
if super_walk
@x2 -= 0.125 if @x2 > @x and !passable?(@x+1, @y, 2)
@x2 += 0.125 if @x2 < @x and !passable?(@x-1, @y, 2)
@y2 += super_walk_distance
@y = @y2.round
else @y2 = @y += 1
end
increase_steps
elsif @y2 < @y
@y2 += 0.125
else
check_event_trigger_touch(@x, @y+1)
return false
end
return true
end
def move_left(turn_enabled=true, super_walk=false)
turn_left if turn_enabled
if passable?(@x, @y, 4)
turn_left
if super_walk
@y2 -= 0.125 if @y2 > @y and !passable?(@x, @y+1, 4)
@y2 += 0.125 if @y2 < @y and !passable?(@x, @y-1, 4)
@x2 -= super_walk_distance
@x = @x2.round
else @x2 = @x -= 1
end
increase_steps
elsif @x2 > @x
@x2 -= 0.125
else
check_event_trigger_touch(@x-1, @y)
return false
end
return true
end
def move_right(turn_enabled=true, super_walk=false)
turn_right if turn_enabled
if passable?(@x, @y, 6)
turn_right
if super_walk
@y2 -= 0.125 if @y2 > @y and !passable?(@x, @y+1, 6)
@y2 += 0.125 if @y2 < @y and !passable?(@x, @y-1, 6)
@x2 += super_walk_distance
@x = @x2.round
else @x2 = @x += 1
end
increase_steps
elsif @x2 < @x
@x2 += 0.125
else
check_event_trigger_touch(@x+1, @y)
return false
end
return true
end
def move_up(turn_enabled=true, super_walk=false)
turn_up if turn_enabled
if passable?(@x, @y, 8)
turn_up
if super_walk
@x2 -= 0.125 if @x2 > @x and !passable?(@x+1, @y, 8)
@x2 += 0.125 if @x2 < @x and !passable?(@x-1, @y, 8)
@y2 -= super_walk_distance
@y = @y2.round
else @y2 = @y -= 1
end
increase_steps
elsif @y2 > @y
@y2 -= 0.125
else
check_event_trigger_touch(@x, @y-1)
return false
end
return true
end
def move_lower_left(turn_enabled=true, super_walk=false)
last_dir = @direction
move1 = move_down(false, super_walk)
move2 = move_left(false, super_walk)
if !@direction_fix and turn_enabled ? move1 == move2 : move1 && move2
@direction = last_dir == 6 ? 4 : last_dir == 8 ? 2 : last_dir
@stop_count = 0
end
return move1 || move2
end
def move_lower_right(turn_enabled=true, super_walk=false)
last_dir = @direction
move1 = move_down( false, super_walk)
move2 = move_right(false, super_walk)
if !@direction_fix and turn_enabled ? move1 == move2 : move1 && move2
@direction = last_dir == 4 ? 6 : last_dir == 8 ? 2 : last_dir
@stop_count = 0
end
return move1 || move2
end
def move_upper_left(turn_enabled=true, super_walk=false)
last_dir = @direction
move1 = move_up( false, super_walk)
move2 = move_left(false, super_walk)
if !@direction_fix and turn_enabled ? move1 == move2 : move1 && move2
@direction = last_dir == 6 ? 4 : last_dir == 2 ? 8 : last_dir
@stop_count = 0
end
return move1 || move2
end
def move_upper_right(turn_enabled=true, super_walk=false)
last_dir = @direction
move1 = move_up( false, super_walk)
move2 = move_right(false, super_walk)
if !@direction_fix and turn_enabled ? move1 == move2 : move1 && move2
@direction = last_dir == 4 ? 6 : last_dir == 2 ? 8 : last_dir
@stop_count = 0
end
return move1 || move2
end
def move_random
case rand(8)
when 0; move_lower_left
when 1; move_down
when 2; move_lower_right
when 3; move_left
when 4; move_upper_left
when 5; move_right
when 6; move_upper_right
when 7; move_up
end
end
def jump(x_plus, y_plus)
loop do
if (x_plus == 0 and y_plus == 0) or passable?(@x+x_plus, @y+y_plus, 0)
if x_plus.abs > y_plus.abs
x_plus < 0 ? turn_left : turn_right
else y_plus < 0 ? turn_up : turn_down
end unless x_plus == 0 and y_plus == 0
straighten
@x += x_plus
@x2 += x_plus
@y += y_plus
@y2 += y_plus
@jump_peak = 10 - @move_speed + Math.hypot(x_plus, y_plus).round
@jump_count = @jump_peak * 2
@stop_count = 0
return
end
x_plus -= 1 if x_plus > 0
x_plus += 1 if x_plus < 0
y_plus -= 1 if y_plus > 0
y_plus += 1 if y_plus < 0
end
end
end
class Game_Player
def update
last_x, last_y, last_rx, last_ry = @x, @y, @real_x, @real_y
super_walk = $game_switches[SUPER_WALK_SWITCH]
unless last_moving = moving? or @move_route_forcing or
$game_temp.message_window_showing or
$game_system.map_interpreter.running?
case Input.dir8
when 1; move_lower_left( true, super_walk)
when 2; move_down( true, super_walk)
when 3; move_lower_right(true, super_walk)
when 4; move_left( true, super_walk)
when 6; move_right( true, super_walk)
when 7; move_upper_left( true, super_walk)
when 8; move_up( true, super_walk)
when 9; move_upper_right(true, super_walk)
end
end
last_moving = last_x != @x || last_y != @y if super_walk
super
$game_map.scroll_left(last_rx-@real_x) if @real_x < last_rx and @real_x-$game_map.display_x < CENTER_X
$game_map.scroll_right(@real_x-last_rx) if @real_x > last_rx and @real_x-$game_map.display_x > CENTER_X
$game_map.scroll_up(last_ry-@real_y) if @real_y < last_ry and @real_y-$game_map.display_y < CENTER_Y
$game_map.scroll_down(@real_y-last_ry) if @real_y > last_ry and @real_y-$game_map.display_y > CENTER_Y
unless moving?
if last_moving and !check_event_trigger_here([1,2])
if @encounter_count > 0 and !($DEBUG and Input.press?(Input::CTRL))
@encounter_count -= 1
end
end
if Input.trigger?(Input::C)
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end |
| |
|
|