modern_algebra

[VXA] Monster Catalogue 1.1

Feb 4th, 2012
3,989
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #==============================================================================
  2. #    Monster Catalogue
  3. #    Version: 1.1
  4. #    Author: modern algebra (rmrk.net)
  5. #    Date: March 24, 2012
  6. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  7. #  Description:
  8. #
  9. #    This script creates a scene that you can call which shows data on any and
  10. #   all monsters you have collected. You can change the exact point at which
  11. #   data will show up. By default, the script will show only ?????? for any
  12. #   monsters not yet fought, but once they are first encountered by the player
  13. #   then the monster's name, battler, and stats will show up. There are options
  14. #   to change that though. For instance, you could make it so that only the
  15. #   monster's name and battler will show up when the monster is encountered,
  16. #   and to show the stats you will need to use a special analyze item, which
  17. #   you can set up in the database by simply putting \analyze in an item or
  18. #   skill's notebox.
  19. #
  20. #    Additionally, you can give the enemies species and use different
  21. #   categories to separate them.
  22. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  23. #  Instructions:
  24. #
  25. #    Paste this script into its own slot in the Script Editor, above Main but
  26. #   below Materials.
  27. #
  28. #    This script can be mostly plug & play, but there are a few configuration
  29. #   options worth playing around with and a bunch of totally useless
  30. #   configuration options I added in a fit of paranoia.
  31. #
  32. #    The most important options are from lines 102-263, and I explain what
  33. #   each option does in a comment directly preceding it, so I will ask you to
  34. #   look through that section in detail.
  35. #``````````````````````````````````````````````````````````````````````````````
  36. #  Notetags for Enemies:
  37. #
  38. #    \desc{description of the monster} - This allows you to give each monster
  39. #       a description which will appear in the bottom window in the Monster
  40. #       Catalogue scene. You can use \N to go to the next line, and you can
  41. #       also use any normal message codes like \c[n], \v[n], etc... If you do
  42. #       not want to give monsters descriptions, you can turn the window off by
  43. #       changing the value of :desc_window_lines to 0 at line 270.
  44. #
  45. #    \species[id] - This allows you to give each enemy a species, which will be
  46. #      shown by its icon and text directly below the monster's name in the data
  47. #      window. You set up the species in the :species array at line 187.
  48. #
  49. #    \hide_from_catalogue - This will prevent the monster from ever showing up
  50. #      in the catalogue. It is useful for dummy monsters or, for instance, boss
  51. #      monsters. You can hide or reveal a monster using the following codes in
  52. #      a script call of an event (see lines 84-89 for more detail):
  53. #          hide_monster(id)
  54. #          reveal_monster(id)
  55. #
  56. #    \category[x, y, z] - This allows you to add a monster to categories, which
  57. #      you can then add to your monster catalogue to make navigation easier.
  58. #      See lines 239-250 for more detail.
  59. #
  60. #    \silhouette["filename", hue] - If you are using the silhouette feature,
  61. #      this allows you to set a silhouette graphic to be loaded for a monster,
  62. #      instead of automatically generated (since automatic generation is slow).
  63. #      See lines 224-237 for more details.
  64. #
  65. #    \icon[index] - This lets you set an icon for each monster, which will then
  66. #      be shown to the left of its name in the list.
  67. #``````````````````````````````````````````````````````````````````````````````
  68. #  Notetags for Items and Skills:
  69. #
  70. #    \analyze - This will identify an item or skill as an analyzing item or
  71. #      skill, which means that when it is used, a data window on the enemy will
  72. #      be shown in battle, and further, that enemy will be considered analyzed.
  73. #      You can use analyze status as a criterion for showing data, etc. in the
  74. #      regular catalogue as well. See lines 104-140.
  75. #``````````````````````````````````````````````````````````````````````````````
  76. #  Script Calls in Events:
  77. #
  78. #    encounter_monster(id)
  79. #      This will manually set a monster as encountered. See lines 104-140.
  80. #
  81. #    analyze_monster(id)
  82. #      This will manually set a monster as analyzed. See lines 104-140.
  83. #
  84. #    hide_monster(id)
  85. #      This will set it so the identified monster will not show up in the
  86. #     catalogue under any conditions
  87. #
  88. #    reveal_monster(id)
  89. #      This will set it so the identified monster is no longer hidden
  90. #
  91. #    call_monster_catalogue
  92. #      This will call the Monster Catalogue scene.
  93. #==============================================================================
  94.  
  95. $imported ||= {}
  96. $imported[:MA_MonsterCatalogue] = true
  97.  
  98. MAMC_CONFIG = {
  99.   #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  100.   #  BEGIN Editable Region
  101.   #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  102.   #  Useful Options
  103.   #````````````````````````````````````````````````````````````````````````````
  104.   #  The first four options all have this in common - they can be set to one of
  105.   # the following values:
  106.   #    :always    - The value to be shown will always be shown
  107.   #    :encounter - The value to be shown will be shown once the monster has
  108.   #                been encountered. You can either manually encounter an enemy
  109.   #                through a call script, or it will automatically happen the
  110.   #                first time the party fights that kind of enemy.
  111.   #    :analyze   - The value to be shown will be shown once the monster has
  112.   #                been analyzed. You can set either manually analyze an enemy
  113.   #                through a call script, or you can do it by setting items and
  114.   #                skills to be \analyze items that, when used, will analyze
  115.   #                a monster and show data on it. By default, I do not use this
  116.   #                option for anything.
  117.   #````````````````````````````````````````````````````````````````````````````
  118.   # :show_entry_when - When does the monster show up in the catalogue? Note
  119.   #    that hidden enemies will never show up, regardless of your choice here,
  120.   #    and also note that unless either the battler or data are to be shown,
  121.   #    the name of the monster will not be shown even if it is present.
  122.   :show_entry_when => :always,      
  123.   # :show_battler_when - When does the monster's battler show up when looking
  124.   #    at that enemy in the catalogue? Note that if the data is shown, the
  125.   #    battler will automatically be shown anyway.
  126.   :show_battler_when => :encounter,
  127.   # :show_data_when - When does the monster's stats show up when looking at
  128.   #    that enemy in the catalogue?
  129.   :show_data_when => :encounter,
  130.   # :complete_when - This feature is only useful if you are tracking completion
  131.   #    and showing it. This tracks when a monster is counted as collected, so
  132.   #    as to show up in the left side of the completion.
  133.   :complete_when => :encounter,
  134.   # :show_completion - This feature allows you to choose whether to track
  135.   #    completion. If set to :none, then it will not show up at all in the
  136.   #    catalogue. If set to :fraction, then it will show up as a fraction like
  137.   #    x/y where x is the amount of monsters you have completed (as per the
  138.   #    :complete_when condition) and y is the total number of monsters in the
  139.   #    category. If set to :percent, it will show up as a percentage - ie. if
  140.   #    you have collected 8 out of 50 monsters, it will show up as 16%
  141.   :show_completion => :fraction,
  142.   # :absent_monster_name - If a monster entry is shown but neither the battler
  143.   #    nor the stats are shown, this replaces the name of the monster. If you
  144.   #    actually still want the name to be shown, then you can put "%s" as the
  145.   #    value.
  146.   :absent_monster_name => "??????",
  147.   # :shown_stats - This determines which stats of a monster are shown when
  148.   #    data is shown for the monster. You also must set the corresponding text
  149.   #    to be shown. Ie. each line must be something like:
  150.   #
  151.   #        :stat => "Label",
  152.   #
  153.   #      :stat must correspond to a method name in Game_Enemy or its
  154.   #    superclasses or inherited modules, or else it will not be shown. Some
  155.   #    valid values for this are: :mhp, :mmp, :atk, :def, :mat, :mdf, :agi,
  156.   #    :luk, :hit, :eva, :cri, :exp, :gold, :cev, :mev, :mrf, :cnt, :hrg, :mrg,
  157.   #    :trg, :tgr, :grd, :rec, :pha, :mcr, :tcr, :pdr, :mdr, :fdr, and :exr.
  158.   #
  159.   #      "Label" is the text to be drawn. Note that if the "Label" is a String,
  160.   #    then that word will be drawn. However, if you make :"Label" a symbol by
  161.   #    putting a colon before the quotation marks, then the text shown will be
  162.   #    the result of evaluationg "Label". This is useful since it allows you
  163.   #    to use terms in Vocab, meaning it will change depending on what you put
  164.   #    in the database and you don't have to change it again here.
  165.   #
  166.   #   EXAMPLE Lines:
  167.   #    where the Enemy's Attack is 45, the enemy's hit rate is 95, and the name
  168.   #    of the Attack parameter set in Terms is ATK.
  169.   #      :atk => :"Vocab.param(2)",
  170.   #        shows up as:      ATK          45
  171.   #      :atk => "DMG",
  172.   #        shows up as:      DMG          45
  173.   #      :hit => "HIT",
  174.   #        shows up as:      HIT          95%
  175.   :shown_stats => { # <= Do not touch
  176.     :mhp  => :"Vocab.hp",
  177.     :mmp  => :"Vocab.mp",
  178.     :atk  => :"Vocab.param(2)",
  179.     :def  => :"Vocab.param(3)",
  180.     :mat  => :"Vocab.param(4)",
  181.     :mdf  => :"Vocab.param(5)",
  182.     :agi  => :"Vocab.param(6)",
  183.     :luk  => :"Vocab.param(7)",
  184.   }, # <= Do not touch
  185.   # :stats_label - This is the label placed just above the Stats section.
  186.   :stats_label => "Stats",
  187.   # :species - This allows you to give monsters species, and the icon and name
  188.   #    of the species will show up underneath its name once data is revealed.
  189.   #    Each line must be in the format:
  190.   #
  191.   #        [icon_index, "name"],
  192.   #
  193.   #      icon_index is the Integer index of the icon you want to use
  194.   #      "name" is a String and is the name of the species.
  195.   #
  196.   #    Then, to assign a species to an Enemy, all you need to do is put the
  197.   #    following code in its notebox:
  198.   #
  199.   #        \species_id[n]
  200.   #
  201.   #      n is the ID of the species, which is its place in the following array.
  202.   #        Note that 0 is not used - it starts at 1.
  203.   :species => [
  204.     [335, "Monster"],     # ID: 1 - Monster
  205.     [291, "Beast"],       # ID: 2 - Beast
  206.     [339, "Undead"],      # ID: 3 - Undead
  207.     [121, "Human"],       # ID: 4 - Human
  208.   ],
  209.   # :menu_access - This value determines whether the Bestiary is accessible
  210.   #    from a command in the menu. If true, then it is. If false, it isn't.
  211.   :menu_access => true,
  212.   # :menu_index - If :menu_access is true, then this value determines where in
  213.   #    the menu command window it is inserted.
  214.   :menu_index => 4,
  215.   # :menu_label - If :menu_access is true, then this value determines the name
  216.   #    of the command in the menu
  217.   :menu_label => "Monster Catalogue",
  218.   # :map_access - This value determines whether the catalogue is accessible by
  219.   #    pressing a button in the map. If true, then it is. If false, it isn't.
  220.   :map_access => false,
  221.   #  :map_button - If :map_access is true, then this is the button that needs
  222.   #    to be pressed in order to open the catalogue from the map.
  223.   :map_button => :R,
  224.   # :silhouette - This value determines whether, if the battler is not yet
  225.   #    shown for a monster in the catalogue, it should show a silhouette. The
  226.   #    silhouette can be automatically generated, but that is a time-consuming
  227.   #    process, especially for larger battlers. Lag may be experienced. If you
  228.   #    do want this feature on, however, then there is an option to have the
  229.   #    silhouette graphic be loaded directly from the Battlers folder by
  230.   #    placing the following code in an Enemy's notebox:
  231.   #
  232.   #      \silhouette["Filename", hue]
  233.   #
  234.   #        "Filename" is the filename of the Graphic in Battlers to be loaded
  235.   #        hue is an integer between 0 and 360 and setss the graphic's hue
  236.   #
  237.   #    That can be especially useful to avoid lag with larger battlers.
  238.   :silhouette => false,
  239.   # :categories - This lets you create categories of monsters, and the setup is
  240.   #    identical to :species (see line 191). The first entry in the array must
  241.   #    be the "All" category; it includes every monster and the ID for it is 0.
  242.   #    However, the next ones can be whatever you want. To add an enemy to a
  243.   #    category, you just need to put the following code into its notebox:
  244.   #
  245.   #      \category[x]
  246.   #  
  247.   #    Where x is the ID of the category you want to put it in. One monster can
  248.   #    be in as many categories as you want, so you can put more in, like this:
  249.   #
  250.   #      \category[x, y, z]
  251.   :categories => [
  252.     [334, "Monster Catalogue"],  # ID: 0 - All Enemies
  253.   ],
  254.   # :shown_categories - This is the order of the categories in the catalogue.
  255.   #    It must be an array of the IDs of the above set categories. If you only
  256.   #    put in one number, then the category window won't be shown in the
  257.   #    catalogue and it will just always show the specified category.
  258.   :shown_categories => [0],
  259.   # :hide_category_cursor - If you are using the categories feature, then this
  260.   #    value determines whether a cursor should be shown in that window or
  261.   #    whether it should just rely on the fact that only the icon of the
  262.   #    selected category is enabled.
  263.   :hide_category_cursor => true,
  264.   #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  265.   #  Superfluous options
  266.   #````````````````````````````````````````````````````````````````````````````
  267.   # :list_window_width - This allows you to set, in pixels, the width of the
  268.   #    window which lists the monsters in the catalogue.
  269.   :list_window_width => 216,
  270.   # :desc_window_lines - This allows you to choose how many lines will fit in
  271.   #    the help window. If set to 0, there will be no help window to show
  272.   #    description.
  273.   :desc_window_lines => 2,
  274.   # :sort_by - This allows you to choose how the monsters are sorted in the
  275.   #    list. It can only be one of the following options:
  276.   #      :id - The monsters will be ordered from the smallest ID to the largest
  277.   #      :alphabet - The monsters will be in alphabetical order
  278.   #      :encounter - The monsters will be in the order they were encountered
  279.   :sort_by => :id,
  280.   # :number_by - This option allows you to number the monsters in the list. It
  281.   #    can be one of three options:
  282.   #      :none - The monsters will not be numbered
  283.   #      :id - The monsters will be numbered by their ID
  284.   #      :index - The monsters will be numbered by the order they are in
  285.   :number_by => :id,
  286.   # :number_format - If :number_by is not :none, then this is the format the
  287.   #    number will show up in. %d is where the number will show up, so "%d. "
  288.   #    will show up as:
  289.   #      1. name
  290.   #      2. name (etc.)
  291.   #    while something like "(%d) " would show up as:
  292.   #      (1) name
  293.   #      (2) name (etc.)
  294.   :number_format => "%d. ",
  295.   # :frame_width - The width, in pixels of the frame for the monster data.
  296.   :frame_width => 2,
  297.   # :battler_opacity - The opacity of the battler when drawn
  298.   :battler_opacity => 255,
  299.   # :battler_opacity_under_stats - Some large battlers extend over the stats
  300.   #    region of the window. This sets the opacity for that section of the
  301.   #    battler.
  302.   :battler_opacity_under_stats => 128,
  303.   # :windowskin - This sets the windowskin to be used in the Monster Catalogue
  304.   #    scene. It must be a graphic in the System folder of Graphics. If set to
  305.   #    false, it will use whatever windowskin is default.
  306.   :windowskin => false,
  307.   # :font_name - The font to be used in the Monster Catalogue scene. It can
  308.   #    be either a String, an Array, or false. If false, it will use the
  309.   #    default font. If a String, it will use that font. If an array, it will
  310.   #    use the first font in the array that the player has installed.
  311.   :font_name => false,
  312.   # :show_monster_icon - This feature allows you to set it so that an icon is
  313.   #    shown to the left of each monster's name in the list. To set what icon
  314.   #    will show, you would use the following code in a notebox of an Enemy:
  315.   #
  316.   #      \icon[index]
  317.   #
  318.   #    where index is the index of the icon you want to use.
  319.   :show_monster_icon => false,
  320.   # :inherit_species_icon - If :show_monster_icon is on, then you can turn this
  321.   #    value to true and, if you do not directly set an icon for a monster,
  322.   #    then it will use the icon for its species.
  323.   :inherit_species_icon => false,
  324.   #````````````````````````````````````````````````````````````````````````````
  325.   # Colours - the next seven options all set colours for various things. They
  326.   #   can accept the following values:
  327.   #     Integer - if an integer, then it will choose the colour from the
  328.   #       windowskin palette.
  329.   #     Array - if an array, it must have between three and four entries and
  330.   #       the first three will be the rgb values and the last is optional and
  331.   #       it will be the alpha (opacity).
  332.   #     Symbol - if a symbol, then the colour chosen will be the result of
  333.   #       calling that method.
  334.   #````````````````````````````````````````````````````````````````````````````
  335.   # :system_colour - This allows you to change the colour of all of the labels
  336.   #    and other text that are drawn in the system color.
  337.   :system_colour => :system_color,
  338.   # :normal_colour - This allows you to change the colour of all of the values
  339.   #    and other text that are drawn in the normal color.
  340.   :normal_colour => :normal_color,
  341.   # :frame_colour - This allows you to select the colour of the frame
  342.   :frame_colour => :system_color,
  343.   # :frame_shadow_colour - This allows you to select the colour of the frame's
  344.   #    shadow.
  345.   :frame_shadow_colour => [0, 0, 0, 128],
  346.   # :species_colour - This allows you to select the colour for the species name
  347.   :species_colour => 8,
  348.   # :silhouette_colour - This allows you to select the colour of the silhouette
  349.   #    if you are using that feature and automatically generating them.
  350.   :silhouette_colour => [0, 0, 0],
  351.   # :complete_colour - This allows you to select the colour the completion stat
  352.   #    is drawn in when all monsters in a category are collected.
  353.   :complete_colour => 3,
  354.   #````````````````````````````````````````````````````````````````````````````
  355.   # :completion_label - This must be a string. If it is empty, then the
  356.   #    completion stat will simply be drawn centred. If the string isn't empty,
  357.   #    then this text will be drawn on the left in system_color and the
  358.   #    completion stat will be aligned to the right.
  359.   :completion_label => "",
  360.   # :percent_format - If showing the completion stat in fraction format, this
  361.   #    allows you to choose how it shows up. The first %d will be replaced by
  362.   #    the number completed and the second %d will be replaced by the total
  363.   #    number of monsters in the category
  364.   :fraction_format => "%d/%d",
  365.   # :percent_format - If showing the completion stat in percent format, this
  366.   #    allows you to choose how it shows up. The %.1f will be replaced by the
  367.   #    completion percentage to 1 decimal place. %% will be replaced by %
  368.   :percent_format => "%.1f%%",
  369.   #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  370.   # END Editable Region
  371.   #////////////////////////////////////////////////////////////////////////////
  372. }
  373.  
  374. MAMC_CONFIG[:categories] = [[334, "Monster Catalogue"]] if MAMC_CONFIG[:categories].nil? || MAMC_CONFIG[:categories].empty?
  375. MAMC_CONFIG[:shown_categories].reject! { |n| MAMC_CONFIG[:categories][n] == nil }
  376. MAMC_CONFIG[:shown_categories] = [0] if MAMC_CONFIG[:shown_categories].empty?
  377.  
  378. #==============================================================================
  379. # ** RPG::UsableItem
  380. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  381. #  Summary of Changes:
  382. #    new method - mamc_analyze?
  383. #==============================================================================
  384.  
  385. class RPG::UsableItem
  386.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  387.   # * Analyze Item
  388.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  389.   def mamc_analyze?
  390.     @mamc_analyze = !self.note[/\\ANALYZE/i].nil? if !@mamc_analyze
  391.     @mamc_analyze
  392.   end
  393. end
  394.  
  395. #==============================================================================
  396. # ** RPG::Enemy
  397. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  398. #  Summary of Changes:
  399. #    new method - description; icon_index; species_id; category_ids;
  400. #      silhouette_battler; mamc_hide?
  401. #==============================================================================
  402.  
  403. class RPG::Enemy
  404.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  405.   # * Description
  406.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  407.   def description(*args, &block)
  408.     if !@mamc_description
  409.       @mamc_description = super(*args, &block)
  410.       if note[/\\(DESCRIPTION|DESC)\{(.+?)\}/im]
  411.         @mamc_description = $2
  412.         @mamc_description.gsub!(/[\r\n]/, "")
  413.         @mamc_description.gsub!(/\\[Nn]/, "\n")
  414.       end
  415.       @mamc_description = "" unless @mamc_description.is_a?(String)
  416.     end
  417.     @mamc_description
  418.   end
  419.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  420.   # * Icon Index
  421.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  422.   def icon_index(*args, &block)
  423.     if !@mamc_icon_index
  424.       @mamc_icon_index = super(*args, &block)
  425.       if note[/\\ICON\[\s*(\d+)\s*\]/i]
  426.         @mamc_icon_index = $1.to_i
  427.       elsif MAMC_CONFIG[:inherit_species_icon]
  428.         # Species Icon
  429.         @mamc_icon_index = MAMC_CONFIG[:species][species_id - 1][0]
  430.       end
  431.       @mamc_icon_index = 0 unless @mamc_icon_index.is_a?(Integer)
  432.     end
  433.     @mamc_icon_index
  434.   end
  435.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  436.   # * Species ID
  437.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  438.   def species_id
  439.     if !@mamc_species_id
  440.       @mamc_species_id = (self.note[/\\SPECIES\[\s*(\d+)\s*\]/i] ? $1.to_i : 0)
  441.     end
  442.     @mamc_species_id
  443.   end
  444.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  445.   # * Category IDs
  446.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  447.   def category_ids
  448.     if !@mamc_category_ids
  449.       @mamc_category_ids = [0]
  450.       if self.note[/\\CATEGOR(Y|IES)\[(.+?)\]/i] != nil
  451.         @mamc_category_ids |= $2.scan(/\d+/).collect { |id| id.to_i }
  452.       end
  453.     end
  454.     @mamc_category_ids
  455.   end
  456.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  457.   # * Hide?
  458.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  459.   def mamc_hide?
  460.     @mamc_hide = !self.note[/\\HIDE_FROM_CATALOG/i].nil? if !@mamc_hide
  461.     @mamc_hide
  462.   end
  463.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  464.   # * Silhouette Battler
  465.   #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  466.   def silhouette_battler
  467.     if !@mamc_silhouette_battler
  468.       @mamc_silhouette_battler = []
  469.       if self.note[/\\SILHOUETTE\[\s*["'](.+?)["'][,;:\s]*H?(\d*)\s*\]/i]
  470.        @mamc_silhouette_battler.push($2.to_i)
  471.        @mamc_silhouette_battler.unshift($1.gsub(/[\r\n]/, ""))
  472.      end
  473.    end
  474.    @mamc_silhouette_battler
  475.  end
  476. end
  477.  
  478. #==============================================================================
  479. # ** Game_System
  480. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  481. #  Summary of Changes:
  482. #    new methods - mamc_encounter_ary; mamc_analyze_ary; mamc_hide_ary;
  483. #      mamc_encounter_monster; mamc_analyze_monster; mamc_data_conditions_met?
  484. #==============================================================================
  485.  
  486. class Game_System
  487.  [:encounter, :analyze].each { |method|
  488.    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  489.    # * Encounter/Analyze Array
  490.    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  491.    define_method(:"mamc_#{method}_ary") do
  492.      instance_variable_set(:"@mamc_#{method}_ary", []) if instance_variable_get(:"@mamc_#{method}_ary").nil?
  493.      instance_variable_get(:"@mamc_#{method}_ary")
  494.    end
  495.    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  496.    # * Encounter/Analyze Monster
  497.    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  498.    define_method(:"mamc_#{method}_monster") do |*args|
  499.      ary = send(:"mamc_#{method}_ary")
  500.      instance_variable_set(:"@mamc_#{method}_ary", ary | args)
  501.    end
  502.  }
  503.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  504.  # * Hidden Array
  505.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  506.  def mamc_hide_ary
  507.    if !@mamc_hide_ary
  508.      @mamc_hide_ary = []
  509.      $data_enemies.compact.each { |enemy| @mamc_hide_ary.push(enemy.id) if enemy.mamc_hide? }
  510.    end
  511.    @mamc_hide_ary
  512.  end
  513.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  514.  # * Data Conditions Met?
  515.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  516.  def mamc_data_conditions_met?(condition, monster_id = 0)
  517.    return case condition
  518.    when :always then true
  519.    when :encounter then mamc_encounter_ary.include?(monster_id)
  520.    when :analyze then mamc_analyze_ary.include?(monster_id)
  521.    else
  522.      false
  523.    end
  524.  end
  525. end
  526.  
  527. #==============================================================================
  528. # ** Game_Enemy
  529. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  530. #  Summary of Changes:
  531. #    new public instance variable - mamc_analyze_now
  532. #    aliased method - on_battle_start; item_user_effect
  533. #==============================================================================
  534.  
  535. class Game_Enemy
  536.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  537.  # * Public Instance Variables
  538.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  539.  attr_accessor :mamc_analyze_now
  540.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  541.  # * Die/Transform
  542.  #``````````````````````````````````````````````````````````````````````````
  543.  # Add to encounter array whenever the enemy dies or is transformed
  544.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  545.  [:die, :transform].each { |meth|
  546.    alias_method(:"mamc_enem#{meth}_2aw1", meth)
  547.    define_method(meth) do |*args|
  548.      $game_system.mamc_encounter_monster(enemy.id) if exist? && enemy
  549.      send(:"mamc_enem#{meth}_2aw1", *args)
  550.    end
  551.  }
  552.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  553.  # * Item User Effect
  554.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  555.  alias mamc_itmusreffect_2dw9 item_user_effect
  556.  def item_user_effect(user, item, *args, &block)
  557.    mamc_itmusreffect_2dw9(user, item, *args, &block)
  558.    if item.mamc_analyze?
  559.      $game_system.mamc_analyze_monster(enemy.id)
  560.      @mamc_analyze_now = true
  561.      @result.success = true
  562.    end
  563.  end
  564. end
  565.  
  566. #==============================================================================
  567. # ** Game_Interpreter
  568. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  569. #  Summary of Changes:
  570. #    new methods - encounter_monster; analyze_monster; hide_monster;
  571. #      reveal_monster; call_monster_catalogue
  572. #==============================================================================
  573.  
  574. class Game_Interpreter
  575.  [:encounter, :analyze].each { |method|
  576.    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  577.    # * Encounter/Analyze Monster
  578.    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  579.    define_method(:"#{method}_monster") do |*args|
  580.      $game_system.send(:"mamc_#{method}_monster", *args)
  581.    end
  582.  }
  583.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  584.  # * Hide/Reveal Monster
  585.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  586.  def hide_monster(monster_id)
  587.    $game_system.mamc_hide_ary.push(monster_id) unless $game_system.mamc_hide_ary.include?(monster_id)
  588.  end
  589.  def reveal_monster(monster_id)
  590.    $game_system.mamc_hide_ary.delete(monster_id)
  591.  end
  592.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  593.  # * Call Monster Catalogue
  594.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  595.  def call_monster_catalogue
  596.    return if $game_party.in_battle
  597.    SceneManager.call(Scene_MonsterCatalogue)
  598.    Fiber.yield
  599.  end
  600. end
  601.  
  602. #==============================================================================
  603. # *** MAMC_WindowAdditions
  604. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  605. #  This module adds a few methods to MAMC windows
  606. #==============================================================================
  607.  
  608. module MAMC_WindowAdditions
  609.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  610.  # * Object Initialization
  611.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  612.  def initialize(*args, &block)
  613.    super(*args, &block)
  614.    self.windowskin = Cache.system(MAMC_CONFIG[:windowskin]) if MAMC_CONFIG[:windowskin]
  615.  end
  616.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  617.  # * Reset Font Settings / Create Contents
  618.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  619.  [:reset_font_settings, :create_contents].each { |method|
  620.    define_method(method) do |*args|
  621.      super(*args)
  622.      contents.font.name = MAMC_CONFIG[:font_name] if MAMC_CONFIG[:font_name]
  623.    end
  624.  }
  625.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  626.  # * MA Text Color
  627.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  628.  def text_color(param)
  629.    begin
  630.      colour = case param
  631.      when Integer then super(param) rescue normal_color
  632.      when Symbol then send(param) rescue normal_color
  633.      when Array then Color.new(*param) rescue normal_color
  634.      else
  635.        normal_color
  636.      end
  637.    end
  638.    colour.is_a?(Color) ? colour : normal_color
  639.  end
  640.  def normal_color
  641.    c = MAMC_CONFIG[:normal_colour]
  642.    c == :normal_color ? super : text_color(c)
  643.  end
  644.  def system_color
  645.    c = MAMC_CONFIG[:system_colour]
  646.    c == :system_color ? super : text_color(c)
  647.  end
  648. end
  649.  
  650. #==============================================================================
  651. # ** Window_MonsterCategory
  652. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  653. #  This window is a horizontal command window using icons to represent species
  654. #==============================================================================
  655.  
  656. class Window_MonsterCategory < Window_HorzCommand
  657.  include MAMC_WindowAdditions
  658.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  659.  # * Public Instance Variable
  660.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  661.  attr_reader :monsterlist_window
  662.  attr_reader :label_window
  663.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  664.  # * Window Width
  665.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  666.  def window_width
  667.    MAMC_CONFIG[:list_window_width]
  668.  end
  669.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  670.  # * Column Max
  671.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  672.  def col_max
  673.    [(width - standard_padding) / (24 + spacing), item_max].min
  674.  end
  675.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  676.  # * Current Item Enabled?
  677.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  678.  def current_item_enabled?
  679.    !current_data.nil?
  680.  end
  681.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  682.  # * Make Command List
  683.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  684.  def make_command_list
  685.    MAMC_CONFIG[:shown_categories].each { |cat|
  686.      ary = MAMC_CONFIG[:categories][cat]
  687.      add_command(ary[1], :"#{cat}", false, ary[0])
  688.    }
  689.  end
  690.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  691.  # * Draw Item
  692.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  693.  def draw_item(index)
  694.    rect = item_rect(index)
  695.    contents.clear_rect(rect)
  696.    draw_icon(@list[index][:ext], rect.x + ((rect.width - 24) / 2), rect.y, enable?(index))
  697.  end
  698.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  699.  # * Enabled?
  700.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  701.  def enable?(index)
  702.    self.index == index
  703.  end
  704.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  705.  # * Set Index
  706.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  707.  def index=(index)
  708.    old_index = self.index
  709.    super(index)
  710.    draw_item(old_index)
  711.    draw_item(self.index)
  712.  end
  713.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  714.  # * Frame Update
  715.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  716.  def update
  717.    super
  718.    @monsterlist_window.category = MAMC_CONFIG[:shown_categories][index] if @monsterlist_window
  719.    @label_window.category = MAMC_CONFIG[:shown_categories][index] if @label_window
  720.  end
  721.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  722.  # * Set Monster Window
  723.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  724.  def monsterlist_window=(monsterlist_window)
  725.    @monsterlist_window = monsterlist_window
  726.    update
  727.  end
  728.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  729.  # * Set Monster Window
  730.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  731.  def label_window=(label_window)
  732.    @label_window = label_window
  733.    update
  734.  end
  735.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  736.  # * Update Cursor
  737.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  738.  def update_cursor
  739.    super
  740.    cursor_rect.empty if MAMC_CONFIG[:hide_category_cursor]
  741.  end
  742. end
  743.  
  744. #==============================================================================
  745. # ** Window_MonsterCategoryLabel
  746. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  747. #  This window shows the name of the species
  748. #==============================================================================
  749.  
  750. class Window_MonsterCategoryLabel < Window_Base
  751.  include MAMC_WindowAdditions
  752.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  753.  # * Object Initialization
  754.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  755.  def initialize(x, y)
  756.    super(x, y, window_width, window_height)
  757.  end
  758.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  759.  # * Refresh
  760.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  761.  def refresh(category_id = @category)
  762.    contents.clear
  763.    change_color(system_color)
  764.    contents.font.bold = true
  765.    draw_text(0, 0, contents_width, line_height, MAMC_CONFIG[:categories][category_id][1], 1)
  766.    contents.font.bold = false
  767.    draw_completion(0, line_height) unless MAMC_CONFIG[:show_completion] == :none
  768.  end
  769.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  770.  # * Draw Completion
  771.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  772.  def draw_completion(x, y)
  773.    if !MAMC_CONFIG[:completion_label].empty?
  774.      change_color(system_color)
  775.      draw_text(x, y, contents_width, line_height, MAMC_CONFIG[:completion_label])
  776.      align = 2
  777.    else
  778.      align = 1
  779.    end
  780.    a, b = get_completion
  781.    colour = a == b ? text_color(MAMC_CONFIG[:complete_colour]) : normal_color
  782.    change_color(colour)
  783.    draw_text(x, y, contents_width, line_height, completion_to_s(a, b), align)
  784.  end
  785.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  786.  # * Get Completion
  787.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  788.  def get_completion
  789.    a, b = 0, 0
  790.    $data_enemies.compact.each { |enemy|
  791.      if enemy.category_ids.include?(@category) && !$game_system.mamc_hide_ary.include?(enemy.id)
  792.        b += 1
  793.        a += 1 if $game_system.mamc_data_conditions_met?(MAMC_CONFIG[:complete_when], enemy.id)
  794.      end
  795.    }
  796.    return a, b
  797.  end
  798.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  799.  # * Completion String
  800.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  801.  def completion_to_s(x, y)
  802.    return "" if y == 0
  803.    case MAMC_CONFIG[:show_completion]
  804.    when :fraction then sprintf(MAMC_CONFIG[:fraction_format], x, y)
  805.    when :percent then sprintf(MAMC_CONFIG[:percent_format], (x.to_f / y)*100)
  806.    else
  807.      ""
  808.    end
  809.  end
  810.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  811.  # * Set Category
  812.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  813.  def category=(category)
  814.    return if @category == category
  815.    @category = category
  816.    refresh
  817.  end
  818.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  819.  # * Window Width
  820.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  821.  def window_width
  822.    MAMC_CONFIG[:list_window_width]
  823.  end
  824.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  825.  # * Window Height
  826.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  827.  def window_height
  828.    hght = (standard_padding*2) + line_height
  829.    hght += line_height unless MAMC_CONFIG[:show_completion] == :none
  830.    hght
  831.  end
  832. end
  833.  
  834. #==============================================================================
  835. # ** Window_MonsterList
  836. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  837. #  This window shows all monsters in a selected category.
  838. #==============================================================================
  839.  
  840. class Window_MonsterList < Window_Selectable
  841.  include MAMC_WindowAdditions
  842.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  843.  # * Object Initialization
  844.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  845.  def initialize(x, y, width, height)
  846.    super
  847.    @data = []
  848.    self.index = 0
  849.    activate
  850.  end
  851.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  852.  # * Set Category
  853.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  854.  def category=(category)
  855.    return if @category == category
  856.    @category = category
  857.    refresh
  858.    self.index = 0
  859.    self.oy = 0
  860.  end
  861.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  862.  # * Column Max
  863.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  864.  def col_max
  865.    1
  866.  end
  867.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  868.  # * Item Maximum
  869.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  870.  def item_max
  871.    @data ? @data.size : 1
  872.  end
  873.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  874.  # * Get monster
  875.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  876.  def item
  877.    @data && index >= 0 ? @data[index] : nil
  878.  end
  879.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  880.  # * Current Item Enabled?
  881.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  882.  def current_item_enabled?
  883.    enable?(@data[index])
  884.  end
  885.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  886.  # * Whether to include an item in Data
  887.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  888.  def include?(item)
  889.    return false unless item != nil && item.category_ids.include?(@category)
  890.    return false if $game_system.mamc_hide_ary.include?(item.id)
  891.    $game_system.mamc_data_conditions_met?(MAMC_CONFIG[:show_entry_when], item.id)
  892.  end
  893.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  894.  # * Whether it should be drawn enabled
  895.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  896.  def enable?(item)
  897.    return false if item.nil?
  898.    $game_system.mamc_data_conditions_met?(MAMC_CONFIG[:show_battler_when], item.id) ||
  899.      $game_system.mamc_data_conditions_met?(MAMC_CONFIG[:show_data_when], item.id)
  900.  end
  901.  alias show_name? enable?  
  902.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  903.  # * Make Item List
  904.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  905.  def make_item_list
  906.    @data = $data_enemies.select {|item| include?(item) }
  907.    case MAMC_CONFIG[:sort_by]
  908.    when :alphabet
  909.      @data.sort! { |a, b| a.name <=> b.name }
  910.    when :encounter
  911.      encounter_order = $game_system.mamc_encounter_ary.reverse
  912.      encounter_order.each { |id|
  913.        a = @data.delete($data_enemies[id])
  914.        @data.unshift($data_enemies[id]) if a != nil
  915.      }
  916.    end
  917.  end
  918.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  919.  # * Draw Item
  920.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  921.  def draw_item(index)
  922.    item = @data[index]
  923.    if item
  924.      rect = item_rect_for_text(index)
  925.      enable = enable?(item)
  926.      change_color(normal_color, enable)
  927.      draw_number(index, rect) unless !MAMC_CONFIG[:number_by] || MAMC_CONFIG[:number_by] == :none
  928.      if show_name?(item)
  929.        if MAMC_CONFIG[:show_monster_icon]
  930.          draw_item_name(item, rect.x, rect.y, enable, rect.width)
  931.        else
  932.          draw_text(rect, item.name)
  933.        end
  934.      else
  935.        if MAMC_CONFIG[:show_monster_icon]
  936.          rect.x += 24
  937.          rect.width -= 24
  938.        end
  939.        draw_text(rect, sprintf(MAMC_CONFIG[:absent_monster_name], item.name))
  940.      end
  941.    end
  942.  end
  943.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  944.  # * Draw Number
  945.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  946.  def draw_number(index, rect)
  947.    num = case MAMC_CONFIG[:number_by]
  948.    when :id then @data[index].id
  949.    when :index then index + 1
  950.    end
  951.    string = sprintf(MAMC_CONFIG[:number_format], num)
  952.    tw = contents.text_size(string).width
  953.    draw_text(rect, string)
  954.    rect.x += tw
  955.    rect.width -= tw
  956.  end
  957.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  958.  # * Refresh
  959.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  960.  def refresh
  961.    make_item_list
  962.    create_contents
  963.    draw_all_items
  964.  end
  965.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  966.  # * Update Help
  967.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  968.  def update_help
  969.    @help_window.monster_id = item ? item.id : 0
  970.  end
  971. end
  972.  
  973. #==============================================================================
  974. # ** Window_MonsterCard
  975. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  976. #  This window shows data on a monster
  977. #==============================================================================
  978.  
  979. class Window_MonsterCard < Window_Selectable
  980.  include MAMC_WindowAdditions
  981.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  982.  # * Public Instance Variables
  983.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  984.  attr_reader :monster_id
  985.  attr_reader :monster
  986.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  987.  # * Object Initialization
  988.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  989.  def initialize(x, y, width, height)
  990.    super(x, y, width, height)
  991.    refresh(0)
  992.  end
  993.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  994.  # * Refresh
  995.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  996.  def refresh(monster_id = @monster_id)
  997.    monster_id = 0 if monster_id == nil
  998.    if monster_id.is_a?(Game_Enemy)
  999.      @monster = monster_id
  1000.      @monster_id = @monster.enemy.id
  1001.    else
  1002.      @monster_id = monster_id
  1003.      @monster = monster_id > 0 ? Game_Enemy.new(0, @monster_id) : nil
  1004.    end
  1005.    contents.clear
  1006.    reset_font_settings
  1007.    w = MAMC_CONFIG[:frame_width]
  1008.    if @monster_id > 0 && (show_battler? || MAMC_CONFIG[:silhouette])
  1009.      draw_battler(1 + w*2, 4 + w*4 + line_height, !show_battler?)
  1010.    end
  1011.    draw_frame
  1012.    draw_stats_label if show_data? && !shown_stats.empty?
  1013.    draw_name(6 + w*2, 2 + w*2) if @monster
  1014.    if show_data?
  1015.      # Draw Species
  1016.      draw_species(6 + w*2, 4 + w*4 + line_height)
  1017.      # Draw Stats
  1018.      draw_stats
  1019.    end
  1020.    update_help
  1021.  end
  1022.  alias monster_id= refresh
  1023.  alias monster= refresh
  1024.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1025.  # * Draw Frame
  1026.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1027.  def draw_frame
  1028.    w = MAMC_CONFIG[:frame_width]
  1029.    wdth = contents_width - 2 - w
  1030.    hght = contents_height - 2 - w
  1031.    draw_basic_frame(1 + w, 1 + w, wdth, hght, text_color(MAMC_CONFIG[:frame_shadow_colour]))
  1032.    draw_basic_frame(1, 1, wdth, hght, text_color(MAMC_CONFIG[:frame_colour]))
  1033.  end
  1034.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1035.  # * Draw Basic Frame
  1036.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1037.  def draw_basic_frame(x, y, width, height, colour)
  1038.    w = MAMC_CONFIG[:frame_width]
  1039.    # Draw Horizontal Lines
  1040.    contents.fill_rect(x, y, width, w, colour)
  1041.    contents.fill_rect(x, y + line_height + (w + 1)*2, width, w, colour)
  1042.    contents.fill_rect(x, y + height - w, width, w, colour)
  1043.    # Draw Vertical Lines
  1044.    contents.fill_rect(x, y, w, height, colour)
  1045.    contents.fill_rect(x + width - w, y, w, height, colour)
  1046.  end
  1047.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1048.  # * Draw Stat Divider
  1049.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1050.  def draw_stat_divider(x, y, width, label_x, tw, colour)
  1051.    w = MAMC_CONFIG[:frame_width]
  1052.    contents.fill_rect(x, y, label_x - x, w, colour)
  1053.    contents.fill_rect(label_x + tw, y, width - ((label_x - x) + tw), w, colour)
  1054.  end
  1055.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1056.  # * Draw Stats Label
  1057.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1058.  def draw_stats_label
  1059.    w = MAMC_CONFIG[:frame_width]
  1060.    contents.font.bold = true
  1061.    stw = text_size(MAMC_CONFIG[:stats_label]).width + 8
  1062.    lx = 34
  1063.    y = stat_y + (line_height / 2)
  1064.    draw_stat_divider(1 + w, y + w, contents_width - 2 - 3*w, lx, stw, text_color(MAMC_CONFIG[:frame_shadow_colour]))
  1065.    draw_stat_divider(1, y, contents_width - 2 - w, lx, stw, text_color(MAMC_CONFIG[:frame_colour]))
  1066.    change_color(text_color(MAMC_CONFIG[:frame_colour]))
  1067.    draw_text(lx, stat_y, stw, line_height, MAMC_CONFIG[:stats_label], 1)
  1068.    reset_font_settings
  1069.  end
  1070.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1071.  # * Draw Monster Battler
  1072.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1073.  def draw_battler(x, y, silhouette = false)
  1074.    bmp = setup_battler_graphic(x, y, silhouette)
  1075.    # Draw in two parts: full opacity and less opacity
  1076.    clear_hght = stat_y + (line_height / 2) - y
  1077.    src_rect = Rect.new(0, 0, bmp.rect.width, [clear_hght, bmp.rect.height].min)
  1078.    contents.blt(x, y, bmp, src_rect, MAMC_CONFIG[:battler_opacity])
  1079.    if bmp.rect.height > clear_hght
  1080.      src_rect.y = clear_hght
  1081.      src_rect.height = bmp.rect.height - clear_hght
  1082.      contents.blt(x, y + clear_hght, bmp, src_rect, MAMC_CONFIG[:battler_opacity_under_stats])
  1083.    end
  1084.    bmp.dispose
  1085.  end
  1086.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1087.  # * Draw Name
  1088.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1089.  def draw_name(x, y)
  1090.    change_color(normal_color)
  1091.    draw_text(x, y, contents_width - 2*x, line_height, monster_name)
  1092.  end
  1093.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1094.  # * Draw Species
  1095.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1096.  def draw_species(x, y)
  1097.    return if monster.enemy.species_id < 1
  1098.    return if MAMC_CONFIG[:species][monster.enemy.species_id - 1].nil?
  1099.    icon_index, species_name = *MAMC_CONFIG[:species][monster.enemy.species_id - 1]
  1100.    draw_icon(icon_index, x, y)
  1101.    change_color(text_color(MAMC_CONFIG[:species_colour]))
  1102.    draw_text(x + 24, y, contents_width - x*2, line_height, species_name)
  1103.  end
  1104.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1105.  # * Draw Stats
  1106.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1107.  def draw_stats
  1108.    x = 6 + MAMC_CONFIG[:frame_width]*2
  1109.    y = stat_y + line_height
  1110.    width = ((contents_width - x*2) / 2) - 8
  1111.    stats = shown_stats
  1112.    for i in 0...stats.size
  1113.      draw_stat(x + ((i % 2)*(width + 16)), y + ((i / 2)*line_height), width, stats[i])
  1114.    end
  1115.  end
  1116.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1117.  # * Draw Stat
  1118.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1119.  def draw_stat(x, y, width, stat)
  1120.    stat_val = stat_value(stat)
  1121.    label = MAMC_CONFIG[:shown_stats][stat]
  1122.    stat_label = label.is_a?(Symbol) ? eval(label.to_s) : label
  1123.    tw = text_size(stat_val).width + 4
  1124.    change_color(system_color)
  1125.    draw_text(x, y, width - tw, line_height, stat_label)
  1126.    change_color(normal_color)
  1127.    draw_text(x, y, width, line_height, stat_val, 2)
  1128.  end
  1129.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1130.  # * Show Data?
  1131.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1132.  def show_data?(monster_id = @monster_id)
  1133.    return false unless monster_id.between?(1, $data_enemies.size - 1)
  1134.    $game_system.mamc_data_conditions_met?(MAMC_CONFIG[:show_data_when], monster_id)
  1135.  end
  1136.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1137.  # * Show Battler and Name?
  1138.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1139.  def show_battler?(monster_id = @monster_id)
  1140.    return false unless monster_id.between?(1, $data_enemies.size - 1)
  1141.    show_data?(monster_id) || $game_system.mamc_data_conditions_met?(MAMC_CONFIG[:show_battler_when], monster_id)
  1142.  end
  1143.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1144.  # * Get Battler Graphic
  1145.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1146.  def setup_battler_graphic(x, y, silhouette = false)
  1147.    bmp = get_battler(silhouette)
  1148.    # Maximum Parameters
  1149.    max_width = contents_width - 2*x
  1150.    max_height = contents_height - y - (1 + MAMC_CONFIG[:frame_width]*2)
  1151.    # Make dummy Bitmap
  1152.    rect = Rect.new(x, y, max_width, max_height)
  1153.    dest_rect, fits = battler_rect(bmp, rect)
  1154.    dummy_bmp = Bitmap.new(max_width, max_height)
  1155.    # Draw Battler
  1156.    if fits
  1157.      dummy_bmp.blt(dest_rect.x, dest_rect.y, bmp, bmp.rect)
  1158.    else
  1159.      src_rect = Rect.new((bmp.rect.width - dest_rect.width) / 2,
  1160.        (bmp.rect.height - dest_rect.height) / 2, dest_rect.width, dest_rect.height)
  1161.      dummy_bmp.blt(dest_rect.x, dest_rect.y, bmp, src_rect)
  1162.    end
  1163.    dummy_bmp
  1164.  end
  1165.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1166.  # * Get Battler
  1167.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1168.  def get_battler(silhouette = false)
  1169.    if silhouette
  1170.      if !monster.enemy.silhouette_battler.empty?
  1171.        begin
  1172.          return Cache.battler(*monster.enemy.silhouette_battler)
  1173.        rescue
  1174.          p "Error: Monster Catalogue\nSilhouette Battler set for Monster #{monster.id}: #{monster.name} does not exist."
  1175.        end
  1176.      end
  1177.      bmp_to_silhouette(Cache.battler(monster.battler_name, monster.battler_hue).dup)
  1178.    else
  1179.      Cache.battler(monster.battler_name, monster.battler_hue)
  1180.    end
  1181.  end
  1182.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1183.  # * Convert Bitmap to Silhouette
  1184.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1185.  def bmp_to_silhouette(bmp)
  1186.    colour = text_color(MAMC_CONFIG[:silhouette_colour])
  1187.    for i in 0...bmp.width
  1188.      for j in 0...bmp.height
  1189.        pa = bmp.get_pixel(i, j).alpha
  1190.        if pa != 0
  1191.          colour.alpha = pa
  1192.          bmp.set_pixel(i, j, colour)
  1193.        end
  1194.      end
  1195.    end
  1196.    bmp
  1197.  end
  1198.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1199.  # * Battler Rect
  1200.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1201.  def battler_rect(bmp, rect)
  1202.    # Get the size
  1203.    dest_rect = bmp.rect.dup
  1204.    # If need to stretch, find the correct proportion
  1205.    fits = dest_rect.width <= rect.width && dest_rect.height <= rect.height
  1206.    if !fits
  1207.      dest_rect.width = rect.width if dest_rect.width > rect.width
  1208.      dest_rect.height = rect.height if dest_rect.height > rect.height
  1209.    end
  1210.    # Centre Battler
  1211.    dest_rect.x = ((rect.width - dest_rect.width) / 2)
  1212.    if dest_rect.height < (stat_y - rect.y - 16)
  1213.      dest_rect.y = ((stat_y - rect.y - dest_rect.height) / 2)
  1214.    elsif dest_rect.height > ((rect.height*3) / 4)
  1215.      dest_rect.y = ((rect.height - dest_rect.height) / 2)
  1216.    else
  1217.      dest_rect.y = 8
  1218.    end
  1219.    return dest_rect, fits
  1220.  end
  1221.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1222.  # * Showable Stats
  1223.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1224.  def shown_stats
  1225.    stats = (monster.nil? || !show_data?) ? [] : MAMC_CONFIG[:shown_stats].keys
  1226.    stats.keep_if { |stat| monster.class.method_defined?(stat) }
  1227.    stats
  1228.  end
  1229.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1230.  # * Monster Name
  1231.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1232.  def monster_name
  1233.    (monster && (show_battler? || show_data?)) ? monster.enemy.name :
  1234.      sprintf(MAMC_CONFIG[:absent_monster_name], monster.enemy.name)
  1235.  end
  1236.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1237.  # * Stat Value
  1238.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1239.  def stat_value(stat)
  1240.    if $imported[:MA_EnemyStatVariance]
  1241.      param_id = [:mhp, :mmp, :atk, :def, :mat, :mdf, :agi, :luk].index(stat)
  1242.      if param_id != nil
  1243.        stat_val = monster.enemy.params[param_id]
  1244.        plus = 0
  1245.        monster.enemy.maesv_add_params.each { |param_var|
  1246.          if param_var[0] == param_id
  1247.            if param_var[2]
  1248.              plus += ((param_var[1].to_f / 100.0)*(stat_val + plus)).to_i
  1249.            else
  1250.              plus += (param_var[1] - 1)
  1251.            end
  1252.          end
  1253.        }
  1254.        return "#{stat_val}-#{stat_val + plus}" if plus > 0
  1255.      end
  1256.    end
  1257.    stat_val = monster.send(stat)
  1258.    stat_val.is_a?(Float) ? "#{(stat_val*100).to_i}%" : stat_val.to_s
  1259.  end
  1260.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1261.  # * Stat Y
  1262.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1263.  def stat_y
  1264.    y = contents_height - (1 + MAMC_CONFIG[:frame_width]*2)
  1265.    y -= (((shown_stats.size + 1) / 2) + 1)*line_height unless shown_stats.empty?
  1266.    y
  1267.  end
  1268.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1269.  # * Update Help
  1270.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1271.  def update_help
  1272.    @help_window.set_item((monster && show_data?) ? monster.enemy : nil) if @help_window
  1273.  end
  1274. end
  1275.  
  1276. #==============================================================================
  1277. # *** MAMC Battle Monster Card
  1278. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1279. #  This module alters a couple of methods in Window_MonsterCard
  1280. #==============================================================================
  1281.  
  1282. module MAMC_BattleMonsterCard
  1283.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1284.  # * Draw Stat
  1285.  #    Change draw_stat method to draw gauge for HP and MP
  1286.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1287.  def draw_stat(x, y, width, stat)
  1288.    case stat
  1289.    when :mhp, :hp then draw_actor_hp(monster, x, y, width)
  1290.    when :mmp, :mp then draw_actor_mp(monster, x, y, width)
  1291.    else
  1292.      super(x, y, width, stat)
  1293.    end
  1294.  end
  1295.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1296.  # * Stat Value
  1297.  #    Change stat_value method to not show range if Enemy Stat Variance
  1298.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1299.  def stat_value(stat)
  1300.    stat_val = monster.send(stat)
  1301.    stat_val.is_a?(Float) ? "#{(stat_val*100).to_i}%" : stat_val.to_s
  1302.  end
  1303. end
  1304.  
  1305. #==============================================================================
  1306. # ** Scene_Battle
  1307. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1308. #  Summary of Changes:
  1309. #    aliased methods - create_all_windows; invoke_item
  1310. #    new method - mamc_analyze_monster; create_monstercard_window;
  1311. #      close_monstercard_window
  1312. #==============================================================================
  1313.  
  1314. class Scene_Battle
  1315.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1316.  # * Create All Windows
  1317.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1318.  alias mamc_createallwindows_2sj5 create_all_windows
  1319.  def create_all_windows(*args, &block)
  1320.    mamc_createallwindows_2sj5(*args, &block) # Call Original Methods
  1321.    create_monstercard_window
  1322.  end
  1323.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1324.  # * Create Monster Card Window
  1325.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1326.  def create_monstercard_window
  1327.    x = (Graphics.width - @status_window.width) / 2
  1328.    @monstercard_window = Window_MonsterCard.new(x, 0, @status_window.width, Graphics.height - @status_window.height)
  1329.    @monstercard_window.z = [@log_window.z + 1, 200].max
  1330.    @monstercard_window.openness = 0
  1331.    # Include the BattleMonsterCard module in the singleton class
  1332.    @monstercard_window.send(:extend, MAMC_BattleMonsterCard)
  1333.    @monstercard_window.set_handler(:cancel, lambda { close_monster_card_window })
  1334.    @monstercard_window.set_handler(:ok, lambda { close_monster_card_window })
  1335.  end
  1336.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1337.  # * Analyze Monster
  1338.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1339.  def mamc_analyze_monster(target)
  1340.    target.mamc_analyze_now = false
  1341.    @monstercard_window.monster = target
  1342.    @monstercard_window.open
  1343.    @monstercard_window.activate
  1344.  end
  1345.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1346.  # * Frame Update
  1347.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1348.  alias mamc_update_3sk9 update
  1349.  def update(*args, &block)
  1350.    if @monstercard_window.active
  1351.      update_basic
  1352.    else
  1353.      $game_troop.members.each { |enemy|
  1354.        if enemy.class.method_defined?(:mamc_analyze_now) && enemy.mamc_analyze_now
  1355.          mamc_analyze_monster(enemy)
  1356.          return
  1357.        end
  1358.      }
  1359.      mamc_update_3sk9(*args, &block) # Call Original Method
  1360.    end
  1361.  end
  1362.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1363.  # * Close Monster Card Window
  1364.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1365.  def close_monster_card_window
  1366.    $imported["YEA-BattleEngine"] ? @monstercard_window.openness = 0 : @monstercard_window.close
  1367.  end
  1368. end
  1369.  
  1370. #==============================================================================
  1371. # ** Scene_Map
  1372. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1373. #  Summary of Changes:
  1374. #    aliased method - update_scene
  1375. #    new methods - update_call_monster_catalogue; call_monster_catalogue
  1376. #==============================================================================
  1377.  
  1378. class Scene_Map
  1379.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1380.  # * Update Scene
  1381.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1382.  alias mamc_updatscen_2wh5 update_scene
  1383.  def update_scene(*args, &block)
  1384.    mamc_updatscen_2wh5(*args, &block)
  1385.    update_call_monster_catalogue unless scene_changing?
  1386.  end
  1387.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1388.  # * Update Call Monster Catalogue
  1389.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1390.  def update_call_monster_catalogue
  1391.    if $game_map.interpreter.running?
  1392.      @monster_catalogue_calling = false
  1393.    else
  1394.      @monster_catalogue_calling ||= Input.trigger?(MAMC_CONFIG[:map_button])
  1395.      call_monster_catalogue if @monster_catalogue_calling && !$game_player.moving?
  1396.    end
  1397.  end
  1398.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1399.  # * Call Monster Catalogue
  1400.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1401.  def call_monster_catalogue
  1402.    @monster_catalogue_calling = false
  1403.    Sound.play_ok
  1404.    SceneManager.call(Scene_MonsterCatalogue)
  1405.  end
  1406. end if MAMC_CONFIG[:map_access]
  1407.  
  1408. # Menu Access
  1409. if !$imported[:MA_InsertCommand] && MAMC_CONFIG[:menu_access]
  1410. # Initialize the Insertion Hash
  1411. MA_COMMAND_INSERTS = {}
  1412. MA_InsertableMenuCommand = Struct.new(:name, :index, :enable, :scene, :other)
  1413.  
  1414. #==============================================================================
  1415. # ** Game_System
  1416. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1417. #  Summary of Changes:
  1418. #    new public instance variable - maic_menu_commands
  1419. #    aliased method - initialize
  1420. #==============================================================================
  1421.  
  1422. class Game_System
  1423.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1424.  # * Inserted Menu Commands
  1425.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1426.  def maic_inserted_menu_commands
  1427.    # Lazy Instantiation so that old save files are not corrupted
  1428.    if !@maic_inserted_menu_commands
  1429.      @maic_inserted_menu_commands = MA_COMMAND_INSERTS.keys
  1430.      # Sort by index
  1431.      @maic_inserted_menu_commands.sort! { |a, b| MA_COMMAND_INSERTS[a].index <=> MA_COMMAND_INSERTS[b].index }
  1432.    end
  1433.    @maic_inserted_menu_commands
  1434.  end
  1435. end
  1436.  
  1437. #==============================================================================
  1438. # ** Window_MenuCommand
  1439. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1440. #  Summary of Changes:
  1441. #    aliased method - make_command_list; maic_insert_command
  1442. #==============================================================================
  1443.  
  1444. class Window_MenuCommand
  1445.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1446.  # * Make Command List
  1447.  #``````````````````````````````````````````````````````````````````````````
  1448.  #  I alias this method instead of add_original_commands because I need to
  1449.  # have all commands created before I can insert at the correct index
  1450.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1451.  alias maic_mkcmmndl_6yd2 make_command_list
  1452.  def make_command_list(*args, &block)
  1453.    maic_mkcmmndl_6yd2(*args, &block) # Run Original Method
  1454.    # Insert new commands
  1455.    $game_system.maic_inserted_menu_commands.each { |sym| maic_insert_command(sym) }
  1456.  end
  1457.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1458.  # * Insert Command
  1459.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1460.  def maic_insert_command(symbol)
  1461.    command = MA_COMMAND_INSERTS[symbol]
  1462.    # Get the command name
  1463.    name = command.name.is_a?(Symbol) ? eval(command.name.to_s) : command.name
  1464.    # Check whether enabled
  1465.    enabled = case command.enable
  1466.    when Integer then command.enable == 0 ? true : $game_switches[command.enable]
  1467.    when String then eval(command.enable)
  1468.    when Symbol then self.send(command.enable)
  1469.    else
  1470.      enabled = true
  1471.    end
  1472.    # Add the command to the list
  1473.    add_command(name, symbol, enabled)
  1474.    added = @list.pop
  1475.    @list.insert([command.index, @list.size].min, added) # Insert at specific index
  1476.  end
  1477. end
  1478.  
  1479. #==============================================================================
  1480. # ** Scene_Menu
  1481. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1482. #  Summary of Changes:
  1483. #    aliased method - create_command_window; on_personal_ok
  1484. #    new methods - maic_set_insert_handler; maic_command_insert
  1485. #==============================================================================
  1486.  
  1487. class Scene_Menu
  1488.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1489.  # * Create Command Window
  1490.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1491.  alias maic_createcndwin_3ey7 create_command_window
  1492.  def create_command_window(*args, &block)
  1493.    maic_createcndwin_3ey7(*args, &block) # Run Original Method
  1494.    # Add handlers for all custom commands
  1495.    $game_system.maic_inserted_menu_commands.each { |symbol| maic_set_insert_handler(symbol) }
  1496.  end
  1497.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1498.  # * Set Inserted Handler
  1499.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1500.  def maic_set_insert_handler(symbol)
  1501.    other = MA_COMMAND_INSERTS[symbol].other
  1502.    handler = case other
  1503.    when Symbol then method(other)
  1504.    when String then lambda { eval(other) }
  1505.    when TrueClass then method(:command_personal)
  1506.    else
  1507.      handler = method(:maic_command_insert)
  1508.    end
  1509.    @command_window.set_handler(symbol, handler)
  1510.  end
  1511.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1512.  # * Custom Command
  1513.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1514.  def maic_command_insert
  1515.    SceneManager.call(Kernel.const_get(MA_COMMAND_INSERTS[@command_window.current_symbol].scene))
  1516.  end
  1517.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1518.  # * Personal OK
  1519.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1520.  alias maic_onpok_3ek9 on_personal_ok
  1521.  def on_personal_ok(*args, &block)
  1522.    if $game_system.maic_inserted_menu_commands.include?(@command_window.current_symbol)
  1523.      maic_command_insert
  1524.    else
  1525.      maic_onpok_3ek9(*args, &block) # Run Original Method
  1526.    end
  1527.  end
  1528. end
  1529.  
  1530. $imported[:MA_InsertCommand] = true
  1531. end
  1532.  
  1533. if MAMC_CONFIG[:menu_access]
  1534.  MA_COMMAND_INSERTS[:monster_catalogue] = MA_InsertableMenuCommand.new(MAMC_CONFIG[:menu_label],
  1535.    MAMC_CONFIG[:menu_index], true, :Scene_MonsterCatalogue, false)
  1536. end
  1537.  
  1538. #==============================================================================
  1539. # ** Scene Monster Catalogue
  1540. #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1541. #  This processes the Monster Catalogue Scene
  1542. #==============================================================================
  1543.  
  1544. class Scene_MonsterCatalogue < Scene_MenuBase
  1545.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1546.  # * Start
  1547.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1548.  def start
  1549.    super
  1550.    create_help_window
  1551.    create_categorylabel_window
  1552.    create_category_window
  1553.    create_monstercard_window
  1554.    create_monsterlist_window
  1555.  end
  1556.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1557.  # * Create Help Window
  1558.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1559.  def create_help_window
  1560.    if MAMC_CONFIG[:desc_window_lines] > 0
  1561.      @help_window = Window_Help.new(MAMC_CONFIG[:desc_window_lines])
  1562.      @help_window.send(:extend, MAMC_WindowAdditions)
  1563.      @help_window.windowskin = Cache.system(MAMC_CONFIG[:windowskin]) if MAMC_CONFIG[:windowskin]
  1564.      @help_window.reset_font_settings
  1565.      @help_window.y = Graphics.height - @help_window.height
  1566.    end
  1567.  end
  1568.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1569.  # * Create Category Label Window
  1570.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1571.  def create_categorylabel_window
  1572.    @categorylabel_window = Window_MonsterCategoryLabel.new(0, 0)
  1573.    @categorylabel_window.category = MAMC_CONFIG[:shown_categories][0]
  1574.  end
  1575.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1576.  # * Create Category Window
  1577.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1578.  def create_category_window
  1579.    unless MAMC_CONFIG[:shown_categories].size < 2
  1580.      @category_window = Window_MonsterCategory.new(0, @categorylabel_window.height)
  1581.      @category_window.label_window = @categorylabel_window
  1582.    end
  1583.  end
  1584.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1585.  # * Create Monster Card
  1586.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1587.  def create_monstercard_window
  1588.    x = MAMC_CONFIG[:list_window_width]
  1589.    hght = @help_window ? @help_window.y : Graphics.height
  1590.    @monstercard_window = Window_MonsterCard.new(x, 0, Graphics.width - x, hght)
  1591.    @monstercard_window.set_handler(:cancel,   method(:return_scene))
  1592.    @monstercard_window.activate
  1593.    @monstercard_window.help_window = @help_window if @help_window
  1594.  end
  1595.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1596.  # * Create Monster List Window
  1597.  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1598.  def create_monsterlist_window
  1599.    y = @category_window ? @category_window.y + @category_window.height : @categorylabel_window.height
  1600.    hght = @help_window ? @help_window.y - y : Graphics.height - y
  1601.    @monsterlist_window = Window_MonsterList.new(0, y, MAMC_CONFIG[:list_window_width], hght)
  1602.    @monsterlist_window.category = MAMC_CONFIG[:shown_categories][0]
  1603.    @monsterlist_window.help_window = @monstercard_window
  1604.    @category_window.monsterlist_window = @monsterlist_window if @category_window
  1605.  end
  1606. end
RAW Paste Data