If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
This article has a talk page!

Kart Fighter

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Kart Fighter

Developer: Hummer Team
Publisher: Ge De Industry
Platform: Unlicensed NES


CharacterIcon.png This game has unused playable characters.
CodeIcon.png This game has unused code.
SourceIcon.png This game has uncompiled source code.
GraphicsIcon.png This game has unused graphics.
MusicIcon.png This game has unused music.


Kart Fighter combines the character design and engine of Street Fighter II (or at least the engine of its Famicom bootlegs) with the characters, opening screen, and some music of Super Mario Kart, resulting in possibly the best bootleg fighting game in existence. Each character has their own "home stage" and appropriate special moves (Mario and Luigi shoot fireballs, Koopa Troopa attacks by getting into his shell, etc.).

It's a solid concept - after all, who wouldn't want to see (or have) Luigi punch Mario in the face or Peach knock Bowser down for the count or...

Waitasec...did Nintendo and HAL actually get a License to Print Money™ idea from an unlicensed game?

Master Fighter VI' and Mortal Kombat II Leftover Characters

The game has about 12 actual characters, but the last 4 are obviously inaccessible. This is due to the fact that Kart Fighter was built off of Mortal Kombat II which in turn was built off of Master Fighter VI'. Master Fighter VI' had a roster of 12 characters (not including duplicates). While some of the data for the last four appears to be tampered with, it was never removed and contains some minor references to the previously-mentioned game. These can be accessed either through changing addresses 00B0 for Player 1 and 00B1 for Player 2. Alternatively, before a match starts you can change 007B for Player 1 and 007C for Player 2. The latter method will load the proper palette and stage for the match. You can also access alternate palettes this way by taking the original value and adding 0C to it.

"Skang-Tsung" (Shang Tsung) Leftover

KartFighter LuigiTsung.png

Value: 08

Shares the same value as Shang Tsung in Hummer Team's Mortal Kombat II. Like Shang Tsung, his only move in the game is a fireball (Down, Forward, A) which appears as a mess of two tiles; the same length as Shang Tsung's fireball. However, he does not have the ability to transform and as seen above, only uses Mario's sprites. His first player palette seems to be based off of Toad's second player palette. Using the second address in the second method starts the match on Yoshi's stage.

Balrog, E.Honda, and Ken Leftovers

KartFighter ToadDuplicate.png

Values: 09, 0A, 0B

Even though they appear to be Toad with his second player palette using the same moves, their commands are based on the aforementioned characters that appear in Master Fighter VI', complete with the same distance requirements to perform them. However, 0B uses Yoshi's move commands; this is because Ken's special command list referred to Ryu's in Master Fighter VI' and Yoshi takes his spot. 09 uses Toad's stage, 0A uses Yoshi's stage, and 0B uses Koopa's and Bowser's stage.

Endurance Matches

Before a match begins, change address 0058 to a non-zero value below 0B to re-enable Endurance Matches, a leftover from Hummer Team's Mortal Kombat II. Defeating the opponent will result in the opponent getting replaced by whichever character represents which value.

Unused Graphics

Common

KartFighter CrouchHit.png
Every character has a sprite for when they get hit while crouching. In-game, you're forced to stand if you get hit while crouching, meaning that all these sprites go unused.

KartFighter JumpPunchStartup.png
Everyone's jumping punch animation only has one unique frame, but there's a startup frame for everyone in the ROM. Some interesting things to note:

  • One of Toad's jump sprites is actually based off of his jumping punch startup sprite. The graphic banks contain the tiles for the jumping punch startup sprite and the few tiles after it replaces some of this sprite's tiles to create the jumping sprite.
  • Yoshi has two of these sprites, with the latter one being a tileswap of the former. It's possible one of them could be related to his unused alternate jumping punch (see below).

KartFighter ProjectileHit.png
Effects for what looks like a projectile making contact. Only Peach, Donkey Kong Jr., and Bowser seem to contain these. In-game, projectiles will just vanish on contact with a fighter and will just pass through each other. For some reason, Peach's sprite is found in two of her graphic banks.

Mari (Mario) and Luigi

