“Farmers Feud” Bugs and Feedback

Hello all,

Monox Val here. Currently ranking #1 in Farmer’s Feud 100% win ratio. I’m loving the game and I want to give some feedback.

In Javascript, ‘console.log()’ doesn’t seem to work. Instead I’m using print(). Is this intended or a bug ?

The opposite field type of ‘construction’ is missing (e.g ‘clearing’). When an enemy is clearing a field, which takes 2 second, the type of hero.whatAt('xx') will report empty.

Is poison actually a 0x multiplier? I have seen some fields with positive numbers even with active poison.

The hero.score works for my hero but not for the enemy enemyHero = hero.getEnemyHero().

It would also be nice to have a .name or .id methods just to print fun messages to the console including the enemy name. Gamers will have a fun surprise when they open the developer tools and see those messages :slight_smile:

The game is by default logging too many messages and shuts up at 200 logs. Somewhere after game time 100s+ the print command stops logging to the console. It would be also nice if the random name in the console was different for both players. Currently, printing at the console shows the same name for both players.

When reading a field income property, it shows the actual number with all multipliers applied (including rain & mist). It would be nice to have an ‘.incomeReal’ that shows the income without rain or mist but includes the river and other fields multiplier. Currently, I have to match against active rain & mist col/rows and calculate the real
income. (Poison with x0 mutiplier is tricky and will lead to division by 0).
It would be useful if hero.findRains() and hero.findMists() additionally had a .timeLeft or .timeStarted properties.

That’s all I can remember off my head now. Sorry I didn’t take screenshots!

Thanks,

Monox.

Absolutely. 25% speed reduction applied to the worker. I permanently read the enemy worker position and send him a rain asap throught the full game length. The only exception is when my worker is in the same column as the eneny column, then I simply don’t cast the rain, and let the next loop iteration decide again.

1 Like

Something similar happened to me. I had a loss. I watched it and I ended up winning. I was like ok what’s going on here?

At the beginning I thought that was a bug, but later I realized the root of the issue. Are you using the hero color “red” or “blue” somewhere in your code? Everytime you manually fight the enemy, you are the red team. However, when the CPU is playing games on your behalf, sometimes you are red and sometimes blue. This is what caused the error discrepancy. I fixed it by using in Javascript:

const enemyHero = hero.getEnemyHero();
const kHeroColor = hero.color;
const kEnemyColor = enemyHero.color; 

Which also leads to a bug report. When I pick a battle I should randomly be assigned to red or blue. Not defaulted to red. This will improve everybodys code.

1 Like

Hello, sorry for the late response, just getting back into this arena

console.log() does seem to work on my side,

will check the hero.whatAt() on clearing fields

Yes, poison is x0, however as stated in the documentation, if a farm is next to a river, if its poisoned, it will have some of its income returned, so not x0 for that farm if its next to a river

hero.getEnemyHero().score returns correctly on my side, can you provide some screenshots or example code?

I don’t think we can add a .name or .id method since it could allow players to have specific reaction/strategy to certain players

Will share the rest of your feedback with the team to discuss it further, thank you for the suggestions!

The matches are fully mirroring, so if you or your opponent don’t use explicitly red or blue constants then the match should happens with the same result. If you have another experience then its a bug – please send us a link to such match (specate mode so both ids are presented)

Nope. We won’t give this. Honestly console.log visible for both players is a problem that we should disable I think to avoid such messages to your opponent.

from the documentation
- `duration` -- the remaining time of the mist existance

Hello, I have some suggestions and feedback.

First, “poison” mist are eroding field.
I thought part of “wheat” mist was cleared by rain, but cleared part eroded by “poison” mist in this picture.
In the future, all of field will be cursed by poison… will not?
image
image

Second, about real income.

I agree. It is very hard to calculate real income(no factor outside the field, riverFactor do not duplicate, and you have to calculate all income in field when you consider mistFactor and rainFactor).

Finally, I got #1 ranking, but I will fix and improve my code to save this rank. (I have been displaced at the top in “Magma Mountain”…) Thanks for the challenging league.
(By the way, I’m not from English speaking country. So let me know if I say something that’s unclear.)

I’ve been having problems. when I beat someone ranked above me it dosen’t move me up. Is the ranking using somthing other than beating the person above me?

Hello, can you send a match link? Thank you for the report!

Will consider and discuss this with the team, thank you for the suggestion!

I think this post that Nick made explains this best

It’s fine. Reading both the hero and enemy color is working as expected and that solved the issue.

Makes sense. Also for privacy concerns, it’s better to keep it anonymus. But if you guys chose to disable console.log() / print(), how can we read the data? Those aren’t the best tools for debugging but still good enough for this game.

Congratz on #1. Enjoy while you can, I will fix my code whenever I have time off from “adulting” and take back spot #1 :rofl:

1 Like

There are not a match link, sorry.
The code below may make same situation.

time = 99999
while True:
    if time + 5.1 < hero.time and hero.isReady("mist"):
        time = 99999
        if len(hero.findMists()) == 0: continue
        mistPos = []
        for mist in hero.findMists(): mistPos.append(mist.row)
        if hero.findMists()[0].type != "garden": type = "garden"
        else: type = "wheat"
        for i in range(10):
            if i not in mistPos and ((i != 0 and i-1 in mistPos) or \
                (i != 9 and i+1 in mistPos)):
                hero.mist(type,i)
                break
    elif hero.isReady("rain"):
        hero.rain("G")
        time = hero.time
    hero.wait(0.1)

Does this match have the bug you mentioned?

Yes, this is the bug I mentioned.

Inifine loop. Hopefully the screenshots have the IDs to reproduce it.