Page 1 of 1

ZombieBot

PostPosted: Sun Jun 30, 2013 9:08 am
by Fordcars
Yet another bot, the ZombieBot that I made for bobdaduck :)

It starts slow and slowly speeds up. The rate that it speeds up is proportional to the lenght of the level. At 80% of the normal speed, it will start using turbo randomly. It's seriously awesome when you add 15 of them :D

  Code:
--- from S_bot, modified by fordcars
--- this bot works on all game modes, made for bobdaduck

goalPt = point.new(0,0)

prevtarget = nil

gotoPositionWasNil = true
 
o = point.new(0,0)
 
botLoc = nil        -- Bot's location, will be updated when onTick() is run

-- This function gets run once during setup.  It is the only time we can declare variables
-- and have them be defined as globals.
function main()
    botRadius = bot:getRad()
    pathTimerMax = 250
    pathTimer = pathTimerMax
    dirToGo = 0
    game = bf:getGameInfo()

    difficulty         = tonumber(arg[1]) or .5
    agression          = tonumber(arg[2]) or 0.5
    defense            = tonumber(arg[3]) or 0
    speed              = tonumber(arg[4]) or 1
    directionThreshold = tonumber(arg[5]) or .25

    gameType = game:getGameType()
   
    averageIndex = 1
    averageMax = 20

    averageArray = { }
    for i = 1, averageMax do
        averageArray[i] = false
    end

    myOrbitalDirection = 1
    myObjective = math.random(0, 10)

    zombSpeed = 0.1
    useTurbo  = false
    turboTimer = false
    oldBotSpeed = nil

    local totalTime = game:getGameTimeRemaining()

    local percTime = totalTime * 80
    percTime = percTime / 100
    percTime = percTime * 60
    zombieRate = 0.8 / percTime

    addTimer()
end
 

items = { }     -- Global variable, reusable container for findGlobalObjects.  Reusing this table avoids costs of
                -- constructing and destructing it every time we call findGlobalObjects().  Be sure to clear the
                -- table before reusing it!

function addTimer()
    Timer:scheduleRepeating(addBotRate, 16.67)
end

function addBotRate()
    zombSpeed = zombSpeed + zombieRate
end

function shieldSelf()
    table.clear(items)
    bot:findVisibleObjects(items, ObjType.Bullet, ObjType.Seeker, ObjType.Asteroid, ObjType.Mine, ObjType.Burst)

    local distToShieldAt = botRadius * 2 + (1 - difficulty) * 100
    if (items ~= nil) then
        for i,bullet in ipairs(items) do
            local bulletLoc = bullet:getPos()
            local bulletVel = bullet:getVel()
            local angleDiff = math.abs(angleDifference(point.angleTo(o, bulletVel), point.angleTo(bulletLoc, botLoc)))
            local bulletfromteam = false
            --logprint(angleDiff)
            if (game:isTeamGame() == true) and (bullet:getTeamIndex() == bot:getTeamIndex()) then -- If bullet is from team
                bulletfromteam = true                               -- bullet from team is true
            else                                                    -- If it is not a team game or if bullet is not from team
                bulletfromteam = false                              -- bullet from team is false
            end
            if (bulletfromteam == false) then
                if (point.distanceTo(bulletLoc, botLoc) < distToShieldAt + bullet:getRad() + point.distanceTo(o, bulletVel) * 50 and angleDiff < math.pi / 4) or (bullet == ObjType.Burst and point.distSquared(bulletLoc, botLoc) <= 500 * 500) then
                    bot:fireModule(Module.Shield)
                    return(true)
                end
            end
        end
    end
end

function angleDifference(angleA, angleB)
    return (math.mod(math.mod(angleA - angleB, math.pi * 2) + math.pi * 3, math.pi * 2) - math.pi)
end

