|File Name:||Pyro Guy|
|Submitted:||2016-09-13 01:46:38 PM by DarkCodr|
|Description:||Pyro guy, a Shy Guy that shoots fireballs at Mario. The ExGFX file uses SP4. There is also a palette file included. Hurts Mario if jumped on or touched. Can only be killed by a shell or another projectile.|
First off: the palette file could benefit from a .palmask file so that it doesn't overwrite colors it isn't using. Additionally, the palette seems to occupy colors on palette 0 (which sprites cannot use) and then makes all other colors black. This isn't a major error, but considering it comes with graphics that aren't adapted to SMW's default colors, it would be a good idea to fix. Regardless, for the purpose of this moderation, I will not be using the included palette.
Very minor, but if it walks off an edge it will have odd behavior; it will fall with the Y-speed value of #$10. It would be best to remove the "LDA #$10 : STA $AA,x" or change the code from this to this. Essentially, I added a bit of code to jump passed the X/Y speed being written to while the sprite is in the air. I also moved "JSL $01802A" which processes X/Y speed values to a place where it'll always be written to; this also fixes another minor issue where if the sprite is in the "shooting fireball" pose, it'll not have any Y movement.
The sprite seems to use only two extended sprite slots. This means that if it attempts to shoot more fireballs while the two it originally fired are already out, it will simply not shoot them. If multiple of this sprite are on-screen at the same time, they will also fail to shoot fireballs. If you replace the code from the "SHOOTFIRE" until the start of the GFX routine, with this code, this will fix both issues. Please ensure that at least 8 (#$07 in the code) of the 10 (#$09 in the code) extended sprite slots are checked in a loop; any fewer or more will create problems.
If the sprite attempts to shoot fireballs while it's offscreen, it'll simply fail to end the code that says to stop firing. This means it'll keep attempting to fire (and, by extension, it'll keep playing the sound which will overwrite other sounds) even if it simply can't. The code I gave you in Issue 2 will fix this, however.
This is the .ASM file with all of the changes I recommended.