Advertisement
Guest User

Untitled

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