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
| #==============================================================================
# Extra Movement Frames v. 1.0
# Author: modern algebra (rmrk.net)
# Date: January 20, 2008
#------------------------------------------------------------------------------
# Instructions:
# Insert this script above main in the database. To add a character with
# extra movement frames, simply rename the character graphic to something
# of the form:
# !$%[<number of movement frames>]<Regular name>
#
# Example: !$%[4]001-Fighter01
# That would make the graphic 001-Fighter01 be interpreted as having 4 frames
#------------------------------------------------------------------------------
# ** Game_Character
#------------------------------------------------------------------------------
# Summary of changes:
# aliased methods - update_animation
# new class variables - height divisor, width divisor
# new methods - calculate_divisors
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :height_divisor # The height of a single frame
attr_reader :width_divisor # number of frames in the x direction
attr_reader :char_frames
#--------------------------------------------------------------------------
# * Calculate Divisors
#--------------------------------------------------------------------------
# Sets up the instance variables required
#--------------------------------------------------------------------------
def calculate_divisors
return unless @previous_character.nil? || @previous_character != @character_name
bitmap = Cache.character (@character_name)
sign = @character_name[/^[\!\$].[\%]\[\d*\]/]
if !sign.nil? && sign.size > 5
@original_pattern = 0
@width_divisor = sign[4, sign.size - 5].to_i
@height_divisor = 4
@char_frames = @width_divisor
elsif !sign.nil? && sign.include? ('$')
@width_divisor = 3
@height_divisor = 4
@char_frames = 3
else
@width_divisor = 12
@height_divisor = 8
@char_frames = 3
end
@previous_character = @character_name
end
#--------------------------------------------------------------------------
# * Update Animation
#--------------------------------------------------------------------------
# Change the hard coded values to ones dependent on character graphic format
#--------------------------------------------------------------------------
alias ma_extra_movement_frames_anim_upd update_animation
def update_animation
if @width_divisor == 12 || @width_divisor == 3
ma_extra_movement_frames_anim_upd
return
end
saved_anime_count = @anime_count
pattern_original = @pattern
speed = @move_speed + (dash? ? 1 : 0)
ma_extra_movement_frames_anim_upd
if (saved_anime_count > (18 - speed * 2)) && (@step_anime || (@stop_count <= 0))
@pattern = (pattern_original + 1) % @char_frames
end
end
end
#==============================================================================
# * Sprite Character
#------------------------------------------------------------------------------
# Summary of changes:
# aliased methods - update_src_rect, update_bitmap
#==============================================================================
class Sprite_Character
#--------------------------------------------------------------------------
# * Update Src Rect
#--------------------------------------------------------------------------
# Interpret multiple movement frames: Changed pattern
#--------------------------------------------------------------------------
alias ma_extra_movement_frames_src_rect_upd update_src_rect
def update_src_rect
if @tile_id == 0
ma_extra_movement_frames_src_rect_upd
index = @character.character_index
pattern = @character.pattern < @character.char_frames ? @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
#--------------------------------------------------------------------------
# * Update Bitmap
#--------------------------------------------------------------------------
# Change hard coded values to ones dependent on character graphic
#--------------------------------------------------------------------------
alias ma_extra_movement_frames_bmp_upd update_bitmap
def update_bitmap
@character.calculate_divisors
saved_tile_id = @tile_id
saved_character_name = @character_name
saved_character_index = @character_index
ma_extra_movement_frames_bmp_upd
if saved_tile_id != @character.tile_id or
saved_character_name != @character.character_name or
saved_character_index != @character.character_index
unless @tile_id > 0
@cw = bitmap.width / @character.width_divisor
@ch = bitmap.height / @character.height_divisor
self.ox = @cw / 2
self.oy = @ch
end
end
end
end
#==============================================================================
# ** Window Base
#------------------------------------------------------------------------------
# Summary of changes:
# overwritten methods - draw_character
#==============================================================================
class Window_Base
#--------------------------------------------------------------------------
# * Draw Charater (overwritten for extra movement frames)
# character_name : the name of the character file
# character_index : the index of the character in the file
# x : the x position to draw
# y : the y position to draw
#--------------------------------------------------------------------------
def draw_character(character_name, character_index, x, y)
return if character_name == nil
bitmap = Cache.character(character_name)
sign = character_name[/^[\!\$].[\%]\[\d*\]/]
if !sign.nil? && sign.size > 5
cw = bitmap.width / sign[4, sign.size - 5].to_i
ch = bitmap.height / 4
elsif sign != nil and sign.include?('$')
cw = bitmap.width / 3
ch = bitmap.height / 4
else
cw = bitmap.width / 12
ch = bitmap.height / 8
end
n = character_index
src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end
end |