Advertisement
Guest User

Untitled

a guest
Sep 19th, 2015
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.98 KB | None | 0 0
  1. class Window_PokemonOption < Window_DrawableCommand
  2. attr_reader :mustUpdateOptions
  3.  
  4. def initialize(options,x,y,width,height)
  5. @options=options
  6. @nameBaseColor=Color.new(24*8,15*8,0)
  7. @nameShadowColor=Color.new(31*8,22*8,10*8)
  8. @selBaseColor=Color.new(31*8,6*8,3*8)
  9. @selShadowColor=Color.new(31*8,17*8,16*8)
  10. @optvalues=[]
  11. @mustUpdateOptions=false
  12. @optvalues[i]=0
  13. end
  14. super(x,y,width,height)
  15. end
  16.  
  17. def [](i)
  18. return @optvalues[i]
  19. end
  20.  
  21. def []=(i,value)
  22. @optvalues[i]=value
  23. refresh
  24. end
  25.  
  26. def itemCount
  27. return @options.length+1
  28. end
  29.  
  30. def drawItem(index,count,rect)
  31. rect=drawCursor(index,rect)
  32. optionname=([email protected]) ? _INTL("Cancel") : @options[index].name
  33. optionwidth=(rect.width*9/20)
  34. pbDrawShadowText(self.contents,rect.x,rect.y,optionwidth,rect.height,optionname,
  35. @nameBaseColor,@nameShadowColor)
  36. self.contents.draw_text(rect.x,rect.y,optionwidth,rect.height,optionname)
  37. return if [email protected]
  38. if @options[index].is_a?(EnumOption)
  39. if @options[index].values.length>1
  40. totalwidth=0
  41. for value in @options[index].values
  42. totalwidth+=self.contents.text_size(value).width
  43. end
  44. spacing=(optionwidth-totalwidth)/(@options[index].values.length-1)
  45. spacing=0 if spacing<0
  46. xpos=optionwidth+rect.x
  47. ivalue=0
  48. for value in @options[index].values
  49. pbDrawShadowText(self.contents,xpos,rect.y,optionwidth,rect.height,value,
  50. (ivalue==self[index]) ? @selBaseColor : self.baseColor,
  51. (ivalue==self[index]) ? @selShadowColor : self.shadowColor
  52. )
  53. self.contents.draw_text(xpos,rect.y,optionwidth,rect.height,value)
  54. xpos+=self.contents.text_size(value).width
  55. xpos+=spacing
  56. ivalue+=1
  57. end
  58. else
  59. pbDrawShadowText(self.contents,rect.x+optionwidth,rect.y,optionwidth,rect.height,
  60. optionname,self.baseColor,self.shadowColor)
  61. end
  62. elsif @options[index].is_a?(NumberOption)
  63. value=_ISPRINTF("{1:d}",@options[index].optstart+self[index])
  64. xpos=optionwidth+rect.x
  65. pbDrawShadowText(self.contents,xpos,rect.y,optionwidth,rect.height,value,
  66. @selBaseColor,@selShadowColor)
  67. else
  68. value=@options[index].values[self[index]]
  69. xpos=optionwidth+rect.x
  70. pbDrawShadowText(self.contents,xpos,rect.y,optionwidth,rect.height,value,
  71. @selBaseColor,@selShadowColor)
  72. self.contents.draw_text(xpos,rect.y,optionwidth,rect.height,value)
  73. end
  74. end
  75.  
  76. def update
  77. dorefresh=false
  78. oldindex=self.index
  79. @mustUpdateOptions=false
  80. super
  81. dorefresh=self.index!=oldindex
  82. if self.active && self.index<@options.length
  83. if Input.repeat?(Input::LEFT)
  84. self[self.index]=@options[self.index].prev(self[self.index])
  85. dorefresh=true
  86. @mustUpdateOptions=true
  87. elsif Input.repeat?(Input::RIGHT)
  88. self[self.index]=@options[self.index].next(self[self.index])
  89. dorefresh=true
  90. @mustUpdateOptions=true
  91. end
  92. end
  93. refresh if dorefresh
  94. end
  95. end
  96.  
  97.  
  98.  
  99. module PropertyMixin
  100. def get
  101. @getProc ? @getProc.call() : nil
  102. end
  103.  
  104. def set(value)
  105. @setProc.call(value) if @setProc
  106. end
  107. end
  108.  
  109.  
  110.  
  111. class EnumOption
  112. include PropertyMixin
  113. attr_reader :values
  114. attr_reader :name
  115.  
  116. def initialize(name,options,getProc,setProc)
  117. @values=options
  118. @name=name
  119. @getProc=getProc
  120. @setProc=setProc
  121. end
  122.  
  123. def next(current)
  124. index=current+1
  125. [email protected] if index>@values.length-1
  126. return index
  127. end
  128.  
  129. def prev(current)
  130. index=current-1
  131. index=0 if index<0
  132. return index
  133. end
  134. end
  135.  
  136.  
  137.  
  138. class EnumOption2
  139. include PropertyMixin
  140. attr_reader :values
  141. attr_reader :name
  142.  
  143. def initialize(name,options,getProc,setProc)
  144. @values=options
  145. @name=name
  146. @getProc=getProc
  147. @setProc=setProc
  148. end
  149.  
  150. def next(current)
  151. index=current+1
  152. [email protected] if index>@values.length-1
  153. return index
  154. end
  155.  
  156. def prev(current)
  157. index=current-1
  158. index=0 if index<0
  159. return index
  160. end
  161. end
  162.  
  163.  
  164.  
  165. class NumberOption
  166. include PropertyMixin
  167. attr_reader :name
  168. attr_reader :optstart
  169.  
  170. def initialize(name,format,optstart,optend,getProc,setProc)
  171. @name=name
  172. @format=format
  173. @optstart=optstart
  174. @optend=optend
  175. @getProc=getProc
  176. @setProc=setProc
  177. end
  178.  
  179. def next(current)
  180. index=current+@optstart
  181. index+=1
  182. if index>@optend
  183. index=@optstart
  184. end
  185. return index-@optstart
  186. end
  187.  
  188. def prev(current)
  189. index=current+@optstart
  190. index-=1
  191. if index<@optstart
  192. index=@optend
  193. end
  194. return index-@optstart
  195. end
  196. end
  197.  
  198. #####################
  199. #
  200. # Stores game options
  201. # Default options are at the top of script section SpriteWindow.
  202.  
  203. $SpeechFrames=[
  204. MessageConfig::TextSkinName, # Default: speech hgss 1
  205. "speech hgss 2",
  206. "speech hgss 3",
  207. "speech hgss 4",
  208. "speech hgss 5",
  209. "speech hgss 6",
  210. "speech hgss 7",
  211. "speech hgss 8",
  212. "speech hgss 9",
  213. "speech hgss 10",
  214. "speech hgss 11",
  215. "speech hgss 12",
  216. "speech hgss 13",
  217. "speech hgss 14",
  218. "speech hgss 15",
  219. "speech hgss 16",
  220. "speech hgss 17",
  221. "speech hgss 18",
  222. "speech hgss 19",
  223. "speech hgss 20",
  224. "speech pl 18"
  225. ]
  226.  
  227. $TextFrames=[
  228. "Graphics/Windowskins/"+MessageConfig::ChoiceSkinName, # Default: choice 1
  229. "Graphics/Windowskins/choice 2",
  230. "Graphics/Windowskins/choice 3",
  231. "Graphics/Windowskins/choice 4",
  232. "Graphics/Windowskins/choice 5",
  233. "Graphics/Windowskins/choice 6",
  234. "Graphics/Windowskins/choice 7",
  235. "Graphics/Windowskins/choice 8",
  236. "Graphics/Windowskins/choice 9",
  237. "Graphics/Windowskins/choice 10",
  238. "Graphics/Windowskins/choice 11",
  239. "Graphics/Windowskins/choice 12",
  240. "Graphics/Windowskins/choice 13",
  241. "Graphics/Windowskins/choice 14",
  242. "Graphics/Windowskins/choice 15",
  243. "Graphics/Windowskins/choice 16",
  244. "Graphics/Windowskins/choice 17",
  245. "Graphics/Windowskins/choice 18",
  246. "Graphics/Windowskins/choice 19",
  247. "Graphics/Windowskins/choice 20",
  248. "Graphics/Windowskins/choice 21",
  249. "Graphics/Windowskins/choice 22",
  250. "Graphics/Windowskins/choice 23",
  251. "Graphics/Windowskins/choice 24",
  252. "Graphics/Windowskins/choice 25",
  253. "Graphics/Windowskins/choice 26",
  254. "Graphics/Windowskins/choice 27",
  255. "Graphics/Windowskins/choice 28"
  256. ]
  257.  
  258. $VersionStyles=[
  259. [MessageConfig::FontName], # Default font style - Power Green/"Pokemon Emerald"
  260. ["Power Red and Blue"],
  261. ["Power Red and Green"],
  262. ["Power Clear"],
  263. ["Power Black and White"]
  264. ]
  265.  
  266. def pbSettingToTextSpeed(speed)
  267. return 2 if speed==0
  268. return 1 if speed==1
  269. return -2 if speed==2
  270. return MessageConfig::TextSpeed if MessageConfig::TextSpeed
  271. return ((Graphics.frame_rate>40) ? -2 : 1)
  272. end
  273.  
  274.  
  275.  
  276. module MessageConfig
  277. def self.pbDefaultSystemFrame
  278. if !$PokemonSystem
  279. return pbResolveBitmap("Graphics/Windowskins/"+MessageConfig::ChoiceSkinName)||""
  280. else
  281. return pbResolveBitmap($TextFrames[$PokemonSystem.frame])||""
  282. end
  283. end
  284.  
  285. def self.pbDefaultSpeechFrame
  286. if !$PokemonSystem
  287. return pbResolveBitmap("Graphics/Windowskins/"+MessageConfig::TextSkinName)||""
  288. else
  289. return pbResolveBitmap("Graphics/Windowskins/"+$SpeechFrames[$PokemonSystem.textskin])||""
  290. end
  291. end
  292.  
  293. def self.pbDefaultSystemFontName
  294. if !$PokemonSystem
  295. return MessageConfig.pbTryFonts(MessageConfig::FontName,"Arial Narrow","Arial")
  296. else
  297. return MessageConfig.pbTryFonts($VersionStyles[$PokemonSystem.font][0],"Arial Narrow","Arial")
  298. end
  299. end
  300.  
  301. def self.pbDefaultTextSpeed
  302. return pbSettingToTextSpeed($PokemonSystem ? $PokemonSystem.textspeed : nil)
  303. end
  304.  
  305. def pbGetSystemTextSpeed
  306. return $PokemonSystem ? $PokemonSystem.textspeed : ((Graphics.frame_rate>40) ? 2 : 3)
  307. end
  308. end
  309.  
  310.  
  311.  
  312. class PokemonSystem
  313. attr_accessor :textspeed
  314. attr_accessor :battlescene
  315. attr_accessor :battlestyle
  316. attr_accessor :frame
  317. attr_accessor :textskin
  318. attr_accessor :font
  319. attr_accessor :screensize
  320. attr_accessor :language
  321. attr_accessor :volume #VOLUME
  322. attr_accessor :soundvolume #VOLUME
  323.  
  324. def language
  325. return (!@language) ? 0 : @language
  326. end
  327.  
  328. def textskin
  329. return (!@textskin) ? 0 : @textskin
  330. end
  331.  
  332. def tilemap; return MAPVIEWMODE; end
  333.  
  334. def initialize
  335. @textspeed = 1 # Text speed (0=slow, 1=mid, 2=fast)
  336. @battlescene = 0 # Battle scene (animations) (0=on, 1=off)
  337. @battlestyle = 0 # Battle style (0=shift, 1=set)
  338. @frame = 0 # Default window frame (see also $TextFrames)
  339. @textskin = 0 # Speech frame
  340. @font = 0 # Font (see also $VersionStyles)
  341. @screensize = (DEFAULTSCREENZOOM.floor).to_i # 0=half size, 1=full size, 2=double size
  342. @language = 0 # Language (see also LANGUAGES in script PokemonSystem)
  343. @volume = 100
  344. end
  345. end
  346.  
  347.  
  348.  
  349. class PokemonOptionScene
  350. def pbUpdate
  351. pbUpdateSpriteHash(@sprites)
  352. end
  353.  
  354. def pbStartScene
  355. @sprites={}
  356. @viewport=Viewport.new(0,0,Graphics.width,Graphics.height)
  357. @viewport.z=99999
  358. @volume=100 if !@volume
  359. @sprites["title"]=Window_UnformattedTextPokemon.newWithSize(
  360. _INTL("Options"),0,0,Graphics.width,64,@viewport)
  361. @sprites["textbox"]=Kernel.pbCreateMessageWindow
  362. @sprites["textbox"].letterbyletter=false
  363. @sprites["textbox"].text=_INTL("Speech frame {1}.",1+$PokemonSystem.textskin)
  364. # These are the different options in the game. To add an option, define a
  365. # setter and a getter for that option. To delete an option, comment it out
  366. # or delete it. The game's options may be placed in any order.
  367. @PokemonOptions=[
  368. NumberOption.new(_INTL("Music Volume"),_INTL("%d\%"),0,100, #VOLUME
  369. proc { $PokemonSystem.volume }, #VOLUME
  370. proc {|value| #VOLUME
  371. $PokemonSystem.volume=value #VOLUME
  372. if $game_system.playing_bgm != nil #VOLUME
  373. $game_system.playing_bgm.volume=value #VOLUME
  374. $game_system.bgm_memorize #VOLUME
  375. $game_system.bgm_stop #VOLUME
  376. $game_system.bgm_restore #VOLUME
  377. end #VOLUME
  378.  
  379. }
  380. ),
  381. NumberOption.new(_INTL("Sound Volume"),_INTL("%d\%"),0,100, #VOLUME
  382. proc { $PokemonSystem.soundvolume }, #VOLUME
  383. proc {|value| #VOLUME
  384. $PokemonSystem.soundvolume=value #VOLUME
  385. if $game_system.playing_bgs != nil #VOLUME
  386. $game_system.playing_bgs.volume=value #VOLUME
  387. $game_system.bgs_memorize #VOLUME
  388. $game_system.bgs_stop #VOLUME
  389. $game_system.bgs_restore #VOLUME
  390. end #VOLUME
  391.  
  392. }
  393. ),
  394. EnumOption.new(_INTL("Text Speed"),[_INTL("Slow"),_INTL("Mid"),_INTL("Fast")],
  395. proc { $PokemonSystem.textspeed },
  396. proc {|value|
  397. $PokemonSystem.textspeed=value
  398. MessageConfig.pbSetTextSpeed(pbSettingToTextSpeed(value))
  399. }
  400. ),
  401. EnumOption.new(_INTL("Battle Scene"),[_INTL("On"),_INTL("Off")],
  402. proc { $PokemonSystem.battlescene },
  403. proc {|value| $PokemonSystem.battlescene=value }
  404. ),
  405. EnumOption.new(_INTL("Battle Style"),[_INTL("Shift"),_INTL("Set")],
  406. proc { $PokemonSystem.battlestyle },
  407. proc {|value| $PokemonSystem.battlestyle=value }
  408. ),
  409. NumberOption.new(_INTL("Speech Frame"),_INTL("Type %d"),1,$SpeechFrames.length,
  410. proc { $PokemonSystem.textskin },
  411. proc {|value| $PokemonSystem.textskin=value;
  412. MessageConfig.pbSetSpeechFrame(
  413. "Graphics/Windowskins/"+$SpeechFrames[value]) }
  414. ),
  415. NumberOption.new(_INTL("Menu Frame"),_INTL("Type %d"),1,$TextFrames.length,
  416. proc { $PokemonSystem.frame },
  417. proc {|value|
  418. $PokemonSystem.frame=value
  419. MessageConfig.pbSetSystemFrame($TextFrames[value])
  420. }
  421. ),
  422. EnumOption.new(_INTL("Font Style"),[_INTL("Em"),_INTL("R/S"),_INTL("FRLG"),_INTL("DP"),_INTL("BW")],
  423. proc { $PokemonSystem.font },
  424. proc {|value|
  425. $PokemonSystem.font=value
  426. MessageConfig.pbSetSystemFontName($VersionStyles[value])
  427. }
  428. ),
  429. # Quote this section out if you don't want to allow players to change the screen
  430. # size.
  431. EnumOption.new(_INTL("Screen Size"),[_INTL("Small"),_INTL("Medium"),_INTL("Large")],
  432. proc { $PokemonSystem.screensize },
  433. proc {|value|
  434. oldvalue=$PokemonSystem.screensize
  435. $PokemonSystem.screensize=value
  436. $ResizeOffsetX=0
  437. $ResizeOffsetY=0
  438. pbSetResizeFactor([0.5,1.0,2.0][value])
  439. if value!=oldvalue
  440. ObjectSpace.each_object(TilemapLoader){|o| next if o.disposed?; o.updateClass }
  441. end
  442. }
  443. )
  444. # ------------------------------------------------------------------------------
  445. ]
  446. @sprites["option"]=Window_PokemonOption.new(@PokemonOptions,0,
  447. @sprites["title"].height,Graphics.width,
  448. Graphics.height-@sprites["title"].height-@sprites["textbox"].height)
  449. @sprites["option"].viewport=@viewport
  450. @sprites["option"].visible=true
  451. # Get the values of each option
  452. @sprites["option"][i]=(@PokemonOptions[i].get || 0)
  453. end
  454. pbDeactivateWindows(@sprites)
  455. pbFadeInAndShow(@sprites) { pbUpdate }
  456. end
  457.  
  458. def pbOptions
  459. pbActivateWindow(@sprites,"option"){
  460. loop do
  461. Graphics.update
  462. Input.update
  463. pbUpdate
  464. if @sprites["option"].mustUpdateOptions
  465. # Set the values of each option
  466. @PokemonOptions[i].set(@sprites["option"][i])
  467. end
  468. @sprites["textbox"].setSkin(MessageConfig.pbGetSpeechFrame())
  469. @sprites["textbox"].width=@sprites["textbox"].width # Necessary evil
  470. pbSetSystemFont(@sprites["textbox"].contents)
  471. @sprites["textbox"].text=_INTL("Speech frame {1}.",1+$PokemonSystem.textskin)
  472. end
  473. if Input.trigger?(Input::B)
  474. break
  475. end
  476. if Input.trigger?(Input::C) && @sprites["option"][email protected]
  477. break
  478. end
  479. end
  480. }
  481. end
  482.  
  483. def pbEndScene
  484. pbFadeOutAndHide(@sprites) { pbUpdate }
  485. # Set the values of each option
  486. @PokemonOptions[i].set(@sprites["option"][i])
  487. end
  488. Kernel.pbDisposeMessageWindow(@sprites["textbox"])
  489. pbDisposeSpriteHash(@sprites)
  490. pbRefreshSceneMap
  491. @viewport.dispose
  492. end
  493. end
  494.  
  495.  
  496.  
  497. class PokemonOption
  498. def initialize(scene)
  499. @scene=scene
  500. end
  501.  
  502. def pbStartScreen
  503. @scene.pbStartScene
  504. @scene.pbOptions
  505. @scene.pbEndScene
  506. end
  507. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement