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

Project1

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

[已经过期] 有没有专门用来清理内存的脚本?最近总是内存溢出……

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
145 小时
注册时间
2011-2-5
帖子
109
跳转到指定楼层
1
发表于 2015-8-11 17:19:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
最好能短一些……我好把它插入到昼夜系统里~~

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-8-11 19:47:52 | 只看该作者
对于现在的电脑来说,VA消耗的内存很小,要溢出就更难了

请确认你的问题是内存溢出而不是精灵未释放之类的

点评

另外如果使用了国外的某个渐变字脚本的话,请拿掉,因为它将每个字符都单独作为Bitmap缓存了……  发表于 2015-8-11 19:53
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
145 小时
注册时间
2011-2-5
帖子
109
3
 楼主| 发表于 2015-8-11 21:39:26 | 只看该作者
taroxd 发表于 2015-8-11 19:47
对于现在的电脑来说,VA消耗的内存很小,要溢出就更难了

请确认你的问题是内存溢出而不是精灵未释放之类的 ...

其实还是那个伪3D脚本……觉得应该是精灵未释放……可是脚本小白无力查错……
  1. #====================================================================
  2. # Mode 7 Ace
  3. # v.1.9
  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_1_9.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. # - MODE7_TERRAIN_TAGS : liste de valeurs de terrain tags pour lesquelles les
  50. #         tiles doivent être dessinés verticalement en mode 7. Si le paramètre
  51. #         MODE7_VERTICAL_TILES_TYPE n'a pas sa valeur égale à 0, utiliser
  52. #         plusieurs valeurs permet de séparer des regroupements de tiles
  53. #         contigus.
  54. # - MODE7_VERTICAL_TILES_TYPE :
  55. #         - 0 : aucun regroupement des tiles verticaux même si des tiles voisins
  56. #               ont le même terrain tag. Pour un tile avec un terrain tag
  57. #               configuré pour être dessiné verticalement, un sprite de
  58. #               dimensions 32*32 est créé. A priori aucun intérêt sans la
  59. #               rotation, car aura le même effet que la valeur 2 mais avec
  60. #               plus de sprites à l'écran, donc plus de ralentissements.
  61. #         - 1 : regroupement des tiles verticaux contigus sur la même colonne
  62. #               ayant le même terrain tag. Un sprite est créé par regroupement,
  63. #               le tile le plus bas du regroupement servant de base au sprite.
  64. #               A priori aucun intérêt sans la rotation, car aura le même effet
  65. #               que la valeur 3 mais avec plus de sprites à afficher.
  66. #         - 2 : regroupement des tiles verticaux contigus sur la même ligne
  67. #               ayant le même terrain tag. Un sprite est créé par regroupement,
  68. #               l'origine horizontale étant fixée au milieu du regroupement.
  69. #         - 3 : regroupement des tiles verticaux contigus ayant le même
  70. #               terrain tag, quelle que soit la ligne ou la colonne. Un sprite
  71. #               est créé par regroupement, le tile le plus bas du regroupement
  72. #               servant de base au sprite et l'origine horizontale étant fixée
  73. #               au milieu du regroupement. Valeur par défaut.
  74. # - MODE7_ALWAYS_DRAW_TILES_ON_MAP :
  75. #         - 0 : les tiles verticaux ne sont pas dessinés couchés sur la carte.
  76. #               Valeur par défaut.
  77. #         - 1 : les tiles verticaux sont également dessinés couchés sur la carte.
  78. # - MODE7_PARALLAXED_MAPS_ID : Contient la liste des id des cartes en mode 7
  79. #         pour lesquelles le panorama est utilisé en tant que couche inférieure.
  80. #         Vous pouvez utiliser un second panorama pour le fond, il faut ajouter
  81. #         dans les notes de la carte le texte suivant : [m7a_pano:nom_du_fichier]
  82. #
  83. # Utilisation :
  84. # Commandes utilisables comme commandes d'évènement avec Script... :
  85. # - MGC.start_mode7 : lance le mode 7 pour la carte
  86. # - MGC.to_mode7_angle(nouvel angle, durée de transition)
  87. # - MGC.to_mode7_zoom(nouvelle valeur de zoom, durée de transition)
  88. # - MGC.end_mode7 : quitte le mode 7
  89. # - MGC.set_mode7_scan(nouvelle valeur) : modifie le paramètre MODE7_SCAN_STEP
  90. #
  91. # Vous pouvez ajouter des commandes dans le nom des cartes pour forcer le
  92. # paramétrage du mode 7 de la carte. Les paramètres dans le nom de la
  93. # carte sont prioritaires par rapport à ceux dans la partie CONFIGURATION
  94. # - [M7] : active le mode 7 pour la carte
  95. # - [Ax], où x est un entier entre 0 et 89 : angle de la carte
  96. # - [Zx], où x est un décimal entre 0.125 et 8.0 : zoom de la carte
  97. # - [FDx], où x est un entier positif : nombre de tiles avant l'horizon
  98. #         subissant un dégradé de ton et/ou d'opacité
  99. # - [FTx,y,z], où x, y et z sont des entiers entre -255 et 255 :
  100. #         composantes de couleur R, G, B vers lesquelles tend le dégradé
  101. #         de ton à l'horizon
  102. # - [FOx], où x est un entier entre 0 et 255 : opacité vers laquelle
  103. #         tend le dégradé d'opacité ton à l'horizon
  104. # - [P] : le panorama est utilisé en tant que couche inférieure de la carte
  105. # Exemple :
  106. # My Worldmap [M7][A55][Z0.5][FD20][FT128,64,-32][FO128]
  107. #====================================================================
  108. module MGC
  109.   #--------------------------------------------------------------------------
  110.   # * CONFIGURATION
  111.   #--------------------------------------------------------------------------
  112.   MODE7_MAPS_ID = []
  113.   MODE7_DEFAULT_ZOOM = 1.0
  114.   MODE7_DEFAULT_ANGLE = 0
  115.   MODE7_VIEW_LIMIT = 26
  116.   MODE7_FADING_DISTANCE = 13
  117.   MODE7_FADING_TONE = Tone.new(64, 64, 128)
  118.   MODE7_FADING_OPACITY = 0
  119.   MODE7_SCAN_STEP = 2
  120.   MODE7_TERRAIN_TAGS = [1, 2] # [1.7]
  121.   MODE7_VERTICAL_TILES_TYPE = 3 # [1.7]
  122.   MODE7_ALWAYS_DRAW_TILES_ON_MAP = 0 # [1.7]
  123.   MODE7_PARALLAXED_MAPS_ID = [] # [1.9]
  124.   #--------------------------------------------------------------------------
  125.   # * Initialisation
  126.   #--------------------------------------------------------------------------
  127.   @mode7_zoom = 1.0
  128.   @mode7_active = false
  129.   #--------------------------------------------------------------------------
  130.   # * Lancement du mode 7
  131.   #--------------------------------------------------------------------------
  132.   def self.start_mode7
  133.     @end_mode7 = false
  134.     @spriteset.start_mode7
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # * Fin du mode 7
  138.   #--------------------------------------------------------------------------
  139.   def self.end_mode7
  140.     @end_mode7 = true
  141.     self.to_mode7_zoom(1.0, 1)
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # * Setter pour l'attribut spriteset
  145.   #--------------------------------------------------------------------------
  146.   def self.spriteset=(spriteset)
  147.     @spriteset = spriteset
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # * Initialisation des données du mode 7
  151.   #--------------------------------------------------------------------------
  152.   def self.initialize_mode7(reset = false) # [1.9]
  153.     if reset
  154.       self.mode7_angle = $game_map.get_default_mode7_angle
  155.       @mode7_zoom = $game_map.get_default_mode7_zoom
  156.     else
  157.       self.mode7_angle = $game_system.mode7_angle ? $game_system.mode7_angle :
  158.       $game_map.get_default_mode7_angle
  159.       @mode7_zoom = $game_system.mode7_zoom ? $game_system.mode7_zoom :
  160.       $game_map.get_default_mode7_zoom
  161.     end
  162.     @mode7_angle_duration = 0
  163.     @mode7_zoom_incr = Math.log(@mode7_zoom) / Math.log(2)
  164.     @mode7_zoom_duration = 0
  165.     pivot = (Graphics.height >> 1) + 12
  166.     @mode7_data = [pivot, pivot.to_f / Graphics.height, 1.0, 1.0, 0,
  167.     Graphics.height, 0, 0, 0, 0]
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # * Change Map
  171.   #--------------------------------------------------------------------------
  172.   def self.start_change_map
  173.     self.mode7_angle = $game_map.get_default_mode7_angle
  174.     @mode7_angle_duration = 0
  175.     @mode7_zoom = $game_map.get_default_mode7_zoom
  176.     @mode7_zoom_incr = Math.log(@mode7_zoom) / Math.log(2)
  177.     @mode7_zoom_duration = 0
  178.     @change_map = true
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # * Is Changing Map ?
  182.   #--------------------------------------------------------------------------
  183.   def self.is_changing_map?
  184.     return @change_map
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # * End Change Map
  188.   #--------------------------------------------------------------------------
  189.   def self.end_change_map
  190.     @change_map = false
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # * Getter pour l'attribut mode7_data
  194.   #--------------------------------------------------------------------------
  195.   def self.mode7_data
  196.     return @mode7_data
  197.   end
  198.   #--------------------------------------------------------------------------
  199.   # * Getter pour l'attribut mode7_zoom
  200.   #--------------------------------------------------------------------------
  201.   def self.mode7_zoom
  202.     return @mode7_zoom
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # * Getter pour l'attribut mode7_angle
  206.   #--------------------------------------------------------------------------
  207.   def self.mode7_angle
  208.     return @mode7_angle
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # * Getter pour l'attribut mode7_active
  212.   #--------------------------------------------------------------------------
  213.   def self.mode7_active
  214.     return @mode7_active
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # * Setter pour l'attribut mode7_active
  218.   #--------------------------------------------------------------------------
  219.   def self.mode7_active=(flag)
  220.     $game_system.mode7_active = flag
  221.     @mode7_active = flag
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # * Setter pour l'attribut mode7_zoom
  225.   #--------------------------------------------------------------------------
  226.   def self.mode7_zoom=(zoom_value)
  227.     unless mode7_zoom == zoom_value
  228.       if zoom_value < 0.125 || zoom_value > 8.0 then return end
  229.       @mode7_zoom = zoom_value
  230.       $game_system.mode7_zoom = @mode7_zoom
  231.       $game_player.center($game_player.x, $game_player.y)
  232.     end
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # * Incrémentation de la valeur du zoom du mode 7
  236.   #--------------------------------------------------------------------------
  237.   def self.incr_mode7_zoom(val = 0.02)
  238.     @mode7_zoom_incr += val
  239.     new_zoom = 2 ** @mode7_zoom_incr
  240.     self.mode7_zoom = new_zoom
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # * Pour aller progressivement vers une nouvelle valeur de zoom du mode 7
  244.   #--------------------------------------------------------------------------
  245.   def self.to_mode7_zoom(new_zoom, duration)
  246.     unless mode7_zoom == new_zoom
  247.       if new_zoom < 0.125 || new_zoom > 8.0 then return end
  248.       @mode7_zoom_duration = duration
  249.       target_zoom_incr = Math.log(new_zoom) / Math.log(2)
  250.       @mode7_zoom_step = (target_zoom_incr - @mode7_zoom_incr) / duration
  251.       @target_mode7_zoom = new_zoom
  252.     end
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # * Setter pour l'attribut mode7_angle
  256.   #--------------------------------------------------------------------------
  257.   def self.mode7_angle=(new_angle)
  258.     unless new_angle == @mode7_angle
  259.       @mode7_angle = [[new_angle, 0].max, 89].min
  260.       @mode7_angle_real = @mode7_angle
  261.       $game_system.mode7_angle = @mode7_angle
  262.     end
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # * Autre setter pour l'attribut mode7_angle, ne réinitialisant pas @mode7_angle_real
  266.   #--------------------------------------------------------------------------
  267.   def self.set_mode7_angle(new_angle)
  268.     unless new_angle == @mode7_angle
  269.       @mode7_angle = [[new_angle, 0].max, 89].min
  270.       $game_system.mode7_angle = @mode7_angle
  271.     end
  272.   end
  273.   #--------------------------------------------------------------------------
  274.   # * Incrémentation de la valeur de l'angle du mode 7
  275.   #--------------------------------------------------------------------------
  276.   def self.incr_mode7_angle
  277.     @mode7_angle_real += @mode7_angle_step
  278.     self.set_mode7_angle(@mode7_angle_real.to_i)
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # * Pour aller progressivement vers une nouvelle valeur de l'angle du mode 7
  282.   #--------------------------------------------------------------------------
  283.   def self.to_mode7_angle(new_angle, duration)
  284.     unless @mode7_angle == new_angle
  285.       new_angle = [[new_angle, 0].max, 89].min
  286.       @mode7_angle_duration = duration
  287.       @mode7_angle_step = (new_angle - @mode7_angle).to_f / duration
  288.       @target_mode7_angle = new_angle
  289.     end
  290.   end
  291.   #--------------------------------------------------------------------------
  292.   # * Mise à jour du mode 7
  293.   #--------------------------------------------------------------------------
  294.   def self.update_mode7
  295.     if @mode7_active
  296.       if @mode7_zoom_duration > 0
  297.         @mode7_zoom_duration -= 1
  298.         if @mode7_zoom_duration == 0
  299.           self.mode7_zoom = @target_mode7_zoom
  300.         else
  301.           self.incr_mode7_zoom(@mode7_zoom_step)
  302.         end
  303.       elsif @mode7_angle_duration > 0
  304.         @mode7_angle_duration -= 1
  305.         if @mode7_angle_duration == 0
  306.           self.mode7_angle = @target_mode7_angle
  307.         else
  308.           self.incr_mode7_angle
  309.         end
  310.       elsif @end_mode7
  311.         @spriteset.end_mode7
  312.         @end_mode7 = false
  313.       end
  314.     end
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # * Vérifie si un effet est en cours
  318.   #--------------------------------------------------------------------------
  319.   def self.effect?
  320.     return @mode7_active && (@mode7_zoom_duration > 0 ||
  321.     @mode7_angle_duration > 0 || @end_mode7)
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # * Modifie la valeur de la méthode de rafraîchissement de l'écran
  325.   #--------------------------------------------------------------------------
  326.   def self.set_mode7_scan(new_value)
  327.     new_value = [[new_value, 1].max, 3].min
  328.     unless MODE7_SCAN_STEP == new_value
  329.       self.const_set(:MODE7_SCAN_STEP, new_value)
  330.     end
  331.   end
  332.   #==============================================================================
  333.   # ** MGC::Mode7_Map
  334.   #==============================================================================
  335.   class Mode7_Map
  336.     #--------------------------------------------------------------------------
  337.     # * Attributs
  338.     #--------------------------------------------------------------------------
  339.     attr_reader :viewport, :visible, :ox, :oy, :opacity, :blend_type, :color,
  340.     :tone, :wave_amp, :wave_length, :wave_speed, :wave_phase, :zoom, :map_data,
  341.     :flags
  342.     attr_accessor :bitmaps, :flash_data
  343.     attr_reader :alpha, :parameters
  344.     attr_reader :param_tiles # [1.7]
  345.     attr_reader :map_id # [1.9]
  346.     #--------------------------------------------------------------------------
  347.     # * Constantes
  348.     #--------------------------------------------------------------------------
  349.     RENDER = Win32API.new("MGC_Mode7_Ace_Rot_1_9", "renderMode7", "l", "l")
  350.     #--------------------------------------------------------------------------
  351.     # * Initialisation
  352.     #--------------------------------------------------------------------------
  353.     def initialize(viewport)
  354.       @viewport = viewport
  355.       self.bitmaps = [0, 0, 0, 0, 0, 0, 0, 0, 0]
  356.       @map_data = 0
  357.       @flags = 0
  358.       self.flash_data = nil
  359.       @cx = Graphics.width >> 1
  360.       @cy = Graphics.height >> 1
  361.       @sprite_render = Sprite.new(viewport)
  362.       @render = Bitmap.new(Graphics.width, Graphics.height)
  363.       @sprite_render.bitmap = @render
  364.       @sprite_render.x = 0
  365.       @sprite_render.y = 0
  366.       @sprite_render.z = 0
  367.       @zoom = 1.0
  368.       @view_limit = MODE7_VIEW_LIMIT << 5
  369.       m7_data = Table.new(6, Graphics.height) # [1.7]
  370.       @parameters = [@render, 0, map_data, bitmaps,
  371.       Cache.picture('autotiles_data'), Cache.picture('autotiles_data_small'),
  372.       Cache.picture('autotiles_data_xsmall'), 0, 0, 0, 0, 0, 0, 0, 4096,
  373.       100, $game_map.loop_horizontal?, $game_map.loop_vertical?, MODE7_SCAN_STEP,
  374.       0, m7_data, 2048, 0, MGC.mode7_data[5], MGC.mode7_data[0], 0, 0, 0, 0, 0,
  375.       0, 0, 0, 0, 0, 0]
  376.       @parameters << $game_map.tileset.flags # 36 [1.7]
  377.       @parameters << MGC::MODE7_ALWAYS_DRAW_TILES_ON_MAP # 37 [1.7]
  378.       @parameters << MGC::MODE7_TERRAIN_TAGS # 38 [1.7]
  379.       @parameters << 0 # 39 [1.9]
  380.       refresh_fading
  381.       MGC.mode7_data[9] = m7_data
  382.       self.alpha = 0
  383.       self.visible = true
  384.       self.zoom = 1.0
  385.       self.ox = 0
  386.       self.oy = 0
  387.       self.opacity = 255
  388.       self.blend_type = 0
  389.       self.color = Color.new
  390.       self.tone = Tone.new
  391.       self.wave_amp = 0
  392.       self.wave_length = 180
  393.       self.wave_speed = 360
  394.       self.wave_phase = 0.0
  395.       @initialization = true
  396.       @param_tiles = [Bitmap.new(32, 32), bitmaps,
  397.       Cache.picture('autotiles_data'),
  398.       Cache.picture('autotiles_data_small'),
  399.       Cache.picture('autotiles_data_xsmall'), 0, [0, 0, 0]] # [1.7]
  400.       @map_id = $game_map.map_id # [1.9]
  401.     end
  402.     #--------------------------------------------------------------------------
  403.     # * Refresh Fading
  404.     #--------------------------------------------------------------------------
  405.     def refresh_fading
  406.       fading_dist = $game_map.get_default_fading_distance << 5
  407.       fading_begin = Graphics.height + @view_limit - fading_dist
  408.       @parameters[30] = fading_begin
  409.       @parameters[31] = fading_dist
  410.       @parameters[32] = $game_map.get_default_fading_tone.red.to_i
  411.       @parameters[33] = $game_map.get_default_fading_tone.green.to_i
  412.       @parameters[34] = $game_map.get_default_fading_tone.blue.to_i
  413.       @parameters[35] = $game_map.get_default_fading_opacity
  414.     end
  415.     #--------------------------------------------------------------------------
  416.     # * Refresh all the parameters dependent on the angle of slant
  417.     #--------------------------------------------------------------------------
  418.     def refresh_alpha
  419.       # angle of slant
  420.       alpha_rad = (Math::PI * alpha) / 180
  421.       cos_alpha_real = Math.cos(alpha_rad)
  422.       sin_alpha_real = Math.sin(alpha_rad)
  423.       cos_alpha = (2048 * cos_alpha_real).to_i
  424.       sin_alpha = (2048 * sin_alpha_real).to_i
  425.       distance_h = MGC.mode7_data[5]
  426.       pivot = MGC.mode7_data[0]
  427.       # h0,  z0 : intermediate values used to calculate the slope
  428.       h0 = (-distance_h * pivot * cos_alpha) / ((distance_h << 11) +
  429.       pivot * sin_alpha) + pivot
  430.       z0 = (distance_h << 11).to_f / ((distance_h << 11) + pivot * sin_alpha)
  431.       # slope
  432.       slope_value = (1.0 - z0) / (pivot - h0)
  433.       slope_value_map = (131072 * slope_value).to_i
  434.       corrective_value = 1.0 - pivot * slope_value
  435.       corrective_value_map = (131072 * corrective_value).to_i
  436.       last_line = ((-pivot - @view_limit) * zoom).to_i
  437.       height_limit = (distance_h * last_line * cos_alpha) /
  438.       ((distance_h << 11) - last_line * sin_alpha) + pivot
  439.       height_limit = [height_limit.to_i, 0].max
  440.       parameters[21] = cos_alpha
  441.       parameters[22] = sin_alpha
  442.       parameters[25] = slope_value_map
  443.       parameters[26] = corrective_value_map
  444.       parameters[27] = height_limit
  445.       parameters[29] = MODE7_SCAN_STEP
  446.       @need_refresh = true
  447.       MGC.mode7_data[3] = cos_alpha_real
  448.       MGC.mode7_data[4] = sin_alpha_real
  449.       MGC.mode7_data[6] = slope_value
  450.       MGC.mode7_data[7] = corrective_value
  451.       MGC.mode7_data[8] = height_limit     
  452.     end
  453.     #--------------------------------------------------------------------------
  454.     # * Setter pour l'attribut map_data
  455.     #--------------------------------------------------------------------------
  456.     def map_data=(new_map_data)
  457.       @map_data = new_map_data
  458.       parameters[2] = @map_data
  459.     end
  460.     #--------------------------------------------------------------------------
  461.     # * Charge le panorama en mode 7 [1.9]
  462.     #--------------------------------------------------------------------------
  463.     def parallax=(new_parallax)
  464.       if new_parallax
  465.         parameters[39] = new_parallax
  466.       else
  467.         parameters[39] = 0
  468.       end
  469.     end
  470.     #--------------------------------------------------------------------------
  471.     # * Setter pour l'attribut flags
  472.     #--------------------------------------------------------------------------
  473.     def flags=(new_flags)
  474.       @flags = new_flags
  475.       parameters[7] = @flags
  476.     end
  477.     #--------------------------------------------------------------------------
  478.     # * Setter pour l'attribut zoom
  479.     #--------------------------------------------------------------------------
  480.     def zoom=(new_zoom)
  481.       unless zoom == new_zoom
  482.         @zoom = new_zoom
  483.         parameters[14] = (4096.0 / new_zoom).to_i
  484.         MGC.mode7_data[2] = new_zoom
  485.         vox = @ox
  486.         @ox = nil
  487.         self.ox = vox
  488.         voy = @oy
  489.         @oy = nil
  490.         self.oy = voy
  491.         @need_refresh = true
  492.         parameters[29] = MODE7_SCAN_STEP
  493.         @need_refresh = true
  494.         last_line = ((-parameters[24] - @view_limit) * zoom).to_i
  495.         height_limit = (parameters[23] * last_line * parameters[21]) /
  496.         ((parameters[23] << 11) - last_line * parameters[22]) + parameters[24]
  497.         parameters[27] = [height_limit.to_i, 0].max
  498.         MGC.mode7_data[8] = parameters[27]
  499.       end
  500.     end
  501.     #--------------------------------------------------------------------------
  502.     # * Setter pour l'attribut alpha
  503.     #--------------------------------------------------------------------------
  504.     def alpha=(new_alpha)
  505.       unless new_alpha == alpha
  506.         @alpha = new_alpha
  507.         refresh_alpha
  508.       end
  509.     end
  510.     #--------------------------------------------------------------------------
  511.     # * Setter pour l'attribut shadow_opacity
  512.     #--------------------------------------------------------------------------
  513.     def shadow_opacity=(value)
  514.       @parameters[15] = [[value, 0].max, 255].min
  515.     end
  516.     #--------------------------------------------------------------------------
  517.     # * Setter pour l'attribut visible
  518.     #--------------------------------------------------------------------------
  519.     def visible=(flag)
  520.       @visible = flag
  521.       @sprite_render.visible = flag
  522.     end
  523.     #--------------------------------------------------------------------------
  524.     # * Setter pour l'attribut ox
  525.     #--------------------------------------------------------------------------
  526.     def ox=(new_ox)
  527.       new_ox = new_ox.to_i
  528.       unless new_ox == @ox
  529.         @ox = new_ox
  530.         @need_refresh = true
  531.         parameters[8] = @ox
  532.         parameters[29] = MODE7_SCAN_STEP
  533.       end
  534.     end
  535.     #--------------------------------------------------------------------------
  536.     # * Setter pour l'attribut oy
  537.     #--------------------------------------------------------------------------
  538.     def oy=(new_oy)
  539.       new_oy = new_oy.to_i
  540.       unless new_oy == @oy
  541.         @oy = new_oy
  542.         @need_refresh = true
  543.         parameters[9] = @oy
  544.         parameters[29] = MODE7_SCAN_STEP
  545.       end
  546.     end
  547.     #--------------------------------------------------------------------------
  548.     # * Setter pour l'attribut opacity
  549.     #--------------------------------------------------------------------------
  550.     def opacity=(new_opacity)
  551.       @opacity = new_opacity
  552.       @sprite_render.opacity = new_opacity
  553.     end
  554.     #--------------------------------------------------------------------------
  555.     # * Setter pour l'attribut blend_type
  556.     #--------------------------------------------------------------------------
  557.     def blend_type=(new_blend_type)
  558.       @blend_type = new_blend_type
  559.       @sprite_render.blend_type = new_blend_type
  560.     end
  561.     #--------------------------------------------------------------------------
  562.     # * Setter pour l'attribut color
  563.     #--------------------------------------------------------------------------
  564.     def color=(new_color)
  565.       @color = new_color
  566.       @sprite_render.color = new_color
  567.     end
  568.     #--------------------------------------------------------------------------
  569.     # * Setter pour l'attribut tone
  570.     #--------------------------------------------------------------------------
  571.     def tone=(new_tone)
  572.       @tone = new_tone
  573.       @sprite_render.tone = new_tone
  574.     end
  575.     #--------------------------------------------------------------------------
  576.     # * Setter pour l'attribut wave_amp
  577.     #--------------------------------------------------------------------------
  578.     def wave_amp=(new_wave_amp)
  579.       @wave_amp = new_wave_amp
  580.       @sprite_render.wave_amp = new_wave_amp
  581.     end
  582.     #--------------------------------------------------------------------------
  583.     # * Setter pour l'attribut wave_length
  584.     #--------------------------------------------------------------------------
  585.     def wave_length=(new_wave_length)
  586.       @wave_length = new_wave_length
  587.       @sprite_render.wave_length = new_wave_length
  588.     end
  589.     #--------------------------------------------------------------------------
  590.     # * Setter pour l'attribut wave_speed
  591.     #--------------------------------------------------------------------------
  592.     def wave_speed=(new_wave_speed)
  593.       @wave_speed = new_wave_speed
  594.       @sprite_render.wave_speed = new_wave_speed
  595.     end
  596.     #--------------------------------------------------------------------------
  597.     # * Setter pour l'attribut wave_phase
  598.     #--------------------------------------------------------------------------
  599.     def wave_phase=(new_wave_phase)
  600.       @wave_phase = new_wave_phase
  601.       @sprite_render.wave_phase = new_wave_phase
  602.     end
  603.     #--------------------------------------------------------------------------
  604.     # * Libération de l'instance
  605.     #--------------------------------------------------------------------------
  606.     def dispose
  607.       @render.dispose
  608.       @sprite_render.dispose
  609.       clear_vertical_tiles # [1.7]
  610.       @param_tiles[0].dispose
  611.     end
  612.     #--------------------------------------------------------------------------
  613.     # * Suppression des tiles verticaux [1.7]
  614.     #--------------------------------------------------------------------------
  615.     def clear_vertical_tiles
  616.       if @vertical_tiles
  617.         @vertical_tiles.each {|sprite| sprite.dispose}
  618.         @vertical_tiles.clear
  619.       end
  620.     end
  621.     #--------------------------------------------------------------------------
  622.     # * Retourne true si l'instance a été libérée
  623.     #--------------------------------------------------------------------------
  624.     def disposed?
  625.       return @render.disposed?
  626.     end
  627.     #--------------------------------------------------------------------------
  628.     # * Mise à jour, appelée normalement à chaque frame
  629.     #--------------------------------------------------------------------------
  630.     def update
  631.       if @visible
  632.         if MGC.is_changing_map?
  633.           refresh_fading
  634.           MGC.end_change_map
  635.         end
  636.         if parameters[18] != MODE7_SCAN_STEP
  637.           parameters[18] = MODE7_SCAN_STEP
  638.           parameters[19] = 0
  639.           parameters[29] = 0
  640.           @need_refresh = true
  641.         end
  642.         self.alpha = MGC.mode7_angle
  643.         self.zoom = MGC.mode7_zoom
  644.         if Graphics.frame_count & 31 == 0
  645.           parameters[10] += 1
  646.           parameters[10] %= 3
  647.           parameters[29] = MODE7_SCAN_STEP
  648.           unless @need_refresh
  649.             @need_refresh_anim = true
  650.           end
  651.         end
  652.         if parameters[29] > 0 && !@need_refresh && !@need_refresh_anim
  653.           @need_refresh = true
  654.         end
  655.         begin
  656.           if @need_refresh
  657.             parameters[19] += 1
  658.             if parameters[19] == parameters[18]
  659.               parameters[19] = 0
  660.             end
  661.             parameters[11] = 0
  662.             RENDER.call(parameters.__id__)
  663.             parameters[29] -= 1
  664.             if parameters[29] == 0
  665.               @need_refresh = false
  666.             end
  667.           elsif @need_refresh_anim
  668.             parameters[19] += 1
  669.             if parameters[19] == parameters[18]
  670.               parameters[19] = 0
  671.             end
  672.             parameters[11] = 1
  673.             RENDER.call(parameters.__id__)
  674.             parameters[29] -= 1
  675.             if parameters[29] == 0
  676.               @need_refresh_anim = false
  677.             end
  678.           end
  679.           if @initialization && parameters[29] == 0
  680.             @initialization = false
  681.           end
  682.         end while @initialization
  683.         @sprite_render.update
  684.         @vertical_tiles.each {|sprite| sprite.update} # [1.7]
  685.       end
  686.     end
  687.     #--------------------------------------------------------------------------
  688.     # * Flash des couches de la tilemap
  689.     #--------------------------------------------------------------------------
  690.     def flash(color, duration)
  691.       @sprite_render.flash(color, duration)
  692.     end
  693.     #--------------------------------------------------------------------------
  694.     # * Create vertical tiles [1.7]
  695.     #--------------------------------------------------------------------------
  696.     def create_vertical_tiles
  697.       unless @vertical_tiles
  698.         @vertical_tiles = []
  699.       end
  700.       clear_vertical_tiles
  701.       @vt_checked_tiles = Table.new($game_map.width, $game_map.height,
  702.       MGC::MODE7_TERRAIN_TAGS.size)
  703.       (0...$game_map.height).each {|iy|
  704.         (0...$game_map.width).each {|ix|
  705.           (0...3).each {|il|
  706.             terrain_tag = $game_map.terrain_tag_for_layer(ix, iy, il)
  707.             if terrain_tag > 0 && MGC::MODE7_TERRAIN_TAGS.include?(terrain_tag)
  708.               tag_index = MGC::MODE7_TERRAIN_TAGS.index(terrain_tag)
  709.               unless @vt_checked_tiles[ix, iy, tag_index] == 1
  710.                 @vt_found_tiles = []
  711.                 @vt_x_min = ix
  712.                 @vt_x_max = ix
  713.                 @vt_y_min = iy
  714.                 @vt_y_max = iy
  715.                 find_linked_tiles(ix, iy, terrain_tag, tag_index)
  716.                 v_tile = MGC::Vertical_Tile.new(self, @viewport)
  717.                 v_tile.x = 1 + @vt_x_max + @vt_x_min << 5 >> 1
  718.                 v_tile.y = 1 + @vt_y_max << 5
  719.                 v_tile.refresh_tile_data(@vt_found_tiles,
  720.                 @vt_x_min, @vt_x_max, @vt_y_min, @vt_y_max)
  721.                 @vertical_tiles << v_tile
  722.                 break
  723.               end
  724.             end
  725.           }
  726.         }
  727.       }
  728.       @vt_checked_tiles = nil
  729.     end
  730.     #--------------------------------------------------------------------------
  731.     # * Find linked tiles [1.7]
  732.     # param x : Integer
  733.     # param y : Integer
  734.     # param terrain_tag : Integer
  735.     # param tag_index : Integer
  736.     #--------------------------------------------------------------------------
  737.     def find_linked_tiles(x, y, terrain_tag, tag_index)
  738.       unless @vt_checked_tiles[x, y, tag_index] == 1
  739.         @vt_checked_tiles[x, y, tag_index] = 1
  740.         found = false
  741.         (0...3).each {|il|
  742.           if $game_map.terrain_tag_for_layer(x, y, il) == terrain_tag
  743.             unless found
  744.               found_tile = [x, y, [false, false, false]]
  745.               @vt_found_tiles << found_tile
  746.               found = true
  747.             end
  748.             found_tile[2][il] = true
  749.           end
  750.         }
  751.         if found
  752.           if x > @vt_x_max
  753.             @vt_x_max = x
  754.           end
  755.           if x < @vt_x_min
  756.             @vt_x_min = x
  757.           end
  758.           if y > @vt_y_max
  759.             @vt_y_max = y
  760.           end
  761.           if y < @vt_y_min
  762.             @vt_y_min = y
  763.           end
  764.           if MGC::MODE7_VERTICAL_TILES_TYPE & 1 == 1
  765.             if y < $game_map.height - 1
  766.               find_linked_tiles(x, y + 1, terrain_tag, tag_index)
  767.             end
  768.           end
  769.           if MGC::MODE7_VERTICAL_TILES_TYPE & 2 == 2
  770.             if x < $game_map.width - 1
  771.               find_linked_tiles(x + 1, y, terrain_tag, tag_index)
  772.             end
  773.           end
  774.           if MGC::MODE7_VERTICAL_TILES_TYPE == 3
  775.             if x > 0
  776.               find_linked_tiles(x - 1, y, terrain_tag, tag_index)
  777.             end
  778.             if y > 0
  779.               find_linked_tiles(x, y - 1, terrain_tag, tag_index)
  780.             end
  781.           end
  782.         end
  783.       end
  784.     end
  785.   end
  786. end

  787. #==============================================================================
  788. # ** Game_System
  789. #==============================================================================
  790. class Game_System
  791.   #--------------------------------------------------------------------------
  792.   # * Attributs
  793.   #--------------------------------------------------------------------------
  794.   attr_accessor :mode7_zoom, :mode7_angle, :mode7_active
  795. end

  796. #==============================================================================
  797. # ** Game_Map
  798. #==============================================================================
  799. class Game_Map
  800.   attr_accessor :start_mode7, :end_mode7
  801.   #--------------------------------------------------------------------------
  802.   # * Aliased methods
  803.   #--------------------------------------------------------------------------
  804.   unless @already_aliased_mgc_m7a
  805.     alias setup_mgc_m7a setup
  806.     alias set_display_pos_mgc_m7a set_display_pos
  807.     alias scroll_down_mgc_m7a scroll_down
  808.     alias scroll_left_mgc_m7a scroll_left
  809.     alias scroll_right_mgc_m7a scroll_right
  810.     alias scroll_up_mgc_m7a scroll_up
  811.     @already_aliased_mgc_m7a = true
  812.   end
  813.   #--------------------------------------------------------------------------
  814.   # * Setup
  815.   #--------------------------------------------------------------------------
  816.   def setup(map_id)
  817.     setup_mgc_m7a(map_id)
  818.     @map = load_data(sprintf("Data/Map%03d.rvdata2", map_id)) # [1.9]
  819.     if is_mode7?
  820.       if MGC.mode7_active
  821.         MGC.start_change_map
  822.       end
  823.       self.start_mode7 = true
  824.     else
  825.       self.end_mode7 = true
  826.     end
  827.   end
  828.   #--------------------------------------------------------------------------
  829.   # * Check if the map is configured for mode 7
  830.   #--------------------------------------------------------------------------
  831.   def is_mode7?
  832.     return MGC::MODE7_MAPS_ID.include?(@map_id) ||
  833.     $data_mapinfos[@map_id].full_name[/\[M7\]/]
  834.   end
  835.   #--------------------------------------------------------------------------
  836.   # * Get default mode7 angle
  837.   #--------------------------------------------------------------------------
  838.   def get_default_mode7_angle
  839.     if $data_mapinfos[@map_id].full_name[/\[A(\d+)\]/]
  840.       return [[$1.to_i, 0].max, 89].min
  841.     else
  842.       return MGC::MODE7_DEFAULT_ANGLE
  843.     end
  844.   end
  845.   #--------------------------------------------------------------------------
  846.   # * Get default mode7 zoom
  847.   #--------------------------------------------------------------------------
  848.   def get_default_mode7_zoom
  849.     if $data_mapinfos[@map_id].full_name[/\[Z(\d+(?:\.\d+)*)\]/]
  850.       return [[$1.to_f, 0.125].max, 8.0].min
  851.     else
  852.       return MGC::MODE7_DEFAULT_ZOOM
  853.     end
  854.   end
  855.   #--------------------------------------------------------------------------
  856.   # * Get default fading distance
  857.   #--------------------------------------------------------------------------
  858.   def get_default_fading_distance
  859.     if $data_mapinfos[@map_id].full_name[/\[FD(\d{1,3})\]/]
  860.       return [$1.to_i, 0].max
  861.     else
  862.       return MGC::MODE7_FADING_DISTANCE
  863.     end
  864.   end
  865.   #--------------------------------------------------------------------------
  866.   # * Get default fading opacity
  867.   #--------------------------------------------------------------------------
  868.   def get_default_fading_opacity
  869.     if $data_mapinfos[@map_id].full_name[/\[FO(\d{1,3})\]/]
  870.       return [[$1.to_i, 0].max, 255].min
  871.     else
  872.       return MGC::MODE7_FADING_OPACITY
  873.     end
  874.   end
  875.   #--------------------------------------------------------------------------
  876.   # * Get default fading tone
  877.   #--------------------------------------------------------------------------
  878.   def get_default_fading_tone
  879.     if $data_mapinfos[@map_id].full_name[/\[FT(\-?\d{1,3}),(\-?\d{1,3}),(\-?\d{1,3})\]/]
  880.       red = [[$1.to_i, -255].max, 255].min
  881.       green = [[$2.to_i, -255].max, 255].min
  882.       blue = [[$3.to_i, -255].max, 255].min
  883.       return Tone.new(red, green, blue)
  884.     else
  885.       return MGC::MODE7_FADING_TONE
  886.     end
  887.   end
  888.   #--------------------------------------------------------------------------
  889.   # * Check if the map is parallaxed [1.9]
  890.   #--------------------------------------------------------------------------
  891.   def is_parallaxed?
  892.     return MGC::MODE7_PARALLAXED_MAPS_ID.include?(@map_id) ||
  893.     $data_mapinfos[@map_id].full_name[/\[P\]/]
  894.   end
  895.   #--------------------------------------------------------------------------
  896.   # * Check if the parallaxed map has a panorama in mode 7 [1.9]
  897.   #--------------------------------------------------------------------------
  898.   def has_additionnal_panorama?
  899.     return @map.note[/\[m7a_pano:\w+\]/]
  900.   end
  901.   #--------------------------------------------------------------------------
  902.   # * Return the panorama in mode 7 if the map is parallaxed [1.9]
  903.   #--------------------------------------------------------------------------
  904.   def set_additional_panorama
  905.     if @map.note[/\[m7a_pano:(\w+)\]/]
  906.       @parallax_name = $1
  907.     end
  908.   end
  909.   #--------------------------------------------------------------------------
  910.   # * Set Display Position
  911.   #--------------------------------------------------------------------------
  912.   def set_display_pos(x, y)
  913.     if MGC.mode7_active
  914.       if loop_horizontal?
  915.         @display_x = (x + width) % width
  916.       else
  917.         if MGC.mode7_zoom < 1.0 && width * MGC.mode7_zoom < screen_tile_x
  918.           @display_x = (width - screen_tile_x) / 2
  919.         else
  920.           x_min = screen_tile_x * (1.0 / MGC.mode7_zoom - 1.0) / 2
  921.           x_max = width + screen_tile_x * ((1.0 - 1.0 / MGC.mode7_zoom) / 2 - 1)
  922.           x = [x_min, [x, x_max].min].max
  923.           @display_x = x
  924.         end
  925.       end
  926.       if loop_vertical?
  927.         @display_y = (y + height) % height
  928.       else
  929.         if MGC.mode7_zoom < 1.0 && height * MGC.mode7_zoom < screen_tile_y
  930.           @display_y = (height - screen_tile_y) * MGC.mode7_data[1]
  931.         else
  932.           y_min = screen_tile_y * (1.0 / MGC.mode7_zoom - 1.0) * MGC.mode7_data[1]
  933.           y_max = height + screen_tile_y *
  934.           ((1.0 - 1.0 / MGC.mode7_zoom) * (1 - MGC.mode7_data[1]) - 1)
  935.           y = [y_min, [y, y_max].min].max
  936.           @display_y = y
  937.         end
  938.       end
  939.       @parallax_x = x
  940.       @parallax_y = y
  941.     else
  942.       set_display_pos_mgc_m7a(x, y)
  943.     end
  944.   end
  945.   #--------------------------------------------------------------------------
  946.   # * Scroll Down
  947.   #--------------------------------------------------------------------------
  948.   def scroll_down(distance)
  949.     if MGC.mode7_active
  950.       if loop_vertical?
  951.         @display_y += distance
  952.         @display_y %= @map.height
  953.         @parallax_y += distance if @parallax_loop_y
  954.       else
  955.         last_y = @display_y
  956.         if MGC.mode7_zoom < 1.0 && height * MGC.mode7_zoom < screen_tile_y
  957.           @display_y = (height - screen_tile_y) * MGC.mode7_data[1]
  958.         else
  959.           max = height + screen_tile_y *
  960.           ((1.0 - 1.0 / MGC.mode7_zoom) * (1 - MGC.mode7_data[1]) - 1)
  961.           @display_y = [@display_y + distance, max].min
  962.         end
  963.         @parallax_y += @display_y - last_y
  964.       end
  965.     else
  966.       scroll_down_mgc_m7a(distance)
  967.     end
  968.   end
  969.   #--------------------------------------------------------------------------
  970.   # * Scroll Left
  971.   #--------------------------------------------------------------------------
  972.   def scroll_left(distance)
  973.     if MGC.mode7_active
  974.       if loop_horizontal?
  975.         @display_x += @map.width - distance
  976.         @display_x %= @map.width
  977.         @parallax_x -= distance if @parallax_loop_x
  978.       else
  979.         last_x = @display_x
  980.         if MGC.mode7_zoom < 1.0 && width * MGC.mode7_zoom < screen_tile_x
  981.           @display_x = (width - screen_tile_x) / 2
  982.         else
  983.           min = screen_tile_x * (1.0 / MGC.mode7_zoom - 1.0) / 2
  984.           @display_x = [@display_x - distance, min].max
  985.         end
  986.         @parallax_x += @display_x - last_x
  987.       end
  988.     else
  989.       scroll_left_mgc_m7a(distance)
  990.     end
  991.   end
  992.   #--------------------------------------------------------------------------
  993.   # * Scroll Right
  994.   #--------------------------------------------------------------------------
  995.   def scroll_right(distance)
  996.     if MGC.mode7_active
  997.       if loop_horizontal?
  998.         @display_x += distance
  999.         @display_x %= @map.width
  1000.         @parallax_x += distance if @parallax_loop_x
  1001.       else
  1002.         last_x = @display_x
  1003.         if MGC.mode7_zoom < 1.0 && width * MGC.mode7_zoom < screen_tile_x
  1004.           @display_x = (width - screen_tile_x) / 2
  1005.         else
  1006.           max = width + screen_tile_x * ((1.0 - 1.0 / MGC.mode7_zoom) / 2 - 1)
  1007.           @display_x = [@display_x + distance, max].min
  1008.         end
  1009.         @parallax_x += @display_x - last_x
  1010.       end
  1011.     else
  1012.       scroll_right_mgc_m7a(distance)
  1013.     end
  1014.   end
  1015.   #--------------------------------------------------------------------------
  1016.   # * Scroll Up
  1017.   #--------------------------------------------------------------------------
  1018.   def scroll_up(distance)
  1019.     if MGC.mode7_active
  1020.       if loop_vertical?
  1021.         @display_y += @map.height - distance
  1022.         @display_y %= @map.height
  1023.         @parallax_y -= distance if @parallax_loop_y
  1024.       else
  1025.         last_y = @display_y
  1026.         if MGC.mode7_zoom < 1.0 && height * MGC.mode7_zoom < screen_tile_y
  1027.           @display_y = (height - screen_tile_y) * MGC.mode7_data[1]
  1028.         else
  1029.           min = screen_tile_y * (1.0 / MGC.mode7_zoom - 1.0) * MGC.mode7_data[1]
  1030.           @display_y = [@display_y - distance, min].max
  1031.         end
  1032.         @parallax_y += @display_y - last_y
  1033.       end
  1034.     else
  1035.       scroll_up_mgc_m7a(distance)
  1036.     end
  1037.   end
  1038.   #--------------------------------------------------------------------------
  1039.   # * Get Terrain Tag for a layer [1.7]
  1040.   #--------------------------------------------------------------------------
  1041.   def terrain_tag_for_layer(x, y, layer)
  1042.     return 0 unless valid?(x, y)
  1043.     return tileset.flags[tile_id(x, y, layer)] >> 12
  1044.   end
  1045. end

  1046. #==============================================================================
  1047. # ** Game_CharacterBase
  1048. #==============================================================================
  1049. class Game_CharacterBase
  1050.   #--------------------------------------------------------------------------
  1051.   # * Public Instance Variables
  1052.   #--------------------------------------------------------------------------
  1053.   attr_accessor :sprite
  1054. end

  1055. #==============================================================================
  1056. # ** Serialisation
  1057. #==============================================================================
  1058. [:Sprite, :Viewport, :Bitmap, :Font].each {|classname|
  1059.   eval(
  1060.   "class #{classname}
  1061.     def marshal_dump
  1062.       return []
  1063.     end
  1064.     def marshal_load(array)
  1065.     end
  1066.   end")
  1067. }

  1068. #==============================================================================
  1069. # ** Sprite
  1070. #==============================================================================
  1071. class Sprite
  1072.   #--------------------------------------------------------------------------
  1073.   # * Aliased methods
  1074.   #--------------------------------------------------------------------------
  1075.   unless @already_aliased_mgc_m7a
  1076.     alias initialize_mgc_m7a initialize
  1077.     alias zoom_x_mgc_m7a= zoom_x=
  1078.     alias zoom_y_mgc_m7a= zoom_y=
  1079.     alias zoom_x_mgc_m7a zoom_x
  1080.     alias zoom_y_mgc_m7a zoom_y
  1081.     @already_aliased_mgc_m7a = true
  1082.   end
  1083.   #--------------------------------------------------------------------------
  1084.   # * Initialisation
  1085.   #--------------------------------------------------------------------------
  1086.   def initialize(*args)
  1087.     initialize_mgc_m7a(*args)
  1088.     @phase_mode7 = false
  1089.     self.zoom_x = 1.0
  1090.     self.zoom_y = 1.0
  1091.   end
  1092.   #--------------------------------------------------------------------------
  1093.   # * Setter pour l'attribut zoom_x
  1094.   #--------------------------------------------------------------------------
  1095.   def zoom_x=(new_zoom_x)
  1096.     unless @phase_mode7
  1097.       @base_zoom_x = new_zoom_x
  1098.     end
  1099.     self.zoom_x_mgc_m7a = new_zoom_x
  1100.   end
  1101.   #--------------------------------------------------------------------------
  1102.   # * Setter pour l'attribut zoom_y
  1103.   #--------------------------------------------------------------------------
  1104.   def zoom_y=(new_zoom_y)
  1105.     unless @phase_mode7
  1106.       @base_zoom_y = new_zoom_y
  1107.     end
  1108.     self.zoom_y_mgc_m7a = new_zoom_y
  1109.   end
  1110.   #--------------------------------------------------------------------------
  1111.   # * Getter pour l'attribut zoom_x
  1112.   #--------------------------------------------------------------------------
  1113.   def zoom_x
  1114.     return @base_zoom_x
  1115.   end
  1116.   #--------------------------------------------------------------------------
  1117.   # * Getter pour l'attribut zoom_y
  1118.   #--------------------------------------------------------------------------
  1119.   def zoom_y
  1120.     return @base_zoom_y
  1121.   end
  1122.   #--------------------------------------------------------------------------
  1123.   # * Valeur réelle du zoom_x en prenant en compte le zoom de la carte
  1124.   #--------------------------------------------------------------------------
  1125.   def zoom_x_real
  1126.     return zoom_x_mgc_m7a
  1127.   end
  1128.   #--------------------------------------------------------------------------
  1129.   # * Valeur réelle du zoom_y en prenant en compte le zoom de la carte
  1130.   #--------------------------------------------------------------------------
  1131.   def zoom_y_real
  1132.     return zoom_y_mgc_m7a
  1133.   end
  1134. end

  1135. #==============================================================================
  1136. # ** Sprite_Base
  1137. #==============================================================================
  1138. class Sprite_Base
  1139.   #--------------------------------------------------------------------------
  1140.   # * Aliased methods
  1141.   #--------------------------------------------------------------------------
  1142.   unless @already_aliased_mgc_m7a
  1143.     alias animation_set_sprites_mgc_m7a_aprite_base animation_set_sprites
  1144.     @already_aliased_mgc_m7a = true
  1145.   end
  1146.   #--------------------------------------------------------------------------
  1147.   # * Set Animation Sprite
  1148.   #     frame : Frame data (RPG::Animation::Frame)
  1149.   #--------------------------------------------------------------------------
  1150.   def animation_set_sprites(frame)
  1151.     if MGC.mode7_active
  1152.       cell_data = frame.cell_data
  1153.       @ani_sprites.each_with_index do |sprite, i|
  1154.         next unless sprite
  1155.         pattern = cell_data[i, 0]
  1156.         if !pattern || pattern < 0
  1157.           sprite.visible = false
  1158.           next
  1159.         end
  1160.         sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  1161.         sprite.visible = true
  1162.         sprite.src_rect.set(pattern % 5 * 192,
  1163.           pattern % 100 / 5 * 192, 192, 192)
  1164.         if @ani_mirror
  1165.           sprite.x = @ani_ox - cell_data[i, 1] * zoom_y_real
  1166.           sprite.y = @ani_oy + cell_data[i, 2] * zoom_y_real
  1167.           sprite.angle = (360 - cell_data[i, 4])
  1168.           sprite.mirror = (cell_data[i, 5] == 0)
  1169.         else
  1170.           sprite.x = @ani_ox + cell_data[i, 1] * zoom_y_real
  1171.           sprite.y = @ani_oy + cell_data[i, 2] * zoom_y_real
  1172.           sprite.angle = cell_data[i, 4]
  1173.           sprite.mirror = (cell_data[i, 5] == 1)
  1174.         end
  1175.         sprite.z = self.z + 300 + i
  1176.         sprite.ox = 96
  1177.         sprite.oy = 96
  1178.         sprite.zoom_x = cell_data[i, 3] * zoom_y_real / 100.0
  1179.         sprite.zoom_y = cell_data[i, 3] * zoom_y_real / 100.0
  1180.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  1181.         sprite.blend_type = cell_data[i, 7]
  1182.       end
  1183.     else
  1184.       animation_set_sprites_mgc_m7a_aprite_base(frame)
  1185.     end
  1186.   end
  1187. end

  1188. #==============================================================================
  1189. # ** Sprite_Character
  1190. #==============================================================================
  1191. class Sprite_Character < Sprite_Base
  1192.   #--------------------------------------------------------------------------
  1193.   # * Aliased methods
  1194.   #--------------------------------------------------------------------------
  1195.   unless @already_aliased_mgc_m7a
  1196.     alias initialize_mgc_m7a_aprite_character initialize
  1197.     alias update_position_mgc_m7a_aprite_character update_position
  1198.     alias update_other_mgc_m7a_aprite_character update_other
  1199.     alias update_balloon_mgc_m7a_aprite_character update_balloon
  1200.     @already_aliased_mgc_m7a = true
  1201.   end
  1202.   #--------------------------------------------------------------------------
  1203.   # * Object Initialization
  1204.   #     character : Game_Character
  1205.   #--------------------------------------------------------------------------
  1206.   def initialize(viewport, character = nil)
  1207.     initialize_mgc_m7a_aprite_character(viewport, character)
  1208.     character.sprite = self
  1209.   end
  1210.   #--------------------------------------------------------------------------
  1211.   # * Update Position
  1212.   #--------------------------------------------------------------------------
  1213.   def update_position
  1214.     if MGC.mode7_active
  1215.       old_x = x
  1216.       old_y = y
  1217.       update_mode7
  1218.       @in_mode_7 = true # [1.5]
  1219.       move_animation(x - old_x, y - old_y)
  1220.     else
  1221.       if @in_mode_7 # [1.5]
  1222.         self.zoom_x = zoom_x
  1223.         self.zoom_y = zoom_y
  1224.         @in_mode_7 = false
  1225.       end
  1226.       update_position_mgc_m7a_aprite_character
  1227.     end
  1228.   end
  1229.   #--------------------------------------------------------------------------
  1230.   # * Update Other
  1231.   #--------------------------------------------------------------------------
  1232.   def update_other
  1233.     update_other_mgc_m7a_aprite_character
  1234.     if MGC.mode7_active && visible
  1235.       if !@force_mode7_invisible &&
  1236.         y >= MGC.mode7_data[8] &&
  1237.         (y - height * zoom_y_real) < Graphics.height
  1238.       then
  1239.         self.visible = true
  1240.         if y < Graphics.height
  1241.           dat = MGC.mode7_data[9]
  1242.           self.opacity += dat[5, y]
  1243.           self.tone.set(dat[2, y], dat[3, y], dat[4, y])
  1244.         end
  1245.       else
  1246.         self.visible = false
  1247.       end
  1248.     end
  1249.   end
  1250.   #--------------------------------------------------------------------------
  1251.   # * Update Position In Mode7
  1252.   #--------------------------------------------------------------------------
  1253.   def update_mode7
  1254.     if @character.tile_id == 0 && character.character_name == "" # [1.8]
  1255.       @force_mode7_invisible = true
  1256.       return
  1257.     end
  1258.     y_screen = character.screen_y +
  1259.     (character.is_a?(Game_Vehicle) ? character.altitude : 0)
  1260.     y_init = MGC.mode7_data[2] * (y_screen - MGC.mode7_data[0])
  1261.     if y_init < - (MGC::MODE7_VIEW_LIMIT << 5) - MGC.mode7_data[0] ||
  1262.       y_init > Graphics.height
  1263.     then
  1264.       @force_mode7_invisible = true
  1265.       return
  1266.     else
  1267.       @force_mode7_invisible = false
  1268.     end
  1269.     x_init = MGC.mode7_data[2] * (character.screen_x - (Graphics.width >> 1))
  1270.     self.y = (MGC.mode7_data[0] + (MGC.mode7_data[5] * y_init *
  1271.     MGC.mode7_data[3]) / (MGC.mode7_data[5] - y_init * MGC.mode7_data[4])).to_i
  1272.     zx = MGC.mode7_data[6] * y + MGC.mode7_data[7]
  1273.     self.x = ((Graphics.width >> 1) + zx * x_init).to_i
  1274.     @phase_mode7 = true
  1275.     self.zoom_x = MGC.mode7_data[2] * zx
  1276.     self.zoom_y = zoom_x_real
  1277.     @phase_mode7 = false
  1278.     self.z = @character.screen_z + (y << 8) # [1.7]
  1279.     if character.is_a?(Game_Vehicle)
  1280.       self.y -= character.altitude * zoom_y_real
  1281.     end
  1282.   end
  1283.   #--------------------------------------------------------------------------
  1284.   # * Update Balloon Icon
  1285.   #--------------------------------------------------------------------------
  1286.   def update_balloon
  1287.     update_balloon_mgc_m7a_aprite_character
  1288.     if MGC.mode7_active && @balloon_duration > 0
  1289.       @balloon_sprite.y = y - height * zoom_y_real
  1290.       @balloon_sprite.zoom_x = zoom_x_real
  1291.       @balloon_sprite.zoom_y = zoom_y_real
  1292.     end
  1293.   end
  1294. end

  1295. #==============================================================================
  1296. # ** Spriteset_Map
  1297. #==============================================================================
  1298. class Spriteset_Map
  1299.   #--------------------------------------------------------------------------
  1300.   # * Aliased methods
  1301.   #--------------------------------------------------------------------------
  1302.   unless @already_aliased_mgc_m7a
  1303.     alias initialize_mgc_m7a initialize
  1304.     alias create_tilemap_mgc_m7a create_tilemap
  1305.     alias update_mgc_m7a update
  1306.     alias update_shadow_mgc_m7a update_shadow
  1307.     alias update_parallax_mgc_m7a update_parallax
  1308.     @already_aliased_mgc_m7a = true
  1309.   end
  1310.   #--------------------------------------------------------------------------
  1311.   # * Object Initialization
  1312.   #--------------------------------------------------------------------------
  1313.   def initialize
  1314.     MGC.spriteset = self
  1315.     initialize_mgc_m7a
  1316.   end
  1317.   #--------------------------------------------------------------------------
  1318.   # * Lance le mode 7
  1319.   #--------------------------------------------------------------------------
  1320.   def start_mode7
  1321.     unless @tilemap_mode7 && @tilemap_mode7.map_id == $game_map.map_id # [1.9]
  1322.       if @tilemap_mode7
  1323.         @tilemap_mode7.dispose unless @tilemap_mode7.disposed?
  1324.         MGC.initialize_mode7(true)
  1325.       else
  1326.         MGC.initialize_mode7
  1327.         @tilemap_classic = @tilemap
  1328.       end
  1329.       @tilemap_mode7 = MGC::Mode7_Map.new(@viewport1)
  1330.       @tilemap_mode7.map_data = $game_map.data
  1331.       if $game_map.is_parallaxed? && $game_map.parallax_name &&
  1332.         $game_map.parallax_name != '' # [1.9]
  1333.       then
  1334.         @tilemap_mode7.parallax = Cache.parallax($game_map.parallax_name)
  1335.         $game_map.set_additional_panorama
  1336.       end
  1337.       @tilemap = @tilemap_mode7
  1338.       load_tileset
  1339.     end
  1340.     @tilemap_mode7.create_vertical_tiles # [1.7]
  1341.     @tilemap_mode7.visible = true
  1342.     @tilemap_classic.visible = false
  1343.     @tilemap = @tilemap_mode7
  1344.     MGC.mode7_active = true
  1345.   end
  1346.   #--------------------------------------------------------------------------
  1347.   # * Met fin au mode 7
  1348.   #--------------------------------------------------------------------------
  1349.   def end_mode7
  1350.     if @tilemap_mode7
  1351.       @tilemap_mode7.visible = false
  1352.       @tilemap_classic.visible = true
  1353.       @tilemap = @tilemap_classic
  1354.       @tilemap_mode7.clear_vertical_tiles # [1.7]
  1355.       @parallax.visible = true # [1.9]
  1356.     end
  1357.     MGC.mode7_active = false
  1358.   end
  1359.   #--------------------------------------------------------------------------
  1360.   # * Create Tilemap
  1361.   #--------------------------------------------------------------------------
  1362.   def create_tilemap
  1363.     create_tilemap_mgc_m7a
  1364.     unless $game_system.mode7_active
  1365.       MGC.mode7_active = false
  1366.     end
  1367.     if $game_map.is_mode7? || $game_system.mode7_active
  1368.       start_mode7
  1369.     end
  1370.   end
  1371.   #--------------------------------------------------------------------------
  1372.   # * Update
  1373.   #--------------------------------------------------------------------------
  1374.   def update
  1375.     MGC.update_mode7
  1376.     if $game_map.start_mode7
  1377.       start_mode7
  1378.       $game_map.start_mode7 = false
  1379.     elsif $game_map.end_mode7
  1380.       end_mode7
  1381.       $game_map.end_mode7 = false
  1382.     end
  1383.     update_mgc_m7a
  1384.   end
  1385.   #--------------------------------------------------------------------------
  1386.   # * Update Parallax [1.9]
  1387.   #--------------------------------------------------------------------------
  1388.   def update_parallax
  1389.     update_parallax_mgc_m7a
  1390.     if MGC.mode7_active && $game_map.is_parallaxed?
  1391.       if $game_map.has_additionnal_panorama?
  1392.         $game_map.set_additional_panorama
  1393.       else
  1394.         @parallax.visible = false
  1395.       end
  1396.     end
  1397.   end
  1398.   #--------------------------------------------------------------------------
  1399.   # * Update Airship Shadow Sprite
  1400.   #--------------------------------------------------------------------------
  1401.   def update_shadow
  1402.     if MGC.mode7_active
  1403.       airship_sprite = $game_map.airship.sprite
  1404.       @shadow_sprite.x = airship_sprite.x
  1405.       @shadow_sprite.y = airship_sprite.y + $game_map.airship.altitude *
  1406.       airship_sprite.zoom_y_real
  1407.       @shadow_sprite.opacity = $game_map.airship.altitude * 8 *
  1408.       airship_sprite.opacity
  1409.       @shadow_sprite.zoom_x = airship_sprite.zoom_x_real
  1410.       @shadow_sprite.zoom_y = airship_sprite.zoom_y_real
  1411.       @shadow_sprite.update
  1412.     else
  1413.       update_shadow_mgc_m7a
  1414.     end
  1415.   end
  1416. end

  1417. #==============================================================================
  1418. # ** Scene_Map
  1419. #==============================================================================
  1420. class Scene_Map < Scene_Base
  1421.   #--------------------------------------------------------------------------
  1422.   # * Aliased methods
  1423.   #--------------------------------------------------------------------------
  1424.   unless @already_aliased_mgc_m7a
  1425.     alias update_call_menu_mgc_m7a update_call_menu
  1426.     @already_aliased_mgc_m7a = true
  1427.   end
  1428.   #--------------------------------------------------------------------------
  1429.   # * Determine if Menu is Called due to Cancel Button
  1430.   #--------------------------------------------------------------------------
  1431.   def update_call_menu
  1432.     unless MGC.effect?
  1433.       update_call_menu_mgc_m7a
  1434.     end
  1435.   end
  1436. end

  1437. #============================================================================
  1438. # ** RPG::MapInfo
  1439. #============================================================================
  1440. class RPG::MapInfo
  1441.   # defines the map name as the name without anything within brackets,
  1442.   # including brackets
  1443.   def name
  1444.     return @name.gsub(/\[.*\]/) {''}
  1445.   end
  1446.   #--------------------------------------------------------------------------
  1447.   # the original name with the codes
  1448.   def full_name
  1449.     return @name
  1450.   end
  1451. end

  1452. module MGC
  1453.   #--------------------------------------------------------------------------
  1454.   # * Constantes [1.7]
  1455.   #--------------------------------------------------------------------------
  1456.   RENDER_TILE = Win32API.new("MGC_Mode7_Ace_1_9", "renderTile", "l", "l")
  1457.   #==============================================================================
  1458.   # ** MGC::Vertical_Tile [1.7]
  1459.   #==============================================================================
  1460.   class Vertical_Tile
  1461.     #--------------------------------------------------------------------------
  1462.     # * Attributs
  1463.     #--------------------------------------------------------------------------
  1464.     attr_accessor :x, :y, :screen_x, :screen_y, :zoom
  1465.     attr_accessor :tile_width, :tile_height, :width, :height
  1466.     #--------------------------------------------------------------------------
  1467.     # * Initialisation
  1468.     # param parent : MGC::Mode7_Map
  1469.     # param viewport : Viewport
  1470.     #--------------------------------------------------------------------------
  1471.     def initialize(parent, viewport)
  1472.       @parent = parent
  1473.       @viewport = viewport
  1474.       @visible = false
  1475.       @sprite = nil
  1476.     end
  1477.     #--------------------------------------------------------------------------
  1478.     # * Refresh tile data
  1479.     # param tiles : Array<Array[Integer, Integer, Array[3]<Boolean>]>
  1480.     # param x_min : Integer
  1481.     # param x_max : Integer
  1482.     # param y_min : Integer
  1483.     # param y_max : Integer
  1484.     #--------------------------------------------------------------------------
  1485.     def refresh_tile_data(tiles, x_min, x_max, y_min, y_max)
  1486.       self.tile_width = 1 + x_max - x_min
  1487.       self.width = tile_width << 5
  1488.       self.tile_height = 1 + y_max - y_min
  1489.       self.height = tile_height << 5
  1490.       @tiles_data = Array.new(tile_width * tile_height)
  1491.       tiles.each {|tile|
  1492.         x_tile = tile[0] - x_min
  1493.         y_tile = tile[1] - y_min
  1494.         @tiles_data[x_tile + y_tile * tile_width] = tile
  1495.       }
  1496.     end
  1497.     #--------------------------------------------------------------------------
  1498.     # * Dispose
  1499.     #--------------------------------------------------------------------------
  1500.     def dispose
  1501.       if @sprite
  1502.         @sprite.bitmap.dispose
  1503.         @sprite.dispose
  1504.         @sprite = nil
  1505.       end
  1506.     end
  1507.     #--------------------------------------------------------------------------
  1508.     # * Update
  1509.     #--------------------------------------------------------------------------
  1510.     def update
  1511.       update_mode7
  1512.       update_visibility
  1513.     end
  1514.     #--------------------------------------------------------------------------
  1515.     # * Update Position In Mode7
  1516.     #--------------------------------------------------------------------------
  1517.     def update_mode7
  1518.       x_scr = 32 * $game_map.adjust_x(x.to_f / 32)
  1519.       y_scr = 32 * $game_map.adjust_y(y.to_f / 32)
  1520.       y_init = MGC.mode7_data[2] * (y_scr - MGC.mode7_data[0])
  1521.       if y_init < - (MGC::MODE7_VIEW_LIMIT << 5) - MGC.mode7_data[0] ||
  1522.         y_init > Graphics.height
  1523.       then
  1524.         @force_invisible = true
  1525.         return
  1526.       else
  1527.         @force_invisible = false
  1528.       end
  1529.       x_init = MGC.mode7_data[2] * (x_scr - (Graphics.width >> 1))
  1530.       self.screen_y = (MGC.mode7_data[0] + (MGC.mode7_data[5] * y_init *
  1531.       MGC.mode7_data[3]) / (MGC.mode7_data[5] - y_init * MGC.mode7_data[4])).to_i
  1532.       zx = MGC.mode7_data[6] * screen_y + MGC.mode7_data[7]
  1533.       self.screen_x = ((Graphics.width >> 1) + zx * x_init).to_i
  1534.       self.zoom = MGC.mode7_data[2] * zx
  1535.     end
  1536.     #--------------------------------------------------------------------------
  1537.     # * Update Visibility
  1538.     #--------------------------------------------------------------------------
  1539.     def update_visibility
  1540.       if @visible
  1541.         if !@force_invisible &&
  1542.           screen_y >= MGC.mode7_data[8] &&
  1543.           (screen_y - height * zoom) < Graphics.height &&
  1544.           (screen_x + width * zoom / 2)  >= 0 &&
  1545.           (screen_x - width * zoom / 2) < Graphics.width
  1546.         then
  1547.           if screen_y < Graphics.height
  1548.             dat = MGC.mode7_data[9]
  1549.             @sprite.opacity = 255 + dat[5, screen_y]
  1550.             @sprite.tone.set(dat[2, screen_y], dat[3, screen_y], dat[4, screen_y])
  1551.           end
  1552.           @sprite.x = screen_x
  1553.           @sprite.y = screen_y
  1554.           @sprite.z = screen_y << 8
  1555.           @sprite.zoom_x = zoom
  1556.           @sprite.zoom_y = zoom
  1557.         else
  1558.           @visible = false
  1559.           @sprite.bitmap.dispose
  1560.           @sprite.dispose
  1561.           @sprite = nil
  1562.         end
  1563.       else
  1564.         if !@force_invisible &&
  1565.           screen_y >= MGC.mode7_data[8] &&
  1566.           (screen_y - height * zoom) < Graphics.height &&
  1567.           (screen_x + width * zoom / 2)  >= 0 &&
  1568.           (screen_x - width * zoom / 2) < Graphics.width
  1569.         then
  1570.           @visible = true
  1571.           @sprite = Sprite.new(@viewport)
  1572.           @sprite.ox = tile_width * 32 / 2
  1573.           @sprite.oy = tile_height * 32
  1574.           @sprite.x = screen_x
  1575.           @sprite.y = screen_y
  1576.           @sprite.z = screen_y << 8
  1577.           @sprite.zoom_x = zoom
  1578.           @sprite.zoom_y = zoom
  1579.           @sprite.bitmap = Bitmap.new(32 * tile_width, 32 * tile_height)
  1580.           (0...tile_height).each {|iy|
  1581.             (0...tile_width).each {|ix|
  1582.               tile_data = @tiles_data[ix + iy * tile_width]
  1583.               if tile_data
  1584.                 (0...3).each {|il|
  1585.                   if tile_data[2][il]
  1586.                     @parent.param_tiles[6][il] =
  1587.                     $game_map.tile_id(tile_data[0], tile_data[1], il)
  1588.                   else
  1589.                     @parent.param_tiles[6][il] = 0
  1590.                   end
  1591.                 }
  1592.                 @parent.param_tiles[0].clear
  1593.                 MGC::RENDER_TILE.call(@parent.param_tiles.__id__)
  1594.                 @sprite.bitmap.blt(ix << 5, iy << 5, @parent.param_tiles[0],
  1595.                 @parent.param_tiles[0].rect)
  1596.               end
  1597.             }
  1598.           }
  1599.           if screen_y < Graphics.height
  1600.             dat = MGC.mode7_data[9]
  1601.             @sprite.opacity = 255 + dat[5, screen_y]
  1602.             @sprite.tone.set(dat[2, screen_y], dat[3, screen_y], dat[4, screen_y])
  1603.           end
  1604.         end
  1605.       end
  1606.     end
  1607.   end
  1608. end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 15:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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