Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local nome = {"Grass_Energy","Fire_Energy","Water_Energy",
- "Lightning_Energy","Fighting_Energy","Psychic_Energy","Double_Colorless_Energy",
- "Bulbasaur_LV13","Ivysaur_LV20","Venusaur_LV64(CP!_Promo)","Venusaur_LV67",
- "Caterpie_LV13","Metapod_LV21","Butterfree_LV28","Weedle_LV12","Kakuna_LV23",
- "Beedrill_LV32","Ekans_LV10","Arbok_LV27","Nidoran_Female_LV13","Nidorina_LV24",
- "Nidoqueen_LV43","Nidoran_Male_LV20","Nidorino_LV25","Nidoking_LV48","Zubat_LV10",
- "Golbat_LV29","Oddish_LV8","Gloom_LV22","Vileplume_LV35","Paras_LV8",
- "Parasect_LV28","Venonat_LV12","Venomoth_LV28","Bellsprout_LV11","Weepinbell_LV28",
- "Victreebell_LV42","Grimer_LV17","Muk_LV34","Exeggcute_LV14","Exeggutor_LV35",
- "Koffing_LV13","Weezing_LV27","Tangela_LV8_(GB)","Tangela_LV12","Scyther_LV25",
- "Pinsir_LV24","Charmander_LV10","CharmelEon_LV32","Charizard_LV76","Vulpix_LV11",
- "Ninetails_LV32","Ninetails_LV35_(GB)","Growlithe_LV18","Arcanine_LV34_(Promo)",
- "Arcanine_LV45","Ponyta_LV10","Rapidash_LV33","Magmar_LV24","Magmar_LV31_(Fossil)",
- "Flareon_LV22_(GB)","Flareon_LV28_(Jungle)","Moltres_LV35",
- "Legendary_Moltres_LV37","Squirtle_LV8","Wartortle_LV22","Blastoise_LV52",
- "Psyduck_LV15","Golduck_LV27","Poliwag_LV13","Poliwhirl_LV28","Poliwrath_LV48",
- "Tentacool_LV10","Tentacruel_LV21","Seel_LV12","Dewgong_LV42","Shellder_LV8",
- "Cloyster_LV25","Krabby_LV20","Kingler_LV27","Horsea_LV19","Seadra_LV23",
- "Goldeen_LV12","Seaking_LV28","Staryu_LV15","Starmie_LV28","Magikarp_LV8",
- "Gyarados_LV41","Lapras_LV31","Vaporeon_LV29_(GB)","Vaporeon_LV42_(Jungle)",
- "Omanyte_LV19","Omastar_LV32","Articuno_LV35","Legendary_Articuno_LV37",
- "Pikachu_LV12","Pikachu_LV14_(Jungle)","Pikachu_LV16_(promo)",
- "Pikachu_LV16_(promo2)","Flying_Pikachu_LV12","Surfing_Pikachu_LV13",
- "Surfing_Pikachu_LV13_(2)","Raichu_LV40","Raichu_LV45_(Fossil)","Magnemite_LV13",
- "Magnemite_LV15_(GB)","Magneton_LV28","Magneton_LV35_(Fossil)","Voltorb_LV10",
- "Electrode_LV35_(GB)","Electrode_LV42_(Jungle)","Electabuzz_LV20_(Promo)",
- "Electabuzz_LV35","Jolteon_LV24_(GB)","Jolteon_LV29","Zapdos_LV40",
- "Zapdos_LV64_(Fossil)","Legendary_Zapdos_LV68","Sandshrew_LV12","Sandslash_LV33",
- "Diglett_LV8","Dugtrio_LV36","Mankey_LV7","Primeape_LV35","Machop_LV20",
- "Machoke_LV40","Machamp_LV67","Geodude_LV16","Graveler_LV29","Golem_LV36",
- "Onix_LV12","Cubone_LV13","Marowak_LV26_(Jungle)","Marowak_LV32_(GB)",
- "Hitmonlee_LV30","Hitmonchan_LV33","Rhyhorn_LV18","Rhydon_LV48","Kabuto_LV9",
- "Kabutops_LV30","Aerodactlyl_LV28","Abra_LV10","Kadabra_LV38","Alakazam_LV42",
- "Slowpoke_LV9_(Promo)","Slowpoke_LV18_(Fossil)","Slowbro_LV26","Gastly_LV8",
- "Gastly_LV17_(Fossil)","Haunter_LV17_(Fossil)","Haunter_LV22","Gengar_LV38",
- "Drowzee_LV12","Hypno_LV36","Mr.Mime_LV28","Jynx_LV23","Mewtwo_LV53",
- "Mewtwo_LV60_(Promo)","Mewtwo_LV60_(Promo_2)","Mew_LV8_(Promo)",
- "Mew_LV15_(CP!_Promo)","Mew_LV23","Pidgey_LV8","Pidgeotto_LV36",
- "Pidgeot_LV38_(GB)","Pidgeot_LV40_(Jungle)","Rattata_LV9","Raticate_LV41",
- "Spearow_LV13","Fearow_LV27","Clefairy_LV14","Clefable_LV34",
- "Jigglypuff_LV12_(Promo)","Jigglypuff_LV13_(GB)","Jigglypuff_LV14_(Jungle)",
- "Wigglytuff_LV36","Meowth_LV14_(GB)","Meowth_LV15_(Jungle)","Persian_LV25",
- "Farfetch'd_LV20","Doduo_LV10","Dodrio_LV28","Lickitung_LV26","Chansey_LV55",
- "Kangaskhan_LV40","Tauros_LV32","Ditto_LV19","Eevee_LV12","Porygon_LV12",
- "Snorlax_LV20","Dratini_LV10","Dragonair_LV33","Legendary_Dragonite_LV41",
- "Dragonite_LV45","Professor_Oak","Imposter_Professor_Oak","Bill","Mr.Fuji",
- "Lass","Imakuni?","Pokemon_Trader","Pokemon_Breeder","Clefairy_Doll",
- "Mysterious_Fossil","Energy_Retrieval","Super_Energy_Retrieval","Energy_Search",
- "Energy_Removal","Super_Energy_Removal","Switch","Pokemon_Center","Pokeball",
- "Scoop_Up","Computer_Search","Pokedex","Pluspower","Defender","Item_Finder",
- "Gust_of_Wind","Devolution_Spray","Potion","Super_Potion","Full_Heal","Revive",
- "Maintenance","Pokemon_Flute","Gambler","Recycle","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","","","","","","","","","","","",
- "","","","","","","","","","","","","","","","","",}
- local isBasic = { false, false, false, false, false, false, false, true, false, false, false, true, false, false, true, false, false, true, false, true, false, false, true, false, false, true, false, true, false, false, true, false, true, false, true, false, false, true, false, true, false, true, false, true, true, true, true, true, false, false, true, false, false, true, false, false, true, false, true, true, false, false, true, true, true, false, false, true, false, true, false, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, false, false, false, true, true, true, true, true, true, true, true, true, false, false, true, true, false, false, true, false, false, true, true, false, false, true, true, true, true, false, true, false, true, false, true, false, false, true, false, false, true, true, false, false, true, true, true, false, false, false, false, true, false, false, true, true, false, true, true, false, false, false, true, false, true, true, true, true, true, true, true, true, true, false, false, false, true, false, true, false, true, false, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false }
- local decks = {}
- --1 = lightning & fire, 2 = water & fighting, 3 = grass & psychic
- decks[1] = {[0]=2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 7, 48, 48, 49, 50, 54, 54, 56, 57, 57, 58, 59, 60, 96, 97, 103, 105, 105, 107, 109, 109, 109, 110, 111, 167, 167, 168, 195, 197, 197, 207, 207, 210, 210, 216, 216, 217, 217, 221}
- decks[2] = {[0]=3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 70, 70, 71, 72, 75, 75, 76, 83, 83, 84, 85, 85, 86, 119, 119, 120, 125, 125, 125, 126, 126, 127, 136, 137, 137, 138, 195, 197, 197, 207, 207, 221, 221, 221, 223, 223}
- decks[3] = {[0]=1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 15, 15, 16, 17, 20, 20, 21, 31, 31, 32, 40, 40, 41, 47, 142, 142, 142, 143, 143, 153, 153, 153, 154, 154, 156, 180, 186, 197, 197, 207, 207, 219, 219, 221, 221, 223}
- local currentDeck = 1
- memory.usememorydomain("System Bus")
- --note: none of these are actually used anymore but they're good numbers to have around!
- local DeckLocBegin=0xC300
- local MyDeckLocBegin=0xC200
- local DeckIDBegin=0xC480
- local MyDeckIDBegin=0xC400
- local ShuffledDeckBegin=0xC37E
- local MyShuffledDeckBegin=0xC27E
- local RNG1 = 0
- local RNG2 = 0
- local RNG3 = 0
- local initRNG1 = RNG1
- local initRNG2 = RNG2
- local initRNG3 = RNG3
- function aaronRNG()
- --aaron RNG
- RNG1 = 6
- RNG2 = 151
- RNG3 = 200
- initRNG1 = RNG1
- initRNG2 = RNG2
- initRNG3 = RNG3
- end
- function softRNG()
- --soft reset RNG
- RNG1 = 0x9F
- RNG2 = 0x1E
- RNG3 = 0x6B
- initRNG1 = RNG1
- initRNG2 = RNG2
- initRNG3 = RNG3
- end
- local myDeck = {}
- local oppDeck = {}
- for i=0,59 do
- myDeck[i] = i
- oppDeck[i] = i
- end
- --failsafes for Jumps in slot 59
- myDeck[60] = 12
- myDeck[61] = 0
- oppDeck[60] = 12
- oppDeck[61] = 0
- local activeCheck = false
- local stackPointer = 0xDFCE
- local pastTheFFs = false
- local absorbs = {}
- local jrs = {}
- for i=0,59 do
- absorbs[i] = 0
- jrs[i] = 0
- end
- jrs[0x18] = "JR"
- jrs[0x20] = "NZ"
- jrs[0x28] = "Z"
- jrs[0x30] = "NC"
- jrs[0x38] = "C"
- absorbs[0x01] = 2
- absorbs[0x08] = 2
- absorbs[0x11] = 2
- absorbs[0x21] = 2
- absorbs[0x31] = 2
- absorbs[0x06] = 1
- absorbs[0x0E] = 1
- absorbs[0x16] = 1
- absorbs[0x18] = 1
- absorbs[0x1E] = 1
- absorbs[0x20] = 1
- absorbs[0x26] = 1
- absorbs[0x28] = 1
- absorbs[0x2E] = 1
- absorbs[0x30] = 1
- absorbs[0x36] = 1
- absorbs[0x38] = 1
- function reset()
- --Go back to the start, but advance RNG once (simulate checking the next frame)
- RNG1 = initRNG1
- RNG2 = initRNG2
- RNG3 = initRNG3
- advanceRNG()
- initRNG1 = RNG1
- initRNG2 = RNG2
- initRNG3 = RNG3
- for i=0,59 do
- myDeck[i] = i
- oppDeck[i] = i
- end
- end
- --Test a coinflip without permanently advancing the RNG once
- function testCoinflip()
- local tempRNG1 = RNG1
- local tempRNG2 = RNG2
- local tempRNG3 = RNG3
- local flipRNG = advanceRNG() % 2
- RNG1 = tempRNG1
- RNG2 = tempRNG2
- RNG3 = tempRNG3
- return flipRNG
- end
- function advanceRNG()
- --Recreation of the code that advances RNG
- local temp = RNG2
- temp = bit.rol(temp,2)
- if (bit.check(temp,8)) then temp = bit.set(temp,0) end
- temp = bit.clear(temp,8)
- if (bit.check(temp,9)) then temp = bit.set(temp,1) end
- temp = bit.clear(temp,9)
- temp = bit.bxor(temp,RNG1)
- local carry = bit.check(temp,0)
- RNG2 = bit.bxor(RNG2,RNG1)
- temp = RNG3
- temp = bit.bxor(temp,RNG1)
- RNG1 = temp
- RNG1 = bit.rol(RNG1,1)
- if (carry) then RNG1 = bit.set(RNG1,0) end
- carry = bit.check(RNG1,8)
- RNG1 = bit.clear(RNG1,8)
- RNG2 = bit.rol(RNG2,1)
- if (carry) then RNG2 = bit.set(RNG2,0) end
- RNG2 = bit.clear(RNG2,8)
- RNG3 = RNG3 + 1
- if (RNG3 == 256) then RNG3 = 0 end
- return (bit.bxor(RNG2,RNG1))
- end
- function randomSlot()
- --Get a random deck slot 0-59
- --This is done by multiplying the RNG value by 60, and taking the left 8 bits
- local rng = advanceRNG()
- local temp = rng * 60
- for i=0,7 do
- if (bit.check(temp,i+8)) then temp = bit.set(temp,i) else temp = bit.clear(temp,i) end
- temp = bit.clear(temp,i+8)
- end
- return temp
- end
- function shuffleDeck(deck)
- --Do 60 location swaps
- for curLoc=0,59 do
- local newLoc = randomSlot()
- local temp = deck[curLoc]
- deck[curLoc] = deck[newLoc]
- deck[newLoc] = temp
- end
- end
- --I don't want a player and opponent copy of this code, it should stay the same between the two (or pass a bool into the function if needed)
- function goThroughShuffledDeck(theDeck)
- --Go through each shuffled opcode, simulating JRs and opcode absorbtions
- --To minimize chance of false negatives, I assume conditional JRs fail, unless they'd bring us past the bench FFs
- for h = 0,59 do
- --Non-conditional JR
- if (theDeck[h] == 0x18) then
- if (h + theDeck[h+1] + 1 >= 67) then --I THINK 67 is the magic number
- pastTheFFs = true
- end
- --h = h + theDeck[h+1] + 1
- --Conditional JR
- --Note: theoretically a JR could jump to an opcode that gets absorbed otherwise
- --This is a false negative I'm allowing for now
- elseif (jrs[theDeck[h]] ~= 0) then
- if (h + theDeck[h+1] + 1 >= 67) then
- pastTheFFs = true
- break
- end
- --h = h + 1
- --Uh oh stinky
- --elseif (theDeck[h] == 0x10) then
- --Note: a JR I've ignored could have jumped over this
- --pastTheFFs = false
- --break
- --Load stack pointer
- elseif (theDeck[h] == 0x31) then
- stackPointer = theDeck[h+2]
- stackPointer = bit.rol(stackPointer, 2) + theDeck[h+1]
- --h = h + 2
- --increment stack pointer
- elseif (theDeck[h] == 0x33) then
- stackPointer = stackPointer + 1
- --decrement stack pointer
- elseif (theDeck[h] == 0x3B) then
- stackPointer = stackPointer - 1
- else
- --h = h + absorbs[theDeck[h]]
- end
- end
- end
- function checkForTAS(frames, myReshuffles, theirReshuffles)
- local num = 0
- pastTheFFs = false
- local good = false --check for capacity to ACE in shuffled deck
- activeCheck = false --check for $10 Active Pokemon prevention
- stackPointer = 0xDFCE
- --Finalize opponent's deck
- if (checkForBasics(frames, myReshuffles, theirReshuffles) == 0) then
- return
- end
- --Test for heads coin flip
- if (testCoinflip() == 0) then
- --C200-C23B: card locations
- for h=0,6 do
- --active pokemon can be next to hand card or prize card check
- --note: 19 is very generous and allows Oak+Bill usage
- --I'm not 100% sure this code is right, comparing the C200-C23B section to shuffled deck hurts my head
- for i=0,19 do
- if (h ~= i and math.abs(myDeck[h] - myDeck[i]) <= 2) then
- activeCheck = true
- --does our hand contain a JR opcode we can put out as the active
- if (jrs[myDeck[h]] ~= 0 and (myDeck[h] - myDeck[i] == 1 or myDeck[h] - myDeck[i] == 2)) then
- pastTheFFs = true
- end
- end
- end
- end
- --note: prizes and hand entries aren't being checked yet
- --C27E-C2B9: shuffled deck 0-59
- --Go through each shuffled opcode, simulating JRs and opcode absorbtions
- --To minimize chance of false negatives, I assume conditional JRs fail, unless they'd bring us past the bench FFs
- if (activeCheck) then
- --I don't think we even need to use this function anymore, actually, because pastTheFFs isn't needed
- goThroughShuffledDeck(myDeck)
- end
- end
- --possible false positive: if we got our stack pointer right but also jumped past the FFs
- --Skip checking opponent's deck, slide into ours and assume success
- if (stackPointer == 0x391A) then
- printFrame(frames,myReshuffles,theirReshuffles)
- --Do the exact same things but for the opponent's deck now
- --Not my best use of code but oh well
- elseif (activeCheck) then
- activeCheck = false
- pastTheFFs = false
- local foundActive = false
- --C300-C33B: card locations
- for h=6,0,-1 do
- --active pokemon can be next to hand card or prize card check
- --for the opponent, this part involves actually checking if the card is really a Basic
- --false positives will result unless we account for their bench AI here
- --local loc = memory.readbyte(DeckIDBegin+oppDeck[h])
- if (foundActive) then break end
- local loc = decks[currentDeck][oppDeck[h]]
- if (isBasic[loc]) then
- foundActive = true
- --include prizes
- for i=0,10 do
- if (h ~= i and (oppDeck[h] - oppDeck[i] == 1 or oppDeck[h] - oppDeck[i] == 2)) then
- activeCheck = true
- end
- end
- end
- end
- --note: prizes and hand entries aren't being checked
- --C37E-C3B9: shuffled deck 0-59
- --Go through each shuffled opcode, simulating JRs and opcode absorbtions
- --To minimize chance of false negatives, I assume conditional JRs fail, unless they'd bring us past the bench FFs
- if (activeCheck) then
- goThroughShuffledDeck(oppDeck)
- end
- else
- activeCheck = false
- pastTheFFs = false
- end
- if (stackPointer == 0x391A) then
- printFrame(frames,myReshuffles,theirReshuffles)
- elseif (activeCheck) then
- printFrame(frames,myReshuffles,theirReshuffles)
- end
- if (myReshuffles < 1) then
- for i=0,59 do
- myDeck[i] = i
- end
- shuffleDeck(myDeck)
- shuffleDeck(myDeck)
- checkForTAS(frames, myReshuffles+1, theirReshuffles)
- end
- end
- --This checks opponent's hand for basics, and recurses checkForTAS if there are none
- function checkForBasics(frames, myReshuffles, theirReshuffles)
- local num = 0
- for h=0,6 do
- --local loc = memory.readbyte(DeckIDBegin+oppDeck[h])
- local loc = decks[currentDeck][oppDeck[h]]
- if (isBasic[loc]) then
- num = num + 1
- end
- end
- --No basics found; time to check both splitting possibilities (one where I reshuffle as well; may as well be thorough!)
- if (num == 0) then
- local tempRNG1 = RNG1
- local tempRNG2 = RNG2
- local tempRNG3 = RNG3
- local tempMyDeck = {}
- for i=0,59 do
- tempMyDeck[i] = myDeck[i]
- myDeck[i] = i
- oppDeck[i] = i
- end
- shuffleDeck(myDeck)
- shuffleDeck(myDeck)
- shuffleDeck(oppDeck)
- shuffleDeck(oppDeck)
- checkForTAS(frames, myReshuffles+1, theirReshuffles+1)
- RNG1 = tempRNG1
- RNG2 = tempRNG2
- RNG3 = tempRNG3
- for i=0,59 do
- myDeck[i] = tempMyDeck[i]
- oppDeck[i] = i
- end
- shuffleDeck(oppDeck)
- shuffleDeck(oppDeck)
- checkForTAS(frames, myReshuffles, theirReshuffles+1)
- end
- return num
- end
- function printFrame(frames,myReshuffles,theirReshuffles)
- print("Frame " .. tostring(frames) .. ", Deck " .. tostring(currentDeck))
- file = io.open("frames" .. currentDeck .. ".txt","a")
- file:write("Frame " .. tostring(frames) .. ", " .. tostring(myReshuffles) .. " player reshuffles, " .. tostring(theirReshuffles) .. " opponent reshuffles, RNG: " .. tostring(initRNG1) .. " " .. tostring(initRNG2) .. " " .. tostring(initRNG3) .. "\r\n")
- file:write("Your deck:\r\n")
- printDeck(myDeck)
- file:write("\r\n\r\nOpponent deck (" .. currentDeck .. "):\r\n")
- printDeck(oppDeck)
- file:write("\r\n")
- file:write("Their basics: ")
- for i=6,0,-1 do
- --local loc = memory.readbyte(DeckIDBegin+oppDeck[i])
- local loc = decks[currentDeck][oppDeck[i]]
- if (isBasic[loc]) then
- file:write(string.format("%X", oppDeck[i]) .. ": " .. nome[loc] .. ", ")
- end
- end
- file:write("\r\n")
- file:write("=====\r\n")
- file:flush()
- file:close()
- end
- function printDeck(theDeck)
- for i=0,59 do
- if (i > 0 and i % 16 == 0) then
- file:write("\r\n")
- end
- hexNum = string.format("%02X", theDeck[i])
- opcode1 = " "
- opcode2 = " "
- if (jrs[theDeck[i]] ~= 0) then
- opcode1 = " >"
- opcode2 = "> "
- --pure jump gets double arrow
- if (jrs[theDeck[i]] == "JR") then
- opcode1 = ">>"
- opcode2 = ">>"
- end
- --putting the flag of jump looks bad
- --if (jrs[theDeck[i]] ~= "JR") then opcode = opcode .. jrs[theDeck[i]] end
- elseif (theDeck[i] == 0x10) then
- opcode1 = " !"
- opcode2 = "! "
- elseif (absorbs[theDeck[i]] == 1) then
- opcode1 = " +"
- opcode2 = "+ "
- elseif (absorbs[theDeck[i]] == 2) then
- opcode1 = "++"
- opcode2 = "++"
- end
- file:write(opcode1 .. hexNum .. opcode2)
- end
- file:write("\r\n")
- --copyable version for cheating purposes
- for i=0,59 do
- file:write(theDeck[i] .. ", ")
- end
- end
- --delete contents of frames.txt
- file = io.open("frames1.txt","w")
- file:close()
- file = io.open("frames2.txt","w")
- file:close()
- file = io.open("frames3.txt","w")
- file:close()
- --print out aaron's deck contents
- --[[file = io.open("frames.txt","a")
- for i=0,59 do
- file:write(memory.readbyte(MyDeckIDBegin+i) .. ", ")
- end
- file:flush()
- file:close()]]
- --Run the main program for 240 frames. I'm probably not going to wait 4 seconds for a frame, but eh
- --for counter=0,119 do
- for deckChoices=1,3 do
- currentDeck = deckChoices
- aaronRNG()
- for counter=0,60 do
- shuffleDeck(myDeck)
- shuffleDeck(myDeck)
- shuffleDeck(oppDeck)
- shuffleDeck(oppDeck)
- --Check for Basic Pokemon on their side, do double reshuffle if they don't have any
- --Technically, if they have no Basics, we could influence RNG by reshuffling as well... So check that as well
- --If they have more than 1 Basic, or a "bad" Basic, the frame is skipped
- checkForTAS(counter, 0, 0)
- --checkForBasics(counter, 0, 0)
- reset()
- end
- end
- print("Completed")
Advertisement
Add Comment
Please, Sign In to add comment