Game_Event
#============================================
# ¡ Game_Event
#----------------------------------------------
# @ƒCƒxƒ“ƒg‚ðˆµ‚¤ƒNƒ‰ƒX‚Å‚·BðŒ”»’è‚É‚æ‚éƒCƒxƒ“ƒgƒy[ƒWØ‚è‘Ö‚¦‚âA•À—ñˆ—
# ƒCƒxƒ“ƒgÀs‚È‚Ç‚Ì‹@”‚ð‚Á‚Ä‚¨‚èAGame_Map ƒNƒ‰ƒX‚Ì“à•”‚Åg—p‚³‚ê‚Ü‚·B
#============================================
class Game_Event < Game_Character
#------------------------------------------
# œ ŒöŠJƒCƒ“ƒXƒ^ƒ“ƒX•Ï”
#------------------------------------------
attr_reader :trigger # ƒgƒŠƒK[
attr_reader :list # Às“à—e
attr_reader :starting # ‹N“®’†ƒtƒ‰ƒO
#------------------------------------------
# œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
# map_id : ƒ}ƒbƒv ID
# event : ƒCƒxƒ“ƒg (RPG::Event)
#------------------------------------------
def initialize(map_id, event)
super()
@map_id = map_id
@event = event
@id = @event.id
@erased = false
@starting = false
@through = true
# ‰ŠúˆÊ’u‚Ɉړ®
moveto(@event.x, @event.y)
refresh
end
#------------------------------------------
# œ ‹N“®’†ƒtƒ‰ƒO‚̃NƒŠƒA
#------------------------------------------
def clear_starting
@starting = false
end
#------------------------------------------
# œ ƒI[ƒo[ƒgƒŠƒK[”»’è (“¯ˆÊ’u‚ð‹N“®ðŒ‚Æ‚·‚é‚©”Û‚©)
#------------------------------------------
def over_trigger?
# ƒOƒ‰ƒtƒBƒbƒN‚ªƒLƒƒƒ‰ƒNƒ^[‚ÅA‚·‚蔲‚¯ó‘Ô‚Å‚Í‚È‚¢ê‡
if @character_name != "" and not @through
# ‹N“®”»’è‚ͳ–Ê
return false
end
# ƒ}ƒbƒvã‚Å‚±‚̈ʒu‚ª’Ês•s‰Â”‚Èê‡
unless $game_map.passable?(@x, @y, 0)
# ‹N“®”»’è‚ͳ–Ê
return false
end
# ‹N“®”»’è‚Í“¯ˆÊ’u
return true
end
#------------------------------------------
# œ ƒCƒxƒ“ƒg‹N“®
#------------------------------------------
def start
# Às“à—e‚ª‹ó‚Å‚È‚¢ê‡
if @list.size > 1
@starting = true
end
end
#------------------------------------------
# œ ˆêÁ‹
#------------------------------------------
def erase
@erased = true
refresh
end
#------------------------------------------
# œ ƒŠƒtƒŒƒbƒVƒ…
#------------------------------------------
def refresh
# ƒ[ƒJƒ‹•Ï” new_page ‚ð‰Šú‰»
new_page = nil
# ˆêÁ‹‚³‚ê‚Ä‚¢‚È‚¢ê‡
unless @erased
# ”Ô†‚Ì‘å‚«‚¢ƒCƒxƒ“ƒgƒy[ƒW‚©‚燂ɒ²‚ׂé
for page in @event.pages.reverse
# ƒCƒxƒ“ƒgðŒ‚ð c ‚ÅQƉ”‚É
c = page.condition
# ƒXƒCƒbƒ` 1 ðŒŠm”F
if c.switch1_valid
if $game_switches[c.switch1_id] == false
next
end
end
# ƒXƒCƒbƒ` 2 ðŒŠm”F
if c.switch2_valid
if $game_switches[c.switch2_id] == false
next
end
end
# •Ï” ðŒŠm”F
if c.variable_valid
if $game_variables[c.variable_id] < c.variable_value
next
end
end
# ƒZƒ‹ƒtƒXƒCƒbƒ` ðŒŠm”F
if c.self_switch_valid
key = [@map_id, @event.id, c.self_switch_ch]
if $game_self_switches[key] != true
next
end
end
# ƒ[ƒJƒ‹•Ï” new_page ‚ðÝ’è
new_page = page
# ƒ‹[ƒv‚𔲂¯‚é
break
end
end
# ‘O‰ñ‚Æ“¯‚¶ƒCƒxƒ“ƒgƒy[ƒW‚Ìê‡
if new_page == @page
# ƒƒƒbƒhI—¹
return
end
# @page ‚ÉŒ»Ý‚̃Cƒxƒ“ƒgƒy[ƒW‚ðÝ’è
@page = new_page
# ‹N“®’†ƒtƒ‰ƒO‚ðƒNƒŠƒA
clear_starting
# ðŒ‚ð–‚½‚·ƒy[ƒW‚ª‚È‚¢ê‡
if @page == nil
# ŠeƒCƒ“ƒXƒ^ƒ“ƒX•Ï”‚ðÝ’è
@tile_id = 0
@character_name = ""
@character_hue = 0
@move_type = 0
@through = true
@trigger = nil
@list = nil
@interpreter = nil
# ƒƒƒbƒhI—¹
return
end
# ŠeƒCƒ“ƒXƒ^ƒ“ƒX•Ï”‚ðÝ’è
@tile_id = @page.graphic.tile_id
@character_name = @page.graphic.character_name
@character_hue = @page.graphic.character_hue
if @original_direction != @page.graphic.direction
@direction = @page.graphic.direction
@original_direction = @direction
@prelock_direction = 0
end
if @original_pattern != @page.graphic.pattern
@pattern = @page.graphic.pattern
@original_pattern = @pattern
end
@opacity = @page.graphic.opacity
@blend_type = @page.graphic.blend_type
@move_type = @page.move_type
@move_speed = @page.move_speed
@move_frequency = @page.move_frequency
@move_route = @page.move_route
@move_route_index = 0
@move_route_forcing = false
@walk_anime = @page.walk_anime
@step_anime = @page.step_anime
@direction_fix = @page.direction_fix
@through = @page.through
@always_on_top = @page.always_on_top
@trigger = @page.trigger
@list = @page.list
@interpreter = nil
# ƒgƒŠƒK[‚ª [•À—ñˆ—] ‚Ìê‡
if @trigger == 4
# •À—ñˆ——pƒCƒ“ƒ^ƒvƒŠƒ^‚ðì¬
@interpreter = Interpreter.new
end
# ©“®ƒCƒxƒ“ƒg‚Ì‹N“®”»’è
check_event_trigger_auto
end
#------------------------------------------
# œ ÚGƒCƒxƒ“ƒg‚Ì‹N“®”»’è
#------------------------------------------
def check_event_trigger_touch(x, y)
# ƒCƒxƒ“ƒgÀs’†‚Ìê‡
if $game_system.map_interpreter.running?
return
end
# ƒgƒŠƒK[‚ª [ƒCƒxƒ“ƒg‚©‚çÚG] ‚©‚ƒvƒŒƒCƒ„[‚ÌÀ•W‚ƈê’v‚µ‚½ê‡
if @trigger == 2 and x == $game_player.x and y == $game_player.y
# ƒWƒƒƒ“ƒv’†ˆÈŠO‚ÅA‹N“®”»’肪³–ʂ̃Cƒxƒ“ƒg‚È‚ç
if not jumping? and not over_trigger?
start
end
end
end
#------------------------------------------
# œ ©“®ƒCƒxƒ“ƒg‚Ì‹N“®”»’è
#------------------------------------------
def check_event_trigger_auto
# ƒgƒŠƒK[‚ª [ƒCƒxƒ“ƒg‚©‚çÚG] ‚©‚ƒvƒŒƒCƒ„[‚ÌÀ•W‚ƈê’v‚µ‚½ê‡
if @trigger == 2 and @x == $game_player.x and @y == $game_player.y
# ƒWƒƒƒ“ƒv’†ˆÈŠO‚ÅA‹N“®”»’肪“¯ˆÊ’u‚̃Cƒxƒ“ƒg‚È‚ç
if not jumping? and over_trigger?
start
end
end
# ƒgƒŠƒK[‚ª [©“®Às] ‚Ìê‡
if @trigger == 3
start
end
end
#------------------------------------------
# œ ƒtƒŒ[ƒ€XV
#------------------------------------------
def update
super
# ©“®ƒCƒxƒ“ƒg‚Ì‹N“®”»’è
check_event_trigger_auto
# •À—ñˆ—‚ª—LŒø‚Ìê‡
if @interpreter != nil
# Às’†‚Å‚È‚¢ê‡
unless @interpreter.running?
# ƒCƒxƒ“ƒg‚ðƒZƒbƒgƒAƒbƒv
@interpreter.setup(@list, @event.id)
end
# ƒCƒ“ƒ^ƒvƒŠƒ^‚ðXV
@interpreter.update
end
end
end
# ¡ Game_Event
#----------------------------------------------
# @ƒCƒxƒ“ƒg‚ðˆµ‚¤ƒNƒ‰ƒX‚Å‚·BðŒ”»’è‚É‚æ‚éƒCƒxƒ“ƒgƒy[ƒWØ‚è‘Ö‚¦‚âA•À—ñˆ—
# ƒCƒxƒ“ƒgÀs‚È‚Ç‚Ì‹@”‚ð‚Á‚Ä‚¨‚èAGame_Map ƒNƒ‰ƒX‚Ì“à•”‚Åg—p‚³‚ê‚Ü‚·B
#============================================
class Game_Event < Game_Character
#------------------------------------------
# œ ŒöŠJƒCƒ“ƒXƒ^ƒ“ƒX•Ï”
#------------------------------------------
attr_reader :trigger # ƒgƒŠƒK[
attr_reader :list # Às“à—e
attr_reader :starting # ‹N“®’†ƒtƒ‰ƒO
#------------------------------------------
# œ ƒIƒuƒWƒFƒNƒg‰Šú‰»
# map_id : ƒ}ƒbƒv ID
# event : ƒCƒxƒ“ƒg (RPG::Event)
#------------------------------------------
def initialize(map_id, event)
super()
@map_id = map_id
@event = event
@id = @event.id
@erased = false
@starting = false
@through = true
# ‰ŠúˆÊ’u‚Ɉړ®
moveto(@event.x, @event.y)
refresh
end
#------------------------------------------
# œ ‹N“®’†ƒtƒ‰ƒO‚̃NƒŠƒA
#------------------------------------------
def clear_starting
@starting = false
end
#------------------------------------------
# œ ƒI[ƒo[ƒgƒŠƒK[”»’è (“¯ˆÊ’u‚ð‹N“®ðŒ‚Æ‚·‚é‚©”Û‚©)
#------------------------------------------
def over_trigger?
# ƒOƒ‰ƒtƒBƒbƒN‚ªƒLƒƒƒ‰ƒNƒ^[‚ÅA‚·‚蔲‚¯ó‘Ô‚Å‚Í‚È‚¢ê‡
if @character_name != "" and not @through
# ‹N“®”»’è‚ͳ–Ê
return false
end
# ƒ}ƒbƒvã‚Å‚±‚̈ʒu‚ª’Ês•s‰Â”‚Èê‡
unless $game_map.passable?(@x, @y, 0)
# ‹N“®”»’è‚ͳ–Ê
return false
end
# ‹N“®”»’è‚Í“¯ˆÊ’u
return true
end
#------------------------------------------
# œ ƒCƒxƒ“ƒg‹N“®
#------------------------------------------
def start
# Às“à—e‚ª‹ó‚Å‚È‚¢ê‡
if @list.size > 1
@starting = true
end
end
#------------------------------------------
# œ ˆêÁ‹
#------------------------------------------
def erase
@erased = true
refresh
end
#------------------------------------------
# œ ƒŠƒtƒŒƒbƒVƒ…
#------------------------------------------
def refresh
# ƒ[ƒJƒ‹•Ï” new_page ‚ð‰Šú‰»
new_page = nil
# ˆêÁ‹‚³‚ê‚Ä‚¢‚È‚¢ê‡
unless @erased
# ”Ô†‚Ì‘å‚«‚¢ƒCƒxƒ“ƒgƒy[ƒW‚©‚燂ɒ²‚ׂé
for page in @event.pages.reverse
# ƒCƒxƒ“ƒgðŒ‚ð c ‚ÅQƉ”‚É
c = page.condition
# ƒXƒCƒbƒ` 1 ðŒŠm”F
if c.switch1_valid
if $game_switches[c.switch1_id] == false
next
end
end
# ƒXƒCƒbƒ` 2 ðŒŠm”F
if c.switch2_valid
if $game_switches[c.switch2_id] == false
next
end
end
# •Ï” ðŒŠm”F
if c.variable_valid
if $game_variables[c.variable_id] < c.variable_value
next
end
end
# ƒZƒ‹ƒtƒXƒCƒbƒ` ðŒŠm”F
if c.self_switch_valid
key = [@map_id, @event.id, c.self_switch_ch]
if $game_self_switches[key] != true
next
end
end
# ƒ[ƒJƒ‹•Ï” new_page ‚ðÝ’è
new_page = page
# ƒ‹[ƒv‚𔲂¯‚é
break
end
end
# ‘O‰ñ‚Æ“¯‚¶ƒCƒxƒ“ƒgƒy[ƒW‚Ìê‡
if new_page == @page
# ƒƒƒbƒhI—¹
return
end
# @page ‚ÉŒ»Ý‚̃Cƒxƒ“ƒgƒy[ƒW‚ðÝ’è
@page = new_page
# ‹N“®’†ƒtƒ‰ƒO‚ðƒNƒŠƒA
clear_starting
# ðŒ‚ð–‚½‚·ƒy[ƒW‚ª‚È‚¢ê‡
if @page == nil
# ŠeƒCƒ“ƒXƒ^ƒ“ƒX•Ï”‚ðÝ’è
@tile_id = 0
@character_name = ""
@character_hue = 0
@move_type = 0
@through = true
@trigger = nil
@list = nil
@interpreter = nil
# ƒƒƒbƒhI—¹
return
end
# ŠeƒCƒ“ƒXƒ^ƒ“ƒX•Ï”‚ðÝ’è
@tile_id = @page.graphic.tile_id
@character_name = @page.graphic.character_name
@character_hue = @page.graphic.character_hue
if @original_direction != @page.graphic.direction
@direction = @page.graphic.direction
@original_direction = @direction
@prelock_direction = 0
end
if @original_pattern != @page.graphic.pattern
@pattern = @page.graphic.pattern
@original_pattern = @pattern
end
@opacity = @page.graphic.opacity
@blend_type = @page.graphic.blend_type
@move_type = @page.move_type
@move_speed = @page.move_speed
@move_frequency = @page.move_frequency
@move_route = @page.move_route
@move_route_index = 0
@move_route_forcing = false
@walk_anime = @page.walk_anime
@step_anime = @page.step_anime
@direction_fix = @page.direction_fix
@through = @page.through
@always_on_top = @page.always_on_top
@trigger = @page.trigger
@list = @page.list
@interpreter = nil
# ƒgƒŠƒK[‚ª [•À—ñˆ—] ‚Ìê‡
if @trigger == 4
# •À—ñˆ——pƒCƒ“ƒ^ƒvƒŠƒ^‚ðì¬
@interpreter = Interpreter.new
end
# ©“®ƒCƒxƒ“ƒg‚Ì‹N“®”»’è
check_event_trigger_auto
end
#------------------------------------------
# œ ÚGƒCƒxƒ“ƒg‚Ì‹N“®”»’è
#------------------------------------------
def check_event_trigger_touch(x, y)
# ƒCƒxƒ“ƒgÀs’†‚Ìê‡
if $game_system.map_interpreter.running?
return
end
# ƒgƒŠƒK[‚ª [ƒCƒxƒ“ƒg‚©‚çÚG] ‚©‚ƒvƒŒƒCƒ„[‚ÌÀ•W‚ƈê’v‚µ‚½ê‡
if @trigger == 2 and x == $game_player.x and y == $game_player.y
# ƒWƒƒƒ“ƒv’†ˆÈŠO‚ÅA‹N“®”»’肪³–ʂ̃Cƒxƒ“ƒg‚È‚ç
if not jumping? and not over_trigger?
start
end
end
end
#------------------------------------------
# œ ©“®ƒCƒxƒ“ƒg‚Ì‹N“®”»’è
#------------------------------------------
def check_event_trigger_auto
# ƒgƒŠƒK[‚ª [ƒCƒxƒ“ƒg‚©‚çÚG] ‚©‚ƒvƒŒƒCƒ„[‚ÌÀ•W‚ƈê’v‚µ‚½ê‡
if @trigger == 2 and @x == $game_player.x and @y == $game_player.y
# ƒWƒƒƒ“ƒv’†ˆÈŠO‚ÅA‹N“®”»’肪“¯ˆÊ’u‚̃Cƒxƒ“ƒg‚È‚ç
if not jumping? and over_trigger?
start
end
end
# ƒgƒŠƒK[‚ª [©“®Às] ‚Ìê‡
if @trigger == 3
start
end
end
#------------------------------------------
# œ ƒtƒŒ[ƒ€XV
#------------------------------------------
def update
super
# ©“®ƒCƒxƒ“ƒg‚Ì‹N“®”»’è
check_event_trigger_auto
# •À—ñˆ—‚ª—LŒø‚Ìê‡
if @interpreter != nil
# Às’†‚Å‚È‚¢ê‡
unless @interpreter.running?
# ƒCƒxƒ“ƒg‚ðƒZƒbƒgƒAƒbƒv
@interpreter.setup(@list, @event.id)
end
# ƒCƒ“ƒ^ƒvƒŠƒ^‚ðXV
@interpreter.update
end
end
end