Day.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker

RM 95
RM 2000/2003
RM XP
RM VX/VX Ace
RM MV/MZ

Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Sorties: Star Trek: Glorious Wolf - (...) / Sorties: Dread Mac Farlane - episode 3 / News: Plein d'images cools créées par (...) / Sorties: Star Trek: Glorious Wolf - (...) / Jeux: Final Fantasy 2.0 / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

399 connectés actuellement

29184768 visiteurs
depuis l'ouverture

5033 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Offgame

Alex d'Or

Hellsoft

Le Temple de Valor

Tous nos partenaires

Devenir
partenaire



Super Walk 1.2

Marre du déplacement case par case ? Profitez de ce système de déplacement au pixel près !

Script pour RPG Maker XP
Ecrit par zeus81
Publié par zeus81 (lui envoyer un message privé)
Signaler un script cassé

❤ 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)

Portion de code : Tout sélectionner

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)




Mis à jour le 4 juillet 2020.






bodomdeneige - posté le 14/01/2010 à 01:24:31 (64 messages postés)

❤ 0

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)

❤ 0

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

Portion de code : Tout sélectionner

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)

❤ 0

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 (16570 messages postés)

❤ 0

Citation:

ammélioré

C'est Monos qui a rajouté le titre ? :F

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)

❤ 0

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. :F


Roi of the Suisse - posté le 30/05/2010 à 00:30:58 (29764 messages postés) - honor -

❤ 0

Alerte neige !

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

Portion de code : Tout sélectionner

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...



L'essentialisme c'est quand ta voiture a un moteur essence. | Es-tu une star ? | Kujira no Hara | Polaris 03 | Planète Glutko


Zeus81 - posté le 28/07/2010 à 18:51:49 (11071 messages postés)

❤ 0

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)

❤ 0

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 :D)

-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 :(


SuperGregMaker - posté le 07/11/2010 à 22:41:06 (111 messages postés)

❤ 0

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 XD)


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)

❤ 0

MakInG

Oh super merci ;)


trllaracroft - posté le 30/12/2010 à 13:19:53 (1 messages postés)

❤ 0

c'est ou quon le place le script ?


Heavy Rain - posté le 30/12/2010 à 15:38:28 (1053 messages postés)

❤ 0

Hum. Bah écoute. Je dirais bien DTC, mais vu que c'est ton premier message je vais pas aller sur la bizute :F

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.


SuperGregMaker - posté le 05/07/2012 à 04:18:03 (111 messages postés)

❤ 0

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 :F



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)

❤ 0

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 :D


Zeus81 - posté le 07/08/2012 à 03:50:37 (11071 messages postés)

❤ 0

Update.

Portion de code : Tout sélectionner

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



Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers