Refactor strategies to game subsystem

This commit is contained in:
Kyle Coburn 2015-04-06 00:50:00 -07:00
parent 0ec69a6a95
commit f7a1faf1ca
5 changed files with 2538 additions and 2440 deletions

View File

@ -1,6 +1,7 @@
local control = {} local control = {}
local combat = require "ai.combat" local combat = require "ai.combat"
local strategies
local bridge = require "util.bridge" local bridge = require "util.bridge"
local memory = require "util.memory" local memory = require "util.memory"
@ -19,9 +20,11 @@ local encounters = 0
local canDie, shouldFight, minExp local canDie, shouldFight, minExp
local shouldCatch, attackIdx local shouldCatch, attackIdx
local extraEncounter, maxEncounters local extraEncounter, maxEncounters
local isYolo, battleYolo local battleYolo
control.areaName = "Unknown" control.areaName = "Unknown"
control.moonEncounters = nil
control.yolo = false
local controlFunctions = { local controlFunctions = {
@ -157,7 +160,7 @@ function control.canCatch(partySize)
local pokeballs = inventory.count("pokeball") local pokeballs = inventory.count("pokeball")
local minimumCount = 4 - partySize local minimumCount = 4 - partySize
if pokeballs < minimumCount then if pokeballs < minimumCount then
require("ai.strategies").reset("Not enough PokeBalls", pokeballs) strategies.reset("Not enough PokeBalls", pokeballs)
return false return false
end end
return true return true
@ -167,7 +170,7 @@ function control.shouldCatch(partySize)
if maxEncounters and encounters > maxEncounters then if maxEncounters and encounters > maxEncounters then
local extraCount = extraEncounter and pokemon.inParty(extraEncounter) local extraCount = extraEncounter and pokemon.inParty(extraEncounter)
if not extraCount or encounters > maxEncounters + 1 then if not extraCount or encounters > maxEncounters + 1 then
require("ai.strategies").reset("Too many encounters", encounters) strategies.reset("Too many encounters", encounters)
return false return false
end end
end end
@ -206,7 +209,7 @@ end
-- Items -- Items
function control.canRecover() function control.canRecover()
return potionInBattle and (not battleYolo or not isYolo) return potionInBattle and (not battleYolo or not control.yolo)
end end
function control.set(data) function control.set(data)
@ -214,7 +217,7 @@ function control.set(data)
end end
function control.setYolo(enabled) function control.setYolo(enabled)
isYolo = enabled control.yolo = enabled
end end
function control.setPotion(enabled) function control.setPotion(enabled)
@ -229,6 +232,9 @@ function control.wildEncounter()
encounters = encounters + 1 encounters = encounters + 1
paint.wildEncounters(encounters) paint.wildEncounters(encounters)
bridge.encounter() bridge.encounter()
if control.moonEncounters then
control.moonEncounters = control.moonEncounters + 1
end
end end
function control.reset() function control.reset()
@ -242,8 +248,12 @@ function control.reset()
fightEncounter = 0 fightEncounter = 0
caveFights = 0 caveFights = 0
battleYolo = false battleYolo = false
isYolo = false control.yolo = false
maxEncounters = nil maxEncounters = nil
end end
function control.init()
strategies = require("ai."..GAME_NAME..".strategies")
end
return control return control

2382
ai/red/strategies.lua Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

41
ai/yellow/strategies.lua Normal file
View File

@ -0,0 +1,41 @@
local strategies = require "ai.strategies"
local combat = require "ai.combat"
local control = require "ai.control"
local battle = require "action.battle"
local shop = require "action.shop"
local textbox = require "action.textbox"
local walk = require "action.walk"
local bridge = require "util.bridge"
local input = require "util.input"
local memory = require "util.memory"
local menu = require "util.menu"
local player = require "util.player"
local utils = require "util.utils"
local inventory = require "storage.inventory"
local pokemon = require "storage.pokemon"
local status = strategies.status
strategies.timeRequirements = {}
-- STRATEGIES
local strategyFunctions = strategies.functions
-- PROCESS
function strategies.initGame(midGame)
if not STREAMING_MODE then
-- strategies.setYolo("")
end
end
function strategies.resetGame()
status = strategies.status
end
return strategies

View File

@ -20,7 +20,7 @@ local walk = require "action.walk"
local combat = require "ai.combat" local combat = require "ai.combat"
local control = require "ai.control" local control = require "ai.control"
local strategies = require "ai.strategies" local strategies = require("ai."..GAME_NAME..".strategies")
local bridge = require "util.bridge" local bridge = require "util.bridge"
local input = require "util.input" local input = require "util.input"
@ -95,7 +95,9 @@ local function resetAll()
math.randomseed(strategies.seed) math.randomseed(strategies.seed)
end end
-- Execute -- EXECUTE
control.init()
print("Welcome to PokeBot "..GAME_NAME.." version "..VERSION) print("Welcome to PokeBot "..GAME_NAME.." version "..VERSION)
STREAMING_MODE = not walk.init() STREAMING_MODE = not walk.init()
@ -166,9 +168,6 @@ while true do
if battleState == 1 then if battleState == 1 then
if not inBattle then if not inBattle then
control.wildEncounter() control.wildEncounter()
if strategies.moonEncounters then
strategies.moonEncounters = strategies.moonEncounters + 1
end
inBattle = true inBattle = true
end end
end end