TechSkylander1518

WikiCode Backup

Oct 13th, 2021 (edited)
305
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 34.85 KB | None | 0 0
  1. #New utility for moves that checks if they can be taught via TM or HM
  2. module GameData
  3.   class Move
  4.     def is_machine_move?
  5.       GameData::Item.each do |i|
  6.         return true if i.move == @id
  7.       end
  8.       return false
  9.     end
  10.   end
  11. end
  12.  
  13. module GameData
  14.   class Species
  15.    
  16. #New utility for Pokemon to get the evolution method of the prevo
  17.     def get_previous_method
  18.       @evolutions.each { |evo| return [ evo[1],evo[2] ] if evo[3] }   # Is the prevolution
  19.     end
  20.    
  21. #Taken from the Pokemon Class
  22.     def getMegaForm
  23.       ret = 0
  24.       GameData::Species.each do |data|
  25.         next if data.species != self.species
  26.         if data.mega_stone
  27.           ret = data.form
  28.           break
  29.         elsif data.mega_move
  30.           ret = data.form
  31.           break
  32.         end
  33.       end
  34.       return ret   # form number, or 0 if no accessible Mega form
  35.     end
  36.    
  37.   end
  38. end
  39.  
  40. #Utility taken from PokeDex
  41. def pbFindEncounter(enc_types, species)
  42.   return false if !enc_types
  43.   enc_types.each_value do |slots|
  44.     next if !slots
  45.     slots.each { |slot| return true if GameData::Species.get(slot[1]).species == species }
  46.   end
  47.   return false
  48. end
  49.  
  50. #Script to translate an evolution method into text
  51. def pbTextFromEvo(method,parameter)
  52.   case method
  53.     when :Level
  54.       text = " starting at level #{parameter}"
  55.     when :LevelNoWeather
  56.       text = "starting at level #{parameter} when leveled up during clear weather in the overworld"
  57.     when :LevelSun
  58.       text = "starting at level #{parameter} when leveled up during intense sunlight in the overworld"
  59.     when :LevelRain
  60.       text = "starting at level #{parameter} when leveled up during rain or fog in the overworld"
  61.     when :LevelSnow
  62.       text = "starting at level #{parameter} when leveled up during hail in the overworld"
  63.     when :LevelSandstorm
  64.       text = "starting at level #{parameter} when leveled up during a sandstorm in the overworld"
  65.     when :LevelCycling
  66.       text = "starting at level #{parameter} when leveled up while the player is riding their [[Bicycle]]"
  67.     when :LevelSurfing
  68.       text = "starting at level #{parameter} when leveled up while the player is {{m|surf}}ing"
  69.     when :LevelDiving
  70.       text = "starting at level #{parameter} when leveled up while the player is [[Dive (move)|diving]]"
  71.     when :LevelDarkness
  72.       text = "starting at level #{parameter} when leveled up in a dark location (one that can be lit with {{m|Flash}})"
  73.     when :LevelDay
  74.       text = "starting at level #{parameter} when leveled up during the day"
  75.     when :LevelNight
  76.       text = "starting at level #{parameter} when leveled up at night"
  77.     when :LevelMorning
  78.       text = "starting at level #{parameter} when leveled up in the morning"
  79.     when :LevelAfternoon
  80.       text = "starting at level #{parameter} when leveled up in the afternoon"
  81.     when :LevelEvening
  82.       text = "starting at level #{parameter} when leveled up in the evening"
  83.     when :LevelDarkInParty
  84.       text = "starting at level #{parameter} while the player has a {{type|Dark}}-type Pokémon in their party."
  85.     when :AttackGreater
  86.       text = "starting at level #{parameter} when its Attack is higher than its Defense"
  87.     when :DefenseGreater
  88.       text = "starting at level #{parameter} when its Defense is higher than its Attack"
  89.     when :AtkDefEqual
  90.       text = "starting at level #{parameter} when its Attack and Defense are equal"
  91.     when :Cascoon
  92.       text = "starting at level #{parameter} depending on its personality value. As personality values cannot be influenced or seen by the player, what it will evolve into is essentially random."
  93.     when :Silcoon
  94.       text = "starting at level #{parameter} depending on its personality value. As personality values cannot be influenced or seen by the player, what it will evolve into is essentially random."
  95.     when :Item
  96.       item = GameData::Item.try_get(parameter)
  97.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  98.       text = " when exposed to #{ana} [[#{item.real_name}]]"
  99.     when :Happiness
  100.       text = " when leveled up with high happiness"
  101.     when :HappinessDay
  102.       text = " when leveled up with high happiness during the day"
  103.     when :HappinessNight
  104.       text = " when leveled up with high happiness at night"
  105.     when :HappinessMove
  106.       move = GameData::Move.try_get(parameter)
  107.       text = " when leveled up with high happiness while knowing {{m|#{move.real_name}}}"
  108.     when :HappinessMoveType
  109.       type = GameData::Type.try_get(parameter)
  110.       ana = (type.real_name.starts_with_vowel?) ? "an" : "a"
  111.       text = " when leveled up with high happiness while knowing #{ana} {{type|#{type.real_name}}}-type move"
  112.     when :MaxHappiness
  113.       text = " when leveled up with maximum happiness"
  114.     when :HappinessHoldItem
  115.       item = GameData::Item.try_get(parameter)
  116.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  117.       text = " when leveled up with high happiness while holding #{ana} #{item.real_name}"
  118.     when :Beauty
  119.       text = " when leveled up with its Beauty above #{parameter}"
  120.     when :HoldItem
  121.       item = GameData::Item.try_get(parameter)
  122.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  123.       text = " when leveled up holding #{ana} #{item.real_name}"
  124.     when :DayHoldItem
  125.       item = GameData::Item.try_get(parameter)
  126.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  127.       text = " when leveled up holding #{ana} #{item.real_name} during the day"
  128.     when :NightHoldItem
  129.       item = GameData::Item.try_get(parameter)
  130.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  131.       text = " when leveled up holding #{ana} #{item.real_name} at night"
  132.     when :HoldItemHappiness
  133.       item = GameData::Item.try_get(parameter)
  134.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  135.       text = " when leveled up holding #{ana} #{item.real_name} with high happiness"
  136.     when :HasMove
  137.       move = GameData::Move.try_get(parameter)
  138.       text = " when leveled up while knowing {{m|#{move.real_name}}}"
  139.     when :HasMoveType
  140.       type = GameData::Type.try_get(parameter)
  141.       ana = (type.real_name.starts_with_vowel?) ? "an" : "a"
  142.       text = " when leveled up while knowing #{ana} {{type|#{type.real_name}}}-type move"
  143.     when :TradeItem
  144.       item = GameData::Item.try_get(parameter)
  145.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  146.       text = " when traded while holding #{ana} #{item.real_name}"
  147.     when :Trade
  148.       text = " when traded"
  149.     when :TradeDay
  150.       text = " when traded during the day"
  151.     when :TradeNight
  152.       text = " when traded at night"
  153.     when :TradeSpecies
  154.       species = GameData::Species.try_get(parameter)
  155.       ana = (species.real_name.starts_with_vowel?) ? "an" : "a"
  156.       text = " when traded for #{ana} #{species.real_name}"
  157.       evos = species.get_evolutions
  158.       for i in 0...evos.length
  159.         entry = evos[i]
  160.         if entry[1] == :TradeSpecies
  161.           evo = entry[0]
  162.         end
  163.       end
  164.       if evo
  165.         evo = GameData::Species.try_get(evo)
  166.         text += ", a Pokémon that evolves into #{evo.real_name} simultaneously. Neither evolves if at least one holds an [[Everstone]] during the trade."
  167.       else
  168.         text += ". It will not evolve if either Pokémon holds an [[Everstone]] during the trade."
  169.       end
  170.   end
  171.   return text
  172. end
  173.  
  174.  
  175. #Script to translate an evolution method into code for the evobox template
  176. def pbBoxFromEvo(method,parameter)
  177.   case method
  178.     when :Level
  179.       text = "{{item|Rare Candy}}<br />{{color|000|Level #{parameter}}}"
  180.     when :LevelNoWeather
  181.       text = "starting at level #{parameter} when leveled up during clear weather in the overworld"
  182.     when :LevelSun
  183.       text = "starting at level #{parameter} when leveled up during intense sunlight in the overworld"
  184.     when :LevelRain
  185.       text = "starting at level #{parameter} when leveled up during rain or fog in the overworld"
  186.     when :LevelSnow
  187.       text = "starting at level #{parameter} when leveled up during hail in the overworld"
  188.     when :LevelSandstorm
  189.       text = "starting at level #{parameter} when leveled up during a sandstorm in the overworld"
  190.     when :LevelCycling
  191.       text = "starting at level #{parameter} when leveled up while the player is riding their [[Bicycle]]"
  192.     when :LevelSurfing
  193.       text = "starting at level #{parameter} when leveled up while the player is {{m|surf}}ing"
  194.     when :LevelDiving
  195.       text = "starting at level #{parameter} when leveled up while the player is [[Dive (move)|diving]]"
  196.     when :LevelDarkness
  197.       text = "starting at level #{parameter} when leveled up in a dark location (one that can be lit with {{m|Flash}})"
  198.     when :LevelDay
  199.       text = "starting at level #{parameter} when leveled up during the day"
  200.     when :LevelNight
  201.       text = "starting at level #{parameter} when leveled up at night"
  202.     when :LevelMorning
  203.       text = "starting at level #{parameter} when leveled up in the morning"
  204.     when :LevelAfternoon
  205.       text = "starting at level #{parameter} when leveled up in the afternoon"
  206.     when :LevelEvening
  207.       text = "starting at level #{parameter} when leveled up in the evening"
  208.     when :LevelDarkInParty
  209.       text = "starting at level #{parameter} while the player has a {{type|Dark}}-type Pokémon in their party."
  210.     when :AttackGreater
  211.       text = "starting at level #{parameter} when its Attack is higher than its Defense"
  212.     when :DefenseGreater
  213.       text = "starting at level #{parameter} when its Defense is higher than its Attack"
  214.     when :AtkDefEqual
  215.       text = "starting at level #{parameter} when its Attack and Defense are equal"
  216.     when :Cascoon
  217.       text = "starting at level #{parameter} depending on its personality value. As personality values cannot be influenced or seen by the player, what it will evolve into is essentially random."
  218.     when :Silcoon
  219.       text = "starting at level #{parameter} depending on its personality value. As personality values cannot be influenced or seen by the player, what it will evolve into is essentially random."
  220.     when :Item
  221.       item = GameData::Item.try_get(parameter)
  222.       text = "{{item|#{item.real_name}}}<br />{{color|000|Use #{item.real_name}}}"
  223.     when :Happiness
  224.       text = " when leveled up with high happiness"
  225.     when :HappinessDay
  226.       text = " when leveled up with high happiness during the day"
  227.     when :HappinessNight
  228.       text = " when leveled up with high happiness at night"
  229.     when :HappinessMove
  230.       move = GameData::Move.try_get(parameter)
  231.       text = " when leveled up with high happiness while knowing {{m|#{move.real_name}}}"
  232.     when :HappinessMoveType
  233.       type = GameData::Type.try_get(parameter)
  234.       ana = (type.real_name.starts_with_vowel?) ? "an" : "a"
  235.       text = " when leveled up with high happiness while knowing #{ana} {{type|#{type.real_name}}}-type move"
  236.     when :MaxHappiness
  237.       text = " when leveled up with maximum happiness"
  238.     when :HappinessHoldItem
  239.       item = GameData::Item.try_get(parameter)
  240.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  241.       text = " when leveled up with high happiness while holding #{ana} #{item.real_name}"
  242.     when :Beauty
  243.       text = " when leveled up with its Beauty above #{parameter}"
  244.     when :HoldItem
  245.       item = GameData::Item.try_get(parameter)
  246.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  247.       text = " when leveled up holding #{ana} #{item.real_name}"
  248.     when :DayHoldItem
  249.       item = GameData::Item.try_get(parameter)
  250.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  251.       text = " when leveled up holding #{ana} #{item.real_name} during the day"
  252.     when :NightHoldItem
  253.       item = GameData::Item.try_get(parameter)
  254.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  255.       text = " when leveled up holding #{ana} #{item.real_name} at night"
  256.     when :HoldItemHappiness
  257.       item = GameData::Item.try_get(parameter)
  258.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  259.       text = " when leveled up holding #{ana} #{item.real_name} with high happiness"
  260.     when :HasMove
  261.       move = GameData::Move.try_get(parameter)
  262.       text = " when leveled up while knowing {{m|#{move.real_name}}}"
  263.     when :HasMoveType
  264.       type = GameData::Type.try_get(parameter)
  265.       ana = (type.real_name.starts_with_vowel?) ? "an" : "a"
  266.       text = " when leveled up while knowing #{ana} {{type|#{type.real_name}}}-type move"
  267.     when :TradeItem
  268.       item = GameData::Item.try_get(parameter)
  269.       ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
  270.       text = " when traded while holding #{ana} #{item.real_name}"
  271.     when :Trade
  272.       text = " when traded"
  273.     when :TradeDay
  274.       text = " when traded during the day"
  275.     when :TradeNight
  276.       text = " when traded at night"
  277.     when :TradeSpecies
  278.       species = GameData::Species.try_get(parameter)
  279.       ana = (species.real_name.starts_with_vowel?) ? "an" : "a"
  280.       text = " when traded for #{ana} #{species.real_name}"
  281.       evos = species.get_evolutions
  282.       for i in 0...evos.length
  283.         entry = evos[i]
  284.         if entry[1] == :TradeSpecies
  285.           evo = entry[0]
  286.         end
  287.       end
  288.       if evo
  289.         evo = GameData::Species.try_get(evo)
  290.         text += ", a Pokémon that evolves into #{evo.real_name} simultaneously. Neither evolves if at least one holds an [[Everstone]] during the trade."
  291.       else
  292.         text += ". It will not evolve if either Pokémon holds an [[Everstone]] during the trade."
  293.       end
  294.   end
  295.   return text
  296. end
  297.  
  298.  
  299. #Gets text describing an encounter type from a symbol
  300. def pbTextFromEncType(enc)
  301.   enc = enc.to_s
  302.   text = ""
  303.   text += "Tall grass" if enc.include?("Land")
  304.   text += "Cave" if enc.include?("Cave")
  305.   text += "Surfing" if enc.include?("Water")
  306.   text += "Fishing with the" if enc.include?("Rod")
  307.   text += "[[Old Rod]]" if enc.include?("Rod")
  308.   text += "[[Good Rod Rod]]" if enc.include?("Rod")
  309.   text += "[[Super Rod]]" if enc.include?("Rod")
  310.   text += "Smashable rocks" if enc.include?("RockSmash")
  311.   text += "Headbutt trees" if enc.include?("Headbutt")
  312.   text += " in the morning" if enc.include?("Morning")
  313.   text += " during the day" if enc.include?("Day")
  314.   text += " in the afternoon" if enc.include?("Afternoon")
  315.   text += " in the evening" if enc.include?("Evening")
  316.   text += " at night" if enc.include?("Night")
  317.   return text
  318. end  
  319.  
  320. #Used to generate Pokemon species pages
  321. def pbWikiCode(species)
  322.   species_data = GameData::Species.try_get(species)
  323.   pool = []
  324.   GameData::Species.each { |species| pool.push(species.id_number) if species.form == 0 }
  325.   dexnum = species_data.id_number if species_data
  326.   nextnum = dexnum + 1
  327.   prevnum = dexnum - 1
  328.   if prevnum == 0
  329.     prevnum = pool.length
  330.   end
  331.   if nextnum > pool.length
  332.     nextnum = 1
  333.   end
  334.   name = species_data.real_name
  335.   entry = species_data.pokedex_entry
  336.   category = species_data.category
  337.   ability1 = species_data.abilities[0]
  338.   ability2 = species_data.abilities[1]
  339.   hiddenability = species_data.hidden_abilities[0]
  340.   ability1 = GameData::Ability.try_get(ability1).real_name
  341.   ability2 = GameData::Ability.try_get(ability2).real_name if species_data.abilities[1]
  342.   hiddenability = GameData::Ability.try_get(hiddenability).real_name if species_data.hidden_abilities[0]
  343.   nextspecies = GameData::Species.try_get(nextnum).real_name
  344.   prevspecies = GameData::Species.try_get(prevnum).real_name
  345.   dexnum  = sprintf("%03d",dexnum)
  346.   nextnum  = sprintf("%03d",nextnum)
  347.   prevnum  = sprintf("%03d",prevnum)
  348.   type1 = species_data.type1
  349.   type2 = species_data.type2
  350.   type1 = GameData::Type.get(type1).real_name
  351.   type2 = GameData::Type.get(type2).real_name
  352.   text = ""
  353.   #Generate the intro blurb
  354.   ana = (type1.starts_with_vowel?) ? "an" : "a"
  355.   if type1 == type2
  356.     introblurb = "'''#{name}''' is #{ana} {{type|#{type1}}}-type Pokémon.\n\n"
  357.   else
  358.     introblurb = "'''#{name}''' is a dual-type {{type|#{type1}}}/{{type|#{type2}}} Pokémon.\n\n"
  359.   end
  360.   prevo = species_data.get_previous_species
  361.   if prevo != species_data.id
  362.     prevo_data = GameData::Species.try_get(prevo)
  363.     introblurb += "It evolves from [[#{prevo_data.real_name}]]"
  364.     prevo_method = species_data.get_previous_method
  365.     introblurb += pbTextFromEvo(prevo_method[0],prevo_method[1])
  366.     if species_data.get_evolutions.length == 0
  367.       introblurb += "."
  368.       if prevo_data.get_previous_species != prevo_data.id
  369.         first_form = prevo_data.get_previous_species
  370.         first_data = GameData::Species.try_get(first_form)
  371.         introblurb += " It is the final form of [[#{first_data.real_name}]]."
  372.       end
  373.       introblurb += "\n"
  374.     else
  375.       evo = species_data.get_evolutions[0][0]
  376.       evo_data = GameData::Species.try_get(evo)
  377.       introblurb += ", and into [[#{evo_data.real_name}]]"
  378.       evo_method = species_data.get_evolutions[0]
  379.       introblurb += pbTextFromEvo(evo_method[1],evo_method[2])
  380.       introblurb += "."
  381.     end
  382.   end
  383.   if prevo == species_data.id && species_data.get_evolutions.length > 0
  384.     for i in 0...species_data.get_evolutions.length
  385.       evo = species_data.get_evolutions[i]
  386.       evo_species = evo[0]
  387.       evo_species = GameData::Species.try_get(evo_species)
  388.       introblurb += "It evolves into [[#{evo_species.real_name}]]"
  389.       introblurb += pbTextFromEvo(evo[1],evo[2])
  390.       if evo_species.get_evolutions.length > 0
  391.         next_evo = evo_species.get_evolutions[i]
  392.         next_species = next_evo[0]
  393.         next_species = GameData::Species.try_get(next_species)
  394.         introblurb += ", which evolves into [[#{next_species.real_name}]]"
  395.         introblurb += pbTextFromEvo(next_evo[1],next_evo[2])
  396.       end
  397.       introblurb += "."
  398.     end
  399.   end
  400.   if prevo == species_data.id && species_data.get_evolutions.length == 0
  401.     introblurb += "It is not known to evolve into or from any other Pokémon."
  402.   end
  403.   introblurb += "\n"
  404.   if species_data.getMegaForm > 0
  405.     mega_data = GameData::Species.get_species_form(species,species_data.getMegaForm)
  406.     mega_name = mega_data.real_form_name
  407.     mega_stone = GameData::Item.try_get(mega_data.mega_stone).real_name
  408.     introblurb += "It can [[Mega Evolve]] into '''#{mega_name}''' using the [[#{mega_stone}]]."
  409.     introblurb += "\n"
  410.   end
  411.   #Generate the previous/next header
  412.   prevnexthead = "{{PokemonPrevNextHead|type=#{type1}"
  413.   prevnexthead += "|type2=#{type2}" if type1 != type2
  414.   prevnexthead += "|prevnum=#{prevnum}|prev=#{prevspecies}|next=#{nextspecies}|nextnum=#{nextnum}}}"
  415.   #Generate the infobox
  416.   infobox =  "{{Pokemon Infobox\n"
  417.   infobox += "| ndex          = #{dexnum}\n"
  418.   infobox += "| species       = #{category}\n"
  419.   infobox += "| image         = #{name.upcase}.png\n"
  420.   infobox += "| type1         = #{type1}\n"
  421.   infobox += "| type2         = #{type2}\n" if type1 != type2
  422.   infobox += "| ability1      = #{ability1}\n"
  423.   infobox += "| ability2      = #{ability2}\n" if ability1 != ability2
  424.   infobox += "| hiddenability = #{hiddenability}\n" if ability1 != hiddenability
  425.   infobox += "| gendercode    = #{species_data.gender_ratio}\n"
  426.   infobox += "| catchrate     = #{species_data.catch_rate}\n"
  427.   infobox += "| egggroup1     = #{species_data.egg_groups[0]}\n"
  428.   infobox += "| egggroup2     = #{species_data.egg_groups[1]}\n" if species_data.egg_groups.length > 1
  429.   infobox += "| eggsteps      = #{species_data.hatch_steps}\n"
  430.   infobox += "| egggroupn     = #{species_data.egg_groups.length}\n"
  431.  
  432.   height = species_data.height
  433.   weight = species_data.weight
  434.   meters = _ISPRINTF("{1:.1f} m", height/10.0)
  435.   kilos  = _ISPRINTF("{1:.1f} kg", weight / 10.0)
  436.   inches = (height / 0.254).round
  437.   pounds = (weight / 0.45359).round
  438.   inches = _ISPRINTF("{1:d}'{2:02d}\"", inches / 12, inches % 12)
  439.   pounds = _ISPRINTF("{1:4.1f} lbs.", pounds / 10.0)
  440.   infobox += "| height-m      = #{meters}\n"
  441.   infobox += "| weight-kg     = #{kilos}\n"
  442.   infobox += "| height-ftin   = #{inches}\n"
  443.   infobox += "| weight-lbs    = #{pounds}\n"
  444.   infobox += "| expyield      = #{species_data.base_exp}\n"
  445.   infobox += "| growthrate    = #{species_data.growth_rate}\n"
  446.   evs = species_data.evs
  447.   infobox += "| evhp          = #{evs[:HP]}\n"
  448.   infobox += "| evat          = #{evs[:ATTACK]}\n"
  449.   infobox += "| evde          = #{evs[:DEFENSE]}\n"
  450.   infobox += "| evsa          = #{evs[:SPECIAL_ATTACK]}\n"
  451.   infobox += "| evsd          = #{evs[:SPECIAL_DEFENSE]}\n"
  452.   infobox += "| evsp          = #{evs[:SPEED]}\n"
  453.   shape = species_data.shape
  454.   shape = GameData::BodyShape.try_get(shape).id_number
  455.   shape  = sprintf("%02d",shape)
  456.   infobox += "| body          = #{shape}\n"
  457.   infobox += "| color         = #{species_data.color}\n"
  458.   infobox += "| friendship    = #{species_data.happiness}\n"
  459.   infobox += "}}\n"
  460.   #Generate the locations template
  461.   #Note that this only checks for wild encounters, not gifts, events, trades, etc.
  462.   locations = "==Game locations==\n{{Availability\n"
  463.   common = ""
  464.   uncommon = ""
  465.   rare = ""
  466.   GameData::Encounter.each_of_version($PokemonGlobal.encounter_version) do |enc_data|
  467.     next if !pbFindEncounter(enc_data.types, species)
  468.     chance = 0
  469.     enc_type = :None
  470.     enc_data.types.each do |type, slots|
  471.       enc_type = type
  472.       enc_type = enc_type.to_s
  473.       slots.each { |slot| chance += slot[0] if GameData::Species.get(slot[1]).species == species }
  474.     end
  475. #    map_metadata = GameData::MapMetadata.try_get(enc_data.map)
  476.     mapname = pbGetMapNameFromId(enc_data.map)
  477.     enc_type = pbTextFromEncType(enc_type)
  478.     if chance > 25
  479.       common += ", " if common != ""
  480.       common += "[[#{mapname}]]"
  481.       common += " #{enc_type}"
  482.     elsif chance > 15
  483.       uncommon += ", " if uncommon != ""
  484.       uncommon += "[[#{mapname}]]"
  485.     else
  486.       rare += ", " if rare != ""
  487.       rare += "[[#{mapname}]]"
  488.     end
  489.   end
  490.   locations += "| common= #{common}\n"
  491.   locations += "| uncommon= #{uncommon}\n"
  492.   locations += "| rare= #{rare}\n"
  493.   locations += "| one= \n}}\n"
  494.   #Generate the held items template
  495.   helditems = "==Held items==\n{{HeldItems\n"
  496.   items = [species_data.wild_item_common, species_data.wild_item_uncommon, species_data.wild_item_rare]
  497.   if items[0] == items[1] && items[0] == items[2] && items[0] != nil
  498.       item = items[0]
  499.       item = GameData::Item.try_get(item).real_name
  500.       helditems += "| always= [[#{item}]]\n"
  501.   else
  502.       item = GameData::Item.try_get(items[0]).real_name if items[0]
  503.       helditems += "| common= [[#{item}]]\n" if items[0]
  504.       item = GameData::Item.try_get(items[1]).real_name if items[1]
  505.       helditems += "| uncommon= [[#{item}]]\n" if items[1]
  506.       item = GameData::Item.try_get(items[2]).real_name if items[2]
  507.       helditems += "| rare= [[#{item}]]\n" if items[2]
  508.   end  
  509.   helditems += "}}\n"
  510.   #Generate the Base Stats template
  511.   stats = species_data.base_stats
  512.   basestats  = "==Base stats==\n{{Stats\n| type    = #{type1}\n"
  513.   basestats += "| type2   = #{type2}\n" if type1 != type2
  514.   basestats += "| HP      = #{stats[:HP]}\n"
  515.   basestats += "| Attack  = #{stats[:ATTACK]}\n"
  516.   basestats += "| Defense = #{stats[:DEFENSE]}\n"
  517.   basestats += "| SpAtk   = #{stats[:SPECIAL_ATTACK]}\n"
  518.   basestats += "| SpDef   = #{stats[:SPECIAL_DEFENSE]}\n"
  519.   basestats += "| Speed   = #{stats[:SPEED]}\n}}\n"
  520.   #Generate the Type Effectiveness template
  521.   typeeff  = "==Type effectiveness==\n{{TypeEffectiveness\n| type1    = #{type1}\n"
  522.   typeeff += "| type2    = #{type2}\n" if type1 != type2
  523.   GameData::Type.each { |type|
  524.       effect = Effectiveness.calculate(type.id,species_data.type1,species_data.type2)
  525.       effect = (effect.to_f/8).to_f * 100 if effect != 0
  526.       effect = effect.to_i
  527.       typeeff += "| #{type.real_name}   = #{effect}\n" if !type.pseudo_type
  528.   }
  529.   typeeff += "}}\n"
  530.   #Generates the movelist templates
  531.   moves  = "==Moves==\n"
  532.   #Level-up moves
  533.   moves += "===By leveling up===\n"
  534.   if type1 != type2
  535.     moves += "{{MoveLevelStart|#{name}|#{type1}|#{type2}}}\n"
  536.   else
  537.     moves += "{{MoveLevelStart|#{name}|#{type1}|#{type1}}}\n"
  538.   end
  539.   level_moves = species_data.moves
  540.   for i in 0...level_moves.length
  541.     array = level_moves[i]
  542.     level = array[0]
  543.     move = array[1]
  544.     move_data = GameData::Move.try_get(move)
  545.     moves += "{{MoveLevel+|#{level}|#{move_data.real_name}"
  546.     moves += "|'''" if [species_data.type1,species_data.type2].include?(move_data.type) && move_data.base_damage > 1
  547.     moves += "}}\n"
  548.   end
  549.   if type1 != type2
  550.     moves += "{{MoveLevelEnd|#{name}|#{type1}|#{type2}}}\n"
  551.   else
  552.     moves += "{{MoveLevelEnd|#{name}|#{type1}|#{type1}}}\n"
  553.   end
  554.   #TMs/HMs
  555.   moves += "===By TM/HM===\n"
  556.   if type1 != type2
  557.     moves += "{{MoveTMStart|#{name}|#{type1}|#{type2}}}\n"
  558.   else
  559.     moves += "{{MoveTMStart|#{name}|#{type1}|#{type1}}}\n"
  560.   end
  561.   tm_moves = species_data.tutor_moves
  562.   GameData::Item.each do |i|
  563.     if i.is_machine? && tm_moves.include?(i.move)
  564.       tmname = i.real_name
  565.       move_data = GameData::Move.try_get(i.move)
  566.       moves += "{{MoveTM+|#{tmname}"
  567.       moves += "|'''" if [species_data.type1,species_data.type2].include?(move_data.type) && move_data.base_damage > 1
  568.       moves += "}}\n"
  569.     end
  570.   end
  571.   if type1 != type2
  572.     moves += "{{MoveTMEnd|#{name}|#{type1}|#{type2}}}\n"
  573.   else
  574.     moves += "{{MoveTMEnd|#{name}|#{type1}|#{type1}}}\n"
  575.   end
  576.   #Tutors
  577.   moves += "===By tutoring===\n"
  578.   if type1 != type2
  579.     moves += "{{MoveTutorStart|#{name}|#{type1}|#{type2}}}\n"
  580.   else
  581.     moves += "{{MoveTutorStart|#{name}|#{type1}|#{type1}}}\n"
  582.   end
  583.   tutor_moves = species_data.tutor_moves
  584.   for i in 0...tutor_moves.length
  585.     move = tutor_moves[i]
  586.     move_data = GameData::Move.try_get(move)
  587.     if !move_data.is_machine_move?
  588.       moves += "{{MoveTutor+|#{move_data.name}"
  589.       moves += "|'''" if [species_data.type1,species_data.type2].include?(move_data.type) && move_data.base_damage > 1
  590.       moves += "}}\n"
  591.     end
  592.   end
  593.   if type1 != type2
  594.     moves += "{{MoveTutorEnd|#{name}|#{type1}|#{type2}}}\n"
  595.   else
  596.     moves += "{{MoveTutorEnd|#{name}|#{type1}|#{type1}}}\n"
  597.   end
  598.   #Breeding
  599.   moves += "===By breeding===\n"
  600.   if type1 != type2
  601.     moves += "{{MoveBreedStart|#{name}|#{type1}|#{type2}}}\n"
  602.   else
  603.     moves += "{{MoveBreedStart|#{name}|#{type1}|#{type1}}}\n"
  604.   end
  605.   if species_data.egg_moves.length > 0
  606.     egg_moves = species_data.egg_moves
  607.   else
  608.     babyspecies = species_data.get_baby_species
  609.     egg_moves = GameData::Species.get(babyspecies).egg_moves
  610.   end
  611.   for i in 0...egg_moves.length
  612.     move = egg_moves[i]
  613.     move_data = GameData::Move.try_get(move)
  614.     moves += "{{MoveBreed+|"
  615.     egg_groups1 = species_data.egg_groups
  616.     nonchain = ""
  617.     chain = ""
  618.     for j in 0...pool.length
  619.       test_data = GameData::Species.try_get(pool[j])
  620.       egg_groups2 = test_data.egg_groups
  621.       test_movelist = test_data.moves
  622.       test_num = sprintf("%03d",test_data.id_number)
  623.       test_moves = []
  624.       test_movelist.each { |m| test_moves.push(m[1]) }
  625.       if !egg_groups1.include?(:Undiscovered) && !egg_groups2.include?(:Undiscovered) &&
  626.          !test_data.gender_ratio != :Genderless &&
  627.          ((egg_groups1 & egg_groups2).length > 0 || egg_groups2.include?(:Ditto) || egg_groups1.include?(:Ditto))
  628.          if test_moves.include?(move)
  629.            nonchain +="{{MS|#{test_num}|#{test_data.real_name}}}"
  630.          elsif test_data.get_baby_species != species_data.get_baby_species
  631.              test_baby = GameData::Species.get(test_data.get_baby_species)
  632.            if test_data.egg_moves.include?(move) || test_baby.egg_moves.include?(move)
  633.             chain +="{{MS|#{test_num}|#{test_data.real_name}}}"
  634.            end
  635.          end
  636.        end
  637.      end
  638.     if nonchain != ""
  639.      moves += "#{nonchain}"
  640.     else
  641.      moves += "#{chain}"
  642.     end
  643.     moves +="|#{move_data.name}"
  644.     moves += "|'''" if [species_data.type1,species_data.type2].include?(move_data.type) && move_data.base_damage > 1
  645.     moves +="|*" if nonchain == ""
  646.     moves += "}}\n"
  647.   end
  648.   if type1 != type2
  649.     moves += "{{MoveBreedEnd|#{name}|#{type1}|#{type2}}}\n"
  650.   else
  651.     moves += "{{MoveBreedEnd|#{name}|#{type1}|#{type1}}}\n"
  652.   end
  653.   #Generates evobox template
  654.   evobox  = "==Evolution==\n"
  655.   size = 1
  656.   #Base Stage
  657.   first_stage =  species_data.get_baby_species
  658.   first_stage_data = GameData::Species.get(first_stage)
  659.   test_stage = first_stage_data
  660.   loop do
  661.     if test_stage.get_evolutions.length > 0
  662.       size += 1
  663.       test_stage = test_stage.get_evolutions[0][0]
  664.       test_stage = GameData::Species.get(test_stage)
  665.     else
  666.       break
  667.     end
  668.   end
  669.   evobox += "{{Evobox-#{size}\n"
  670.   evobox += "| type1   = #{type1}\n"
  671.   evobox += "| type2   = #{type2}\n" if type1 != type2
  672.   evobox += "| name1   = #{first_stage_data.real_name}\n"
  673.   evobox += "| image1  = #{first_stage}.png\n"
  674.   first_stage_type1 = GameData::Type.get(first_stage_data.type1).real_name
  675.   first_stage_type2 = GameData::Type.get(first_stage_data.type2).real_name
  676.   evobox += "| type1-1 = #{first_stage_type1}\n"
  677.   evobox += "| type2-1 = #{first_stage_type2}\n" if first_stage_type1 != first_stage_type2
  678.   #First evolution
  679.   if first_stage_data.get_evolutions.length > 0
  680.     second_stage = first_stage_data.get_evolutions[0][0]
  681.     second_stage_data = GameData::Species.get(second_stage)
  682.     first_method = pbBoxFromEvo(first_stage_data.get_evolutions[0][1],first_stage_data.get_evolutions[0][2])
  683.     evobox += "| evo1    = #{first_method}\n"
  684.     evobox += "| name2   = #{second_stage_data.real_name}\n"
  685.     evobox += "| image2  = #{second_stage}.png\n"
  686.     second_stage_type1 = GameData::Type.get(second_stage_data.type1).real_name
  687.     second_stage_type2 = GameData::Type.get(second_stage_data.type2).real_name
  688.     evobox += "| type1-2 = #{second_stage_type1}\n"
  689.     evobox += "| type2-2 = #{second_stage_type2}\n" if second_stage_type1 != second_stage_type2
  690.     #Second evolution
  691.     if second_stage_data.get_evolutions.length > 0
  692.       third_stage = second_stage_data.get_evolutions[0][0]
  693.       third_stage_data = GameData::Species.get(third_stage)
  694.       second_method = pbBoxFromEvo(second_stage_data.get_evolutions[0][1],second_stage_data.get_evolutions[0][2])
  695.       evobox += "| evo2    = #{second_method}\n"
  696.       evobox += "| name3   = #{third_stage_data.real_name}\n"
  697.       evobox += "| image3  = #{third_stage}.png\n"
  698.       third_stage_type1 = GameData::Type.get(third_stage_data.type1).real_name
  699.       third_stage_type2 = GameData::Type.get(third_stage_data.type2).real_name
  700.       evobox += "| type1-3 = #{third_stage_type1}\n"
  701.       evobox += "| type2-3 = #{third_stage_type2}\n" if third_stage_type1 != third_stage_type2
  702.     end
  703.   end
  704.   evobox += "}}\n"
  705.   #Generate Sprites template
  706.   sprites  = "{{Sprites|#{dexnum}|type=#{type1}"
  707.   sprites += "|type2=#{type2}" if type1 != type2
  708.   sprites += "}}\n"
  709.  
  710.   text += prevnexthead
  711.   text += "\n"
  712.   text += infobox
  713.   text += introblurb
  714.   text += "==Pokédex entry==\n{{Dex|#{entry}}}\n==Biology==\n"
  715.   text += locations
  716.   text += helditems
  717.   text += basestats
  718.   text += typeeff
  719.   text += moves
  720.   text += evobox
  721.   text += "==Sprites==\n"
  722.   text += sprites
  723.   text += "==Trivia==\n===Design Origin===\n===Name Origin===\n==Gallery==\n"
  724.   text += prevnexthead
  725.   Input.clipboard = text
  726. end
  727.  
  728.  
  729.  
  730.  
  731. #Used to generate MoveLevel+
  732. def pbLevelMoves
  733.   text = "{{\#switch:{{{2|}}}\n"
  734.   GameData::Move.each do |i|
  735.       text += "|#{i.real_name}={{MoveLevel|{{{1|1}}}|#{i.real_name}"
  736.       type = i.type
  737.       type = GameData::Type.get(type).real_name
  738.       text += "|#{type}"
  739.       category = i.category
  740.       case category
  741.         when 0
  742.           category = "Physical"
  743.         when 1
  744.           category = "Special"
  745.         when 2
  746.           category = "Status"
  747.       end
  748.       text += "|#{category}"
  749.       dmg = i.base_damage
  750.       dmg = "—" if dmg == 0 || dmg == 1
  751.       text += "|#{dmg}"
  752.       accuracy = i.accuracy
  753.       accuracy = "—" if accuracy == 0 || accuracy == 1
  754.       text += "|#{accuracy}"
  755.       text += "|#{i.total_pp}"
  756.       text += "|{{\#switch: {{{3}}}|bold|stab='''|italic=''|{{{3|}}}}}}}\n"
  757.   end
  758.   text += "}}<noinclude>[[Category:Learnlist templates]]{{documentation}}</noinclude>"
  759.   Input.clipboard = text
  760. end
  761.  
  762.  
  763. #Used to generate MoveTM+
  764. def pbTMMoves
  765.   text = "{{\#switch:{{{1|}}}\n"
  766.   GameData::Item.each do |i|
  767.     if i.is_machine?
  768.       tmname = i.real_name
  769.       move_data = GameData::Move.try_get(i.move)
  770.       text += "|#{tmname}={{MoveTM|#{tmname}"
  771.       text += "|#{move_data.real_name}"
  772.       type = move_data.type
  773.       type = GameData::Type.get(type).real_name
  774.       text += "|#{type}"
  775.       category = move_data.category
  776.       case category
  777.         when 0
  778.           category = "Physical"
  779.         when 1
  780.           category = "Special"
  781.         when 2
  782.           category = "Status"
  783.       end
  784.       text += "|#{category}"
  785.       dmg = move_data.base_damage
  786.       dmg = "—" if dmg == 0 || dmg == 1
  787.       text += "|#{dmg}"
  788.       accuracy = move_data.accuracy
  789.       accuracy = "—" if accuracy == 0 || accuracy == 1
  790.       text += "|#{accuracy}"
  791.       text += "|#{move_data.total_pp}"
  792.       text += "|{{{2|}}}}}\n"
  793.     end
  794.   end
  795.   text += "}}<noinclude>[[Category:Learnlist templates]]{{documentation}}</noinclude>"
  796.   Input.clipboard = text
  797. end
  798.  
  799.  
  800.  
  801. #Used to generate MoveBreed+
  802. def pbBreedMoves
  803.   text = "{{\#switch:{{{2|}}}\n"
  804.   GameData::Move.each do |i|
  805.       text += "|#{i.real_name}={{MoveBreed|{{{1|1}}}|#{i.real_name}"
  806.       type = i.type
  807.       type = GameData::Type.get(type).real_name
  808.       text += "|#{type}"
  809.       category = i.category
  810.       case category
  811.         when 0
  812.           category = "Physical"
  813.         when 1
  814.           category = "Special"
  815.         when 2
  816.           category = "Status"
  817.       end
  818.       text += "|#{category}"
  819.       dmg = i.base_damage
  820.       dmg = "—" if dmg == 0 || dmg == 1
  821.       text += "|#{dmg}"
  822.       accuracy = i.accuracy
  823.       accuracy = "—" if accuracy == 0 || accuracy == 1
  824.       text += "|#{accuracy}"
  825.       text += "|#{i.total_pp}"
  826.       text += "|{{{3|}}}|{{{4|}}}}}\n"
  827.   end
  828.   text += "}}<noinclude>[[Category:Learnlist templates]]{{documentation}}</noinclude>"
  829.   Input.clipboard = text
  830. end
  831.  
  832. #Used to generate MoveTutor+
  833. def pbTutorMoves
  834.   text = "{{\#switch:{{{1|}}}\n"
  835.   GameData::Move.each do |i|
  836.       text += "|#{i.real_name}={{MoveTutor|#{i.real_name}"
  837.       type = i.type
  838.       type = GameData::Type.get(type).real_name
  839.       text += "|#{type}"
  840.       category = i.category
  841.       case category
  842.         when 0
  843.           category = "Physical"
  844.         when 1
  845.           category = "Special"
  846.         when 2
  847.           category = "Status"
  848.       end
  849.       text += "|#{category}"
  850.       dmg = i.base_damage
  851.       dmg = "—" if dmg == 0 || dmg == 1
  852.       text += "|#{dmg}"
  853.       accuracy = i.accuracy
  854.       accuracy = "—" if accuracy == 0 || accuracy == 1
  855.       text += "|#{accuracy}"
  856.       text += "|#{i.total_pp}"
  857.       text += "|{{{2|}}}|{{{3|}}}}}\n"
  858.   end
  859.   text += "}}<noinclude>[[Category:Learnlist templates]]{{documentation}}</noinclude>"
  860.   Input.clipboard = text
  861. end
Add Comment
Please, Sign In to add comment