Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #New utility for moves that checks if they can be taught via TM or HM
- module GameData
- class Move
- def is_machine_move?
- GameData::Item.each do |i|
- return true if i.move == @id
- end
- return false
- end
- end
- end
- module GameData
- class Species
- #New utility for Pokemon to get the evolution method of the prevo
- def get_previous_method
- @evolutions.each { |evo| return [ evo[1],evo[2] ] if evo[3] } # Is the prevolution
- end
- #Taken from the Pokemon Class
- def getMegaForm
- ret = 0
- GameData::Species.each do |data|
- next if data.species != self.species
- if data.mega_stone
- ret = data.form
- break
- elsif data.mega_move
- ret = data.form
- break
- end
- end
- return ret # form number, or 0 if no accessible Mega form
- end
- end
- end
- #Utility taken from PokeDex
- def pbFindEncounter(enc_types, species)
- return false if !enc_types
- enc_types.each_value do |slots|
- next if !slots
- slots.each { |slot| return true if GameData::Species.get(slot[1]).species == species }
- end
- return false
- end
- #Script to translate an evolution method into text
- def pbTextFromEvo(method,parameter)
- case method
- when :Level
- text = " starting at level #{parameter}"
- when :LevelNoWeather
- text = "starting at level #{parameter} when leveled up during clear weather in the overworld"
- when :LevelSun
- text = "starting at level #{parameter} when leveled up during intense sunlight in the overworld"
- when :LevelRain
- text = "starting at level #{parameter} when leveled up during rain or fog in the overworld"
- when :LevelSnow
- text = "starting at level #{parameter} when leveled up during hail in the overworld"
- when :LevelSandstorm
- text = "starting at level #{parameter} when leveled up during a sandstorm in the overworld"
- when :LevelCycling
- text = "starting at level #{parameter} when leveled up while the player is riding their [[Bicycle]]"
- when :LevelSurfing
- text = "starting at level #{parameter} when leveled up while the player is {{m|surf}}ing"
- when :LevelDiving
- text = "starting at level #{parameter} when leveled up while the player is [[Dive (move)|diving]]"
- when :LevelDarkness
- text = "starting at level #{parameter} when leveled up in a dark location (one that can be lit with {{m|Flash}})"
- when :LevelDay
- text = "starting at level #{parameter} when leveled up during the day"
- when :LevelNight
- text = "starting at level #{parameter} when leveled up at night"
- when :LevelMorning
- text = "starting at level #{parameter} when leveled up in the morning"
- when :LevelAfternoon
- text = "starting at level #{parameter} when leveled up in the afternoon"
- when :LevelEvening
- text = "starting at level #{parameter} when leveled up in the evening"
- when :LevelDarkInParty
- text = "starting at level #{parameter} while the player has a {{type|Dark}}-type Pokémon in their party."
- when :AttackGreater
- text = "starting at level #{parameter} when its Attack is higher than its Defense"
- when :DefenseGreater
- text = "starting at level #{parameter} when its Defense is higher than its Attack"
- when :AtkDefEqual
- text = "starting at level #{parameter} when its Attack and Defense are equal"
- when :Cascoon
- 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."
- when :Silcoon
- 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."
- when :Item
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when exposed to #{ana} [[#{item.real_name}]]"
- when :Happiness
- text = " when leveled up with high happiness"
- when :HappinessDay
- text = " when leveled up with high happiness during the day"
- when :HappinessNight
- text = " when leveled up with high happiness at night"
- when :HappinessMove
- move = GameData::Move.try_get(parameter)
- text = " when leveled up with high happiness while knowing {{m|#{move.real_name}}}"
- when :HappinessMoveType
- type = GameData::Type.try_get(parameter)
- ana = (type.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up with high happiness while knowing #{ana} {{type|#{type.real_name}}}-type move"
- when :MaxHappiness
- text = " when leveled up with maximum happiness"
- when :HappinessHoldItem
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up with high happiness while holding #{ana} #{item.real_name}"
- when :Beauty
- text = " when leveled up with its Beauty above #{parameter}"
- when :HoldItem
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up holding #{ana} #{item.real_name}"
- when :DayHoldItem
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up holding #{ana} #{item.real_name} during the day"
- when :NightHoldItem
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up holding #{ana} #{item.real_name} at night"
- when :HoldItemHappiness
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up holding #{ana} #{item.real_name} with high happiness"
- when :HasMove
- move = GameData::Move.try_get(parameter)
- text = " when leveled up while knowing {{m|#{move.real_name}}}"
- when :HasMoveType
- type = GameData::Type.try_get(parameter)
- ana = (type.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up while knowing #{ana} {{type|#{type.real_name}}}-type move"
- when :TradeItem
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when traded while holding #{ana} #{item.real_name}"
- when :Trade
- text = " when traded"
- when :TradeDay
- text = " when traded during the day"
- when :TradeNight
- text = " when traded at night"
- when :TradeSpecies
- species = GameData::Species.try_get(parameter)
- ana = (species.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when traded for #{ana} #{species.real_name}"
- evos = species.get_evolutions
- for i in 0...evos.length
- entry = evos[i]
- if entry[1] == :TradeSpecies
- evo = entry[0]
- end
- end
- if evo
- evo = GameData::Species.try_get(evo)
- text += ", a Pokémon that evolves into #{evo.real_name} simultaneously. Neither evolves if at least one holds an [[Everstone]] during the trade."
- else
- text += ". It will not evolve if either Pokémon holds an [[Everstone]] during the trade."
- end
- end
- return text
- end
- #Script to translate an evolution method into code for the evobox template
- def pbBoxFromEvo(method,parameter)
- case method
- when :Level
- text = "{{item|Rare Candy}}<br />{{color|000|Level #{parameter}}}"
- when :LevelNoWeather
- text = "starting at level #{parameter} when leveled up during clear weather in the overworld"
- when :LevelSun
- text = "starting at level #{parameter} when leveled up during intense sunlight in the overworld"
- when :LevelRain
- text = "starting at level #{parameter} when leveled up during rain or fog in the overworld"
- when :LevelSnow
- text = "starting at level #{parameter} when leveled up during hail in the overworld"
- when :LevelSandstorm
- text = "starting at level #{parameter} when leveled up during a sandstorm in the overworld"
- when :LevelCycling
- text = "starting at level #{parameter} when leveled up while the player is riding their [[Bicycle]]"
- when :LevelSurfing
- text = "starting at level #{parameter} when leveled up while the player is {{m|surf}}ing"
- when :LevelDiving
- text = "starting at level #{parameter} when leveled up while the player is [[Dive (move)|diving]]"
- when :LevelDarkness
- text = "starting at level #{parameter} when leveled up in a dark location (one that can be lit with {{m|Flash}})"
- when :LevelDay
- text = "starting at level #{parameter} when leveled up during the day"
- when :LevelNight
- text = "starting at level #{parameter} when leveled up at night"
- when :LevelMorning
- text = "starting at level #{parameter} when leveled up in the morning"
- when :LevelAfternoon
- text = "starting at level #{parameter} when leveled up in the afternoon"
- when :LevelEvening
- text = "starting at level #{parameter} when leveled up in the evening"
- when :LevelDarkInParty
- text = "starting at level #{parameter} while the player has a {{type|Dark}}-type Pokémon in their party."
- when :AttackGreater
- text = "starting at level #{parameter} when its Attack is higher than its Defense"
- when :DefenseGreater
- text = "starting at level #{parameter} when its Defense is higher than its Attack"
- when :AtkDefEqual
- text = "starting at level #{parameter} when its Attack and Defense are equal"
- when :Cascoon
- 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."
- when :Silcoon
- 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."
- when :Item
- item = GameData::Item.try_get(parameter)
- text = "{{item|#{item.real_name}}}<br />{{color|000|Use #{item.real_name}}}"
- when :Happiness
- text = " when leveled up with high happiness"
- when :HappinessDay
- text = " when leveled up with high happiness during the day"
- when :HappinessNight
- text = " when leveled up with high happiness at night"
- when :HappinessMove
- move = GameData::Move.try_get(parameter)
- text = " when leveled up with high happiness while knowing {{m|#{move.real_name}}}"
- when :HappinessMoveType
- type = GameData::Type.try_get(parameter)
- ana = (type.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up with high happiness while knowing #{ana} {{type|#{type.real_name}}}-type move"
- when :MaxHappiness
- text = " when leveled up with maximum happiness"
- when :HappinessHoldItem
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up with high happiness while holding #{ana} #{item.real_name}"
- when :Beauty
- text = " when leveled up with its Beauty above #{parameter}"
- when :HoldItem
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up holding #{ana} #{item.real_name}"
- when :DayHoldItem
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up holding #{ana} #{item.real_name} during the day"
- when :NightHoldItem
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up holding #{ana} #{item.real_name} at night"
- when :HoldItemHappiness
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up holding #{ana} #{item.real_name} with high happiness"
- when :HasMove
- move = GameData::Move.try_get(parameter)
- text = " when leveled up while knowing {{m|#{move.real_name}}}"
- when :HasMoveType
- type = GameData::Type.try_get(parameter)
- ana = (type.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when leveled up while knowing #{ana} {{type|#{type.real_name}}}-type move"
- when :TradeItem
- item = GameData::Item.try_get(parameter)
- ana = (item.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when traded while holding #{ana} #{item.real_name}"
- when :Trade
- text = " when traded"
- when :TradeDay
- text = " when traded during the day"
- when :TradeNight
- text = " when traded at night"
- when :TradeSpecies
- species = GameData::Species.try_get(parameter)
- ana = (species.real_name.starts_with_vowel?) ? "an" : "a"
- text = " when traded for #{ana} #{species.real_name}"
- evos = species.get_evolutions
- for i in 0...evos.length
- entry = evos[i]
- if entry[1] == :TradeSpecies
- evo = entry[0]
- end
- end
- if evo
- evo = GameData::Species.try_get(evo)
- text += ", a Pokémon that evolves into #{evo.real_name} simultaneously. Neither evolves if at least one holds an [[Everstone]] during the trade."
- else
- text += ". It will not evolve if either Pokémon holds an [[Everstone]] during the trade."
- end
- end
- return text
- end
- #Gets text describing an encounter type from a symbol
- def pbTextFromEncType(enc)
- enc = enc.to_s
- text = ""
- text += "Tall grass" if enc.include?("Land")
- text += "Cave" if enc.include?("Cave")
- text += "Surfing" if enc.include?("Water")
- text += "Fishing with the" if enc.include?("Rod")
- text += "[[Old Rod]]" if enc.include?("Rod")
- text += "[[Good Rod Rod]]" if enc.include?("Rod")
- text += "[[Super Rod]]" if enc.include?("Rod")
- text += "Smashable rocks" if enc.include?("RockSmash")
- text += "Headbutt trees" if enc.include?("Headbutt")
- text += " in the morning" if enc.include?("Morning")
- text += " during the day" if enc.include?("Day")
- text += " in the afternoon" if enc.include?("Afternoon")
- text += " in the evening" if enc.include?("Evening")
- text += " at night" if enc.include?("Night")
- return text
- end
- #Used to generate Pokemon species pages
- def pbWikiCode(species)
- species_data = GameData::Species.try_get(species)
- pool = []
- GameData::Species.each { |species| pool.push(species.id_number) if species.form == 0 }
- dexnum = species_data.id_number if species_data
- nextnum = dexnum + 1
- prevnum = dexnum - 1
- if prevnum == 0
- prevnum = pool.length
- end
- if nextnum > pool.length
- nextnum = 1
- end
- name = species_data.real_name
- entry = species_data.pokedex_entry
- category = species_data.category
- ability1 = species_data.abilities[0]
- ability2 = species_data.abilities[1]
- hiddenability = species_data.hidden_abilities[0]
- ability1 = GameData::Ability.try_get(ability1).real_name
- ability2 = GameData::Ability.try_get(ability2).real_name if species_data.abilities[1]
- hiddenability = GameData::Ability.try_get(hiddenability).real_name if species_data.hidden_abilities[0]
- nextspecies = GameData::Species.try_get(nextnum).real_name
- prevspecies = GameData::Species.try_get(prevnum).real_name
- dexnum = sprintf("%03d",dexnum)
- nextnum = sprintf("%03d",nextnum)
- prevnum = sprintf("%03d",prevnum)
- type1 = species_data.type1
- type2 = species_data.type2
- type1 = GameData::Type.get(type1).real_name
- type2 = GameData::Type.get(type2).real_name
- text = ""
- #Generate the intro blurb
- ana = (type1.starts_with_vowel?) ? "an" : "a"
- if type1 == type2
- introblurb = "'''#{name}''' is #{ana} {{type|#{type1}}}-type Pokémon.\n\n"
- else
- introblurb = "'''#{name}''' is a dual-type {{type|#{type1}}}/{{type|#{type2}}} Pokémon.\n\n"
- end
- prevo = species_data.get_previous_species
- if prevo != species_data.id
- prevo_data = GameData::Species.try_get(prevo)
- introblurb += "It evolves from [[#{prevo_data.real_name}]]"
- prevo_method = species_data.get_previous_method
- introblurb += pbTextFromEvo(prevo_method[0],prevo_method[1])
- if species_data.get_evolutions.length == 0
- introblurb += "."
- if prevo_data.get_previous_species != prevo_data.id
- first_form = prevo_data.get_previous_species
- first_data = GameData::Species.try_get(first_form)
- introblurb += " It is the final form of [[#{first_data.real_name}]]."
- end
- introblurb += "\n"
- else
- evo = species_data.get_evolutions[0][0]
- evo_data = GameData::Species.try_get(evo)
- introblurb += ", and into [[#{evo_data.real_name}]]"
- evo_method = species_data.get_evolutions[0]
- introblurb += pbTextFromEvo(evo_method[1],evo_method[2])
- introblurb += "."
- end
- end
- if prevo == species_data.id && species_data.get_evolutions.length > 0
- for i in 0...species_data.get_evolutions.length
- evo = species_data.get_evolutions[i]
- evo_species = evo[0]
- evo_species = GameData::Species.try_get(evo_species)
- introblurb += "It evolves into [[#{evo_species.real_name}]]"
- introblurb += pbTextFromEvo(evo[1],evo[2])
- if evo_species.get_evolutions.length > 0
- next_evo = evo_species.get_evolutions[i]
- next_species = next_evo[0]
- next_species = GameData::Species.try_get(next_species)
- introblurb += ", which evolves into [[#{next_species.real_name}]]"
- introblurb += pbTextFromEvo(next_evo[1],next_evo[2])
- end
- introblurb += "."
- end
- end
- if prevo == species_data.id && species_data.get_evolutions.length == 0
- introblurb += "It is not known to evolve into or from any other Pokémon."
- end
- introblurb += "\n"
- if species_data.getMegaForm > 0
- mega_data = GameData::Species.get_species_form(species,species_data.getMegaForm)
- mega_name = mega_data.real_form_name
- mega_stone = GameData::Item.try_get(mega_data.mega_stone).real_name
- introblurb += "It can [[Mega Evolve]] into '''#{mega_name}''' using the [[#{mega_stone}]]."
- introblurb += "\n"
- end
- #Generate the previous/next header
- prevnexthead = "{{PokemonPrevNextHead|type=#{type1}"
- prevnexthead += "|type2=#{type2}" if type1 != type2
- prevnexthead += "|prevnum=#{prevnum}|prev=#{prevspecies}|next=#{nextspecies}|nextnum=#{nextnum}}}"
- #Generate the infobox
- infobox = "{{Pokemon Infobox\n"
- infobox += "| ndex = #{dexnum}\n"
- infobox += "| species = #{category}\n"
- infobox += "| image = #{name.upcase}.png\n"
- infobox += "| type1 = #{type1}\n"
- infobox += "| type2 = #{type2}\n" if type1 != type2
- infobox += "| ability1 = #{ability1}\n"
- infobox += "| ability2 = #{ability2}\n" if ability1 != ability2
- infobox += "| hiddenability = #{hiddenability}\n" if ability1 != hiddenability
- infobox += "| gendercode = #{species_data.gender_ratio}\n"
- infobox += "| catchrate = #{species_data.catch_rate}\n"
- infobox += "| egggroup1 = #{species_data.egg_groups[0]}\n"
- infobox += "| egggroup2 = #{species_data.egg_groups[1]}\n" if species_data.egg_groups.length > 1
- infobox += "| eggsteps = #{species_data.hatch_steps}\n"
- infobox += "| egggroupn = #{species_data.egg_groups.length}\n"
- height = species_data.height
- weight = species_data.weight
- meters = _ISPRINTF("{1:.1f} m", height/10.0)
- kilos = _ISPRINTF("{1:.1f} kg", weight / 10.0)
- inches = (height / 0.254).round
- pounds = (weight / 0.45359).round
- inches = _ISPRINTF("{1:d}'{2:02d}\"", inches / 12, inches % 12)
- pounds = _ISPRINTF("{1:4.1f} lbs.", pounds / 10.0)
- infobox += "| height-m = #{meters}\n"
- infobox += "| weight-kg = #{kilos}\n"
- infobox += "| height-ftin = #{inches}\n"
- infobox += "| weight-lbs = #{pounds}\n"
- infobox += "| expyield = #{species_data.base_exp}\n"
- infobox += "| growthrate = #{species_data.growth_rate}\n"
- evs = species_data.evs
- infobox += "| evhp = #{evs[:HP]}\n"
- infobox += "| evat = #{evs[:ATTACK]}\n"
- infobox += "| evde = #{evs[:DEFENSE]}\n"
- infobox += "| evsa = #{evs[:SPECIAL_ATTACK]}\n"
- infobox += "| evsd = #{evs[:SPECIAL_DEFENSE]}\n"
- infobox += "| evsp = #{evs[:SPEED]}\n"
- shape = species_data.shape
- shape = GameData::BodyShape.try_get(shape).id_number
- shape = sprintf("%02d",shape)
- infobox += "| body = #{shape}\n"
- infobox += "| color = #{species_data.color}\n"
- infobox += "| friendship = #{species_data.happiness}\n"
- infobox += "}}\n"
- #Generate the locations template
- #Note that this only checks for wild encounters, not gifts, events, trades, etc.
- locations = "==Game locations==\n{{Availability\n"
- common = ""
- uncommon = ""
- rare = ""
- GameData::Encounter.each_of_version($PokemonGlobal.encounter_version) do |enc_data|
- next if !pbFindEncounter(enc_data.types, species)
- chance = 0
- enc_type = :None
- enc_data.types.each do |type, slots|
- enc_type = type
- enc_type = enc_type.to_s
- slots.each { |slot| chance += slot[0] if GameData::Species.get(slot[1]).species == species }
- end
- # map_metadata = GameData::MapMetadata.try_get(enc_data.map)
- mapname = pbGetMapNameFromId(enc_data.map)
- enc_type = pbTextFromEncType(enc_type)
- if chance > 25
- common += ", " if common != ""
- common += "[[#{mapname}]]"
- common += " #{enc_type}"
- elsif chance > 15
- uncommon += ", " if uncommon != ""
- uncommon += "[[#{mapname}]]"
- else
- rare += ", " if rare != ""
- rare += "[[#{mapname}]]"
- end
- end
- locations += "| common= #{common}\n"
- locations += "| uncommon= #{uncommon}\n"
- locations += "| rare= #{rare}\n"
- locations += "| one= \n}}\n"
- #Generate the held items template
- helditems = "==Held items==\n{{HeldItems\n"
- items = [species_data.wild_item_common, species_data.wild_item_uncommon, species_data.wild_item_rare]
- if items[0] == items[1] && items[0] == items[2] && items[0] != nil
- item = items[0]
- item = GameData::Item.try_get(item).real_name
- helditems += "| always= [[#{item}]]\n"
- else
- item = GameData::Item.try_get(items[0]).real_name if items[0]
- helditems += "| common= [[#{item}]]\n" if items[0]
- item = GameData::Item.try_get(items[1]).real_name if items[1]
- helditems += "| uncommon= [[#{item}]]\n" if items[1]
- item = GameData::Item.try_get(items[2]).real_name if items[2]
- helditems += "| rare= [[#{item}]]\n" if items[2]
- end
- helditems += "}}\n"
- #Generate the Base Stats template
- stats = species_data.base_stats
- basestats = "==Base stats==\n{{Stats\n| type = #{type1}\n"
- basestats += "| type2 = #{type2}\n" if type1 != type2
- basestats += "| HP = #{stats[:HP]}\n"
- basestats += "| Attack = #{stats[:ATTACK]}\n"
- basestats += "| Defense = #{stats[:DEFENSE]}\n"
- basestats += "| SpAtk = #{stats[:SPECIAL_ATTACK]}\n"
- basestats += "| SpDef = #{stats[:SPECIAL_DEFENSE]}\n"
- basestats += "| Speed = #{stats[:SPEED]}\n}}\n"
- #Generate the Type Effectiveness template
- typeeff = "==Type effectiveness==\n{{TypeEffectiveness\n| type1 = #{type1}\n"
- typeeff += "| type2 = #{type2}\n" if type1 != type2
- GameData::Type.each { |type|
- effect = Effectiveness.calculate(type.id,species_data.type1,species_data.type2)
- effect = (effect.to_f/8).to_f * 100 if effect != 0
- effect = effect.to_i
- typeeff += "| #{type.real_name} = #{effect}\n" if !type.pseudo_type
- }
- typeeff += "}}\n"
- #Generates the movelist templates
- moves = "==Moves==\n"
- #Level-up moves
- moves += "===By leveling up===\n"
- if type1 != type2
- moves += "{{MoveLevelStart|#{name}|#{type1}|#{type2}}}\n"
- else
- moves += "{{MoveLevelStart|#{name}|#{type1}|#{type1}}}\n"
- end
- level_moves = species_data.moves
- for i in 0...level_moves.length
- array = level_moves[i]
- level = array[0]
- move = array[1]
- move_data = GameData::Move.try_get(move)
- moves += "{{MoveLevel+|#{level}|#{move_data.real_name}"
- moves += "|'''" if [species_data.type1,species_data.type2].include?(move_data.type) && move_data.base_damage > 1
- moves += "}}\n"
- end
- if type1 != type2
- moves += "{{MoveLevelEnd|#{name}|#{type1}|#{type2}}}\n"
- else
- moves += "{{MoveLevelEnd|#{name}|#{type1}|#{type1}}}\n"
- end
- #TMs/HMs
- moves += "===By TM/HM===\n"
- if type1 != type2
- moves += "{{MoveTMStart|#{name}|#{type1}|#{type2}}}\n"
- else
- moves += "{{MoveTMStart|#{name}|#{type1}|#{type1}}}\n"
- end
- tm_moves = species_data.tutor_moves
- GameData::Item.each do |i|
- if i.is_machine? && tm_moves.include?(i.move)
- tmname = i.real_name
- move_data = GameData::Move.try_get(i.move)
- moves += "{{MoveTM+|#{tmname}"
- moves += "|'''" if [species_data.type1,species_data.type2].include?(move_data.type) && move_data.base_damage > 1
- moves += "}}\n"
- end
- end
- if type1 != type2
- moves += "{{MoveTMEnd|#{name}|#{type1}|#{type2}}}\n"
- else
- moves += "{{MoveTMEnd|#{name}|#{type1}|#{type1}}}\n"
- end
- #Tutors
- moves += "===By tutoring===\n"
- if type1 != type2
- moves += "{{MoveTutorStart|#{name}|#{type1}|#{type2}}}\n"
- else
- moves += "{{MoveTutorStart|#{name}|#{type1}|#{type1}}}\n"
- end
- tutor_moves = species_data.tutor_moves
- for i in 0...tutor_moves.length
- move = tutor_moves[i]
- move_data = GameData::Move.try_get(move)
- if !move_data.is_machine_move?
- moves += "{{MoveTutor+|#{move_data.name}"
- moves += "|'''" if [species_data.type1,species_data.type2].include?(move_data.type) && move_data.base_damage > 1
- moves += "}}\n"
- end
- end
- if type1 != type2
- moves += "{{MoveTutorEnd|#{name}|#{type1}|#{type2}}}\n"
- else
- moves += "{{MoveTutorEnd|#{name}|#{type1}|#{type1}}}\n"
- end
- #Breeding
- moves += "===By breeding===\n"
- if type1 != type2
- moves += "{{MoveBreedStart|#{name}|#{type1}|#{type2}}}\n"
- else
- moves += "{{MoveBreedStart|#{name}|#{type1}|#{type1}}}\n"
- end
- if species_data.egg_moves.length > 0
- egg_moves = species_data.egg_moves
- else
- babyspecies = species_data.get_baby_species
- egg_moves = GameData::Species.get(babyspecies).egg_moves
- end
- for i in 0...egg_moves.length
- move = egg_moves[i]
- move_data = GameData::Move.try_get(move)
- moves += "{{MoveBreed+|"
- egg_groups1 = species_data.egg_groups
- nonchain = ""
- chain = ""
- for j in 0...pool.length
- test_data = GameData::Species.try_get(pool[j])
- egg_groups2 = test_data.egg_groups
- test_movelist = test_data.moves
- test_num = sprintf("%03d",test_data.id_number)
- test_moves = []
- test_movelist.each { |m| test_moves.push(m[1]) }
- if !egg_groups1.include?(:Undiscovered) && !egg_groups2.include?(:Undiscovered) &&
- !test_data.gender_ratio != :Genderless &&
- ((egg_groups1 & egg_groups2).length > 0 || egg_groups2.include?(:Ditto) || egg_groups1.include?(:Ditto))
- if test_moves.include?(move)
- nonchain +="{{MS|#{test_num}|#{test_data.real_name}}}"
- elsif test_data.get_baby_species != species_data.get_baby_species
- test_baby = GameData::Species.get(test_data.get_baby_species)
- if test_data.egg_moves.include?(move) || test_baby.egg_moves.include?(move)
- chain +="{{MS|#{test_num}|#{test_data.real_name}}}"
- end
- end
- end
- end
- if nonchain != ""
- moves += "#{nonchain}"
- else
- moves += "#{chain}"
- end
- moves +="|#{move_data.name}"
- moves += "|'''" if [species_data.type1,species_data.type2].include?(move_data.type) && move_data.base_damage > 1
- moves +="|*" if nonchain == ""
- moves += "}}\n"
- end
- if type1 != type2
- moves += "{{MoveBreedEnd|#{name}|#{type1}|#{type2}}}\n"
- else
- moves += "{{MoveBreedEnd|#{name}|#{type1}|#{type1}}}\n"
- end
- #Generates evobox template
- evobox = "==Evolution==\n"
- size = 1
- #Base Stage
- first_stage = species_data.get_baby_species
- first_stage_data = GameData::Species.get(first_stage)
- test_stage = first_stage_data
- loop do
- if test_stage.get_evolutions.length > 0
- size += 1
- test_stage = test_stage.get_evolutions[0][0]
- test_stage = GameData::Species.get(test_stage)
- else
- break
- end
- end
- evobox += "{{Evobox-#{size}\n"
- evobox += "| type1 = #{type1}\n"
- evobox += "| type2 = #{type2}\n" if type1 != type2
- evobox += "| name1 = #{first_stage_data.real_name}\n"
- evobox += "| image1 = #{first_stage}.png\n"
- first_stage_type1 = GameData::Type.get(first_stage_data.type1).real_name
- first_stage_type2 = GameData::Type.get(first_stage_data.type2).real_name
- evobox += "| type1-1 = #{first_stage_type1}\n"
- evobox += "| type2-1 = #{first_stage_type2}\n" if first_stage_type1 != first_stage_type2
- #First evolution
- if first_stage_data.get_evolutions.length > 0
- second_stage = first_stage_data.get_evolutions[0][0]
- second_stage_data = GameData::Species.get(second_stage)
- first_method = pbBoxFromEvo(first_stage_data.get_evolutions[0][1],first_stage_data.get_evolutions[0][2])
- evobox += "| evo1 = #{first_method}\n"
- evobox += "| name2 = #{second_stage_data.real_name}\n"
- evobox += "| image2 = #{second_stage}.png\n"
- second_stage_type1 = GameData::Type.get(second_stage_data.type1).real_name
- second_stage_type2 = GameData::Type.get(second_stage_data.type2).real_name
- evobox += "| type1-2 = #{second_stage_type1}\n"
- evobox += "| type2-2 = #{second_stage_type2}\n" if second_stage_type1 != second_stage_type2
- #Second evolution
- if second_stage_data.get_evolutions.length > 0
- third_stage = second_stage_data.get_evolutions[0][0]
- third_stage_data = GameData::Species.get(third_stage)
- second_method = pbBoxFromEvo(second_stage_data.get_evolutions[0][1],second_stage_data.get_evolutions[0][2])
- evobox += "| evo2 = #{second_method}\n"
- evobox += "| name3 = #{third_stage_data.real_name}\n"
- evobox += "| image3 = #{third_stage}.png\n"
- third_stage_type1 = GameData::Type.get(third_stage_data.type1).real_name
- third_stage_type2 = GameData::Type.get(third_stage_data.type2).real_name
- evobox += "| type1-3 = #{third_stage_type1}\n"
- evobox += "| type2-3 = #{third_stage_type2}\n" if third_stage_type1 != third_stage_type2
- end
- end
- evobox += "}}\n"
- #Generate Sprites template
- sprites = "{{Sprites|#{dexnum}|type=#{type1}"
- sprites += "|type2=#{type2}" if type1 != type2
- sprites += "}}\n"
- text += prevnexthead
- text += "\n"
- text += infobox
- text += introblurb
- text += "==Pokédex entry==\n{{Dex|#{entry}}}\n==Biology==\n"
- text += locations
- text += helditems
- text += basestats
- text += typeeff
- text += moves
- text += evobox
- text += "==Sprites==\n"
- text += sprites
- text += "==Trivia==\n===Design Origin===\n===Name Origin===\n==Gallery==\n"
- text += prevnexthead
- Input.clipboard = text
- end
- #Used to generate MoveLevel+
- def pbLevelMoves
- text = "{{\#switch:{{{2|}}}\n"
- GameData::Move.each do |i|
- text += "|#{i.real_name}={{MoveLevel|{{{1|1}}}|#{i.real_name}"
- type = i.type
- type = GameData::Type.get(type).real_name
- text += "|#{type}"
- category = i.category
- case category
- when 0
- category = "Physical"
- when 1
- category = "Special"
- when 2
- category = "Status"
- end
- text += "|#{category}"
- dmg = i.base_damage
- dmg = "—" if dmg == 0 || dmg == 1
- text += "|#{dmg}"
- accuracy = i.accuracy
- accuracy = "—" if accuracy == 0 || accuracy == 1
- text += "|#{accuracy}"
- text += "|#{i.total_pp}"
- text += "|{{\#switch: {{{3}}}|bold|stab='''|italic=''|{{{3|}}}}}}}\n"
- end
- text += "}}<noinclude>[[Category:Learnlist templates]]{{documentation}}</noinclude>"
- Input.clipboard = text
- end
- #Used to generate MoveTM+
- def pbTMMoves
- text = "{{\#switch:{{{1|}}}\n"
- GameData::Item.each do |i|
- if i.is_machine?
- tmname = i.real_name
- move_data = GameData::Move.try_get(i.move)
- text += "|#{tmname}={{MoveTM|#{tmname}"
- text += "|#{move_data.real_name}"
- type = move_data.type
- type = GameData::Type.get(type).real_name
- text += "|#{type}"
- category = move_data.category
- case category
- when 0
- category = "Physical"
- when 1
- category = "Special"
- when 2
- category = "Status"
- end
- text += "|#{category}"
- dmg = move_data.base_damage
- dmg = "—" if dmg == 0 || dmg == 1
- text += "|#{dmg}"
- accuracy = move_data.accuracy
- accuracy = "—" if accuracy == 0 || accuracy == 1
- text += "|#{accuracy}"
- text += "|#{move_data.total_pp}"
- text += "|{{{2|}}}}}\n"
- end
- end
- text += "}}<noinclude>[[Category:Learnlist templates]]{{documentation}}</noinclude>"
- Input.clipboard = text
- end
- #Used to generate MoveBreed+
- def pbBreedMoves
- text = "{{\#switch:{{{2|}}}\n"
- GameData::Move.each do |i|
- text += "|#{i.real_name}={{MoveBreed|{{{1|1}}}|#{i.real_name}"
- type = i.type
- type = GameData::Type.get(type).real_name
- text += "|#{type}"
- category = i.category
- case category
- when 0
- category = "Physical"
- when 1
- category = "Special"
- when 2
- category = "Status"
- end
- text += "|#{category}"
- dmg = i.base_damage
- dmg = "—" if dmg == 0 || dmg == 1
- text += "|#{dmg}"
- accuracy = i.accuracy
- accuracy = "—" if accuracy == 0 || accuracy == 1
- text += "|#{accuracy}"
- text += "|#{i.total_pp}"
- text += "|{{{3|}}}|{{{4|}}}}}\n"
- end
- text += "}}<noinclude>[[Category:Learnlist templates]]{{documentation}}</noinclude>"
- Input.clipboard = text
- end
- #Used to generate MoveTutor+
- def pbTutorMoves
- text = "{{\#switch:{{{1|}}}\n"
- GameData::Move.each do |i|
- text += "|#{i.real_name}={{MoveTutor|#{i.real_name}"
- type = i.type
- type = GameData::Type.get(type).real_name
- text += "|#{type}"
- category = i.category
- case category
- when 0
- category = "Physical"
- when 1
- category = "Special"
- when 2
- category = "Status"
- end
- text += "|#{category}"
- dmg = i.base_damage
- dmg = "—" if dmg == 0 || dmg == 1
- text += "|#{dmg}"
- accuracy = i.accuracy
- accuracy = "—" if accuracy == 0 || accuracy == 1
- text += "|#{accuracy}"
- text += "|#{i.total_pp}"
- text += "|{{{2|}}}|{{{3|}}}}}\n"
- end
- text += "}}<noinclude>[[Category:Learnlist templates]]{{documentation}}</noinclude>"
- Input.clipboard = text
- end
Add Comment
Please, Sign In to add comment