Nyaruko69

Untitled

May 25th, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.25 KB | None | 0 0
  1. TRAINERSPRITESCALE = 2
  2. # used to scale the Pokemon bitmaps to 200%
  3. POKEMONSPRITESCALE = 2
  4. # used to scale the backsprite for battle perspective (200%)
  5. BACKSPRITESCALE = 2
  6.  
  7. class DynamicPokemonSprite
  8. attr_accessor :shadow
  9. attr_accessor :sprite
  10. attr_accessor :showshadow
  11. attr_accessor :status
  12. attr_accessor :hidden
  13. attr_accessor :fainted
  14. attr_accessor :anim
  15. attr_accessor :charged
  16. attr_accessor :isShadow
  17. attr_reader :loaded
  18. attr_reader :selected
  19. attr_reader :isSub
  20. attr_reader :viewport
  21. attr_reader :pulse
  22.  
  23. def initialize(doublebattle,index,viewport=nil)
  24. @viewport=viewport
  25. @metrics=load_data("Data/metrics.dat")
  26. @selected=0
  27. @frame=0
  28. @frame2=0
  29. @frame3=0
  30.  
  31. @status=0
  32. @loaded=false
  33. @charged=false
  34. @index=index
  35. @doublebattle=doublebattle
  36. @showshadow=true
  37. @altitude=0
  38. @yposition=0
  39. @shadow=Sprite.new(@viewport)
  40. @sprite=Sprite.new(@viewport)
  41. back=(@index%2==0)
  42. @substitute=AnimatedBitmapWrapper.new("Graphics/Battlers/"+(back ? "substitute_back" : "substitute"),POKEMONSPRITESCALE)
  43. @overlay=Sprite.new(@viewport)
  44. @isSub=false
  45. @lock=false
  46. @pokemon=nil
  47. @still=false
  48. @hidden=false
  49. @fainted=false
  50. @anim=false
  51. @isShadow=false
  52.  
  53. @fp = {}
  54. for i in 0...16
  55. @fp["#{i}"] = Sprite.new(@viewport)
  56. @fp["#{i}"].bitmap = pbBitmap("Graphics/Animations/ebShadow")
  57. @fp["#{i}"].ox = @fp["#{i}"].bitmap.width/4
  58. @fp["#{i}"].oy = @fp["#{i}"].bitmap.height/2
  59. @fp["#{i}"].src_rect.set(0,0,@fp["#{i}"].bitmap.width/2,@fp["#{i}"].bitmap.height)
  60. @fp["#{i}"].opacity = 0
  61. end
  62.  
  63. for i in 0...16
  64. @fp["c#{i}"] = Sprite.new(@viewport)
  65. @fp["c#{i}"].bitmap = pbBitmap("Graphics/Animations/ebCharged")
  66. @fp["c#{i}"].ox = @fp["c#{i}"].bitmap.width/8
  67. @fp["c#{i}"].oy = @fp["c#{i}"].bitmap.height
  68. @fp["c#{i}"].src_rect.set(0,0,@fp["c#{i}"].bitmap.width/4,@fp["c#{i}"].bitmap.height)
  69. @fp["c#{i}"].opacity = 0
  70. end
  71.  
  72. for j in 0...4
  73. @fp["r#{j}"] = Sprite.new(viewport)
  74. @fp["r#{j}"].bitmap = pbBitmap("Graphics/Animations/ebRipple")
  75. @fp["r#{j}"].ox = @fp["r#{j}"].bitmap.width/2
  76. @fp["r#{j}"].oy = @fp["r#{j}"].bitmap.height/2
  77. @fp["r#{j}"].zoom_x = 0
  78. @fp["r#{j}"].zoom_y = 0
  79. @fp["r#{j}"].param = 0
  80. end
  81.  
  82. @pulse = 8
  83. @k = 1
  84. end
  85.  
  86. def battleIndex; return @index; end
  87. def x; @sprite.x; end
  88. def y; @sprite.y; end
  89. def z; @sprite.z; end
  90. def ox; @sprite.ox; end
  91. def oy; @sprite.oy; end
  92. def zoom_x; @sprite.zoom_x; end
  93. def zoom_y; @sprite.zoom_y; end
  94. def visible; @sprite.visible; end
  95. def opacity; @sprite.opacity; end
  96. def width; @bitmap.width; end
  97. def height; @bitmap.height; end
  98. def tone; @sprite.tone; end
  99. def bitmap; @bitmap.bitmap; end
  100. def actualBitmap; @bitmap; end
  101. def disposed?; @sprite.disposed?; end
  102. def color; @sprite.color; end
  103. def src_rect; @sprite.src_rect; end
  104. def blend_type; @sprite.blend_type; end
  105. def angle; @sprite.angle; end
  106. def mirror; @sprite.mirror; end
  107. def src_rect; return @sprite.src_rect; end
  108. def src_rect=(val)
  109. @sprite.src_rect=val
  110. end
  111. def lock
  112. @lock=true
  113. end
  114. def bitmap=(val)
  115. @bitmap.bitmap=val
  116. end
  117. def x=(val)
  118. @sprite.x=val
  119. @shadow.x=val
  120. end
  121. def ox=(val)
  122. @sprite.ox=val
  123. self.formatShadow
  124. end
  125. def addOx(val)
  126. @sprite.ox+=val
  127. self.formatShadow
  128. end
  129. def oy=(val)
  130. @sprite.oy=val
  131. self.formatShadow
  132. end
  133. def addOy(val)
  134. @sprite.oy+=val
  135. self.formatShadow
  136. end
  137. def y=(val)
  138. @sprite.y=val
  139. @shadow.y=val
  140. end
  141. def z=(val)
  142. @shadow.z=(val==32) ? 31 : 10
  143. @sprite.z=val
  144. end
  145. def zoom_x=(val)
  146. @sprite.zoom_x=val
  147. self.formatShadow
  148. end
  149. def zoom_y=(val)
  150. @sprite.zoom_y=val
  151. self.formatShadow
  152. end
  153. def visible=(val)
  154. return if @hidden
  155. @sprite.visible=val
  156. if @fp
  157. for key in @fp.keys
  158. @fp[key].visible=val
  159. end
  160. end
  161. self.formatShadow
  162. end
  163. def opacity=(val)
  164. @sprite.opacity=val
  165. self.formatShadow
  166. end
  167. def tone=(val)
  168. @sprite.tone=val
  169. end
  170. def color=(val)
  171. @sprite.color=val
  172. if @fp
  173. for key in @fp.keys
  174. @fp[key].color=val
  175. end
  176. end
  177. end
  178. def blend_type=(val)
  179. @sprite.blend_type=val
  180. self.formatShadow
  181. end
  182. def angle=(val)
  183. @sprite.angle=(val)
  184. self.formatShadow
  185. end
  186. def mirror=(val)
  187. @sprite.mirror=(val)
  188. self.formatShadow
  189. end
  190. def dispose
  191. @sprite.dispose
  192. @shadow.dispose
  193. pbDisposeSpriteHash(@fp)
  194. end
  195. def selected=(val)
  196. @selected=val
  197. @sprite.visible=true if !@hidden
  198. end
  199. def toneAll(val)
  200. @sprite.tone.red+=val
  201. @sprite.tone.green+=val
  202. @sprite.tone.blue+=val
  203. end
  204.  
  205. def setBitmap(file,shadow=false)
  206. self.resetParticles
  207. @showshadow = shadow
  208. @bitmap = AnimatedBitmapWrapper.new(file)
  209. @sprite.bitmap = @bitmap.bitmap.clone
  210. @shadow.bitmap = @bitmap.bitmap.clone
  211. @loaded = true
  212. self.formatShadow
  213. end
  214.  
  215. def setPokemonBitmap(pokemon,back=false,species=nil)
  216. self.resetParticles
  217. return if !pokemon || pokemon.nil?
  218. @pokemon = pokemon
  219. @isShadow = true if @pokemon.isShadow?
  220. @altitude = @metrics[2][pokemon.species]
  221. if back
  222. @yposition = @metrics[0][pokemon.species]
  223. @altitude *= 0.5
  224. else
  225. @yposition = @metrics[1][pokemon.species]
  226. end
  227. scale = back ? BACKSPRITESCALE : POKEMONSPRITESCALE
  228. if !species.nil?
  229. @bitmap = pbLoadPokemonBitmapSpecies(pokemon,species,back,scale)
  230. else
  231. @bitmap = pbLoadPokemonBitmap(pokemon,back,scale)
  232. end
  233. @sprite.bitmap = @bitmap.bitmap.clone
  234. @shadow.bitmap = @bitmap.bitmap.clone
  235. @sprite.ox = @bitmap.width/2
  236. @sprite.oy = @bitmap.height
  237. @sprite.oy += @altitude
  238. @sprite.oy -= @yposition
  239. @sprite.oy -= pokemon.formOffsetY if pokemon.respond_to?(:formOffsetY)
  240.  
  241. @fainted = false
  242. @loaded = true
  243. @hidden = false
  244. self.visible = true
  245. @pulse = 8
  246. @k = 1
  247. self.formatShadow
  248. end
  249.  
  250. def resetParticles
  251. if @fp
  252. for key in @fp.keys
  253. @fp[key].visible = false
  254. end
  255. end
  256. @isShadow = false
  257. @charged = false
  258. end
  259.  
  260. def refreshMetrics(metrics)
  261. @metrics = metrics
  262. @altitude = @metrics[2][@pokemon.species]
  263. if (@index%2==0)
  264. @yposition = @metrics[0][@pokemon.species]
  265. @altitude *= 0.5
  266. else
  267. @yposition = @metrics[1][@pokemon.species]
  268. end
  269.  
  270. @sprite.ox = @bitmap.width/2
  271. @sprite.oy = @bitmap.height
  272. @sprite.oy += @altitude
  273. @sprite.oy -= @yposition
  274. @sprite.oy -= @pokemon.formOffsetY if @pokemon.respond_to?(:formOffsetY)
  275. end
  276.  
  277. def setSubstitute
  278. @isSub = true
  279. @sprite.bitmap = @substitute.bitmap.clone
  280. @shadow.bitmap = @substitute.bitmap.clone
  281. @sprite.ox = @substitute.width/2
  282. @sprite.oy = @substitute.height
  283. self.formatShadow
  284. end
  285.  
  286. def removeSubstitute
  287. @isSub = false
  288. @sprite.bitmap = @bitmap.bitmap.clone
  289. @shadow.bitmap = @bitmap.bitmap.clone
  290. @sprite.ox = @bitmap.width/2
  291. @sprite.oy = @bitmap.height
  292. @sprite.oy += @altitude
  293. @sprite.oy -= @yposition
  294. @sprite.oy -= @pokemon.formOffsetY if @pokemon && @pokemon.respond_to?(:formOffsetY)
  295. self.formatShadow
  296. end
  297.  
  298. def still
  299. @still = true
  300. end
  301.  
  302. def clear
  303. @sprite.bitmap.clear
  304. @bitmap.dispose
  305. end
  306.  
  307. def formatShadow
  308. @shadow.zoom_x = @sprite.zoom_x*0.90
  309. @shadow.zoom_y = @sprite.zoom_y*0.30
  310. @shadow.ox = @sprite.ox - 6
  311. @shadow.oy = @sprite.oy - 6
  312. @shadow.opacity = @sprite.opacity*0.3
  313. @shadow.tone = Tone.new(-255,-255,-255,255)
  314. @shadow.visible = @sprite.visible
  315. @shadow.mirror = @sprite.mirror
  316. @shadow.angle = @sprite.angle
  317.  
  318. @shadow.visible = false if !@showshadow
  319. end
  320.  
  321. def update(angle=74)
  322. if @still
  323. @still = false
  324. return
  325. end
  326. return if @lock
  327. return if !@bitmap || @bitmap.disposed?
  328. if @isSub
  329. @substitute.update
  330. @sprite.bitmap=@substitute.bitmap.clone
  331. @shadow.bitmap=@substitute.bitmap.clone
  332. else
  333. @bitmap.update
  334. @sprite.bitmap=@bitmap.bitmap.clone
  335. @shadow.bitmap=@bitmap.bitmap.clone
  336. end
  337. @shadow.skew(angle)
  338. if !@anim && !@pulse.nil?
  339. @pulse += @k
  340. @k *= -1 if @pulse == 128 || @pulse == 8
  341. case @status
  342. when 0
  343. @sprite.color = Color.new(0,0,0,0)
  344. when 1 #PSN
  345. @sprite.color = Color.new(109,55,130,@pulse)
  346. when 2 #PAR
  347. @sprite.color = Color.new(204,152,44,@pulse)
  348. when 3 #FRZ
  349. @sprite.color = Color.new(56,160,193,@pulse)
  350. when 4 #BRN
  351. @sprite.color = Color.new(206,73,43,@pulse)
  352. end
  353. end
  354. @anim = false
  355. # PokΓ©mon sprite blinking when targeted or damaged
  356. @frame += 1
  357. @frame = 0 if @frame > 256
  358. if @selected==2 # When targeted or damaged
  359. @sprite.visible = (@frame%10<7) && !@hidden
  360. end
  361. self.formatShadow
  362. end
  363.  
  364. def shadowUpdate
  365. return if !@loaded
  366. return if self.disposed? || @bitmap.disposed?
  367. for i in 0...16
  368. next if i > @frame2/4
  369. @fp["#{i}"].visible = @showshadow
  370. @fp["#{i}"].visible = false if @hidden
  371. @fp["#{i}"].visible = false if !@isShadow
  372. next if !@isShadow
  373. if @fp["#{i}"].opacity <= 0
  374. @fp["#{i}"].toggle = 2
  375. z = [0.5,0.6,0.7,0.8,0.9,1.0][rand(6)]
  376. @fp["#{i}"].param = z
  377. @fp["#{i}"].x = self.x - self.bitmap.width*self.zoom_x/2 + rand(self.bitmap.width)*self.zoom_x
  378. @fp["#{i}"].y = self.y - 64*self.zoom_y + rand(64)*self.zoom_y
  379. @fp["#{i}"].z = (rand(2)==0) ? self.z - 1 : self.z + 1
  380. @fp["#{i}"].speed = (rand(2)==0) ? +1 : -1
  381. @fp["#{i}"].src_rect.x = rand(2)*@fp["#{i}"].bitmap.width/2
  382. end
  383. @fp["#{i}"].zoom_x = @fp["#{i}"].param*self.zoom_x
  384. @fp["#{i}"].zoom_y = @fp["#{i}"].param*self.zoom_y
  385. @fp["#{i}"].param -= 0.01
  386. @fp["#{i}"].y -= 1
  387. @fp["#{i}"].opacity += 8*@fp["#{i}"].toggle
  388. @fp["#{i}"].toggle = -1 if @fp["#{i}"].opacity >= 255
  389. end
  390. @frame2 += 1 if @frame2 < 128
  391. end
  392.  
  393. def chargedUpdate
  394. return if !@loaded
  395. return if self.disposed? || @bitmap.disposed?
  396. for i in 0...16
  397. next if i > @frame3/16
  398. @fp["c#{i}"].visible = @showshadow
  399. @fp["c#{i}"].visible = false if @hidden
  400. @fp["c#{i}"].visible = false if !@charged
  401. next if !@charged
  402. if @fp["c#{i}"].opacity <= 0
  403. x = @sprite.x - @sprite.ox + rand(@sprite.bitmap.width)
  404. y = @sprite.y - @sprite.oy*0.7 + rand(@sprite.bitmap.height*0.8)
  405. @fp["c#{i}"].x = x
  406. @fp["c#{i}"].y = y
  407. @fp["c#{i}"].z = (rand(2)==0) ? self.z - 1 : self.z + 1
  408. @fp["c#{i}"].src_rect.x = rand(4)*@fp["c#{i}"].bitmap.width/4
  409. @fp["c#{i}"].zoom_y = 0.6
  410. @fp["c#{i}"].opacity = 166 + rand(90)
  411. @fp["c#{i}"].mirror = (x < @sprite.x) ? false : true
  412. end
  413. @fp["c#{i}"].zoom_y += 0.1
  414. @fp["c#{i}"].opacity -= 16
  415. end
  416. for j in 0...4
  417. next if j > @frame3/32
  418. @fp["r#{j}"].visible = @showshadow
  419. @fp["r#{j}"].visible = false if @hidden
  420. @fp["r#{j}"].visible = false if !@charged
  421. if @fp["r#{j}"].opacity <= 0
  422. @fp["r#{j}"].opacity = 255
  423. @fp["r#{j}"].zoom_x = 0
  424. @fp["r#{j}"].zoom_y = 0
  425. @fp["r#{j}"].param = 0
  426. end
  427. @fp["r#{j}"].param += 0.01
  428. @fp["r#{j}"].zoom_x = @fp["r#{j}"].param*self.zoom_x
  429. @fp["r#{j}"].zoom_y = @fp["r#{j}"].param*self.zoom_x
  430. @fp["r#{j}"].x = self.x
  431. @fp["r#{j}"].y = self.y
  432. @fp["r#{j}"].opacity -= 2
  433. end
  434. @frame3 += 1 if @frame3 < 256
  435. end
  436. end
  437.  
  438.  
  439. class AnimatedBitmapWrapper
  440. attr_reader :width
  441. attr_reader :height
  442. attr_reader :totalFrames
  443. attr_reader :animationFrames
  444. attr_reader :currentIndex
  445. attr_accessor :scale
  446.  
  447. def initialize(file,scale=2)
  448. raise "filename is nil" if file==nil
  449. raise ".gif files are not supported!" if File.extname(file)==".gif"
  450.  
  451. @scale = scale
  452. @width = 0
  453. @height = 0
  454. @frame = 0
  455. @frames = 2
  456. @direction = +1
  457. @animationFinish = false
  458. @totalFrames = 0
  459. @currentIndex = 0
  460. @speed = 1
  461. # 0 - not moving at all
  462. # 1 - normal speed
  463. # 2 - medium speed
  464. # 3 - slow speed
  465. bmp = BitmapCache.load_bitmap(file)
  466. #bmp = Bitmap.new(file)
  467. @bitmapFile=Bitmap.new(bmp.width,bmp.height); @bitmapFile.blt(0,0,bmp,Rect.new(0,0,bmp.width,bmp.height))
  468. # initializes full Pokemon bitmap
  469. @bitmap=Bitmap.new(@bitmapFile.width,@bitmapFile.height)
  470. @bitmap.blt(0,0,@bitmapFile,Rect.new(0,0,@bitmapFile.width,@bitmapFile.height))
  471. @width=@bitmapFile.height*@scale
  472. @height=@bitmap.height*@scale
  473.  
  474. @totalFrames=@bitmap.width/@bitmap.height
  475. @animationFrames=@totalFrames*@frames
  476. # calculates total number of frames
  477. @loop_points=[0,@totalFrames]
  478. # first value is start, second is end
  479.  
  480. @actualBitmap=Bitmap.new(@width,@height)
  481. @actualBitmap.clear
  482. @actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
  483. end
  484. alias initialize_elite initialize unless self.method_defined?(:initialize_elite)
  485.  
  486. def length; @totalFrames; end
  487. def disposed?; @actualBitmap.disposed?; end
  488. def dispose; @actualBitmap.dispose; end
  489. def copy; @actualBitmap.clone; end
  490. def bitmap; @actualBitmap; end
  491. def bitmap=(val); @actualBitmap=val; end
  492. def each; end
  493. def alterBitmap(index); return @strip[index]; end
  494.  
  495. def prepareStrip
  496. @strip=[]
  497. for i in 0...@totalFrames
  498. bitmap=Bitmap.new(@width,@height)
  499. bitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmapFile,Rect.new((@width/@scale)*i,0,@width/@scale,@height/@scale))
  500. @strip.push(bitmap)
  501. end
  502. end
  503. def compileStrip
  504. @bitmap.clear
  505. for i in 0...@strip.length
  506. @bitmap.stretch_blt(Rect.new((@width/@scale)*i,0,@width/@scale,@height/@scale),@strip[i],Rect.new(0,0,@width,@height))
  507. end
  508. end
  509.  
  510. def reverse
  511. if @direction > 0
  512. @direction=-1
  513. elsif @direction < 0
  514. @direction=+1
  515. end
  516. end
  517.  
  518. def setLoop(start, finish)
  519. @loop_points=[start,finish]
  520. end
  521.  
  522. def setSpeed(value)
  523. @speed=value
  524. end
  525.  
  526. def toFrame(frame)
  527. if frame.is_a?(String)
  528. if frame=="last"
  529. frame=@totalFrames-1
  530. else
  531. frame=0
  532. end
  533. end
  534. frame=@totalFrames if frame > @totalFrames
  535. frame=0 if frame < 0
  536. @currentIndex=frame
  537. @actualBitmap.clear
  538. @actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
  539. end
  540.  
  541. def play
  542. return if @currentIndex >= @loop_points[1]-1
  543. self.update
  544. end
  545.  
  546. def finished?
  547. return (@currentIndex==@totalFrames-1)
  548. end
  549.  
  550. def update
  551. return false if @actualBitmap.disposed?
  552. return false if @speed < 1
  553. case @speed
  554. # frame skip
  555. when 1
  556. @frames=2
  557. when 2
  558. @frames=4
  559. when 3
  560. @frames=5
  561. end
  562. @frame+=1
  563. if @frame >= @frames
  564. # processes animation speed
  565. @currentIndex+=@direction
  566. @currentIndex=@loop_points[0] if @currentIndex >=@loop_points[1]
  567. @currentIndex=@loop_points[1]-1 if @currentIndex < @loop_points[0]
  568. @frame=0
  569. end
  570. @actualBitmap.clear
  571. @actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
  572. # updates the actual bitmap
  573. end
  574. alias update_elite update unless self.method_defined?(:update_elite)
  575.  
  576. # returns bitmap to original state
  577. def deanimate
  578. @frame=0
  579. @currentIndex=0
  580. @actualBitmap.clear
  581. @actualBitmap.stretch_blt(Rect.new(0,0,@width,@height),@bitmap,Rect.new(@currentIndex*(@width/@scale),0,@width/@scale,@height/@scale))
  582. end
  583. end
  584. #===============================================================================
  585. # New Sprite class to utilize the animated bitmap wrappers
  586. #===============================================================================
  587. class BitmapWrapperSprite < Sprite
  588.  
  589. def setBitmap(file,scale=POKEMONSPRITESCALE)
  590. @animatedBitmap = AnimatedBitmapWrapper.new(file,scale)
  591. self.bitmap = @animatedBitmap.bitmap.clone
  592. end
  593.  
  594. def setSpeciesBitmap(species,female=false,form=0,shiny=false,shadow=false,back=false,egg=false)
  595. if species > 0
  596. pokemon = PokeBattle_Pokemon.new(species,5)
  597. @animatedBitmap = pbLoadPokemonBitmapSpecies(pokemon, species, back)
  598. else
  599. @animatedBitmap = AnimatedBitmapWrapper.new("Graphics/Battlers/000")
  600. end
  601. self.bitmap = @animatedBitmap.bitmap.clone
  602. end
  603.  
  604. def play
  605. @animatedBitmap.play
  606. self.bitmap = @animatedBitmap.bitmap.clone
  607. end
  608.  
  609. def finished?; return @animatedBitmap.finished?; end
  610. def animatedBitmap; return @animatedBitmap; end
  611.  
  612. alias update_wrapper update unless self.method_defined?(:update_wrapper)
  613. def update
  614. update_wrapper
  615. return if @animatedBitmap.nil?
  616. @animatedBitmap.update
  617. self.bitmap = @animatedBitmap.bitmap.clone
  618. end
  619.  
  620. end
  621.  
  622. class AnimatedSpriteWrapper < BitmapWrapperSprite; end
  623. #===============================================================================
  624. # Aliases old PokemonBitmap generating functions and creates new ones,
  625. # utilizing the new BitmapWrapper
  626. #===============================================================================
  627. alias pbLoadPokemonBitmap_ebs pbLoadPokemonBitmap unless defined?(:pbLoadPokemonBitmap_ebs)
  628. def pbLoadPokemonBitmap(pokemon, back=false,scale=POKEMONSPRITESCALE)
  629. return pbLoadPokemonBitmapSpecies(pokemon,pokemon.species,back,scale)
  630. end
  631.  
  632. # Note: Returns an AnimatedBitmap, not a Bitmap
  633. alias pbLoadPokemonBitmapSpecies_ebs pbLoadPokemonBitmapSpecies unless defined?(:pbLoadPokemonBitmapSpecies_ebs)
  634. def pbLoadPokemonBitmapSpecies(pokemon, species, back=false, scale=POKEMONSPRITESCALE)
  635. ret=nil
  636. pokemon = pokemon.pokemon if pokemon.respond_to?(:pokemon)
  637. if pokemon.isEgg?
  638. bitmapFileName=sprintf("Graphics/Battlers/Eggs/%s",getConstantName(PBSpecies,species)) rescue nil
  639. if !pbResolveBitmap(bitmapFileName)
  640. bitmapFileName=sprintf("Graphics/Battlers/Eggs/%03d",species)
  641. if !pbResolveBitmap(bitmapFileName)
  642. bitmapFileName=sprintf("Graphics/Battlers/Eggs/000")
  643. end
  644. end
  645. bitmapFileName=pbResolveBitmap(bitmapFileName)
  646. else
  647. bitmapFileName=pbCheckPokemonBitmapFiles([species,back,
  648. (pokemon.isFemale?),
  649. pokemon.isShiny?,
  650. (pokemon.form rescue 0),
  651. (pokemon.isShadow? rescue false)])
  652. end
  653. raise missingPokeSpriteError(pokemon,back) if bitmapFileName.nil?
  654. animatedBitmap=AnimatedBitmapWrapper.new(bitmapFileName,scale) if bitmapFileName
  655. ret=animatedBitmap if bitmapFileName
  656. # Full compatibility with the alterBitmap methods is maintained
  657. # but unless the alterBitmap method gets rewritten and sprite animations get
  658. # hardcoded in the system, the bitmap alterations will not function properly
  659. # as they will not account for the sprite animation itself
  660.  
  661. # alterBitmap methods for static sprites will work just fine
  662. alterBitmap=(MultipleForms.getFunction(species,"alterBitmap") rescue nil) if !pokemon.isEgg? && animatedBitmap && animatedBitmap.totalFrames==1 # remove this totalFrames clause to allow for dynamic sprites too
  663. if bitmapFileName && alterBitmap
  664. animatedBitmap.prepareStrip
  665. for i in 0...animatedBitmap.totalFrames
  666. alterBitmap.call(pokemon,animatedBitmap.alterBitmap(i))
  667. end
  668. animatedBitmap.compileStrip
  669. ret=animatedBitmap
  670. end
  671. return ret
  672. end
  673.  
  674. # Note: Returns an AnimatedBitmap, not a Bitmap
  675. def pbLoadSpeciesBitmap(species,female=false,form=0,shiny=false,shadow=false,back=false,egg=false,scale=POKEMONSPRITESCALE)
  676. ret = nil
  677. if egg
  678. bitmapFileName=sprintf("Graphics/Battlers/Eggs/%s",getConstantName(PBSpecies,species)) rescue nil
  679. if !pbResolveBitmap(bitmapFileName)
  680. bitmapFileName=sprintf("Graphics/Battlers/Eggs/%03d",species)
  681. if !pbResolveBitmap(bitmapFileName)
  682. bitmapFileName=sprintf("Graphics/Battlers/Eggs/000")
  683. end
  684. end
  685. bitmapFileName=pbResolveBitmap(bitmapFileName)
  686. else
  687. bitmapFileName = pbCheckPokemonBitmapFiles([species,back,female,shiny,form,shadow])
  688. end
  689. if bitmapFileName
  690. ret = AnimatedBitmapWrapper.new(bitmapFileName,scale)
  691. end
  692. return ret
  693. end
  694.  
  695. # returns error message upon missing sprites
  696. def missingPokeSpriteError(pokemon,back)
  697. error_b = back ? "Back" : "Front"
  698. error_b += "Shiny" if pokemon.isShiny?
  699. error_b += "/Female/" if pokemon.isFemale?
  700. error_b += " shadow" if pokemon.isShadow?
  701. error_b += " form #{pokemon.form} " if pokemon.form > 0
  702. return "Woops, looks like you're missing the #{error_b} sprite for #{PBSpecies.getName(pokemon.species)}!"
  703. end
  704.  
  705. # new methods of handing Pokemon sprite name references
  706. def pbCheckPokemonBitmapFiles(params)
  707. species = params[0]
  708. back = params[1]
  709. factors = []
  710. factors.push([5,params[5],false]) if params[5] && params[5]!=false # shadow
  711. factors.push([2,params[2],false]) if params[2] && params[2]!=false # gender
  712. factors.push([3,params[3],false]) if params[3] && params[3]!=false # shiny
  713. factors.push([4,params[4].to_s,""]) if params[4] && params[4].to_s!="" && params[4].to_s!="0" # form
  714. tshadow = false
  715. tgender = false
  716. tshiny = false
  717. tform = ""
  718. for i in 0...2**factors.length
  719. for j in 0...factors.length
  720. case factors[j][0]
  721. when 2 # gender
  722. tgender = ((i/(2**j))%2==0) ? factors[j][1] : factors[j][2]
  723. when 3 # shiny
  724. tshiny = ((i/(2**j))%2==0) ? factors[j][1] : factors[j][2]
  725. when 4 # form
  726. tform = ((i/(2**j))%2==0) ? factors[j][1] : factors[j][2]
  727. when 5 # shadow
  728. tshadow = ((i/(2**j))%2==0) ? factors[j][1] : factors[j][2]
  729. end
  730. end
  731. folder = "Graphics/Battlers/"
  732. if tshiny && back
  733. folder += "BackShiny/"
  734. elsif tshiny
  735. folder += "FrontShiny/"
  736. elsif back
  737. folder += "Back/"
  738. else
  739. folder += "Front/"
  740. end
  741. folder += "Female/" if tgender
  742. bitmapFileName = sprintf("#{folder}%s%s%s",getConstantName(PBSpecies,species),(tform!="" ? "_"+tform : ""),tshadow ? "_shadow" : "") rescue nil
  743. ret = pbResolveBitmap(bitmapFileName)
  744. return ret if ret
  745. bitmapFileName = sprintf("#{folder}%03d%s%s",species,(tform!="" ? "_"+tform : ""),tshadow ? "_shadow" : "")
  746. ret = pbResolveBitmap(bitmapFileName)
  747. return ret if ret
  748. end
  749. return nil
  750. end
  751.  
  752. def pbPokemonBitmapFile(species, shiny, back=false)
  753. folder = "Graphics/Battlers/"
  754. if shiny && back
  755. folder += "BackShiny/"
  756. elsif shiny
  757. folder += "FrontShiny/"
  758. elsif back
  759. folder += "Back/"
  760. else
  761. folder += "Front/"
  762. end
  763. name = sprintf("#{folder}%s",getConstantName(PBSpecies,species)) rescue nil
  764. ret = pbResolveBitmap(name)
  765. return ret if ret
  766. name = sprintf("#{folder}%03d",species)
  767. return pbResolveBitmap(name)
  768. end
Add Comment
Please, Sign In to add comment