function fireAtObjects()
    table.clear(items)
    bot:findVisibleObjects(items, ObjType.Robot,               ObjType.Turret, ObjType.Ship, ObjType.Asteroid,
                        ObjType.ForceFieldProjector, ObjType.SpyBug, ObjType.Core)

    -- Cycle through list of potential items until we find one that we can attack
    for index, enemy in ipairs(items) do
        if(fireAtObject(enemy, Weapon.Phaser)) then
            break
        end
    end
end
 
 
-- Fires at the specified object with the specified weapon if the obj is a good target.
-- Does not fire if object is on the same team or if there is something in the way.
-- Returns whether it fired or not.
function fireAtObject(obj, weapon)
    local classId = obj:getObjType()

    if(classId == ObjType.Turret or classId == ObjType.ForceFieldProjector) then
      if(obj:getHealth() < .1) then
          --logprint("He's dead, Jim.")
          return(false)
        end
    end
   
    if(classId == ObjType.Ship    or   classId == ObjType.Robot   or   classId == ObjType.ForceFieldProjector   or
        classId == ObjType.Turret  or   classId == ObjType.Core) then
            if obj:getTeamIndex() == bot:getTeamIndex() and game:isTeamGame() or obj:getTeamIndex() == Team.Neutral then
                --logprint("It's an ally.")
                return(false)
            end
    end

   
    local angle = getFiringSolution(obj)
    if angle ~= nil and bot:hasWeapon(weapon) then
        bot:setAngle(angle + math.rad((math.random()-0.5)*20*(1-difficulty)))
        bot:fireWeapon(weapon)
        --logprint("bot:fireWeapon() called!");
        return(true)
    end
    --logprint("Firing solution not found.");
    return(false)
end
 
 
function getName()
      return("botdazombie")
end


function shield()
    averageArray[averageIndex] = shieldSelf()
    averageIndex = math.mod(averageIndex,averageMax) + 1

    local shieldPercent = 0

    for i = 1, averageMax do
        if(averageArray[averageIndex]) then
            shieldPercent = shieldPercent + 1
        end
    end

    shieldPercent = shieldPercent / averageMax

    if(shieldPercent > directionThreshold) then
        myOrbitalDirection = -myOrbitalDirection
        for i = 1, averageMax do
            averageArray[i] = false
        end
    end
end
 
function orbitPoint(pt, dir, inputDist, inputStrictness)
    local distAway = botRadius * 7
    local strictness = 2
    local direction = 1

    if(dir ~= nil) then
        direction = dir
    end


    if(inputDist ~= nil) then
        distAway = inputDist
    end

    if(inputStrictness ~= nil) then
        strictness = inputStrictness
    end

    if(pt ~= nil) then
        local dist = point.distanceTo(pt, botLoc)
        local deltaDistance = (dist - distAway) * strictness / distAway
        local sign = 1
        if(deltaDistance > 0) then
            sign = 1
        elseif(deltaDistance < 0) then
            sign = -1
        end

        local changeInAngle = (math.abs(deltaDistance)/(deltaDistance + sign)) * math.pi/2
        local angleToPoint = point.angleTo(pt, bot:getPos())
        dirToGo = angleToPoint + (math.pi/2 + changeInAngle)*direction
        --bot:setThrust(speed, dirToGo)
    end
end

function gotoPosition(pt)
    if pt ~= nil then
        gotoPositionWasNil = false
        if pathTimer < .01 then
            goalPt = bot:getWaypoint(pt)
            if(goalPt ~= nil) then
                dirToGo = point.angleTo(botLoc, goalPt)
            end
        end
    end
end

function gotoAndOrbitPosition(pt)
    if pt ~= nil then
        gotoPositionWasNil = false
        if pt~= nil then
            gotoPositionWasNil = false
            gotoPosition(pt)
        else
            gotoPositionWasNil = false
            orbitPoint(pt, myOrbitalDirection, botRadius * 5, 2)
        end
    end
end
 
