#==============================================================================
# ■ Sprite_Character_Shadow
# ■ By 茄子 联系QQ 9244579
# ■ 要地图元件有倒影出现请将
# ■ 地形标志改为1
#==============================================================================
$影子类型 = 3
# $影子类型可以选为1.2.3来测试效果
# 类型3是比较完善真实的类型
#==============================================================================
#==============================================================================
class Sprite_Character_False < RPG::Sprite
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize(viewport, character = nil)
super(viewport)
@character = character
@direction = 2
update
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
super
if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
end
self.opacity = 102
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
if $影子类型 == 1 # ★
if @tile_id == 0
sx = @character.pattern * @cw
sy = (@direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
self.mirror = false
if @character.direction == 2
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
self.angle = 180
elsif @character.direction == 4
self.x = @character.screen_x-10
self.y = @character.screen_y-10
self.z = @character.screen_z(@ch)
self.angle = 90
elsif @character.direction == 6
self.x = @character.screen_x+10
self.y = @character.screen_y-10
self.z = @character.screen_z(@ch)
self.angle = 270
elsif @character.direction == 8
self.x = @character.screen_x
self.y = @character.screen_y-15
self.z = @character.screen_z(@ch)
self.angle = 0
end
elsif $影子类型 == 2 # ★
if @tile_id == 0
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
self.mirror = true
if @character.direction == 2
if @tile_id == 0
sx = @character.pattern * @cw
sy = (@direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
self.angle = 180
elsif @character.direction == 4
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
elsif @character.direction == 6
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
elsif @character.direction == 8
self.x = @character.screen_x
self.y = @character.screen_y-15
self.z = @character.screen_z(@ch)
self.angle = 0
end
elsif $影子类型 == 3 # ★
@x = @character.x
@y = @character.y
if @tile_id == 0
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
if $game_map.terrain_tag(@x, @y+1) == 1
self.mirror = true
self.angle = 180
if @character.direction == 2
self.visible = true
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
elsif @character.direction == 4
self.visible = true
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
elsif @character.direction == 6
self.visible = true
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
end
elsif $game_map.terrain_tag(@x, @y-1) == 1 # …
self.mirror = false
if @tile_id == 0
sx = @character.pattern * @cw
sy = (@direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
if @character.direction == 8 # …
self.visible = true
@direction = 2
self.x = @character.screen_x
self.y = @character.screen_y-35
self.z = @character.screen_z(@ch)
self.angle = 0
elsif @character.direction == 4
self.visible = true
@direction = 4
self.x = @character.screen_x
self.y = @character.screen_y-35
self.z = @character.screen_z(@ch)
self.angle = 0
elsif @character.direction == 6
self.visible = true
@direction = 6
self.x = @character.screen_x
self.y = @character.screen_y-35
self.z = @character.screen_z(@ch)
self.angle = 0
end # …
elsif $game_map.terrain_tag(@x+1, @y) == 1
if @tile_id == 0
sx = @character.pattern * @cw
sy = (@direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
self.angle = 270
self.visible = true
if @character.direction == 8
@direction = 6
self.x = @character.screen_x+20
self.y = @character.screen_y-20
self.z = @character.screen_z(@ch)
elsif @character.direction == 2
@direction = 4
self.x = @character.screen_x+20
self.y = @character.screen_y-20
self.z = @character.screen_z(@ch)
elsif @character.direction == 6
@direction = 2
self.x = @character.screen_x+20
self.y = @character.screen_y-20
self.z = @character.screen_z(@ch)
end
elsif $game_map.terrain_tag(@x-1, @y) == 1
if @tile_id == 0
sx = @character.pattern * @cw
sy = (@direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
self.visible = true
self.angle = 90
if @character.direction == 8
@direction = 4
self.x = @character.screen_x-20
self.y = @character.screen_y-20
self.z = @character.screen_z(@ch)
elsif @character.direction == 2
@direction = 6
self.x = @character.screen_x-20
self.y = @character.screen_y-20
self.z = @character.screen_z(@ch)
elsif @character.direction == 4
@direction = 2
self.x = @character.screen_x-20
self.y = @character.screen_y-20
self.z = @character.screen_z(@ch)
end
elsif
self.visible = false
end # …
end
self.opacity = rand(25)+100
self.bush_depth = rand(25)+100
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
end
end
class Sprite_Character_Shadow < RPG::Sprite
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize(viewport, character = nil)
super(viewport)
@character = character
self.bitmap = RPG::Cache.picture("shadow")
update
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
super
if $影子类型 == 3
if @character.character_name == ""
self.x = @character.screen_x-5000
self.y = @character.screen_y-5000
else
self.x = @character.screen_x-16
self.y = @character.screen_y-20
self.z = 10
self.opacity = 255
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
end
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
end
end
end
#==============================================================================
# ■ Spriteset_Map
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
@viewport1 = Viewport.new(0, 0, 640, 480)
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 200
@viewport3.z = 5000
@tilemap = Tilemap.new(@viewport1)
@tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
for i in 0..6
autotile_name = $game_map.autotile_names[i]
@tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
end
@tilemap.map_data = $game_map.data
@tilemap.priorities = $game_map.priorities
@panorama = Plane.new(@viewport1)
@panorama.z = -1000
@fog = Plane.new(@viewport1)
@fog.z = 3000
@character_sprites = []
for i in $game_map.events.keys.sort
s = Sprite_Character.new(@viewport1, $game_map.events[i])
@character_sprites.push(s)
s = Sprite_Character_Shadow.new(@viewport1, $game_map.events[i])
@character_sprites.push(s)
s = Sprite_Character_False.new(@viewport1, $game_map.events[i])
@character_sprites.push(s)
end
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
@character_sprites.push(Sprite_Character_False.new(@viewport1, $game_player))
@character_sprites.push(Sprite_Character_Shadow.new(@viewport1, $game_player))
@weather = RPG::Weather.new(@viewport1)
@picture_sprites = []
for i in 1..50
@picture_sprites.push(Sprite_Picture.new(@viewport2,
$game_screen.pictures[i]))
end
@timer_sprite = Sprite_Timer.new
update
end
end