Advertisement
Guest User

Fixed specjal.rb (WTFPL)

a guest
Sep 11th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 5.35 KB | None | 0 0
  1. class Keypress
  2.     def Keypress.[](id,repeat=true)
  3.         @@keys = [] unless defined?(@@keys)
  4.     key=(id.class==Symbol ? $config[1][id] : id)
  5.     if repeat
  6.       $screen.button_down?(key)
  7.     elsif !$pressing[0].include?(key) and $screen.button_down?(key)
  8.       $pressing[1] << key
  9.       return true
  10.     end
  11.     end
  12. end
  13.  
  14. class Img
  15.   def Img.[](name,tileable=false)
  16.     @@images = Hash.new unless defined?(@@images)
  17.     if @@images[name.downcase]
  18.       @@images[name.downcase]
  19.     else
  20.             dir=((Dir.exists?(file="data/gfx/#{name.downcase.split('/')[0]}") or File.exists?(file+'.png')) ? '/gfx' : '')
  21.       @@images[name.downcase] = Image.new($screen, "data#{dir}/#{name.downcase}.png", tileable)
  22.     end
  23.   end
  24.  
  25.     def Img.reset
  26.         @@images.clear
  27.     end
  28. end
  29.  
  30. class Tls
  31.   def Tls.[](name,width,height=width,tileable=false)
  32.         size=[width,height]
  33.     @@tiles = Hash.new unless defined?(@@tiles)
  34.     if @@tiles[[name.downcase,size]]
  35.       @@tiles[[name.downcase,size]]
  36.     else
  37.       @@tiles[[name.downcase,size]] = Image.load_tiles($screen, Img[name], width, height, tileable)
  38.     end
  39.   end
  40.  
  41.     def Tls.reset
  42.         @@tiles.clear
  43.     end
  44. end
  45.  
  46. def Sub
  47.   def Sub.[](name,srcx,srcy,w,h)
  48.     if name.class==String
  49.       img=Img[name]
  50.     else
  51.       img=Tls[name[0],name[1],name[2]]
  52.     end
  53.     img.subimage(srcx,srcy,w,h)
  54.   end
  55. end
  56.  
  57. class Snd
  58.   def Snd.[](name)
  59.     @@sounds = Hash.new unless defined?(@@sounds)
  60.     if @@sounds[name.downcase]
  61.       @@sounds[name.downcase]
  62.     else
  63.             dir=((Dir.exists?(file="data/sfx/#{name.downcase.split('/')[0]}") or File.exists?(file+'.ogg')) ? '/sfx' : '')
  64.       @@sounds[name.downcase] = Sample.new($screen, "data#{dir}/#{name.downcase}.ogg")
  65.     end
  66.   end
  67.  
  68.     def Snd.reset
  69.         @@sounds.clear
  70.     end
  71. end
  72.  
  73. class Msc
  74.   def Msc.[](name,pre=nil)
  75.     @@music = Hash.new unless defined?(@@music)
  76.     if pre==:auto
  77.             dir=((Dir.exists?(file="data/music/#{name.split('/')[0]}") or File.exists?(file+'.ogg')) ? '/music' : '')
  78.       pre=File.exists?("data#{dir}/#{name.downcase}-pre.ogg")
  79.     end
  80.     name+='-pre' if pre
  81.     if !@@music[name.downcase]
  82.             dir=((Dir.exists?(file="data/music/#{name.downcase.split('/')[0]}") or File.exists?(file+'.ogg')) ? '/music' : '')
  83.       @@music[name.downcase] = Song.new($screen, "data#{dir}/#{name.downcase}.ogg")
  84.     end
  85.     $premusic=nil
  86.     $premusic=[@@music[name.downcase],name.chomp('-pre')] if pre
  87.     @@music[name.downcase]
  88.   end
  89.  
  90.     def Msc.reset
  91.         @@music.clear
  92.     end
  93. end
  94.  
  95. class Fnt
  96.   def Fnt.[](name,size=[])
  97.     @@fonts = Hash.new unless defined?(@@fonts)
  98.         if name.class==Array
  99.       name[0].downcase!
  100.             if @@fonts[name]
  101.                 @@fonts[name]
  102.             else
  103.                 @@fonts[name] = BitmapFont.new(name,size)
  104.             end
  105.         else
  106.             if @@fonts[[name.downcase,size]]
  107.                 @@fonts[[name.downcase,size]]
  108.             else
  109.                 @@fonts[[name.downcase,size]] = Font.new($screen, name.downcase, size)
  110.             end
  111.         end
  112.   end
  113.  
  114.     def Fnt.reset
  115.         @@fonts.clear
  116.     end
  117. end
  118.  
  119. class BitmapFont
  120.     NEW_LINE='^'
  121.   DFACTOR=0.7
  122.     def initialize(images,characters)
  123.         @images,@characters=images,characters
  124.     end
  125.  
  126.     def draw(text,x,y,z,args={})
  127.         posx=posy=0
  128.         scalex=(args[:scalex] ? args[:scalex] : 1)
  129.         scaley=(args[:scaley] ? args[:scaley] : 1)
  130.         xspacing=(args[:xspacing] ? args[:xspacing] : @images[1]*scalex)
  131.         yspacing=(args[:yspacing] ? args[:yspacing] : @images[1]*scaley)
  132.         max=args[:max]
  133.         align=args[:align]
  134.        
  135.     text=text.to_s
  136.         text.each_char{|char| index=@characters.index(char.upcase)
  137.     scalex1=(char.upcase==char ? scalex : scalex*DFACTOR)
  138.     scaley1=(char.upcase==char ? scaley : scaley*DFACTOR)
  139.         Tls[*@images][index].draw(x+posx-(align==:right ? (text.length*xspacing) : align==:center ? (text.length*xspacing)/2 : 0),y+posy+(scaley1 != scaley ? yspacing*(1-DFACTOR) : 1),z,scalex1,scaley1,args[:color] ? args[:color] : 0xffffffff) if index
  140.         posx+=xspacing
  141.         (posy+=yspacing ; posx=0) if char==NEW_LINE or max && posx+xspacing>max}
  142.     end
  143. end
  144.  
  145. class Entity
  146.     attr_accessor :x,:y,:stop,:invisible,:active,:unstoppable,:removed
  147.     def init(*types)
  148.         $game.entities[0] << self
  149.     $game.entities[1] << self if types.include?(:enemy)
  150.     $game.entities[2] << self if types.include?(:powable)
  151.     $game.entities[3] << self if types.include?(:solid)
  152.     $game.entities[4] << self if types.include?(:hittable)
  153.     $game.entities[5] << self if types.include?(:stompable)
  154.     end
  155.  
  156.     def remove
  157.     $game.remove(self)
  158.     @removed=true
  159.     end
  160.  
  161.     def gravity(width,height=width,gravity=1,down=true)
  162.         @vy||=0
  163.     @offx||=0
  164.         @vy+=gravity
  165.         if @vy.to_i>0
  166.             @vy.to_i.times{if !$game.solid?(@x+@offx,@y+height,down) and !$game.solid?(@x+@offx+width/2,@y+height,down) and !$game.solid?(@x+@offx+width-1,@y+height,down) ; @y+=1 else @vy=0 ; break end}
  167.         elsif @vy.to_i<0
  168.             (-@vy).to_i.times{if !$game.solid?(@x+@offx,@y) and !$game.solid?(@x+@offx+width/2,@y) and !$game.solid?(@x+@offx+width-1,@y) ; @y-=1 else @vy=0 ; break end}
  169.         end
  170.     if !@water && $game.map.water?(@x+width/2,@y+height) or @water && !$game.map.water?(@x+width/2,@y+height)
  171.       Snd['Swim'].play
  172.       @water=!@water
  173.       tr=Trail.new(@x+width/2-16,@y+height-32,2,['Effects/Splash',32,32],[0,1,2,3],4)
  174.       64.times{if !$game.map.water?(tr.x+16,tr.y+32) then tr.y+=1 else break end}
  175.       64.times{if $game.map.water?(tr.x+16,tr.y+31) then tr.y-=1 else break end}
  176.     end
  177.     end
  178.  
  179.   def dead?;@dead;end
  180. end
  181.  
  182. class NilClass
  183.   def stop;end
  184. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement