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
| #==============================================================================
# 8 Way Directional Movement
#------------------------------------------------------------------------------
# Kylock
# 21.3.2008
# Version 1.1
#==============================================================================
# Special thanks to Arrow-1 for the script request and supplying sprites for
# testing purposes.
#==============================================================================
# Instructions:
# Add this script towards the top, since methods are rewritten and not
# aliased. Once you add it and run your game, the script will
# automagically enable 8-way directional movement for your hero.
# Features:
# * Added movement functionality to allow your hero to move in diagonal
# directions
# * Corrects directional issues resulting from trying to activate events
# while facing a diaganol direction. (could be better implemented,
# but does work as it is)
#==============================================================================
# Changelog
# 1.0 Initial Release
# 1.1 Added support for no custom sprites and added compatibility with
# Anaryu's Anti-Lag script (must be loaded above the anti-lag script)
#==============================================================================
#==============================================================================
# ** Script Configuration
#==============================================================================
module KMDM
DIRSPRITE = false # set to true if you are using a custom
# character sprite for diagonal movement
end
#==============================================================================
# ** Game_Player
#------------------------------------------------------------------------------
# rewrote def move_by-input to enable extra directions
#==============================================================================
class Game_Player < Game_Character
def move_by_input
return unless movable?
return if $game_map.interpreter.running?
case Input.dir8
when 1; move_lower_left
when 2; move_down
when 3; move_lower_right
when 4; move_left
when 7; move_upper_left
when 6; move_right
when 8; move_up
when 9; move_upper_right
end
end
end
#==============================================================================
# ** Game_Character
#------------------------------------------------------------------------------
# Corrects direction so events will respond when hero is facing diagonal.
# Modifies: def move_lower_left, def move_lower_right, def move_upper_left,
# and def move_upper_right
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# * Move Lower Left
#--------------------------------------------------------------------------
def move_lower_left(turn_ok = true)
set_direction(5)
if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
(passable?(@x-1, @y) and passable?(@x-1, @y+1))
@x -= 1
@y += 1
increase_steps
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# * Move Lower Right
#--------------------------------------------------------------------------
def move_lower_right(turn_ok = true)
set_direction(3)
if (passable?(@x, @y+1) and passable?(@x+1, @y+1)) or
(passable?(@x+1, @y) and passable?(@x+1, @y+1))
@x += 1
@y += 1
increase_steps
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# * Move Upper Left
#--------------------------------------------------------------------------
def move_upper_left(turn_ok = true)
if KMDM::DIRSPRITE == true
set_direction(7)
else
set_direction(8)
end
if (passable?(@x, @y-1) and passable?(@x-1, @y-1)) or
(passable?(@x-1, @y) and passable?(@x-1, @y-1))
@x -= 1
@y -= 1
increase_steps
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# * Move Upper Right
#--------------------------------------------------------------------------
def move_upper_right(turn_ok = true)
set_direction(9)
if (passable?(@x, @y-1) and passable?(@x+1, @y-1)) or
(passable?(@x+1, @y) and passable?(@x+1, @y-1))
@x += 1
@y -= 1
increase_steps
@move_failed = false
else
@move_failed = true
end
end
end
#==============================================================================
# ** Sprite_Character
#------------------------------------------------------------------------------
# Adds functionality for diagonal character sprites.
# Modifies: def update_src_rect
#==============================================================================
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# * Update Transfer Origin Rectangle
#--------------------------------------------------------------------------
def update_src_rect
if @tile_id == 0
index = @character.character_index
#if the character is facing diagonally, use the second spriteset
if @character.direction % 2 != 0 && KMDM::DIRSPRITE == true
index = @character.character_index + 1
end
pattern = @character.pattern < 3 ? @character.pattern : 1
sx = (index % 4 * 3 + pattern) * @cw
sy = (index / 4 * 4 + (@character.direction - 2) / 2) * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
end
end |