KartFighter MariAlternateDizzy.png
The first four graphic banks for Mario are completely unused: they're tiles for Mario's stance, walking animation, blocking sprites, getting hit sprites, dizzy animation, and one of his jump sprites. These reappear a bit later but correctly flipped so Mario's facing to the right (like the rest of the sprites), whereas the unused ones are facing left. While these graphic banks appear first, they all appear to be the same (but flipped around obviously) with the exception of one of his dizzy sprites. This dizzy sprite's hat is more like the rest of Mario's sprites, whereas the one used in-game looks much flatter. This was likely due to the fact that in the graphic banks that did get used, a star was included for when Mario becomes dizzy and ended up replacing one of the hat tiles, thus requiring his hat to be redrawn. This also suggests earlier in development that the star circling around the fighter's head was not yet considered.

KartFighter MariUnusedCrouchKick.png
An alternate crouching kick for Mario. In-game, his crouching kick sprite is the same as his jumping kick and his flying kick special. Interestingly, all the sprites that use the same torso tiles are in the same graphic bank (including the unused jump punch sprite) and they just replace the bottom-half tiles on this sprite.

Nokonoko (Koopa Troopa)

KartFighter NokoShell.png
Koopa hiding in his shell, unknown purpose. In-game, he uses different sprites for his shell attack.

KartFighter NokoBall.png
Koopa partially withdrawn into his shell and curled up in a ball. It could've been used for a possible special attack in the same manner as Blanka's ball attack.

KartFighter NokoAttackStartup.png
Unused startup animations for Koopa's basic attacks. These look like they could work for his standing punch and his standing kick.

Kinopio (Toad)

KartFighter KinopioUpKick.png
Toad performing an upwards kick while facing upwards. Possibly intended as a special move.

KartFighter KinopioUnusedHit.png
It's unknown what this could've been used for. It could be a sprite intended for Toad's upwards kick, but the expression on his face implies this could have also been an unused hit sprite.

KartFighter KinopioAttackStartup.png
Two attack startup frames for Toad. The first appears to be for a jumping punch, but Toad attacks with his right hand in-game.

Yossy (Yoshi)

KartFighter YossyAlternateJumpPunch.png
A jumping punch sprite where Yoshi throws a punch at a different angle. The used jumping punch appears to be the original sprite, while this sprite reuses tiles from it.

KartFighter YossyTailAttackFrames.png
Possibly additional frames for his tail special attack. In-game, Yoshi just instantly turns around and wiggles his tail while moving forward.

Peach

KartFighter PeachUnusedWin.png
Peach appears to only have one sprite for when she wins a round, and selecting her has her switch between her standing sprite and her win sprite. However, she has a second win sprite that goes completely unused.

KartFighter PeachSpinEffect.png
Peach has a graphics bank for not only a duplicate of the unused exploding projectile but what appears to be a spinning effect. These might have been intended for her spin attack. The first sprite is rather odd: not only does its tiles suggest that its tiles are mirrored but there appears to be blank tiles mixed in, suggesting the sprite isn't complete.

Donkey (Donkey Kong Jr.)

KartFighter DonkeyGrab.png

Unused sprites for an alternate throw or a special command grab. Donkey Kong Jr.'s first throw sprite was mixed in with these, suggesting it was once part of this attack.

Koopa (Bowser)

KartFighter KoopaStandKickStartup.png
Bowser was supposed to use a different sprite during his standing kick. The game instead reuses a sprite from his jump punch.

KartFighter KoopaAlternateLieDown.png
An earlier version of Bowser lying down on his back.

KartFighter KoopaBallAttack.png
Sprites for a ball attack for Bowser: a start-up frame, a ball frame, and possibly two recovery frames. This is a bit similar to Koopa's unused ball attack sprite, but Koopa appears to lack additional frames.

Misc.

KartFighter-gameover.png
Graphics for a Game Over screen. The corresponding tilemap can be found at 0x17B91.

Kart Fighter-unusedfonts.png
Several unused fonts as a result of using graphics from Paaman - Enban wo Torikaese!!

KartFighter-1p2poptions.png
Early text for the title screen menu, which would have read "1 PLAYER", "2 PLAYER", and "OPTIONS".

Missing Tiles

Nokonoko (Koopa Troopa)

In-Game Fixed
KartFighter NokoInGameBlock.png KartFighter NokoFixedBlock.png

When Koopa blocks while standing, a chunk of his foot apparently goes missing.

In-Game Fixed
KartFighter NokoMinorErrors.png KartFighter NokoMinorErrorsFixed.png

These sprites have some tiles defined for them but go missing. However, it's not too noticeable as Koopa's other sprites tend to have missing outlines (often due to tile limits).

Kinopio (Toad)

In-Game Fixed
KartFighter KinopioErrors.png KartFighter KinopioFixed.png

Toad loses parts of his foot in some of his sprites.

Yossy (Yoshi)

