TheoAllen

Theo - Floating Character

Oct 23rd, 2013
429
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.47 KB | None | 0 0
  1. # =============================================================================
  2. # TheoAllen - Floating Character
  3. # Version : 1.0
  4. # Contact : www.rpgmakerid.com (or) http://theolized.blogspot.com
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. ($imported ||= {})[:Theo_FloatChar] = true
  8. # =============================================================================
  9. # Change Logs:
  10. # -----------------------------------------------------------------------------
  11. # 2013.10.23 - Finished Script
  12. # =============================================================================
  13. =begin
  14.  
  15.   --------------------------------------------------------------------------
  16.   *) Perkenalan :
  17.   --------------------------------------------------------------------------
  18.   Berawal dari gw punya sprite karakter gw Nella Shadowind. Tu karakter punya
  19.   sayap dan ada pose terbangnya. Tapi, bikin Nella bener-bener kelihatan
  20.   terbang itu susah. Meski bisa diakalin make event, tapi jadinya mesti aneh.
  21.  
  22.   Nah, dari itu maka terciptalah script ini. Script ini bisa ngebikin karakter
  23.   event bisa seolah-olah terbang atau melayang
  24.  
  25.   --------------------------------------------------------------------------
  26.   *) Cara penggunaan :
  27.   --------------------------------------------------------------------------
  28.   Pasang dibawah material namun diatas main.
  29.   Jangan lupa taruh gambar untuk shadow karakter di Graphics/system. Namain
  30.   "char_shadow.png".
  31.  
  32.   Gunakan set move route > script > dan tulis script call berikut
  33.   - start_float(h,s)
  34.   - start_landing(s)
  35.   Dimana "h" adalah "height" atau ketinggian melayangnya. Dan "s" adalah
  36.   "speed" untuk mencapai ketinggian itu. Contoh penggunaan :
  37.  
  38.   start_float(35,1)  <-- Naek ke ketinggian 35 dengan kecepatan 1 pixel / frame
  39.   start_landing(1)   <-- Mendarat dengan kecepatan 1 pixel / frame
  40.  
  41.   --------------------------------------------------------------------------
  42.   *) Terms of use :
  43.   --------------------------------------------------------------------------
  44.   Credit gw, TheoAllen. Kalo semisal u bisa ngedit2 script gw trus jadi lebih
  45.   keren, terserah. Ane bebasin. Asal ngga ngeklaim aja. Kalo semisal mau
  46.   dipake buat komersil, jangan lupa, gw dibagi gratisannya.
  47.  
  48. =end
  49. # =============================================================================
  50. # Konfigurasi :
  51. # =============================================================================
  52. module Theo
  53.   module FloatChar
  54.  
  55.     FloatPattern  = [0,1,2,3,2,1]
  56.   # Pattern / pola mengambangnya. Pola ini akan dilooping / diulang. Untuk
  57.   # pola naik turun, isi aja [0,1,2,1] atau [0,1,2,3,2,1]
  58.   # Seandainya kamu punya pola lain ya isi aja sendiri
  59.  
  60.     FloatRate     = 6
  61.   # Rate untuk ngerefresh pola ngambangnya. Semakin kecil, semakin cepet.
  62.   # Tapi inget, minimalnya 1
  63.  
  64.     Use_Shadow    = true
  65.   # Gunain char_shadow ga? (isi true/false)
  66.  
  67.     FloatOnly     = false
  68.   # Shadow ditampilin kalo lagi terbang doank? ato kalo di permukaan juga?
  69.   # True >> Nampilin kalo karakter lagi ngambang doank
  70.   # False >> Nampilin meski karakter nyentuh permukaan tanah
  71.  
  72.     ShadowOpacity = 88
  73.   # Nilai transparansi gambar shadow. Antara (0 - 255)
  74.  
  75.   end
  76. end
  77. # =============================================================================
  78. # Akhir dari konfigurasi
  79. # =============================================================================
  80. class Game_CharacterBase
  81.   attr_accessor :float_high
  82.   attr_accessor :float_pattern
  83.  
  84.   include Theo::FloatChar
  85.  
  86.   alias theo_floatchar_init initialize
  87.   def initialize
  88.     theo_floatchar_init
  89.     init_float_member
  90.   end
  91.  
  92.   def init_float_member
  93.     @float_high = 0
  94.     @float_pattern = 0
  95.     @float_count = 0
  96.     @start_float = false
  97.     @start_land = false
  98.     @target_high = 0
  99.     @float_speed = 0
  100.   end
  101.  
  102.   alias theo_floatchar_screen_y screen_y
  103.   def screen_y
  104.     theo_floatchar_screen_y - float_coordinate
  105.   end
  106.  
  107.   alias theo_floatchar_update update
  108.   def update
  109.     theo_floatchar_update
  110.     update_floating
  111.   end
  112.  
  113.   def start_float(heigh, speed = 1)
  114.     return if float_moving?
  115.     @float_pattern = 0
  116.     @target_high = heigh
  117.     @float_speed = speed
  118.     if heigh > 0
  119.       @start_float = true
  120.     else
  121.       @start_land = true
  122.     end
  123.   end
  124.  
  125.   def start_landing(speed = 1)
  126.     start_float(0, speed)
  127.   end
  128.  
  129.   def float_rate
  130.     return FloatRate
  131.   end
  132.  
  133.   def update_floating
  134.     update_start_float
  135.     if floating? && !float_moving?
  136.       @float_count += 1
  137.       if @float_count % float_rate == 0
  138.         @float_pattern = (@float_pattern + 1) % FloatPattern.size
  139.       end
  140.     end
  141.   end
  142.  
  143.   def update_start_float
  144.     if @start_float
  145.       @float_high = [@float_high + @float_speed, @target_high].min
  146.       @start_float = false if @float_high >= @target_high    
  147.     elsif @start_land
  148.       @float_high = [@float_high - @float_speed, 0].max
  149.       @start_land = !(@float_high == 0)
  150.     end
  151.   end
  152.  
  153.   def float_coordinate
  154.     return FloatPattern[@float_pattern] + @float_high
  155.   end
  156.  
  157.   def floating?
  158.     @float_high > 0
  159.   end
  160.  
  161.   def float_moving?
  162.     @start_float || @start_land
  163.   end
  164.  
  165. end
  166.  
  167. class Char_Shadow < Sprite
  168.  
  169.   def initialize(char, viewport)
  170.     @char = char
  171.     super(viewport)
  172.     self.bitmap = Cache.system("char_shadow")
  173.     self.ox = width/2
  174.     self.oy = height
  175.     self.opacity = Theo::FloatChar::ShadowOpacity
  176.     update_visibility
  177.   end
  178.  
  179.   def update
  180.     super
  181.     update_visibility
  182.     self.x = @char.screen_x
  183.     self.y = @char.theo_floatchar_screen_y
  184.   end
  185.  
  186.   def update_visibility
  187.     self.visible = visibility_case
  188.   end
  189.  
  190.   def visibility_case
  191.     !@char.character_name.empty? &&
  192.       (Theo::FloatChar::FloatOnly ? @char.floating? : true)
  193.   end
  194.  
  195. end
  196.  
  197. class Sprite_Character < Sprite_Base
  198.  
  199.   alias theo_floatchar_init initialize
  200.   def initialize(viewport, character = nil)
  201.     theo_floatchar_init(viewport, character)
  202.     if !character.is_a?(Game_Vehicle) && Theo::FloatChar::Use_Shadow
  203.       @char_shadow = Char_Shadow.new(character, viewport)
  204.       @char_shadow.z = self.z - 1
  205.       @char_shadow.update
  206.     end
  207.   end
  208.  
  209.   alias theo_floatchar_update update
  210.   def update
  211.     theo_floatchar_update
  212.     @char_shadow.update if @char_shadow
  213.   end
  214.  
  215.   alias theo_floatchar_dispose dispose
  216.   def dispose
  217.     theo_floatchar_dispose
  218.     @char_shadow.dispose if @char_shadow
  219.   end
  220.  
  221. end
Advertisement
Add Comment
Please, Sign In to add comment