View difference between Paste ID: HTwDFv3P and Sh45J9C7
SHOW: | | - or go back to the newest paste.
1
##-----------------------------------------------------------------------------
2-
#  Large Sprite ☆ Display Fix v1.3
2+
#  Large Sprite ☆ Display Fix v1.2b
3
#  Created by Neon Black at request of seita
4-
#  v1.4 - 12.18.14 - Added position tuning
4+
#  v1.2 - 8.23.13 - Fixed a few slight positioning issues
5-
#  v1.3 - 1.12.14  - Viewport/position issue fixes
5+
#  v1.1 - 8.18.13 - Fixed an odd lag issue
6-
#  v1.1 - 8.18.13  - Fixed an odd lag issue
6+
#  v1.0 - 8.17.13 - Main script completed
7-
#  v1.0 - 8.17.13  - Main script completed
7+
#  Only for non-commercial use.  See full terms of use and contact info at:
8-
#  For both commercial and non-commercial use as long as credit is given to
8+
#  http://cphouseset.wordpress.com/liscense-and-terms-of-use/
9-
#  Neon Black and any additional authors.  Licensed under Creative Commons
9+
10-
#  CC BY 4.0 - http://creativecommons.org/licenses/by/4.0/
10+
11
##------
12
## By default, this script only affects the player.  To allow it to affect
13
## an event page as well, add a comment with the tag <large sprite> to the page
14
## of the event you would like to have affected by this.
15
 
16
class Sprite_Character < Sprite_Base
17
  ##------
18
  ## The ID of the terrain used to display the large character above ☆ tiles.
19
  ## If the player is below this tile (y position), the sprite will appear
20
  ## above all tiles and events from that y position up.  If the player is on
21
  ## the same tile or above (y position) the event will appear BELOW ☆ tiles
22
  ## from that position up.
23
  ##------
24
  UpperTerrain = 7
25
 
26
  ## Alias the update method to add in the new graphic check.
27-
  
27+
28
  def update_position(*args)
29-
  ## This value is the pixel tuning used to check the location.  This is
29+
30-
  ## because characters tagged with a '!' in their name are drawn lower than
30+
31-
  ## normal characters and are considered to be lower than these.  This causes
31+
32-
  ## the script to think they are on the tile below where they really are and
32+
33-
  ## draw them above tiles they should appear under.
33+
34
  alias :cp_073013_dispose :dispose
35-
  Tuning = -1
35+
36-
  
36+
37-
  alias :cp_011214_update_bitmap :update_bitmap
37+
38-
  def update_bitmap(*args)
38+
39-
    if graphic_changed? && @set_upper_area_sprite
39+
40-
      @force_no_gfx_change = true
40+
  ## Alias the graphic changed method to allow the sprite to revent to what it
41-
    else
41+
  ## was during the last frame.  This allows the check to work again.
42-
      @force_no_gfx_change = false
42+
  alias :cp_073013_graphic_changed? :graphic_changed?
43
  def graphic_changed?(*args)
44-
    cp_011214_update_bitmap(*args)
44+
    cp_073013_graphic_changed?(*args) || @set_upper_area_sprite
45
  end
46
 
47
  ## Check if the sprite is onscreen.  Reduces redundant drawing.
48
  def sprite_is_onscreen?
49
    return false if @character.is_a?(Game_Vehicle) || @character.is_a?(Game_Follower)
50
    return false unless @character.is_a?(Game_Player) || @character.large_sprite
51
    return false if @character.screen_z >= 200
52
    top_left, bot_right = get_edge_corner_dis
53
    return false if top_left[0] > Graphics.width
54
    return false if top_left[1] > Graphics.height
55
    return false if bot_right[0] < 0
56
    return false if bot_right[1] < 0
57
    return true
58
  end
59
 
60
  ## Get the top left and bottom right positions.
61-
#~   ## Alias the graphic changed method to allow the sprite to revent to what it
61+
62-
#~   ## was during the last frame.  This allows the check to work again.
62+
63-
#~   alias :cp_073013_graphic_changed? :graphic_changed?
63+
64-
#~   def graphic_changed?(*args)
64+
65-
#~     cp_073013_graphic_changed?(*args) || @set_upper_area_sprite
65+
66-
#~   end
66+
67
  ## Long method that checks each position and draws the upper sprite.
