Kart Fighter combines the character design and engine of Street Fighter II (or at least the engine of its NES 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.).
Waitasec...did Nintendo and HAL actually get a License to Print Money™ idea from an unlicensed game?
- 1 Master Fighter VI' and Mortal Kombat II Leftover Characters
- 2 Endurance Matches
- 3 Unused Graphics
- 4 Missing Tiles
- 5 Unused Music
- 6 Oddities
- 7 Partial Source Code
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
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
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.
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.
- 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).
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
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.
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)
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.
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.)
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.
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.
Nokonoko (Koopa Troopa)
When Koopa blocks while standing, a chunk of his foot apparently goes missing.
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).
Toad loses parts of his foot in some of his sprites.
Yoshi keeps losing parts of his feet in some of his sprites, most notably his tongue attack.
Some small chunks of Yoshi's sprites go missing. It's not so noticeable for the same reasons as Koopa.
In one of her spinning sprites, Peach was supposed to have more hair than what's shown.
Once again, more missing outlines and small chunks.
Donkey (Donkey Kong Jr.)
Donkey Kong Jr.'s stance sprites were supposed to be wider, but several tiles went missing.
Once again, more small details that go missing.
More details going missing. The rightmost sprite was supposed to have more hair, but a tile goes missing in-game.
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.
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.
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
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