Reunify streaming/distribution environments

This commit is contained in:
Kyle Coburn 2015-01-19 17:08:17 -08:00
parent 52232581f2
commit 619c9d295e
6 changed files with 71 additions and 24 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
stream/*

View File

@ -42,7 +42,8 @@ function textbox.name(letter, randomize)
end
end
else
-- TODO cancel more when menu isn't up
-- TODO cancel when menu isn't up
-- if (memory.value("menu", "current") == 7) then
if (memory.raw(0x10B7) == 3) then
input.press("A", 2)
elseif (randomize) then

View File

@ -24,6 +24,11 @@ local function setPath(index, region)
path = paths[index]
end
local function completeStep(region)
stepIdx = stepIdx + 1
return walk.traverse(region)
end
-- Helper functions
function dir(px, py, dx, dy)
@ -50,11 +55,6 @@ function step(dx, dy)
end
walk.step = step
local function completeStep(region)
stepIdx = stepIdx + 1
return walk.traverse(region)
end
-- Table functions
function walk.reset()

View File

@ -291,7 +291,7 @@ local function isSleeping()
end
combat.isSleeping = isSleeping
-- Combat AI functions
-- Combat AI
function combat.factorPP(enabled)
enablePP = enabled

View File

@ -1,15 +1,15 @@
-- Customization settings
GAME_NAME = "red" -- Only currently supported option
RESET_FOR_TIME = true -- Set to false if you just want to see the bot finish a run
GAME_NAME = "red" -- Only currently supported option
RESET_FOR_TIME = true -- Set to false if you just want to see the bot finish a run
local CUSTOM_SEED = nil -- Set to a known seed to replay it, or leave nil for random ones
local PAINT_ON = true -- Displays contextual information while the bot runs
local CUSTOM_SEED = nil -- Set to a known seed to replay it, or leave nil for random runs
local PAINT_ON = true -- Display contextual information while the bot runs
-- Start code (hard hats on)
local START_WAIT = 99
local VERSION = "1.0"
local VERSION = "1.1"
local battle = require "action.battle"
local textbox = require "action.textbox"
@ -29,7 +29,8 @@ local settings = require "util.settings"
local pokemon = require "storage.pokemon"
local YELLOW = GAME_NAME == "yellow"
YELLOW = GAME_NAME == "yellow"
INTERNAL = false
local hasAlreadyStartedPlaying = false
local inBattle, oldSecs
@ -58,7 +59,7 @@ end
local function choosePlayerNames()
local name
if (memory.value("player", "name2") == 80) then
name = "W"
name = "E"
else
name = "B"
end
@ -84,6 +85,7 @@ local function resetAll()
running = false
previousPartySize = 0
-- client.speedmode = 200
if (CUSTOM_SEED) then
strategies.seed = CUSTOM_SEED
print("RUNNING WITH A FIXED SEED ("..strategies.seed.."), every run will play out identically!")
@ -96,7 +98,11 @@ end
-- Execute
print("Welcome to PokeBot "..GAME_NAME.." version "..VERSION)
local productionMode = not walk.init() and false
STREAMING_MODE = not walk.init()
if STREAMING_MODE then
RESET_FOR_TIME = true
end
-- STREAMING_MODE = false --TODO disable
if (CUSTOM_SEED) then
client.reboot_core()
else
@ -108,12 +114,14 @@ if (RESET_FOR_TIME and hasAlreadyStartedPlaying) then
RESET_FOR_TIME = false
print("Disabling time-limit resets as the game is already running. Please reset the emulator and restart the script if you'd like to go for a fast time.")
end
if (productionMode) then
if (STREAMING_MODE) then
bridge.init()
else
input.setDebug(true)
end
-- Main loop
local previousMap
while true do
@ -122,6 +130,16 @@ while true do
input.clear()
previousMap = currentMap
end
if (strategies.frames) then
if (memory.value("game", "battle") == 0) then
strategies.frames = strategies.frames + 1
end
gui.text(0, 80, strategies.frames)
end
if (bridge.polling) then
pollForResponse()
end
if (not input.update()) then
if (not utils.ingame()) then
if (currentMap == 0) then
@ -171,6 +189,10 @@ while true do
inBattle = false
end
local currentHP = pokemon.index(0, "hp")
-- if (currentHP ~= lastHP) then
-- bridge.hp(currentHP, pokemon.index(0, "max_hp"))
-- lastHP = currentHP
-- end
if (currentHP == 0 and not strategies.canDie and pokemon.index(0) > 0) then
strategies.death(currentMap)
elseif (walk.strategy) then
@ -187,7 +209,13 @@ while true do
end
end
if (PAINT_ON) then
if (STREAMING_MODE) then
local newSecs = memory.raw(0xDA44)
if (newSecs ~= oldSecs and (newSecs > 0 or memory.raw(0xDA45) > 0)) then
bridge.time(paint.elapsedTime())
oldSecs = newSecs
end
elseif (PAINT_ON) then
paint.draw(currentMap)
end

View File

@ -1,5 +1,10 @@
local bridge = {}
local socket
if INTERNAL then
socket = require("socket")
end
local utils = require("util.utils")
local client = nil
@ -11,19 +16,19 @@ local function send(prefix, body)
if (body) then
message = message..","..body
end
client:send(message..'\n')
client:send(message.."\n")
return true
end
end
local function readln()
if (client) then
local s, status, partial = client:receive('*l')
local s, status, partial = client:receive("*l")
if status == "closed" then
client = nil
return nil
end
if s and s ~= '' then
if s and s ~= "" then
return s
end
end
@ -32,10 +37,22 @@ end
-- Wrapper functions
function bridge.init()
if socket then
-- io.popen("java -jar Main.jar")
client = socket.connect("127.0.0.1", 13378)
if (client) then
client:settimeout(0.005)
client:setoption("keepalive", true)
print("Connected to Java!");
return true
else
print("Error connecting to Java!");
end
end
end
function bridge.tweet(message) -- Two of the same tweet in a row will only send one
print('tweet::'..message)
print("tweet::"..message)
return send("tweet", message)
end
@ -64,17 +81,17 @@ function bridge.stats(message)
end
function bridge.command(command)
return send("livesplit_command", command)
return send("livesplit_command", command);
end
function bridge.comparisonTime()
return send("livesplit_getcomparisontime")
return send("livesplit_getcomparisontime");
end
function bridge.process()
local response = readln()
if (response) then
-- print('>'..response)
-- print(">"..response)
if (response:find("name:")) then
return response:gsub("name:", "")
else