-- Returns true if it found an enemy to fight
function attackNearbyEnemies(target, agressionLevel)
    if target ~= nil then
        local targetLoc = target:getPos()
     
        -- local dist    = point.distanceTo(botLoc, targetLoc)
        local myPow   = bot:getEnergy() + bot:getHealth()

        table.clear(items)
        bot:findVisibleObjects(items, ObjType.Ship, ObjType.Robot)
     
        local otherPow = target:getEnergy() + target:getHealth() * #items
     
        --advantage is between -1 and 1, -1 meaning an extreme disadvantage and 1 meaning an extreme advantage
        local advantage = (myPow - otherPow) / math.max(myPow, otherPow)
        if(advantage  / 2 + .5  >agressionLevel) then
            --orbitPoint(targetLoc, myOrbitalDirection, botRadius * 9, 2)
            prevtarget = targetLoc
            return(false)      -- was true
        else
        end
    end
    return(false)
end


-- Returns the objective for the bot, in the form of an object the bot can navigate towards.  This makes bots choose different defending locations.
-- If onTeam is true, will only return items on specified team.  If onTeam is false, will return items *not* on
-- specified team.  If called with fewer than three args, will ignore team altogether.
function getObjective(objType, team, onTeam)

    table.clear(items)
    bf:findAllObjects(items, objType)       -- Returns a list of all items of type objType in the game

    local itemsOnMyTeam = {}
    local currentIndex = 1

    for index, item in ipairs(items) do         -- Iterate through all found items
        local itemTeamIndex = item:getTeamIndex()

        if (objType == ObjType.Flag) and (gameType == GameType.Nexus) then
            if not item:isOnShip() then
                itemsOnMyTeam[currentIndex] = item
                currentIndex = currentIndex + 1
            end
        elseif (objType == ObjType.Flag) and
                ((gameType == GameType.HTF) or (gameType == GameType.Retrieve)) and
                item:isInCaptureZone() then
                --logprint(item:getCaptureZone():getTeamIndex());
            if item:getCaptureZone():getTeamIndex() ~= bot:getTeamIndex() then
                itemsOnMyTeam[currentIndex] = item
                currentIndex = currentIndex + 1
            end
        elseif (objType == ObjType.GoalZone) and (gameType == GameType.HTF or gameType == GameType.Retrieve) then
            if onTeam == nil or ((itemTeamIndex == team) == onTeam) then
                if not item:hasFlag() then
                    itemsOnMyTeam[currentIndex] = item
                    currentIndex = currentIndex + 1
                end
            end
        else
            if (itemTeamIndex == Team.Neutral ) and (objType ~= ObjType.GoalZone or gameType ~= GameType.ZC) then
                itemTeamIndex = team   -- anything Neutral is on our team (except zone control neutral goal zone)
            end
            if onTeam == nil or ((itemTeamIndex == team) == onTeam) then
                itemsOnMyTeam[currentIndex] = item
                currentIndex = currentIndex + 1
            end
        end
    end
    local listMax = 0
    --find max
    if itemsOnMyTeam[1] ~= nil then
        for index,item in ipairs(itemsOnMyTeam) do
            if(item ~= nil) then
                listMax = listMax + 1
            end
        end
        local targetNum = math.mod(myObjective, listMax) + 1
        return(itemsOnMyTeam[targetNum])
    else
        return(nil)
    end

--  local closestitem = 0 --itemsOnMyTeam[1]
--  local cur = 1
--  local closestdist = 99999999
--  while itemsOnMyTeam[cur] ~= nil do
--      local item1 = itemsOnMyTeam[cur]
--      if item1 ~= nil then
--          local loc = item1.getPos()
--          if loc ~= nil then
--              local dist = point.distanceTo(botLoc, loc)
--              if dist < closestdist then
--                  closestdist = dist
--                  closesetitem = item1
--              end
--          end
--      end
--      cur=cur+1
--  end
--  return(closestitem)
end


