It should be perfectly fine to use few sprite sheets. In the Barbarian thread F.L. asked pretty much the same question and in the linked post I replied with some math on how the start frame inside a sprite sheet can be calculated. Using that trick you can have a single spritesheet (all sprites should have the same width of course) and alter R_sprite_gfxbase on the fly (plus whatever other parameters needed - number of frames for example or animation speed).
I was able to get started from the information in that thread but I'm still having some trouble working through this. I might be mistaken about what is happening, but this is what it looks like to me.
Currently I have 6 frames spread over two 3-frame animations. When I press the button to shift to the punch animation, it doesn't seem to start from the beginning. For instance, if I pressed the button while on the second frame of the normal "idle" animation, then the punch animation will start on its respective third frame. I'm not sure if that's exactly, but it never really seems to go through the entire punch animation, and it definitely produces a separate and distinctly incomplete animation based on what frame of my idle animation I start on.
My sprite is 80 pixels wide. Each frame is 128 pixels high (so with all 6, the spritesheet is 80x768). I'm adding 15360 when I hit the button, which if I understood the post you linked properly, it the number I'm to add in order to have it play the second animation.
I'm storing rlist[P1].gfxbase into a variable before my loop. When the punch button is pressed, i set rlist[P1].gfxbase to my variable + 15360 and then set it back to the variable's value alone after 3 frames.
Is there a way to have it reset to the first frame of an animation before it plays? Or is there something fundamentally wrong with my approach here? Any help would be appreciated!