I realised that I started the timer at the wrong point, which, unfortunately, means that it's not, in fact, a sub-28. Shootsticks. Would be a 27:57.
Optimisations, optimisations, and optimisations. Also some tense moments and a really poor last fight. I really need to calculate a better route for that one than "flail around until there's footsteps".