function doObjective(closestEnemy)
    gotoPositionWasNil = true
    if(gameType == GameType.Bitmatch) then
        --Nothing to do here.          
    elseif(gameType == GameType.Nexus) then
        -- Grab any flags that are found, and go to nexus when it opens
        local otherFlag = getObjective(ObjType.Flag)            -- Find any flags
        if otherFlag ~= nil then gotoPosition(otherFlag:getPos()) end
        -- logprint(bot:getFlagCount())  -- always 1
        if bot:getFlagCount() > 3 and (game:isNexusOpen() or game:getNexusTimeLeft() < 10000) then  --  Need to know if nexus is open
            local nexusOrFlag = getObjective(ObjType.Nexus)  -- unimplemented push function error.
            if nexusOrFlag ~= nil then
                gotoPosition(nexusOrFlag:getPos())
            end
        end
    elseif(gameType == GameType.Rabbit) then
        --Grab a flag, or go after the flag.            
        if not bot:hasFlag() then
            local otherFlag = getObjective(ObjType.Flag, bot:getTeamIndex(), true)       -- Find flags on our team
            gotoPosition(otherFlag:getPos())
        end
    elseif(gameType == GameType.HTF or gameType == GameType.Retrieve) then
        -- Grab the flag and put it into goal zones
        -- Robot keeps trying to pick up the flags that is already in the goalZones
        if bot:hasFlag() then
            local otherFlag = getObjective(ObjType.GoalZone, bot:getTeamIndex(), true)   -- Find GoalZone on our team
            if otherFlag ~= nil then
                gotoPosition(otherFlag:getPos())
            end
        else
            local otherFlag = getObjective(ObjType.Flag, bot:getTeamIndex(), true)       -- Find flags on our team
            if otherFlag ~= nil then
                gotoPosition(otherFlag:getPos())
            end
        end
    elseif(gameType == GameType.CTF) then
        --defend the flag
        local myFlag    = getObjective(ObjType.Flag, bot:getTeamIndex(), true)    -- Find flags on our team
        local otherFlag = getObjective(ObjType.Flag, bot:getTeamIndex(), false)   -- Find flags not on our team

        if(defense < .5) then
            if bot:hasFlag() then
                if not myFlag:isOnShip() then
                    gotoPosition(myFlag:getPos())
                else
                    gotoAndOrbitPosition(myFlag:getPos())
                end
                --gotoPosition(myFlag:getPos())
            elseif(otherFlag ~= nil) then
                if myFlag:isOnShip() then
                    gotoPosition(myFlag:getPos())
                elseif not otherFlag:isOnShip() then
                    gotoPosition(otherFlag:getPos())
                else
                    gotoAndOrbitPosition(otherFlag:getPos())
                end
            end
        else
            if bot:hasFlag() then
                gotoPosition(myFlag:getPos())
            elseif myFlag:isInInitLoc() then
                gotoAndOrbitPosition(myFlag:getPos())
            else
                if myFlag:isOnShip() then
                    gotoAndOrbitPosition(myFlag:getPos())
                else
                    gotoPosition(myFlag:getPos())
                end
            end
        end
    elseif(gameType == GameType.Soccer) then
        --grab soccer and put into enemy goal
        -- How do we know if we are holding soccer ? (not supported when cannot pickup soccer (016)
        if bot:getMountedItems(ObjType.SoccerBallItem)[1] ~= nil then
            local otherFlag = getObjective(ObjType.GoalZone, bot:getTeamIndex(), false)   -- Find GoalZones not on our team
            if otherFlag ~= nil then
                gotoPosition(otherFlag:getPos())
            end          
        else
            local otherFlag = getObjective(ObjType.SoccerBallItem)                        -- Find SoccerBall
            if otherFlag ~= nil then
                gotoPosition(otherFlag:getPos())
            end
        end
    elseif(gameType == GameType.ZC) then
        -- Grab flag, then go after zones that is not ours.
        if not bot:hasFlag() then
            local otherFlag = getObjective(ObjType.Flag, bot:getTeamIndex(), true)           -- Find flags on our team
            if otherFlag ~= nil then
                if otherFlag:isOnShip() then
                    gotoAndOrbitPosition(otherFlag:getPos())
                else
                    gotoPosition(otherFlag:getPos())
                end
            end
        else
            local otherFlag = getObjective(ObjType.GoalZone, bot:getTeamIndex(), false)      -- Find GoalZones on our team
            if otherFlag then
                gotoPosition(otherFlag:getPos())
            end
        end

    elseif(gameType == GameType.Core) then
        local obj = getObjective(ObjType.Core, bot:getTeamIndex(), false)                    -- Find enemy Core
        if obj ~= nil then
            gotoAndOrbitPosition(obj:getPos())
        end
    end

    -- If we have no where to go, go to nearest enemy.
    if gotoPositionWasNil then
        if(closestEnemy ~= nil) then
            prevtarget = closestEnemy:getPos()
        end
        if(prevtarget ~= nil) then
            gotoAndOrbitPosition(prevtarget)
        end
    end
end


function goInDirection()
    bot:setThrust(zombSpeed, dirToGo)
end

function turbo()
    useTurbo = true
    oldBotSpeed = zombSpeed
    zombSpeed = 1

    local turboLength = math.random(2000, 6000)
    Timer:scheduleOnce(stopTurbo, turboLength)
end

function stopTurbo()
    useTurbo = false
    turboTimer = false
    zombSpeed = oldBotSpeed
end

-- This function gets called every game tick; deltaTime is the time that has elapsed since it was last called
function onTick(deltaTime)
    botLoc = bot:getPos()
    pathTimer = pathTimer - deltaTime
    assert(bot:getPos() ~= nil)

    local closestEnemy = bot:findClosestEnemy()
   
    -- attackNearbyEnemies returns true if there is an enemy to fight, false if the bot can do something else
    attackNearbyEnemies(closestEnemy, 1 - agression)
    doObjective(closestEnemy)   -- Set bot's objective

    goInDirection()             -- Move the ship
    fireAtObjects()             -- Fire weapons
    shield()                    -- Apply shield

    if(pathTimer < 0) then
        pathTimer = pathTimerMax + math.random(0, pathTimerMax)
    end

    if (turboTimer == false) and (zombSpeed >= 0.8) then --------------------
        local timerTime = math.random(20000, 30000)
        turboTimer = true
        Timer:scheduleOnce(turbo, timerTime)
    end

    if (useTurbo == true) then
        bot:fireModule(Module.Turbo)
    end
end

Re: ZombieBot

PostPosted: Sun Jun 30, 2013 9:09 am
by Skybax
THANK YOU :zapdance:

Re: ZombieBot

PostPosted: Sun Jun 30, 2013 9:27 am
by Fordcars
YOU'RE WELCOME :zapdance:

Re: ZombieBot

PostPosted: Sun Jun 30, 2013 9:47 am
by Quartz
Great job! :)

Re: ZombieBot

PostPosted: Tue Jul 30, 2013 5:38 pm
by CamperKiller39
Ha ha ha, these things are fun. :D

Re: ZombieBot

PostPosted: Wed Sep 04, 2013 8:53 am
by Santiago ZAP
AWESOME JOB
Would be epic if they like, changed teams when killed by another zombiebot

Re: ZombieBot

PostPosted: Wed Sep 04, 2013 12:47 pm
by Fordcars
Hehe thanks :D

Yeah, maybe with levelgens eventually :P

Re: ZombieBot

PostPosted: Sun Dec 22, 2013 2:21 pm
by Zapgamer
Fix it please, 19 update broke it.

Re: ZombieBot

PostPosted: Sun Dec 22, 2013 8:57 pm
by Fordcars
Fine ;) I'll try to 019 it

Re: ZombieBot

PostPosted: Sun Dec 22, 2013 9:23 pm
by Fordcars
Done!
If you have any suggestions or problems, tell me!

Re: ZombieBot

PostPosted: Mon Dec 23, 2013 12:16 am
by Skybax
It doesn't work for me. When I try to add it, it just leaves immediately.

Re: ZombieBot

PostPosted: Mon Dec 23, 2013 3:12 pm
by Fordcars
Really? Not for me...

