the cutting room mirror

Caveman Ninja

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

The Caveman Ninja, better known as Joe & Mac, must battle a tribe of figurative-but-quite-possibly-literal neanderthals who have kidnapped their cave-babes (it was the caveman '90s) across five prehistoric lands with branching paths.

Unused Screens#

Game Info Screen#

Holding 1P Start + 2P Start when the game boots should display a version info screen, but the developers added a rts opcode at the beginning of the routine to dummy it out. Put the appropriate code in either cninja.xml or joemac.xml to re-enable this feature:

joemac

cninja

  <cheat desc="Fix Version Screen">
    <script state="run">
      <action>maincpu.mw@000238=0x32F8</action>
    </script>
    <script state="off">
      <action>maincpu.mw@000238=0x32F6</action>
    </script>
  </cheat>
  <cheat desc="Fix Version Screen">
    <script state="run">
      <action>maincpu.mw@000238=0x3306</action>
    </script>
    <script state="off">
      <action>maincpu.mw@000238=0x3304</action>
    </script>
  </cheat>

JP

INT

Joe & Mac is labeled version 3.3, while all non-Japanese sets are labeled version 3.3A. This includes sets labeled as "World ver 4", "World ver 1", and "US ver 4" in MAME, so clearly, the info here is out of date.

Location Test Screen#

To access the following two screens, put the following code in cninja.xml and/or joemac.xml, enable it, then lose a life:

  <cheat desc="Change Ready Screen">
    <parameter>
      <item value="0x0E42">Location Test</item>
      <item value="0x0E54">Ending Test</item>
    </parameter>
    <script state="run">
      <action>maincpu.mw@0018D2=param</action>
    </script>
    <script state="off">
      <action>maincpu.mw@0018D2=0x0E0E</action>
    </script>
  </cheat>

JP

INT

JP Text

Translated

今回は ここまでなの

ごめんね・・・♥

That's all for now.

I'm sorry...♥

These would be used in location test versions of the game, but there's no code that references this screen's subroutine in the final game.

Ending Test#

CavemanNinjaEndingTest.png
This is a simple test of the ending screens. The game will display the first two pictures of Joe & Mac reacting in shock, all three of the game's different ending pictures (Fat cavewoman, enemy cavewoman, cave-babes), then the scrolling credits landscape sans objects and credits.

(Source: Original TCRF research)

Unused Objects#

Default Weapon Pickup#

CavemanNinjaPickupAxe.png
An item that would give players their default weapons back (Stone Axe for 1P, Bone for 2P), but none of the enemies or objects in the game are coded to drop it.

CavemanNinjaPickupAxeGame.png
Put the following code in MAME's cninja.xml cheat file to make the first caveman in Stage 1 drop the item, and make the second caveman drop the Fire weapon:

  <cheat desc="Default Weapon Pickup">
    <script state="run">
      <action>maincpu.mb@012525=0x01</action>
      <action>maincpu.mb@012535=0x02</action>
    </script>
    <script state="off">
      <action>maincpu.mb@012525=0x10</action>
      <action>maincpu.mb@012535=0x10</action>
    </script>
  </cheat>

CavemanNinjaPickupBone.png
The item will always use the axe graphic, even if 2P is the only one playing. There's a bone item graphic in the object graphics ROM, but there's nothing in the item's code that references it.

Map Characters#

Two unused characters that would appear on the game's map screens: The cavewoman from Stage 1 in a neutral stance, and an enemy caveman.

CavemanNinjaMapCavemanGame.png
Put the following code in cninja.xml to change the first enemy caveman in Stage 1 to one of the unused characters, albeit with an incorrect palette:

  <cheat desc="Unused Map Characters">
    <parameter>
      <item value="0x02">Cavewoman</item>
      <item value="0x03">Neanderthal</item>
    </parameter>
    <script state="run">
      <action>maincpu.mb@012527=0xB5</action>
      <action>maincpu.mb@012529=param</action>
    </script>
    <script state="off">
      <action>maincpu.mb@012527=0xE2</action>
      <action>maincpu.mb@012529=0x00</action>
    </script>
  </cheat>

(Source: Original TCRF research)

Unused Graphics#

CavemanNinjaHighScoreTrilobite.png
A fossilized trilobite that would have appeared in the background of the high score screen. Even though there's plenty of space for it in the upper-right corner, it's still unused.

CavemanNinjaKanekoGaKaita.png
A hidden message (カネコが書いた - "Written by Kaneko") stored with the Stage 5 background graphics. Atsushi Kaneko is one of the game's six graphic designers.

CavemanNinjaChargedWeaponsUp.png
Weapons can be charged, and weapons can be fired upwards, but charged weapons cannot be fired upwards. This graphic of the charged Tusk weapon pointed upward suggests this wasn't always intended.

CavemanNinjaAmmonite.gif
Graphics for an ammonite enemy can be found mixed in with the game's food items.

CavemanNinjaFoodAlt.png
A partial set of alternate food items appear directly after the ammonite graphics. Includes a persimmon, a banana bunch (As opposed to the banana peel that the final game uses), eggs, cheese, crackers, and bugs!

A completely unused enemy: A saber-toothed cat.

CavemanNinjaSaberWalk.gifCavemanNinjaSaberRun.gif
Like the similarly sized dinosaur enemies, this has idle, turning, walking, and running animations.

It also has the standard set of hurt and dying animations that every used enemy has.

CavemanNinjaSaberDeath.gif CavemanNinjaSaberDeath2.gif
Unfortunately, the enemy was never coded, so all it's doing now is taking up a significant chunk of the object graphics ROM.

CavemanNinjaStage4Woman.gif
The Stage 4 cavewoman has an unused animation of her looking off to the side. It's worth noting that none of the other cavewomen are animated; this was probably meant to be used on the location test screen.

(Source: Original TCRF research)

Developer Text#

Labels for the game's music, sound effects, and instrument samples can be found in the audio CPU.

Music#

0x40E8

open.bgm

0x43E4

bgm1.bgm

0x5518

bgm2.bgm

0x5A24

bgm3.bgm

0x6B4F

bgm5.bgm

0x73E9

boss1.bgm

0x7F2F

clr1p.bgm

0x828B

clr2p.bgm

0x8507

branch.bgm

0x8772

end1.bgm

0x8D25

end2.bgm

0x908D

end3.bgm

0x9300

ending.bgm

Sound Effects#

Text starts at 0xA8A5.

p_out

p_ono

p_thnd

p_chak

p_kiai

p_jump

t_nige1

t_nige2

p_damag

p_konbo

p_small

t_wing1

t_wing2

korogaru

korogaru

F_fuku

F_nageru

F_jimeny

mizu

kusa

coin-b

kiba_na

kiba_ht

t_nige2

foods

buki

kudake

j-copter

j-copter

Jr._pyu

hajiki

t_maru

gaiko

b_haku

ice_b

ice_b

kami

k_baku

kamina

b_hit

o_hit

h_hit

f_hit

attack

t_hana

keikoku

p_out2

Instruments#

Text starts at 0xCA01.

flute

bonend

bonusbassd

afr_bass

afr_bass

a_bassx

gamran

baribari

steeldrum1

steeldrum2

piano_2

piano_3

piano_4

piano_5

piano_6

piano_7

piano_8

pia_casio

pia_gt

hiseqx

seque

badbell

belflute

bellsyn

belviola

chaimer

kinkon

toybell

abc

cheap

kira1

kira2

metalsyn

analogue

flution

flution2

gira

hamowire

soundtrack

soundtrac2

synclavi

clav_1

delayer

masked

melody

percle

readcal

spaces

synther

tremolo

tubasyn

wavewire

wire

analogue2

tomita

voice1

voice2

voice3

voice4

voice5

voice6

voice7

voice8

voice9

accordion 3

celest_1

celest_2

e_organ1

e_organ2

e_organ3

e_organ4

hammond_1

hammond_2

impact_org

organ_1

organ_2

organ_3

organ_4

soften

organ_v1

organ_v2

esn_org

ob_organ1

ob_organ2

sx_organ

waveorgan

porgan_1

porgan_2

porgan_at

harpsi

ginginlead

lead

maskedlead

syorgan1

syorgan2

marimba_1

marimba_2

marimba_st

melody_at

mokkin_at

s_xylo

vibra_1

vibra_2

vibra_3

xylo_1

xylo_2

shami_1

shami_2

e_guitar1

e_guitar2

grassharp

guitar_1

guitar_cx

bright_dis

clavsitar

hard_g

hardy_1

hardy_2

hardy_3

hardy_4

hardy_5

low_dist

a_bass

a_bassx

afr_bass

bright_wb

w_bass

analog_b1

analog_b2

analog_b3

analog_b4

syn_b1

syn_b2

syn_b3

syn_b4

syn_b5

syn_b6

syn_b7

syn_b8

syn_b9

syn_b10

thick_b

bassclavi

bright_b1

bright_b2

dx7_b

e_bass1

e_bass2

e_bass3

e_bassx

pick_b1

pick_b2

pick_b3

ricken_b

rr_bass

log_bass

mokugyo_b

casio_cym

ride_symba

hr_snare

meka_dr1

meka_dr2

meka_drm3

metalhit1

metalhit2

noise_sd

noise_sd2

snare

waterclap

bd_tom

bowlhit

smallbowl

b_drum

afr_drm1

afr_drm2

baribari

gamran

steeldrum1

steeldrum2

steeldrum3

steeler

at_clari

fagot

fue

piccolo1

sht_brs

syn_oboe

trp_1

trp_2

trp_3

trp_4

brs_1

brs_2

crystal

hard_brs

5th_brs1

metal_brs

opl_brs1

opl_brs2

opl_brs3

rise_brs

slow_brs

wave_brs

wave_brs2

5th_brs1

5th_brs1

bell_brs

delay_brs

vivi_brs

bassoon

brk_sax

cheap_horn

hard_horn

hi_sax

hornsect

sax_1

sax_2

sax_3

soft_sax

softuba

syn_brs1

syn_brs2

syn_sax

cembalo_1

cembalo_2

solovln_1

solovln_2

solovln_3

violin_1

violin_2

violin_3

violin_4

5th_str

lane

distrings

hi_str

orchstra

strings

syn_str1

syn_str2

syn_str3

pizz_1

pizz_2

vioboe

bass50

bass60

bass70

bass80

bassd80

harpsi5

harpsi

brass1

brass2

brass3

brass3

(Source: Original TCRF research)

Regional Differences#

CavemanNinjaChelnov1.png
In the Japanese version only, hitting certain spots in the first two rounds will reveal a special bonus item: Chelnov! After appearing, he'll try to escape by running to the left. Collecting him earns the player 1000 points.

CavemanNinjaChelnov21.png CavemanNinjaChelnov22A.png CavemanNinjaChelnov22B.png
This object is still in non-Japanese versions, but extra code was added to the object's initialization subroutine that instantly deletes it.

(Source: Original TCRF research)