Napoleon had not fought wellington or a british army , so he failed to realise wellingtons tactic of hiding behind a ridge.
Other armies he fought deployed so the enemy could see its might - wellington commented on bluchers deployment at Ligny - blucher claimed his troops liked to see the enemy , wellington said he was going to get a pounding.
Grouchey failed napoleon in not putting himself between the british and the prussians, but his orders were to pursue the prussians not cover the flank of napeoleon, even so he acted in a very dim way.
Napoleon basic plan , faint left punch centre was not bold enough, he should have ignored hougemont and gone further left to strike at the ridge beyond, but again his local commanders got fixated on clearing hougemont.
His reliance on heavy artillery against other armies had worked but it failed against wellington - though it did enough damage that a concerted cavalry / infantry attack at 5-6oclock could have broken through
to be fair command control during that period was always very loose, especially for the attacker.
In simulations napoleon normally wins ," it was a close run thing."