Re: ZombieBot

PostPosted: Mon Dec 23, 2013 3:14 pm
by Fordcars
Oh it crashes on certain Gametypes

Edit: Oh hahaha: robot_helper_functions.lua bug, nice

Edit: DISREGUARD! By the way, if any guys want to convert their code to 019 fast, this website is really useful:http://textmechanic.com/Find-and-Replace-Text.html

Re: ZombieBot

PostPosted: Mon Dec 23, 2013 9:43 pm
by Fordcars
Sorry guys, there is a lua bug, probably Bitfighter's problem. It is telling me there is an "=" missing where there isn't :? I'll work on it. Oh and Skybax, I'll try to get your bot working too ;)

Re: ZombieBot

PostPosted: Tue Dec 24, 2013 12:19 pm
by raptor
Hi,

Yes it was an error in robot_helper_functions.lua: 'bot:findAllObjects' should have been 'bf:findAllObjects'.

However... Please look at your console when running the bot - you'll get deprecation warnings. These are meant to scream at you to update your code. Updating the code to 019 API does fix this bot.

I recommend making the bot use 'bf:findAllObjects' as well as solving all the other warnings.

Re: ZombieBot

PostPosted: Tue Dec 24, 2013 1:19 pm
by Fordcars
Hi, I did all the changes to stop the screaming, but I still get an '=' missing and I have no idea why. Here is the code: http://pastie.org/8574175

I think this may be a stupid thing that I did though :P

Re: ZombieBot

PostPosted: Tue Dec 24, 2013 2:44 pm
by Fordcars
Raptor, I am lost. I did all the changes I should of I think, my log is clean apart from the '='

Re: ZombieBot

PostPosted: Tue Dec 24, 2013 3:02 pm
by raptor
Sorry, I'll explain better:

If you change the one instance of bot:findGlobalObjects to bf:findAllObjects, that will fix the bot. Then, take a look at your log as you run the bot, it will be screaming at you.

Re: ZombieBot

PostPosted: Tue Dec 24, 2013 3:35 pm
by Fordcars
Ahh thanks, but I think I messed up somewhere, I still get the freaking = in http://pastie.org/8574175

Here is the log: http://pastie.org/8574359

Re: ZombieBot

PostPosted: Tue Dec 24, 2013 3:41 pm
by raptor
That's weird - it looks like you made changes from the code that is posted in the first post. You should probably copy/paste from what you posted...

Re: ZombieBot

PostPosted: Tue Dec 24, 2013 3:47 pm
by Fordcars
I know, sorry :P But I didn't even touch that part, and that line is 'local bulletFromTeam = false' so, no error syntax. I'll update my first post

Re: ZombieBot

PostPosted: Tue Dec 24, 2013 4:38 pm
by Fordcars
Finally works!

Re: ZombieBot

PostPosted: Thu Jan 02, 2014 1:09 pm
by Skybax
What determines how fast the zombie goes? Cause it seems like it speeds up really fast and then can go even faster than a player lol

Re: ZombieBot

PostPosted: Thu Jan 02, 2014 2:21 pm
by Fordcars
Hehe, it is proportionate to the length of the level, and then at some point it starts to use boost :)

Edit: Oh wait, raptor tells me there is a client prediction bug

Edit: We have no idea what is going on

Re: ZombieBot

PostPosted: Thu Jan 02, 2014 4:20 pm
by Skybax
Fordcars wrote:Hehe, it is proportionate to the length of the level, and then at some point it starts to use boost :)

