Oniromancie: Scripts - Déplacement des persos ammélioré


Comment ça marche?

Aëdemphia
Par Sylvanor

Fighting Robots Quest
Par Boulon

Forstale
Par Ødd Clock

Geex
Par roys

Inexistence
Par Falco

La Légende d'Ibabou
Par Zaitan

Lije
Par Gaetz

LoveMaster
Par Cuddlefox

Sarcia
Par Kaëlar

Super Mario RPG - Lost Souls
Par Omegabowser

News: Concours des Alex d'Or 2017-18: (...) / News: MegaMaker : créez votre propre (...) / News: Test de Tinker Quarry / Sorties: Leave the Room / Jeux: Leave the Room /

Chat  (11 connectés)

Bienvenue
visiteur !






publicité RPG Maker!

Statistiques

Liste des
membres


Contact

66 connectés actuellement

9179637 visiteurs
depuis l'ouverture

714 visiteurs
aujourd'hui

Groupe Facebook

Barre de séparation

Partenaires




TOP
GAMEMAKING


Les 5 plus
visités

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Pixelandgame

Tashiroworld

HeyMakeGames

Au hasard

RPG Architect

Loisirs RPG

Co-RPG

Les deux derniers

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Nos autres partenaires

Devenir
partenaire


Barre de séparation

Un site du réseau
War Paradise

Annuaires référenceurs





Déplacement des persos ammélioré
Script pour RPG Maker XP
Ecrit par zeus81

Ce script permet les déplacements au pixel près.


Portion de code:



######################### 

# 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




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

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. (11072 messages postés) - bocauxharam

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. (15535 messages postés) - roi

Citation:

ammélioré

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

Forum du FAMAS | Escapade | La 7e porte (jeu multimaker complet) | Vader Ou La Fin des Haricots | Polaris 03 | Ma zyk : Diaphanous Horizons


Zeus81 - posté le 21/05/2010 à 00:10:42. (11072 messages postés) - bocauxharam

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. (19813 messages postés) - bocauxharam

top kek

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

Es-tu une star ? | Kujira no Hara (meilleur jeu du monde) : télécharger les 5 premiers chapitres, topic du jeu


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

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

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


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

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)

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. (11072 messages postés) - bocauxharam

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

Plan du site:

Activité: Accueil | News | Forum | Flash-news | Chat | Commentaires | Galerie | Screen de la semaine | Sorties | Articles perso | Livre d'or | Recherche
Jeux: Index jeux séparés | Top Classiques | Top Originaux | Les autres | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Jeux complets | Proposer
Rubriques: Le Wiki | Collection Oniro | Tutoriaux | Scripts | Guides | Gaming-Live | Tests | Making-of | Interviews | Articles perso | OST | L'Annuaire | Divers | Palmarès
Hébergés: Aëdemphia | Fighting Robots Quest | Forstale | Geex | Inexistence | La Légende d'Ibabou | Lije | LoveMaster | Sarcia | Super Mario RPG - Lost Souls
Ressources: Jeux | Programmes | Packs de ressources | Midis | Eléments séparés | Sprites
RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis