the cutting room mirror

Kirby Fighters

This article has a talk page!This article has a talk page!
view on tcrf.net

This is a sub-page of Kirby: Triple Deluxe.

Kirby: Triple Deluxe has a fun sub-game called Kirby Fighters in which Kirby and other colorful clones of his duke it out with different Copy Abilities. This mode shares assets with the main game (music, graphics, models, etc), but it has its own Mint bytecode file, meaning this sub-game is kind of its own game. This also applies to Story Mode and Dedede's Drum Dash. Due to all these circumstances, there are some unused things in this sub-game not found in any other mode, such as leftovers from the game's Story Mode and even fully functional debugging tools that are referenced in the main game's Mint file, but completely removed there.

The Mint file, called Fight.bin.cmp, is found within RomFS/mint.

Unused Debugging Features#

Unlike Story Mode's mint file, Kirby Fighters has a few debugging states and scripts that the developers failed to remove from the game.

DebugFreeMove#

Under Scn.Fight.Hero.Common, the animation script "AnimScriptDebugFreeMove" and the state script "StateDebugFreeMove" lie unused alongside Kirby's other common and basic actions. These scripts are non-functional on their own, but if a Copy Ability is edited to load them, the game will let Kirby perform the following behavior. Kirby_Triple_Deluxe_DebugFreeMove.gif

These scripts essentially act as a noclip feature, letting Kirby ignore the stage's collision and move around while invulnerable to attacks. The game also makes Kirby flash rapidly when this state is active. The state's "void ProcAnim()" function under Scn.Fight.Hero.Common.StateDebugFreeMove also contains a few debug messages set by the developers that would've been printed out to the game's console in development, but they do not trigger.

Message (Japanese)

Translation

"自由移動中 ('SELECT+A'で解除, 'R'で高速移動) "

"Free Movement (Press 'SELECT+A' to cancel, 'R' for fast movement)"

"地形判定[有効] ('L'で切り替え)"

"Collision Detection [Enabled] (Switch with 'L')"

"地形判定[無効] ('L'で切り替え)"

"Collision Detection [Disabled] (Switch with 'L')"

"レーン[前] ('X'で切り替え)"

"Lane [In front] (Switch with 'X')"

"レーン[後] ('X'で切り替え)"

"Lane [In the back] (Switch with 'X')"

"(このステップは1レーンしかないためレーン切り替えはできません)"

"(This Step has only one lane, so lane switching is not possible.)"

In the last message, "Step" refers to a room, as that's how HAL Laboratory refers to them internally. Unfortunately, none of these extra controls seem to work, though it seems like these were intended for regular Story Mode stages, and these were simply copied over to Kirby Fighters when it was being developed.

There are multiple quirks and special interactions with the mechanics of Kirby Fighters. Kirby can still interact with items (but not Carry Items or Action Stars unless activated by others). Food and Invincibility Lollipops will work as usual, while the slowdown and speed-up effects from the Action Star and the Dash Shoes will be applied visually, but won't actually affect his speed. Mint Leaves, Mikes, and getting squished by the Squeaky Hammer Machines in Factory Tour will also work as usual, which means Kirby will be put out of the debugging state. Kirby can also be slightly pushed around by other Kirbys, and, if any CPU Kirby is alllowed into the state, they will not move, no matter their AI level.

This debugging feature is also in future Kirby games, such as Kirby Fighters Deluxe, the standalone sequel to this sub-game.

(Discovery: JC Players)

DebugSquatWait#

Archer has a debugging move specifically to test the cardboard cutouts of its "Camouflage" move under Scn.Fight.Hero.Sniper, comprised by the animation script "AnimScriptDebugSquatWait" and the state script "StateDebugSquatWait". It has a namespace in the main mint file for Story Mode, but it's completely empty. It has full functionality within the Mint file for Kirby Fighters, although some editing has to be done to make it work within the game, as it will not be initialized on its own, and it's prone to crashes on real hardware. If successfully restored, it leads to the following behavior. Kirby_Triple_Deluxe_DebugSquatWait.gif

When crouching down and pressing the B button, the player is able to cycle between all the available designs for the cardboad cutouts that Kirby pull up when using Camouflage. It also has debug messages set by the developers in the "void ProcAnim()" function under Scn.Fight.Hero.Sniper.StateDebugSquatWait.

Message (Japanese)

Translation

"書き割り確認用モード Actionボタンでモデル切り替え"

"Prop Check Mode - Switch models with the Action Button"

This debugging feature also returned in Kirby Fighters Deluxe and Kirby Fighters 2.

(Source: Vyroz)

Other#

There are multiple dummied-out scripts in the Mint file. The directory Scn.Fight.Debug contains the modules "DamageMonitor" and "GeneralDrawer", both empty. Scn.Fight contains the module "DebugFightSettingProxy", also empty.

(Source: Vyroz)

Unused Moves#

Ninja#

Like in the Mint file for the main game, Ninja's ability to execute the "Quad Shock" move in the air like in Kirby's Return to Dream Land remains in this sub-game. Why it doesn't trigger is for the exact same reason as in Story Mode: The move is disabled by the "isGround" Mint instruction in the "TryToChangeState(Scn.Fight.Hero.Obj)" function. The code is almost the same, only being updated to use Kirby Fighters own set of instructions.

bool TryToChangeState(Scn.Fight.Hero.Obj)

fenter 5, 1, 2
ldfrsr 15, r1
callnt Scn.Fight.Hero.Obj.footState()
ldsrfz r3
ldfrsr 15, r3
callnt GObj.FootState.isGround()const

When the last line of code above is removed, the move will be allowed to trigger while in the air and while grounded. Its removal is far more understandable here, as allowing Kirby to perform Quad Shock even in the air can result in a lot of damage being racked up at an incredibly quick pace, easily overpowering a lot of abilities that rely on aerial combat or abilities that specialize in hand-to-hand combat.

Sword#

Sword's "Sword Beam" move from Story Mode has a lot of leftovers in the Mint file. The SChara projectile and the requestor with all the instructions to let Sword shoot it out of Overhead Slash at full HP are completely programmed in, present in Fight.Hero.Sword.SwordUtil.ReqSwordBeam(Scn.Fight.Hero.Obj). Sword will never make any attempt to shoot it due to its function in Scn.Fight.Hero.Sword.StateAttack.procAnim() not having any code that calls the requestor. The following piece of code allows Overhead Slash to shoot out the beam, calling the requestor.

swordbeam:
ldofa4 r3, r0, this.mObj
ldfrsr 15, r3
callnt Scn.Fight.Hero.Obj.scriptTrigger()
ldsrfz r2
ldsrc4 r3, 0x3
ldfs2  15, r2, r3
callnt GObj.ScriptTrigger.get(uint)const
ldsrfz r1
jmpneg r1, loc_000000c8
ldofa4 r1, r0, this.mIsAttackCollided
ntbool r1, r1
jmpneg r1, loc_000000c8
ldofa4 r2, r0, this.mObj
ldfrsr 0, r2
call   Scn.Fight.Hero.Sword.SwordUtil.ReqSwordBeam(Scn.Fight.Hero.Obj)
ldsrfz r1

If successfully inserted, all of its functionality from Story Mode is fully restored.

(Source: Vyroz)

Unused SCharas#

Kirby Fighters has some SCharas left over from the main Story Mode Mint file that don't get used by any Copy Ability or default action performed by Kirby. An "SChara" is a minor entity, like projectiles, or other types of enemies. The SCharas below are ordered following their internal hexadecimal ID. Please note that the projectiles are being spawned by Archer's default move, which makes them use the arrow's movement.

(Source: Worm358)

StarShot#

StarShot's ID is 0x22, and consists of the normal Star Bullet projectile that Kirby can spit out after he's inhaled something in Story Mode. It goes unused due to Kirby not being able to gobble up things in this sub-game. Kirby_Triple_Deluxe_StarShot_(0x22).gif

StarShotStrong#

StarShotBig's ID is 0x23, and consists of the stronger Star Bullet projectile that Kirby can spit out after he's inhaled two objects in Story Mode. It goes unused due to Kirby not being able to gobble up things in this sub-game, much less two at once. Kirby_Triple_Deluxe_StarShotStrong_(0x23).gif

StarShotStrongBig#

StarShotStrongBig's ID is 0x24, and consists of the strongest Star Bullet projectile that Kirby can spit out after he's inhaled multiple objects in Story Mode. You can probably guess why this went unused. Kirby_Triple_Deluxe_StarShotStrongBig_(0x24).gif

SwordBeam#

SwordBeam's ID is 0x26, and consists of the beam that Sword Kirby is able to shoot with full health in Story Mode when using Overhead Slash, as previously covered. Its presence, coupled with the other leftovers, suggests that the developers considered making part of Sword's moveset in this mode before ultimately deciding against it. Kirby_Triple_Deluxe_SwordBeam_(0x26).gif

ThrownHammer#

ThrownHammer's ID is 0x28, and consists of the hammer that Hammer Kirby can throw when using Hammer Throw in Story Mode. The move is not present altogether in the Mint file of Kirby Fighters. Like Sword's beam, it's possible that Hammer Throw was considered to be put in this sub-game. King Dedede eventually would use his own version of the Hammer Throw in Kirby Fighters 2. Kirby_Triple_Deluxe_ThrownHammer_(0x28).gif

Notably, the projectile deals massive damage, being able to KO an opponent in only 3 hits. It also deals heavy knockback and hitstun.

VacuumedBlock#

VacuumedBlock's ID is 0x29, and consists of the state a Star Block adopts while being inhaled by Kirby in Story Mode. This goes unused as there are no regular Star Blocks in Kirby Fighters in the first place, and because, once again, Kirby cannot inhale anything. Kirby_Triple_Deluxe_VacuumedBlock_(0x29).gif

Notably, it stays still when spawned, and has no collision.

WaterPistol#

WaterPistol's ID is 0x2B, the last SChara listed. It consists of the projectile spit out by Kirby when using Water Gun in Story Mode while under a body of water. There is no water in Kirby Fighters or any scripts relating to the move in the first place, leaving this SChara to be unused in its entirety. Kirby_Triple_Deluxe_WaterPistol_(0x2B).gif

Since its behavior is identical to its Story Mode variant, it almost immediately gets destroyed due to not being in a body of water, but it can still damage enemies at point-blank range.