diff --git a/PokemonGoIV/0Main.vb b/PokemonGoIV/0Main.vb index 6214687..b729dee 100644 --- a/PokemonGoIV/0Main.vb +++ b/PokemonGoIV/0Main.vb @@ -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 diff --git a/PokemonGoIV/1Data.vb b/PokemonGoIV/1Data.vb index 9b4c12b..51b3f6b 100644 --- a/PokemonGoIV/1Data.vb +++ b/PokemonGoIV/1Data.vb @@ -1,5 +1,5 @@ ' 1Data: The Pokémon GO data for IV calculation -' by imacat , 2016-11-28 +' by imacat , 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. diff --git a/PokemonGoIV/9Load.vb b/PokemonGoIV/9Load.vb index 91a5045..91138a3 100644 --- a/PokemonGoIV/9Load.vb +++ b/PokemonGoIV/9Load.vb @@ -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 diff --git a/TODO b/TODO index 568a84f..1a628ca 100644 --- a/TODO +++ b/TODO @@ -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. diff --git a/oxt/PokemonGoIV/0Main.xba b/oxt/PokemonGoIV/0Main.xba index 39a7be5..6c3910c 100644 --- a/oxt/PokemonGoIV/0Main.xba +++ b/oxt/PokemonGoIV/0Main.xba @@ -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 ' 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 ' 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 @@ -53,25 +58,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) @@ -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 = "" 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 - '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 @@ -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 <> 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 @@ -908,14 +901,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 @@ -940,6 +961,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 @@ -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 ' 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) @@ -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 ("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. @@ -1124,7 +1280,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 @@ -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 +' 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 diff --git a/oxt/PokemonGoIV/1Data.xba b/oxt/PokemonGoIV/1Data.xba index 6bee04b..9e5ab7c 100644 --- a/oxt/PokemonGoIV/1Data.xba +++ b/oxt/PokemonGoIV/1Data.xba @@ -1,7 +1,7 @@ ' 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 @@ -9,157 +9,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. diff --git a/oxt/PokemonGoIV/9Load.xba b/oxt/PokemonGoIV/9Load.xba index b9b71d8..35785b9 100644 --- a/oxt/PokemonGoIV/9Load.xba +++ b/oxt/PokemonGoIV/9Load.xba @@ -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 ("basestat") oRange = oSheet.getCellRangeByName ("BaseStats") @@ -82,38 +83,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 diff --git a/oxt/PokemonGoIV/script.xlb b/oxt/PokemonGoIV/script.xlb index f2a3b24..ed75561 100644 --- a/oxt/PokemonGoIV/script.xlb +++ b/oxt/PokemonGoIV/script.xlb @@ -4,4 +4,5 @@ + \ No newline at end of file