Holy87

MenuTitle - Ace

Aug 13th, 2013
615
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. $imported = {} if $imported == nil
  2. $imported["H87_TitleMenu"] = true
  3. #==============================================================================
  4. # * New Menu Title v1.3
  5. # Creato da Holy 87
  6. # Difficoltà utente: ★★★
  7. #------------------------------------------------------------------------------
  8. # 13/08/2013 -> Versione 1.3 -> Possibilità di personalizzazione da altri script
  9. # 01/06/2012 -> Versione 1.1 -> Modifiche al cursore
  10. # 20/02/2012 -> Script finito
  11. # 16/02/2012 -> Script iniziato
  12. #------------------------------------------------------------------------------
  13. #  Questo script crea una nuova variante del menu nella schermata del Titolo.
  14. #==============================================================================
  15. # * ISTRUZIONI *
  16. #==============================================================================
  17. # Piazza lo scritp sotto Materials e prima del Main. Imposta le immagini che
  18. # verranno usate come icone, lo script ne adatterà automaticamente la posizione.
  19. #==============================================================================
  20. # * COMPATIBILITA' *
  21. #==============================================================================
  22. # Scene_Title > alias metodi: command_new_game; command_continue;
  23. # command_shutdown; create_command_window; update; terminate
  24. # Window_TitleCommand > riscrittura del metodo open
  25. #==============================================================================
  26. # PER FARE IN MODO DI AGGIUNGERE ALTRI MENU DAL TITOLO
  27. #==============================================================================
  28. # Nella classe scene_title, crea un alias al metodo crea_contenuti_personalizzati
  29. # aggiungendo un nuovo elemento, ad esempio:
  30.  
  31. # if $imported["H87_TitleMenu"]
  32. # alias metodo_aliasato crea_contenuti_personalizzati
  33. # def crea_contenuti_personalizzati
  34. #   metodo_aliasato
  35. #   add_cursor(:nomecursore,:metodo_chiamato,"immpulsante","immfumetto")
  36. # end;end
  37.  
  38. #==============================================================================
  39. module MT_Setup
  40. #==============================================================================
  41. # * CONFIGURAZIONE *
  42. #==============================================================================
  43. # * Preferenze del Menu
  44. #==============================================================================  
  45.   #Imposta l'altezza del menu rispetto allo schermo
  46.   AltezzaBarra = 190
  47.  
  48.   #Imposta la distanza in pixel tra gli oggetti del Menu
  49.   Distanza = 10
  50.  
  51. #==============================================================================
  52. # * Grafica degli Oggetti
  53. #==============================================================================
  54.   OBJGRAPH = {
  55.   :newgame => "T_New",   #Immagine del comando Nuovo Gioco
  56.   :load    => "T_Load",  #Immagine del comando Carica
  57.   :exit    => "T_Exit",  #Immagine del comando Esci
  58.   } # non rimuovere la parentesi!
  59.  
  60.   BALOONGRAPH = {
  61.   :newgame => "B_New",   #Immagine del Fumetto Nuovo Gioco
  62.   :load    => "B_Load",  #Immagine del Fumetto Carica
  63.   :exit    => "B_Exit",  #Immagine del Fumetto Esci
  64.   } # non rimuovere la parentesi!
  65.  
  66.   EVENTS = { #non modificare questo, sono i metodi che vengono chiamati
  67.   :newgame => "command_new_game", #comando nuova partita
  68.   :load    => "command_continue", #comando carica
  69.   :exit    => "command_shutdown", #comando esci
  70.   }
  71.  
  72.   #Immagine della barra di sfondo ai comandi.
  73.   BARGRAPH = "SfondoBarraTitle"
  74. #==============================================================================
  75. # * Preferenze Grafiche
  76. #==============================================================================
  77. #Vuoi che la comparsa del menu dei comandi sia animata?
  78.   Animazione = true
  79.  
  80. #Setta la velocità di apparizione dei comandi (solo se Animazione = true).
  81. #0: Contemporaneamente, 1: Velocissimo, 2: Veloce...
  82.   SPEEDANIM = 1
  83.  
  84.   #Setta la velotità del cursore nello spostamento(NON METTERE 0)
  85.   CursorSpeed = 3 #1: Istantaneo, 2: Velocissimo, 3: Veloce, 4:Lento...
  86.  
  87.   #Imposta la distanza da sinistra alla punta che avrà il fumetto.
  88.   DDP = 27
  89. #==============================================================================
  90. # * FINE DELLA CONFIGURAZIONE *
  91. # Non modificare oltre questa riga, se non sai cosa stai facendo!
  92. #==============================================================================
  93. end
  94.  
  95.  
  96.  
  97.  
  98.  
  99. #==============================================================================
  100. # * Classe Scene_Title
  101. #==============================================================================
  102. class Scene_Title < Scene_Base
  103.  
  104.   #--------------------------------------------------------------------------
  105.   # * Alias del metodo di Aggiornamento
  106.   #--------------------------------------------------------------------------
  107.   alias h87_cc_update update unless $@
  108.   def update
  109.     if Input.trigger?(:C) # Se si preme Invio
  110.       pressione_invio
  111.     end
  112.     if Input.repeat?(:LEFT) #Se si preme Sinistra
  113.       pressione_sinistra
  114.     end
  115.     if Input.repeat?(:RIGHT) #Se si preme Destra
  116.       pressione_destra
  117.     end
  118.     h87_cc_update
  119.     animazione_menu #Sequenza d'apertura del menu
  120.     animazione_fumetto #sequenza di animazione del fumetto
  121.     animazione_cursore
  122.     @Baloon.opacity += 25 if @CommandsActive
  123.   end
  124.  
  125.   #--------------------------------------------------------------------------
  126.   # * alias del metodo di chiusura
  127.   #--------------------------------------------------------------------------
  128.   alias h87_terminate terminate unless $@
  129.   def terminate
  130.     elimina_menu
  131.     h87_terminate
  132.     delete_objects
  133.   end
  134.  
  135.   #--------------------------------------------------------------------------
  136.   # * Inizializza le variabili
  137.   #--------------------------------------------------------------------------
  138.   def inizializza_variabili
  139.     @command_locked = []
  140.     @command_viewport = Viewport.new(0,0,Graphics.width, Graphics.height)
  141.     @command_viewport.z = 99
  142.     @title_state = 0 #lo stato del titolo
  143.     @cursore = 0
  144.     @cursore = 1 if continue_enabled
  145.     crea_contenuti_iniziali
  146.     crea_contenuti_personalizzati
  147.     crea_contenuti_finali
  148.     #------------------------------------------------
  149.     @num_oggetti = @oggetti.size
  150.     @CommandsActive = false #all'inizio non possono essere mossi comandi
  151.     @colore=0 #serve per memorizzare il colore dell'oggetto selezionato
  152.   end
  153.  
  154.   #--------------------------------------------------------------------------
  155.   # * creazione dei comandi nuovo e carica
  156.   #--------------------------------------------------------------------------
  157.   def crea_contenuti_iniziali
  158.     @oggetti = []
  159.     puls = MT_Setup::OBJGRAPH
  160.     balo = MT_Setup::BALOONGRAPH
  161.     comm = MT_Setup::EVENTS
  162.     #Cambia l'ordine di queste righe per cambiare l'ordine del menu.
  163.     add_cursor(:newgame,comm[:newgame],puls[:newgame],balo[:newgame])
  164.     add_cursor(:load,comm[:load],puls[:load],balo[:load],continue_enabled)
  165.   end
  166.  
  167.   #--------------------------------------------------------------------------
  168.   # * metodo che quando aliasato inserisce comandi extra intermedi
  169.   #--------------------------------------------------------------------------
  170.   def crea_contenuti_personalizzati
  171.   end
  172.  
  173.   #--------------------------------------------------------------------------
  174.   # * crea il comando esci
  175.   #--------------------------------------------------------------------------
  176.   def crea_contenuti_finali
  177.     puls = MT_Setup::OBJGRAPH
  178.     balo = MT_Setup::BALOONGRAPH
  179.     comm = MT_Setup::EVENTS
  180.     add_cursor(:exit,comm[:exit],puls[:exit],balo[:exit])
  181.   end
  182.  
  183.   #--------------------------------------------------------------------------
  184.   # * restituisce la grafica del pulsante
  185.   #--------------------------------------------------------------------------
  186.   def grafica_oggetto(i)
  187.     return @immagini[i] if @immagini[i] != nil
  188.     return ""
  189.   end
  190.  
  191.   #--------------------------------------------------------------------------
  192.   # * restituisce la grafica del fumetto
  193.   #--------------------------------------------------------------------------
  194.   def fumetto_oggetto(i)
  195.     return @fumetti[i] if @fumetti[i] != nil
  196.     return ""
  197.   end
  198.  
  199.   #--------------------------------------------------------------------------
  200.   # * Ridefinizione della creazione della finestra di comando
  201.   #--------------------------------------------------------------------------
  202.   alias h87mt_ccw create_command_window unless $@
  203.   def create_command_window
  204.     h87mt_ccw
  205.     inizializza_variabili
  206.     @sfondobarra = Sprite.new(@command_viewport)
  207.     @sfondobarra.bitmap = Cache.system(MT_Setup::BARGRAPH)
  208.     @sfondobarra.y = MT_Setup::AltezzaBarra
  209.     @sfondobarra.z = 1
  210.     @posix = MT_Setup::Distanza
  211.     @selettore = []
  212.     for i in 0..@num_oggetti-1 #crea le immagini dei pulsanti
  213.       @selettore[i] = Sprite.new(@command_viewport)
  214.       @selettore[i].bitmap = Cache.system(grafica_oggetto(@oggetti[i]))
  215.       @selettore[i].x = @posix
  216.       @selettore[i].z = 10
  217.       @selettore[i].y = MT_Setup::AltezzaBarra + @sfondobarra.height/2 - @selettore[i].height/2
  218.       @posix += MT_Setup::Distanza + @selettore[i].width
  219.     end
  220.     inizializza_fumetto # crea l'immagine del fumetto
  221.     crea_immagine if @agg_disp # crea il popup di aggiornamento
  222.     if MT_Setup::Animazione #rende gli oggetti trasparenti se si anima
  223.       @old_position = []
  224.       for i in 0..@selettore.size-1
  225.         @old_position[i] = @selettore[i].y
  226.         @selettore[i].y -= 21
  227.         @selettore[i].opacity = 0
  228.         @anim_counter = 0
  229.       end
  230.       @timemax = MT_Setup::SPEEDANIM*@selettore.size
  231.     end
  232.     @CommandsActive = true unless MT_Setup::Animazione
  233.   end
  234.  
  235.   #--------------------------------------------------------------------------
  236.   # * Crea l'immagine del fumetto di descrizione.
  237.   #--------------------------------------------------------------------------
  238.   def inizializza_fumetto
  239.     @Baloon = Sprite.new(@command_viewport)
  240.     @Baloon.opacity = 0
  241.     @Baloon.z = 20
  242.     aggiorna_cursore
  243.   end
  244.        
  245.   #--------------------------------------------------------------------------
  246.   # * Anima i componenti del menu
  247.   #--------------------------------------------------------------------------
  248.   def animazione_menu
  249.     if MT_Setup::Animazione and @title_state == 0
  250.       for i in 0..@selettore.size-1
  251.         if @anim_counter > @timemax*i
  252.           @selettore[i].opacity += 10
  253.           @selettore[i].y += 4 if @selettore[i].y < @old_position[i]
  254.           @selettore[i].y -= 1 if @selettore[i].y > @old_position[i]
  255.         end
  256.       end
  257.       @anim_counter += 1
  258.       if @selettore[@selettore.size-1].opacity >= 255
  259.         @CommandsActive = true
  260.         aggiorna_cursore
  261.         @title_state = 1
  262.       end
  263.     end
  264.     if @title_state == 1 and MT_Setup::Animazione
  265.       for i in 0..@selettore.size-1
  266.         @selettore[i].y -= 1 if @selettore[i].y > @old_position[i]
  267.       end
  268.     end
  269.   end
  270.  
  271.   #--------------------------------------------------------------------------
  272.   # * questo metodo aggiunge nuovi cursori settando evento e grafica
  273.   #--------------------------------------------------------------------------
  274.   def add_cursor(cursore,comando,graf_pulsante,graf_baloon,enabled=true)
  275.     @immagini = {} if @immagini.nil?
  276.     @fumetti = {} if @fumetti.nil?
  277.     @comandi = {} if @comandi.nil?
  278.     @immagini[cursore]= graf_pulsante
  279.     @fumetti[cursore]= graf_baloon
  280.     @comandi[cursore]= comando
  281.     lock_command(cursore) unless enabled
  282.     @oggetti.push(cursore)
  283.   end
  284.  
  285.   #--------------------------------------------------------------------------
  286.   # * Esecuzione del comando Invio
  287.   #--------------------------------------------------------------------------
  288.   def pressione_invio
  289.     eval(@comandi[@oggetti[@cursore]])
  290.   end
  291.  
  292.   #--------------------------------------------------------------------------
  293.   # * Esecuzione del tasto Sinistra
  294.   #--------------------------------------------------------------------------
  295.   def pressione_sinistra
  296.     if @CommandsActive
  297.       Sound.play_cursor
  298.       @cursore -= 1
  299.       @cursore = @num_oggetti-1 if @cursore < 0
  300.       aggiorna_cursore
  301.     end
  302.   end
  303.  
  304.   #--------------------------------------------------------------------------
  305.   # * Esecuzione del tasto Destra
  306.   #--------------------------------------------------------------------------
  307.   def pressione_destra
  308.     if @CommandsActive
  309.       Sound.play_cursor
  310.       @cursore += 1
  311.       @cursore = 0 if @cursore > @num_oggetti -1
  312.       aggiorna_cursore
  313.     end
  314.   end
  315.  
  316.   #--------------------------------------------------------------------------
  317.   # * Sequenza di aggiornamento del cursore
  318.   #--------------------------------------------------------------------------
  319.   def aggiorna_cursore
  320.     @Baloon.bitmap = Cache.system(fumetto_oggetto(@oggetti[@cursore]))
  321.     @prossimaX = @selettore[@cursore].x + @selettore[@cursore].width/2-MT_Setup::DDP
  322.     @prossimaY = @selettore[@cursore].y + @selettore[@cursore].height+10
  323.     @selettore[@cursore].y += 7 if MT_Setup::Animazione and @CommandsActive
  324.     @Baloon.x = @prossimaX if @Baloon.x == 0
  325.     @Baloon.y = @prossimaY if @Baloon.x == 0
  326.     @colore = 0
  327.     @cursore_in_movimento = true
  328.   end
  329.  
  330.   #--------------------------------------------------------------------------
  331.   # * Animazione dei movimenti del fumetto
  332.   #--------------------------------------------------------------------------
  333.   def animazione_fumetto
  334.     if @cursore_in_movimento
  335.       @distanzaX = @prossimaX-@Baloon.x
  336.       @distanzaY = @prossimaY-@Baloon.y
  337.       @Baloon.x += @distanzaX/MT_Setup::CursorSpeed
  338.       @Baloon.y += @distanzaY/MT_Setup::CursorSpeed
  339.     end
  340.   end
  341.  
  342.   #--------------------------------------------------------------------------
  343.   # * Illumina l'oggetto selezionato
  344.   #--------------------------------------------------------------------------
  345.   def animazione_cursore
  346.     @colore +=3 if @colore < 60
  347.     for i in 0..@selettore.size-1
  348.       grigio = command_avaiable?(@oggetti[i]) ? 0 : 255
  349.       if i == @cursore
  350.         @selettore[i].tone.set(@colore,@colore,@colore,grigio)
  351.       else
  352.         @selettore[i].tone.set(0,0,0,grigio)
  353.       end
  354.     end
  355.   end
  356.  
  357.   #--------------------------------------------------------------------------
  358.   # * restituisce true se il comando è attivo
  359.   #--------------------------------------------------------------------------
  360.   def command_avaiable?(command)
  361.     return !@command_locked.include?(command)
  362.   end
  363.  
  364.   #--------------------------------------------------------------------------
  365.   # * blocca un comando rendendolo grigio
  366.   #--------------------------------------------------------------------------
  367.   def lock_command(command)
  368.     @command_locked.push(command)
  369.   end
  370.  
  371.   #--------------------------------------------------------------------------
  372.   # * sblocca il comando
  373.   #--------------------------------------------------------------------------
  374.   def unlock_command(command)
  375.     @command_locked.delete(command)
  376.   end
  377.  
  378.   #--------------------------------------------------------------------------
  379.   # * Provvede alla cancellazione degli oggetti di gioco
  380.   #--------------------------------------------------------------------------
  381.   def delete_objects
  382.     for i in 0..@selettore.size-1
  383.       @selettore[i].dispose
  384.     end
  385.     @Baloon.dispose
  386.     @sfondobarra.dispose
  387.     @command_viewport.dispose
  388.   end
  389.  
  390.   #--------------------------------------------------------------------------
  391.   # * Crea il popup di aggiornamento
  392.   #--------------------------------------------------------------------------
  393.   def crea_immagine
  394.     @imm_popup = Sprite.new(@command_viewport)
  395.     @imm_popup.bitmap = Cache.system(MT_Setup::Up_Popup)
  396.     @imm_popup.x = @selettore[@upd_n].x + @selettore[@upd_n].width/2 - @imm_popup.width/2
  397.     @imm_popup.y = @selettore[@upd_n].y-5-@imm_popup.height
  398.     @imm_popup.y += 14 if MT_Setup::Animazione
  399.     @imm_popup.z = 99
  400.   end
  401.  
  402.   #--------------------------------------------------------------------------
  403.   # * Nasconde il Menu per non mostrarlo in altre scene.
  404.   #--------------------------------------------------------------------------
  405.   def elimina_menu
  406.     @title_state = 2
  407.     for i in 0..@selettore.size-1
  408.       @selettore[i].opacity = 0
  409.     end
  410.     @imm_popup.opacity = 0 if @imm_popup != nil
  411.     @Baloon.opacity = 0
  412.     @sfondobarra.opacity = 0
  413.   end
  414.  
  415.   #--------------------------------------------------------------------------
  416.   # * Metodo ridefinito
  417.   #--------------------------------------------------------------------------
  418.   alias h87_newg command_new_game unless $@
  419.   def command_new_game
  420.     Sound.play_ok
  421.     h87_newg
  422.   end
  423.  
  424.   #--------------------------------------------------------------------------
  425.   # * Metodo ridefinito
  426.   #--------------------------------------------------------------------------
  427.   alias h87_end command_shutdown unless $@
  428.   def command_shutdown
  429.     Sound.play_ok
  430.     h87_end
  431.   end
  432.  
  433.   #--------------------------------------------------------------------------
  434.   # * alias del comando continua
  435.   #--------------------------------------------------------------------------
  436.   alias h87_cc_cont command_continue unless $@
  437.   def command_continue
  438.     if continue_enabled
  439.       Sound.play_ok
  440.       h87_cc_cont
  441.     else
  442.       Sound.play_buzzer
  443.     end
  444.   end
  445.  
  446.   #--------------------------------------------------------------------------
  447.   # * restituisce true se c'è un salvataggio
  448.   #--------------------------------------------------------------------------
  449.   def continue_enabled
  450.     return DataManager.save_file_exists?
  451.   end
  452.  
  453. end #scene_title
  454.  
  455. class Window_TitleCommand < Window_Command
  456.   def open;end
  457. end
RAW Paste Data