New build is up here!
I finally figured out what was going wrong with my collision code. The problem is obvious in hindsight. Each frame, Pierce checks for surfaces the player should have hit both between where the player used to be and where they currently are, and from where they are and where Pierce estimates they will be next frame. When that check senses a surface, it checks what type of surface that happens to be, and performs the correct action. I was checking for default walls in one check, but not the other. Dumb! But it's fixed now, so I'm not complaining.
I'm still planning on adding in a "stunned" state (or maybe just a co-routine) for when the player charges into a wall, but for now there's just no drawback to charging into walls. It feels... good. Maybe worth just keeping.
I'm also planning on adding in a power meter for the player's charge. This is one of those features I thought of a long time ago but also forgot about a long time ago. Drawback of doing so little work on this each week, I guess. I was going to make it a radial meter, like the timers on timed goal nodes. I can blame my not doing so this week on my parents being in town, but if I'm being honest, I had other chances and decided to be lazy this week.
Plus, I found a strip of tape on the ground today that was labeled, "NO EXCUSES." You gotta respect that.
As always, charge-up noise is by Javier Zumer. I'm using and modifying it under this license.