With ace being released a little over 2 weeks now what's your thoughts on RGSS3? Has things changed for the better or are there things you preferred in rgss1 or 2?
One noticeable change is game event and game character, most are identical to there vx counterpart's but game_event seems to have been simplified for the better.
RGSS
CODE
class Game_Event < Game_Character
# ------------------------------------
attr_reader :trigger
attr_reader :list
attr_reader :starting
# ------------------------------------
def initialize(map_id, event)
super()
@map_id = map_id
@event = event
@id = @event.id
@erased = false
@starting = false
moveto(@event.x, @event.y)
refresh
end
# ------------------------------------
def clear_starting
@starting = false
end
# ------------------------------------
def over_trigger?
if @character_name != "" and not @through
return false
end
unless $game_map.passable?(@x, @y, 0)
return false
end
return true
end
# ------------------------------------
def start
if @list.size > 1
@starting = true
end
end
# ------------------------------------
def erase
@erased = true
refresh
end
# ------------------------------------
def refresh
new_page = nil
unless @erased
for page in @event.pages.reverse
c = page.condition
if c.switch1_valid
if $game_switches[c.switch1_id] == false
next
end
end
if c.switch2_valid
if $game_switches[c.switch2_id] == false
next
end
end
if c.variable_valid
if $game_variables[c.variable_id] < c.variable_value
next
end
end
if c.self_switch_valid
key = [@map_id, @event.id, c.self_switch_ch]
if $game_self_switches[key] != true
next
end
end
new_page = page
break
end
end
if new_page == @page
return
end
@page = new_page
clear_starting
if @page == nil
@tile_id = 0
@character_name = ""
@character_hue = 0
@move_type = 0
@trigger = nil
@list = nil
@interpreter = nil
return
end
@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
if @trigger == 4
@interpreter = Interpreter.new
end
check_event_trigger_auto
end
# ------------------------------------
def check_event_trigger_touch(x, y)
if $game_system.map_interpreter.running?
return
end
if @trigger == 2 and x == $game_player.x and y == $game_player.y
unless over_trigger?
start
end
end
end
# ------------------------------------
def check_event_trigger_auto
if @trigger == 2
if @x == $game_player.x and @y == $game_player.y and over_trigger?
start
end
end
if @trigger == 3
start
end
end
# ------------------------------------
def update
super
check_event_trigger_auto
if @interpreter != nil
unless @interpreter.running?
@interpreter.setup(@list, @event.id)
end
@interpreter.update
end
end
end
RGSS3
CODE
#==============================================================================
# â– Game_Event
#------------------------------------------------------------------------------
#  イベントを扱ã�†ã‚¯ãƒ©ã‚¹ã�§ã�™ã€‚æ�¡ä»¶åˆ¤å®šã�«ã‚ˆã‚‹ã‚¤ãƒ™ãƒ³ãƒˆãƒšãƒ
¼ã‚¸åˆ‡ã‚Šæ›¿ã�ˆã‚„ã€�並列処ç�†
# イベント実行���機能を����り�Game_Map クラス�内部�使用�れ��。
#==============================================================================
class Game_Event < Game_Character
#--------------------------------------------------------------------------
# � 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :trigger # トリガー
attr_reader :list # 実行内容
attr_reader :starting # èµ·å‹•ä¸ãƒ•ラグ
#--------------------------------------------------------------------------
# � オブジェクト�期化
# event : RPG::Event
#--------------------------------------------------------------------------
def initialize(map_id, event)
super()
@map_id = map_id
@event = event
@id = @event.id
moveto(@event.x, @event.y)
refresh
end
#--------------------------------------------------------------------------
# � 公開メン�変数��期化
#--------------------------------------------------------------------------
def init_public_members
super
@trigger = 0
@list = nil
@starting = false
end
#--------------------------------------------------------------------------
# � �公開メン�変数��期化
#--------------------------------------------------------------------------
def init_private_members
super
@move_type = 0 # 移動タイプ
@erased = false # 一時消去フラグ
@page = nil # イベントページ
end
#--------------------------------------------------------------------------
# â—� ã‚ャラクターã�¨ã�®è¡�çª�判定
#--------------------------------------------------------------------------
def collide_with_characters?(x, y)
super || collide_with_player_characters?(x, y)
end
#--------------------------------------------------------------------------
# â—� プレイヤーã�¨ã�®è¡�çª�判定(フォãƒãƒ¯ãƒ¼ã‚’å�«ã‚€ï¼‰
#--------------------------------------------------------------------------
def collide_with_player_characters?(x, y)
normal_priority? && $game_player.collide?(x, y)
end
#--------------------------------------------------------------------------
# â—� ãƒãƒƒã‚¯ï¼ˆå®Ÿè¡Œä¸ã�®ã‚¤ãƒ™ãƒ³ãƒˆã�Œç«‹ã�¡æ¢ã�¾ã‚‹å‡¦ç�†ï¼‰
#--------------------------------------------------------------------------
def lock
unless @locked
@prelock_direction = @direction
turn_toward_player
@locked = true
end
end
#--------------------------------------------------------------------------
# â—� ãƒãƒƒã‚¯è§£é™¤
#--------------------------------------------------------------------------
def unlock
if @locked
@locked = false
set_direction(@prelock_direction)
end
end
#--------------------------------------------------------------------------
# â—� å�œæ¢æ™‚ã�®æ›´æ–°
#--------------------------------------------------------------------------
def update_stop
super
update_self_movement unless @move_route_forcing
end
#--------------------------------------------------------------------------
# � 自律移動�更新
#--------------------------------------------------------------------------
def update_self_movement
if near_the_screen? && @stop_count > stop_count_threshold
case @move_type
when 1; move_type_random
when 2; move_type_toward_player
when 3; move_type_custom
end
end
end
#--------------------------------------------------------------------------
# â—� ç”»é�¢ã�®å�¯è¦–é ˜åŸŸä»˜è¿‘ã�«ã�„ã‚‹ã�‹åˆ¤å®š
# dx : ç”»é�¢ä¸å¤®ã�‹ã‚‰å·¦å�³ä½•マス以内を判定ã�™ã‚‹ã�‹
# dy : ç”»é�¢ä¸å¤®ã�‹ã‚‰ä¸Šä¸‹ä½•マス以内を判定ã�™ã‚‹ã�‹
#--------------------------------------------------------------------------
def near_the_screen?(dx = 12, dy = 8)
ax = $game_map.adjust_x(@real_x) - Graphics.width / 2 / 32
ay = $game_map.adjust_y(@real_y) - Graphics.height / 2 / 32
ax >= -dx && ax <= dx && ay >= -dy && ay <= dy
end
#--------------------------------------------------------------------------
# â—� 自律移動を開始ã�™ã‚‹å�œæ¢ã‚«ã‚¦ãƒ³ãƒˆã�®é–¾å€¤ã‚’計算
#--------------------------------------------------------------------------
def stop_count_threshold
30 * (5 - @move_frequency)
end
#--------------------------------------------------------------------------
# â—� 移動タイプ : ランダãƒ
#--------------------------------------------------------------------------
def move_type_random
case rand(6)
when 0..1; move_random
when 2..4; move_forward
when 5; @stop_count = 0
end
end
#--------------------------------------------------------------------------
# � 移動タイプ : 近��
#--------------------------------------------------------------------------
def move_type_toward_player
if near_the_player?
case rand(6)
when 0..3; move_toward_player
when 4; move_random
when 5; move_forward
end
else
move_random
end
end
#--------------------------------------------------------------------------
# � プレイヤー�近���る�判定
#--------------------------------------------------------------------------
def near_the_player?
sx = distance_x_from($game_player.x).abs
sy = distance_y_from($game_player.y).abs
sx + sy < 20
end
#--------------------------------------------------------------------------
# â—� 移動タイプ : カスタãƒ
#--------------------------------------------------------------------------
def move_type_custom
update_routine_move
end
#--------------------------------------------------------------------------
# â—� èµ·å‹•ä¸ãƒ•ラグã�®ã‚¯ãƒªã‚¢
#--------------------------------------------------------------------------
def clear_starting_flag
@starting = false
end
#--------------------------------------------------------------------------
# � 実行内容�空���を判定
#--------------------------------------------------------------------------
def empty?
!@list || @list.size <= 1
end
#--------------------------------------------------------------------------
# � 指定�れ�トリガー���れ����を判定
# triggers : トリガー��列
#--------------------------------------------------------------------------
def trigger_in?(triggers)
triggers.include?(@trigger)
end
#--------------------------------------------------------------------------
# � イベント起動
#--------------------------------------------------------------------------
def start
return if empty?
@starting = true
lock if trigger_in?([0,1,2])
end
#--------------------------------------------------------------------------
# � 一時消去
#--------------------------------------------------------------------------
def erase
@erased = true
refresh
end
#--------------------------------------------------------------------------
# � リフレッシュ
#--------------------------------------------------------------------------
def refresh
new_page = @erased ? nil : find_proper_page
setup_page(new_page) if !new_page || new_page != @page
end
#--------------------------------------------------------------------------
# � �件���イベントページを見��る
#--------------------------------------------------------------------------
def find_proper_page
@event.pages.reverse.find {|page| conditions_met?(page) }
end
#--------------------------------------------------------------------------
# � イベントページ��件�致判定
#--------------------------------------------------------------------------
def conditions_met?(page)
c = page.condition
if c.switch1_valid
return false unless $game_switches[c.switch1_id]
end
if c.switch2_valid
return false unless $game_switches[c.switch2_id]
end
if c.variable_valid
return false if $game_variables[c.variable_id] < c.variable_value
end
if c.self_switch_valid
key = [@map_id, @event.id, c.self_switch_ch]
return false if $game_self_switches[key] != true
end
if c.item_valid
item = $data_items[c.item_id]
return false unless $game_party.has_item?(item)
end
if c.actor_valid
actor = $game_actors[c.actor_id]
return false unless $game_party.members.include?(actor)
end
return true
end
#--------------------------------------------------------------------------
# � イベントページ�セットアップ
#--------------------------------------------------------------------------
def setup_page(new_page)
@page = new_page
if @page
setup_page_settings
else
clear_page_settings
end
update_bush_depth
clear_starting_flag
check_event_trigger_auto
end
#--------------------------------------------------------------------------
# â—� イベントページã�®è¨å®šã‚’クリア
#--------------------------------------------------------------------------
def clear_page_settings
@tile_id = 0
@character_name = ""
@character_index = 0
@move_type = 0
@through = true
@trigger = nil
@list = nil
@interpreter = nil
end
#--------------------------------------------------------------------------
# â—� イベントページã�®è¨å®šã‚’セットアップ
#--------------------------------------------------------------------------
def setup_page_settings
@tile_id = @page.graphic.tile_id
@character_name = @page.graphic.character_name
@character_index = @page.graphic.character_index
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
@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
@priority_type = @page.priority_type
@trigger = @page.trigger
@list = @page.list
@interpreter = @trigger == 4 ? Game_Interpreter.new : nil
end
#--------------------------------------------------------------------------
# � 接触イベント�起動判定
#--------------------------------------------------------------------------
def check_event_trigger_touch(x, y)
return if $game_map.interpreter.running?
if @trigger == 2 && $game_player.pos?(x, y)
start if !jumping? && normal_priority?
end
end
#--------------------------------------------------------------------------
# � 自動イベント�起動判定
#--------------------------------------------------------------------------
def check_event_trigger_auto
start if @trigger == 3
end
#--------------------------------------------------------------------------
# � フレーム更新
#--------------------------------------------------------------------------
def update
super
check_event_trigger_auto
return unless @interpreter
@interpreter.setup(@list, @event.id) unless @interpreter.running?
@interpreter.update
end
end
My overall thought is that I love rgss3 and ruby 1.9, things just seem neater and cleaner.