From 9459776454fdd7929ea5aad613aae0a1d1a1810d Mon Sep 17 00:00:00 2001 From: Kyle Coburn Date: Wed, 1 Apr 2015 10:45:29 -0700 Subject: [PATCH] Grab tree potion based on HP, remove unicode dependencies for naming Nidoran, report correct total frames at finish --- action/textbox.lua | 24 ++++++++++++++--- ai/strategies.lua | 67 +++++++++++++++++++++++++++++++--------------- data/paths.lua | 3 ++- main.lua | 2 +- util/utils.lua | 7 +++++ 5 files changed, 75 insertions(+), 28 deletions(-) diff --git a/action/textbox.lua b/action/textbox.lua index ee99f8b..8cc90d5 100644 --- a/action/textbox.lua +++ b/action/textbox.lua @@ -5,13 +5,14 @@ local memory = require "util.memory" local menu = require "util.menu" local utils = require "util.utils" -local alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ *():;[]ポモ-?!♂♀/.," +local alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ *():;[]ab-?!mf/.," +-- local alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ *():;[]ポモ-?!♂♀/.," local nidoName = "A" local nidoIdx = 1 local function getLetterAt(index) - return alphabet[index] + return alphabet:sub(index, index) end local function getIndexForLetter(letter) @@ -55,12 +56,27 @@ function textbox.name(letter, randomize) end function textbox.getName() + if nidoName == "a" then + return "ポ" + end + if nidoName == "b" then + return "モ" + end + if nidoName == "m" then + return "♂" + end + if nidoName == "f" then + return "♀" + end return nidoName end function textbox.setName(index) - nidoIdx = index + 1 - nidoName = getLetterAt(index) + if index >= 0 and index < #alphabet then + nidoIdx = index + 1 + nidoName = getLetterAt(index) + print("Naming: "..nidoIdx.." "..alphabet) + end end function textbox.isActive() diff --git a/ai/strategies.lua b/ai/strategies.lua index c8e5884..d427857 100644 --- a/ai/strategies.lua +++ b/ai/strategies.lua @@ -31,6 +31,10 @@ local yolo, deepRun, resetting, riskGiovanni, maxEtherSkip local timeRequirements = { + bulbasaur = function() + return 2.25 + end, + nidoran = function() local timeLimit = 6.25 if pokemon.inParty("spearow") then @@ -530,12 +534,14 @@ strategyFunctions = { split = function(data) bridge.split(data and data.finished) - splitNumber = splitNumber + 1 + if not INTERNAL then + splitNumber = splitNumber + 1 - local timeDiff - splitTime, timeDiff = utils.timeSince(splitTime) - if timeDiff then - print(splitNumber..". "..areaName..": "..utils.elapsedTime().." ("..timeDiff..")") + local timeDiff + splitTime, timeDiff = utils.timeSince(splitTime) + if timeDiff then + print(splitNumber..". "..areaName..": "..utils.elapsedTime().." ("..timeDiff..")") + end end return true end, @@ -817,7 +823,7 @@ strategyFunctions = { tries = tries + 1 end end - if battle.isActive() and memory.double("battle", "opponent_hp") > 0 and resetTime(2.15, "kill Bulbasaur") then + if battle.isActive() and memory.double("battle", "opponent_hp") > 0 and resetTime(getTimeRequirement("bulbasaur"), "kill Bulbasaur") then return true end return buffTo("tail_whip", 6) @@ -906,6 +912,24 @@ strategyFunctions = { return dodgeUp(0x0273, 18, 6, 17, 9) end, + grabTreePotion = function() + if initialize() then + if pokemon.info("squirtle", "hp") > 25 then + return true + end + end + if inventory.contains("potion") then + return true + end + + local px, py = player.position() + if px > 15 then + walk.step(15, 4) + else + player.interact("Left") + end + end, + grabAntidote = function() local px, py = player.position() if py < 11 then @@ -926,17 +950,19 @@ strategyFunctions = { end, grabForestPotion = function() - if inventory.contains("potion") then - local healthNeeded = (pokemon.info("spearow", "level") == 3) and 6 or 10 - if pokemon.info("squirtle", "hp") <= healthNeeded then - if menu.pause() then - inventory.use("potion", "squirtle") + if battle.handleWild() then + if inventory.contains("potion") then + local healthNeeded = (pokemon.info("spearow", "level") == 3) and 8 or 15 + if pokemon.info("squirtle", "hp") <= healthNeeded then + if menu.pause() then + inventory.use("potion", "squirtle") + end + else + return true end - else - return true + elseif menu.close() then + player.interact("Up") end - elseif menu.close() then - player.interact("Up") end end, @@ -993,7 +1019,8 @@ strategyFunctions = { if not inventory.contains("antidote") then return reset("Poisoned, but we skipped the antidote") end - if inventory.contains("potion") and pokemon.info("squirtle", "hp") > 8 then + local curr_hp = pokemon.info("squirtle", "hp") + if inventory.contains("potion") and curr_hp > 8 and curr_hp < 18 then return true end end @@ -1090,7 +1117,7 @@ strategyFunctions = { if def < 12 then statDiff = statDiff + 1 end - if level4Nidoran then + if not level4Nidoran then statDiff = statDiff - 1 end local resets = att < 15 or spd < 14 or scl < 12 or statDiff > 3 @@ -1539,9 +1566,6 @@ strategyFunctions = { end, potionBeforeGoldeen = function() - if not STREAMING_MODE and nidoSpeed == 51 then - return false --TEST - end if initialize() then if setYolo("goldeen") or pokemon.index(0, "hp") > 7 then return true @@ -2885,9 +2909,8 @@ strategyFunctions = { end if tries == 0 then bridge.tweet("Beat Pokemon Red in "..canProgress.."!") - -- strategyFunctions.reportFrames() if strategies.seed then - print(memory.value("game", "frames").." frames, with seed "..strategies.seed) + print(utils.frames().." frames, with seed "..strategies.seed) print("Please save this seed number to share, if you would like proof of your run!") end end diff --git a/data/paths.lua b/data/paths.lua index 8a076a1..8a411c8 100644 --- a/data/paths.lua +++ b/data/paths.lua @@ -42,7 +42,7 @@ local paths = { -- 2: NIDORAN -- Out of Viridian City - {1, {0,17}, {c="encounters",limit=10,extra="spearow"}, {16,17}, {16,16}, {18,16}, {18,6}, {s="dodgeViridianOldMan"}, {17,4}, {15,4}, {s="interact",dir="Left"}, {17,4}, {17, 0}, {17, -1}}, + {1, {0,17}, {c="encounters",limit=10,extra="spearow"}, {16,17}, {16,16}, {18,16}, {18,6}, {s="dodgeViridianOldMan"}, {17,4}, {s="grabTreePotion"}, {17,4}, {17, 0}, {17, -1}}, -- To the Forest {13, {7,71}, {7,57}, {4,57}, {4,52}, {10,52}, {10,44}, {3,44}, {3,43}}, -- Forest entrance @@ -105,6 +105,7 @@ local paths = { -- Rival 2 {3, {9,12}, {s="a",a="Cerulean Rival"}, {21,12}, {21,6}, {s="rivalSandAttack"}, {21,-1}}, -- Nugget bridge + --TODO RC early strat {35, {11,35}, {s="a",a="Nugget Bridge"}, {11,32}, {s="interact",dir="Up"}, {10,32}, {10,29}, {s="interact",dir="Up"}, {11,29}, {11,26}, {s="interact",dir="Up"}, {10,26}, {10,24}, {s="teachThrash"}, {10,23}, {s="interact",dir="Up"}, {11,23}, {11,21}, {s="teachThrash"}, {11,20}, {s="interact",dir="Up"}, {s="redbarMankey"}, {10,20}, {10,19}, {s="teachThrash"}, {10,15}, {s="waitToFight"}, {s="teachThrash"}, {s="split"}, {10,8}, {20,8}}, -- 6: NUGGET BRIDGE diff --git a/main.lua b/main.lua index f58714b..cc27411 100644 --- a/main.lua +++ b/main.lua @@ -9,7 +9,7 @@ local PAINT_ON = true -- Display contextual information while the bot runs -- START CODE (hard hats on) local START_WAIT = 99 -local VERSION = "1.1" +local VERSION = "1.2" YELLOW = GAME_NAME == "yellow" INTERNAL = false diff --git a/util/utils.lua b/util/utils.lua index 62fd4e3..7241691 100644 --- a/util/utils.lua +++ b/util/utils.lua @@ -88,4 +88,11 @@ function utils.elapsedTime() return memory.raw(0xDA41)..":"..mins..":"..secs end +function utils.frames() + local totalFrames = memory.raw(0xDA41) * 60 + totalFrames = (totalFrames + memory.raw(0xDA43)) * 60 + totalFrames = (totalFrames + memory.raw(0xDA44)) * 60 + return totalFrames + memory.raw(0xDA45) +end + return utils