SHOW:
|
|
- or go back to the newest paste.
| 1 | #~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~# | |
| 2 | # --------credits-------- | |
| 3 | # * Diagostimo for composing this script | |
| 4 | # * Darkness for requesting it | |
| 5 | # | |
| 6 | # ------Author Notes------ | |
| 7 | # * this script shows badge images and details depending if they have been | |
| 8 | # obtained or not | |
| 9 | # | |
| 10 | # * to call the script use this script call : "$scene = Scene_Badges.new" | |
| 11 | # | |
| 12 | # * to add badges to your possesion use this script call : "$game_system.badge_array.push(BADGE_ID)" | |
| 13 | # or you can push multiple like so : "$game_system.badge_array.push(BADGE_ID, BADGE_ID, BADGE_ID)" | |
| 14 | # | |
| 15 | # * add the graphics of the badge to the pictures directory and call it "badge'BADGE_ID'" | |
| 16 | # so for example I add badge 1 : "badge1.png" | |
| 17 | # | |
| 18 | # * if for any reason you need to remove a badge from your possesion you use | |
| 19 | # this script call : "$game_system.badge_array.delete(BADGE_ID)" | |
| 20 | # | |
| 21 | # * if you want to have a conditional branch inside an event to condition to a | |
| 22 | # badge been in possesion use this script call : "$game_system.badge_array.include?(BADGE_ID)" | |
| 23 | # | |
| 24 | # * see below for all other related configuration, note this script only supports | |
| 25 | # 8 badges like pokemon games, adding more details/images for other values than | |
| 26 | # specified will simply be ingnored, also note that badge images should be 32x32 sized images. | |
| 27 | # | |
| 28 | #~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~# | |
| 29 | # | |
| 30 | # C O N F I G U R A T I O N | |
| 31 | # | |
| 32 | #~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~# | |
| 33 | module Badges | |
| 34 | #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-# | |
| 35 | # * set the image opacity for badges not in possession | |
| 36 | #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-# | |
| 37 | NOT_POSSESSION_OPACITY = 100 #255 max, 0 min | |
| 38 | #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-# | |
| 39 | # * configure the following descriptions for badges IN possession | |
| 40 | #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-# | |
| 41 | def self.badge_in_possession(index) | |
| 42 | case index | |
| 43 | when 1 then 'this is the first description' | |
| 44 | when 2 then 'this is the second description' | |
| 45 | when 3 then 'this is the third description' | |
| 46 | when 4 then 'this is a really long description, long long long long long long long long long long long long.' | |
| 47 | when 5 then 'and so on' | |
| 48 | when 6 then 'and so on' | |
| 49 | when 7 then 'and so on' | |
| 50 | when 8 then 'and so on' | |
| 51 | end | |
| 52 | end | |
| 53 | #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-# | |
| 54 | # * configure the following descriptions for badges NOT in possession | |
| 55 | #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-# | |
| 56 | def self.badge_not_in_possession(index) | |
| 57 | case index | |
| 58 | when 1 then 'not in possesion 1' | |
| 59 | when 2 then 'not in possesion 2' | |
| 60 | when 3 then 'not in possesion 3' | |
| 61 | when 4 then 'not in possesion 4' | |
| 62 | when 5 then 'not in possesion 5' | |
| 63 | when 6 then 'not in possesion 6' | |
| 64 | when 7 then 'not in possesion 7' | |
| 65 | when 8 then 'not in possesion 8' | |
| 66 | end | |
| 67 | end | |
| 68 | end | |
| 69 | #~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~# | |
| 70 | # | |
| 71 | # E N D C O N F I G U R A T I O N | |
| 72 | # | |
| 73 | #~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~# | |
| 74 | class Bitmap | |
| 75 | def format_text(text, width) | |
| 76 | words = text.split(' ')
| |
| 77 | return words if words.size == 1 | |
| 78 | result, current_text = [], words.shift | |
| 79 | words.each_index {|i|
| |
| 80 | if self.text_size("#{current_text} #{words[i]}").width > width
| |
| 81 | result.push(current_text) | |
| 82 | current_text = words[i] | |
| 83 | else | |
| 84 | current_text = "#{current_text} #{words[i]}"
| |
| 85 | end | |
| 86 | result.push(current_text) if i >= words.size - 1} | |
| 87 | return result | |
| 88 | end | |
| 89 | end | |
| 90 | class Game_System | |
| 91 | attr_accessor :badge_array | |
| 92 | alias init_init initialize | |
| 93 | def initialize | |
| 94 | init_init | |
| 95 | @badge_array = [] | |
| 96 | end | |
| 97 | end | |
| 98 | class Window_Badges < Window_Base | |
| 99 | attr_reader :index | |
| 100 | def initialize | |
| 101 | centre = (640 - 288) / 2 | |
| 102 | super(centre, 0, 288, 64) | |
| 103 | self.contents = Bitmap.new(width - 32, height - 32) | |
| 104 | self.index = 0 | |
| 105 | refresh | |
| 106 | end | |
| 107 | def index=(index) | |
| 108 | @index = index | |
| 109 | update_cursor_rect | |
| 110 | end | |
| 111 | def update_cursor_rect | |
| 112 | x = 0 + @index * 32 | |
| 113 | y = 0 | |
| 114 | self.cursor_rect.set(x, y, 32, 32) | |
| 115 | end | |
| 116 | def refresh | |
| 117 | self.contents.clear | |
| 118 | for i in 1..8 | |
| 119 | @bitmap = RPG::Cache.picture("badge#{i}")
| |
| 120 | x = 0 + (i - 1) % 8 * 32 | |
| 121 | rect = Rect.new(0, 0, @bitmap.width, @bitmap.height) | |
| 122 | if $game_system.badge_array.include?(i) | |
| 123 | self.contents.blt(x, 0, @bitmap, rect, 255) | |
| 124 | else | |
| 125 | self.contents.blt(x, 0, @bitmap, rect, Badges::NOT_POSSESSION_OPACITY) | |
| 126 | end | |
| 127 | end | |
| 128 | end | |
| 129 | def update | |
| 130 | super | |
| 131 | if Input.repeat?(Input::RIGHT) && @index < 7 | |
| 132 | @index += 1 | |
| 133 | $game_system.se_play($data_system.cursor_se) | |
| 134 | end | |
| 135 | if Input.repeat?(Input::LEFT) && @index > 0 | |
| 136 | @index -= 1 | |
| 137 | $game_system.se_play($data_system.cursor_se) | |
| 138 | end | |
| 139 | update_cursor_rect | |
| 140 | refresh | |
| 141 | end | |
| 142 | end | |
| 143 | class Window_Badge_Description < Window_Base | |
| 144 | attr_accessor :text | |
| 145 | def initialize | |
| 146 | @text = '' | |
| 147 | super(0, 0, 288, 128) | |
| 148 | self.contents = Bitmap.new( width - 32, height - 32) | |
| 149 | end | |
| 150 | def refresh | |
| 151 | self.contents.clear | |
| 152 | text = self.contents.format_text(@text, 256) | |
| 153 | text.each_index {|i|
| |
| 154 | self.contents.draw_text(0, 0 + i*32, 256, 32, text[i])} | |
| 155 | end | |
| 156 | def update | |
| 157 | super | |
| 158 | refresh | |
| 159 | end | |
| 160 | end | |
| 161 | class Scene_Badges | |
| 162 | def main | |
| 163 | @badges_window = Window_Badges.new | |
| 164 | @description_window = Window_Badge_Description.new | |
| 165 | @badges_window.y = (480 - @description_window.height) - @badges_window.height | |
| 166 | @description_window.y = @badges_window.y + @badges_window.height | |
| 167 | @description_window.x = @badges_window.x | |
| 168 | @sprite = Spriteset_Map.new | |
| 169 | Graphics.transition | |
| 170 | loop { Graphics.update; Input.update; update; break if $scene != self }
| |
| 171 | @badges_window.dispose | |
| 172 | @description_window.dispose | |
| 173 | @sprite.dispose | |
| 174 | end | |
| 175 | def update | |
| 176 | $scene = Scene_Map.new if Input.trigger?(Input::B) | |
| 177 | if $game_system.badge_array.include?(@badges_window.index + 1) | |
| 178 | @description_window.text = Badges.badge_in_possession(@badges_window.index + 1) | |
| 179 | else | |
| 180 | @description_window.text = Badges.badge_not_in_possession(@badges_window.index + 1) | |
| 181 | end | |
| 182 | @badges_window.update | |
| 183 | @description_window.update | |
| 184 | end | |
| 185 | end |