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

Project1

 找回密码
 注册会员
搜索
查看: 1664|回复: 1
打印 上一主题 下一主题

[已经过期] VA伪3D脚本怎么让建筑立起来

[复制链接]

Lv1.梦旅人

梦石
0
星屑
56
在线时间
155 小时
注册时间
2015-1-10
帖子
157
跳转到指定楼层
1
发表于 2015-10-24 16:41:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
一切都变成了地板- -

用事件做的话会很多而且很累....

XP的似乎可以用地形标志解决...

求助.....{:2_270:}

RUBY 代码复制
  1. #====================================================================
  2. # Mode 7 Ace
  3. # v.1.4
  4. # Auteur : MGC
  5. #
  6. # Il s'agit d'un script de mode 7 basique pour RMVX Ace.
  7. #
  8. # - Permet une inclinaison de la carte de 0° à 89°
  9. # - Toute la carte est inclinée, sans relief. Seuls les évènements
  10. #   paraissent dressés verticalement.
  11. # - L'effet de colorisation à l'horizon est personnalisable.
  12. # - Les tiles animés sont supportés, ainsi que le bouclage de la carte.
  13. # - possibilité de zoomer (de 1:8 à 8:1) quand le mode 7 est activé.
  14. #
  15. # IMPORTANT : SI VOUS RENCONTREZ DU LAG, VEUILLEZ VOUS ASSURER D'AVOIR
  16. # DECOCHER "REDUCE SCREEN FLICKERING" (F1).
  17. #
  18. # Nécessite :
  19. # - le fichier MGC_Mode7_Ace.dll à la racine du projet
  20. # - les 3 fichiers graphiques suivants, déposés dans Pictures/ :
  21. #         - autotiles_data.png
  22. #         - autotiles_data_small.png
  23. #         - autotiles_data_xsmall.png
  24. #
  25. # Configuration :
  26. # - MODE7_MAPS_ID : Contient la liste des id des cartes pour lesquelles
  27. #         le mode 7 est appliqué dès l'entrée sur ces cartes
  28. # - MODE7_DEFAULT_ZOOM : valeur de zoom par défaut qui s'applique dès le
  29. #         passage en mode 7. Compris entre 0.125 et 8.0.
  30. # - MODE7_DEFAULT_ANGLE : valeur d'angle d'inclinaison par défaut qui
  31. #         s'applique dès le passage en mode 7. Compris entre 0 et 89.
  32. # - MODE7_VIEW_LIMIT : nombre de tiles supplémentaires à afficher (en plus
  33. #         des 13 pour la vue normale de la carte en 544 * 416) avant l'horizon.
  34. # - MODE7_FADING_DISTANCE : nombre de tiles avant l'horizon subissant un
  35. #         dégradé de ton et/ou d'opacité.
  36. # - MODE7_FADING_TONE : composantes de couleur R, G, B vers lesquelles tend
  37. #         le dégradé de ton à l'horizon. Chaque composantes peut varier
  38. #         entre -255 et 255.
  39. # - MODE7_FADING_OPACITY : opacité vers laquelle tend le dégradé d'opacité ton
  40. #         à l'horizon. Compris entre 255 (pas de dégradé d'opacité) et 0.
  41. # - MODE7_SCAN_STEP : méthode de rafraîchissement de l'écran :
  42. #         - 1 : l'écran est entièrement redessiné en 1 frame. Déconseillé
  43. #               car extrêmement gourmand en ressources.
  44. #         - 2 : l'écran est redessiné en 2 frames (une ligne de l'écran sur
  45. #               deux est dessinée pour chaque frame).
  46. #         - 3 : l'écran est redessiné en 3 frames (une ligne de l'écran sur
  47. #               trois est dessinée pour chaque frame). Conseillé s'il y a
  48. #               trop de lag.
  49. #
  50. # Utilisation :
  51. # Commandes utilisables comme commandes d'évènement avec Script... :
  52. # - MGC.start_mode7 : lance le mode 7 pour la carte
  53. # - MGC.to_mode7_angle(nouvel angle, durée de transition)
  54. # - MGC.to_mode7_zoom(nouvelle valeur de zoom, durée de transition)
  55. # - MGC.end_mode7 : quitte le mode 7
  56. # - MGC.set_mode7_scan(nouvelle valeur) : modifie le paramètre MODE7_SCAN_STEP
  57. #
  58. # NOUVEAU EN VERSION 1.3 :
  59. # Vous pouvez ajouter des commandes dans le nom des cartes pour forcer le
  60. # paramétrage du mode 7 de la carte. Les paramètres dans le nom de la
  61. # carte sont prioritaires par rapport à ceux dans la partie CONFIGURATION
  62. # - [M7] : active le mode 7 pour la carte
  63. # - [Ax], où x est un entier entre 0 et 89 : angle de la carte
  64. # - [Zx], où x est un décimal entre 0.125 et 8.0 : zoom de la carte
  65. # - [FDx], où x est un entier positif : nombre de tiles avant l'horizon
  66. #         subissant un dégradé de ton et/ou d'opacité
  67. # - [FTx,y,z], où x, y et z sont des entiers entre -255 et 255 :
  68. #         composantes de couleur R, G, B vers lesquelles tend le dégradé
  69. #         de ton à l'horizon
  70. # - [FOx], où x est un entier entre 0 et 255 : opacité vers laquelle
  71. #         tend le dégradé d'opacité ton à l'horizon
  72. # Exemple :
  73. # My Worldmap [M7][A55][Z0.5][FD20][FT128,64,-32][FO128]
  74. #====================================================================
  75. module MGC
  76.   #--------------------------------------------------------------------------
  77.   # * CONFIGURATION
  78.   #--------------------------------------------------------------------------
  79.   MODE7_MAPS_ID = []
  80.   MODE7_DEFAULT_ZOOM = 1.0
  81.   MODE7_DEFAULT_ANGLE = 0
  82.   MODE7_VIEW_LIMIT = 26
  83.   MODE7_FADING_DISTANCE = 13
  84.   MODE7_FADING_TONE = Tone.new(64, 64, 128)
  85.   MODE7_FADING_OPACITY = 0
  86.   MODE7_SCAN_STEP = 2
  87.   #--------------------------------------------------------------------------
  88.   # * Initialisation
  89.   #--------------------------------------------------------------------------
  90.   @mode7_zoom = 1.0
  91.   @mode7_active = false
  92.   #--------------------------------------------------------------------------
  93.   # * Lancement du mode 7
  94.   #--------------------------------------------------------------------------
  95.   def self.start_mode7
  96.     @end_mode7 = false
  97.     @spriteset.start_mode7
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # * Fin du mode 7
  101.   #--------------------------------------------------------------------------
  102.   def self.end_mode7
  103.     @end_mode7 = true
  104.     self.to_mode7_zoom(1.0, 1)
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # * Setter pour l'attribut spriteset
  108.   #--------------------------------------------------------------------------
  109.   def self.spriteset=(spriteset)
  110.     @spriteset = spriteset
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # * Initialisation des données du mode 7
  114.   #--------------------------------------------------------------------------
  115.   def self.initialize_mode7
  116.     self.mode7_angle = $game_system.mode7_angle ? $game_system.mode7_angle :
  117.     $game_map.get_default_mode7_angle
  118.     @mode7_angle_duration = 0
  119.     @mode7_zoom = $game_system.mode7_zoom ? $game_system.mode7_zoom :
  120.     $game_map.get_default_mode7_zoom
  121.     @mode7_zoom_incr = Math.log(@mode7_zoom) / Math.log(2)
  122.     @mode7_zoom_duration = 0
  123.     pivot = (Graphics.height >> 1) + 12
  124.     @mode7_data = [pivot, pivot.to_f / Graphics.height, 1.0, 1.0, 0,
  125.     Graphics.height, 0, 0, 0, 0]
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # * Change Map
  129.   #--------------------------------------------------------------------------
  130.   def self.start_change_map
  131.     self.mode7_angle = $game_map.get_default_mode7_angle
  132.     @mode7_angle_duration = 0
  133.     @mode7_zoom = $game_map.get_default_mode7_zoom
  134.     @mode7_zoom_incr = Math.log(@mode7_zoom) / Math.log(2)
  135.     @mode7_zoom_duration = 0
  136.     @change_map = true
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # * Is Changing Map ?
  140.   #--------------------------------------------------------------------------
  141.   def self.is_changing_map?
  142.     return @change_map
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # * End Change Map
  146.   #--------------------------------------------------------------------------
  147.   def self.end_change_map
  148.     @change_map = false
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # * Getter pour l'attribut mode7_data
  152.   #--------------------------------------------------------------------------
  153.   def self.mode7_data
  154.     return @mode7_data
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # * Getter pour l'attribut mode7_zoom
  158.   #--------------------------------------------------------------------------
  159.   def self.mode7_zoom
  160.     return @mode7_zoom
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # * Getter pour l'attribut mode7_angle
  164.   #--------------------------------------------------------------------------
  165.   def self.mode7_angle
  166.     return @mode7_angle
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # * Getter pour l'attribut mode7_active
  170.   #--------------------------------------------------------------------------
  171.   def self.mode7_active
  172.     return @mode7_active
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # * Setter pour l'attribut mode7_active
  176.   #--------------------------------------------------------------------------
  177.   def self.mode7_active=(flag)
  178.     $game_system.mode7_active = flag
  179.     @mode7_active = flag
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # * Setter pour l'attribut mode7_zoom
  183.   #--------------------------------------------------------------------------
  184.   def self.mode7_zoom=(zoom_value)
  185.     unless mode7_zoom == zoom_value
  186.       if zoom_value < 0.125 || zoom_value > 8.0 then return end
  187.       @mode7_zoom = zoom_value
  188.       $game_system.mode7_zoom = @mode7_zoom
  189.       $game_player.center($game_player.x, $game_player.y)
  190.     end
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # * Incrémentation de la valeur du zoom du mode 7
  194.   #--------------------------------------------------------------------------
  195.   def self.incr_mode7_zoom(val = 0.02)
  196.     @mode7_zoom_incr += val
  197.     new_zoom = 2 ** @mode7_zoom_incr
  198.     self.mode7_zoom = new_zoom
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # * Pour aller progressivement vers une nouvelle valeur de zoom du mode 7
  202.   #--------------------------------------------------------------------------
  203.   def self.to_mode7_zoom(new_zoom, duration)
  204.     unless mode7_zoom == new_zoom
  205.       if new_zoom < 0.125 || new_zoom > 8.0 then return end
  206.       @mode7_zoom_duration = duration
  207.       target_zoom_incr = Math.log(new_zoom) / Math.log(2)
  208.       @mode7_zoom_step = (target_zoom_incr - @mode7_zoom_incr) / duration
  209.       @target_mode7_zoom = new_zoom
  210.     end
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # * Setter pour l'attribut mode7_angle
  214.   #--------------------------------------------------------------------------
  215.   def self.mode7_angle=(new_angle)
  216.     unless new_angle == @mode7_angle
  217.       @mode7_angle = [[new_angle, 0].max, 89].min
  218.       @mode7_angle_real = @mode7_angle
  219.       $game_system.mode7_angle = @mode7_angle
  220.     end
  221.   end
  222.   #--------------------------------------------------------------------------
  223.   # * Autre setter pour l'attribut mode7_angle, ne réinitialisant pas @mode7_angle_real
  224.   #--------------------------------------------------------------------------
  225.   def self.set_mode7_angle(new_angle)
  226.     unless new_angle == @mode7_angle
  227.       @mode7_angle = [[new_angle, 0].max, 89].min
  228.       $game_system.mode7_angle = @mode7_angle
  229.     end
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # * Incrémentation de la valeur de l'angle du mode 7
  233.   #--------------------------------------------------------------------------
  234.   def self.incr_mode7_angle
  235.     @mode7_angle_real += @mode7_angle_step
  236.     self.set_mode7_angle(@mode7_angle_real.to_i)
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # * Pour aller progressivement vers une nouvelle valeur de l'angle du mode 7
  240.   #--------------------------------------------------------------------------
  241.   def self.to_mode7_angle(new_angle, duration)
  242.     unless @mode7_angle == new_angle
  243.       new_angle = [[new_angle, 0].max, 89].min
  244.       @mode7_angle_duration = duration
  245.       @mode7_angle_step = (new_angle - @mode7_angle).to_f / duration
  246.       @target_mode7_angle = new_angle
  247.     end
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # * Mise à jour du mode 7
  251.   #--------------------------------------------------------------------------
  252.   def self.update_mode7
  253.     if @mode7_active
  254.       if @mode7_zoom_duration > 0
  255.         @mode7_zoom_duration -= 1
  256.         if @mode7_zoom_duration == 0
  257.           self.mode7_zoom = @target_mode7_zoom
  258.         else
  259.           self.incr_mode7_zoom(@mode7_zoom_step)
  260.         end
  261.       elsif @mode7_angle_duration > 0
  262.         @mode7_angle_duration -= 1
  263.         if @mode7_angle_duration == 0
  264.           self.mode7_angle = @target_mode7_angle
  265.         else
  266.           self.incr_mode7_angle
  267.         end
  268.       elsif @end_mode7
  269.         @spriteset.end_mode7
  270.         @end_mode7 = false
  271.       end
  272.     end
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # * Vérifie si un effet est en cours
  276.   #--------------------------------------------------------------------------
  277.   def self.effect?
  278.     return @mode7_active && (@mode7_zoom_duration > 0 ||
  279.     @mode7_angle_duration > 0 || @end_mode7)
  280.   end
  281.   #--------------------------------------------------------------------------
  282.   # * Modifie la valeur de la méthode de rafraîchissement de l'écran
  283.   #--------------------------------------------------------------------------
  284.   def self.set_mode7_scan(new_value)
  285.     new_value = [[new_value, 1].max, 3].min
  286.     unless MODE7_SCAN_STEP == new_value
  287.       self.const_set(:MODE7_SCAN_STEP, new_value)
  288.     end
  289.   end
  290.   #==============================================================================
  291.   # ** MGC::Mode7_Map
  292.   #==============================================================================
  293.   class Mode7_Map
  294.     #--------------------------------------------------------------------------
  295.     # * Attributs
  296.     #--------------------------------------------------------------------------
  297.     attr_reader :viewport, :visible, :ox, :oy, :opacity, :blend_type, :color,
  298.     :tone, :wave_amp, :wave_length, :wave_speed, :wave_phase, :zoom, :map_data,
  299.     :flags
  300.     attr_accessor :bitmaps, :flash_data
  301.     attr_reader :alpha, :parameters
  302.     #--------------------------------------------------------------------------
  303.     # * Constantes
  304.     #--------------------------------------------------------------------------
  305.     RENDER = Win32API.new("MGC_Mode7_Ace", "renderMode7", "l", "l")
  306.     #--------------------------------------------------------------------------
  307.     # * Initialisation
  308.     #--------------------------------------------------------------------------
  309.     def initialize(viewport)
  310.       @viewport = viewport
  311.       self.bitmaps = [0, 0, 0, 0, 0, 0, 0, 0, 0]
  312.       @map_data = 0
  313.       @flags = 0
  314.       self.flash_data = nil
  315.       @cx = Graphics.width >> 1
  316.       @cy = Graphics.height >> 1
  317.       @sprite_render = Sprite.new(viewport)
  318.       @render = Bitmap.new(Graphics.width, Graphics.height)
  319.       @sprite_render.bitmap = @render
  320.       @sprite_render.x = 0
  321.       @sprite_render.y = 0
  322.       @sprite_render.z = 0
  323.       @zoom = 1.0
  324.       @view_limit = MODE7_VIEW_LIMIT << 5
  325.       m7_data = Table.new(Graphics.width + 6, Graphics.height)
  326.       @parameters = [@render, 0, map_data, bitmaps,
  327.       Cache.picture('autotiles_data'), Cache.picture('autotiles_data_small'),
  328.       Cache.picture('autotiles_data_xsmall'), 0, 0, 0, 0, 0, 0, 0, 4096,
  329.       100, $game_map.loop_horizontal?, $game_map.loop_vertical?, MODE7_SCAN_STEP,
  330.       0, m7_data, 2048, 0, MGC.mode7_data[5], MGC.mode7_data[0], 0, 0, 0, 0, 0,
  331.       0, 0, 0, 0, 0, 0]
  332.       refresh_fading
  333.       MGC.mode7_data[9] = m7_data
  334.       self.alpha = 0
  335.       self.visible = true
  336.       self.zoom = 1.0
  337.       self.ox = 0
  338.       self.oy = 0
  339.       self.opacity = 255
  340.       self.blend_type = 0
  341.       self.color = Color.new
  342.       self.tone = Tone.new
  343.       self.wave_amp = 0
  344.       self.wave_length = 180
  345.       self.wave_speed = 360
  346.       self.wave_phase = 0.0
  347.       @initialization = true
  348.     end
  349.     #--------------------------------------------------------------------------
  350.     # * Refresh Fading
  351.     #--------------------------------------------------------------------------
  352.     def refresh_fading
  353.       fading_dist = $game_map.get_default_fading_distance << 5
  354.       fading_begin = Graphics.height + @view_limit - fading_dist
  355.       @parameters[30] = fading_begin
  356.       @parameters[31] = fading_dist
  357.       @parameters[32] = $game_map.get_default_fading_tone.red.to_i
  358.       @parameters[33] = $game_map.get_default_fading_tone.green.to_i
  359.       @parameters[34] = $game_map.get_default_fading_tone.blue.to_i
  360.       @parameters[35] = $game_map.get_default_fading_opacity
  361.     end
  362.     #--------------------------------------------------------------------------
  363.     # * Refresh all the parameters dependent on the angle of slant
  364.     #--------------------------------------------------------------------------
  365.     def refresh_alpha
  366.       # angle of slant
  367.       alpha_rad = (Math::PI * alpha) / 180
  368.       cos_alpha_real = Math.cos(alpha_rad)
  369.       sin_alpha_real = Math.sin(alpha_rad)
  370.       cos_alpha = (2048 * cos_alpha_real).to_i
  371.       sin_alpha = (2048 * sin_alpha_real).to_i
  372.       distance_h = MGC.mode7_data[5]
  373.       pivot = MGC.mode7_data[0]
  374.       # h0,  z0 : intermediate values used to calculate the slope
  375.       h0 = (-distance_h * pivot * cos_alpha) / ((distance_h << 11) +
  376.       pivot * sin_alpha) + pivot
  377.       z0 = (distance_h << 11).to_f / ((distance_h << 11) + pivot * sin_alpha)
  378.       # slope
  379.       slope_value = (1.0 - z0) / (pivot - h0)
  380.       slope_value_map = (131072 * slope_value).to_i
  381.       corrective_value = 1.0 - pivot * slope_value
  382.       corrective_value_map = (131072 * corrective_value).to_i
  383.       last_line = ((-pivot - @view_limit) * zoom).to_i
  384.       height_limit = (distance_h * last_line * cos_alpha) /
  385.       ((distance_h << 11) - last_line * sin_alpha) + pivot
  386.       height_limit = [height_limit.to_i, 0].max
  387.       parameters[21] = cos_alpha
  388.       parameters[22] = sin_alpha
  389.       parameters[25] = slope_value_map
  390.       parameters[26] = corrective_value_map
  391.       parameters[27] = height_limit
  392.       parameters[29] = MODE7_SCAN_STEP
  393.       @need_refresh = true
  394.       MGC.mode7_data[3] = cos_alpha_real
  395.       MGC.mode7_data[4] = sin_alpha_real
  396.       MGC.mode7_data[6] = slope_value
  397.       MGC.mode7_data[7] = corrective_value
  398.       MGC.mode7_data[8] = height_limit     
  399.     end
  400.     #--------------------------------------------------------------------------
  401.     # * Setter pour l'attribut map_data
  402.     #--------------------------------------------------------------------------
  403.     def map_data=(new_map_data)
  404.       @map_data = new_map_data
  405.       parameters[2] = @map_data
  406.     end
  407.     #--------------------------------------------------------------------------
  408.     # * Setter pour l'attribut flags
  409.     #--------------------------------------------------------------------------
  410.     def flags=(new_flags)
  411.       @flags = new_flags
  412.       parameters[7] = @flags
  413.     end
  414.     #--------------------------------------------------------------------------
  415.     # * Setter pour l'attribut zoom
  416.     #--------------------------------------------------------------------------
  417.     def zoom=(new_zoom)
  418.       unless zoom == new_zoom
  419.         @zoom = new_zoom
  420.         parameters[14] = (4096.0 / new_zoom).to_i
  421.         MGC.mode7_data[2] = new_zoom
  422.         vox = @ox
  423.         @ox = nil
  424.         self.ox = vox
  425.         voy = @oy
  426.         @oy = nil
  427.         self.oy = voy
  428.         @need_refresh = true
  429.         parameters[29] = MODE7_SCAN_STEP
  430.         @need_refresh = true
  431.         last_line = ((-parameters[24] - @view_limit) * zoom).to_i
  432.         height_limit = (parameters[23] * last_line * parameters[21]) /
  433.         ((parameters[23] << 11) - last_line * parameters[22]) + parameters[24]
  434.         parameters[27] = [height_limit.to_i, 0].max
  435.         MGC.mode7_data[8] = parameters[27]
  436.       end
  437.     end
  438.     #--------------------------------------------------------------------------
  439.     # * Setter pour l'attribut alpha
  440.     #--------------------------------------------------------------------------
  441.     def alpha=(new_alpha)
  442.       unless new_alpha == alpha
  443.         @alpha = new_alpha
  444.         refresh_alpha
  445.       end
  446.     end
  447.     #--------------------------------------------------------------------------
  448.     # * Setter pour l'attribut shadow_opacity
  449.     #--------------------------------------------------------------------------
  450.     def shadow_opacity=(value)
  451.       @parameters[15] = [[value, 0].max, 255].min
  452.     end
  453.     #--------------------------------------------------------------------------
  454.     # * Setter pour l'attribut visible
  455.     #--------------------------------------------------------------------------
  456.     def visible=(flag)
  457.       @visible = flag
  458.       @sprite_render.visible = flag
  459.     end
  460.     #--------------------------------------------------------------------------
  461.     # * Setter pour l'attribut ox
  462.     #--------------------------------------------------------------------------
  463.     def ox=(new_ox)
  464.       new_ox = new_ox.to_i
  465.       unless new_ox == @ox
  466.         @ox = new_ox
  467.         @need_refresh = true
  468.         parameters[8] = @ox
  469.         parameters[29] = MODE7_SCAN_STEP
  470.       end
  471.     end
  472.     #--------------------------------------------------------------------------
  473.     # * Setter pour l'attribut oy
  474.     #--------------------------------------------------------------------------
  475.     def oy=(new_oy)
  476.       new_oy = new_oy.to_i
  477.       unless new_oy == @oy
  478.         @oy = new_oy
  479.         @need_refresh = true
  480.         parameters[9] = @oy
  481.         parameters[29] = MODE7_SCAN_STEP
  482.       end
  483.     end
  484.     #--------------------------------------------------------------------------
  485.     # * Setter pour l'attribut opacity
  486.     #--------------------------------------------------------------------------
  487.     def opacity=(new_opacity)
  488.       @opacity = new_opacity
  489.       @sprite_render.opacity = new_opacity
  490.     end
  491.     #--------------------------------------------------------------------------
  492.     # * Setter pour l'attribut blend_type
  493.     #--------------------------------------------------------------------------
  494.     def blend_type=(new_blend_type)
  495.       @blend_type = new_blend_type
  496.       @sprite_render.blend_type = new_blend_type
  497.     end
  498.     #--------------------------------------------------------------------------
  499.     # * Setter pour l'attribut color
  500.     #--------------------------------------------------------------------------
  501.     def color=(new_color)
  502.       @color = new_color
  503.       @sprite_render.color = new_color
  504.     end
  505.     #--------------------------------------------------------------------------
  506.     # * Setter pour l'attribut tone
  507.     #--------------------------------------------------------------------------
  508.     def tone=(new_tone)
  509.       @tone = new_tone
  510.       @sprite_render.tone = new_tone
  511.     end
  512.     #--------------------------------------------------------------------------
  513.     # * Setter pour l'attribut wave_amp
  514.     #--------------------------------------------------------------------------
  515.     def wave_amp=(new_wave_amp)
  516.       @wave_amp = new_wave_amp
  517.       @sprite_render.wave_amp = new_wave_amp
  518.     end
  519.     #--------------------------------------------------------------------------
  520.     # * Setter pour l'attribut wave_length
  521.     #--------------------------------------------------------------------------
  522.     def wave_length=(new_wave_length)
  523.       @wave_length = new_wave_length
  524.       @sprite_render.wave_length = new_wave_length
  525.     end
  526.     #--------------------------------------------------------------------------
  527.     # * Setter pour l'attribut wave_speed
  528.     #--------------------------------------------------------------------------
  529.     def wave_speed=(new_wave_speed)
  530.       @wave_speed = new_wave_speed
  531.       @sprite_render.wave_speed = new_wave_speed
  532.     end
  533.     #--------------------------------------------------------------------------
  534.     # * Setter pour l'attribut wave_phase
  535.     #--------------------------------------------------------------------------
  536.     def wave_phase=(new_wave_phase)
  537.       @wave_phase = new_wave_phase
  538.       @sprite_render.wave_phase = new_wave_phase
  539.     end
  540.     #--------------------------------------------------------------------------
  541.     # * Libération de l'instance
  542.     #--------------------------------------------------------------------------
  543.     def dispose
  544.       @render.dispose
  545.       @sprite_render.dispose
  546.     end
  547.     #--------------------------------------------------------------------------
  548.     # * Retourne true si l'instance a été libérée
  549.     #--------------------------------------------------------------------------
  550.     def disposed?
  551.       return @render.disposed?
  552.     end
  553.     #--------------------------------------------------------------------------
  554.     # * Mise à jour, appelée normalement à chaque frame
  555.     #--------------------------------------------------------------------------
  556.     def update
  557.       if @visible
  558.         if MGC.is_changing_map?
  559.           refresh_fading
  560.           MGC.end_change_map
  561.         end
  562.         if parameters[18] != MODE7_SCAN_STEP
  563.           parameters[18] = MODE7_SCAN_STEP
  564.           parameters[19] = 0
  565.           parameters[29] = 0
  566.           @need_refresh = true
  567.         end
  568.         self.alpha = MGC.mode7_angle
  569.         self.zoom = MGC.mode7_zoom
  570.         if Graphics.frame_count & 31 == 0
  571.           parameters[10] += 1
  572.           parameters[10] %= 3
  573.           parameters[29] = MODE7_SCAN_STEP
  574.           unless @need_refresh
  575.             @need_refresh_anim = true
  576.           end
  577.         end
  578.         if parameters[29] > 0 && !@need_refresh && !@need_refresh_anim
  579.           @need_refresh = true
  580.         end
  581.         begin
  582.           if @need_refresh
  583.             parameters[19] += 1
  584.             if parameters[19] == parameters[18]
  585.               parameters[19] = 0
  586.             end
  587.             parameters[11] = 0
  588.             RENDER.call(parameters.__id__)
  589.             parameters[29] -= 1
  590.             if parameters[29] == 0
  591.               @need_refresh = false
  592.             end
  593.           elsif @need_refresh_anim
  594.             parameters[19] += 1
  595.             if parameters[19] == parameters[18]
  596.               parameters[19] = 0
  597.             end
  598.             parameters[11] = 1
  599.             RENDER.call(parameters.__id__)
  600.             parameters[29] -= 1
  601.             if parameters[29] == 0
  602.               @need_refresh_anim = false
  603.             end
  604.           end
  605.           if @initialization && parameters[29] == 0
  606.             @initialization = false
  607.           end
  608.         end while @initialization
  609.         @sprite_render.update
  610.       end
  611.     end
  612.     #--------------------------------------------------------------------------
  613.     # * Flash des couches de la tilemap
  614.     #--------------------------------------------------------------------------
  615.     def flash(color, duration)
  616.       @sprite_render.flash(color, duration)
  617.     end
  618.   end
  619. end
  620.  
  621. #==============================================================================
  622. # ** Game_System
  623. #==============================================================================
  624. class Game_System
  625.   #--------------------------------------------------------------------------
  626.   # * Attributs
  627.   #--------------------------------------------------------------------------
  628.   attr_accessor :mode7_zoom, :mode7_angle, :mode7_active
  629. end
  630.  
  631. #==============================================================================
  632. # ** Game_Map
  633. #==============================================================================
  634. class Game_Map
  635.   attr_accessor :start_mode7, :end_mode7
  636.   #--------------------------------------------------------------------------
  637.   # * Aliased methods
  638.   #--------------------------------------------------------------------------
  639.   unless @already_aliased_mgc_m7a
  640.     alias setup_mgc_m7a setup
  641.     alias set_display_pos_mgc_m7a set_display_pos
  642.     alias scroll_down_mgc_m7a scroll_down
  643.     alias scroll_left_mgc_m7a scroll_left
  644.     alias scroll_right_mgc_m7a scroll_right
  645.     alias scroll_up_mgc_m7a scroll_up
  646.     @already_aliased_mgc_m7a = true
  647.   end
  648.   #--------------------------------------------------------------------------
  649.   # * Setup
  650.   #--------------------------------------------------------------------------
  651.   def setup(map_id)
  652.     setup_mgc_m7a(map_id)
  653.     if is_mode7?
  654.       if MGC.mode7_active
  655.         MGC.start_change_map
  656.       end
  657.       self.start_mode7 = true
  658.     else
  659.       self.end_mode7 = true
  660.     end
  661.   end
  662.   #--------------------------------------------------------------------------
  663.   # * Check if the map is configured for mode 7
  664.   #--------------------------------------------------------------------------
  665.   def is_mode7?
  666.     return MGC::MODE7_MAPS_ID.include?(@map_id) ||
  667.     $data_mapinfos[@map_id].full_name[/\[M7\]/]
  668.   end
  669.   #--------------------------------------------------------------------------
  670.   # * Get default mode7 angle
  671.   #--------------------------------------------------------------------------
  672.   def get_default_mode7_angle
  673.     if $data_mapinfos[@map_id].full_name[/\[A(\d+)\]/]
  674.       return [[$1.to_i, 0].max, 89].min
  675.     else
  676.       return MGC::MODE7_DEFAULT_ANGLE
  677.     end
  678.   end
  679.   #--------------------------------------------------------------------------
  680.   # * Get default mode7 zoom
  681.   #--------------------------------------------------------------------------
  682.   def get_default_mode7_zoom
  683.     if $data_mapinfos[@map_id].full_name[/\[Z(\d+(?:\.\d+)*)\]/]
  684.       return [[$1.to_f, 0.125].max, 8.0].min
  685.     else
  686.       return MGC::MODE7_DEFAULT_ZOOM
  687.     end
  688.   end
  689.   #--------------------------------------------------------------------------
  690.   # * Get default fading distance
  691.   #--------------------------------------------------------------------------
  692.   def get_default_fading_distance
  693.     if $data_mapinfos[@map_id].full_name[/\[FD(\d{1,3})\]/]
  694.       return [$1.to_i, 0].max
  695.     else
  696.       return MGC::MODE7_FADING_DISTANCE
  697.     end
  698.   end
  699.   #--------------------------------------------------------------------------
  700.   # * Get default fading opacity
  701.   #--------------------------------------------------------------------------
  702.   def get_default_fading_opacity
  703.     if $data_mapinfos[@map_id].full_name[/\[FO(\d{1,3})\]/]
  704.       return [[$1.to_i, 0].max, 255].min
  705.     else
  706.       return MGC::MODE7_FADING_OPACITY
  707.     end
  708.   end
  709.   #--------------------------------------------------------------------------
  710.   # * Get default fading tone
  711.   #--------------------------------------------------------------------------
  712.   def get_default_fading_tone
  713.     if $data_mapinfos[@map_id].full_name[/\[FT(\-?\d{1,3}),(\-?\d{1,3}),(\-?\d{1,3})\]/]
  714.       red = [[$1.to_i, -255].max, 255].min
  715.       green = [[$2.to_i, -255].max, 255].min
  716.       blue = [[$3.to_i, -255].max, 255].min
  717.       return Tone.new(red, green, blue)
  718.     else
  719.       return MGC::MODE7_FADING_TONE
  720.     end
  721.   end
  722.   #--------------------------------------------------------------------------
  723.   # * Set Display Position
  724.   #--------------------------------------------------------------------------
  725.   def set_display_pos(x, y)
  726.     if MGC.mode7_active
  727.       if loop_horizontal?
  728.         @display_x = (x + width) % width
  729.       else
  730.         if MGC.mode7_zoom < 1.0 && width * MGC.mode7_zoom < screen_tile_x
  731.           @display_x = (width - screen_tile_x) / 2
  732.         else
  733.           x_min = screen_tile_x * (1.0 / MGC.mode7_zoom - 1.0) / 2
  734.           x_max = width + screen_tile_x * ((1.0 - 1.0 / MGC.mode7_zoom) / 2 - 1)
  735.           x = [x_min, [x, x_max].min].max
  736.           @display_x = x
  737.         end
  738.       end
  739.       if loop_vertical?
  740.         @display_y = (y + height) % height
  741.       else
  742.         if MGC.mode7_zoom < 1.0 && height * MGC.mode7_zoom < screen_tile_y
  743.           @display_y = (height - screen_tile_y) * MGC.mode7_data[1]
  744.         else
  745.           y_min = screen_tile_y * (1.0 / MGC.mode7_zoom - 1.0) * MGC.mode7_data[1]
  746.           y_max = height + screen_tile_y *
  747.           ((1.0 - 1.0 / MGC.mode7_zoom) * (1 - MGC.mode7_data[1]) - 1)
  748.           y = [y_min, [y, y_max].min].max
  749.           @display_y = y
  750.         end
  751.       end
  752.       @parallax_x = x
  753.       @parallax_y = y
  754.     else
  755.       set_display_pos_mgc_m7a(x, y)
  756.     end
  757.   end
  758.   #--------------------------------------------------------------------------
  759.   # * Scroll Down
  760.   #--------------------------------------------------------------------------
  761.   def scroll_down(distance)
  762.     if MGC.mode7_active
  763.       if loop_vertical?
  764.         @display_y += distance
  765.         @display_y %= @map.height
  766.         @parallax_y += distance if @parallax_loop_y
  767.       else
  768.         last_y = @display_y
  769.         if MGC.mode7_zoom < 1.0 && height * MGC.mode7_zoom < screen_tile_y
  770.           @display_y = (height - screen_tile_y) * MGC.mode7_data[1]
  771.         else
  772.           max = height + screen_tile_y *
  773.           ((1.0 - 1.0 / MGC.mode7_zoom) * (1 - MGC.mode7_data[1]) - 1)
  774.           @display_y = [@display_y + distance, max].min
  775.         end
  776.         @parallax_y += @display_y - last_y
  777.       end
  778.     else
  779.       scroll_down_mgc_m7a(distance)
  780.     end
  781.   end
  782.   #--------------------------------------------------------------------------
  783.   # * Scroll Left
  784.   #--------------------------------------------------------------------------
  785.   def scroll_left(distance)
  786.     if MGC.mode7_active
  787.       if loop_horizontal?
  788.         @display_x += @map.width - distance
  789.         @display_x %= @map.width
  790.         @parallax_x -= distance if @parallax_loop_x
  791.       else
  792.         last_x = @display_x
  793.         if MGC.mode7_zoom < 1.0 && width * MGC.mode7_zoom < screen_tile_x
  794.           @display_x = (width - screen_tile_x) / 2
  795.         else
  796.           min = screen_tile_x * (1.0 / MGC.mode7_zoom - 1.0) / 2
  797.           @display_x = [@display_x - distance, min].max
  798.         end
  799.         @parallax_x += @display_x - last_x
  800.       end
  801.     else
  802.       scroll_left_mgc_m7a(distance)
  803.     end
  804.   end
  805.   #--------------------------------------------------------------------------
  806.   # * Scroll Right
  807.   #--------------------------------------------------------------------------
  808.   def scroll_right(distance)
  809.     if MGC.mode7_active
  810.       if loop_horizontal?
  811.         @display_x += distance
  812.         @display_x %= @map.width
  813.         @parallax_x += distance if @parallax_loop_x
  814.       else
  815.         last_x = @display_x
  816.         if MGC.mode7_zoom < 1.0 && width * MGC.mode7_zoom < screen_tile_x
  817.           @display_x = (width - screen_tile_x) / 2
  818.         else
  819.           max = width + screen_tile_x * ((1.0 - 1.0 / MGC.mode7_zoom) / 2 - 1)
  820.           @display_x = [@display_x + distance, max].min
  821.         end
  822.         @parallax_x += @display_x - last_x
  823.       end
  824.     else
  825.       scroll_right_mgc_m7a(distance)
  826.     end
  827.   end
  828.   #--------------------------------------------------------------------------
  829.   # * Scroll Up
  830.   #--------------------------------------------------------------------------
  831.   def scroll_up(distance)
  832.     if MGC.mode7_active
  833.       if loop_vertical?
  834.         @display_y += @map.height - distance
  835.         @display_y %= @map.height
  836.         @parallax_y -= distance if @parallax_loop_y
  837.       else
  838.         last_y = @display_y
  839.         if MGC.mode7_zoom < 1.0 && height * MGC.mode7_zoom < screen_tile_y
  840.           @display_y = (height - screen_tile_y) * MGC.mode7_data[1]
  841.         else
  842.           min = screen_tile_y * (1.0 / MGC.mode7_zoom - 1.0) * MGC.mode7_data[1]
  843.           @display_y = [@display_y - distance, min].max
  844.         end
  845.         @parallax_y += @display_y - last_y
  846.       end
  847.     else
  848.       scroll_up_mgc_m7a(distance)
  849.     end
  850.   end
  851. end
  852.  
  853. #==============================================================================
  854. # ** Game_CharacterBase
  855. #==============================================================================
  856. class Game_CharacterBase
  857.   #--------------------------------------------------------------------------
  858.   # * Public Instance Variables
  859.   #--------------------------------------------------------------------------
  860.   attr_accessor :sprite
  861. end
  862.  
  863. #==============================================================================
  864. # ** Serialisation
  865. #==============================================================================
  866. [:Sprite, :Viewport, :Bitmap, :Font].each {|classname|
  867.   eval(
  868.   "class #{classname}
  869.     def marshal_dump
  870.       return []
  871.     end
  872.     def marshal_load(array)
  873.     end
  874.   end")
  875. }
  876.  
  877. #==============================================================================
  878. # ** Sprite
  879. #==============================================================================
  880. class Sprite
  881.   #--------------------------------------------------------------------------
  882.   # * Aliased methods
  883.   #--------------------------------------------------------------------------
  884.   unless @already_aliased_mgc_m7a
  885.     alias initialize_mgc_m7a initialize
  886.     alias zoom_x_mgc_m7a= zoom_x=
  887.     alias zoom_y_mgc_m7a= zoom_y=
  888.     alias zoom_x_mgc_m7a zoom_x
  889.     alias zoom_y_mgc_m7a zoom_y
  890.     @already_aliased_mgc_m7a = true
  891.   end
  892.   #--------------------------------------------------------------------------
  893.   # * Initialisation
  894.   #--------------------------------------------------------------------------
  895.   def initialize(*args)
  896.     initialize_mgc_m7a(*args)
  897.     @phase_mode7 = false
  898.     self.zoom_x = 1.0
  899.     self.zoom_y = 1.0
  900.   end
  901.   #--------------------------------------------------------------------------
  902.   # * Setter pour l'attribut zoom_x
  903.   #--------------------------------------------------------------------------
  904.   def zoom_x=(new_zoom_x)
  905.     unless @phase_mode7
  906.       @base_zoom_x = new_zoom_x
  907.     end
  908.     self.zoom_x_mgc_m7a = new_zoom_x
  909.   end
  910.   #--------------------------------------------------------------------------
  911.   # * Setter pour l'attribut zoom_y
  912.   #--------------------------------------------------------------------------
  913.   def zoom_y=(new_zoom_y)
  914.     unless @phase_mode7
  915.       @base_zoom_y = new_zoom_y
  916.     end
  917.     self.zoom_y_mgc_m7a = new_zoom_y
  918.   end
  919.   #--------------------------------------------------------------------------
  920.   # * Getter pour l'attribut zoom_x
  921.   #--------------------------------------------------------------------------
  922.   def zoom_x
  923.     return @base_zoom_x
  924.   end
  925.   #--------------------------------------------------------------------------
  926.   # * Getter pour l'attribut zoom_y
  927.   #--------------------------------------------------------------------------
  928.   def zoom_y
  929.     return @base_zoom_y
  930.   end
  931.   #--------------------------------------------------------------------------
  932.   # * Valeur réelle du zoom_x en prenant en compte le zoom de la carte
  933.   #--------------------------------------------------------------------------
  934.   def zoom_x_real
  935.     return zoom_x_mgc_m7a
  936.   end
  937.   #--------------------------------------------------------------------------
  938.   # * Valeur réelle du zoom_y en prenant en compte le zoom de la carte
  939.   #--------------------------------------------------------------------------
  940.   def zoom_y_real
  941.     return zoom_y_mgc_m7a
  942.   end
  943. end
  944.  
  945. #==============================================================================
  946. # ** Sprite_Base
  947. #==============================================================================
  948. class Sprite_Base
  949.   #--------------------------------------------------------------------------
  950.   # * Aliased methods
  951.   #--------------------------------------------------------------------------
  952.   unless @already_aliased_mgc_m7a
  953.     alias animation_set_sprites_mgc_m7a_aprite_base animation_set_sprites
  954.     @already_aliased_mgc_m7a = true
  955.   end
  956.   #--------------------------------------------------------------------------
  957.   # * Set Animation Sprite
  958.   #     frame : Frame data (RPG::Animation::Frame)
  959.   #--------------------------------------------------------------------------
  960.   def animation_set_sprites(frame)
  961.     if MGC.mode7_active
  962.       cell_data = frame.cell_data
  963.       @ani_sprites.each_with_index do |sprite, i|
  964.         next unless sprite
  965.         pattern = cell_data[i, 0]
  966.         if !pattern || pattern < 0
  967.           sprite.visible = false
  968.           next
  969.         end
  970.         sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  971.         sprite.visible = true
  972.         sprite.src_rect.set(pattern % 5 * 192,
  973.           pattern % 100 / 5 * 192, 192, 192)
  974.         if @ani_mirror
  975.           sprite.x = @ani_ox - cell_data[i, 1] * zoom_y_real
  976.           sprite.y = @ani_oy + cell_data[i, 2] * zoom_y_real
  977.           sprite.angle = (360 - cell_data[i, 4])
  978.           sprite.mirror = (cell_data[i, 5] == 0)
  979.         else
  980.           sprite.x = @ani_ox + cell_data[i, 1] * zoom_y_real
  981.           sprite.y = @ani_oy + cell_data[i, 2] * zoom_y_real
  982.           sprite.angle = cell_data[i, 4]
  983.           sprite.mirror = (cell_data[i, 5] == 1)
  984.         end
  985.         sprite.z = self.z + 300 + i
  986.         sprite.ox = 96
  987.         sprite.oy = 96
  988.         sprite.zoom_x = cell_data[i, 3] * zoom_y_real / 100.0
  989.         sprite.zoom_y = cell_data[i, 3] * zoom_y_real / 100.0
  990.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  991.         sprite.blend_type = cell_data[i, 7]
  992.       end
  993.     else
  994.       animation_set_sprites_mgc_m7a_aprite_base(frame)
  995.     end
  996.   end
  997. end
  998.  
  999. #==============================================================================
  1000. # ** Sprite_Character
  1001. #==============================================================================
  1002. class Sprite_Character < Sprite_Base
  1003.   #--------------------------------------------------------------------------
  1004.   # * Aliased methods
  1005.   #--------------------------------------------------------------------------
  1006.   unless @already_aliased_mgc_m7a
  1007.     alias initialize_mgc_m7a_aprite_character initialize
  1008.     alias update_position_mgc_m7a_aprite_character update_position
  1009.     alias update_other_mgc_m7a_aprite_character update_other
  1010.     alias update_balloon_mgc_m7a_aprite_character update_balloon
  1011.     @already_aliased_mgc_m7a = true
  1012.   end
  1013.   #--------------------------------------------------------------------------
  1014.   # * Object Initialization
  1015.   #     character : Game_Character
  1016.   #--------------------------------------------------------------------------
  1017.   def initialize(viewport, character = nil)
  1018.     initialize_mgc_m7a_aprite_character(viewport, character)
  1019.     character.sprite = self
  1020.   end
  1021.   #--------------------------------------------------------------------------
  1022.   # * Update Position
  1023.   #--------------------------------------------------------------------------
  1024.   def update_position
  1025.     if MGC.mode7_active
  1026.       old_x = x
  1027.       old_y = y
  1028.       update_mode7
  1029.       self.z = @character.screen_z
  1030.  
  1031.     else
  1032.       update_position_mgc_m7a_aprite_character
  1033.     end
  1034.   end
  1035.   #--------------------------------------------------------------------------
  1036.   # * Update Other
  1037.   #--------------------------------------------------------------------------
  1038.   def update_other
  1039.     update_other_mgc_m7a_aprite_character
  1040.     if MGC.mode7_active && visible
  1041.       if !@force_mode7_invisible &&
  1042.         y >= MGC.mode7_data[8] &&
  1043.         (y - height * zoom_y_real) < Graphics.height
  1044.       then
  1045.         self.visible = true
  1046.         if y < Graphics.height
  1047.           dat = MGC.mode7_data[9]
  1048.           self.opacity += dat[5, y]
  1049.           self.tone.set(dat[2, y], dat[3, y], dat[4, y])
  1050.         end
  1051.       else
  1052.         self.visible = false
  1053.       end
  1054.     end
  1055.   end
  1056.   #--------------------------------------------------------------------------
  1057.   # * Update Position In Mode7
  1058.   #--------------------------------------------------------------------------
  1059.   def update_mode7
  1060.     y_screen = character.screen_y +
  1061.     (character.is_a?(Game_Vehicle) ? character.altitude : 0)
  1062.     y_init = MGC.mode7_data[2] * (y_screen - MGC.mode7_data[0])
  1063.     if y_init < - (MGC::MODE7_VIEW_LIMIT << 5) - MGC.mode7_data[0] ||
  1064.       y_init > Graphics.height
  1065.     then
  1066.       @force_mode7_invisible = true
  1067.       return
  1068.     else
  1069.       @force_mode7_invisible = false
  1070.     end
  1071.     x_init = MGC.mode7_data[2] * (character.screen_x - (Graphics.width >> 1))
  1072.     self.y = (MGC.mode7_data[0] + (MGC.mode7_data[5] * y_init *
  1073.     MGC.mode7_data[3]) / (MGC.mode7_data[5] - y_init * MGC.mode7_data[4])).to_i
  1074.     zx = MGC.mode7_data[6] * y + MGC.mode7_data[7]
  1075.     self.x = ((Graphics.width >> 1) + zx * x_init).to_i
  1076.     @phase_mode7 = true
  1077.     self.zoom_x = MGC.mode7_data[2] * zx
  1078.     self.zoom_y = zoom_x_real
  1079.     @phase_mode7 = false
  1080.     if character.is_a?(Game_Vehicle)
  1081.       self.y -= character.altitude * zoom_y_real
  1082.     end
  1083.   end
  1084.   #--------------------------------------------------------------------------
  1085.   # * Update Balloon Icon
  1086.   #--------------------------------------------------------------------------
  1087.   def update_balloon
  1088.     update_balloon_mgc_m7a_aprite_character
  1089.     if MGC.mode7_active && @balloon_duration > 0
  1090.       @balloon_sprite.y = y - height * zoom_y_real
  1091.       @balloon_sprite.zoom_x = zoom_x_real
  1092.       @balloon_sprite.zoom_y = zoom_y_real
  1093.     end
  1094.   end
  1095. end
  1096.  
  1097. #==============================================================================
  1098. # ** Spriteset_Map
  1099. #==============================================================================
  1100. class Spriteset_Map
  1101.   #--------------------------------------------------------------------------
  1102.   # * Aliased methods
  1103.   #--------------------------------------------------------------------------
  1104.   unless @already_aliased_mgc_m7a
  1105.     alias initialize_mgc_m7a initialize
  1106.     alias create_tilemap_mgc_m7a create_tilemap
  1107.     alias update_mgc_m7a update
  1108.     alias update_shadow_mgc_m7a update_shadow
  1109.     @already_aliased_mgc_m7a = true
  1110.   end
  1111.   #--------------------------------------------------------------------------
  1112.   # * Object Initialization
  1113.   #--------------------------------------------------------------------------
  1114.   def initialize
  1115.     MGC.spriteset = self
  1116.     initialize_mgc_m7a
  1117.   end
  1118.   #--------------------------------------------------------------------------
  1119.   # * Lance le mode 7
  1120.   #--------------------------------------------------------------------------
  1121.   def start_mode7
  1122.     unless @tilemap_mode7
  1123.       MGC.initialize_mode7
  1124.       @tilemap_classic = @tilemap
  1125.       @tilemap_mode7 = MGC::Mode7_Map.new(@viewport1)
  1126.       @tilemap_mode7.map_data = $game_map.data
  1127.       @tilemap = @tilemap_mode7
  1128.       load_tileset
  1129.     end
  1130.     @tilemap_mode7.visible = true
  1131.     @tilemap_classic.visible = false
  1132.     @tilemap = @tilemap_mode7
  1133.     MGC.mode7_active = true
  1134.   end
  1135.   #--------------------------------------------------------------------------
  1136.   # * Met fin au mode 7
  1137.   #--------------------------------------------------------------------------
  1138.   def end_mode7
  1139.     if @tilemap_mode7
  1140.       @tilemap_mode7.visible = false
  1141.       @tilemap_classic.visible = true
  1142.       @tilemap = @tilemap_classic
  1143.     end
  1144.     MGC.mode7_active = false
  1145.   end
  1146.   #--------------------------------------------------------------------------
  1147.   # * Create Tilemap
  1148.   #--------------------------------------------------------------------------
  1149.   def create_tilemap
  1150.     create_tilemap_mgc_m7a
  1151.     unless $game_system.mode7_active
  1152.       MGC.mode7_active = false
  1153.     end
  1154.     if $game_map.is_mode7? || $game_system.mode7_active
  1155.       start_mode7
  1156.     end
  1157.   end
  1158.   #--------------------------------------------------------------------------
  1159.   # * Update
  1160.   #--------------------------------------------------------------------------
  1161.   def update
  1162.     MGC.update_mode7
  1163.     if $game_map.start_mode7
  1164.       start_mode7
  1165.       $game_map.start_mode7 = false
  1166.     elsif $game_map.end_mode7
  1167.       end_mode7
  1168.       $game_map.end_mode7 = false
  1169.     end
  1170.     update_mgc_m7a
  1171.   end
  1172.   #--------------------------------------------------------------------------
  1173.   # * Update Airship Shadow Sprite
  1174.   #--------------------------------------------------------------------------
  1175.   def update_shadow
  1176.     if MGC.mode7_active
  1177.       airship_sprite = $game_map.airship.sprite
  1178.       @shadow_sprite.x = airship_sprite.x
  1179.       @shadow_sprite.y = airship_sprite.y + $game_map.airship.altitude *
  1180.       airship_sprite.zoom_y_real
  1181.       @shadow_sprite.opacity = $game_map.airship.altitude * 8 *
  1182.       airship_sprite.opacity
  1183.       @shadow_sprite.zoom_x = airship_sprite.zoom_x_real
  1184.       @shadow_sprite.zoom_y = airship_sprite.zoom_y_real
  1185.       @shadow_sprite.update
  1186.     else
  1187.       update_shadow_mgc_m7a
  1188.     end
  1189.   end
  1190. end
  1191.  
  1192. #==============================================================================
  1193. # ** Scene_Map
  1194. #==============================================================================
  1195. class Scene_Map < Scene_Base
  1196.   #--------------------------------------------------------------------------
  1197.   # * Aliased methods
  1198.   #--------------------------------------------------------------------------
  1199.   unless @already_aliased_mgc_m7a
  1200.     alias update_call_menu_mgc_m7a update_call_menu
  1201.     @already_aliased_mgc_m7a = true
  1202.   end
  1203.   #--------------------------------------------------------------------------
  1204.   # * Determine if Menu is Called due to Cancel Button
  1205.   #--------------------------------------------------------------------------
  1206.   def update_call_menu
  1207.     unless MGC.effect?
  1208.       update_call_menu_mgc_m7a
  1209.     end
  1210.   end
  1211. end
  1212.  
  1213. #============================================================================
  1214. # ** RPG::MapInfo
  1215. #============================================================================
  1216. class RPG::MapInfo
  1217.   # defines the map name as the name without anything within brackets,
  1218.   # including brackets
  1219.   def name
  1220.     return @name.gsub(/\[.*\]/) {''}
  1221.   end
  1222.   #--------------------------------------------------------------------------
  1223.   # the original name with the codes
  1224.   def full_name
  1225.     return @name
  1226.   end
  1227. end

Lv3.寻梦者

梦石
0
星屑
959
在线时间
172 小时
注册时间
2019-8-15
帖子
142
2
发表于 2020-1-3 17:52:35 | 只看该作者
这个也可以呀......
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-4-25 12:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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