68
  def check_encompassed_area
69
    @set_upper_area_sprite = false
70
    top_left, bot_right = get_edge_corner_dis
71
    last_x, last_y, copy_region = nil, nil, 0
72
    map_xd, map_yd = $game_map.display_x * 32, $game_map.display_y * 32
73
    ##total_height = (self.height + @character.jump_height).round
74
    total_height = (self.oy).round
75
    self.width.times do |x|
76
      xp = map_xd.to_i + top_left[0] + x
77
      unless xp / 32 == last_x
78
        last_x = xp / 32
79
        last_y, copy_region = nil, 0
80
        total_height.times do |y|
81
          yp = map_yd.to_i + bot_right[1] + @character.jump_height - y
82
          next if yp.to_i / 32 == last_y
83
          last_y = yp.to_i / 32
84
          if last_y == (@character.screen_y + map_yd).to_i / 32
85
#~           if last_y == (@character.screen_y + @character.jump_height +
86
#~              map_yd).to_i / 32
87
            break if $game_map.terrain_tag(last_x, last_y) == UpperTerrain
88
            next
89
          end
90-
    if @set_upper_area_sprite && !@force_no_gfx_change
90+
91-
      old_src = self.src_rect.clone
91+
92-
      self.bitmap = @old_bitmap
92+
93-
      self.src_rect = old_src
93+
94
        end
95
      end
96
      next if copy_region == 0
97
      rect = Rect.new(src_rect.x + x, src_rect.y, 1, copy_region)
98
      @upper_area_sprite.bitmap.blt(x, 0, self.bitmap, rect)
99-
    total_height = (self.height + @character.jump_height).round
99+
100
    end
101
    if !@set_upper_area_sprite && @upper_area_sprite
102
      @upper_area_sprite.visible = false
103
    end
104
  end
105
 
106-
          yp = map_yd.to_i + bot_right[1] + @character.jump_height - y + Tuning
106+
107
  def set_upper_sprite
108
    return if @set_upper_area_sprite
109-
          if last_y == (@character.screen_y + @character.jump_height + Tuning +
109+
110-
                        map_yd).to_i / 32
110+
111
    props = ["x", "y", "ox", "oy", "zoom_x", "zoom_y", "angle", "mirror",
112
             "bush_depth", "opacity", "blend_type", "color", "tone", "visible",
113
             "viewport"]
114
    props.each do |meth|
115
      @upper_area_sprite.method("#{meth}=").call(self.method(meth).call)
116
    end
117
#~     @upper_area_sprite.x = @upper_area_sprite.y = 100
118
    @upper_area_sprite.z = 200
119
    @upper_area_sprite.viewport = @viewport1
120
    @set_upper_area_sprite = true
121
    old_bitmap, old_src_rect = self.bitmap, self.src_rect.clone
122
    self.bitmap = Bitmap.new(old_bitmap.width, old_bitmap.height)
123
    self.bitmap.blt(0, 0, old_bitmap, old_bitmap.rect)
124
    self.src_rect = old_src_rect
125
  end
126
end
127
 
128
class Game_Event < Game_Character
129
  attr_reader :large_sprite
130
 
131
  alias :cp_081713_setup_page_settings :setup_page_settings
132
  def setup_page_settings(*args)
133
    cp_081713_setup_page_settings(*args)
134
    get_large_sprite_conditions
135
  end
136
 
137
  def get_large_sprite_conditions
138
    @large_sprite = false
139
    return if @list.nil? || @list.empty?
140
    @list.each do |line|
141
      next unless line.code == 108 || line.code == 408
142
      case line.parameters[0]
143-
    @old_bitmap, old_src_rect = self.bitmap, self.src_rect.clone
143+
144-
    self.bitmap = Bitmap.new(@old_bitmap.width, @old_bitmap.height)
144+
145-
    self.bitmap.blt(0, 0, @old_bitmap, @old_bitmap.rect)
145+
146
    end
147
  end
148
end