In-Game Fixed
KartFighter YossyFeetErrors.png KartFighter YossyFeetFixed.png

Yoshi keeps losing parts of his feet in some of his sprites, most notably his tongue attack.

In-Game Fixed
KartFighter YossyMinorErrors.png KartFighter YossyMinorErrorsFixed.png

Some small chunks of Yoshi's sprites go missing. It's not so noticeable for the same reasons as Koopa.

Peach

In-Game Fixed
KartFighter PeachSpinInGame.png KartFighter PeachSpinFixed.png

In one of her spinning sprites, Peach was supposed to have more hair than what's shown.

In-Game Fixed
KartFighter PeachMinorErrors.png KartFighter PeachMinorErrorsFixed.png

Once again, more missing outlines and small chunks.

Donkey (Donkey Kong Jr.)

In-Game Fixed
KartFighter DonkeyInGameStance.png KartFighter DonkeyFixedStance.png

Donkey Kong Jr.'s stance sprites were supposed to be wider, but several tiles went missing.

In-Game Fixed
KartFighter DonkeyMinorErrors.png KartFighter DonkeyMinorErrorsFixed.png

Once again, more small details that go missing.

Koopa (Bowser)

In-Game Fixed
KartFighter KoopaMinorErrors.png KartFighter KoopaMinorErrorsFixed.png

More details going missing. The rightmost sprite was supposed to have more hair, but a tile goes missing in-game.

Unused Music

While this does play when deciding to continue after a game over, it only plays for less than a second. This fanfare can also be heard fully on AV Bishoujo Senshi Girl Fighting's VS screen.

Oddities

