Holy87

Logo Ace

Jul 12th, 2013
1,076
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $imported = {} if $imported == nil
  2. $imported["H87_Logoshower"] = 1.2
  3. #===============================================================================
  4. # SCHERMATA DEL LOGO - ACE
  5. #===============================================================================
  6. # Autore: Holy87
  7. # Versione: 1.2.2
  8. # Difficoltà utente: ★★
  9. #
  10. # Nella versione 1.2 è stato aggiunto lo sfondo bianco
  11. # Novità della versione 1.1:
  12. # ● Possibilità di inserire video
  13. # ● Possibilità di inserire semplici scritte
  14. # ● Possibilità di riprodurre un SE all'apparizione di un logo
  15. # ● Effetto fade alla pressione del tasto invio
  16. #-------------------------------------------------------------------------------
  17. # Questo script serve per mostrare una serie di immagini all'apertura del gioco,
  18. # come il nome-firma-logo dell'autore/team, messaggi ecc...
  19. # Lo script consente di:
  20. # ● Mostrare quante successioni di immagini si voglia
  21. # ● Saltare in qualsiasi momento al titolo premendo Invio
  22. # ● Regolare per ogni immagine il tempo di comparsa e l'effetto zoom
  23. # ● Eseguire la musica della schermata del titolo dall'inizio
  24. # ● Saltare automaticamente la presentazione se si esegue da Test di gioco.
  25. #-------------------------------------------------------------------------------
  26. # Istruzioni:
  27. # Copiare lo script sotto Materials e prima del Main.
  28. # Le immagini da mostrare vanno messe nella cartella Graphics\Pictures. Le
  29. # immagini verranno automaticamente centrate sullo schermo quando mostrate.
  30. #
  31. #-------------------------------------------------------------------------------
  32. # Compatibilità:
  33. # Alias del metodo first_scene_class di SceneManager.
  34. #-------------------------------------------------------------------------------
  35. module H87_logo_shower
  36. #===============================================================================
  37. # ** CONFIGURAZIONE **
  38. #===============================================================================
  39.   Logos = {
  40.   # Inserisci qui in ordine le immagini da mostrare, quanto tempo deve durare
  41.   # (in frame) e se attivare o no l'effetto zoom.
  42.   #Tipo:  0-> Fade normale
  43.   #       1-> Zoom normale
  44.   #       2-> Zoom orizzontale
  45.   #       3-> Zoom verticale
  46.   #       4-> Increspatura
  47.  
  48.   # Se vuoi mostrare un filmato, dovrai inserire soltanto il nome.
  49.  
  50.   # Puoi inserire una frase o qualsiasi altra cosa al posto del nome
  51.   # dell'immagine: in questo caso, comparirà un testo al posto dell'immagine.
  52.   # Puoi andare a capo con il testo con il carattere "|"
  53.  
  54.   #ID   Nome         Tempo      Tipo      SE
  55.   1 => ["Logo",       100,      0],
  56.   2 => ["Logo iniziale|creato da Holy87",       70,      1,    "Applause1"],
  57.   3 => ["Video"],
  58.   4 => ["Logo3",      150,      4],
  59.   } # non rimuovere!
  60.   # N.B. Il conteggio del tempo comincia dopo il termine del fade del logo.
  61.  
  62.   #Vuoi eseguire la musica del titolo anche nel logo?
  63.   Play_music = true
  64.  
  65.   #Tempo di dissolvenza delle immagini
  66.   Fade_time = 50
  67.  
  68.   #Tempo di dissolvenza dell'immagine finale
  69.   Final_fade = 80
  70.  
  71.   #Saltare i logo se si avvia il gioco in modalità test?
  72.   Jump_test = true
  73.  
  74.   #Vuoi che lo sfondo sia nero oppure bianco?
  75.   White = false #true se lo vuoi bianco
  76.  
  77.   #Inserire il nome del carattere del logo:
  78.   Logo_Font = "Comic Sans MS"
  79.  
  80.  
  81.   #============================================================================
  82.   # ** FINE CONFIGURAZIONE **
  83.   # Modificare da questo punto in poi è rischioso.
  84.   #============================================================================
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.   #--------------------------------------------------------------------------
  99.   # * restituisce la velocità di dissolvenza
  100.   #--------------------------------------------------------------------------
  101.   def fade_speed
  102.     return 255.0 / Fade_time
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # * restituisce la velocità di dissolvenza dopo l'ultima immagine
  106.   #--------------------------------------------------------------------------
  107.   def final_fade_speed
  108.     return 255.0 / Final_fade
  109.   end
  110. end # modulo
  111.  
  112. #===============================================================================
  113. # ** Classe Scene_Logo
  114. #===============================================================================
  115. class Scene_Logo < Scene_Base
  116.   include H87_logo_shower # <- il modulo di prima
  117.   #--------------------------------------------------------------------------
  118.   # * inizio
  119.   #--------------------------------------------------------------------------
  120.   def start
  121.     super
  122.     $logo_done = true               # flag che indica che il logo è stato visto
  123.     create_logo_graphic             # crea lo sprite del logo
  124.     play_title_music if Play_music  # esegui la musica del titolo
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # * creazione dello sprite
  128.   #--------------------------------------------------------------------------
  129.   def create_logo_graphic
  130.     @logo_base = Sprite.new
  131.     @logo_base.opacity = 0
  132.     @logo_base.bitmap = new_base_bitmap
  133.     @logo_counter = 1               # contatore
  134.     @time_counter = 0               # tempo che resta
  135.     @logo = Sprite.new              # creazione
  136.     change_logo                     # aggiorna la bitmap
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # * assegna la bitmap
  140.   #--------------------------------------------------------------------------
  141.   def new_base_bitmap
  142.     bitmap = Bitmap.new(Graphics.width, Graphics.height)
  143.     colore = Color.new(255,255,255)
  144.     bitmap.fill_rect(0,0,bitmap.width,bitmap.height,colore) if White
  145.     return bitmap
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # * cambia logo e aggiorna la bitmap
  149.   #--------------------------------------------------------------------------
  150.   def change_logo
  151.     if Logos[@logo_counter][1].nil?
  152.       Graphics.play_movie("Movies/"+Logos[@logo_counter][0])
  153.     else
  154.       RPG::SE.new(Logos[@logo_counter][3]).play if Logos[@logo_counter][3] != nil
  155.       initialize_logo_sprite
  156.       preset_logo
  157.     end
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # * reinizializza gli attributi del logo
  161.   #--------------------------------------------------------------------------
  162.   def initialize_logo_sprite
  163.     @logo.bitmap = logo_bitmap(Logos[@logo_counter][0])
  164.     @logo.opacity = 0
  165.     @logo.ox = @logo.width/2      # l'origine è al centro
  166.     @logo.oy = @logo.height/2     # idem
  167.     @logo.x = Graphics.width / 2  # centra l'immagine
  168.     @logo.y = Graphics.height / 2 # idem
  169.     @speed = 0
  170.     @logo.zoom_x = 1
  171.     @logo.zoom_y = 1
  172.     @logo.wave_speed = 0
  173.     @logo.wave_length = 0
  174.   end    
  175.   #--------------------------------------------------------------------------
  176.   # * imposta l'inizio del logo a seconda del tipo di comparsa
  177.   #--------------------------------------------------------------------------
  178.   def preset_logo
  179.     case Logos[@logo_counter][2]    # caso
  180.     when 1
  181.       @speed = 0.002              # velocità zoom
  182.       @logo.zoom_x = 0.9          # proporzioni (solo del 10% più piccolo
  183.       @logo.zoom_y = 0.9          # idem
  184.     when 2
  185.       @speed = 0.01
  186.       @logo.zoom_x = 0
  187.     when 3
  188.       @speed = 0.01
  189.       @logo.zoom_y = 0
  190.     when 4
  191.       @speed = 1
  192.       @logo.wave_amp = 120
  193.       @logo.wave_length = 255
  194.       @logo.wave_speed = 360
  195.     end
  196.   end    
  197.   #--------------------------------------------------------------------------
  198.   # * restituisce la bitmap del logo
  199.   #--------------------------------------------------------------------------
  200.   def logo_bitmap(source)
  201.     begin
  202.       bitmap = Cache.picture(source)
  203.     rescue Errno::ENOENT
  204.       line_height = 40
  205.       text = source.split("|")
  206.       bitmap = Bitmap.new(Graphics.width, Graphics.height)
  207.       bitmap.font.color = White ? Color.new(0,0,0) : Color.new(255,255,255)
  208.       bitmap.font.outline = false
  209.       bitmap.font.size = 40
  210.       bitmap.font.name = Logo_Font
  211.       starting_line = (Graphics.height - text.size*line_height) / 2
  212.       for i in 0..text.size-1
  213.         bitmap.draw_text(0,starting_line,bitmap.width,line_height,text[i],1)
  214.         starting_line += line_height
  215.       end
  216.     end
  217.     return bitmap
  218.   end
  219.   #--------------------------------------------------------------------------
  220.   # * sostituisce l'immagine con la prossima
  221.   #--------------------------------------------------------------------------
  222.   def next_logo
  223.     return if Logos[@logo_counter + 1] == nil
  224.     @logo_counter += 1
  225.     @time_counter = 0
  226.     change_logo
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # * restituisce true se c'è un'altra immagine da mostrare
  230.   #--------------------------------------------------------------------------
  231.   def there_next?
  232.     return true if Logos[@logo_counter + 1] != nil
  233.     return false
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # * aggiornamento
  237.   #--------------------------------------------------------------------------
  238.   def update
  239.     super
  240.     jump_logo if Input.trigger?(:C) # aggiorna l'input
  241.     update_fade_logo                      # aggiorna l'animazione
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # * aggiorna l'animazione dell'immagine
  245.   #--------------------------------------------------------------------------
  246.   def update_fade_logo
  247.     @logo_base.opacity += 20
  248.     process_appear
  249.     process_fade
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # * processo di apparizione del logo
  253.   #--------------------------------------------------------------------------
  254.   def process_appear
  255.     case Logos[@logo_counter][2]
  256.     when 1
  257.       if @logo.zoom_x < 1
  258.         @logo.zoom_x += @speed
  259.         @logo.zoom_y += @speed
  260.       end
  261.     when 2
  262.       @logo.zoom_x += @speed if @logo.zoom_x < 1
  263.     when 3
  264.       @logo.zoom_y += @speed if @logo.zoom_y < 1
  265.     when 4
  266.       if @logo.wave_amp > 0
  267.         @logo.wave_amp -= @speed
  268.       end
  269.       @logo.update
  270.     end
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # * processo di scomparsa del logo
  274.   #--------------------------------------------------------------------------
  275.   def process_fade
  276.     if Logos[@logo_counter][1] != nil and @time_counter < Logos[@logo_counter][1] # attesa frame
  277.       @logo.opacity += fade_speed
  278.       if @logo.opacity >= 255
  279.         @time_counter += 1
  280.       end
  281.     else
  282.       if there_next?
  283.         @logo.opacity -= fade_speed
  284.       else
  285.         @logo.opacity -= final_fade_speed
  286.       end
  287.       if @logo.opacity == 0
  288.         if there_next?
  289.           next_logo
  290.         else
  291.           go_title
  292.         end
  293.       end
  294.     end
  295.   end
  296.   #--------------------------------------------------------------------------
  297.   # * finalmente, vai alla schermata del titolo
  298.   #--------------------------------------------------------------------------
  299.   def go_title
  300.     SceneManager.goto(SceneManager.h87f_s_c)
  301.   end
  302.   #--------------------------------------------------------------------------
  303.   # * fine
  304.   #--------------------------------------------------------------------------
  305.   def terminate
  306.     @logo.opacity = 0
  307.     super
  308.     @logo_base.dispose if @logo_base
  309.     if @logo
  310.       @logo.bitmap.dispose
  311.       @logo.dispose
  312.     end
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # * forza il title
  316.   #--------------------------------------------------------------------------
  317.   def jump_logo
  318.     loop do
  319.       @logo.opacity -= 30
  320.       Graphics.update
  321.       break if @logo.opacity == 0
  322.     end
  323.     go_title
  324.   end
  325.   #--------------------------------------------------------------------------
  326.   # * esegue la musica del titolo
  327.   #--------------------------------------------------------------------------
  328.   def play_title_music
  329.     $data_system.title_bgm.play
  330.     RPG::BGS.stop
  331.     RPG::ME.stop
  332.   end
  333. end # scene_logo
  334.  
  335. #===============================================================================
  336. # ** SceneManager
  337. #===============================================================================
  338. module SceneManager  
  339.   class << self; alias h87f_s_c first_scene_class; end
  340.   #--------------------------------------------------------------------------
  341.   # * modifica della schermata iniziale
  342.   #--------------------------------------------------------------------------
  343.   def self.first_scene_class
  344.     if $BTEST
  345.       return h87f_s_c
  346.     elsif $TEST and H87_logo_shower::Jump_test
  347.       return h87f_s_c
  348.     else
  349.       return Scene_Logo
  350.     end
  351.   end
  352. end #scenemanager
RAW Paste Data