设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

帅哥美女帮忙,分辨率脚本没用,游戏里的窗口怎么改

查看数: 2322 | 评论数: 7 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2011-5-9 13:10

正文摘要:

本帖最后由 fux2 于 2011-5-23 17:01 编辑 然后脚本在这里# ———————————————————————————————————— # 本脚本来自[url]www.66rpg.com[/url],转载请保留此信息 # ————— ...

回复

妖娆成殇 发表于 2011-5-23 16:18:37
妖娆成殇 发表于 2011-5-23 15:40
改了一下,但还是不行,这些在哪里改?上面的那个还是没变,下面的到是变了

改好了,终于找到了~~~~~~~~`````
恐惧剑刃 发表于 2011-5-23 15:10:28
http://rpg.blue/thread-180353-1-1.html
就不是把窗口大小坐标调一下就可以了

zergash 发表于 2011-5-23 14:32:31
同求!!!!!!!!!!!!
大大!!!!!
妖娆成殇 发表于 2011-5-12 12:56:57
我就是希望用这个大小的窗口运行游戏啊,你那个的话,不是又小了吗


妖娆成殇于2011-5-23 14:23补充以下内容:
没人帮忙一下吗。。。55555。不懂脚本的飘过~~~~~``

点评

窗口大小要在各个窗口的脚本里去改  发表于 2011-5-12 13:19
Zhen~败类 发表于 2011-5-10 23:54:29
看了一下。。我这没有你那个分辨率的。抱歉。
不过别的你看看行不?
  1. # ————————————————————————————————————

  2. class Win32API
  3.   GAME_INI_FILE = ".\\Game.ini"
  4.   HWND_TOPMOST = 0
  5.   HWND_TOP = -1
  6.   SWP_NOMOVE   = 0
  7.   SWP_FRAMECHANGED = 0
  8.   HWND_NOTTOPMOST = 0
  9.   WM_GETMINMAXINFO = 24
  10.   #——————————————————————————————————————
  11.   def Win32API.GetPrivateProfileString(section, key)
  12.     val = "\0"*256
  13.     gps = Win32API.new('kernel32', 'GetPrivateProfileString',%w(p p p p l p), 'l')
  14.     gps.call(section, key, "", val, 256, GAME_INI_FILE)
  15.     val.delete!("\0")
  16.     return val
  17.   end
  18.   #——————————————————————————————————————
  19.   def Win32API.FindWindow(class_name, title)
  20.     fw = Win32API.new('user32', 'FindWindow', %(p, p), 'i')
  21.     hWnd = fw.call(class_name, title)
  22.     return hWnd
  23.   end
  24.   #——————————————————————————————————————
  25.   def Win32API.SetWindowPos(w, h)
  26.     title =  Win32API.GetPrivateProfileString("Game", "Title")
  27.     hWnd = Win32API.FindWindow("RGSS Player", title)
  28.     swp = Win32API.new('user32', 'SetWindowPos', %(l, l, i, i, i, i, i), 'i')
  29.     win = swp.call(hWnd, HWND_TOP, -3, -22,  w + 6, h+32, WM_GETMINMAXINFO)
  30.     return win
  31.   end
  32.   #——————————————————————————————————————
  33.   def Win32API.client_size
  34.     title =  Win32API.GetPrivateProfileString("Game", "Title")
  35.     hWnd = Win32API.FindWindow("RGSS Player", title)
  36.     rect = [0, 0, 0, 0].pack('l4')
  37.     Win32API.new('user32', 'GetClientRect', %w(l p), 'i').call(hWnd, rect)
  38.     width, height = rect.unpack('l4')[2..3]
  39.     return width, height
  40.   end
  41. end
  42. $width = 1024
  43. $height = 768
  44. win = Win32API.SetWindowPos($width, $height)
  45. if(win == 0)
  46.   p "Size change has failed!"
  47. end
  48. #==============================================================================
  49. # ■ Spriteset_Map
  50. #------------------------------------------------------------------------------
  51. #  处理地图画面活动块和元件的类。本类在 Scene_Map 类的内部使用。
  52. #==============================================================================
  53. class Spriteset_Map
  54.   #--------------------------------------------------------------------------
  55.   # ● 初始化对像
  56.   #--------------------------------------------------------------------------
  57.   def initialize
  58.     @viewport2 = Viewport.new(0, 0, $width, $height)  #——生成图片
  59.     @viewport3 = Viewport.new(0, 0, $width, $height)  #——生成画面闪烁用的部分
  60.     $viewport4 = Viewport.new(640, 0, $width-640, 480)  #——右侧
  61.     $viewport5 = Viewport.new(0, 480, 640, $height-480) #——下侧
  62.     $viewport6 = Viewport.new(640, 480, $width-640, $height-480) #——右下角
  63.     $viewport1 = Viewport.new(0, 0, 640, 480) #——主窗口
  64.     @viewport_weather = Viewport.new(0, 0, $width, $height) #——生成天气专用
  65.     @viewport2.z = 200  #——生成图片的深度
  66.     @viewport3.z = 5000 #——生成画面闪烁用的深度
  67.     @tilemap = Tilemap.new($viewport1)  #——主窗口
  68.     @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  69.     @tilemap2 = Tilemap.new($viewport4) #——右侧
  70.     @tilemap2.tileset = RPG::Cache.tileset($game_map.tileset_name)
  71.     @tilemap3 = Tilemap.new($viewport5) #——下侧
  72.     @tilemap3.tileset = RPG::Cache.tileset($game_map.tileset_name)
  73.     @tilemap4 = Tilemap.new($viewport6) #——右下角
  74.     @tilemap4.tileset = RPG::Cache.tileset($game_map.tileset_name)
  75.     for i in 0..6 #——生成自动元件
  76.       autotile_name = $game_map.autotile_names[i]
  77.       @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  78.       @tilemap2.autotiles[i] = RPG::Cache.autotile(autotile_name)
  79.       @tilemap3.autotiles[i] = RPG::Cache.autotile(autotile_name)
  80.       @tilemap4.autotiles[i] = RPG::Cache.autotile(autotile_name)
  81.     end
  82.     @tilemap.map_data = $game_map.data  #——生成地图数据
  83.     @tilemap2.map_data = $game_map.data
  84.     @tilemap3.map_data = $game_map.data
  85.     @tilemap4.map_data = $game_map.data
  86.     @tilemap.priorities = $game_map.priorities  #——生成优先
  87.     @tilemap2.priorities = $game_map.priorities
  88.     @tilemap3.priorities = $game_map.priorities
  89.     @tilemap4.priorities = $game_map.priorities
  90.     @character_sprites = [] #——生成事件
  91.     for i in $game_map.events.keys.sort
  92.       sprite = Sprite_Character.new($viewport1, $game_map.events[i])
  93.       @character_sprites.push(sprite)
  94.       sprite = Sprite_Character.new($viewport4, $game_map.events[i])
  95.       @character_sprites.push(sprite)
  96.       sprite = Sprite_Character.new($viewport5, $game_map.events[i])
  97.       @character_sprites.push(sprite)
  98.       sprite = Sprite_Character.new($viewport6, $game_map.events[i])
  99.       @character_sprites.push(sprite)
  100.     end  #——下面继续生成角色
  101.     @character_sprites.push(Sprite_Character.new($viewport1, $game_player))
  102.     @character_sprites.push(Sprite_Character.new($viewport4, $game_player))
  103.     @character_sprites.push(Sprite_Character.new($viewport5, $game_player))
  104.     @character_sprites.push(Sprite_Character.new($viewport6, $game_player))
  105.     #——下面生成远景
  106.     @panorama = Plane.new($viewport1)
  107.     @panorama.z = -1000
  108.     @panorama2 = Plane.new($viewport4)
  109.     @panorama2.z = -1000
  110.     @panorama3 = Plane.new($viewport5)
  111.     @panorama3.z = -1000
  112.     @panorama4 = Plane.new($viewport6)
  113.     @panorama4.z = -1000
  114.     #——下面生成雾   
  115.     @fog = Plane.new($viewport1)
  116.     @fog.z = 3000
  117.     @fog2 = Plane.new($viewport4)
  118.     @fog2.z = 3000
  119.     @fog3 = Plane.new($viewport5)
  120.     @fog3.z = 3000
  121.     @fog4 = Plane.new($viewport6)
  122.     @fog4.z = 3000
  123.     #——下面生成天气
  124.     @weather = Weather.new(@viewport_weather)
  125.     @picture_sprites = [] #——这里生成图片
  126.     for i in 1..50
  127.       @picture_sprites.push(Sprite_Picture.new(@viewport2, $game_screen.pictures[i]))
  128.     end
  129.     @timer_sprite = Sprite_Timer.new #——生成计时器
  130.     #——刷新
  131.     update
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 释放
  135.   #--------------------------------------------------------------------------
  136.   def dispose
  137.     @tilemap.tileset.dispose    #——释放元件地图
  138.     @tilemap2.tileset.dispose
  139.     @tilemap3.tileset.dispose
  140.     @tilemap4.tileset.dispose
  141.     for i in 0..6
  142.       @tilemap.autotiles[i].dispose
  143.       @tilemap2.autotiles[i].dispose
  144.       @tilemap3.autotiles[i].dispose
  145.       @tilemap4.autotiles[i].dispose
  146.     end
  147.     @tilemap.dispose
  148.     @tilemap2.dispose
  149.     @tilemap3.dispose
  150.     @tilemap4.dispose
  151.     @panorama.dispose    #——释放远景平面
  152.     @panorama2.dispose
  153.     @panorama3.dispose
  154.     @panorama4.dispose
  155.     @fog.dispose    #——释放雾平面
  156.     @fog2.dispose
  157.     @fog3.dispose
  158.     @fog4.dispose
  159.     for sprite in @character_sprites    #——释放角色活动块
  160.       sprite.dispose
  161.     end
  162.     @weather.dispose   
  163.     for sprite in @picture_sprites
  164.       sprite.dispose
  165.     end
  166.     # 释放计时器块
  167.     @timer_sprite.dispose
  168.     # 释放显示端口
  169.     $viewport1.dispose
  170.     @viewport2.dispose
  171.     @viewport3.dispose
  172.     $viewport4.dispose
  173.     $viewport5.dispose
  174.     $viewport6.dispose
  175.   end
  176.   #--------------------------------------------------------------------------
  177.   # ● 刷新画面
  178.   #--------------------------------------------------------------------------
  179.   def update
  180.     # 远景与现在的情况有差异发情况下
  181.     if @panorama_name != $game_map.panorama_name or  @panorama_hue != $game_map.panorama_hue
  182.       @panorama_name = $game_map.panorama_name
  183.       @panorama_hue = $game_map.panorama_hue
  184.       if @panorama.bitmap != nil
  185.         @panorama.bitmap.dispose
  186.         @panorama.bitmap = nil
  187.         @panorama2.bitmap.dispose
  188.         @panorama2.bitmap = nil
  189.         @panorama3.bitmap.dispose
  190.         @panorama3.bitmap = nil
  191.         @panorama4.bitmap.dispose
  192.         @panorama4.bitmap = nil
  193.       end
  194.       if @panorama_name != ""
  195.         @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  196.         @panorama2.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  197.         @panorama3.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  198.         @panorama4.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
  199.       end
  200.       Graphics.frame_reset
  201.     end
  202.     # 雾与现在的情况有差异的情况下
  203.     if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
  204.       @fog_name = $game_map.fog_name
  205.       @fog_hue = $game_map.fog_hue
  206.     if @fog.bitmap != nil
  207.       @fog.bitmap.dispose
  208.       @fog.bitmap = nil
  209.       @fog2.bitmap.dispose
  210.       @fog2.bitmap = nil
  211.       @fog3.bitmap.dispose
  212.       @fog3.bitmap = nil
  213.       @fog4.bitmap.dispose
  214.       @fog4.bitmap = nil
  215.     end
  216.     if @fog_name != ""
  217.       @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  218.       @fog2.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  219.       @fog3.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  220.       @fog4.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
  221.     end
  222.       Graphics.frame_reset
  223.     end
  224.     # 刷新元件地图
  225.     @tilemap.ox = $game_map.display_x / 4
  226.     @tilemap.oy = $game_map.display_y / 4
  227.     @tilemap.update
  228.     @tilemap2.ox = @tilemap.ox
  229.     @tilemap2.oy = @tilemap.oy
  230.     @tilemap2.update
  231.     @tilemap3.ox = @tilemap.ox
  232.     @tilemap3.oy = @tilemap.oy + 480
  233.     @tilemap3.update
  234.     @tilemap4.ox = @tilemap.ox
  235.     @tilemap4.oy = @tilemap.oy + 480
  236.     @tilemap4.update
  237.     # 刷新远景平面
  238.     @panorama.ox = $game_map.display_x / 8
  239.     @panorama.oy = $game_map.display_y / 8
  240.     @panorama2.ox = @panorama.ox
  241.     @panorama2.oy = @panorama.oy
  242.     @panorama3.ox = @panorama.ox
  243.     @panorama3.oy = @panorama.oy + 480
  244.     @panorama4.ox = @panorama.ox
  245.     @panorama4.oy = @panorama.oy + 480
  246.     # 刷新雾平面
  247.     @[email protected][email protected][email protected]_x = $game_map.fog_zoom / 100.0
  248.     @[email protected][email protected][email protected]_y = $game_map.fog_zoom / 100.0
  249.     @[email protected][email protected][email protected] = $game_map.fog_opacity
  250.     @[email protected][email protected][email protected]_type = $game_map.fog_blend_type
  251.     @fog4.tone = @fog3.tone = @fog2.tone = @fog.tone = $game_map.fog_tone
  252.     @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
  253.     @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
  254.     @fog2.ox = @fog.ox #+ 140#*@fog.zoom_x
  255.     @fog2.oy = @fog.oy
  256.     @fog3.ox = @fog.ox
  257.     @fog3.oy = @fog.oy + 480
  258.     @fog4.ox = @fog.ox
  259.     @fog4.oy = @fog.oy + 480
  260.     # 刷新角色活动块
  261.     for sprite in @character_sprites
  262.       sprite.update
  263.     end
  264.     # 刷新天候图形
  265.     @weather.type = $game_screen.weather_type
  266.     @weather.max = $game_screen.weather_max
  267.     @weather.ox = $game_map.display_x / 4
  268.     @weather.oy = $game_map.display_y / 4
  269.     @weather.update  
  270.     # 刷新图片
  271.     for sprite in @picture_sprites
  272.       sprite.update
  273.     end
  274.     # 刷新计时器块
  275.     @timer_sprite.update
  276.     # 设置画面的色调与震动位置
  277.     $viewport1.tone = $game_screen.tone
  278.     $viewport1.ox = $game_screen.shake
  279.     $viewport4.tone = $game_screen.tone
  280.     $viewport4.ox = $game_screen.shake+640
  281.     $viewport5.tone = $game_screen.tone
  282.     $viewport5.ox = $game_screen.shake  
  283.     $viewport6.tone = $game_screen.tone
  284.     $viewport6.ox = $game_screen.shake+640
  285.     # 设置画面的闪烁色
  286.     @viewport3.color = $game_screen.flash_color
  287.     # 刷新显示端口
  288.     $viewport1.update
  289.     @viewport3.update
  290.     $viewport4.update
  291.     $viewport5.update
  292.     $viewport6.update
  293.   end
  294. end
  295.   class Weather
  296.     def initialize(viewport = nil)
  297.       @type = 0
  298.       @max = 0
  299.       @ox = 0
  300.       @oy = 0
  301.       color1 = Color.new(255, 255, 255, 255)
  302.       color2 = Color.new(255, 255, 255, 128)
  303.       @rain_bitmap = Bitmap.new(7, 56)
  304.       for i in 0..6
  305.         @rain_bitmap.fill_rect(6-i, i*8, 1, 8, color1)
  306.       end
  307.       @storm_bitmap = Bitmap.new(34, 64)
  308.       for i in 0..31
  309.         @storm_bitmap.fill_rect(33-i, i*2, 1, 2, color2)
  310.         @storm_bitmap.fill_rect(32-i, i*2, 1, 2, color1)
  311.         @storm_bitmap.fill_rect(31-i, i*2, 1, 2, color2)
  312.       end
  313.       @snow_bitmap = Bitmap.new(6, 6)
  314.       @snow_bitmap.fill_rect(0, 1, 6, 4, color2)
  315.       @snow_bitmap.fill_rect(1, 0, 4, 6, color2)
  316.       @snow_bitmap.fill_rect(1, 2, 4, 2, color1)
  317.       @snow_bitmap.fill_rect(2, 1, 2, 4, color1)
  318.       @sprites = []
  319.       for i in 1..40
  320.         sprite = Sprite.new(viewport)
  321.         sprite.z = 1000
  322.         sprite.visible = false
  323.         sprite.opacity = 0
  324.         @sprites.push(sprite)
  325.       end
  326.     end
  327.     def dispose
  328.       for sprite in @sprites
  329.         sprite.dispose
  330.       end
  331.       @rain_bitmap.dispose
  332.       @storm_bitmap.dispose
  333.       @snow_bitmap.dispose
  334.     end
  335.     def type=(type)
  336.       return if @type == type
  337.       @type = type
  338.       case @type
  339.       when 1
  340.         bitmap = @rain_bitmap
  341.       when 2
  342.         bitmap = @storm_bitmap
  343.       when 3
  344.         bitmap = @snow_bitmap
  345.       else
  346.         bitmap = nil
  347.       end
  348.       for i in 1..40
  349.         sprite = @sprites[i]
  350.         if sprite != nil
  351.           sprite.visible = (i <= @max)
  352.           sprite.bitmap = bitmap
  353.         end
  354.       end
  355.     end
  356.     def ox=(ox)
  357.       return if @ox == ox;
  358.       @ox = ox
  359.       for sprite in @sprites
  360.         sprite.ox = @ox
  361.       end
  362.     end
  363.     def oy=(oy)
  364.       return if @oy == oy;
  365.       @oy = oy
  366.       for sprite in @sprites
  367.         sprite.oy = @oy
  368.       end
  369.     end
  370.     def max=(max)
  371.       return if @max == max;
  372.       @max = [[max, 0].max, 40].min
  373.       for i in 1..40
  374.         sprite = @sprites[i]
  375.         if sprite != nil
  376.           sprite.visible = (i <= @max)
  377.         end
  378.       end
  379.     end
  380.     def update
  381.       return if @type == 0
  382.       for i in 1..@max
  383.         sprite = @sprites[i]
  384.         if sprite == nil
  385.           break
  386.         end
  387.         if @type == 1
  388.           sprite.x -= 2
  389.           sprite.y += 16
  390.           sprite.opacity -= 8
  391.         end
  392.         if @type == 2
  393.           sprite.x -= 8
  394.           sprite.y += 16
  395.           sprite.opacity -= 12
  396.         end
  397.         if @type == 3
  398.           sprite.x -= 2
  399.           sprite.y += 8
  400.           sprite.opacity -= 8
  401.         end
  402.         x = sprite.x - @ox
  403.         y = sprite.y - @oy
  404.         if sprite.opacity < 64 or x < -50 or x > $width+150 or y < -300 or y > $height+100
  405.           sprite.x = rand($width+150) - 50 + @ox
  406.           sprite.y = rand($height+100) - 200 + @oy
  407.           sprite.opacity = 255
  408.         end
  409.       end
  410.     end
  411.     attr_reader :type
  412.     attr_reader :max
  413.     attr_reader :ox
  414.     attr_reader :oy
  415.   end
  416. #==============================================================================
  417. # ■ Game_Player
  418. #------------------------------------------------------------------------------
  419. #  处理主角的类。事件启动的判定、以及地图的滚动等功能。
  420. # 本类的实例请参考 $game_player。
  421. #==============================================================================

  422. class Game_Player < Game_Character
  423.   #--------------------------------------------------------------------------
  424.   # ● 恒量
  425.   #--------------------------------------------------------------------------
  426.   CENTER_X = ($width/2 - 16) * 4   
  427.   CENTER_Y = ($height/2 - 16) * 4   
  428.   #--------------------------------------------------------------------------
  429.   # ● 可以通行判定
  430.   #     x : X 坐标
  431.   #     y : Y 坐标
  432.   #     d : 方向 (0,2,4,6,8)  ※ 0 = 全方向不能通行的情况判定 (跳跃用)
  433.   #--------------------------------------------------------------------------
  434.   def passable?(x, y, d)
  435.     # 求得新的坐标
  436.     new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
  437.     new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
  438.     # 坐标在地图外的情况下
  439.     unless $game_map.valid?(new_x, new_y)
  440.       # 不能通行
  441.       return false
  442.     end
  443.     # 调试模式为 ON 并且 按下 CTRL 键的情况下
  444.     if $DEBUG and Input.press?(Input::CTRL)
  445.       # 可以通行
  446.       return true
  447.     end
  448.     super
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ● 像通到画面中央一样的设置地图的显示位置
  452.   #--------------------------------------------------------------------------
  453.   def center(x, y)
  454.     max_x = ($game_map.width - 20) * 128
  455.     max_y = ($game_map.height - 15) * 128
  456.     $game_map.display_x = [0, [x * 128 - CENTER_X, max_x].min].max
  457.     $game_map.display_y = [0, [y * 128 - CENTER_Y, max_y].min].max
  458.     $game_map.scroll_down(0)
  459.     $game_map.scroll_right(0)
  460.   end
  461.   #--------------------------------------------------------------------------
  462.   # ● 向指定的位置移动
  463.   #     x : X 座標
  464.   #     y : Y 座標
  465.   #--------------------------------------------------------------------------
  466.   def moveto(x, y)
  467.     super
  468.     # 自连接
  469.     center(x, y)
  470.     # 生成遇敌计数
  471.     make_encounter_count
  472.   end
  473.   #--------------------------------------------------------------------------
  474.   # ● 增加步数
  475.   #--------------------------------------------------------------------------
  476.   def increase_steps
  477.     super
  478.     # 不是强制移动路线的场合
  479.     unless @move_route_forcing
  480.       # 增加步数
  481.       $game_party.increase_steps
  482.       # 步数是偶数的情况下
  483.       if $game_party.steps % 2 == 0
  484.         # 检查连续伤害
  485.         $game_party.check_map_slip_damage
  486.       end
  487.     end
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ● 获取遇敌计数
  491.   #--------------------------------------------------------------------------
  492.   def encounter_count
  493.     return @encounter_count
  494.   end
  495.   #--------------------------------------------------------------------------
  496.   # ● 生成遇敌计数
  497.   #--------------------------------------------------------------------------
  498.   def make_encounter_count
  499.     # 两种颜色震动的图像
  500.     if $game_map.map_id != 0
  501.       n = $game_map.encounter_step
  502.       @encounter_count = rand(n) + rand(n) + 1
  503.     end
  504.   end
  505.   #--------------------------------------------------------------------------
  506.   # ● 刷新
  507.   #--------------------------------------------------------------------------
  508.   def refresh
  509.     # 同伴人数为 0 的情况下
  510.     if $game_party.actors.size == 0
  511.       # 清除角色的文件名及对像
  512.       @character_name = ""
  513.       @character_hue = 0
  514.       # 分支结束
  515.       return
  516.     end
  517.     # 获取带头的角色
  518.     actor = $game_party.actors[0]
  519.     # 设置角色的文件名及对像
  520.     @character_name = actor.character_name
  521.     @character_hue = actor.character_hue
  522.     # 初始化不透明度和合成方式子
  523.     @opacity = 255
  524.     @blend_type = 0
  525.   end
  526.   #--------------------------------------------------------------------------
  527.   # ● 同位置的事件启动判定
  528.   #--------------------------------------------------------------------------
  529.   def check_event_trigger_here(triggers)
  530.     result = false
  531.     # 事件执行中的情况下
  532.     if $game_system.map_interpreter.running?
  533.       return result
  534.     end
  535.     # 全部事件的循环
  536.     for event in $game_map.events.values
  537.       # 事件坐标与目标一致的情况下
  538.       if event.x == @x and event.y == @y and triggers.include?(event.trigger)
  539.         # 跳跃中以外的情况下、启动判定是同位置的事件
  540.         if not event.jumping? and event.over_trigger?
  541.           event.start
  542.           result = true
  543.         end
  544.       end
  545.     end
  546.     return result
  547.   end
  548.   #--------------------------------------------------------------------------
  549.   # ● 正面事件的启动判定
  550.   #--------------------------------------------------------------------------
  551.   def check_event_trigger_there(triggers)
  552.     result = false
  553.     # 事件执行中的情况下
  554.     if $game_system.map_interpreter.running?
  555.       return result
  556.     end
  557.     # 计算正面坐标
  558.     new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  559.     new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  560.     # 全部事件的循环
  561.     for event in $game_map.events.values
  562.       # 事件坐标与目标一致的情况下
  563.       if event.x == new_x and event.y == new_y and
  564.          triggers.include?(event.trigger)
  565.         # 跳跃中以外的情况下、启动判定是正面的事件
  566.         if not event.jumping? and not event.over_trigger?
  567.           event.start
  568.           result = true
  569.         end
  570.       end
  571.     end
  572.     # 找不到符合条件的事件的情况下
  573.     if result == false
  574.       # 正面的元件是计数器的情况下
  575.       if $game_map.counter?(new_x, new_y)
  576.         # 计算 1 元件里侧的坐标
  577.         new_x += (@direction == 6 ? 1 : @direction == 4 ? -1 : 0)
  578.         new_y += (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  579.         # 全事件的循环
  580.         for event in $game_map.events.values
  581.           # 事件坐标与目标一致的情况下
  582.           if event.x == new_x and event.y == new_y and
  583.              triggers.include?(event.trigger)
  584.             # 跳跃中以外的情况下、启动判定是正面的事件
  585.             if not event.jumping? and not event.over_trigger?
  586.               event.start
  587.               result = true
  588.             end
  589.           end
  590.         end
  591.       end
  592.     end
  593.     return result
  594.   end
  595.   #--------------------------------------------------------------------------
  596.   # ● 接触事件启动判定
  597.   #--------------------------------------------------------------------------
  598.   def check_event_trigger_touch(x, y)
  599.     result = false
  600.     # 事件执行中的情况下
  601.     if $game_system.map_interpreter.running?
  602.       return result
  603.     end
  604.     # 全事件的循环
  605.     for event in $game_map.events.values
  606.       # 事件坐标与目标一致的情况下
  607.       if event.x == x and event.y == y and [1,2].include?(event.trigger)
  608.         # 跳跃中以外的情况下、启动判定是正面的事件
  609.         if not event.jumping? and not event.over_trigger?
  610.           event.start
  611.           result = true
  612.         end
  613.       end
  614.     end
  615.     return result
  616.   end
  617.   #--------------------------------------------------------------------------
  618.   # ● 画面更新
  619.   #--------------------------------------------------------------------------
  620.   def update
  621.     # 本地变量记录移动信息
  622.     last_moving = moving?
  623.     # 移动中、事件执行中、强制移动路线中、
  624.     # 信息窗口一个也不显示的时候
  625.     unless moving? or $game_system.map_interpreter.running? or
  626.            @move_route_forcing or $game_temp.message_window_showing
  627.       # 如果方向键被按下、主角就朝那个方向移动
  628.       case Input.dir4
  629.       when 2
  630.         move_down
  631.       when 4
  632.         move_left
  633.       when 6
  634.         move_right
  635.       when 8
  636.         move_up
  637.       end
  638.     end
  639.     # 本地变量记忆坐标
  640.     last_real_x = @real_x
  641.     last_real_y = @real_y
  642.     super
  643.     # 角色向下移动、画面上的位置在中央下方的情况下
  644.     if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y
  645.       # 画面向下卷动
  646.       $game_map.scroll_down(@real_y - last_real_y)
  647.     end
  648.     # 角色向左移动、画面上的位置在中央左方的情况下
  649.     if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X
  650.       # 画面向左卷动
  651.       $game_map.scroll_left(last_real_x - @real_x)
  652.     end
  653.     # 角色向右移动、画面上的位置在中央右方的情况下
  654.     if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X
  655.       # 画面向右卷动
  656.       $game_map.scroll_right(@real_x - last_real_x)
  657.     end
  658.     # 角色向上移动、画面上的位置在中央上方的情况下
  659.     if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y
  660.       # 画面向上卷动
  661.       $game_map.scroll_up(last_real_y - @real_y)
  662.     end
  663.     # 不在移动中的情况下
  664.     unless moving?
  665.       # 上次主角移动中的情况
  666.       if last_moving
  667.         # 与同位置的事件接触就判定为事件启动
  668.         result = check_event_trigger_here([1,2])
  669.         # 没有可以启动的事件的情况下
  670.         if result == false
  671.           # 调试模式为 ON 并且按下 CTRL 键的情况下除外
  672.           unless $DEBUG and Input.press?(Input::CTRL)
  673.             # 遇敌计数下降
  674.             if @encounter_count > 0
  675.               @encounter_count -= 1
  676.             end
  677.           end
  678.         end
  679.       end
  680.       # 按下 C 键的情况下
  681.       if Input.trigger?(Input::C)
  682.         # 判定为同位置以及正面的事件启动
  683.         check_event_trigger_here([0])
  684.         check_event_trigger_there([0,1,2])
  685.       end
  686.     end
  687.   end
  688. end
  689. #==============================================================================
  690. # ■ Scene_Gameover
  691. #------------------------------------------------------------------------------
  692. #  处理游戏结束画面的类。
  693. #==============================================================================

  694. class Scene_Gameover
  695.   #--------------------------------------------------------------------------
  696.   # ● 主处理
  697.   #--------------------------------------------------------------------------
  698.   def main
  699.     # 生成游戏结束图形
  700.     if $game_temp.in_battle
  701.       @temp_sprite = Spriteset_Battle.new
  702.     else
  703.       @temp_sprite = Spriteset_Map.new
  704.     end
  705.     @sprite = Sprite.new
  706.     @sprite.bitmap = RPG::Cache.gameover($data_system.gameover_name)
  707.     @sprite.opacity = 0
  708.     # 停止 BGM、BGS
  709.     $game_system.bgm_play(nil)
  710.     $game_system.bgs_play(nil)
  711.     # 演奏游戏结束 ME
  712.     $game_system.me_play($data_system.gameover_me)
  713.     # 执行过渡
  714.     Graphics.transition(0)
  715.     # 主循环
  716.     for i in 0..120
  717.       @sprite.opacity +=4
  718.       Graphics.update
  719.     end
  720.     @temp_sprite.dispose
  721.     loop do
  722.       # 刷新游戏画面
  723.       Graphics.update
  724.       # 刷新输入信息
  725.       Input.update
  726.       # 刷新画面情报
  727.       update
  728.       # 如果画面被切换的话就中断循环
  729.       if $scene != self
  730.         break
  731.       end
  732.     end
  733.     # 释放游戏结束图形
  734.     @sprite.bitmap.dispose
  735.     @sprite.dispose
  736.     # 执行过度
  737.     Graphics.transition(0)
  738.     # 准备过渡
  739.     if $BTEST
  740.       $scene = nil
  741.     end
  742.   end
  743.   #--------------------------------------------------------------------------
  744.   # ● 刷新画面
  745.   #--------------------------------------------------------------------------
  746.   def update
  747.     # 按下 C 键的情况下
  748.     if Input.trigger?(Input::C)
  749.       for i in 0..30
  750.         @sprite.opacity -=10
  751.         Graphics.update
  752.       end      
  753.       # 切换到标题画面
  754.       $scene = Scene_Title.new
  755.     end
  756.   end
  757. end
  758. #==============================================================================
  759. # ■ Scene_Title
  760. #------------------------------------------------------------------------------
  761. #  处理标题画面的类。
  762. #==============================================================================

  763. class Scene_Title
  764.   #--------------------------------------------------------------------------
  765.   # ● 住处理
  766.   #--------------------------------------------------------------------------
  767.   def main
  768.     # 战斗测试的情况下
  769.     if $BTEST
  770.       battle_test
  771.       return
  772.     end
  773.     # 载入数据库
  774.     $data_actors        = load_data("Data/Actors.rxdata")
  775.     $data_classes       = load_data("Data/Classes.rxdata")
  776.     $data_skills        = load_data("Data/Skills.rxdata")
  777.     $data_items         = load_data("Data/Items.rxdata")
  778.     $data_weapons       = load_data("Data/Weapons.rxdata")
  779.     $data_armors        = load_data("Data/Armors.rxdata")
  780.     $data_enemies       = load_data("Data/Enemies.rxdata")
  781.     $data_troops        = load_data("Data/Troops.rxdata")
  782.     $data_states        = load_data("Data/States.rxdata")
  783.     $data_animations    = load_data("Data/Animations.rxdata")
  784.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  785.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  786.     $data_system        = load_data("Data/System.rxdata")
  787.     # 生成系统对像
  788.     $game_system = Game_System.new
  789.     # 生成标题图形
  790.     @sprite = Sprite.new
  791.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  792.     @sprite.opacity = 0
  793.     # 生成命令窗口
  794.     s1 = "新游戏"
  795.     s2 = "继续"
  796.     s3 = "退出"
  797.     @command_window = Window_Command.new(192, [s1, s2, s3])
  798.     @command_window.back_opacity = 160
  799.     @command_window.x = $width /2 - @command_window.width / 2
  800.     @command_window.y = $height  /2 +132
  801.     # 判定继续的有效性
  802.     # 存档文件一个也不存在的时候也调查
  803.     # 有効为 @continue_enabled 为 true、無効为 false
  804.     @continue_enabled = false
  805.     for i in 0..3
  806.       if FileTest.exist?("Save#{i+1}.rxdata")
  807.         @continue_enabled = true
  808.       end
  809.     end
  810.     # 继续为有效的情况下、光标停止在继续上
  811.     # 无效的情况下、继续的文字显示为灰色
  812.     if @continue_enabled
  813.       @command_window.index = 1
  814.     else
  815.       @command_window.disable_item(1)
  816.     end
  817.     # 演奏标题 BGM
  818.     $game_system.bgm_play($data_system.title_bgm)
  819.     # 停止演奏 ME、BGS
  820.     Audio.me_stop
  821.     Audio.bgs_stop
  822.     # 执行过渡
  823.     Graphics.transition(0)
  824.     # 主循环
  825.     loop do
  826.       # 刷新游戏画面
  827.       Graphics.update
  828.       # 刷新输入信息
  829.       Input.update
  830.       # 刷新画面
  831.       update
  832.       # 如果画面被切换就中断循环
  833.       if $scene != self
  834.         break
  835.       end
  836.     end
  837.     # 装备过渡
  838.     Graphics.freeze
  839.     # 释放命令窗口
  840.     @command_window.dispose
  841.     # 释放标题图形
  842.     @sprite.bitmap.dispose
  843.     @sprite.dispose
  844.   end
  845.   #--------------------------------------------------------------------------
  846.   # ● 刷新画面
  847.   #--------------------------------------------------------------------------
  848.   def update
  849.     if @sprite.opacity < 255
  850.       @sprite.opacity += 15
  851.     end   
  852.     # 刷新命令窗口
  853.     @command_window.update
  854.     # 按下 C 键的情况下
  855.     if Input.trigger?(Input::C)
  856.       # 命令窗口的光标位置的分支
  857.       case @command_window.index
  858.       when 0  # 新游戏
  859.         command_new_game
  860.       when 1  # 继续
  861.         command_continue
  862.       when 2  # 退出
  863.         command_shutdown
  864.       end
  865.     end
  866.   end
  867.   #--------------------------------------------------------------------------
  868.   # ● 命令 : 新游戏
  869.   #--------------------------------------------------------------------------
  870.   def command_new_game
  871.     # 演奏确定 SE
  872.     $game_system.se_play($data_system.decision_se)
  873.     # 停止 BGM
  874.     Audio.bgm_stop
  875.     # 重置测量游戏时间用的画面计数器
  876.     Graphics.frame_count = 0
  877.     # 生成各种游戏对像
  878.     $game_temp          = Game_Temp.new
  879.     $game_system        = Game_System.new
  880.     $game_switches      = Game_Switches.new
  881.     $game_variables     = Game_Variables.new
  882.     $game_self_switches = Game_SelfSwitches.new
  883.     $game_screen        = Game_Screen.new
  884.     $game_actors        = Game_Actors.new
  885.     $game_party         = Game_Party.new
  886.     $game_troop         = Game_Troop.new
  887.     $game_map           = Game_Map.new
  888.     $game_player        = Game_Player.new
  889.     # 设置初期同伴位置
  890.     $game_party.setup_starting_members
  891.     # 设置初期位置的地图
  892.     $game_map.setup($data_system.start_map_id)
  893.     # 主角向初期位置移动
  894.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  895.     # 刷新主角
  896.     $game_player.refresh
  897.     # 执行地图设置的 BGM 与 BGS 的自动切换
  898.     $game_map.autoplay
  899.     # 刷新地图 (执行并行事件)
  900.     $game_map.update
  901.     # 切换地图画面
  902.     $scene = Scene_Map.new
  903.   end
  904.   #--------------------------------------------------------------------------
  905.   # ● 命令 : 继续
  906.   #--------------------------------------------------------------------------
  907.   def command_continue
  908.     # 继续无效的情况下
  909.     unless @continue_enabled
  910.       # 演奏无效 SE
  911.       $game_system.se_play($data_system.buzzer_se)
  912.       return
  913.     end
  914.     # 演奏确定 SE
  915.     $game_system.se_play($data_system.decision_se)
  916.     # 切换到读档画面
  917.     $scene = Scene_Load.new
  918.   end
  919.   #--------------------------------------------------------------------------
  920.   # ● 命令 : 退出
  921.   #--------------------------------------------------------------------------
  922.   def command_shutdown
  923.     # 演奏确定 SE
  924.     $game_system.se_play($data_system.decision_se)
  925.     # BGM、BGS、ME 的淡入淡出
  926.     Audio.bgm_fade(800)
  927.     Audio.bgs_fade(800)
  928.     Audio.me_fade(800)
  929.     # 退出
  930.     tempBitmap = Sprite.new
  931.     tempBitmap.bitmap = Bitmap.new($width,$height)
  932.     tempBitmap.bitmap.fill_rect(0, 0, $width, $height, Color.new(0,0,0,255))
  933.     tempBitmap.opacity = 0
  934.     for i in 0..20
  935.       tempBitmap.opacity+=14
  936.       Graphics.update
  937.     end
  938.     $scene = nil
  939.   end
  940.   #--------------------------------------------------------------------------
  941.   # ● 战斗测试
  942.   #--------------------------------------------------------------------------
  943.   def battle_test
  944.     # 载入数据库 (战斗测试用)
  945.     $data_actors        = load_data("Data/BT_Actors.rxdata")
  946.     $data_classes       = load_data("Data/BT_Classes.rxdata")
  947.     $data_skills        = load_data("Data/BT_Skills.rxdata")
  948.     $data_items         = load_data("Data/BT_Items.rxdata")
  949.     $data_weapons       = load_data("Data/BT_Weapons.rxdata")
  950.     $data_armors        = load_data("Data/BT_Armors.rxdata")
  951.     $data_enemies       = load_data("Data/BT_Enemies.rxdata")
  952.     $data_troops        = load_data("Data/BT_Troops.rxdata")
  953.     $data_states        = load_data("Data/BT_States.rxdata")
  954.     $data_animations    = load_data("Data/BT_Animations.rxdata")
  955.     $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
  956.     $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
  957.     $data_system        = load_data("Data/BT_System.rxdata")
  958.     # 重置测量游戏时间用的画面计数器
  959.     Graphics.frame_count = 0
  960.     # 生成各种游戏对像
  961.     $game_temp          = Game_Temp.new
  962.     $game_system        = Game_System.new
  963.     $game_switches      = Game_Switches.new
  964.     $game_variables     = Game_Variables.new
  965.     $game_self_switches = Game_SelfSwitches.new
  966.     $game_screen        = Game_Screen.new
  967.     $game_actors        = Game_Actors.new
  968.     $game_party         = Game_Party.new
  969.     $game_troop         = Game_Troop.new
  970.     $game_map           = Game_Map.new
  971.     $game_player        = Game_Player.new
  972.     # 设置战斗测试用同伴
  973.     $game_party.setup_battle_test_members
  974.     # 设置队伍 ID、可以逃走标志、战斗背景
  975.     $game_temp.battle_troop_id = $data_system.test_troop_id
  976.     $game_temp.battle_can_escape = true
  977.     $game_map.battleback_name = $data_system.battleback_name
  978.     # 演奏战斗开始 BGM
  979.     $game_system.se_play($data_system.battle_start_se)
  980.     # 演奏战斗 BGM
  981.     $game_system.bgm_play($game_system.battle_bgm)
  982.     # 切换到战斗画面
  983.     $scene = Scene_Battle.new
  984.   end
  985. end
  986. #==============================================================================
  987. # ■ Scene_Map
  988. #------------------------------------------------------------------------------
  989. #  处理地图画面的类。
  990. #==============================================================================

  991. class Scene_Map
  992.   #--------------------------------------------------------------------------
  993.   # ● 主处理
  994.   #--------------------------------------------------------------------------
  995.   def main
  996.     # 生成活动块
  997.     @spriteset = Spriteset_Map.new
  998.     # 生成信息窗口
  999.     @message_window = Window_Message.new
  1000.     tempBitmap = Sprite.new
  1001.     tempBitmap.bitmap = Bitmap.new($width,$height)
  1002.     tempBitmap.bitmap.fill_rect(0, 0, $width, $height, Color.new(0,0,0,255))
  1003.      # 执行过渡
  1004.     Graphics.transition(0)
  1005.     for i in 0..10
  1006.       tempBitmap.opacity-=25
  1007.       Graphics.update
  1008.     end
  1009.     tempBitmap.bitmap.dispose
  1010.     tempBitmap.dispose
  1011.     # 主循环
  1012.     loop do
  1013.       # 刷新游戏画面
  1014.       Graphics.update
  1015.       # 刷新输入信息
  1016.       Input.update
  1017.       # 刷新画面
  1018.       update
  1019.       # 如果画面切换的话就中断循环
  1020.       if $scene != self
  1021.         break
  1022.       end
  1023.     end
  1024.     # 标题画面切换中的情况下
  1025.     if $scene.is_a?(Scene_Title)
  1026.       @message_window.dispose
  1027.       tempBitmap = Sprite.new
  1028.       tempBitmap.bitmap = Bitmap.new($width,$height)
  1029.       tempBitmap.bitmap.fill_rect(0, 0, $width, $height, Color.new(0,0,0,255))
  1030.       tempBitmap.opacity = 0
  1031.       for i in 0..25
  1032.         tempBitmap.opacity +=11
  1033.         Graphics.update
  1034.       end
  1035.       tempBitmap.bitmap.dispose
  1036.       tempBitmap.dispose
  1037.       Graphics.transition(0)
  1038.       @spriteset.dispose
  1039.     else
  1040.       @message_window.dispose
  1041.       @spriteset.dispose
  1042.     end
  1043.   end
  1044.   #--------------------------------------------------------------------------
  1045.   # ● 刷新画面
  1046.   #--------------------------------------------------------------------------
  1047.   def update
  1048.     # 循环
  1049.     loop do
  1050.       # 按照地图、实例、主角的顺序刷新
  1051.       # (本更新顺序不会在的满足事件的执行条件下成为给予角色瞬间移动
  1052.       #  的机会的重要因素)
  1053.       $game_map.update
  1054.       $game_system.map_interpreter.update
  1055.       $game_player.update
  1056.       # 系统 (计时器)、画面刷新
  1057.       $game_system.update
  1058.       $game_screen.update
  1059.       # 如果主角在场所移动中就中断循环
  1060.       unless $game_temp.player_transferring
  1061.         break
  1062.       end
  1063.       # 执行场所移动
  1064.       transfer_player
  1065.       # 处理过渡中的情况下、中断循环
  1066.       if $game_temp.transition_processing
  1067.         break
  1068.       end
  1069.     end
  1070.     # 刷新活动块
  1071.     @spriteset.update
  1072.     # 刷新信息窗口
  1073.     @message_window.update
  1074.     # 游戏结束的情况下
  1075.     if $game_temp.gameover
  1076.       # 切换的游戏结束画面
  1077.       $scene = Scene_Gameover.new
  1078.       return
  1079.     end
  1080.     # 返回标题画面的情况下
  1081.     if $game_temp.to_title
  1082.       # 切换到标题画面
  1083.       $scene = Scene_Title.new
  1084.       return
  1085.     end
  1086.     # 处理过渡中的情况下
  1087.     if $game_temp.transition_processing
  1088.       # 清除过渡处理中标志
  1089.       $game_temp.transition_processing = false
  1090.       # 执行过渡
  1091.       Graphics.transition(0)
  1092.     end
  1093.     # 显示信息窗口中的情况下
  1094.     if $game_temp.message_window_showing
  1095.       return
  1096.     end
  1097.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  1098.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  1099.       # 不是在事件执行中或者禁止遇敌中
  1100.       unless $game_system.map_interpreter.running? or
  1101.              $game_system.encounter_disabled
  1102.         # 确定队伍
  1103.         n = rand($game_map.encounter_list.size)
  1104.         troop_id = $game_map.encounter_list[n]
  1105.         # 队伍有效的话
  1106.         if $data_troops[troop_id] != nil
  1107.           # 设置调用战斗标志
  1108.           $game_temp.battle_calling = true
  1109.           $game_temp.battle_troop_id = troop_id
  1110.           $game_temp.battle_can_escape = true
  1111.           $game_temp.battle_can_lose = false
  1112.           $game_temp.battle_proc = nil
  1113.         end
  1114.       end
  1115.     end
  1116.     # 按下 B 键的情况下
  1117.     if Input.trigger?(Input::B)
  1118.       # 不是在事件执行中或菜单禁止中
  1119.       unless $game_system.map_interpreter.running? or
  1120.              $game_system.menu_disabled
  1121.         # 设置菜单调用标志以及 SE 演奏
  1122.         $game_temp.menu_calling = true
  1123.         $game_temp.menu_beep = true
  1124.       end
  1125.     end
  1126.     # 调试模式为 ON 并且按下 F9 键的情况下
  1127.     if $DEBUG and Input.press?(Input::F9)
  1128.       # 设置调用调试标志
  1129.       $game_temp.debug_calling = true
  1130.     end
  1131.     # 不在主角移动中的情况下
  1132.     unless $game_player.moving?
  1133.       # 执行各种画面的调用
  1134.       if $game_temp.battle_calling
  1135.         call_battle
  1136.       elsif $game_temp.shop_calling
  1137.         call_shop
  1138.       elsif $game_temp.name_calling
  1139.         call_name
  1140.       elsif $game_temp.menu_calling
  1141.         call_menu
  1142.       elsif $game_temp.save_calling
  1143.         call_save
  1144.       elsif $game_temp.debug_calling
  1145.         call_debug
  1146.       end
  1147.     end
  1148.   end
  1149.   #--------------------------------------------------------------------------
  1150.   # ● 调用战斗
  1151.   #--------------------------------------------------------------------------
  1152.   def call_battle
  1153.     # 清除战斗调用标志
  1154.     $game_temp.battle_calling = false
  1155.     # 清除菜单调用标志
  1156.     $game_temp.menu_calling = false
  1157.     $game_temp.menu_beep = false
  1158.     # 生成遇敌计数
  1159.     $game_player.make_encounter_count
  1160.     # 记忆地图 BGM 、停止 BGM
  1161.     $game_temp.map_bgm = $game_system.playing_bgm
  1162.     $game_system.bgm_stop
  1163.     # 演奏战斗开始 SE
  1164.     $game_system.se_play($data_system.battle_start_se)
  1165.     # 演奏战斗 BGM
  1166.     $game_system.bgm_play($game_system.battle_bgm)
  1167.     # 矫正主角姿势
  1168.     $game_player.straighten
  1169.     # 切换到战斗画面
  1170.     $scene = Scene_Battle.new
  1171.   end
  1172.   #--------------------------------------------------------------------------
  1173.   # ● 调用商店
  1174.   #--------------------------------------------------------------------------
  1175.   def call_shop
  1176.     # 清除商店调用标志
  1177.     $game_temp.shop_calling = false
  1178.     # 矫正主角姿势
  1179.     $game_player.straighten
  1180.     # 切换到商店画面
  1181.     $scene = Scene_Shop.new
  1182.   end
  1183.   #--------------------------------------------------------------------------
  1184.   # ● 调用名称输入
  1185.   #--------------------------------------------------------------------------
  1186.   def call_name
  1187.     # 清除商店调用名称输入标志
  1188.     $game_temp.name_calling = false
  1189.     # 矫正主角姿势
  1190.     $game_player.straighten
  1191.     # 切换到名称输入画面
  1192.     $scene = Scene_Name.new
  1193.   end
  1194.   #--------------------------------------------------------------------------
  1195.   # ● 调用菜单
  1196.   #--------------------------------------------------------------------------
  1197.   def call_menu
  1198.     # 清除商店调用菜单标志
  1199.     $game_temp.menu_calling = false
  1200.     # 已经设置了菜单 SE 演奏标志的情况下
  1201.     if $game_temp.menu_beep
  1202.       # 演奏确定 SE
  1203.       $game_system.se_play($data_system.decision_se)
  1204.       # 清除菜单演奏 SE 标志
  1205.       $game_temp.menu_beep = false
  1206.     end
  1207.     # 矫正主角姿势
  1208.     $game_player.straighten
  1209.     # 切换到菜单画面
  1210.     $scene = Scene_Menu.new
  1211.   end
  1212.   #--------------------------------------------------------------------------
  1213.   # ● 调用存档
  1214.   #--------------------------------------------------------------------------
  1215.   def call_save
  1216.     # 矫正主角姿势
  1217.     $game_player.straighten
  1218.     # 切换到存档画面
  1219.     $scene = Scene_Save.new
  1220.   end
  1221.   #--------------------------------------------------------------------------
  1222.   # ● 调用调试
  1223.   #--------------------------------------------------------------------------
  1224.   def call_debug
  1225.     # 清除商店调用调试标志
  1226.     $game_temp.debug_calling = false
  1227.     # 演奏确定 SE
  1228.     $game_system.se_play($data_system.decision_se)
  1229.     # 矫正主角姿势
  1230.     $game_player.straighten
  1231.     # 切换到调试画面
  1232.     $scene = Scene_Debug.new
  1233.   end
  1234.   #--------------------------------------------------------------------------
  1235.   # ● 主角的场所移动
  1236.   #--------------------------------------------------------------------------
  1237.   def transfer_player
  1238.     # 清除主角场所移动调试标志
  1239.     $game_temp.player_transferring = false
  1240.     # 移动目标与现在的地图有差异的情况下
  1241.     if $game_map.map_id != $game_temp.player_new_map_id
  1242.       # 设置新地图
  1243.       $game_map.setup($game_temp.player_new_map_id)
  1244.     end
  1245.     # 设置主角位置
  1246.     $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
  1247.     # 设置主角朝向
  1248.     case $game_temp.player_new_direction
  1249.     when 2  # 下
  1250.       $game_player.turn_down
  1251.     when 4  # 左
  1252.       $game_player.turn_left
  1253.     when 6  # 右
  1254.       $game_player.turn_right
  1255.     when 8  # 上
  1256.       $game_player.turn_up
  1257.     end
  1258.     # 矫正主角姿势
  1259.     $game_player.straighten
  1260.     # 刷新地图 (执行并行事件)
  1261.     $game_map.update
  1262.     # 在生成活动块
  1263.     @spriteset.dispose
  1264.     @spriteset = Spriteset_Map.new
  1265.     # 处理过渡中的情况下
  1266.     if $game_temp.transition_processing
  1267.       # 清除过渡处理中标志
  1268.       $game_temp.transition_processing = false
  1269.       # 执行过渡
  1270.       $_t_Bitmap=Sprite.new
  1271.       $_t_Bitmap.bitmap = Bitmap.new($width,$height)
  1272.       $_t_Bitmap.bitmap.fill_rect(0,0,$width,$height,Color.new(0,0,0,255))
  1273.       Graphics.transition(0)
  1274.       for i in 0..10
  1275.         $_t_Bitmap.opacity-=26
  1276.         Graphics.update
  1277.       end
  1278.       $_t_Bitmap.bitmap.dispose
  1279.       $_t_Bitmap.dispose
  1280.     end
  1281.     # 执行地图设置的 BGM、BGS 的自动切换
  1282.     $game_map.autoplay
  1283.     # 设置画面
  1284.     Graphics.frame_reset
  1285.     # 刷新输入信息
  1286.     Input.update
  1287.   end
  1288. end
  1289. #==============================================================================
  1290. # ■ Interpreter (分割定义 5)
  1291. #------------------------------------------------------------------------------
  1292. #  执行事件命令的注释器。本类在 Game_System 类
  1293. # 和 Game_Event 类的内部使用。
  1294. #==============================================================================

  1295. class Interpreter
  1296.   #--------------------------------------------------------------------------
  1297.   # ● 场所移动
  1298.   #--------------------------------------------------------------------------
  1299.   def command_201
  1300.     # 战斗中的情况
  1301.     if $game_temp.in_battle
  1302.       # 继续
  1303.       return true
  1304.     end
  1305.     # 场所移动中、信息显示中、过渡处理中的情况下
  1306.     if $game_temp.player_transferring or
  1307.        $game_temp.message_window_showing or
  1308.        $game_temp.transition_processing
  1309.       # 结束
  1310.       return false
  1311.     end
  1312.     # 设置场所移动标志
  1313.     $game_temp.player_transferring = true
  1314.     # 指定方法为 [直接指定] 的情况下
  1315.     if @parameters[0] == 0
  1316.       # 设置主角的移动目标
  1317.       $game_temp.player_new_map_id = @parameters[1]
  1318.       $game_temp.player_new_x = @parameters[2]
  1319.       $game_temp.player_new_y = @parameters[3]
  1320.       $game_temp.player_new_direction = @parameters[4]
  1321.     # 指定方法为 [使用变量指定] 的情况下
  1322.     else
  1323.       # 设置主角的移动目标
  1324.       $game_temp.player_new_map_id = $game_variables[@parameters[1]]
  1325.       $game_temp.player_new_x = $game_variables[@parameters[2]]
  1326.       $game_temp.player_new_y = $game_variables[@parameters[3]]
  1327.       $game_temp.player_new_direction = @parameters[4]
  1328.     end
  1329.     # 推进索引
  1330.     @index += 1
  1331.     # 有淡入淡出的情况下
  1332.     if @parameters[5] == 0
  1333.       # 准备过渡   
  1334.       tempBitmap = Sprite.new
  1335.       tempBitmap.bitmap = Bitmap.new($width,$height)
  1336.       tempBitmap.bitmap.fill_rect(0, 0, $width, $height, Color.new(0,0,0,255))
  1337.       tempBitmap.opacity = 0
  1338.       for i in 0..10
  1339.         tempBitmap.opacity+=26
  1340.         Graphics.update
  1341.       end
  1342.       Graphics.freeze
  1343.       tempBitmap.bitmap.dispose
  1344.       tempBitmap.dispose
  1345.       # 设置过渡处理中标志
  1346.       $game_temp.transition_processing = true
  1347.       $game_temp.transition_name = ""
  1348.     end
  1349.     # 结束
  1350.     return false
  1351.   end
  1352.   #--------------------------------------------------------------------------
  1353.   # ● 设置事件位置
  1354.   #--------------------------------------------------------------------------
  1355.   def command_202
  1356.     # 战斗中的情况下
  1357.     if $game_temp.in_battle
  1358.       # 继续
  1359.       return true
  1360.     end
  1361.     # 获取角色
  1362.     character = get_character(@parameters[0])
  1363.     # 角色不存在的情况下
  1364.     if character == nil
  1365.       # 继续
  1366.       return true
  1367.     end
  1368.     # 指定方法为 [直接指定] 的情况下
  1369.     if @parameters[1] == 0
  1370.       # 设置角色的位置
  1371.       character.moveto(@parameters[2], @parameters[3])
  1372.     # 指定方法为 [使用变量指定] 的情况下
  1373.     elsif @parameters[1] == 1
  1374.       # 设置角色的位置
  1375.       character.moveto($game_variables[@parameters[2]],
  1376.         $game_variables[@parameters[3]])
  1377.     # 指定方法为 [与其它事件交换] 的情况下
  1378.     else
  1379.       old_x = character.x
  1380.       old_y = character.y
  1381.       character2 = get_character(@parameters[2])
  1382.       if character2 != nil
  1383.         character.moveto(character2.x, character2.y)
  1384.         character2.moveto(old_x, old_y)
  1385.       end
  1386.     end
  1387.     # 设置觉得的朝向
  1388.     case @parameters[4]
  1389.     when 8  # 上
  1390.       character.turn_up
  1391.     when 6  # 右
  1392.       character.turn_right
  1393.     when 2  # 下
  1394.       character.turn_down
  1395.     when 4  # 左
  1396.       character.turn_left
  1397.     end
  1398.     # 继续
  1399.     return true
  1400.   end
  1401.   #--------------------------------------------------------------------------
  1402.   # ● 地图的滚动
  1403.   #--------------------------------------------------------------------------
  1404.   def command_203
  1405.     # 战斗中的情况下
  1406.     if $game_temp.in_battle
  1407.       # 继续
  1408.       return true
  1409.     end
  1410.     # 已经在滚动中的情况下
  1411.     if $game_map.scrolling?
  1412.       # 结束
  1413.       return false
  1414.     end
  1415.     # 开始滚动
  1416.     $game_map.start_scroll(@parameters[0], @parameters[1], @parameters[2])
  1417.     # 继续
  1418.     return true
  1419.   end
  1420.   #--------------------------------------------------------------------------
  1421.   # ● 更改地图设置
  1422.   #--------------------------------------------------------------------------
  1423.   def command_204
  1424.     case @parameters[0]
  1425.     when 0  # 远景
  1426.       $game_map.panorama_name = @parameters[1]
  1427.       $game_map.panorama_hue = @parameters[2]
  1428.     when 1  # 雾
  1429.       $game_map.fog_name = @parameters[1]
  1430.       $game_map.fog_hue = @parameters[2]
  1431.       $game_map.fog_opacity = @parameters[3]
  1432.       $game_map.fog_blend_type = @parameters[4]
  1433.       $game_map.fog_zoom = @parameters[5]
  1434.       $game_map.fog_sx = @parameters[6]
  1435.       $game_map.fog_sy = @parameters[7]
  1436.     when 2  # 战斗背景
  1437.       $game_map.battleback_name = @parameters[1]
  1438.       $game_temp.battleback_name = @parameters[1]
  1439.     end
  1440.     # 继续
  1441.     return true
  1442.   end
  1443.   #--------------------------------------------------------------------------
  1444.   # ● 更改雾的色调
  1445.   #--------------------------------------------------------------------------
  1446.   def command_205
  1447.     # 开始更改色调
  1448.     $game_map.start_fog_tone_change(@parameters[0], @parameters[1] * 2)
  1449.     # 继续
  1450.     return true
  1451.   end
  1452.   #--------------------------------------------------------------------------
  1453.   # ● 更改雾的不透明度
  1454.   #--------------------------------------------------------------------------
  1455.   def command_206
  1456.     # 开始更改不透明度
  1457.     $game_map.start_fog_opacity_change(@parameters[0], @parameters[1] * 2)
  1458.     # 继续
  1459.     return true
  1460.   end
  1461.   #--------------------------------------------------------------------------
  1462.   # ● 显示动画
  1463.   #--------------------------------------------------------------------------
  1464.   def command_207
  1465.     # 获取角色
  1466.     character = get_character(@parameters[0])
  1467.     # 角色不存在的情况下
  1468.     if character == nil
  1469.       # 继续
  1470.       return true
  1471.     end
  1472.     # 设置动画 ID
  1473.     character.animation_id = @parameters[1]
  1474.     # 继续
  1475.     return true
  1476.   end
  1477.   #--------------------------------------------------------------------------
  1478.   # ● 更改透明状态
  1479.   #--------------------------------------------------------------------------
  1480.   def command_208
  1481.     # 设置主角的透明状态
  1482.     $game_player.transparent = (@parameters[0] == 0)
  1483.     # 继续
  1484.     return true
  1485.   end
  1486.   #--------------------------------------------------------------------------
  1487.   # ● 设置移动路线
  1488.   #--------------------------------------------------------------------------
  1489.   def command_209
  1490.     # 获取角色
  1491.     character = get_character(@parameters[0])
  1492.     # 角色不存在的情况下
  1493.     if character == nil
  1494.       # 继续
  1495.       return true
  1496.     end
  1497.     # 强制移动路线
  1498.     character.force_move_route(@parameters[1])
  1499.     # 继续
  1500.     return true
  1501.   end
  1502.   #--------------------------------------------------------------------------
  1503.   # ● 移动结束后等待
  1504.   #--------------------------------------------------------------------------
  1505.   def command_210
  1506.     # 如果不在战斗中
  1507.     unless $game_temp.in_battle
  1508.       # 设置移动结束后待机标志
  1509.       @move_route_waiting = true
  1510.     end
  1511.     # 继续
  1512.     return true
  1513.   end
  1514.   #--------------------------------------------------------------------------
  1515.   # ● 开始过渡
  1516.   #--------------------------------------------------------------------------
  1517.   def command_221
  1518.     # 显示信息窗口中的情况下
  1519.     if $game_temp.message_window_showing
  1520.       # 结束
  1521.       return false
  1522.     end
  1523.     # 准备过渡
  1524.     Graphics.freeze
  1525.     # 继续
  1526.     return true
  1527.   end
  1528.   #--------------------------------------------------------------------------
  1529.   # ● 执行过渡
  1530.   #--------------------------------------------------------------------------
  1531.   def command_222
  1532.     # 已经设置了过渡处理中标志的情况下
  1533.     if $game_temp.transition_processing
  1534.       # 结束
  1535.       return false
  1536.     end
  1537.     # 设置过渡处理中标志
  1538.     $game_temp.transition_processing = true
  1539.     $game_temp.transition_name = @parameters[0]
  1540.     # 推进索引
  1541.     @index += 1
  1542.     # 结束
  1543.     return false
  1544.   end
  1545.   #--------------------------------------------------------------------------
  1546.   # ● 更改画面色调
  1547.   #--------------------------------------------------------------------------
  1548.   def command_223
  1549.     # 开始更改色调
  1550.     $game_screen.start_tone_change(@parameters[0], @parameters[1] * 2)
  1551.     # 继续
  1552.     return true
  1553.   end
  1554.   #--------------------------------------------------------------------------
  1555.   # ● 画面闪烁
  1556.   #--------------------------------------------------------------------------
  1557.   def command_224
  1558.     # 开始闪烁
  1559.     $game_screen.start_flash(@parameters[0], @parameters[1] * 2)
  1560.     # 继续
  1561.     return true
  1562.   end
  1563.   #--------------------------------------------------------------------------
  1564.   # ● 画面震动
  1565.   #--------------------------------------------------------------------------
  1566.   def command_225
  1567.     # 震动开始
  1568.     $game_screen.start_shake(@parameters[0], @parameters[1],
  1569.       @parameters[2] * 2)
  1570.     # 继续
  1571.     return true
  1572.   end
  1573.   #--------------------------------------------------------------------------
  1574.   # ● 显示图片
  1575.   #--------------------------------------------------------------------------
  1576.   def command_231
  1577.     # 获取图片编号
  1578.     number = @parameters[0] + ($game_temp.in_battle ? 50 : 0)
  1579.     # 指定方法为 [直接指定] 的情况下
  1580.     if @parameters[3] == 0
  1581.       x = @parameters[4]
  1582.       y = @parameters[5]
  1583.     # 指定方法为 [使用变量指定] 的情况下
  1584.     else
  1585.       x = $game_variables[@parameters[4]]
  1586.       y = $game_variables[@parameters[5]]
  1587.     end
  1588.     # 显示图片
  1589.     $game_screen.pictures[number].show(@parameters[1], @parameters[2],
  1590.       x, y, @parameters[6], @parameters[7], @parameters[8], @parameters[9])
  1591.     # 继续
  1592.     return true
  1593.   end
  1594.   #--------------------------------------------------------------------------
  1595.   # ● 移动图片
  1596.   #--------------------------------------------------------------------------
  1597.   def command_232
  1598.     # 获取图片编号
  1599.     number = @parameters[0] + ($game_temp.in_battle ? 50 : 0)
  1600.     # 指定方法为 [直接指定] 的情况下
  1601.     if @parameters[3] == 0
  1602.       x = @parameters[4]
  1603.       y = @parameters[5]
  1604.     # 指定方法为 [使用变量指定] 的情况下
  1605.     else
  1606.       x = $game_variables[@parameters[4]]
  1607.       y = $game_variables[@parameters[5]]
  1608.     end
  1609.     # 移动图片
  1610.     $game_screen.pictures[number].move(@parameters[1] * 2, @parameters[2],
  1611.       x, y, @parameters[6], @parameters[7], @parameters[8], @parameters[9])
  1612.     # 继续
  1613.     return true
  1614.   end
  1615.   #--------------------------------------------------------------------------
  1616.   # ● 旋转图片
  1617.   #--------------------------------------------------------------------------
  1618.   def command_233
  1619.     # 获取图片编号
  1620.     number = @parameters[0] + ($game_temp.in_battle ? 50 : 0)
  1621.     # 设置旋转速度
  1622.     $game_screen.pictures[number].rotate(@parameters[1])
  1623.     # 继续
  1624.     return true
  1625.   end
  1626.   #--------------------------------------------------------------------------
  1627.   # ● 更改图片色调
  1628.   #--------------------------------------------------------------------------
  1629.   def command_234
  1630.     # 获取图片编号
  1631.     number = @parameters[0] + ($game_temp.in_battle ? 50 : 0)
  1632.     # 开始更改色调
  1633.     $game_screen.pictures[number].start_tone_change(@parameters[1],
  1634.       @parameters[2] * 2)
  1635.     # 继续
  1636.     return true
  1637.   end
  1638.   #--------------------------------------------------------------------------
  1639.   # ● 删除图片
  1640.   #--------------------------------------------------------------------------
  1641.   def command_235
  1642.     # 获取图片编号
  1643.     number = @parameters[0] + ($game_temp.in_battle ? 50 : 0)
  1644.     # 删除图片
  1645.     $game_screen.pictures[number].erase
  1646.     # 继续
  1647.     return true
  1648.   end
  1649.   #--------------------------------------------------------------------------
  1650.   # ● 天候设置
  1651.   #--------------------------------------------------------------------------
  1652.   def command_236
  1653.     # 设置天候
  1654.     $game_screen.weather(@parameters[0], @parameters[1], @parameters[2])
  1655.     # 继续
  1656.     return true
  1657.   end
  1658.   #--------------------------------------------------------------------------
  1659.   # ● 演奏 BGM
  1660.   #--------------------------------------------------------------------------
  1661.   def command_241
  1662.     # 演奏 BGM
  1663.     $game_system.bgm_play(@parameters[0])
  1664.     # 继续
  1665.     return true
  1666.   end
  1667.   #--------------------------------------------------------------------------
  1668.   # ● BGM 的淡入淡出
  1669.   #--------------------------------------------------------------------------
  1670.   def command_242
  1671.     # 淡入淡出 BGM
  1672.     $game_system.bgm_fade(@parameters[0])
  1673.     # 继续
  1674.     return true
  1675.   end
  1676.   #--------------------------------------------------------------------------
  1677.   # ● 演奏 BGS
  1678.   #--------------------------------------------------------------------------
  1679.   def command_245
  1680.     # 演奏 BGS
  1681.     $game_system.bgs_play(@parameters[0])
  1682.     # 继续
  1683.     return true
  1684.   end
  1685.   #--------------------------------------------------------------------------
  1686.   # ● BGS 的淡入淡出
  1687.   #--------------------------------------------------------------------------
  1688.   def command_246
  1689.     # 淡入淡出 BGS
  1690.     $game_system.bgs_fade(@parameters[0])
  1691.     # 继续
  1692.     return true
  1693.   end
  1694.   #--------------------------------------------------------------------------
  1695.   # ● 记忆 BGM / BGS
  1696.   #--------------------------------------------------------------------------
  1697.   def command_247
  1698.     # 记忆 BGM / BGS
  1699.     $game_system.bgm_memorize
  1700.     $game_system.bgs_memorize
  1701.     # 继续
  1702.     return true
  1703.   end
  1704.   #--------------------------------------------------------------------------
  1705.   # ● 还原 BGM / BGS
  1706.   #--------------------------------------------------------------------------
  1707.   def command_248
  1708.     # 还原 BGM / BGS
  1709.     $game_system.bgm_restore
  1710.     $game_system.bgs_restore
  1711.     # 继续
  1712.     return true
  1713.   end
  1714.   #--------------------------------------------------------------------------
  1715.   # ● 演奏 ME
  1716.   #--------------------------------------------------------------------------
  1717.   def command_249
  1718.     # 演奏 ME
  1719.     $game_system.me_play(@parameters[0])
  1720.     # 继续
  1721.     return true
  1722.   end
  1723.   #--------------------------------------------------------------------------
  1724.   # ● 演奏 SE
  1725.   #--------------------------------------------------------------------------
  1726.   def command_250
  1727.     # 演奏 SE
  1728.     $game_system.se_play(@parameters[0])
  1729.     # 继续
  1730.     return true
  1731.   end
  1732.   #--------------------------------------------------------------------------
  1733.   # ● 停止 SE
  1734.   #--------------------------------------------------------------------------
  1735.   def command_251
  1736.     # 停止 SE
  1737.     Audio.se_stop
  1738.     # 继续
  1739.     return true
  1740.   end
  1741. end
  1742. #==============================================================================
  1743. # ■ Game_Enemy
  1744. #------------------------------------------------------------------------------
  1745. #  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的
  1746. # 内部使用。
  1747. #==============================================================================

  1748. class Game_Enemy < Game_Battler
  1749.   #--------------------------------------------------------------------------
  1750.   # ● 初始化对像
  1751.   #     troop_id     : 循环 ID
  1752.   #     member_index : 循环成员的索引
  1753.   #--------------------------------------------------------------------------
  1754.   def initialize(troop_id, member_index)
  1755.     super()
  1756.     @troop_id = troop_id
  1757.     @member_index = member_index
  1758.     troop = $data_troops[@troop_id]
  1759.     @enemy_id = troop.members[@member_index].enemy_id
  1760.     enemy = $data_enemies[@enemy_id]
  1761.     @battler_name = enemy.battler_name
  1762.     @battler_hue = enemy.battler_hue
  1763.     @hp = maxhp
  1764.     @sp = maxsp
  1765.     @hidden = troop.members[@member_index].hidden
  1766.     @immortal = troop.members[@member_index].immortal
  1767.   end
  1768.   #--------------------------------------------------------------------------
  1769.   # ● 获取敌人 ID
  1770.   #--------------------------------------------------------------------------
  1771.   def id
  1772.     return @enemy_id
  1773.   end
  1774.   #--------------------------------------------------------------------------
  1775.   # ● 获取索引
  1776.   #--------------------------------------------------------------------------
  1777.   def index
  1778.     return @member_index
  1779.   end
  1780.   #--------------------------------------------------------------------------
  1781.   # ● 获取名称
  1782.   #--------------------------------------------------------------------------
  1783.   def name
  1784.     return $data_enemies[@enemy_id].name
  1785.   end
  1786.   #--------------------------------------------------------------------------
  1787.   # ● 获取基本 MaxHP
  1788.   #--------------------------------------------------------------------------
  1789.   def base_maxhp
  1790.     return $data_enemies[@enemy_id].maxhp
  1791.   end
  1792.   #--------------------------------------------------------------------------
  1793.   # ● 获取基本 MaxSP
  1794.   #--------------------------------------------------------------------------
  1795.   def base_maxsp
  1796.     return $data_enemies[@enemy_id].maxsp
  1797.   end
  1798.   #--------------------------------------------------------------------------
  1799.   # ● 获取基本力量
  1800.   #--------------------------------------------------------------------------
  1801.   def base_str
  1802.     return $data_enemies[@enemy_id].str
  1803.   end
  1804.   #--------------------------------------------------------------------------
  1805.   # ● 获取基本灵巧
  1806.   #--------------------------------------------------------------------------
  1807.   def base_dex
  1808.     return $data_enemies[@enemy_id].dex
  1809.   end
  1810.   #--------------------------------------------------------------------------
  1811.   # ● 获取基本速度
  1812.   #--------------------------------------------------------------------------
  1813.   def base_agi
  1814.     return $data_enemies[@enemy_id].agi
  1815.   end
  1816.   #--------------------------------------------------------------------------
  1817.   # ● 获取基本魔力
  1818.   #--------------------------------------------------------------------------
  1819.   def base_int
  1820.     return $data_enemies[@enemy_id].int
  1821.   end
  1822.   #--------------------------------------------------------------------------
  1823.   # ● 获取基本攻击力
  1824.   #--------------------------------------------------------------------------
  1825.   def base_atk
  1826.     return $data_enemies[@enemy_id].atk
  1827.   end
  1828.   #--------------------------------------------------------------------------
  1829.   # ● 获取基本物理防御
  1830.   #--------------------------------------------------------------------------
  1831.   def base_pdef
  1832.     return $data_enemies[@enemy_id].pdef
  1833.   end
  1834.   #--------------------------------------------------------------------------
  1835.   # ● 获取基本魔法防御
  1836.   #--------------------------------------------------------------------------
  1837.   def base_mdef
  1838.     return $data_enemies[@enemy_id].mdef
  1839.   end
  1840.   #--------------------------------------------------------------------------
  1841.   # ● 获取基本回避修正
  1842.   #--------------------------------------------------------------------------
  1843.   def base_eva
  1844.     return $data_enemies[@enemy_id].eva
  1845.   end
  1846.   #--------------------------------------------------------------------------
  1847.   # ● 普通攻击 获取攻击方动画 ID
  1848.   #--------------------------------------------------------------------------
  1849.   def animation1_id
  1850.     return $data_enemies[@enemy_id].animation1_id
  1851.   end
  1852.   #--------------------------------------------------------------------------
  1853.   # ● 普通攻击 获取对像方动画 ID
  1854.   #--------------------------------------------------------------------------
  1855.   def animation2_id
  1856.     return $data_enemies[@enemy_id].animation2_id
  1857.   end
  1858.   #--------------------------------------------------------------------------
  1859.   # ● 获取属性修正值
  1860.   #     element_id : 属性 ID
  1861.   #--------------------------------------------------------------------------
  1862.   def element_rate(element_id)
  1863.     # 获取对应属性有效度的数值
  1864.     table = [0,200,150,100,50,0,-100]
  1865.     result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
  1866.     # 状态能防御本属性的情况下效果减半
  1867.     for i in @states
  1868.       if $data_states[i].guard_element_set.include?(element_id)
  1869.         result /= 2
  1870.       end
  1871.     end
  1872.     # 过程结束
  1873.     return result
  1874.   end
  1875.   #--------------------------------------------------------------------------
  1876.   # ● 获取属性有效度
  1877.   #--------------------------------------------------------------------------
  1878.   def state_ranks
  1879.     return $data_enemies[@enemy_id].state_ranks
  1880.   end
  1881.   #--------------------------------------------------------------------------
  1882.   # ● 属性防御判定
  1883.   #     state_id : 状态 ID
  1884.   #--------------------------------------------------------------------------
  1885.   def state_guard?(state_id)
  1886.     return false
  1887.   end
  1888.   #--------------------------------------------------------------------------
  1889.   # ● 获取普通攻击属性
  1890.   #--------------------------------------------------------------------------
  1891.   def element_set
  1892.     return []
  1893.   end
  1894.   #--------------------------------------------------------------------------
  1895.   # ● 获取普通攻击的状态变化 (+)
  1896.   #--------------------------------------------------------------------------
  1897.   def plus_state_set
  1898.     return []
  1899.   end
  1900.   #--------------------------------------------------------------------------
  1901.   # ● 获取普通攻击的状态变化 (-)
  1902.   #--------------------------------------------------------------------------
  1903.   def minus_state_set
  1904.     return []
  1905.   end
  1906.   #--------------------------------------------------------------------------
  1907.   # ● 获取行动
  1908.   #--------------------------------------------------------------------------
  1909.   def actions
  1910.     return $data_enemies[@enemy_id].actions
  1911.   end
  1912.   #--------------------------------------------------------------------------
  1913.   # ● 获取 EXP
  1914.   #--------------------------------------------------------------------------
  1915.   def exp
  1916.     return $data_enemies[@enemy_id].exp
  1917.   end
  1918.   #--------------------------------------------------------------------------
  1919.   # ● 获取金钱
  1920.   #--------------------------------------------------------------------------
  1921.   def gold
  1922.     return $data_enemies[@enemy_id].gold
  1923.   end
  1924.   #--------------------------------------------------------------------------
  1925.   # ● 获取物品 ID
  1926.   #--------------------------------------------------------------------------
  1927.   def item_id
  1928.     return $data_enemies[@enemy_id].item_id
  1929.   end
  1930.   #--------------------------------------------------------------------------
  1931.   # ● 获取武器 ID
  1932.   #--------------------------------------------------------------------------
  1933.   def weapon_id
  1934.     return $data_enemies[@enemy_id].weapon_id
  1935.   end
  1936.   #--------------------------------------------------------------------------
  1937.   # ● 获取放具 ID
  1938.   #--------------------------------------------------------------------------
  1939.   def armor_id
  1940.     return $data_enemies[@enemy_id].armor_id
  1941.   end
  1942.   #--------------------------------------------------------------------------
  1943.   # ● 获取宝物出现率
  1944.   #--------------------------------------------------------------------------
  1945.   def treasure_prob
  1946.     return $data_enemies[@enemy_id].treasure_prob
  1947.   end
  1948.   #--------------------------------------------------------------------------
  1949.   # ● 取得战斗画面 X 坐标
  1950.   #--------------------------------------------------------------------------
  1951.   def screen_x
  1952.     return $data_troops[@troop_id].members[@member_index].x*$width/640
  1953.   end
  1954.   #--------------------------------------------------------------------------
  1955.   # ● 取得战斗画面 Y 坐标
  1956.   #--------------------------------------------------------------------------
  1957.   def screen_y
  1958.     return $data_troops[@troop_id].members[@member_index].y*$height/480
  1959.   end
  1960.   #--------------------------------------------------------------------------
  1961.   # ● 取得战斗画面 Z 坐标
  1962.   #--------------------------------------------------------------------------
  1963.   def screen_z
  1964.     return screen_y
  1965.   end
  1966.   #--------------------------------------------------------------------------
  1967.   # ● 逃跑
  1968.   #--------------------------------------------------------------------------
  1969.   def escape
  1970.     # 设置击中标志
  1971.     @hidden = true
  1972.     # 清除当前行动
  1973.     self.current_action.clear
  1974.   end
  1975.   #--------------------------------------------------------------------------
  1976.   # ● 变身
  1977.   #     enemy_id : 变身为的敌人 ID
  1978.   #--------------------------------------------------------------------------
  1979.   def transform(enemy_id)
  1980.     # 更改敌人 ID
  1981.     @enemy_id = enemy_id
  1982.     # 更改战斗图形
  1983.     @battler_name = $data_enemies[@enemy_id].battler_name
  1984.     @battler_hue = $data_enemies[@enemy_id].battler_hue
  1985.     # 在生成行动
  1986.     make_action
  1987.   end
  1988.   #--------------------------------------------------------------------------
  1989.   # ● 生成行动
  1990.   #--------------------------------------------------------------------------
  1991.   def make_action
  1992.     # 清除当前行动
  1993.     self.current_action.clear
  1994.     # 无法行动的情况
  1995.     unless self.movable?
  1996.       # 过程结束
  1997.       return
  1998.     end
  1999.     # 抽取现在有效的行动
  2000.     available_actions = []
  2001.     rating_max = 0
  2002.     for action in self.actions
  2003.       # 确认回合条件
  2004.       n = $game_temp.battle_turn
  2005.       a = action.condition_turn_a
  2006.       b = action.condition_turn_b
  2007.       if (b == 0 and n != a) or
  2008.          (b > 0 and (n < 1 or n < a or n % b != a % b))
  2009.         next
  2010.       end
  2011.       # 确认 HP 条件
  2012.       if self.hp * 100.0 / self.maxhp > action.condition_hp
  2013.         next
  2014.       end
  2015.       # 确认等级条件
  2016.       if $game_party.max_level < action.condition_level
  2017.         next
  2018.       end
  2019.       # 确认开关条件
  2020.       switch_id = action.condition_switch_id
  2021.       if switch_id > 0 and $game_switches[switch_id] == false
  2022.         next
  2023.       end
  2024.       # 符合条件 : 添加本行动
  2025.       available_actions.push(action)
  2026.       if action.rating > rating_max
  2027.         rating_max = action.rating
  2028.       end
  2029.     end
  2030.     # 最大概率值作为 3 合计计算(0 除外)
  2031.     ratings_total = 0
  2032.     for action in available_actions
  2033.       if action.rating > rating_max - 3
  2034.         ratings_total += action.rating - (rating_max - 3)
  2035.       end
  2036.     end
  2037.     # 概率合计不为 0 的情况下
  2038.     if ratings_total > 0
  2039.       # 生成随机数
  2040.       value = rand(ratings_total)
  2041.       # 设置对应生成随机数的当前行动
  2042.       for action in available_actions
  2043.         if action.rating > rating_max - 3
  2044.           if value < action.rating - (rating_max - 3)
  2045.             self.current_action.kind = action.kind
  2046.             self.current_action.basic = action.basic
  2047.             self.current_action.skill_id = action.skill_id
  2048.             self.current_action.decide_random_target_for_enemy
  2049.             return
  2050.           else
  2051.             value -= action.rating - (rating_max - 3)
  2052.           end
  2053.         end
  2054.       end
  2055.     end
  2056.   end
  2057. end
  2058. #==============================================================================
  2059. # ■ Game_Map
  2060. #------------------------------------------------------------------------------
  2061. #  处理地图的类。包含卷动以及可以通行的判断功能。
  2062. # 本类的实例请参考 $game_map 。
  2063. #==============================================================================

  2064. class Game_Map
  2065.   #--------------------------------------------------------------------------
  2066.   # ● 定义实例变量
  2067.   #--------------------------------------------------------------------------
  2068.   attr_accessor :tileset_name             # 元件 文件名
  2069.   attr_accessor :autotile_names           # 自动元件 文件名
  2070.   attr_accessor :panorama_name            # 全景 文件名
  2071.   attr_accessor :panorama_hue             # 全景 色相
  2072.   attr_accessor :fog_name                 # 雾 文件名
  2073.   attr_accessor :fog_hue                  # 雾 色相
  2074.   attr_accessor :fog_opacity              # 雾 不透明度
  2075.   attr_accessor :fog_blend_type           # 雾 混合方式
  2076.   attr_accessor :fog_zoom                 # 雾 放大率
  2077.   attr_accessor :fog_sx                   # 雾 SX
  2078.   attr_accessor :fog_sy                   # 雾 SY
  2079.   attr_accessor :battleback_name          # 战斗背景 文件名
  2080.   attr_accessor :display_x                # 显示 X 坐标 * 128
  2081.   attr_accessor :display_y                # 显示 Y 坐标 * 128
  2082.   attr_accessor :need_refresh             # 刷新要求标志
  2083.   attr_reader   :passages                 # 通行表
  2084.   attr_reader   :priorities               # 优先表
  2085.   attr_reader   :terrain_tags             # 地形标记表
  2086.   attr_reader   :events                   # 事件
  2087.   attr_reader   :fog_ox                   # 雾 原点 X 坐标
  2088.   attr_reader   :fog_oy                   # 雾 原点 Y 坐标
  2089.   attr_reader   :fog_tone                 # 雾 色调
  2090.   #--------------------------------------------------------------------------
  2091.   # ● 初始化条件
  2092.   #--------------------------------------------------------------------------
  2093.   def initialize
  2094.     @map_id = 0
  2095.     @display_x = 0
  2096.     @display_y = 0
  2097.   end
  2098.   #--------------------------------------------------------------------------
  2099.   # ● 设置
  2100.   #     map_id : 地图 ID
  2101.   #--------------------------------------------------------------------------
  2102.   def setup(map_id)
  2103.     # 地图 ID 记录到 @map_id
  2104.     @map_id = map_id
  2105.     # 地图文件装载后、设置到 @map
  2106.     @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
  2107.     # 定义实例变量设置地图元件信息
  2108.     tileset = $data_tilesets[@map.tileset_id]
  2109.     @tileset_name = tileset.tileset_name
  2110.     @autotile_names = tileset.autotile_names
  2111.     @panorama_name = tileset.panorama_name
  2112.     @panorama_hue = tileset.panorama_hue
  2113.     @fog_name = tileset.fog_name
  2114.     @fog_hue = tileset.fog_hue
  2115.     @fog_opacity = tileset.fog_opacity
  2116.     @fog_blend_type = tileset.fog_blend_type
  2117.     @fog_zoom = tileset.fog_zoom
  2118.     @fog_sx = tileset.fog_sx
  2119.     @fog_sy = tileset.fog_sy
  2120.     @battleback_name = tileset.battleback_name
  2121.     @passages = tileset.passages
  2122.     @priorities = tileset.priorities
  2123.     @terrain_tags = tileset.terrain_tags
  2124.     # 初始化显示坐标
  2125.     @display_x = 0
  2126.     @display_y = 0
  2127.     # 清除刷新要求标志
  2128.     @need_refresh = false
  2129.     # 设置地图事件数据
  2130.     @events = {}
  2131.     for i in @map.events.keys
  2132.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  2133.     end
  2134.     # 设置公共事件数据
  2135.     @common_events = {}
  2136.     for i in 1...$data_common_events.size
  2137.       @common_events[i] = Game_CommonEvent.new(i)
  2138.     end
  2139.     # 初始化雾的各种信息
  2140.     @fog_ox = 0
  2141.     @fog_oy = 0
  2142.     @fog_tone = Tone.new(0, 0, 0, 0)
  2143.     @fog_tone_target = Tone.new(0, 0, 0, 0)
  2144.     @fog_tone_duration = 0
  2145.     @fog_opacity_duration = 0
  2146.     @fog_opacity_target = 0
  2147.     # 初始化滚动信息
  2148.     @scroll_direction = 2
  2149.     @scroll_rest = 0
  2150.     @scroll_speed = 4
  2151.   end
  2152.   #--------------------------------------------------------------------------
  2153.   # ● 获取地图 ID
  2154.   #--------------------------------------------------------------------------
  2155.   def map_id
  2156.     return @map_id
  2157.   end
  2158.   #--------------------------------------------------------------------------
  2159.   # ● 获取宽度
  2160.   #--------------------------------------------------------------------------
  2161.   def width
  2162.     return @map.width
  2163.   end
  2164.   #--------------------------------------------------------------------------
  2165.   # ● 获取高度
  2166.   #--------------------------------------------------------------------------
  2167.   def height
  2168.     return @map.height
  2169.   end
  2170.   #--------------------------------------------------------------------------
  2171.   # ● 获取遇敌列表
  2172.   #--------------------------------------------------------------------------
  2173.   def encounter_list
  2174.     return @map.encounter_list
  2175.   end
  2176.   #--------------------------------------------------------------------------
  2177.   # ● 获取遇敌步数
  2178.   #--------------------------------------------------------------------------
  2179.   def encounter_step
  2180.     return @map.encounter_step
  2181.   end
  2182.   #--------------------------------------------------------------------------
  2183.   # ● 获取地图数据
  2184.   #--------------------------------------------------------------------------
  2185.   def data
  2186.     return @map.data
  2187.   end
  2188.   #--------------------------------------------------------------------------
  2189.   # ● BGM / BGS 自动切换
  2190.   #--------------------------------------------------------------------------
  2191.   def autoplay
  2192.     if @map.autoplay_bgm
  2193.       $game_system.bgm_play(@map.bgm)
  2194.     end
  2195.     if @map.autoplay_bgs
  2196.       $game_system.bgs_play(@map.bgs)
  2197.     end
  2198.   end
  2199.   #--------------------------------------------------------------------------
  2200.   # ● 刷新
  2201.   #--------------------------------------------------------------------------
  2202.   def refresh
  2203.     # 地图 ID 有效
  2204.     if @map_id > 0
  2205.       # 刷新全部的地图事件
  2206.       for event in @events.values
  2207.         event.refresh
  2208.       end
  2209.       # 刷新全部的公共事件
  2210.       for common_event in @common_events.values
  2211.         common_event.refresh
  2212.       end
  2213.     end
  2214.     # 清除刷新要求标志
  2215.     @need_refresh = false
  2216.   end
  2217.   #--------------------------------------------------------------------------
  2218.   # ● 滚动
  2219.   #     distance : 滚动距离
  2220.   #--------------------------------------------------------------------------
  2221.   def scroll_down(distance)
  2222.     @display_y = [@display_y + distance, (self.height - ($height / 32.0)) * 128].min
  2223.   end
  2224.   #--------------------------------------------------------------------------
  2225.   def scroll_left(distance)
  2226.     @display_x = [@display_x - distance, 0].max
  2227.   end
  2228.   #--------------------------------------------------------------------------
  2229.   def scroll_right(distance)
  2230.     @display_x = [@display_x + distance, (self.width - ($width / 32.0)) * 128].min
  2231.   end
  2232.   #--------------------------------------------------------------------------
  2233.   def scroll_up(distance)
  2234.     @display_y = [@display_y - distance, 0].max
  2235.   end
  2236.   #--------------------------------------------------------------------------
  2237.   # ● 有效坐标判定
  2238.   #     x          : X 坐标
  2239.   #     y          : Y 坐标
  2240.   #--------------------------------------------------------------------------
  2241.   def valid?(x, y)
  2242.     return (x >= 0 and x < width and y >= 0 and y < height)
  2243.   end
  2244.   #--------------------------------------------------------------------------
  2245.   # ● 可以通行判定
  2246.   #     x          : X 坐标
  2247.   #     y          : Y 坐标
  2248.   #     d          : 方向 (0,2,4,6,8,10)
  2249.   #                  ※ 0,10 = 全方向不能通行的情况的判定 (跳跃等)
  2250.   #     self_event : 自己 (判定事件可以通行的情况下)
  2251.   #--------------------------------------------------------------------------
  2252.   def passable?(x, y, d, self_event = nil)
  2253.     # 被给予的坐标地图外的情况下
  2254.     unless valid?(x, y)
  2255.       # 不能通行
  2256.       return false
  2257.     end
  2258.     # 方向 (0,2,4,6,8,10) 与障碍物接触 (0,1,2,4,8,0) 后变换
  2259.     bit = (1 << (d / 2 - 1)) & 0x0f
  2260.     # 循环全部的事件
  2261.     for event in events.values
  2262.       # 自己以外的元件与坐标相同的情况
  2263.       if event.tile_id >= 0 and event != self_event and
  2264.          event.x == x and event.y == y and not event.through
  2265.         # 如果障碍物的接触被设置的情况下
  2266.         if @passages[event.tile_id] & bit != 0
  2267.           # 不能通行
  2268.           return false
  2269.         # 如果全方向的障碍物的接触被设置的情况下
  2270.         elsif @passages[event.tile_id] & 0x0f == 0x0f
  2271.           # 不能通行
  2272.           return false
  2273.         # 这以外的优先度为 0 的情况下
  2274.         elsif @priorities[event.tile_id] == 0
  2275.           # 可以通行
  2276.           return true
  2277.         end
  2278.       end
  2279.     end
  2280.     # 从层按从上到下的顺序调查循环
  2281.     for i in [2, 1, 0]
  2282.       # 取得元件 ID
  2283.       tile_id = data[x, y, i]
  2284.       # 取得元件 ID 失败
  2285.       if tile_id == nil
  2286.         # 不能通行
  2287.         return false
  2288.       # 如果障碍物的接触被设置的情况下
  2289.       elsif @passages[tile_id] & bit != 0
  2290.         # 不能通行
  2291.         return false
  2292.       # 如果全方向的障碍物的接触被设置的情况下
  2293.       elsif @passages[tile_id] & 0x0f == 0x0f
  2294.         # 不能通行
  2295.         return false
  2296.       # 这以外的优先度为 0 的情况下
  2297.       elsif @priorities[tile_id] == 0
  2298.         # 可以通行
  2299.         return true
  2300.       end
  2301.     end
  2302.     # 可以通行
  2303.     return true
  2304.   end
  2305.   #--------------------------------------------------------------------------
  2306.   # ● 茂密判定
  2307.   #     x          : X 坐标
  2308.   #     y          : Y 坐标
  2309.   #--------------------------------------------------------------------------
  2310.   def bush?(x, y)
  2311.     if @map_id != 0
  2312.       for i in [2, 1, 0]
  2313.         tile_id = data[x, y, i]
  2314.         if tile_id == nil
  2315.           return false
  2316.         elsif @passages[tile_id] & 0x40 == 0x40
  2317.           return true
  2318.         end
  2319.       end
  2320.     end
  2321.     return false
  2322.   end
  2323.   #--------------------------------------------------------------------------
  2324.   # ● 反击判定
  2325.   #     x          : X 坐标
  2326.   #     y          : Y 坐标
  2327.   #--------------------------------------------------------------------------
  2328.   def counter?(x, y)
  2329.     if @map_id != 0
  2330.       for i in [2, 1, 0]
  2331.         tile_id = data[x, y, i]
  2332.         if tile_id == nil
  2333.           return false
  2334.         elsif @passages[tile_id] & 0x80 == 0x80
  2335.           return true
  2336.         end
  2337.       end
  2338.     end
  2339.     return false
  2340.   end
  2341.   #--------------------------------------------------------------------------
  2342.   # ● 地获取地形标志
  2343.   #     x          : X 坐标
  2344.   #     y          : Y 坐标
  2345.   #--------------------------------------------------------------------------
  2346.   def terrain_tag(x, y)
  2347.     if @map_id != 0
  2348.       for i in [2, 1, 0]
  2349.         tile_id = data[x, y, i]
  2350.         if tile_id == nil
  2351.           return 0
  2352.         elsif @terrain_tags[tile_id] > 0
  2353.           return @terrain_tags[tile_id]
  2354.         end
  2355.       end
  2356.     end
  2357.     return 0
  2358.   end
  2359.   #--------------------------------------------------------------------------
  2360.   # ● 获取指定位置的事件 ID
  2361.   #     x          : X 坐标
  2362.   #     y          : Y 坐标
  2363.   #--------------------------------------------------------------------------
  2364.   def check_event(x, y)
  2365.     for event in $game_map.events.values
  2366.       if event.x == x and event.y == y
  2367.         return event.id
  2368.       end
  2369.     end
  2370.   end
  2371.   #--------------------------------------------------------------------------
  2372.   # ● 滚动开始
  2373.   #     direction : 滚动方向
  2374.   #     distance  : 滚动距离
  2375.   #     speed     : 滚动速度
  2376.   #--------------------------------------------------------------------------
  2377.   def start_scroll(direction, distance, speed)
  2378.     @scroll_direction = direction
  2379.     @scroll_rest = distance * 128
  2380.     @scroll_speed = speed
  2381.   end
  2382.   #--------------------------------------------------------------------------
  2383.   # ● 滚动中判定
  2384.   #--------------------------------------------------------------------------
  2385.   def scrolling?
  2386.     return @scroll_rest > 0
  2387.   end
  2388.   #--------------------------------------------------------------------------
  2389.   # ● 开始变更雾的色调
  2390.   #     tone     : 色调
  2391.   #     duration : 时间
  2392.   #--------------------------------------------------------------------------
  2393.   def start_fog_tone_change(tone, duration)
  2394.     @fog_tone_target = tone.clone
  2395.     @fog_tone_duration = duration
  2396.     if @fog_tone_duration == 0
  2397.       @fog_tone = @fog_tone_target.clone
  2398.     end
  2399.   end
  2400.   #--------------------------------------------------------------------------
  2401.   # ● 开始变更雾的不透明度
  2402.   #     opacity  : 不透明度
  2403.   #     duration : 时间
  2404.   #--------------------------------------------------------------------------
  2405.   def start_fog_opacity_change(opacity, duration)
  2406.     @fog_opacity_target = opacity * 1.0
  2407.     @fog_opacity_duration = duration
  2408.     if @fog_opacity_duration == 0
  2409.       @fog_opacity = @fog_opacity_target
  2410.     end
  2411.   end
  2412.   #--------------------------------------------------------------------------
  2413.   # ● 刷新画面
  2414.   #--------------------------------------------------------------------------
  2415.   def update
  2416.     # 还原必要的地图
  2417.     if $game_map.need_refresh
  2418.       refresh
  2419.     end
  2420.     # 滚动中的情况下
  2421.     if @scroll_rest > 0
  2422.       # 滚动速度变化为地图坐标系的距离
  2423.       distance = 2 ** @scroll_speed
  2424.       # 执行滚动
  2425.       case @scroll_direction
  2426.       when 2  # 下
  2427.         scroll_down(distance)
  2428.       when 4  # 左
  2429.         scroll_left(distance)
  2430.       when 6  # 右
  2431.         scroll_right(distance)
  2432.       when 8  # 上
  2433.         scroll_up(distance)
  2434.       end
  2435.       # 滚动距离的减法运算
  2436.       @scroll_rest -= distance
  2437.     end
  2438.     # 更新地图事件
  2439.     for event in @events.values
  2440.       event.update
  2441.     end
  2442.     # 更新公共事件
  2443.     for common_event in @common_events.values
  2444.       common_event.update
  2445.     end
  2446.     # 处理雾的滚动
  2447.     @fog_ox -= @fog_sx / 8.0
  2448.     @fog_oy -= @fog_sy / 8.0
  2449.     # 处理雾的色调变更
  2450.     if @fog_tone_duration >= 1
  2451.       d = @fog_tone_duration
  2452.       target = @fog_tone_target
  2453.       @fog_tone.red = (@fog_tone.red * (d - 1) + target.red) / d
  2454.       @fog_tone.green = (@fog_tone.green * (d - 1) + target.green) / d
  2455.       @fog_tone.blue = (@fog_tone.blue * (d - 1) + target.blue) / d
  2456.       @fog_tone.gray = (@fog_tone.gray * (d - 1) + target.gray) / d
  2457.       @fog_tone_duration -= 1
  2458.     end
  2459.     # 处理雾的不透明度变更
  2460.     if @fog_opacity_duration >= 1
  2461.       d = @fog_opacity_duration
  2462.       @fog_opacity = (@fog_opacity * (d - 1) + @fog_opacity_target) / d
  2463.       @fog_opacity_duration -= 1
  2464.     end
  2465.   end
  2466. end
  2467. #==============================================================================
  2468. # ■ Sprite_Character
  2469. #------------------------------------------------------------------------------
  2470. #  角色显示用脚本。监视 Game_Character 类的实例、
  2471. # 自动变化脚本状态。
  2472. #==============================================================================

  2473. class Sprite_Character < RPG::Sprite
  2474.   #--------------------------------------------------------------------------
  2475.   # ● 定义实例变量
  2476.   #--------------------------------------------------------------------------
  2477.   attr_accessor :character                # 角色
  2478.   #--------------------------------------------------------------------------
  2479.   # ● 初始化对像
  2480.   #     viewport  : 查看端口
  2481.   #     character : 角色 (Game_Character)
  2482.   #--------------------------------------------------------------------------
  2483.   def initialize(viewport, character = nil)
  2484.     super(viewport)
  2485.     @vp = viewport
  2486.     @character = character
  2487.     update
  2488.   end
  2489.   #--------------------------------------------------------------------------
  2490.   # ● 更新画面
  2491.   #--------------------------------------------------------------------------
  2492.   def update
  2493.     super
  2494.     # 元件 ID、文件名、色相与现在的情况存在差异的情况下
  2495.     if @tile_id != @character.tile_id or
  2496.        @character_name != @character.character_name or
  2497.        @character_hue != @character.character_hue
  2498.       # 记忆元件 ID 与文件名、色相
  2499.       @tile_id = @character.tile_id
  2500.       @character_name = @character.character_name
  2501.       @character_hue = @character.character_hue
  2502.       # 元件 ID 为有效值的情况下
  2503.       if @tile_id >= 384
  2504.         self.bitmap = RPG::Cache.tile($game_map.tileset_name,
  2505.           @tile_id, @character.character_hue)
  2506.         self.src_rect.set(0, 0, 32, 32)
  2507.         self.ox = 16
  2508.         self.oy = 32
  2509.       # 元件 ID 为无效值的情况下
  2510.       else
  2511.         self.bitmap = RPG::Cache.character(@character.character_name,
  2512.           @character.character_hue)
  2513.         @cw = bitmap.width / 4
  2514.         @ch = bitmap.height / 4
  2515.         self.ox = @cw / 2
  2516.         self.oy = @ch
  2517.       end
  2518.     end
  2519.     # 设置可视状态
  2520.     self.visible = (not @character.transparent)
  2521.     # 图形是角色的情况下
  2522.     if @tile_id == 0
  2523.       # 设置传送目标的矩形
  2524.       sx = @character.pattern * @cw
  2525.       sy = (@character.direction - 2) / 2 * @ch
  2526.       self.src_rect.set(sx, sy, @cw, @ch)
  2527.     end
  2528.     # 设置脚本的坐标
  2529.     self.x = @character.screen_x
  2530.     #if @character == $game_player
  2531.       if @vp == $viewport5 or @vp == $viewport6
  2532.         self.y = @character.screen_y-480
  2533.         self.z = @character.screen_z(@ch)-480
  2534.       else
  2535.         self.y = @character.screen_y
  2536.         self.z = @character.screen_z(@ch)
  2537.       end
  2538.     #else
  2539.       #self.y = @character.screen_y
  2540.       #self.z = @character.screen_z(@ch)
  2541.     #end
  2542.     # 设置不透明度、合成方式、茂密
  2543.     self.opacity = @character.opacity
  2544.     self.blend_type = @character.blend_type
  2545.     self.bush_depth = @character.bush_depth
  2546.     # 动画
  2547.     if @character.animation_id != 0
  2548.       animation = $data_animations[@character.animation_id]
  2549.       animation(animation, true)
  2550.       @character.animation_id = 0
  2551.     end
  2552.   end
  2553. end

  2554.   class Weather
  2555.     def initialize(viewport = nil)
  2556.       @type = 0
  2557.       @max = 0
  2558.       @ox = 0
  2559.       @oy = 0
  2560.       color1 = Color.new(255, 255, 255, 255)
  2561.       color2 = Color.new(255, 255, 255, 128)
  2562.       @rain_bitmap = Bitmap.new(7, 56)
  2563.       for i in 0..6
  2564.         @rain_bitmap.fill_rect(6-i, i*8, 1, 8, color1)
  2565.       end
  2566.       @storm_bitmap = Bitmap.new(34, 64)
  2567.       for i in 0..31
  2568.         @storm_bitmap.fill_rect(33-i, i*2, 1, 2, color2)
  2569.         @storm_bitmap.fill_rect(32-i, i*2, 1, 2, color1)
  2570.         @storm_bitmap.fill_rect(31-i, i*2, 1, 2, color2)
  2571.       end
  2572.       @snow_bitmap = Bitmap.new(6, 6)
  2573.       @snow_bitmap.fill_rect(0, 1, 6, 4, color2)
  2574.       @snow_bitmap.fill_rect(1, 0, 4, 6, color2)
  2575.       @snow_bitmap.fill_rect(1, 2, 4, 2, color1)
  2576.       @snow_bitmap.fill_rect(2, 1, 2, 4, color1)
  2577.       @sprites = []
  2578.       for i in 1..40
  2579.         sprite = Sprite.new(viewport)
  2580.         sprite.z = 1000
  2581.         sprite.visible = false
  2582.         sprite.opacity = 0
  2583.         @sprites.push(sprite)
  2584.       end
  2585.     end
  2586.     def dispose
  2587.       for sprite in @sprites
  2588.         sprite.dispose
  2589.       end
  2590.       @rain_bitmap.dispose
  2591.       @storm_bitmap.dispose
  2592.       @snow_bitmap.dispose
  2593.     end
  2594.     def type=(type)
  2595.       return if @type == type
  2596.       @type = type
  2597.       case @type
  2598.       when 1
  2599.         bitmap = @rain_bitmap
  2600.       when 2
  2601.         bitmap = @storm_bitmap
  2602.       when 3
  2603.         bitmap = @snow_bitmap
  2604.       else
  2605.         bitmap = nil
  2606.       end
  2607.       for i in 1..40
  2608.         sprite = @sprites[i]
  2609.         if sprite != nil
  2610.           sprite.visible = (i <= @max)
  2611.           sprite.bitmap = bitmap
  2612.         end
  2613.       end
  2614.     end
  2615.     def ox=(ox)
  2616.       return if @ox == ox;
  2617.       @ox = ox
  2618.       for sprite in @sprites
  2619.         sprite.ox = @ox
  2620.       end
  2621.     end
  2622.     def oy=(oy)
  2623.       return if @oy == oy;
  2624.       @oy = oy
  2625.       for sprite in @sprites
  2626.         sprite.oy = @oy
  2627.       end
  2628.     end
  2629.     def max=(max)
  2630.       return if @max == max;
  2631.       @max = [[max, 0].max, 40].min
  2632.       for i in 1..40
  2633.         sprite = @sprites[i]
  2634.         if sprite != nil
  2635.           sprite.visible = (i <= @max)
  2636.         end
  2637.       end
  2638.     end
  2639.     def update
  2640.       return if @type == 0
  2641.       for i in 1..@max
  2642.         sprite = @sprites[i]
  2643.         if sprite == nil
  2644.           break
  2645.         end
  2646.         if @type == 1
  2647.           sprite.x -= 2
  2648.           sprite.y += 16
  2649.           sprite.opacity -= 8
  2650.         end
  2651.         if @type == 2
  2652.           sprite.x -= 8
  2653.           sprite.y += 16
  2654.           sprite.opacity -= 12
  2655.         end
  2656.         if @type == 3
  2657.           sprite.x -= 2
  2658.           sprite.y += 8
  2659.           sprite.opacity -= 8
  2660.         end
  2661.         x = sprite.x - @ox
  2662.         y = sprite.y - @oy
  2663.         if sprite.opacity < 64 or x < -50 or x > $width+150 or y < -300 or y > $height+100
  2664.           sprite.x = rand($width+150) - 50 + @ox
  2665.           sprite.y = rand($height+100) - 200 + @oy
  2666.           sprite.opacity = 255
  2667.         end
  2668.       end
  2669.     end
  2670.     attr_reader :type
  2671.     attr_reader :max
  2672.     attr_reader :ox
  2673.     attr_reader :oy
  2674.   end


复制代码
这个是分辨率320×480的脚本:
  1. # ————————————————————————————————————

  2. #ウィンドウサイズの変更(v1.00)

  3. class Win32API
  4.   GAME_INI_FILE = ".\\Game.ini"
  5.   
  6.   def Win32API.GetPrivateProfileString(section, key)
  7.     val = "\0"*256
  8.     gps = Win32API.new('kernel32', 'GetPrivateProfileString',%w(p p p p l p), 'l')
  9.     gps.call(section, key, "", val, 256, GAME_INI_FILE)
  10.     val.delete!("\0")
  11.     return val
  12.   end

  13.   def Win32API.FindWindow(class_name, title)
  14.     fw = Win32API.new('user32', 'FindWindow', %(p, p), 'i')
  15.     hWnd = fw.call(class_name, title)
  16.     return hWnd
  17.   end

  18.   HWND_TOP     = 0
  19.   HWND_TOPMOST = -1
  20.   SWP_NOMOVE   = 2
  21.   
  22.   def Win32API.SetWindowPos(hWnd, w, h)
  23.     swp = Win32API.new('user32', 'SetWindowPos', %(l, l, i, i, i, i, i), 'i')
  24.     ok = swp.call(hWnd, HWND_TOP, 0, 0, w, h, SWP_NOMOVE)
  25.     # 下の行を有効にすると、常に前面に表示されるウィンドウになる。
  26.     #ok = swp.call(hWnd, HWND_TOPMOST, 0, 0, w, h, SWP_NOMOVE)
  27.     return ok
  28.   end
  29. end

  30. title =  Win32API.GetPrivateProfileString("Game", "Title")
  31. hWnd = Win32API.FindWindow("RGSS Player", title)

  32. # 幅320、高さ480に変更
  33. ok = Win32API.SetWindowPos(hWnd, 320, 480)
  34. if(ok == 0)
  35.   p "サイズ変更失敗"
  36. end
  37. #==============================================================================

复制代码
xiangbd 发表于 2011-5-10 09:09:00
提示: 作者被禁止或删除 内容自动屏蔽
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-26 02:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表