Some characters contain some odd move commands that have remained since Hummer Team's Street Fighter II and Master Fighter VI'. Some of them may have been forgotten, and as a result performing these can lead to some characters doing strange things. They can all be accessed in-game. None of these were ever properly taken out until Mortal Kombat II's revision of the engine.

  • Mario - While doing a straight jump, pressing Down + A while rising will cause Mario to jump forward and perform a jumping kick. However, he will only land a few pixels above ground and the game will still think he's in mid-air. This is a remnant of a possibly unfinished implementation of Dhalsim's Yoga Mummy which is done in the same manner. (Possibly Chun-Li's stomp as well from the Street Fighter II port except neither Dhalsim or Mario can do it during a forwards or a backwards jump.) Mario, Dhalsim, and Chun-Li are all under 01 in their games.
  • Koopa - Pressing Down and A while next to the opponent causes Koopa to walk forward making a sound effect. This command was carried over from the Street Fighter II port where Zangief's crouch grab was performed this way. Both Koopa and Zangief are under 03 in their games. Sometimes the AI can be seen performing this strange walk in Round 2, possibly as a result of the AI trying to fire off a projectile when required even though Koopa has no projectile attack.
  • Peach - Pressing Back and B will make Peach whip her hair as an attack. While this is the intended special move for her and it's rather easy to perform, the odd part is this has its own special move command: Back, Down, B. The simpler move command was likely from either Stalong's hopping kick from Street Fighter IV or Guile's odd glitch kick from Master Fighter VI'. Peach, Stalong, and Guile are all under 04 in their games. Guile in the Street Fighter II port can perform the Reverse Spin Kick with the same command, but he needs to be close to the opponent and he doesn't use the same value, suggesting his code was shifted over and edited for either Street Fighter IV or Master Fighter VI'.

Partial Source Code

Two heavily-corrupted fragments of the game's source code are present in the ROM at the hex addresses listed below.

First Fragment

0x1800, 0x5850:

        sta     Chreg3
        lda     (r0),y
        sta     Chreg4
     �¥ÐM    �   0§ÐMy
        sta     Chreg5
        rts
        ;;--------------------------------------
        ;;-     SetIpval:
        ;;-     inpm§ÐM  cc�   ˜©ÐMress.
        ;;-             r0 = $2002.
        ;;--------------------------------------
SetIpval:
        asl     a
        tax
�ªÐM    �    ¬ÐM #$00
        lda     (r0),y          ;;; lda $2002.
        ldy     #$04
        lda     Ip_code
        asl     a
        asl    =¬ÐM    �   ÜÐÐM ;;; Ip_code * 4.
        clc                     ;;; (Ip_code*4)+pat_address
        adc     pat_address+1,x ;;; lo.
        sta    �ÑÐMÿÿ      h®ÐM     #$00
        adc     pat_address,x   ;;; hi.
        sta     (r0),y          ;;; store $2006 hi.
        lda     r2
        sta¥®ÐM  r0�   аÐM     ;;; store $2006 lo.
        iny
        ;;;-----     read ip_val.
        lda     (r0),y
        lda     (r0),y
        sta   J±ÐM  un�   8³ÐM          ;;; set irq.
        lda     (r0),y
        sta     col_ndx                 ;;; set color.
        lda     (r0),y
        ,´ÐM    �    µÐM                ;;; set music.
        lda     #$00
        sta     col_msk
        sta     fade_cnt                ;;; initial fade.�¶ÐM    �   �¸ÐM   
        ;;--------------------------------------
        ;;-     Setcheckcode:
        ;;-     input : Acc pat address.
        ;;-   ¿¸ÐM    �   pºÐM2002.
        ;;--------------------------------------
Setcheckcode:
        asl     a
        tax
        ldy     #$00
        ldd»ÐM  (r�   ؼÐM      ;;; lda $2002.
        iny
        iny
        lda     Ip_code
        asl     a
        asl     a               ;;; Ip_code R½ÐM    �   @¿ÐMc
        adc     pat_address+1,x ;;; lo
        sta     (r0),y
        lda     #$00
        adc     pat_address,x   ;;; (Ip_code*4)º¿ÐM  dd�   ¨ÁÐM      sta     (r0),y          ;;; store $2006
        iny
        ;;;-----     read ip_val.
        lda     (r0),y
        sta     _"ÂÐM    �   �ÄÐM       ;;; set irq.
        lda     (r0),y
        sta     col_ndx                 ;;; set color.
        lda     (r0),y
        staMÄÐM  Mu�                    ;;; set music.
        rts


;==============================================================================
;=      BacktÿÿC3    ck to set c3.
;=              r0=$2002.
;==============================================================================
Backto_C3:
        lÿÿ      $00
        lda     (r0),y          ;;; lda $2002
        ldy     #$04
        lda     pat_address+4
        sta     (r0),y          ;;; stoÿÿ $     hi.
        lda     pat_address+5
        sta     (r0),y          ;;; store $2006 lo.
        iny
        lda     (r0),y          ;;; RESETÿÿ20    xÆÐMb.
        ;;;
        ldx     #$00
?c10    lda     (r0),y                  ;;; read $2007 c3 sub.
        cmp     #$ff
        beqµÆÐM  c0�          sta     _DBuffer,x              ;;; store c1 sub to ram.
        inx
        bne     ?c10
?c00    ;;;==================== seting over.ÿÿ      àÈÐMa     (r0),y                  ;;; jmp to ram c1 sub.
        sta     a0              ;;; lo
        lda     (r0),y
        pha       �ÉÐM    �   HËÐM; hi
        lda     a0
        pha                     ;;; lo
        rts

;;=====================================================…ËÐM  ==�   °ÍÐM========
;;=     PAT ROM DATA:                      PAT ROM ADDRESS.
;;=             SEG3_$3E8 BANK_VAL TABLE.   ($0E48).
;;=        íÍÐM  EG�   �ÐÐMP_VAL TABLE.     ($1170).
;;=             SEG5_$268 C3_SUB (RAM).     ($1668).
;;=
;;=             SEG1_$208 CHECK CODE $F8    ($0608’ÐÐM  = �   €ÒÐM    SEG7_$3ff CHECK CODE $8F    ($1FF8).
;;=============================================================================
pat_address:
±ÓÐM    �        $0e,$48         ;;; 0 bank_val address.
        db      $11,$70         ;;; 1 ip_val address.
        db      $16,$68         ;;; 2 c3_suÿÿad    èÔÐM        db      $06,$08         ;;; 3 check code address.
        db      $1f,$f8         ;;; 4 check code addrsss.

        COMMENT bÕÐM  ==�   P×ÐM==================================================================
;;=     INITIAL MC2 REG...
;;======================================×ÐM  ==�   ¸ÙÐM=======================
init_c2:
        lda     #$02
        sta     $b002
        lda     #$0a
        sta     $b003           ;;2ÚÐM  se�    ÜÐM     ;;;
        lda     #$05
        sta     $c002
        lda     #$0b
        sta     $c003           ;;; pat seg3.
        ;;;
šÜÐM    �   ˆÞÐM #$07
        sta     $d000
        lda     #$0b
        sta     $d001           ;;; pat seg4.
        ;;;
        lda     #$06
  �ßÐM  st�   ðàÐM002
        lda     #$0a
        sta     $d003           ;;; pat seg5.
        ;;;
        lda     #$01
        sta     $e002
    jáÐM  a �   XãÐM
        sta     $e003           ;;; pat seg7.
        ;;;
        rts

                ^

        .ENDS

�     PAGE BACKGROUND �äÐM  .
�   ÀåÐM========================================================================
page_scr:
        dw      scr_t01,$2020,scr_t02,$2424        ýåÐM  E �          dw      scr_o01,$2020,scr_o02,$2424         ;OPTION.
        dw      scr_s01,$2020,scr_s01,$2424         ;CHOISE 1 AND   VS
        dw ÿÿ      (èÐM,$2020,scr_s01,$2424         ;CHOISE 2 AND   VS
        dw      scr_r01,$2020,scr_r02,$2424         ;RANKING.
        dw      scr_c01,eèÐM  sc�   êÐM424         ;CONTINUE. AND OVER.
        dw      scr_e01,$2020,scr_e02,$2424         ;ENDING.
        dw      scr_s01,$2020,scr_s01,$2ÍêÐM    �   øìÐMSS 2 VS PAGE.

        INCLUDE D00.DAT




        .ENDS



�    lda     s1
        clc
        adc     x1
        sta     5íÐM    �   `ïÐM;;; ne� ¿ ¿ ¿ ¿ ¿ ¿ ¿ 


;==============================================================================
;=      Endsub:
;=========ÚïÐM  ==�   =========================================================
Ends

Second Fragment

0x358B, 0x758B:

           g   #20
        sta     Delay
        rÕöÐM  
�   :        ;;;     INITIAL END COLOR.
        FADE_IN
        inc     sub_flow
        rts

end2:        ;;;     END SPRITE FALL DOWN.
     ÿÿ W    NMI
        dec     _Yscroll
        lda     _Yscroll
        cmp     #$FF
        bne     ?e00
;        lda     #$ef
;        sta     _Ysÿÿol         ;;; cross page.
        dec     _Yscroll+1
        bpl     ?e00
        lda     #$00
        sta     _Yscroll
        sta     _Yscrollÿÿ
        inc     sub_flow
?e00    rts

end3:        ;;;     COUNT DOWN .
        lda     tog1
        and     #DECISION       ;;; if toggle to fÿÿe     
        bne     ?e310
        lda     scounter
        and     #$1f
        bne     ?e300
;;;        dec     Delay
        jmp     ?e300 ÿÿ        ;;; NO COUNT DOWN.
        bne     ?e300
?e310
        inc     sub_flow
?e300
        rts
end4:        ;;;     FADEOUT END COLOR.
     ÿÿ F    OUT
        lda     #$00
        sta     $2001
        sta     r2001
        sta     sub_flow
        sta     main_flow
        sta     seÿÿru     ùÐM   rts



�       lda     #$05            ;;; level >= 4.
        sta     main_flow       ;;; to ending.
        rts

?R00    ldaôùÐM  $0�           ;;; to title.
        sta     main_flow
        rts
;        ;;;-------------------- SET DEMO FLAG AND COMPUTER FIGHTER.
;        ldÿÿ      01
;        sta     demo_fg
;        lda     demo_ptr
;        and     #$07
;        tay
;        lda     d_fighter,y
;        sta     _Naÿÿ
         lda     d_fighter+1,y
;        sta     _Name+1         ;;; set computer player.
;        inc     demo_ptr
;        rts
;d_fighter:
;  ÿÿ            $83,$82,$84,$85,$86,$87,$88,$85,$81


        COMMENT       ^
rank4         ;;;     FADE OUT AND TO TITLE.
        FADE_OUT
        ÿÿa     hûÐM
        sta     sub_flow
        lda     #$00
        sta     main_flow       ;;; to end test.
        sta     _Mselect
        st¥ûÐM  _M�   ct+1      ;;; clear title selection.
        rts
                ^

�   lda     #$80
        sta     _Name,x         ;;; set computer playerÿÿ
        sta     _Mselect,x         ;;; set computer player.
        rts


ctu_5           ;;; GAME OVER.
        WAIT_NMI
        jsr     end_cÿÿor    � È]     lda     scounter
        and     #$1f
        bne     ?v0
        dec     Delay           ;;; GAME OVER COUNTER DOWN.
        b| È]   ?�           ;;;
        lda     #$00
        sta     sub_flow
;        lda     #$00
;        sta     _Mselect
;        sta     _Mselect+1      ÿÿ;     j�È]tle selection.
        lda     #$04
        sta