diff --git a/donkutil.lua b/donkutil.lua index 0279418..d047eaa 100644 --- a/donkutil.lua +++ b/donkutil.lua @@ -1,6 +1,10 @@ local base = string.gsub(@@LUA_SCRIPT_FILENAME@@, "(.*/)(.*)", "%1") -util = dofile(base.."/util.lua") +local util = dofile(base.."/util.lua") +local spritelist = dofile(base.."/spritelist.lua") + +spritelist.InitSpriteList() +spritelist.InitExtSpriteList() FG_COLOR = 0x00ffffff BG_COLOR = 0x99000000 @@ -281,7 +285,12 @@ Stage (movement): %04x local sprcolor = BG_COLOR if detailsidx == idx then sprcolor = 0x00ff0000 + elseif spritelist.Sprites[sprite.control] == -1 then + sprcolor = 0x66990000 + elseif spritelist.Sprites[sprite.control] == 1 then + sprcolor = 0x66009900 end + gui.text(sprite.screenX * 2, sprite.screenY * 2, string.format("%04x, %04x, %04x", sprite.control, sprite.animnum, sprite.attr), FG_COLOR, sprcolor) local filename = os.getenv("HOME").."/neat-donk/catchem/"..sprite.animnum..","..sprite.attr..".png" diff --git a/game.lua b/game.lua index 31de008..8397f6e 100644 --- a/game.lua +++ b/game.lua @@ -59,6 +59,23 @@ function _M.getKremCoins() return krem end +function _M.getGoalHit() + local sprites = _M.getSprites() + for i=1,#sprites,1 do + local sprite = sprites[i] + if sprite.control ~= 0x0164 then + goto continue + end + -- Check if the goal barrel is moving up + if sprite.velocityY < 0 then + return true + end + ::continue:: + end + + return false +end + function _M.getKong() local kong = memory.readword(KONG_LETTERS) return bit.popcount(kong) diff --git a/neat-donk.lua b/neat-donk.lua index 0fa3d53..5706f64 100644 --- a/neat-donk.lua +++ b/neat-donk.lua @@ -989,13 +989,11 @@ function mainLoop (species, genome) print("ExtraLiveBonus added " .. ExtraLiveBonus) end - -- FIXME sus - --[[ - if rightmost > 4816 then + if game.getGoalHit() then fitness = fitness + 1000 - print("!!!!!!Beat level!!!!!!!") + statusLine = string.format("LEVEL WON! Fitness: %d", fitness) + statusColor = 0x0000ff00 end - -- ]] if fitness == 0 then fitness = -1 end