SHARE
TWEET

Game Difficulty - ITA

Holy87 Feb 12th, 2017 (edited) 182 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. =begin
  2.  ==============================================================================
  3.   ■ Difficoltà di gioco di Holy87
  4.       versione 1.0
  5.       Difficoltà utente: ★
  6.       Licenza: CC. Chiunque può scaricare, modificare, distribuire e utilizzare
  7.       lo script nei propri progetti, sia amatoriali che commerciali. Vietata
  8.       l'attribuzione impropria.
  9.  ==============================================================================
  10.     Questo script permette di selezionare un livello di difficoltà del gioco.
  11.     Puoi impostare quanti livelli di difficoltà desideri, cambiando probabilità
  12.     di drop, esperienza, oro e parametri dei nemici. La difficoltà è salvata in
  13.     una variabile di gioco, per cui puoi aggiungere condizioni nel gioco a
  14.     seconda del livello di diffoltà scelto tramite semplici condizioni evento
  15.     (ad esempio, puoi far comparire meno scrigni a livello difficile)
  16.  ==============================================================================
  17.   ■ Compatibilità
  18.     Scene_Title -> alias command_new_game
  19.                    alias create_command_window
  20.                    alias start
  21.  ==============================================================================
  22.   ■ Installazione e istruzioni
  23.     Installare questo script sotto Materials e prima del Main.
  24.     Lo script è Plug&Play. Puoi modificare alcuni settaggi in basso, nella
  25.     sezione CONFIGURAZIONE (in particolare, i livelli di difficoltà).
  26.     Puoi specificare un nuovo livello di difficoltà aggiungendo nell'array un
  27.     nuovo hash (gli hash sono valori nelle parentesi {}) con le seguenti
  28.     caratteristiche:
  29.     name: nome difficoltà (ad es. facile, normale, difficile)
  30.     drop_rate: modifica la probabilità di drop (100 è normale, 200 doppio)
  31.     exp_rate: modifica l'esperienza ottenuta in percentuale (come sopra)
  32.     gold_rate: come sopra, ma per l'oro
  33.     enemy_mhp: HP massimi del nemico
  34.     enemy_mmp: MP massimi del nemico
  35.     enemy_atk: attacco dei nemici
  36.     enemy_def: difesa dei nemici
  37.     enemy_mat: attacco magico dei nemici
  38.     enemy_mdf: difesa magica dei nemici
  39.     enemy_agi: agilità dei nemici
  40.     enemy_luk: fortuna dei nemici
  41.  ==============================================================================
  42. =end
  43.  
  44.  
  45. #==============================================================================
  46. # ** CONFIGURAZIONE
  47. #==============================================================================
  48. module Game_Difficulty
  49.   LEVELS = [
  50.     {name: 'Facile', drop_rate: 80,
  51.       enemy_mhp: 75,
  52.       enemy_atk: 75,
  53.       ememy_mat: 75,
  54.       enemy_agi: 75
  55.       },
  56.     {name: 'Normale'}, #nessun'altra configurazione, normale
  57.     {name: 'Difficile',
  58.       drop_rate: 110,
  59.       exp_rate: 110,
  60.       gold_rate: 80,
  61.       enemy_mhp: 125,
  62.       enemy_atk: 125,
  63.       enemy_def: 110,
  64.       enemy_mat: 125,
  65.       enemy_mdf: 110,
  66.       enemy_luk: 125
  67.     }
  68.   ]
  69.   #--------------------------------------------------------------------------
  70.   # * Alcune impostazioni dello script
  71.   #--------------------------------------------------------------------------
  72.   # ID della variabile che memorizzerà la difficoltà scelta
  73.   DIFFICULTY_VARIABLE = 50
  74.   # Vuoi permettere al giocatore di modificare il livello di difficoltà dal
  75.   # menu di gioco?
  76.   SHOW_IN_SETTINGS = true
  77.   # Vuoi mostrare i livelli di difficoltà selezionabili in un popup? (attiva
  78.   # questa opzione se i livelli di difficoltà sono troppi per essere mostrati
  79.   # in una sola riga)
  80.   SHOW_POPUP = false
  81.   # Vuoi mostrare la finestra di selezione livello di difficoltà all'avvio di
  82.   # una nuova partita?
  83.   SHOW_LEVEL_WINDOW = true
  84.   # Livello di difficoltà predefinito
  85.   DEFAULT_DIFFICULTY = 1 # normale
  86.   #--------------------------------------------------------------------------
  87.   # * Vocaboli
  88.   #--------------------------------------------------------------------------
  89.   # Nome del comando nelle opzioni di gioco
  90.   DIFFICULTY_CMD = 'Difficoltà'
  91.   # Testo d'aiuto comando nelle opzioni di gioco
  92.   DIFFICULTY_HELP = 'Seleziona il livello di difficoltà.'
  93.   # Testo d'aiuto nella selezione difficoltà sulla schermata del titolo
  94.   SELECT_HELP = 'Seleziona il livello di difficoltà.'
  95. end
  96.  
  97. #==============================================================================
  98. # ** FINE CONFIGURAZIONE
  99. #------------------------------------------------------------------------------
  100. #                 - ATTENZIONE: NON MODIFICARE OLTRE! -
  101. #==============================================================================
  102.  
  103.  
  104. $imported = {} if $imported == nil
  105. $imported['H87_Difficulty'] = 1.0
  106. #==============================================================================
  107. # ** Game_Difficulty
  108. #------------------------------------------------------------------------------
  109. #
  110. #==============================================================================
  111. module Game_Difficulty
  112.   #--------------------------------------------------------------------------
  113.   # * Returns the difficulties array
  114.   # @return [Array]
  115.   #--------------------------------------------------------------------------
  116.   def self.get_difficulties
  117.     LEVELS.collect {|lev| lev[:name]}
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # * Option hash
  121.   #--------------------------------------------------------------------------
  122.   hash = {
  123.       :type       => :variable,
  124.       :text       => DIFFICULTY_CMD,
  125.       :help       => DIFFICULTY_HELP,
  126.       :var        => DIFFICULTY_VARIABLE,
  127.       :values     => get_difficulties,
  128.       :open_popup => SHOW_POPUP}
  129.   #--------------------------------------------------------------------------
  130.   # * Adding the setting to Game Options
  131.   #--------------------------------------------------------------------------
  132.   H87Options.push_game_option(hash) if SHOW_IN_SETTINGS && $imported['H87_Options']
  133. end
  134.  
  135. $imported = {} if $imported.nil?
  136. $imported['H87-GameDifficulty'] = 1.0
  137. #==============================================================================
  138. # ** Difficulty_Level
  139. #------------------------------------------------------------------------------
  140. # Contains informations for the difficulty settings
  141. #==============================================================================
  142. class Difficulty_Level
  143.   attr_reader :name             # difficulty name
  144.   attr_reader :exp_rate         # exp rate
  145.   attr_reader :drop_rate        # drop rate
  146.   attr_reader :gold_rate        # gold rate
  147.   attr_reader :enemy_mhp_rate   # enemy max hp rate
  148.   attr_reader :enemy_mmp_rate   # enemy max mp rate
  149.   attr_reader :enemy_atk_rate   # enemy attack rate
  150.   attr_reader :enemy_mat_rate   # enemy magic attack rate
  151.   attr_reader :enemy_mdf_rate   # enemy magic defense rate
  152.   attr_reader :enemy_def_rate   # enemy defense rate
  153.   attr_reader :enemy_agi_rate   # enemy agi rate
  154.   attr_reader :enemy_luk_rate   # enemy luck rate
  155.   #--------------------------------------------------------------------------
  156.   # * Object initialization
  157.   # @param[Hash] hash
  158.   #--------------------------------------------------------------------------
  159.   def initialize(hash)
  160.     @name = hash[:name]
  161.     @exp_rate = hash[:exp_rate] ? hash[:exp_rate] : 100
  162.     @drop_rate = hash[:drop_rate] ? hash[:drop_rate] : 100
  163.     @gold_rate = hash[:gold_rate] ? hash[:gold_rate] : 100
  164.     @enemy_mhp_rate = hash[:enemy_mhp] ? hash[:enemy_mhp] : 100
  165.     @enemy_mmp_rate = hash[:enemy_mmp] ? hash[:enemy_mmp] : 100
  166.     @enemy_atk_rate = hash[:enemy_atk] ? hash[:enemy_atk] : 100
  167.     @enemy_def_rate = hash[:enemy_def] ? hash[:enemy_atk] : 100
  168.     @enemy_mat_rate = hash[:enemy_mat] ? hash[:enemy_mat] : 100
  169.     @enemy_mdf_rate = hash[:enemy_mdf] ? hash[:enemy_mdf] : 100
  170.     @enemy_agi_rate = hash[:enemy_agi] ? hash[:enemy_agi] : 100
  171.     @enemy_luk_rate = hash[:enemy_luk] ? hash[:enemy_luk] : 100
  172.   end
  173. end
  174.  
  175. #==============================================================================
  176. # ** Game_System
  177. #==============================================================================
  178. class Game_System
  179.   #--------------------------------------------------------------------------
  180.   # * Difficulty variable ID
  181.   #--------------------------------------------------------------------------
  182.   def difficulty_id
  183.     $game_variables[Game_Difficulty::DIFFICULTY_VARIABLE]
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # * Returns the current difficulty level
  187.   # @return [Difficulty_Level]
  188.   #--------------------------------------------------------------------------
  189.   def current_difficulty
  190.     hash = Game_Difficulty::LEVELS[difficulty_id]
  191.     Difficulty_Level.new(hash)
  192.   end
  193. end
  194.  
  195. #==============================================================================
  196. # ** Game_Enemy
  197. #==============================================================================
  198. class Game_Enemy < Game_Battler
  199.   alias h87_gl_pb param_base unless $@
  200.   alias h87_gl_gold gold unless $@
  201.   alias h87_gl_exp exp unless $@
  202.   alias h87_gl_dir drop_item_rate unless $@
  203.   #--------------------------------------------------------------------------
  204.   # * Changes param base adjusting to the difficulty level
  205.   #--------------------------------------------------------------------------
  206.   def param_base(param_id)
  207.     h87_gl_pb(param_id) * adjust_difficulty(param_id) / 100
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # * Gold
  211.   #--------------------------------------------------------------------------
  212.   def gold
  213.     h87_gl_gold * $game_system.current_difficulty.gold_rate / 100
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # * Exp
  217.   #--------------------------------------------------------------------------
  218.   def exp
  219.     h87_gl_exp * $game_system.current_difficulty.exp_rate / 100
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # * Drop item rate
  223.   #--------------------------------------------------------------------------
  224.   def drop_item_rate
  225.     h87_gl_dir * ($game_system.current_difficulty.drop_rate / 100.0 + 1.0)
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # * Param multiplier
  229.   #--------------------------------------------------------------------------
  230.   def adjust_difficulty(param_id)
  231.     d_lev = $game_system.current_difficulty
  232.     case param_id
  233.       when 0; return d_lev.enemy_mhp_rate # mhp
  234.       when 1; return d_lev.enemy_mmp_rate # mmp
  235.       when 2; return d_lev.enemy_atk_rate # atk
  236.       when 4; return d_lev.enemy_def_rate # def
  237.       when 3; return d_lev.enemy_mat_rate # mat
  238.       when 5; return d_lev.enemy_mdf_rate # mdf
  239.       when 6; return d_lev.enemy_agi_rate # agi
  240.       when 7; return d_lev.enemy_luk_rate # luk
  241.       else;      return 100
  242.     end
  243.   end
  244. end
  245.  
  246. #==============================================================================
  247. # ** Window_DifficultySelect
  248. #------------------------------------------------------------------------------
  249. # Window for difficulty level selection
  250. #==============================================================================
  251. class Window_DifficultySelect < Window_Selectable
  252.   #--------------------------------------------------------------------------
  253.   # * Object initialization
  254.   #--------------------------------------------------------------------------
  255.   def initialize
  256.     make_command_list
  257.     super(0, 0, 160, window_height)
  258.     self.width = window_width
  259.     create_contents
  260.     update_placement
  261.     refresh
  262.     self.openness = 0
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # * Update Window Position
  266.   #--------------------------------------------------------------------------
  267.   def update_placement
  268.     self.x = (Graphics.width - width) / 2
  269.     self.y = (Graphics.height * 1.6 - height) / 2
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # * Get Window Width
  273.   #--------------------------------------------------------------------------
  274.   def window_width
  275.     [[max_text + padding * 2 + 4, 160].max, Graphics.width].min
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # * Get Window Height
  279.   #--------------------------------------------------------------------------
  280.   def window_height
  281.     fitting_height(visible_line_number)
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # * Get Number of Lines to Show
  285.   #--------------------------------------------------------------------------
  286.   def visible_line_number
  287.     item_max
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # * Get Number of Items
  291.   #--------------------------------------------------------------------------
  292.   def item_max
  293.     @list.size
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # * Draw item
  297.   #--------------------------------------------------------------------------
  298.   def draw_item(index)
  299.     draw_text(item_rect(index), item(index).name, alignment)
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # * Returns the current item (or indexed)
  303.   # @param [Integer] index
  304.   # @return [Difficulty_Level]
  305.   #--------------------------------------------------------------------------
  306.   def item(index = @index)
  307.     @list[index]
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # * Make command list
  311.   #--------------------------------------------------------------------------
  312.   def make_command_list
  313.     @list = difficulty_levels
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # * Difficulty levels array
  317.   # @return [Array]
  318.   #--------------------------------------------------------------------------
  319.   def difficulty_levels
  320.     Game_Difficulty::LEVELS.collect{|level| Difficulty_Level.new(level)}
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # * Max lenght of the commands
  324.   #--------------------------------------------------------------------------
  325.   def max_text
  326.     difficulty_levels.collect{|level| text_size(level.name).width}.max
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # * Text alignment
  330.   #--------------------------------------------------------------------------
  331.   def alignment; 1; end
  332.   #--------------------------------------------------------------------------
  333.   # * Selects the default difficulty index
  334.   #--------------------------------------------------------------------------
  335.   def default_index; select(Game_Difficulty::DEFAULT_DIFFICULTY); end
  336. end
  337.  
  338. #==============================================================================
  339. # ** Window_LevelHelp
  340. #------------------------------------------------------------------------------
  341. # Help windows for difficulty selection in the title menu
  342. #==============================================================================
  343. class Window_LevelHelp < Window_Base
  344.   #--------------------------------------------------------------------------
  345.   # * Object initialization
  346.   #--------------------------------------------------------------------------
  347.   def initialize(y)
  348.     super(0, y, 160, fitting_height(line_number))
  349.     self.width = window_width
  350.     center_window
  351.     create_contents
  352.     refresh
  353.     self.openness = 0
  354.   end
  355.   #--------------------------------------------------------------------------
  356.   # * Line number
  357.   #--------------------------------------------------------------------------
  358.   def line_number; 1; end
  359.   #--------------------------------------------------------------------------
  360.   # * Get Window Width
  361.   #--------------------------------------------------------------------------
  362.   def window_width
  363.     [[text_size(text).width + padding * 2 + 4, 160].max, Graphics.width].min
  364.   end
  365.   #--------------------------------------------------------------------------
  366.   # * Refresh
  367.   #--------------------------------------------------------------------------
  368.   def refresh
  369.     contents.clear
  370.     draw_text(0, 0, contents_width, line_height, text, 1)
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # * Text showed
  374.   #--------------------------------------------------------------------------
  375.   def text; Game_Difficulty::SELECT_HELP; end
  376.   #--------------------------------------------------------------------------
  377.   # * Center the window
  378.   #--------------------------------------------------------------------------
  379.   def center_window
  380.     self.x = (Graphics.width - self.width)/2
  381.     self.y = self.y - self.height
  382.   end
  383. end
  384.  
  385. #==============================================================================
  386. # ** Scene_Title
  387. #------------------------------------------------------------------------------
  388. # Adding new window for difficulty selection when a new game occurs
  389. #==============================================================================
  390. class Scene_Title < Scene_Base
  391.   alias h87gl_start start unless $@
  392.   alias h87gl_create_command_window create_command_window unless $@
  393.   alias h87gl_cng command_new_game unless $@
  394.   #--------------------------------------------------------------------------
  395.   # * Start process
  396.   #--------------------------------------------------------------------------
  397.   def start
  398.     h87gl_start
  399.     create_difficulty_window
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # * Changing method if a level selection is active
  403.   #--------------------------------------------------------------------------
  404.   def create_command_window
  405.     h87gl_create_command_window
  406.     if level_select?
  407.       @command_window.set_handler(:new_game, method(:command_difficulty))
  408.     end
  409.   end
  410.   #--------------------------------------------------------------------------
  411.   # * Difficulty window creation
  412.   #--------------------------------------------------------------------------
  413.   def create_difficulty_window
  414.     @difficulty_window = Window_DifficultySelect.new
  415.     @difficulty_window.set_handler(:ok, method(:command_new_game))
  416.     @difficulty_window.set_handler(:cancel, method(:command_recall_title))
  417.     @difficulty_help = Window_LevelHelp.new(@difficulty_window.y)
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # * Difficulty selection
  421.   #--------------------------------------------------------------------------
  422.   def command_difficulty
  423.     close_command_window
  424.     @difficulty_window.default_index
  425.     @difficulty_help.open
  426.     @difficulty_window.open
  427.     @difficulty_window.activate
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # * Reactivates the command title window
  431.   #--------------------------------------------------------------------------
  432.   def command_recall_title
  433.     close_level_window
  434.     @command_window.open
  435.     @command_window.activate
  436.   end
  437.   #--------------------------------------------------------------------------
  438.   # * Close level window
  439.   #--------------------------------------------------------------------------
  440.   def close_level_window
  441.     @difficulty_help.close
  442.     @difficulty_window.close
  443.     update until @difficulty_window.close?
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # * Command new game
  447.   #--------------------------------------------------------------------------
  448.   def command_new_game
  449.     close_level_window
  450.     h87gl_cng
  451.     var = Game_Difficulty::DIFFICULTY_VARIABLE
  452.     if level_select?
  453.       $game_variables[var] = @difficulty_window.index
  454.     else
  455.       $game_variables[var] = Game_Difficulty::DEFAULT_DIFFICULTY
  456.     end
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # * Determines if the selection must appear
  460.   #--------------------------------------------------------------------------
  461.   def level_select?
  462.     Game_Difficulty::SHOW_LEVEL_WINDOW
  463.   end
  464. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top