Edit: Oh wait, raptor tells me there is a client prediction bug

Edit: We have no idea what is going on

That made me laugh out loud.

Re: ZombieBot

PostPosted: Fri Jan 10, 2014 1:17 pm
by Zapgamer
Some of the bots don't work and will keep heading right toward a wall. It doesn't shoot or move anywhere's else.

Re: ZombieBot

PostPosted: Fri Jan 10, 2014 5:32 pm
by Fordcars
Yeah, there seems to be a problem with some stuff, but that looks more like an s_bot problem :P

Re: ZombieBot

PostPosted: Wed Jan 15, 2014 12:40 pm
by amgine
Hmm wonder what would happen if you made s_bot 1.25x faster then a normal ship...

Re: ZombieBot

PostPosted: Wed Jan 15, 2014 3:46 pm
by Fordcars
Me and raptor tried it, It may jitter a tiny bit more, but Bitfighter will never let bots or ships go faster than 1 :P

Re: ZombieBot

PostPosted: Wed Jan 15, 2014 8:14 pm
by amgine
a shame wish there was a way to get robots to go faster then normal ships maybe adjust the max sped value for bots......

Re: ZombieBot

PostPosted: Wed Jan 15, 2014 10:31 pm
by Skybax
I swear ZombieBot goes faster than me when it's angry.

Re: ZombieBot

PostPosted: Thu Jan 16, 2014 6:56 pm
by Fordcars
Yeah, well, I can't control bot's will, I guess you will have them haunt you, for the rest of your life...

Re: ZombieBot

PostPosted: Fri Jan 17, 2014 9:58 pm
by amgine
Is it possible to make a bot that always uses turbo + phaser and the energy requirement for the turbo is 0? then maybe you can have a faster bot.....

Re: ZombieBot

PostPosted: Sat Jan 18, 2014 12:35 am
by Fordcars
Sadly, no, since bot's are pretty much players, so no cheating :( You would need a levelgen

Re: ZombieBot

PostPosted: Wed Jan 22, 2014 5:03 pm
by amgine
ok use a lev gen then :)

Re: ZombieBot

PostPosted: Mon Jan 27, 2014 8:18 pm
by Fordcars
Problem resolved!!!!! The bot speeds faster than normally because of the timer bug in 019, it is repaired in 019a, happy zombieing!

Re: ZombieBot

PostPosted: Fri Jan 31, 2014 2:36 pm
by amgine
So bots are faster then players now?

Re: ZombieBot

PostPosted: Fri Jan 31, 2014 2:38 pm
by Skybax
They are right now, but won't be in the next release.

Re: ZombieBot

PostPosted: Fri Jan 31, 2014 2:47 pm
by amgine
better find a way to fix it in next release

Re: ZombieBot

PostPosted: Fri Jan 31, 2014 3:29 pm
by Skybax
It already is...

Re: ZombieBot

PostPosted: Fri Jan 31, 2014 3:39 pm
by Fordcars
Yep :zapdance:

Re: ZombieBot

PostPosted: Sat Feb 01, 2014 1:07 pm
by amgine
Skybax wrote:They are right now, but won't be in the next release.


is there a limit to how much faster the bot can go i would like to see a x3 speed robot......

Re: ZombieBot

PostPosted: Sun Feb 02, 2014 12:49 pm
by Fordcars
Yeah, bots can't go faster than normal players, sorry!

Re: ZombieBot

PostPosted: Mon Feb 17, 2014 7:08 pm
by amgine
there's a way around everything in programming XD

maybe a level gen ?

Re: ZombieBot

PostPosted: Mon Feb 17, 2014 7:12 pm
by Fordcars
Yeah, but client side prediction would poop on you allot :/

Re: ZombieBot

PostPosted: Mon Feb 17, 2014 7:15 pm
by amgine
I think i have a idea what about a invinisble mini speed zone that will always follow the bot around and he will be on top of it.....