Fixed to show the multiple evolved forms properly, for Eevee and others.

This commit is contained in:
依瑪貓 2016-12-06 16:18:00 +08:00
parent e4fda1c309
commit 12e4cd3052
8 changed files with 892 additions and 454 deletions

View File

@ -12,9 +12,8 @@ Type aStats
nAttack As Integer
nDefense As Integer
nTotal As Integer
sEvolveInto As String
nEvolvedCP As Integer
nMaxCP As Integer
maEvolvedForms () As aEvolveForm
End Type
' The amount of star dust to power-up.
@ -37,13 +36,19 @@ Type aFindIVParam
bIsCancelled As Boolean
End Type
Type aEvolveForm
sPokemon As String
nCP As Integer
nMaxCP As Integer
End Type
Private maBaseStats () As New aStats
Private mCPM () As Double, mStarDust () As Integer
' subMain: The main program
Sub subMain
BasicLibraries.loadLibrary "XrayTool"
Dim maIVs As Variant, nI As Integer, sOutput As String
Dim maIVs As Variant, nI As Integer
Dim aQuery As New aFindIVParam, aBaseStats As New aStats
aQuery = fnAskParam
@ -51,25 +56,7 @@ Sub subMain
Exit Sub
End If
maIVs = fnFindIV (aQuery)
sOutput = ""
For nI = 0 To UBound (maIVs)
sOutput = sOutput _
& " Lv=" & maIVs (nI).fLevel _
& " Atk=" & maIVs (nI).nAttack _
& " Def=" & maIVs (nI).nDefense _
& " Sta=" & maIVs (nI).nStamina _
& " IV=" & fnFloor (maIVs (nI).nTotal * 100 / 45) & "%"
If aQuery.sPokemon <> maIVs (nI).sEvolveInto Then
aBaseStats = fnGetBaseStats (maIVs (nI).sEvolveInto)
sOutput = sOutput & " Ev=" & maIVs (nI).sEvolveInto _
& " " & maIVs (nI).nEvolvedCP
End If
If aQuery.nPlayerLevel <> 0 Then
sOutput = sOutput & " XCP=" & maIVs (nI).nMaxCP
End If
sOutput = sOutput & Chr (10)
Next nI
If sOutput = "" Then
If UBound (maIVs) = -1 Then
MsgBox "Found no matching IV."
Else
subSaveIV (aQuery, maIVs)
@ -841,6 +828,7 @@ Function fnFindIV (aQuery As aFindIVParam) As Variant
Dim nI As Integer, nJ As Integer
Dim fStep As Double, nCount As Integer
Dim aEvBaseStats As new aStats, aTempIV As New aStats
Dim maEvolvedForms () As New aEvolveForm
If aQuery.sPokemon = "" Then
fnFindIV = maIV
@ -852,14 +840,10 @@ Function fnFindIV (aQuery As aFindIVParam) As Variant
fStep = 0.5
End If
aBaseStats = fnGetBaseStats (aQuery.sPokemon)
aEvBaseStats = fnGetBaseStats (aBaseStats.sEvolveInto)
subReadStarDust
nCount = -1
For fLevel = 1 To UBound (mStarDust) Step fStep
If mStarDust (CInt (fLevel - 0.5)) = aQuery.nStarDust Then
'For nI = 0 To UBound (maStarDust) Step nStep
' fLevel = maStarDust (nI).fLevel
' If maStarDust (nI).nStarDust = aQuery.nStarDust Then
For nStamina = 0 To 15
If fnCalcHP (aBaseStats, fLevel, nStamina) = aQuery.nHP Then
For nAttack = 0 To 15
@ -876,14 +860,23 @@ Function fnFindIV (aQuery As aFindIVParam) As Variant
.nDefense = nDefense
.nStamina = nStamina
.nTotal = nAttack + nDefense + nStamina
.sEvolveInto = aBaseStats.sEvolveInto
.nEvolvedCP = fnCalcCP (aEvBaseStats, fLevel, nAttack, nDefense, nStamina)
End With
If aQuery.nPlayerLevel <> 0 Then
maIV (nCount).nMaxCP = fnCalcCP (aEvBaseStats, aQuery.nPlayerLevel + 1.5, nAttack, nDefense, nStamina)
maIV (nCount).nMaxCP = fnCalcCP (aBaseStats, aQuery.nPlayerLevel + 1.5, nAttack, nDefense, nStamina)
Else
maIV (nCount).nMaxCP = -1
End If
maIV (nCount).maEvolvedForms = fnGetEvolvedFormArray (UBound (aBaseStats.maEvolvedForms))
For nI = 0 To UBound (aBaseStats.maEvolvedForms)
maIV (nCount).maEvolvedForms (nI).sPokemon = aBaseStats.maEvolvedForms (nI).sPokemon
aEvBaseStats = fnGetBaseStats (aBaseStats.maEvolvedForms (nI).sPokemon)
maIV (nCount).maEvolvedForms (nI).nCP = fnCalcCP (aEvBaseStats, fLevel, nAttack, nDefense, nStamina)
If aQuery.nPlayerLevel <> 0 Then
maIV (nCount).maEvolvedForms (nI).nMaxCP = fnCalcCP (aEvBaseStats, aQuery.nPlayerLevel + 1.5, nAttack, nDefense, nStamina)
Else
maIV (nCount).maEvolvedForms (nI).nMaxCP = -1
End If
Next nI
End If
Next nDefense
Next nAttack
@ -906,14 +899,42 @@ End Function
' fnCompareIV: Compare two IVs for sorting
Function fnCompareIV (aIVa As aStats, aIVb As aStats) As Double
fnCompareIV = aIVb.nMaxCP - aIVa.nMaxCP
Dim nCPa As Integer, nCPb As Integer, nI As Integer
nCPa = aIVa.nMaxCP
For nI = 0 To UBound (aIVa.maEvolvedForms)
If nCPa < aIVa.maEvolvedForms (nI).nMaxCP Then
nCPa = aIVa.maEvolvedForms (nI).nMaxCP
End If
Next nI
nCPb = aIVb.nMaxCP
For nI = 0 To UBound (aIVb.maEvolvedForms)
If nCPb < aIVb.maEvolvedForms (nI).nMaxCP Then
nCPb = aIVb.maEvolvedForms (nI).nMaxCP
End If
Next nI
fnCompareIV = nCPb - nCPa
If fnCompareIV <> 0 Then
Exit Function
End If
fnCompareIV = aIVb.nEvolvedCP - aIVa.nEvolvedCP
nCPa = 0
For nI = 0 To UBound (aIVa.maEvolvedForms)
If nCPa < aIVa.maEvolvedForms (nI).nCP Then
nCPa = aIVa.maEvolvedForms (nI).nCP
End If
Next nI
nCPb = 0
For nI = 0 To UBound (aIVb.maEvolvedForms)
If nCPb < aIVb.maEvolvedForms (nI).nCP Then
nCPb = aIVb.maEvolvedForms (nI).nCP
End If
Next nI
fnCompareIV = nCPb - nCPa
If fnCompareIV <> 0 Then
Exit Function
End If
fnCompareIV = aIVb.nTotal - aIVa.nTotal
If fnCompareIV <> 0 Then
Exit Function
@ -938,6 +959,8 @@ End Function
' subCopyIV: Copies one IV to another
Function subCopyIV (aFrom As aStats, aTo As aStats) As Double
Dim nI As Integer, maEvolvedForms () As New aEvolveForm
With aTo
.sNo = aFrom.sNo
.sPokemon = aFrom.sPokemon
@ -946,40 +969,123 @@ Function subCopyIV (aFrom As aStats, aTo As aStats) As Double
.nDefense = aFrom.nDefense
.nStamina = aFrom.nStamina
.nTotal = aFrom.nTotal
.sEvolveInto = aFrom.sEvolveInto
.nEvolvedCP = aFrom.nEvolvedCP
.nMaxCP = aFrom.nMaxCP
End With
aTo.maEvolvedForms = fnGetEvolvedFormArray (UBound (aFrom.maEvolvedForms))
For nI = 0 To UBound (aFrom.maEvolvedForms)
With aTo.maEvolvedForms (nI)
.sPokemon = aFrom.maEvolvedForms (nI).sPokemon
.nCP = aFrom.maEvolvedForms (nI).nCP
.nMaxCP = aFrom.maEvolvedForms (nI).nMaxCP
End With
Next nI
End Function
' subSaveIV: Saves the found IV
Sub subSaveIV (aQuery As aFindIVParam, maIVs () As aStats)
Dim oDoc As Object, oSheet As Object, oRange As Object
Dim nI As Integer, oColumns As Object
Dim mData (Ubound (maIVs) + 1) As Variant
Dim oDoc As Object, oSheet As Object
Dim oRange As Object, oColumns As Object, oRows As Object
Dim nI As Integer, nJ As Integer, nFrontCols As Integer
Dim mData (Ubound (maIVs) + 1) As Variant, mRow () As Variant
Dim mProps () As New com.sun.star.beans.PropertyValue
oDoc = StarDesktop.loadComponentFromURL ( _
"private:factory/scalc", "_default", 0, mProps)
oSheet = oDoc.getSheets.getByIndex (0)
mData (0) = Array ( _
"No", "Pokemon", "CP", "HP", _
"Lv", "Atk", "Def", "Sta", "IV", _
"Evolve Into", "Evolved CP", "Max CP")
mData (1) = Array ( _
maIVs (0).sNo, aQuery.sPokemon, aQuery.nCP, aQuery.nHP, _
maIVs (0).fLevel, maIVs (0).nAttack, maIVs (0).nDefense, _
maIVs (0).nStamina, maIVs (0).nTotal / 45, _
maIVs (0).sEvolveInto, maIVs (0).nEvolvedCP, _
maIVs (0).nMaxCP)
For nI = 1 To UBound (maIVs)
mData (nI + 1) = Array ( _
"", "", "", "", _
mRow = Array ( _
"No", "Pokemon", "CP", "HP", "Star dust", _
"Lv", "Atk", "Def", "Sta", "IV")
nFrontCols = UBound (mRow)
If aQuery.sPokemon = "Eevee" Then
If aQuery.nPlayerLevel <> 0 Then
ReDim Preserve mRow (nFrontCols + 6) As Variant
mRow (nFrontCols + 1) = "CP as " & maIVs (0).maEvolvedForms (0).sPokemon
mRow (nFrontCols + 2) = "Powered-up as " & maIVs (0).maEvolvedForms (0).sPokemon
mRow (nFrontCols + 3) = "CP as " & maIVs (0).maEvolvedForms (1).sPokemon
mRow (nFrontCols + 4) = "Powered-up as " & maIVs (0).maEvolvedForms (1).sPokemon
mRow (nFrontCols + 5) = "CP as " & maIVs (0).maEvolvedForms (2).sPokemon
mRow (nFrontCols + 6) = "Powered-up as " & maIVs (0).maEvolvedForms (2).sPokemon
Else
ReDim Preserve mRow (nFrontCols + 3) As Variant
mRow (nFrontCols + 1) = "CP as " & maIVs (0).maEvolvedForms (0).sPokemon
mRow (nFrontCols + 2) = "CP as " & maIVs (0).maEvolvedForms (1).sPokemon
mRow (nFrontCols + 3) = "CP as " & maIVs (0).maEvolvedForms (2).sPokemon
End If
Else
If UBound (maIVs (0).maEvolvedForms) = -1 Then
If aQuery.nPlayerLevel <> 0 Then
ReDim Preserve mRow (nFrontCols + 1) As Variant
mRow (nFrontCols + 1) = "Powered-up"
End If
Else
If aQuery.nPlayerLevel <> 0 Then
ReDim Preserve mRow (nFrontCols + UBound (maIVs (0).maEvolvedForms) + 2) As Variant
For nJ = 0 To UBound (maIVs (0).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = "CP as " & maIVs (0).maEvolvedForms (nJ).sPokemon
Next nJ
mRow (UBound (mRow)) = "Powered-up as " & maIVs (0).maEvolvedForms (UBound (maIVs (0).maEvolvedForms)).sPokemon
Else
ReDim Preserve mRow (nFrontCols + UBound (maIVs (0).maEvolvedForms) + 1) As Variant
For nJ = 0 To UBound (maIVs (0).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = "CP as " & maIVs (0).maEvolvedForms (nJ).sPokemon
Next nJ
End If
End If
End If
mData (0) = mRow
For nI = 0 To UBound (maIVs)
mRow = Array ( _
"", "", "", "", "", _
maIVs (nI).fLevel, maIVs (nI).nAttack, maIVs (nI).nDefense, _
maIVs (nI).nStamina, maIVs (nI).nTotal / 45, _
maIVs (nI).sEvolveInto, maIVs (nI).nEvolvedCP, _
maIVs (nI).nMaxCP)
maIVs (nI).nStamina, maIVs (nI).nTotal / 45)
If aQuery.sPokemon = "Eevee" Then
If aQuery.nPlayerLevel <> 0 Then
ReDim Preserve mRow (nFrontCols + 6) As Variant
mRow (nFrontCols + 1) = maIVs (nI).maEvolvedForms (0).nCP
mRow (nFrontCols + 2) = maIVs (nI).maEvolvedForms (0).nMaxCP
mRow (nFrontCols + 3) = maIVs (nI).maEvolvedForms (1).nCP
mRow (nFrontCols + 4) = maIVs (nI).maEvolvedForms (1).nMaxCP
mRow (nFrontCols + 5) = maIVs (nI).maEvolvedForms (2).nCP
mRow (nFrontCols + 6) = maIVs (nI).maEvolvedForms (2).nMaxCP
Else
ReDim Preserve mRow (nFrontCols + 3) As Variant
mRow (nFrontCols + 1) = maIVs (nI).maEvolvedForms (0).nCP
mRow (nFrontCols + 2) = maIVs (nI).maEvolvedForms (1).nCP
mRow (nFrontCols + 3) = maIVs (nI).maEvolvedForms (2).nCP
End If
Else
If UBound (maIVs (nI).maEvolvedForms) = -1 Then
If aQuery.nPlayerLevel <> 0 Then
ReDim Preserve mRow (nFrontCols + 1) As Variant
mRow (nFrontCols + 1) = maIVs (nI).nMaxCP
End If
Else
If aQuery.nPlayerLevel <> 0 Then
ReDim Preserve mRow (nFrontCols + UBound (maIVs (nI).maEvolvedForms) + 2) As Variant
For nJ = 0 To UBound (maIVs (nI).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = maIVs (nI).maEvolvedForms (nJ).nCP
Next nJ
mRow (UBound (mRow)) = maIVs (nI).maEvolvedForms (UBound (maIVs (nI).maEvolvedForms)).nMaxCP
Else
ReDim Preserve mRow (nFrontCols + UBound (maIVs (nI).maEvolvedForms) + 1) As Variant
For nJ = 0 To UBound (maIVs (nI).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = maIVs (nI).maEvolvedForms (nJ).nCP
Next nJ
End If
End If
End If
mData (nI + 1) = mRow
Next nI
' Fills the query information at the first row
mData (1) (0) = maIVs (0).sNo
mData (1) (1) = aQuery.sPokemon
mData (1) (2) = aQuery.nCP
mData (1) (3) = aQuery.nHP
mData (1) (4) = aQuery.nStarDust
oRange = oSheet.getCellRangeByPosition ( _
0, 0, UBound (mData (0)), UBound (mData))
oRange.setDataArray (mData)
@ -999,14 +1105,64 @@ Sub subSaveIV (aQuery As aFindIVParam, maIVs () As aStats)
3, 1, 3, UBound (mData))
oRange.merge (True)
oRange = oSheet.getCellRangeByPosition ( _
8, 1, 8, UBound (mData))
4, 1, 4, UBound (mData))
oRange.merge (True)
oRange = oSheet.getCellRangeByPosition ( _
9, 1, 9, UBound (mData))
oRange.setPropertyValue ("NumberFormat", 10)
If aQuery.sPokemon = "Eevee" Then
oRange = oSheet.getCellRangeByPosition ( _
10, 0, 15, 0)
Else
If UBound (maIVs (0).maEvolvedForms) = -1 Then
oRange = oSheet.getCellRangeByPosition ( _
10, 0, 10, 0)
Else
oRange = oSheet.getCellRangeByPosition ( _
10, 0, 10 + UBound (maIVs (0).maEvolvedForms) + 2, 0)
End If
End If
oRange.setPropertyValue ("IsTextWrapped", True)
oRows = oSheet.getRows
oRows.getByIndex (0).setPropertyValue ("Height", 840)
oColumns = oSheet.getColumns
For nI = 0 To UBound (mData (0))
oColumns.getByIndex (nI).setPropertyValue ( _
"OptimalWidth", True)
Next nI
oColumns.getByIndex (0).setPropertyValue ("Width", 890)
oColumns.getByIndex (1).setPropertyValue ("Width", 2310)
oColumns.getByIndex (2).setPropertyValue ("Width", 890)
oColumns.getByIndex (3).setPropertyValue ("Width", 890)
oColumns.getByIndex (4).setPropertyValue ("Width", 1780)
oColumns.getByIndex (5).setPropertyValue ("Width", 860)
oColumns.getByIndex (6).setPropertyValue ("Width", 860)
oColumns.getByIndex (7).setPropertyValue ("Width", 860)
oColumns.getByIndex (8).setPropertyValue ("Width", 860)
oColumns.getByIndex (9).setPropertyValue ("Width", 1030)
If aQuery.sPokemon = "Eevee" Then
If aQuery.nPlayerLevel <> 0 Then
For nI = 0 To 5 Step 2
oColumns.getByIndex (10 + nI).setPropertyValue ("Width", 2310)
oColumns.getByIndex (10 + nI + 1).setPropertyValue ("Width", 2810)
Next nI
Else
For nI = 0 To 2
oColumns.getByIndex (10 + nI).setPropertyValue ("Width", 2310)
Next nI
End If
Else
If UBound (maIVs (0).maEvolvedForms) = -1 Then
If aQuery.nPlayerLevel <> 0 Then
oColumns.getByIndex (10).setPropertyValue ("Width", 2200)
End If
Else
For nI = 0 To UBound (maIVs (0).maEvolvedForms)
oColumns.getByIndex (10 + nI).setPropertyValue ("Width", 2310)
Next nI
If aQuery.nPlayerLevel <> 0 Then
oColumns.getByIndex (10 + UBound (maIVs (0).maEvolvedForms) + 1).setPropertyValue ("Width", 2810)
End If
End If
End If
End Sub
' fnFilterAppraisals: Filters the IV by the appraisals.
@ -1122,7 +1278,7 @@ End Function
' subReadBaseStats: Reads the base stats table.
Sub subReadBaseStats
Dim mData As Variant, nI As Integer
Dim mData As Variant, nI As Integer, nJ As Integer
If UBound (maBaseStats) = -1 Then
mData = fnGetBaseStatsData
@ -1134,12 +1290,42 @@ Sub subReadBaseStats
.nStamina = mData (nI) (2)
.nAttack = mData (nI) (3)
.nDefense = mData (nI) (4)
.sEvolveInto = mData (nI) (5)
End With
maBaseStats (nI).maEvolvedForms = fnGetEvolvedFormArray (UBound (mData (nI) (5)))
For nJ = 0 To UBound (maBaseStats (nI).maEvolvedForms)
With maBaseStats (nI).maEvolvedForms (nJ)
.sPokemon = mData (nI) (5) (nJ)
.nCP = -1
.nMaxCP = -1
End With
Next nJ
Next nI
End If
End Sub
' fnGetEvolvedFormArray: Obtains a blank aEvolveForm array
Function fnGetEvolvedFormArray (nUBound As Integer) As Variant
If nUBound = -1 Then
fnGetEvolvedFormArray = fnGetEmptyEvolvedFormArray
Else
fnGetEvolvedFormArray = fnGetNumberedEvolvedFormArray (nUBound)
End If
End Function
' fnGetNumberedEvolvedFormArray: Obtains a numbered aEvolveForm array
Function fnGetNumberedEvolvedFormArray (nUBound As Integer) As Variant
Dim mData (nUBound) As New aEvolveForm
fnGetNumberedEvolvedFormArray = mData
End Function
' fnGetEmptyEvolvedFormArray: Obtains an empty aEvolveForm array
Function fnGetEmptyEvolvedFormArray () As Variant
Dim mData () As New aEvolveForm
fnGetEmptyEvolvedFormArray = mData
End Function
' subReadCPM: Reads the CPM table.
Sub subReadCPM
If UBound (mCPM) = -1 Then

View File

@ -1,5 +1,5 @@
' 1Data: The Pokémon GO data for IV calculation
' by imacat <imacat@mail.imacat.idv.tw>, 2016-11-28
' by imacat <imacat@mail.imacat.idv.tw>, 2016-12-06
' Generated with 9Load.subReadDataSheets ()
Option Explicit
@ -7,157 +7,157 @@ Option Explicit
' fnGetBaseStatsData: Returns the base stats data.
Function fnGetBaseStatsData As Variant
fnGetBaseStatsData = Array( _
Array ("Bulbasaur", "001", 90, 118, 118, "Venusaur"), _
Array ("Ivysaur", "002", 120, 151, 151, "Venusaur"), _
Array ("Venusaur", "003", 160, 198, 198, "Venusaur"), _
Array ("Charmander", "004", 78, 116, 96, "Charizard"), _
Array ("Charmeleon", "005", 116, 158, 129, "Charizard"), _
Array ("Charizard", "006", 156, 223, 176, "Charizard"), _
Array ("Squirtle", "007", 88, 94, 122, "Blastoise"), _
Array ("Wartortle", "008", 118, 126, 155, "Blastoise"), _
Array ("Blastoise", "009", 158, 171, 210, "Blastoise"), _
Array ("Caterpie", "010", 90, 55, 62, "Butterfree"), _
Array ("Metapod", "011", 100, 45, 64, "Butterfree"), _
Array ("Butterfree", "012", 120, 167, 151, "Butterfree"), _
Array ("Weedle", "013", 80, 63, 55, "Beedrill"), _
Array ("Kakuna", "014", 90, 46, 86, "Beedrill"), _
Array ("Beedrill", "015", 130, 169, 150, "Beedrill"), _
Array ("Pidgey", "016", 80, 85, 76, "Pidgeot"), _
Array ("Pidgeotto", "017", 126, 117, 108, "Pidgeot"), _
Array ("Pidgeot", "018", 166, 166, 157, "Pidgeot"), _
Array ("Rattata", "019", 60, 103, 70, "Raticate"), _
Array ("Raticate", "020", 110, 161, 144, "Raticate"), _
Array ("Spearow", "021", 80, 112, 61, "Fearow"), _
Array ("Fearow", "022", 130, 182, 135, "Fearow"), _
Array ("Ekans", "023", 70, 110, 102, "Arbok"), _
Array ("Arbok", "024", 120, 167, 158, "Arbok"), _
Array ("Pikachu", "025", 70, 112, 101, "Raichu"), _
Array ("Raichu", "026", 120, 193, 165, "Raichu"), _
Array ("Sandshrew", "027", 100, 126, 145, "Sandslash"), _
Array ("Sandslash", "028", 150, 182, 202, "Sandslash"), _
Array ("Nidoran♀", "029", 110, 86, 94, "Nidoqueen"), _
Array ("Nidorina", "030", 140, 117, 126, "Nidoqueen"), _
Array ("Nidoqueen", "031", 180, 180, 174, "Nidoqueen"), _
Array ("Nidoran♂", "032", 92, 105, 76, "Nidoking"), _
Array ("Nidorino", "033", 122, 137, 112, "Nidoking"), _
Array ("Nidoking", "034", 162, 204, 157, "Nidoking"), _
Array ("Clefairy", "035", 140, 107, 116, "Clefable"), _
Array ("Clefable", "036", 190, 178, 171, "Clefable"), _
Array ("Vulpix", "037", 76, 96, 122, "Ninetales"), _
Array ("Ninetales", "038", 146, 169, 204, "Ninetales"), _
Array ("Jigglypuff", "039", 230, 80, 44, "Wigglytuff"), _
Array ("Wigglytuff", "040", 280, 156, 93, "Wigglytuff"), _
Array ("Zubat", "041", 80, 83, 76, "Golbat"), _
Array ("Golbat", "042", 150, 161, 153, "Golbat"), _
Array ("Oddish", "043", 90, 131, 116, "Vileplume"), _
Array ("Gloom", "044", 120, 153, 139, "Vileplume"), _
Array ("Vileplume", "045", 150, 202, 170, "Vileplume"), _
Array ("Paras", "046", 70, 121, 99, "Parasect"), _
Array ("Parasect", "047", 120, 165, 146, "Parasect"), _
Array ("Venonat", "048", 120, 100, 102, "Venomoth"), _
Array ("Venomoth", "049", 140, 179, 150, "Venomoth"), _
Array ("Diglett", "050", 20, 109, 88, "Dugtrio"), _
Array ("Dugtrio", "051", 70, 167, 147, "Dugtrio"), _
Array ("Meowth", "052", 80, 92, 81, "Persian"), _
Array ("Persian", "053", 130, 150, 139, "Persian"), _
Array ("Psyduck", "054", 100, 122, 96, "Golduck"), _
Array ("Golduck", "055", 160, 191, 163, "Golduck"), _
Array ("Mankey", "056", 80, 148, 87, "Primeape"), _
Array ("Primeape", "057", 130, 207, 144, "Primeape"), _
Array ("Growlithe", "058", 110, 136, 96, "Arcanine"), _
Array ("Arcanine", "059", 180, 227, 166, "Arcanine"), _
Array ("Poliwag", "060", 80, 101, 82, "Poliwrath"), _
Array ("Poliwhirl", "061", 130, 130, 130, "Poliwrath"), _
Array ("Poliwrath", "062", 180, 182, 187, "Poliwrath"), _
Array ("Abra", "063", 50, 195, 103, "Alakazam"), _
Array ("Kadabra", "064", 80, 232, 138, "Alakazam"), _
Array ("Alakazam", "065", 110, 271, 194, "Alakazam"), _
Array ("Machop", "066", 140, 137, 88, "Machamp"), _
Array ("Machoke", "067", 160, 177, 130, "Machamp"), _
Array ("Machamp", "068", 180, 234, 162, "Machamp"), _
Array ("Bellsprout", "069", 100, 139, 64, "Victreebel"), _
Array ("Weepinbell", "070", 130, 172, 95, "Victreebel"), _
Array ("Victreebel", "071", 160, 207, 138, "Victreebel"), _
Array ("Tentacool", "072", 80, 97, 182, "Tentacruel"), _
Array ("Tentacruel", "073", 160, 166, 237, "Tentacruel"), _
Array ("Geodude", "074", 80, 132, 163, "Golem"), _
Array ("Graveler", "075", 110, 164, 196, "Golem"), _
Array ("Golem", "076", 160, 211, 229, "Golem"), _
Array ("Ponyta", "077", 100, 170, 132, "Rapidash"), _
Array ("Rapidash", "078", 130, 207, 167, "Rapidash"), _
Array ("Slowpoke", "079", 180, 109, 109, "Slowbro"), _
Array ("Slowbro", "080", 190, 177, 194, "Slowbro"), _
Array ("Magnemite", "081", 50, 165, 128, "Magneton"), _
Array ("Magneton", "082", 100, 223, 182, "Magneton"), _
Array ("Farfetch'd", "083", 104, 124, 118, "Farfetch'd"), _
Array ("Doduo", "084", 70, 158, 88, "Dodrio"), _
Array ("Dodrio", "085", 120, 218, 145, "Dodrio"), _
Array ("Seel", "086", 130, 85, 128, "Dewgong"), _
Array ("Dewgong", "087", 180, 139, 184, "Dewgong"), _
Array ("Grimer", "088", 160, 135, 90, "Muk"), _
Array ("Muk", "089", 210, 190, 184, "Muk"), _
Array ("Shellder", "090", 60, 116, 168, "Cloyster"), _
Array ("Cloyster", "091", 100, 186, 323, "Cloyster"), _
Array ("Gastly", "092", 60, 186, 70, "Gengar"), _
Array ("Haunter", "093", 90, 223, 112, "Gengar"), _
Array ("Gengar", "094", 120, 261, 156, "Gengar"), _
Array ("Onix", "095", 70, 85, 288, "Onix"), _
Array ("Drowzee", "096", 120, 89, 158, "Hypno"), _
Array ("Hypno", "097", 170, 144, 215, "Hypno"), _
Array ("Krabby", "098", 60, 181, 156, "Kingler"), _
Array ("Kingler", "099", 110, 240, 214, "Kingler"), _
Array ("Voltorb", "100", 80, 109, 114, "Electrode"), _
Array ("Electrode", "101", 120, 173, 179, "Electrode"), _
Array ("Exeggcute", "102", 120, 107, 140, "Exeggutor"), _
Array ("Exeggutor", "103", 190, 233, 158, "Exeggutor"), _
Array ("Cubone", "104", 100, 90, 165, "Marowak"), _
Array ("Marowak", "105", 120, 144, 200, "Marowak"), _
Array ("Hitmonlee", "106", 100, 224, 211, "Hitmonlee"), _
Array ("Hitmonchan", "107", 100, 193, 212, "Hitmonchan"), _
Array ("Lickitung", "108", 180, 108, 137, "Lickitung"), _
Array ("Koffing", "109", 80, 119, 164, "Weezing"), _
Array ("Weezing", "110", 130, 174, 221, "Weezing"), _
Array ("Rhyhorn", "111", 160, 140, 157, "Rhydon"), _
Array ("Rhydon", "112", 210, 222, 206, "Rhydon"), _
Array ("Chansey", "113", 500, 60, 176, "Chansey"), _
Array ("Tangela", "114", 130, 183, 205, "Tangela"), _
Array ("Kangaskhan", "115", 210, 181, 165, "Kangaskhan"), _
Array ("Horsea", "116", 60, 129, 125, "Seadra"), _
Array ("Seadra", "117", 110, 187, 182, "Seadra"), _
Array ("Goldeen", "118", 90, 123, 115, "Seaking"), _
Array ("Seaking", "119", 160, 175, 154, "Seaking"), _
Array ("Staryu", "120", 60, 137, 112, "Starmie"), _
Array ("Starmie", "121", 120, 210, 184, "Starmie"), _
Array ("Mr. Mime", "122", 80, 192, 233, "Mr. Mime"), _
Array ("Scyther", "123", 140, 218, 170, "Scyther"), _
Array ("Jynx", "124", 130, 223, 182, "Jynx"), _
Array ("Electabuzz", "125", 130, 198, 173, "Electabuzz"), _
Array ("Magmar", "126", 130, 206, 169, "Magmar"), _
Array ("Pinsir", "127", 130, 238, 197, "Pinsir"), _
Array ("Tauros", "128", 150, 198, 197, "Tauros"), _
Array ("Magikarp", "129", 40, 29, 102, "Gyarados"), _
Array ("Gyarados", "130", 190, 237, 197, "Gyarados"), _
Array ("Lapras", "131", 260, 186, 190, "Lapras"), _
Array ("Ditto", "132", 96, 91, 91, "Ditto"), _
Array ("Eevee", "133", 110, 104, 121, "Vaporeon"), _
Array ("Vaporeon", "134", 260, 205, 177, "Vaporeon"), _
Array ("Jolteon", "135", 130, 232, 201, "Jolteon"), _
Array ("Flareon", "136", 130, 246, 204, "Flareon"), _
Array ("Porygon", "137", 130, 153, 139, "Porygon"), _
Array ("Omanyte", "138", 70, 155, 174, "Omastar"), _
Array ("Omastar", "139", 140, 207, 227, "Omastar"), _
Array ("Kabuto", "140", 60, 148, 162, "Kabutops"), _
Array ("Kabutops", "141", 120, 220, 203, "Kabutops"), _
Array ("Aerodactyl", "142", 160, 221, 164, "Aerodactyl"), _
Array ("Snorlax", "143", 320, 190, 190, "Snorlax"), _
Array ("Articuno", "144", 180, 192, 249, "Articuno"), _
Array ("Zapdos", "145", 180, 253, 188, "Zapdos"), _
Array ("Moltres", "146", 180, 251, 184, "Moltres"), _
Array ("Dratini", "147", 82, 119, 94, "Dragonite"), _
Array ("Dragonair", "148", 122, 163, 138, "Dragonite"), _
Array ("Dragonite", "149", 182, 263, 201, "Dragonite"), _
Array ("Mewtwo", "150", 212, 330, 200, "Mewtwo"), _
Array ("Mew", "151", 200, 210, 209, "Mew"))
Array ("Bulbasaur", "001", 90, 118, 118, Array ("Ivysaur", "Venusaur")), _
Array ("Ivysaur", "002", 120, 151, 151, Array ("Venusaur")), _
Array ("Venusaur", "003", 160, 198, 198, Array ()), _
Array ("Charmander", "004", 78, 116, 96, Array ("Charmeleon", "Charizard")), _
Array ("Charmeleon", "005", 116, 158, 129, Array ("Charizard")), _
Array ("Charizard", "006", 156, 223, 176, Array ()), _
Array ("Squirtle", "007", 88, 94, 122, Array ("Wartortle", "Blastoise")), _
Array ("Wartortle", "008", 118, 126, 155, Array ("Blastoise")), _
Array ("Blastoise", "009", 158, 171, 210, Array ()), _
Array ("Caterpie", "010", 90, 55, 62, Array ("Metapod", "Butterfree")), _
Array ("Metapod", "011", 100, 45, 64, Array ("Butterfree")), _
Array ("Butterfree", "012", 120, 167, 151, Array ()), _
Array ("Weedle", "013", 80, 63, 55, Array ("Kakuna", "Beedrill")), _
Array ("Kakuna", "014", 90, 46, 86, Array ("Beedrill")), _
Array ("Beedrill", "015", 130, 169, 150, Array ()), _
Array ("Pidgey", "016", 80, 85, 76, Array ("Pidgeotto", "Pidgeot")), _
Array ("Pidgeotto", "017", 126, 117, 108, Array ("Pidgeot")), _
Array ("Pidgeot", "018", 166, 166, 157, Array ()), _
Array ("Rattata", "019", 60, 103, 70, Array ("Raticate")), _
Array ("Raticate", "020", 110, 161, 144, Array ()), _
Array ("Spearow", "021", 80, 112, 61, Array ("Fearow")), _
Array ("Fearow", "022", 130, 182, 135, Array ()), _
Array ("Ekans", "023", 70, 110, 102, Array ("Arbok")), _
Array ("Arbok", "024", 120, 167, 158, Array ()), _
Array ("Pikachu", "025", 70, 112, 101, Array ("Raichu")), _
Array ("Raichu", "026", 120, 193, 165, Array ()), _
Array ("Sandshrew", "027", 100, 126, 145, Array ("Sandslash")), _
Array ("Sandslash", "028", 150, 182, 202, Array ()), _
Array ("Nidoran♀", "029", 110, 86, 94, Array ("Nidorina", "Nidoqueen")), _
Array ("Nidorina", "030", 140, 117, 126, Array ("Nidoqueen")), _
Array ("Nidoqueen", "031", 180, 180, 174, Array ()), _
Array ("Nidoran♂", "032", 92, 105, 76, Array ("Nidorino", "Nidoking")), _
Array ("Nidorino", "033", 122, 137, 112, Array ("Nidoking")), _
Array ("Nidoking", "034", 162, 204, 157, Array ()), _
Array ("Clefairy", "035", 140, 107, 116, Array ("Clefable")), _
Array ("Clefable", "036", 190, 178, 171, Array ()), _
Array ("Vulpix", "037", 76, 96, 122, Array ("Ninetales")), _
Array ("Ninetales", "038", 146, 169, 204, Array ()), _
Array ("Jigglypuff", "039", 230, 80, 44, Array ("Wigglytuff")), _
Array ("Wigglytuff", "040", 280, 156, 93, Array ()), _
Array ("Zubat", "041", 80, 83, 76, Array ("Golbat")), _
Array ("Golbat", "042", 150, 161, 153, Array ()), _
Array ("Oddish", "043", 90, 131, 116, Array ("Gloom", "Vileplume")), _
Array ("Gloom", "044", 120, 153, 139, Array ("Vileplume")), _
Array ("Vileplume", "045", 150, 202, 170, Array ()), _
Array ("Paras", "046", 70, 121, 99, Array ("Parasect")), _
Array ("Parasect", "047", 120, 165, 146, Array ()), _
Array ("Venonat", "048", 120, 100, 102, Array ("Venomoth")), _
Array ("Venomoth", "049", 140, 179, 150, Array ()), _
Array ("Diglett", "050", 20, 109, 88, Array ("Dugtrio")), _
Array ("Dugtrio", "051", 70, 167, 147, Array ()), _
Array ("Meowth", "052", 80, 92, 81, Array ("Persian")), _
Array ("Persian", "053", 130, 150, 139, Array ()), _
Array ("Psyduck", "054", 100, 122, 96, Array ("Golduck")), _
Array ("Golduck", "055", 160, 191, 163, Array ()), _
Array ("Mankey", "056", 80, 148, 87, Array ("Primeape")), _
Array ("Primeape", "057", 130, 207, 144, Array ()), _
Array ("Growlithe", "058", 110, 136, 96, Array ("Arcanine")), _
Array ("Arcanine", "059", 180, 227, 166, Array ()), _
Array ("Poliwag", "060", 80, 101, 82, Array ("Poliwhirl", "Poliwrath")), _
Array ("Poliwhirl", "061", 130, 130, 130, Array ("Poliwrath")), _
Array ("Poliwrath", "062", 180, 182, 187, Array ()), _
Array ("Abra", "063", 50, 195, 103, Array ("Kadabra", "Alakazam")), _
Array ("Kadabra", "064", 80, 232, 138, Array ("Alakazam")), _
Array ("Alakazam", "065", 110, 271, 194, Array ()), _
Array ("Machop", "066", 140, 137, 88, Array ("Machoke", "Machamp")), _
Array ("Machoke", "067", 160, 177, 130, Array ("Machamp")), _
Array ("Machamp", "068", 180, 234, 162, Array ()), _
Array ("Bellsprout", "069", 100, 139, 64, Array ("Weepinbell", "Victreebel")), _
Array ("Weepinbell", "070", 130, 172, 95, Array ("Victreebel")), _
Array ("Victreebel", "071", 160, 207, 138, Array ()), _
Array ("Tentacool", "072", 80, 97, 182, Array ("Tentacruel")), _
Array ("Tentacruel", "073", 160, 166, 237, Array ()), _
Array ("Geodude", "074", 80, 132, 163, Array ("Graveler", "Golem")), _
Array ("Graveler", "075", 110, 164, 196, Array ("Golem")), _
Array ("Golem", "076", 160, 211, 229, Array ()), _
Array ("Ponyta", "077", 100, 170, 132, Array ("Rapidash")), _
Array ("Rapidash", "078", 130, 207, 167, Array ()), _
Array ("Slowpoke", "079", 180, 109, 109, Array ("Slowbro")), _
Array ("Slowbro", "080", 190, 177, 194, Array ()), _
Array ("Magnemite", "081", 50, 165, 128, Array ("Magneton")), _
Array ("Magneton", "082", 100, 223, 182, Array ()), _
Array ("Farfetch'd", "083", 104, 124, 118, Array ()), _
Array ("Doduo", "084", 70, 158, 88, Array ("Dodrio")), _
Array ("Dodrio", "085", 120, 218, 145, Array ()), _
Array ("Seel", "086", 130, 85, 128, Array ("Dewgong")), _
Array ("Dewgong", "087", 180, 139, 184, Array ()), _
Array ("Grimer", "088", 160, 135, 90, Array ("Muk")), _
Array ("Muk", "089", 210, 190, 184, Array ()), _
Array ("Shellder", "090", 60, 116, 168, Array ("Cloyster")), _
Array ("Cloyster", "091", 100, 186, 323, Array ()), _
Array ("Gastly", "092", 60, 186, 70, Array ("Haunter", "Gengar")), _
Array ("Haunter", "093", 90, 223, 112, Array ("Gengar")), _
Array ("Gengar", "094", 120, 261, 156, Array ()), _
Array ("Onix", "095", 70, 85, 288, Array ()), _
Array ("Drowzee", "096", 120, 89, 158, Array ("Hypno")), _
Array ("Hypno", "097", 170, 144, 215, Array ()), _
Array ("Krabby", "098", 60, 181, 156, Array ("Kingler")), _
Array ("Kingler", "099", 110, 240, 214, Array ()), _
Array ("Voltorb", "100", 80, 109, 114, Array ("Electrode")), _
Array ("Electrode", "101", 120, 173, 179, Array ()), _
Array ("Exeggcute", "102", 120, 107, 140, Array ("Exeggutor")), _
Array ("Exeggutor", "103", 190, 233, 158, Array ()), _
Array ("Cubone", "104", 100, 90, 165, Array ("Marowak")), _
Array ("Marowak", "105", 120, 144, 200, Array ()), _
Array ("Hitmonlee", "106", 100, 224, 211, Array ()), _
Array ("Hitmonchan", "107", 100, 193, 212, Array ()), _
Array ("Lickitung", "108", 180, 108, 137, Array ()), _
Array ("Koffing", "109", 80, 119, 164, Array ("Weezing")), _
Array ("Weezing", "110", 130, 174, 221, Array ()), _
Array ("Rhyhorn", "111", 160, 140, 157, Array ("Rhydon")), _
Array ("Rhydon", "112", 210, 222, 206, Array ()), _
Array ("Chansey", "113", 500, 60, 176, Array ()), _
Array ("Tangela", "114", 130, 183, 205, Array ()), _
Array ("Kangaskhan", "115", 210, 181, 165, Array ()), _
Array ("Horsea", "116", 60, 129, 125, Array ("Seadra")), _
Array ("Seadra", "117", 110, 187, 182, Array ()), _
Array ("Goldeen", "118", 90, 123, 115, Array ("Seaking")), _
Array ("Seaking", "119", 160, 175, 154, Array ()), _
Array ("Staryu", "120", 60, 137, 112, Array ("Starmie")), _
Array ("Starmie", "121", 120, 210, 184, Array ()), _
Array ("Mr. Mime", "122", 80, 192, 233, Array ()), _
Array ("Scyther", "123", 140, 218, 170, Array ()), _
Array ("Jynx", "124", 130, 223, 182, Array ()), _
Array ("Electabuzz", "125", 130, 198, 173, Array ()), _
Array ("Magmar", "126", 130, 206, 169, Array ()), _
Array ("Pinsir", "127", 130, 238, 197, Array ()), _
Array ("Tauros", "128", 150, 198, 197, Array ()), _
Array ("Magikarp", "129", 40, 29, 102, Array ("Gyarados")), _
Array ("Gyarados", "130", 190, 237, 197, Array ()), _
Array ("Lapras", "131", 260, 186, 190, Array ()), _
Array ("Ditto", "132", 96, 91, 91, Array ()), _
Array ("Eevee", "133", 110, 104, 121, Array ("Vaporeon", "Jolteon", "Flareon")), _
Array ("Vaporeon", "134", 260, 205, 177, Array ()), _
Array ("Jolteon", "135", 130, 232, 201, Array ()), _
Array ("Flareon", "136", 130, 246, 204, Array ()), _
Array ("Porygon", "137", 130, 153, 139, Array ()), _
Array ("Omanyte", "138", 70, 155, 174, Array ("Omastar")), _
Array ("Omastar", "139", 140, 207, 227, Array ()), _
Array ("Kabuto", "140", 60, 148, 162, Array ("Kabutops")), _
Array ("Kabutops", "141", 120, 220, 203, Array ()), _
Array ("Aerodactyl", "142", 160, 221, 164, Array ()), _
Array ("Snorlax", "143", 320, 190, 190, Array ()), _
Array ("Articuno", "144", 180, 192, 249, Array ()), _
Array ("Zapdos", "145", 180, 253, 188, Array ()), _
Array ("Moltres", "146", 180, 251, 184, Array ()), _
Array ("Dratini", "147", 82, 119, 94, Array ("Dragonair", "Dragonite")), _
Array ("Dragonair", "148", 122, 163, 138, Array ("Dragonite")), _
Array ("Dragonite", "149", 182, 263, 201, Array ()), _
Array ("Mewtwo", "150", 212, 330, 200, Array ()), _
Array ("Mew", "151", 200, 210, 209, Array ()))
End Function
' fnGetCPMData: Returns the combat power multiplier data.

View File

@ -69,7 +69,8 @@ End Sub
Function fnReadBaseStatsSheet As String
Dim oSheet As Object, oRange As Object, mData As Variant
Dim nI As Integer, sOutput As String
Dim nJ As Integer, sEvolveInto As String
Dim nJ As Integer, nStart As Integer, nEnd As Integer
Dim sEvolveForms As String
oSheet = ThisComponent.getSheets.getByName ("basestat")
oRange = oSheet.getCellRangeByName ("BaseStats")
@ -80,38 +81,70 @@ Function fnReadBaseStatsSheet As String
& "Function fnGetBaseStatsData As Variant" & Chr (10) _
& Chr (9) & "fnGetBaseStatsData = Array( _" & Chr (10)
For nI = 1 To UBound (mData) - 1
For nJ = 8 To 6 Step -1
If mData (nI) (nJ) <> "" Then
sEvolveInto = mData (nI) (nJ)
nJ = 5
End If
Next nJ
sEvolveForms = fnFindEvolveForms (mData (nI))
sOutput = sOutput _
& Chr (9) & Chr (9) & "Array (""" & mData (nI) (0) _
& """, """ & mData (nI) (1) _
& """, " & mData (nI) (3) _
& ", " & mData (nI) (4) _
& ", " & mData (nI) (5) _
& ", """ & sEvolveInto & """), _" & Chr (10)
& ", " & sEvolveForms & "), _" & Chr (10)
Next nI
nI = UBound (mData)
For nJ = 8 To 6 Step -1
If mData (nI) (nJ) <> "" Then
sEvolveInto = mData (nI) (nJ)
nJ = 5
End If
Next nJ
sEvolveForms = fnFindEvolveForms (mData (nI))
sOutput = sOutput _
& Chr (9) & Chr (9) & "Array (""" & mData (nI) (0) _
& """, """ & mData (nI) (1) _
& """, " & mData (nI) (3) _
& ", " & mData (nI) (4) _
& ", " & mData (nI) (5) _
& ", """ & sEvolveInto & """))" & Chr (10) _
& ", " & sEvolveForms & "))" & Chr (10) _
& "End Function"
fnReadBaseStatsSheet = sOutput
End Function
Function fnFindEvolveForms (mData () As Variant) As String
Dim nJ As Integer, nStart As Integer, nEnd As Integer
Dim sEvolveForms As String
If mData (0) = "Eevee" Then
sEvolveForms = "Array (""Vaporeon"", ""Jolteon"", ""Flareon"")"
Else
For nJ = 6 To 8
If mData (nJ) = mData (0) Then
nStart = nJ + 1
nJ = 9
End If
Next nJ
If nStart = 9 Then
nEnd = 8
Else
For nJ = nStart To 8
If mData (nJ) = "" Then
nEnd = nJ - 1
nJ = 9
Else
If nJ = 8 Then
nEnd = 8
nJ = 9
End If
End If
Next nJ
End If
If nEnd = nStart - 1 Then
sEvolveForms = "Array ()"
Else
sEvolveForms = """" & mData (nStart) & """"
For nJ = nStart + 1 To nEnd
sEvolveForms = sEvolveForms _
& ", """ & mData (nJ) & """"
Next nJ
sEvolveForms = "Array (" & sEvolveForms & ")"
End If
End If
fnFindEvolveForms = sEvolveForms
End Function
' fnReadCPMSheet: Reads the combat power multiplier sheet.
Function fnReadCPMSheet As String
Dim oSheet As Object, oRange As Object, mData As Variant

3
TODO
View File

@ -1,6 +1,5 @@
PokemonGoIV TODO
* Show images of teams, team leaders and Pokémons.
* Error messages.
* Show images of teams, team leaders and Pokémons.
* Center the dialog.
* Multiple evolved forms.

View File

@ -14,9 +14,8 @@ Type aStats
nAttack As Integer
nDefense As Integer
nTotal As Integer
sEvolveInto As String
nEvolvedCP As Integer
nMaxCP As Integer
maEvolvedForms () As aEvolveForm
End Type
&apos; The amount of star dust to power-up.
@ -39,13 +38,19 @@ Type aFindIVParam
bIsCancelled As Boolean
End Type
Type aEvolveForm
sPokemon As String
nCP As Integer
nMaxCP As Integer
End Type
Private maBaseStats () As New aStats
Private mCPM () As Double, mStarDust () As Integer
&apos; subMain: The main program
Sub subMain
BasicLibraries.loadLibrary &quot;XrayTool&quot;
Dim maIVs As Variant, nI As Integer, sOutput As String
Dim maIVs As Variant, nI As Integer
Dim aQuery As New aFindIVParam, aBaseStats As New aStats
aQuery = fnAskParam
@ -53,25 +58,7 @@ Sub subMain
Exit Sub
End If
maIVs = fnFindIV (aQuery)
sOutput = &quot;&quot;
For nI = 0 To UBound (maIVs)
sOutput = sOutput _
&amp; &quot; Lv=&quot; &amp; maIVs (nI).fLevel _
&amp; &quot; Atk=&quot; &amp; maIVs (nI).nAttack _
&amp; &quot; Def=&quot; &amp; maIVs (nI).nDefense _
&amp; &quot; Sta=&quot; &amp; maIVs (nI).nStamina _
&amp; &quot; IV=&quot; &amp; fnFloor (maIVs (nI).nTotal * 100 / 45) &amp; &quot;%&quot;
If aQuery.sPokemon &lt;&gt; maIVs (nI).sEvolveInto Then
aBaseStats = fnGetBaseStats (maIVs (nI).sEvolveInto)
sOutput = sOutput &amp; &quot; Ev=&quot; &amp; maIVs (nI).sEvolveInto _
&amp; &quot; &quot; &amp; maIVs (nI).nEvolvedCP
End If
If aQuery.nPlayerLevel &lt;&gt; 0 Then
sOutput = sOutput &amp; &quot; XCP=&quot; &amp; maIVs (nI).nMaxCP
End If
sOutput = sOutput &amp; Chr (10)
Next nI
If sOutput = &quot;&quot; Then
If UBound (maIVs) = -1 Then
MsgBox &quot;Found no matching IV.&quot;
Else
subSaveIV (aQuery, maIVs)
@ -843,6 +830,7 @@ Function fnFindIV (aQuery As aFindIVParam) As Variant
Dim nI As Integer, nJ As Integer
Dim fStep As Double, nCount As Integer
Dim aEvBaseStats As new aStats, aTempIV As New aStats
Dim maEvolvedForms () As New aEvolveForm
If aQuery.sPokemon = &quot;&quot; Then
fnFindIV = maIV
@ -854,14 +842,10 @@ Function fnFindIV (aQuery As aFindIVParam) As Variant
fStep = 0.5
End If
aBaseStats = fnGetBaseStats (aQuery.sPokemon)
aEvBaseStats = fnGetBaseStats (aBaseStats.sEvolveInto)
subReadStarDust
nCount = -1
For fLevel = 1 To UBound (mStarDust) Step fStep
If mStarDust (CInt (fLevel - 0.5)) = aQuery.nStarDust Then
&apos;For nI = 0 To UBound (maStarDust) Step nStep
&apos; fLevel = maStarDust (nI).fLevel
&apos; If maStarDust (nI).nStarDust = aQuery.nStarDust Then
For nStamina = 0 To 15
If fnCalcHP (aBaseStats, fLevel, nStamina) = aQuery.nHP Then
For nAttack = 0 To 15
@ -878,14 +862,23 @@ Function fnFindIV (aQuery As aFindIVParam) As Variant
.nDefense = nDefense
.nStamina = nStamina
.nTotal = nAttack + nDefense + nStamina
.sEvolveInto = aBaseStats.sEvolveInto
.nEvolvedCP = fnCalcCP (aEvBaseStats, fLevel, nAttack, nDefense, nStamina)
End With
If aQuery.nPlayerLevel &lt;&gt; 0 Then
maIV (nCount).nMaxCP = fnCalcCP (aEvBaseStats, aQuery.nPlayerLevel + 1.5, nAttack, nDefense, nStamina)
maIV (nCount).nMaxCP = fnCalcCP (aBaseStats, aQuery.nPlayerLevel + 1.5, nAttack, nDefense, nStamina)
Else
maIV (nCount).nMaxCP = -1
End If
maIV (nCount).maEvolvedForms = fnGetEvolvedFormArray (UBound (aBaseStats.maEvolvedForms))
For nI = 0 To UBound (aBaseStats.maEvolvedForms)
maIV (nCount).maEvolvedForms (nI).sPokemon = aBaseStats.maEvolvedForms (nI).sPokemon
aEvBaseStats = fnGetBaseStats (aBaseStats.maEvolvedForms (nI).sPokemon)
maIV (nCount).maEvolvedForms (nI).nCP = fnCalcCP (aEvBaseStats, fLevel, nAttack, nDefense, nStamina)
If aQuery.nPlayerLevel &lt;&gt; 0 Then
maIV (nCount).maEvolvedForms (nI).nMaxCP = fnCalcCP (aEvBaseStats, aQuery.nPlayerLevel + 1.5, nAttack, nDefense, nStamina)
Else
maIV (nCount).maEvolvedForms (nI).nMaxCP = -1
End If
Next nI
End If
Next nDefense
Next nAttack
@ -908,14 +901,42 @@ End Function
&apos; fnCompareIV: Compare two IVs for sorting
Function fnCompareIV (aIVa As aStats, aIVb As aStats) As Double
fnCompareIV = aIVb.nMaxCP - aIVa.nMaxCP
Dim nCPa As Integer, nCPb As Integer, nI As Integer
nCPa = aIVa.nMaxCP
For nI = 0 To UBound (aIVa.maEvolvedForms)
If nCPa &lt; aIVa.maEvolvedForms (nI).nMaxCP Then
nCPa = aIVa.maEvolvedForms (nI).nMaxCP
End If
Next nI
nCPb = aIVb.nMaxCP
For nI = 0 To UBound (aIVb.maEvolvedForms)
If nCPb &lt; aIVb.maEvolvedForms (nI).nMaxCP Then
nCPb = aIVb.maEvolvedForms (nI).nMaxCP
End If
Next nI
fnCompareIV = nCPb - nCPa
If fnCompareIV &lt;&gt; 0 Then
Exit Function
End If
fnCompareIV = aIVb.nEvolvedCP - aIVa.nEvolvedCP
nCPa = 0
For nI = 0 To UBound (aIVa.maEvolvedForms)
If nCPa &lt; aIVa.maEvolvedForms (nI).nCP Then
nCPa = aIVa.maEvolvedForms (nI).nCP
End If
Next nI
nCPb = 0
For nI = 0 To UBound (aIVb.maEvolvedForms)
If nCPb &lt; aIVb.maEvolvedForms (nI).nCP Then
nCPb = aIVb.maEvolvedForms (nI).nCP
End If
Next nI
fnCompareIV = nCPb - nCPa
If fnCompareIV &lt;&gt; 0 Then
Exit Function
End If
fnCompareIV = aIVb.nTotal - aIVa.nTotal
If fnCompareIV &lt;&gt; 0 Then
Exit Function
@ -940,6 +961,8 @@ End Function
&apos; subCopyIV: Copies one IV to another
Function subCopyIV (aFrom As aStats, aTo As aStats) As Double
Dim nI As Integer, maEvolvedForms () As New aEvolveForm
With aTo
.sNo = aFrom.sNo
.sPokemon = aFrom.sPokemon
@ -948,40 +971,123 @@ Function subCopyIV (aFrom As aStats, aTo As aStats) As Double
.nDefense = aFrom.nDefense
.nStamina = aFrom.nStamina
.nTotal = aFrom.nTotal
.sEvolveInto = aFrom.sEvolveInto
.nEvolvedCP = aFrom.nEvolvedCP
.nMaxCP = aFrom.nMaxCP
End With
aTo.maEvolvedForms = fnGetEvolvedFormArray (UBound (aFrom.maEvolvedForms))
For nI = 0 To UBound (aFrom.maEvolvedForms)
With aTo.maEvolvedForms (nI)
.sPokemon = aFrom.maEvolvedForms (nI).sPokemon
.nCP = aFrom.maEvolvedForms (nI).nCP
.nMaxCP = aFrom.maEvolvedForms (nI).nMaxCP
End With
Next nI
End Function
&apos; subSaveIV: Saves the found IV
Sub subSaveIV (aQuery As aFindIVParam, maIVs () As aStats)
Dim oDoc As Object, oSheet As Object, oRange As Object
Dim nI As Integer, oColumns As Object
Dim mData (Ubound (maIVs) + 1) As Variant
Dim oDoc As Object, oSheet As Object
Dim oRange As Object, oColumns As Object, oRows As Object
Dim nI As Integer, nJ As Integer, nFrontCols As Integer
Dim mData (Ubound (maIVs) + 1) As Variant, mRow () As Variant
Dim mProps () As New com.sun.star.beans.PropertyValue
oDoc = StarDesktop.loadComponentFromURL ( _
&quot;private:factory/scalc&quot;, &quot;_default&quot;, 0, mProps)
oSheet = oDoc.getSheets.getByIndex (0)
mData (0) = Array ( _
&quot;No&quot;, &quot;Pokemon&quot;, &quot;CP&quot;, &quot;HP&quot;, _
&quot;Lv&quot;, &quot;Atk&quot;, &quot;Def&quot;, &quot;Sta&quot;, &quot;IV&quot;, _
&quot;Evolve Into&quot;, &quot;Evolved CP&quot;, &quot;Max CP&quot;)
mData (1) = Array ( _
maIVs (0).sNo, aQuery.sPokemon, aQuery.nCP, aQuery.nHP, _
maIVs (0).fLevel, maIVs (0).nAttack, maIVs (0).nDefense, _
maIVs (0).nStamina, maIVs (0).nTotal / 45, _
maIVs (0).sEvolveInto, maIVs (0).nEvolvedCP, _
maIVs (0).nMaxCP)
For nI = 1 To UBound (maIVs)
mData (nI + 1) = Array ( _
&quot;&quot;, &quot;&quot;, &quot;&quot;, &quot;&quot;, _
mRow = Array ( _
&quot;No&quot;, &quot;Pokemon&quot;, &quot;CP&quot;, &quot;HP&quot;, &quot;Star dust&quot;, _
&quot;Lv&quot;, &quot;Atk&quot;, &quot;Def&quot;, &quot;Sta&quot;, &quot;IV&quot;)
nFrontCols = UBound (mRow)
If aQuery.sPokemon = &quot;Eevee&quot; Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + 6) As Variant
mRow (nFrontCols + 1) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (0).sPokemon
mRow (nFrontCols + 2) = &quot;Powered-up as &quot; &amp; maIVs (0).maEvolvedForms (0).sPokemon
mRow (nFrontCols + 3) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (1).sPokemon
mRow (nFrontCols + 4) = &quot;Powered-up as &quot; &amp; maIVs (0).maEvolvedForms (1).sPokemon
mRow (nFrontCols + 5) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (2).sPokemon
mRow (nFrontCols + 6) = &quot;Powered-up as &quot; &amp; maIVs (0).maEvolvedForms (2).sPokemon
Else
ReDim Preserve mRow (nFrontCols + 3) As Variant
mRow (nFrontCols + 1) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (0).sPokemon
mRow (nFrontCols + 2) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (1).sPokemon
mRow (nFrontCols + 3) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (2).sPokemon
End If
Else
If UBound (maIVs (0).maEvolvedForms) = -1 Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + 1) As Variant
mRow (nFrontCols + 1) = &quot;Powered-up&quot;
End If
Else
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + UBound (maIVs (0).maEvolvedForms) + 2) As Variant
For nJ = 0 To UBound (maIVs (0).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (nJ).sPokemon
Next nJ
mRow (UBound (mRow)) = &quot;Powered-up as &quot; &amp; maIVs (0).maEvolvedForms (UBound (maIVs (0).maEvolvedForms)).sPokemon
Else
ReDim Preserve mRow (nFrontCols + UBound (maIVs (0).maEvolvedForms) + 1) As Variant
For nJ = 0 To UBound (maIVs (0).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = &quot;CP as &quot; &amp; maIVs (0).maEvolvedForms (nJ).sPokemon
Next nJ
End If
End If
End If
mData (0) = mRow
For nI = 0 To UBound (maIVs)
mRow = Array ( _
&quot;&quot;, &quot;&quot;, &quot;&quot;, &quot;&quot;, &quot;&quot;, _
maIVs (nI).fLevel, maIVs (nI).nAttack, maIVs (nI).nDefense, _
maIVs (nI).nStamina, maIVs (nI).nTotal / 45, _
maIVs (nI).sEvolveInto, maIVs (nI).nEvolvedCP, _
maIVs (nI).nMaxCP)
maIVs (nI).nStamina, maIVs (nI).nTotal / 45)
If aQuery.sPokemon = &quot;Eevee&quot; Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + 6) As Variant
mRow (nFrontCols + 1) = maIVs (nI).maEvolvedForms (0).nCP
mRow (nFrontCols + 2) = maIVs (nI).maEvolvedForms (0).nMaxCP
mRow (nFrontCols + 3) = maIVs (nI).maEvolvedForms (1).nCP
mRow (nFrontCols + 4) = maIVs (nI).maEvolvedForms (1).nMaxCP
mRow (nFrontCols + 5) = maIVs (nI).maEvolvedForms (2).nCP
mRow (nFrontCols + 6) = maIVs (nI).maEvolvedForms (2).nMaxCP
Else
ReDim Preserve mRow (nFrontCols + 3) As Variant
mRow (nFrontCols + 1) = maIVs (nI).maEvolvedForms (0).nCP
mRow (nFrontCols + 2) = maIVs (nI).maEvolvedForms (1).nCP
mRow (nFrontCols + 3) = maIVs (nI).maEvolvedForms (2).nCP
End If
Else
If UBound (maIVs (nI).maEvolvedForms) = -1 Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + 1) As Variant
mRow (nFrontCols + 1) = maIVs (nI).nMaxCP
End If
Else
If aQuery.nPlayerLevel &lt;&gt; 0 Then
ReDim Preserve mRow (nFrontCols + UBound (maIVs (nI).maEvolvedForms) + 2) As Variant
For nJ = 0 To UBound (maIVs (nI).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = maIVs (nI).maEvolvedForms (nJ).nCP
Next nJ
mRow (UBound (mRow)) = maIVs (nI).maEvolvedForms (UBound (maIVs (nI).maEvolvedForms)).nMaxCP
Else
ReDim Preserve mRow (nFrontCols + UBound (maIVs (nI).maEvolvedForms) + 1) As Variant
For nJ = 0 To UBound (maIVs (nI).maEvolvedForms)
mRow (nFrontCols + nJ + 1) = maIVs (nI).maEvolvedForms (nJ).nCP
Next nJ
End If
End If
End If
mData (nI + 1) = mRow
Next nI
&apos; Fills the query information at the first row
mData (1) (0) = maIVs (0).sNo
mData (1) (1) = aQuery.sPokemon
mData (1) (2) = aQuery.nCP
mData (1) (3) = aQuery.nHP
mData (1) (4) = aQuery.nStarDust
oRange = oSheet.getCellRangeByPosition ( _
0, 0, UBound (mData (0)), UBound (mData))
oRange.setDataArray (mData)
@ -1001,14 +1107,64 @@ Sub subSaveIV (aQuery As aFindIVParam, maIVs () As aStats)
3, 1, 3, UBound (mData))
oRange.merge (True)
oRange = oSheet.getCellRangeByPosition ( _
8, 1, 8, UBound (mData))
4, 1, 4, UBound (mData))
oRange.merge (True)
oRange = oSheet.getCellRangeByPosition ( _
9, 1, 9, UBound (mData))
oRange.setPropertyValue (&quot;NumberFormat&quot;, 10)
If aQuery.sPokemon = &quot;Eevee&quot; Then
oRange = oSheet.getCellRangeByPosition ( _
10, 0, 15, 0)
Else
If UBound (maIVs (0).maEvolvedForms) = -1 Then
oRange = oSheet.getCellRangeByPosition ( _
10, 0, 10, 0)
Else
oRange = oSheet.getCellRangeByPosition ( _
10, 0, 10 + UBound (maIVs (0).maEvolvedForms) + 2, 0)
End If
End If
oRange.setPropertyValue (&quot;IsTextWrapped&quot;, True)
oRows = oSheet.getRows
oRows.getByIndex (0).setPropertyValue (&quot;Height&quot;, 840)
oColumns = oSheet.getColumns
For nI = 0 To UBound (mData (0))
oColumns.getByIndex (nI).setPropertyValue ( _
&quot;OptimalWidth&quot;, True)
Next nI
oColumns.getByIndex (0).setPropertyValue (&quot;Width&quot;, 890)
oColumns.getByIndex (1).setPropertyValue (&quot;Width&quot;, 2310)
oColumns.getByIndex (2).setPropertyValue (&quot;Width&quot;, 890)
oColumns.getByIndex (3).setPropertyValue (&quot;Width&quot;, 890)
oColumns.getByIndex (4).setPropertyValue (&quot;Width&quot;, 1780)
oColumns.getByIndex (5).setPropertyValue (&quot;Width&quot;, 860)
oColumns.getByIndex (6).setPropertyValue (&quot;Width&quot;, 860)
oColumns.getByIndex (7).setPropertyValue (&quot;Width&quot;, 860)
oColumns.getByIndex (8).setPropertyValue (&quot;Width&quot;, 860)
oColumns.getByIndex (9).setPropertyValue (&quot;Width&quot;, 1030)
If aQuery.sPokemon = &quot;Eevee&quot; Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
For nI = 0 To 5 Step 2
oColumns.getByIndex (10 + nI).setPropertyValue (&quot;Width&quot;, 2310)
oColumns.getByIndex (10 + nI + 1).setPropertyValue (&quot;Width&quot;, 2810)
Next nI
Else
For nI = 0 To 2
oColumns.getByIndex (10 + nI).setPropertyValue (&quot;Width&quot;, 2310)
Next nI
End If
Else
If UBound (maIVs (0).maEvolvedForms) = -1 Then
If aQuery.nPlayerLevel &lt;&gt; 0 Then
oColumns.getByIndex (10).setPropertyValue (&quot;Width&quot;, 2200)
End If
Else
For nI = 0 To UBound (maIVs (0).maEvolvedForms)
oColumns.getByIndex (10 + nI).setPropertyValue (&quot;Width&quot;, 2310)
Next nI
If aQuery.nPlayerLevel &lt;&gt; 0 Then
oColumns.getByIndex (10 + UBound (maIVs (0).maEvolvedForms) + 1).setPropertyValue (&quot;Width&quot;, 2810)
End If
End If
End If
End Sub
&apos; fnFilterAppraisals: Filters the IV by the appraisals.
@ -1124,7 +1280,7 @@ End Function
&apos; subReadBaseStats: Reads the base stats table.
Sub subReadBaseStats
Dim mData As Variant, nI As Integer
Dim mData As Variant, nI As Integer, nJ As Integer
If UBound (maBaseStats) = -1 Then
mData = fnGetBaseStatsData
@ -1136,12 +1292,42 @@ Sub subReadBaseStats
.nStamina = mData (nI) (2)
.nAttack = mData (nI) (3)
.nDefense = mData (nI) (4)
.sEvolveInto = mData (nI) (5)
End With
maBaseStats (nI).maEvolvedForms = fnGetEvolvedFormArray (UBound (mData (nI) (5)))
For nJ = 0 To UBound (maBaseStats (nI).maEvolvedForms)
With maBaseStats (nI).maEvolvedForms (nJ)
.sPokemon = mData (nI) (5) (nJ)
.nCP = -1
.nMaxCP = -1
End With
Next nJ
Next nI
End If
End Sub
&apos; fnGetEvolvedFormArray: Obtains a blank aEvolveForm array
Function fnGetEvolvedFormArray (nUBound As Integer) As Variant
If nUBound = -1 Then
fnGetEvolvedFormArray = fnGetEmptyEvolvedFormArray
Else
fnGetEvolvedFormArray = fnGetNumberedEvolvedFormArray (nUBound)
End If
End Function
&apos; fnGetNumberedEvolvedFormArray: Obtains a numbered aEvolveForm array
Function fnGetNumberedEvolvedFormArray (nUBound As Integer) As Variant
Dim mData (nUBound) As New aEvolveForm
fnGetNumberedEvolvedFormArray = mData
End Function
&apos; fnGetEmptyEvolvedFormArray: Obtains an empty aEvolveForm array
Function fnGetEmptyEvolvedFormArray () As Variant
Dim mData () As New aEvolveForm
fnGetEmptyEvolvedFormArray = mData
End Function
&apos; subReadCPM: Reads the CPM table.
Sub subReadCPM
If UBound (mCPM) = -1 Then

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
<script:module xmlns:script="http://openoffice.org/2000/script" script:name="1Data" script:language="StarBasic">&apos; 1Data: The Pokémon GO data for IV calculation
&apos; by imacat &lt;imacat@mail.imacat.idv.tw&gt;, 2016-11-28
&apos; by imacat &lt;imacat@mail.imacat.idv.tw&gt;, 2016-12-06
&apos; Generated with 9Load.subReadDataSheets ()
Option Explicit
@ -9,157 +9,157 @@ Option Explicit
&apos; fnGetBaseStatsData: Returns the base stats data.
Function fnGetBaseStatsData As Variant
fnGetBaseStatsData = Array( _
Array (&quot;Bulbasaur&quot;, &quot;001&quot;, 90, 118, 118, &quot;Venusaur&quot;), _
Array (&quot;Ivysaur&quot;, &quot;002&quot;, 120, 151, 151, &quot;Venusaur&quot;), _
Array (&quot;Venusaur&quot;, &quot;003&quot;, 160, 198, 198, &quot;Venusaur&quot;), _
Array (&quot;Charmander&quot;, &quot;004&quot;, 78, 116, 96, &quot;Charizard&quot;), _
Array (&quot;Charmeleon&quot;, &quot;005&quot;, 116, 158, 129, &quot;Charizard&quot;), _
Array (&quot;Charizard&quot;, &quot;006&quot;, 156, 223, 176, &quot;Charizard&quot;), _
Array (&quot;Squirtle&quot;, &quot;007&quot;, 88, 94, 122, &quot;Blastoise&quot;), _
Array (&quot;Wartortle&quot;, &quot;008&quot;, 118, 126, 155, &quot;Blastoise&quot;), _
Array (&quot;Blastoise&quot;, &quot;009&quot;, 158, 171, 210, &quot;Blastoise&quot;), _
Array (&quot;Caterpie&quot;, &quot;010&quot;, 90, 55, 62, &quot;Butterfree&quot;), _
Array (&quot;Metapod&quot;, &quot;011&quot;, 100, 45, 64, &quot;Butterfree&quot;), _
Array (&quot;Butterfree&quot;, &quot;012&quot;, 120, 167, 151, &quot;Butterfree&quot;), _
Array (&quot;Weedle&quot;, &quot;013&quot;, 80, 63, 55, &quot;Beedrill&quot;), _
Array (&quot;Kakuna&quot;, &quot;014&quot;, 90, 46, 86, &quot;Beedrill&quot;), _
Array (&quot;Beedrill&quot;, &quot;015&quot;, 130, 169, 150, &quot;Beedrill&quot;), _
Array (&quot;Pidgey&quot;, &quot;016&quot;, 80, 85, 76, &quot;Pidgeot&quot;), _
Array (&quot;Pidgeotto&quot;, &quot;017&quot;, 126, 117, 108, &quot;Pidgeot&quot;), _
Array (&quot;Pidgeot&quot;, &quot;018&quot;, 166, 166, 157, &quot;Pidgeot&quot;), _
Array (&quot;Rattata&quot;, &quot;019&quot;, 60, 103, 70, &quot;Raticate&quot;), _
Array (&quot;Raticate&quot;, &quot;020&quot;, 110, 161, 144, &quot;Raticate&quot;), _
Array (&quot;Spearow&quot;, &quot;021&quot;, 80, 112, 61, &quot;Fearow&quot;), _
Array (&quot;Fearow&quot;, &quot;022&quot;, 130, 182, 135, &quot;Fearow&quot;), _
Array (&quot;Ekans&quot;, &quot;023&quot;, 70, 110, 102, &quot;Arbok&quot;), _
Array (&quot;Arbok&quot;, &quot;024&quot;, 120, 167, 158, &quot;Arbok&quot;), _
Array (&quot;Pikachu&quot;, &quot;025&quot;, 70, 112, 101, &quot;Raichu&quot;), _
Array (&quot;Raichu&quot;, &quot;026&quot;, 120, 193, 165, &quot;Raichu&quot;), _
Array (&quot;Sandshrew&quot;, &quot;027&quot;, 100, 126, 145, &quot;Sandslash&quot;), _
Array (&quot;Sandslash&quot;, &quot;028&quot;, 150, 182, 202, &quot;Sandslash&quot;), _
Array (&quot;Nidoran♀&quot;, &quot;029&quot;, 110, 86, 94, &quot;Nidoqueen&quot;), _
Array (&quot;Nidorina&quot;, &quot;030&quot;, 140, 117, 126, &quot;Nidoqueen&quot;), _
Array (&quot;Nidoqueen&quot;, &quot;031&quot;, 180, 180, 174, &quot;Nidoqueen&quot;), _
Array (&quot;Nidoran♂&quot;, &quot;032&quot;, 92, 105, 76, &quot;Nidoking&quot;), _
Array (&quot;Nidorino&quot;, &quot;033&quot;, 122, 137, 112, &quot;Nidoking&quot;), _
Array (&quot;Nidoking&quot;, &quot;034&quot;, 162, 204, 157, &quot;Nidoking&quot;), _
Array (&quot;Clefairy&quot;, &quot;035&quot;, 140, 107, 116, &quot;Clefable&quot;), _
Array (&quot;Clefable&quot;, &quot;036&quot;, 190, 178, 171, &quot;Clefable&quot;), _
Array (&quot;Vulpix&quot;, &quot;037&quot;, 76, 96, 122, &quot;Ninetales&quot;), _
Array (&quot;Ninetales&quot;, &quot;038&quot;, 146, 169, 204, &quot;Ninetales&quot;), _
Array (&quot;Jigglypuff&quot;, &quot;039&quot;, 230, 80, 44, &quot;Wigglytuff&quot;), _
Array (&quot;Wigglytuff&quot;, &quot;040&quot;, 280, 156, 93, &quot;Wigglytuff&quot;), _
Array (&quot;Zubat&quot;, &quot;041&quot;, 80, 83, 76, &quot;Golbat&quot;), _
Array (&quot;Golbat&quot;, &quot;042&quot;, 150, 161, 153, &quot;Golbat&quot;), _
Array (&quot;Oddish&quot;, &quot;043&quot;, 90, 131, 116, &quot;Vileplume&quot;), _
Array (&quot;Gloom&quot;, &quot;044&quot;, 120, 153, 139, &quot;Vileplume&quot;), _
Array (&quot;Vileplume&quot;, &quot;045&quot;, 150, 202, 170, &quot;Vileplume&quot;), _
Array (&quot;Paras&quot;, &quot;046&quot;, 70, 121, 99, &quot;Parasect&quot;), _
Array (&quot;Parasect&quot;, &quot;047&quot;, 120, 165, 146, &quot;Parasect&quot;), _
Array (&quot;Venonat&quot;, &quot;048&quot;, 120, 100, 102, &quot;Venomoth&quot;), _
Array (&quot;Venomoth&quot;, &quot;049&quot;, 140, 179, 150, &quot;Venomoth&quot;), _
Array (&quot;Diglett&quot;, &quot;050&quot;, 20, 109, 88, &quot;Dugtrio&quot;), _
Array (&quot;Dugtrio&quot;, &quot;051&quot;, 70, 167, 147, &quot;Dugtrio&quot;), _
Array (&quot;Meowth&quot;, &quot;052&quot;, 80, 92, 81, &quot;Persian&quot;), _
Array (&quot;Persian&quot;, &quot;053&quot;, 130, 150, 139, &quot;Persian&quot;), _
Array (&quot;Psyduck&quot;, &quot;054&quot;, 100, 122, 96, &quot;Golduck&quot;), _
Array (&quot;Golduck&quot;, &quot;055&quot;, 160, 191, 163, &quot;Golduck&quot;), _
Array (&quot;Mankey&quot;, &quot;056&quot;, 80, 148, 87, &quot;Primeape&quot;), _
Array (&quot;Primeape&quot;, &quot;057&quot;, 130, 207, 144, &quot;Primeape&quot;), _
Array (&quot;Growlithe&quot;, &quot;058&quot;, 110, 136, 96, &quot;Arcanine&quot;), _
Array (&quot;Arcanine&quot;, &quot;059&quot;, 180, 227, 166, &quot;Arcanine&quot;), _
Array (&quot;Poliwag&quot;, &quot;060&quot;, 80, 101, 82, &quot;Poliwrath&quot;), _
Array (&quot;Poliwhirl&quot;, &quot;061&quot;, 130, 130, 130, &quot;Poliwrath&quot;), _
Array (&quot;Poliwrath&quot;, &quot;062&quot;, 180, 182, 187, &quot;Poliwrath&quot;), _
Array (&quot;Abra&quot;, &quot;063&quot;, 50, 195, 103, &quot;Alakazam&quot;), _
Array (&quot;Kadabra&quot;, &quot;064&quot;, 80, 232, 138, &quot;Alakazam&quot;), _
Array (&quot;Alakazam&quot;, &quot;065&quot;, 110, 271, 194, &quot;Alakazam&quot;), _
Array (&quot;Machop&quot;, &quot;066&quot;, 140, 137, 88, &quot;Machamp&quot;), _
Array (&quot;Machoke&quot;, &quot;067&quot;, 160, 177, 130, &quot;Machamp&quot;), _
Array (&quot;Machamp&quot;, &quot;068&quot;, 180, 234, 162, &quot;Machamp&quot;), _
Array (&quot;Bellsprout&quot;, &quot;069&quot;, 100, 139, 64, &quot;Victreebel&quot;), _
Array (&quot;Weepinbell&quot;, &quot;070&quot;, 130, 172, 95, &quot;Victreebel&quot;), _
Array (&quot;Victreebel&quot;, &quot;071&quot;, 160, 207, 138, &quot;Victreebel&quot;), _
Array (&quot;Tentacool&quot;, &quot;072&quot;, 80, 97, 182, &quot;Tentacruel&quot;), _
Array (&quot;Tentacruel&quot;, &quot;073&quot;, 160, 166, 237, &quot;Tentacruel&quot;), _
Array (&quot;Geodude&quot;, &quot;074&quot;, 80, 132, 163, &quot;Golem&quot;), _
Array (&quot;Graveler&quot;, &quot;075&quot;, 110, 164, 196, &quot;Golem&quot;), _
Array (&quot;Golem&quot;, &quot;076&quot;, 160, 211, 229, &quot;Golem&quot;), _
Array (&quot;Ponyta&quot;, &quot;077&quot;, 100, 170, 132, &quot;Rapidash&quot;), _
Array (&quot;Rapidash&quot;, &quot;078&quot;, 130, 207, 167, &quot;Rapidash&quot;), _
Array (&quot;Slowpoke&quot;, &quot;079&quot;, 180, 109, 109, &quot;Slowbro&quot;), _
Array (&quot;Slowbro&quot;, &quot;080&quot;, 190, 177, 194, &quot;Slowbro&quot;), _
Array (&quot;Magnemite&quot;, &quot;081&quot;, 50, 165, 128, &quot;Magneton&quot;), _
Array (&quot;Magneton&quot;, &quot;082&quot;, 100, 223, 182, &quot;Magneton&quot;), _
Array (&quot;Farfetch&apos;d&quot;, &quot;083&quot;, 104, 124, 118, &quot;Farfetch&apos;d&quot;), _
Array (&quot;Doduo&quot;, &quot;084&quot;, 70, 158, 88, &quot;Dodrio&quot;), _
Array (&quot;Dodrio&quot;, &quot;085&quot;, 120, 218, 145, &quot;Dodrio&quot;), _
Array (&quot;Seel&quot;, &quot;086&quot;, 130, 85, 128, &quot;Dewgong&quot;), _
Array (&quot;Dewgong&quot;, &quot;087&quot;, 180, 139, 184, &quot;Dewgong&quot;), _
Array (&quot;Grimer&quot;, &quot;088&quot;, 160, 135, 90, &quot;Muk&quot;), _
Array (&quot;Muk&quot;, &quot;089&quot;, 210, 190, 184, &quot;Muk&quot;), _
Array (&quot;Shellder&quot;, &quot;090&quot;, 60, 116, 168, &quot;Cloyster&quot;), _
Array (&quot;Cloyster&quot;, &quot;091&quot;, 100, 186, 323, &quot;Cloyster&quot;), _
Array (&quot;Gastly&quot;, &quot;092&quot;, 60, 186, 70, &quot;Gengar&quot;), _
Array (&quot;Haunter&quot;, &quot;093&quot;, 90, 223, 112, &quot;Gengar&quot;), _
Array (&quot;Gengar&quot;, &quot;094&quot;, 120, 261, 156, &quot;Gengar&quot;), _
Array (&quot;Onix&quot;, &quot;095&quot;, 70, 85, 288, &quot;Onix&quot;), _
Array (&quot;Drowzee&quot;, &quot;096&quot;, 120, 89, 158, &quot;Hypno&quot;), _
Array (&quot;Hypno&quot;, &quot;097&quot;, 170, 144, 215, &quot;Hypno&quot;), _
Array (&quot;Krabby&quot;, &quot;098&quot;, 60, 181, 156, &quot;Kingler&quot;), _
Array (&quot;Kingler&quot;, &quot;099&quot;, 110, 240, 214, &quot;Kingler&quot;), _
Array (&quot;Voltorb&quot;, &quot;100&quot;, 80, 109, 114, &quot;Electrode&quot;), _
Array (&quot;Electrode&quot;, &quot;101&quot;, 120, 173, 179, &quot;Electrode&quot;), _
Array (&quot;Exeggcute&quot;, &quot;102&quot;, 120, 107, 140, &quot;Exeggutor&quot;), _
Array (&quot;Exeggutor&quot;, &quot;103&quot;, 190, 233, 158, &quot;Exeggutor&quot;), _
Array (&quot;Cubone&quot;, &quot;104&quot;, 100, 90, 165, &quot;Marowak&quot;), _
Array (&quot;Marowak&quot;, &quot;105&quot;, 120, 144, 200, &quot;Marowak&quot;), _
Array (&quot;Hitmonlee&quot;, &quot;106&quot;, 100, 224, 211, &quot;Hitmonlee&quot;), _
Array (&quot;Hitmonchan&quot;, &quot;107&quot;, 100, 193, 212, &quot;Hitmonchan&quot;), _
Array (&quot;Lickitung&quot;, &quot;108&quot;, 180, 108, 137, &quot;Lickitung&quot;), _
Array (&quot;Koffing&quot;, &quot;109&quot;, 80, 119, 164, &quot;Weezing&quot;), _
Array (&quot;Weezing&quot;, &quot;110&quot;, 130, 174, 221, &quot;Weezing&quot;), _
Array (&quot;Rhyhorn&quot;, &quot;111&quot;, 160, 140, 157, &quot;Rhydon&quot;), _
Array (&quot;Rhydon&quot;, &quot;112&quot;, 210, 222, 206, &quot;Rhydon&quot;), _
Array (&quot;Chansey&quot;, &quot;113&quot;, 500, 60, 176, &quot;Chansey&quot;), _
Array (&quot;Tangela&quot;, &quot;114&quot;, 130, 183, 205, &quot;Tangela&quot;), _
Array (&quot;Kangaskhan&quot;, &quot;115&quot;, 210, 181, 165, &quot;Kangaskhan&quot;), _
Array (&quot;Horsea&quot;, &quot;116&quot;, 60, 129, 125, &quot;Seadra&quot;), _
Array (&quot;Seadra&quot;, &quot;117&quot;, 110, 187, 182, &quot;Seadra&quot;), _
Array (&quot;Goldeen&quot;, &quot;118&quot;, 90, 123, 115, &quot;Seaking&quot;), _
Array (&quot;Seaking&quot;, &quot;119&quot;, 160, 175, 154, &quot;Seaking&quot;), _
Array (&quot;Staryu&quot;, &quot;120&quot;, 60, 137, 112, &quot;Starmie&quot;), _
Array (&quot;Starmie&quot;, &quot;121&quot;, 120, 210, 184, &quot;Starmie&quot;), _
Array (&quot;Mr. Mime&quot;, &quot;122&quot;, 80, 192, 233, &quot;Mr. Mime&quot;), _
Array (&quot;Scyther&quot;, &quot;123&quot;, 140, 218, 170, &quot;Scyther&quot;), _
Array (&quot;Jynx&quot;, &quot;124&quot;, 130, 223, 182, &quot;Jynx&quot;), _
Array (&quot;Electabuzz&quot;, &quot;125&quot;, 130, 198, 173, &quot;Electabuzz&quot;), _
Array (&quot;Magmar&quot;, &quot;126&quot;, 130, 206, 169, &quot;Magmar&quot;), _
Array (&quot;Pinsir&quot;, &quot;127&quot;, 130, 238, 197, &quot;Pinsir&quot;), _
Array (&quot;Tauros&quot;, &quot;128&quot;, 150, 198, 197, &quot;Tauros&quot;), _
Array (&quot;Magikarp&quot;, &quot;129&quot;, 40, 29, 102, &quot;Gyarados&quot;), _
Array (&quot;Gyarados&quot;, &quot;130&quot;, 190, 237, 197, &quot;Gyarados&quot;), _
Array (&quot;Lapras&quot;, &quot;131&quot;, 260, 186, 190, &quot;Lapras&quot;), _
Array (&quot;Ditto&quot;, &quot;132&quot;, 96, 91, 91, &quot;Ditto&quot;), _
Array (&quot;Eevee&quot;, &quot;133&quot;, 110, 104, 121, &quot;Vaporeon&quot;), _
Array (&quot;Vaporeon&quot;, &quot;134&quot;, 260, 205, 177, &quot;Vaporeon&quot;), _
Array (&quot;Jolteon&quot;, &quot;135&quot;, 130, 232, 201, &quot;Jolteon&quot;), _
Array (&quot;Flareon&quot;, &quot;136&quot;, 130, 246, 204, &quot;Flareon&quot;), _
Array (&quot;Porygon&quot;, &quot;137&quot;, 130, 153, 139, &quot;Porygon&quot;), _
Array (&quot;Omanyte&quot;, &quot;138&quot;, 70, 155, 174, &quot;Omastar&quot;), _
Array (&quot;Omastar&quot;, &quot;139&quot;, 140, 207, 227, &quot;Omastar&quot;), _
Array (&quot;Kabuto&quot;, &quot;140&quot;, 60, 148, 162, &quot;Kabutops&quot;), _
Array (&quot;Kabutops&quot;, &quot;141&quot;, 120, 220, 203, &quot;Kabutops&quot;), _
Array (&quot;Aerodactyl&quot;, &quot;142&quot;, 160, 221, 164, &quot;Aerodactyl&quot;), _
Array (&quot;Snorlax&quot;, &quot;143&quot;, 320, 190, 190, &quot;Snorlax&quot;), _
Array (&quot;Articuno&quot;, &quot;144&quot;, 180, 192, 249, &quot;Articuno&quot;), _
Array (&quot;Zapdos&quot;, &quot;145&quot;, 180, 253, 188, &quot;Zapdos&quot;), _
Array (&quot;Moltres&quot;, &quot;146&quot;, 180, 251, 184, &quot;Moltres&quot;), _
Array (&quot;Dratini&quot;, &quot;147&quot;, 82, 119, 94, &quot;Dragonite&quot;), _
Array (&quot;Dragonair&quot;, &quot;148&quot;, 122, 163, 138, &quot;Dragonite&quot;), _
Array (&quot;Dragonite&quot;, &quot;149&quot;, 182, 263, 201, &quot;Dragonite&quot;), _
Array (&quot;Mewtwo&quot;, &quot;150&quot;, 212, 330, 200, &quot;Mewtwo&quot;), _
Array (&quot;Mew&quot;, &quot;151&quot;, 200, 210, 209, &quot;Mew&quot;))
Array (&quot;Bulbasaur&quot;, &quot;001&quot;, 90, 118, 118, Array (&quot;Ivysaur&quot;, &quot;Venusaur&quot;)), _
Array (&quot;Ivysaur&quot;, &quot;002&quot;, 120, 151, 151, Array (&quot;Venusaur&quot;)), _
Array (&quot;Venusaur&quot;, &quot;003&quot;, 160, 198, 198, Array ()), _
Array (&quot;Charmander&quot;, &quot;004&quot;, 78, 116, 96, Array (&quot;Charmeleon&quot;, &quot;Charizard&quot;)), _
Array (&quot;Charmeleon&quot;, &quot;005&quot;, 116, 158, 129, Array (&quot;Charizard&quot;)), _
Array (&quot;Charizard&quot;, &quot;006&quot;, 156, 223, 176, Array ()), _
Array (&quot;Squirtle&quot;, &quot;007&quot;, 88, 94, 122, Array (&quot;Wartortle&quot;, &quot;Blastoise&quot;)), _
Array (&quot;Wartortle&quot;, &quot;008&quot;, 118, 126, 155, Array (&quot;Blastoise&quot;)), _
Array (&quot;Blastoise&quot;, &quot;009&quot;, 158, 171, 210, Array ()), _
Array (&quot;Caterpie&quot;, &quot;010&quot;, 90, 55, 62, Array (&quot;Metapod&quot;, &quot;Butterfree&quot;)), _
Array (&quot;Metapod&quot;, &quot;011&quot;, 100, 45, 64, Array (&quot;Butterfree&quot;)), _
Array (&quot;Butterfree&quot;, &quot;012&quot;, 120, 167, 151, Array ()), _
Array (&quot;Weedle&quot;, &quot;013&quot;, 80, 63, 55, Array (&quot;Kakuna&quot;, &quot;Beedrill&quot;)), _
Array (&quot;Kakuna&quot;, &quot;014&quot;, 90, 46, 86, Array (&quot;Beedrill&quot;)), _
Array (&quot;Beedrill&quot;, &quot;015&quot;, 130, 169, 150, Array ()), _
Array (&quot;Pidgey&quot;, &quot;016&quot;, 80, 85, 76, Array (&quot;Pidgeotto&quot;, &quot;Pidgeot&quot;)), _
Array (&quot;Pidgeotto&quot;, &quot;017&quot;, 126, 117, 108, Array (&quot;Pidgeot&quot;)), _
Array (&quot;Pidgeot&quot;, &quot;018&quot;, 166, 166, 157, Array ()), _
Array (&quot;Rattata&quot;, &quot;019&quot;, 60, 103, 70, Array (&quot;Raticate&quot;)), _
Array (&quot;Raticate&quot;, &quot;020&quot;, 110, 161, 144, Array ()), _
Array (&quot;Spearow&quot;, &quot;021&quot;, 80, 112, 61, Array (&quot;Fearow&quot;)), _
Array (&quot;Fearow&quot;, &quot;022&quot;, 130, 182, 135, Array ()), _
Array (&quot;Ekans&quot;, &quot;023&quot;, 70, 110, 102, Array (&quot;Arbok&quot;)), _
Array (&quot;Arbok&quot;, &quot;024&quot;, 120, 167, 158, Array ()), _
Array (&quot;Pikachu&quot;, &quot;025&quot;, 70, 112, 101, Array (&quot;Raichu&quot;)), _
Array (&quot;Raichu&quot;, &quot;026&quot;, 120, 193, 165, Array ()), _
Array (&quot;Sandshrew&quot;, &quot;027&quot;, 100, 126, 145, Array (&quot;Sandslash&quot;)), _
Array (&quot;Sandslash&quot;, &quot;028&quot;, 150, 182, 202, Array ()), _
Array (&quot;Nidoran♀&quot;, &quot;029&quot;, 110, 86, 94, Array (&quot;Nidorina&quot;, &quot;Nidoqueen&quot;)), _
Array (&quot;Nidorina&quot;, &quot;030&quot;, 140, 117, 126, Array (&quot;Nidoqueen&quot;)), _
Array (&quot;Nidoqueen&quot;, &quot;031&quot;, 180, 180, 174, Array ()), _
Array (&quot;Nidoran♂&quot;, &quot;032&quot;, 92, 105, 76, Array (&quot;Nidorino&quot;, &quot;Nidoking&quot;)), _
Array (&quot;Nidorino&quot;, &quot;033&quot;, 122, 137, 112, Array (&quot;Nidoking&quot;)), _
Array (&quot;Nidoking&quot;, &quot;034&quot;, 162, 204, 157, Array ()), _
Array (&quot;Clefairy&quot;, &quot;035&quot;, 140, 107, 116, Array (&quot;Clefable&quot;)), _
Array (&quot;Clefable&quot;, &quot;036&quot;, 190, 178, 171, Array ()), _
Array (&quot;Vulpix&quot;, &quot;037&quot;, 76, 96, 122, Array (&quot;Ninetales&quot;)), _
Array (&quot;Ninetales&quot;, &quot;038&quot;, 146, 169, 204, Array ()), _
Array (&quot;Jigglypuff&quot;, &quot;039&quot;, 230, 80, 44, Array (&quot;Wigglytuff&quot;)), _
Array (&quot;Wigglytuff&quot;, &quot;040&quot;, 280, 156, 93, Array ()), _
Array (&quot;Zubat&quot;, &quot;041&quot;, 80, 83, 76, Array (&quot;Golbat&quot;)), _
Array (&quot;Golbat&quot;, &quot;042&quot;, 150, 161, 153, Array ()), _
Array (&quot;Oddish&quot;, &quot;043&quot;, 90, 131, 116, Array (&quot;Gloom&quot;, &quot;Vileplume&quot;)), _
Array (&quot;Gloom&quot;, &quot;044&quot;, 120, 153, 139, Array (&quot;Vileplume&quot;)), _
Array (&quot;Vileplume&quot;, &quot;045&quot;, 150, 202, 170, Array ()), _
Array (&quot;Paras&quot;, &quot;046&quot;, 70, 121, 99, Array (&quot;Parasect&quot;)), _
Array (&quot;Parasect&quot;, &quot;047&quot;, 120, 165, 146, Array ()), _
Array (&quot;Venonat&quot;, &quot;048&quot;, 120, 100, 102, Array (&quot;Venomoth&quot;)), _
Array (&quot;Venomoth&quot;, &quot;049&quot;, 140, 179, 150, Array ()), _
Array (&quot;Diglett&quot;, &quot;050&quot;, 20, 109, 88, Array (&quot;Dugtrio&quot;)), _
Array (&quot;Dugtrio&quot;, &quot;051&quot;, 70, 167, 147, Array ()), _
Array (&quot;Meowth&quot;, &quot;052&quot;, 80, 92, 81, Array (&quot;Persian&quot;)), _
Array (&quot;Persian&quot;, &quot;053&quot;, 130, 150, 139, Array ()), _
Array (&quot;Psyduck&quot;, &quot;054&quot;, 100, 122, 96, Array (&quot;Golduck&quot;)), _
Array (&quot;Golduck&quot;, &quot;055&quot;, 160, 191, 163, Array ()), _
Array (&quot;Mankey&quot;, &quot;056&quot;, 80, 148, 87, Array (&quot;Primeape&quot;)), _
Array (&quot;Primeape&quot;, &quot;057&quot;, 130, 207, 144, Array ()), _
Array (&quot;Growlithe&quot;, &quot;058&quot;, 110, 136, 96, Array (&quot;Arcanine&quot;)), _
Array (&quot;Arcanine&quot;, &quot;059&quot;, 180, 227, 166, Array ()), _
Array (&quot;Poliwag&quot;, &quot;060&quot;, 80, 101, 82, Array (&quot;Poliwhirl&quot;, &quot;Poliwrath&quot;)), _
Array (&quot;Poliwhirl&quot;, &quot;061&quot;, 130, 130, 130, Array (&quot;Poliwrath&quot;)), _
Array (&quot;Poliwrath&quot;, &quot;062&quot;, 180, 182, 187, Array ()), _
Array (&quot;Abra&quot;, &quot;063&quot;, 50, 195, 103, Array (&quot;Kadabra&quot;, &quot;Alakazam&quot;)), _
Array (&quot;Kadabra&quot;, &quot;064&quot;, 80, 232, 138, Array (&quot;Alakazam&quot;)), _
Array (&quot;Alakazam&quot;, &quot;065&quot;, 110, 271, 194, Array ()), _
Array (&quot;Machop&quot;, &quot;066&quot;, 140, 137, 88, Array (&quot;Machoke&quot;, &quot;Machamp&quot;)), _
Array (&quot;Machoke&quot;, &quot;067&quot;, 160, 177, 130, Array (&quot;Machamp&quot;)), _
Array (&quot;Machamp&quot;, &quot;068&quot;, 180, 234, 162, Array ()), _
Array (&quot;Bellsprout&quot;, &quot;069&quot;, 100, 139, 64, Array (&quot;Weepinbell&quot;, &quot;Victreebel&quot;)), _
Array (&quot;Weepinbell&quot;, &quot;070&quot;, 130, 172, 95, Array (&quot;Victreebel&quot;)), _
Array (&quot;Victreebel&quot;, &quot;071&quot;, 160, 207, 138, Array ()), _
Array (&quot;Tentacool&quot;, &quot;072&quot;, 80, 97, 182, Array (&quot;Tentacruel&quot;)), _
Array (&quot;Tentacruel&quot;, &quot;073&quot;, 160, 166, 237, Array ()), _
Array (&quot;Geodude&quot;, &quot;074&quot;, 80, 132, 163, Array (&quot;Graveler&quot;, &quot;Golem&quot;)), _
Array (&quot;Graveler&quot;, &quot;075&quot;, 110, 164, 196, Array (&quot;Golem&quot;)), _
Array (&quot;Golem&quot;, &quot;076&quot;, 160, 211, 229, Array ()), _
Array (&quot;Ponyta&quot;, &quot;077&quot;, 100, 170, 132, Array (&quot;Rapidash&quot;)), _
Array (&quot;Rapidash&quot;, &quot;078&quot;, 130, 207, 167, Array ()), _
Array (&quot;Slowpoke&quot;, &quot;079&quot;, 180, 109, 109, Array (&quot;Slowbro&quot;)), _
Array (&quot;Slowbro&quot;, &quot;080&quot;, 190, 177, 194, Array ()), _
Array (&quot;Magnemite&quot;, &quot;081&quot;, 50, 165, 128, Array (&quot;Magneton&quot;)), _
Array (&quot;Magneton&quot;, &quot;082&quot;, 100, 223, 182, Array ()), _
Array (&quot;Farfetch&apos;d&quot;, &quot;083&quot;, 104, 124, 118, Array ()), _
Array (&quot;Doduo&quot;, &quot;084&quot;, 70, 158, 88, Array (&quot;Dodrio&quot;)), _
Array (&quot;Dodrio&quot;, &quot;085&quot;, 120, 218, 145, Array ()), _
Array (&quot;Seel&quot;, &quot;086&quot;, 130, 85, 128, Array (&quot;Dewgong&quot;)), _
Array (&quot;Dewgong&quot;, &quot;087&quot;, 180, 139, 184, Array ()), _
Array (&quot;Grimer&quot;, &quot;088&quot;, 160, 135, 90, Array (&quot;Muk&quot;)), _
Array (&quot;Muk&quot;, &quot;089&quot;, 210, 190, 184, Array ()), _
Array (&quot;Shellder&quot;, &quot;090&quot;, 60, 116, 168, Array (&quot;Cloyster&quot;)), _
Array (&quot;Cloyster&quot;, &quot;091&quot;, 100, 186, 323, Array ()), _
Array (&quot;Gastly&quot;, &quot;092&quot;, 60, 186, 70, Array (&quot;Haunter&quot;, &quot;Gengar&quot;)), _
Array (&quot;Haunter&quot;, &quot;093&quot;, 90, 223, 112, Array (&quot;Gengar&quot;)), _
Array (&quot;Gengar&quot;, &quot;094&quot;, 120, 261, 156, Array ()), _
Array (&quot;Onix&quot;, &quot;095&quot;, 70, 85, 288, Array ()), _
Array (&quot;Drowzee&quot;, &quot;096&quot;, 120, 89, 158, Array (&quot;Hypno&quot;)), _
Array (&quot;Hypno&quot;, &quot;097&quot;, 170, 144, 215, Array ()), _
Array (&quot;Krabby&quot;, &quot;098&quot;, 60, 181, 156, Array (&quot;Kingler&quot;)), _
Array (&quot;Kingler&quot;, &quot;099&quot;, 110, 240, 214, Array ()), _
Array (&quot;Voltorb&quot;, &quot;100&quot;, 80, 109, 114, Array (&quot;Electrode&quot;)), _
Array (&quot;Electrode&quot;, &quot;101&quot;, 120, 173, 179, Array ()), _
Array (&quot;Exeggcute&quot;, &quot;102&quot;, 120, 107, 140, Array (&quot;Exeggutor&quot;)), _
Array (&quot;Exeggutor&quot;, &quot;103&quot;, 190, 233, 158, Array ()), _
Array (&quot;Cubone&quot;, &quot;104&quot;, 100, 90, 165, Array (&quot;Marowak&quot;)), _
Array (&quot;Marowak&quot;, &quot;105&quot;, 120, 144, 200, Array ()), _
Array (&quot;Hitmonlee&quot;, &quot;106&quot;, 100, 224, 211, Array ()), _
Array (&quot;Hitmonchan&quot;, &quot;107&quot;, 100, 193, 212, Array ()), _
Array (&quot;Lickitung&quot;, &quot;108&quot;, 180, 108, 137, Array ()), _
Array (&quot;Koffing&quot;, &quot;109&quot;, 80, 119, 164, Array (&quot;Weezing&quot;)), _
Array (&quot;Weezing&quot;, &quot;110&quot;, 130, 174, 221, Array ()), _
Array (&quot;Rhyhorn&quot;, &quot;111&quot;, 160, 140, 157, Array (&quot;Rhydon&quot;)), _
Array (&quot;Rhydon&quot;, &quot;112&quot;, 210, 222, 206, Array ()), _
Array (&quot;Chansey&quot;, &quot;113&quot;, 500, 60, 176, Array ()), _
Array (&quot;Tangela&quot;, &quot;114&quot;, 130, 183, 205, Array ()), _
Array (&quot;Kangaskhan&quot;, &quot;115&quot;, 210, 181, 165, Array ()), _
Array (&quot;Horsea&quot;, &quot;116&quot;, 60, 129, 125, Array (&quot;Seadra&quot;)), _
Array (&quot;Seadra&quot;, &quot;117&quot;, 110, 187, 182, Array ()), _
Array (&quot;Goldeen&quot;, &quot;118&quot;, 90, 123, 115, Array (&quot;Seaking&quot;)), _
Array (&quot;Seaking&quot;, &quot;119&quot;, 160, 175, 154, Array ()), _
Array (&quot;Staryu&quot;, &quot;120&quot;, 60, 137, 112, Array (&quot;Starmie&quot;)), _
Array (&quot;Starmie&quot;, &quot;121&quot;, 120, 210, 184, Array ()), _
Array (&quot;Mr. Mime&quot;, &quot;122&quot;, 80, 192, 233, Array ()), _
Array (&quot;Scyther&quot;, &quot;123&quot;, 140, 218, 170, Array ()), _
Array (&quot;Jynx&quot;, &quot;124&quot;, 130, 223, 182, Array ()), _
Array (&quot;Electabuzz&quot;, &quot;125&quot;, 130, 198, 173, Array ()), _
Array (&quot;Magmar&quot;, &quot;126&quot;, 130, 206, 169, Array ()), _
Array (&quot;Pinsir&quot;, &quot;127&quot;, 130, 238, 197, Array ()), _
Array (&quot;Tauros&quot;, &quot;128&quot;, 150, 198, 197, Array ()), _
Array (&quot;Magikarp&quot;, &quot;129&quot;, 40, 29, 102, Array (&quot;Gyarados&quot;)), _
Array (&quot;Gyarados&quot;, &quot;130&quot;, 190, 237, 197, Array ()), _
Array (&quot;Lapras&quot;, &quot;131&quot;, 260, 186, 190, Array ()), _
Array (&quot;Ditto&quot;, &quot;132&quot;, 96, 91, 91, Array ()), _
Array (&quot;Eevee&quot;, &quot;133&quot;, 110, 104, 121, Array (&quot;Vaporeon&quot;, &quot;Jolteon&quot;, &quot;Flareon&quot;)), _
Array (&quot;Vaporeon&quot;, &quot;134&quot;, 260, 205, 177, Array ()), _
Array (&quot;Jolteon&quot;, &quot;135&quot;, 130, 232, 201, Array ()), _
Array (&quot;Flareon&quot;, &quot;136&quot;, 130, 246, 204, Array ()), _
Array (&quot;Porygon&quot;, &quot;137&quot;, 130, 153, 139, Array ()), _
Array (&quot;Omanyte&quot;, &quot;138&quot;, 70, 155, 174, Array (&quot;Omastar&quot;)), _
Array (&quot;Omastar&quot;, &quot;139&quot;, 140, 207, 227, Array ()), _
Array (&quot;Kabuto&quot;, &quot;140&quot;, 60, 148, 162, Array (&quot;Kabutops&quot;)), _
Array (&quot;Kabutops&quot;, &quot;141&quot;, 120, 220, 203, Array ()), _
Array (&quot;Aerodactyl&quot;, &quot;142&quot;, 160, 221, 164, Array ()), _
Array (&quot;Snorlax&quot;, &quot;143&quot;, 320, 190, 190, Array ()), _
Array (&quot;Articuno&quot;, &quot;144&quot;, 180, 192, 249, Array ()), _
Array (&quot;Zapdos&quot;, &quot;145&quot;, 180, 253, 188, Array ()), _
Array (&quot;Moltres&quot;, &quot;146&quot;, 180, 251, 184, Array ()), _
Array (&quot;Dratini&quot;, &quot;147&quot;, 82, 119, 94, Array (&quot;Dragonair&quot;, &quot;Dragonite&quot;)), _
Array (&quot;Dragonair&quot;, &quot;148&quot;, 122, 163, 138, Array (&quot;Dragonite&quot;)), _
Array (&quot;Dragonite&quot;, &quot;149&quot;, 182, 263, 201, Array ()), _
Array (&quot;Mewtwo&quot;, &quot;150&quot;, 212, 330, 200, Array ()), _
Array (&quot;Mew&quot;, &quot;151&quot;, 200, 210, 209, Array ()))
End Function
&apos; fnGetCPMData: Returns the combat power multiplier data.

View File

@ -71,7 +71,8 @@ End Sub
Function fnReadBaseStatsSheet As String
Dim oSheet As Object, oRange As Object, mData As Variant
Dim nI As Integer, sOutput As String
Dim nJ As Integer, sEvolveInto As String
Dim nJ As Integer, nStart As Integer, nEnd As Integer
Dim sEvolveForms As String
oSheet = ThisComponent.getSheets.getByName (&quot;basestat&quot;)
oRange = oSheet.getCellRangeByName (&quot;BaseStats&quot;)
@ -82,38 +83,70 @@ Function fnReadBaseStatsSheet As String
&amp; &quot;Function fnGetBaseStatsData As Variant&quot; &amp; Chr (10) _
&amp; Chr (9) &amp; &quot;fnGetBaseStatsData = Array( _&quot; &amp; Chr (10)
For nI = 1 To UBound (mData) - 1
For nJ = 8 To 6 Step -1
If mData (nI) (nJ) &lt;&gt; &quot;&quot; Then
sEvolveInto = mData (nI) (nJ)
nJ = 5
End If
Next nJ
sEvolveForms = fnFindEvolveForms (mData (nI))
sOutput = sOutput _
&amp; Chr (9) &amp; Chr (9) &amp; &quot;Array (&quot;&quot;&quot; &amp; mData (nI) (0) _
&amp; &quot;&quot;&quot;, &quot;&quot;&quot; &amp; mData (nI) (1) _
&amp; &quot;&quot;&quot;, &quot; &amp; mData (nI) (3) _
&amp; &quot;, &quot; &amp; mData (nI) (4) _
&amp; &quot;, &quot; &amp; mData (nI) (5) _
&amp; &quot;, &quot;&quot;&quot; &amp; sEvolveInto &amp; &quot;&quot;&quot;), _&quot; &amp; Chr (10)
&amp; &quot;, &quot; &amp; sEvolveForms &amp; &quot;), _&quot; &amp; Chr (10)
Next nI
nI = UBound (mData)
For nJ = 8 To 6 Step -1
If mData (nI) (nJ) &lt;&gt; &quot;&quot; Then
sEvolveInto = mData (nI) (nJ)
nJ = 5
End If
Next nJ
sEvolveForms = fnFindEvolveForms (mData (nI))
sOutput = sOutput _
&amp; Chr (9) &amp; Chr (9) &amp; &quot;Array (&quot;&quot;&quot; &amp; mData (nI) (0) _
&amp; &quot;&quot;&quot;, &quot;&quot;&quot; &amp; mData (nI) (1) _
&amp; &quot;&quot;&quot;, &quot; &amp; mData (nI) (3) _
&amp; &quot;, &quot; &amp; mData (nI) (4) _
&amp; &quot;, &quot; &amp; mData (nI) (5) _
&amp; &quot;, &quot;&quot;&quot; &amp; sEvolveInto &amp; &quot;&quot;&quot;))&quot; &amp; Chr (10) _
&amp; &quot;, &quot; &amp; sEvolveForms &amp; &quot;))&quot; &amp; Chr (10) _
&amp; &quot;End Function&quot;
fnReadBaseStatsSheet = sOutput
End Function
Function fnFindEvolveForms (mData () As Variant) As String
Dim nJ As Integer, nStart As Integer, nEnd As Integer
Dim sEvolveForms As String
If mData (0) = &quot;Eevee&quot; Then
sEvolveForms = &quot;Array (&quot;&quot;Vaporeon&quot;&quot;, &quot;&quot;Jolteon&quot;&quot;, &quot;&quot;Flareon&quot;&quot;)&quot;
Else
For nJ = 6 To 8
If mData (nJ) = mData (0) Then
nStart = nJ + 1
nJ = 9
End If
Next nJ
If nStart = 9 Then
nEnd = 8
Else
For nJ = nStart To 8
If mData (nJ) = &quot;&quot; Then
nEnd = nJ - 1
nJ = 9
Else
If nJ = 8 Then
nEnd = 8
nJ = 9
End If
End If
Next nJ
End If
If nEnd = nStart - 1 Then
sEvolveForms = &quot;Array ()&quot;
Else
sEvolveForms = &quot;&quot;&quot;&quot; &amp; mData (nStart) &amp; &quot;&quot;&quot;&quot;
For nJ = nStart + 1 To nEnd
sEvolveForms = sEvolveForms _
&amp; &quot;, &quot;&quot;&quot; &amp; mData (nJ) &amp; &quot;&quot;&quot;&quot;
Next nJ
sEvolveForms = &quot;Array (&quot; &amp; sEvolveForms &amp; &quot;)&quot;
End If
End If
fnFindEvolveForms = sEvolveForms
End Function
&apos; fnReadCPMSheet: Reads the combat power multiplier sheet.
Function fnReadCPMSheet As String
Dim oSheet As Object, oRange As Object, mData As Variant

View File

@ -4,4 +4,5 @@
<library:element library:name="0Main"/>
<library:element library:name="1Data"/>
<library:element library:name="9Load"/>
<library:element library:name="2Data"/>
</library:library>