Buggy boost-damage-lizard interaction

Just so that this does not get lost in the noise (as suggested by @LouisLotter )

To add to the weird speed /damage / other related issues, I found this perplexing situation ( I suspect it is basically the same problem mentioned by @rfnel in the phase 3 balancing thread.)

Basically, P2’s speed is reported as 0 in Round 20.
It then uses lizard…and somehow then moves forward.
Speed is still zero though when we get to Round 21
THEN it uses boost…and seems to actually get that movement.
And yet, speed is still apparently zero.

Have our vehicles perhaps discovered FTL, thereby circumventing known physics, and are so able to move without moving? If so, pretty exciting stuff!

The CSV output maybe illustrates the situation a bit more clearly (sorry for the paste, not allowed to upload CSV it seems):

14 2 3 85 3 TURNING_LEFT false 0 5 2 2 0 3 15 1 1 47
15 2 3 100 0 HIT_WALL false 0 6 2 2 0 3 15 1 1 39
16 2 3 115 0 USED_BOOST true 5 6 2 3 2 3 15 2 1 63
17 2 3 115 0 FIXED_CAR true 4 4 2 3 2 3 15 2 1 63
18 2 3 115 0 FIXED_CAR true 3 2 2 3 2 3 15 2 1 63
19 2 3 115 0 NOTHING true 2 2 2 3 2 3 15 2 1 63
20 2 3 115 0 NOTHING true 1 2 2 3 2 3 15 2 1 63
21 2 3 124 0 USED_LIZARD false 0 2 2 3 1 3 15 2 1 63
22 2 3 139 0 USED_BOOST true 5 2 1 3 1 3 15 2 1 67
1 Like

Possibly part of the weirdness: should we not be snapping back to the CURRENT max speed here, instead of normal MAX speed?

Ok, so to add to that.
What is happening here, is that:

  • we use LIZARD as the boost counter hits zero (probably not relevant but pointing out for completeness)
  • next round we use boost (but with damage still at 2)
  • we seem to get full boost speed (15), even though our max SHOULD actually only be SPEED_STATE_3 (8).

And all the way through, reported (and received speed in state) remains 0.

1 Like

I took a stab at a fix in a fork here.

It was coded blindly (no working scala env, and no inclination to build one), so might not even compile.
Anyway, maybe it can at least provide some ideas.

Main ideas there is:

  • get rid of the maxSpeedState field (less mutable state == better sanity)
  • always calculate max speed when needed, based on current damage
  • clamp boost to calculated max speed
  • clamp return speed (after boost) to calculated max speed
  • clamp speed increase to calculated max speed

Now, with the current order of processing this may yet still fail - I’m not sure. some tests would be a good idea.

My opinion on the boost:
I feel using boost with a max speed of 0 should still set your max speed to 15 till broken.

When it breaks however, you go back to max speed.

So I feel boosting with a max speed of zero should still give you the perfect boost state.
I feel this will make for great sport.

That mentioned.
I do feel damage as is will be fairly complex to navigate.

I dont mind the amount of damage we are navigating, I do however feel a leeway would be great.

Well, the current docs says boost goes to current max.
I’m fine if boost actually does to 15 (actual boost speed), since that is inline with previous behavior (boost from 3 to 15 for example).

But that still leaves the other buggy-ness around damage, speed and boost. That really should be fixed imo.

And just keep in mind we are at 11 July. The clock keeps ticking, and most (if not everybody involved) still has day jobs.
Given the date, I would personally give high priority to fixing what is already in, and very, very carefully consider any further “tweaking” - remember, every tweak potentially introduces more bugs, more balancing issues (even when intended to fix balancing issues)

I can second this as well,

Last challenge I had no time to test my bot against itself. Though I built some good functions.

And as things stand I have not touched my bot since the 2nd event.

But I can make some assumptions from what I read in here.
Im starting hectic development on this next week.
Nothing feels as bad as having needed 2 more days for an entry.

That said. I feel boosting should always go to 15.
Otherwise theres no point of actually having a boost speed in there in the first place. We might as well then say this takes your speed to max.

Rules around boost is clear:

Using a boost will:

  • Immediately increase your speed to BOOST_SPEED for 5 turns.
  • Any form of deceleration (a DECELERATE command or hitting mud / oil) will cancel the boost bringing speed back down to MAXIMUM_SPEED
  • Attempting to use a boost when you have none will default to a DO_NOTHING command.

So when I look at a scenario:
If speed is 0 and a player uses boost, they will get their 15 speed, but only till they hit something.

The reason i mention this is to not have some goosh chase either.

Round 20 you have the state of: boosting:true
Since you are boosting, you still have a speed of 15
Then you use lizard and jump, Moving your 15, your boost seems to expire (boosting: false)

Then in round 21, you use Boost, again moving 15.

So by my assessment, the only mistake here is that the speed state which = 0 does not account for boosting.
What happened in the actual harness seems right in this case.

Mentioning this as there might not be any bugs at all in terms of engine. Nor changes to how its being handled.

Just to shorten my responce a bit, I actually do not see any bug in the way the engine handles this apart from speed which should be shown at 15 for boosting state instead of 0.

I suspect you have not yet caught up with the new damage rules.

I quote:

Boosting will only boost you directly to your current maximum speed.

Ref: https://github.com/EntelectChallenge/2020-Overdrive/blob/master/game-engine/game-rules.md#the-map

The other known issue is the return speed when boost expires. It snaps back to speed 9 (MAX SPEED).
This was mentioned before phase 2, but entelect team ruled at that time that it affected both players equally, so won’t be fixed at that point.

BUT, now with the damage, this cause some potential weirdness,since you drop back to speed 9, with say, damage 4. Which…strictly speaking should be impossible.

That all said, would not be the first time rules say A, but code does B, so… entelect will decide I guess.

Then there is a conflict in the game rules,

This also comes from the rules:

  • Immediately increase your speed to BOOST_SPEED for 5 turns
  • Any form of deceleration (a DECELERATE command or hitting mud / oil) will cancel the boost bringing speed back down to MAXIMUM_SPEED
  • Attempting to use a boost when you have none will default to a DO_NOTHING command.

Given the state of things, Id love to see boost stay the way it is now

My main concern is as things stand now there will always never be a scenario where using boost is viable as max speed and deceleration is essentially the same thing currently. So theres almost no good use for boost.

Theres many fixes for this.
But I do like if players are throttled. Just feel its a bit much now :grin: