ファミコン オープンソースソフトウェアの紹介

#この記事の概要
1985年にファミコンで発売されたスーパーマリオブラザーズの容量は40KBでした。
ではその40KBにどのようなソースコードが詰まっていたのでしょうか。

実際にスーパーマリオブラザーズのソースコードを見ることはできない為、
この記事ではオープンソースで公開されているファミコンソフトウェアを紹介します。

#この記事の対象者
* ファミコンソフトウェアがどのようなソースコードで書かれているか見てみたい方
* ファミコンソフトウェア開発をしてみたいが、0からのスタートではなく何かをベース(参考)にして初めて見たい方


#一覧

|ソフトウェア名		|作成者			|ジャンル	|容量	|アセンブラ	|
|---			|---			|---		|---	|---		|
|Tiger Jenny		|Ludosity 氏		|アクション	|40KB	|CC65		|
|Lan Master		|Shiru 氏		|パズル		|40KB	|NESASM		|
|Lawn Mower		|Shiru 氏		|アクション	|24KB	|NESASM		|
|Alter Ego		|Shiru 氏		|アクション	|24KB	|NESASM		|
|Chase			|Shiru 氏		|パックマン	|40KB	|CC65		|
|Concentration Room	|Damian Yerrick 氏	|絵合わせ	|24KB	|CC65		|
|Thwaite		|Damian Yerrick 氏	|シューティング	|24KB	|CC65		|
|Lala The Magical	|Mojon Twins 氏		|アクション	|80KB	|CC65		|
|RevolvingGems		|KYOSKE(野うさぎ亭) 氏	|パズル		|64KB	|NESASM		|
|東方老桜夢		|KYOSKE(野うさぎ亭) 氏	|シューティング	|512KB	|NESASM		|
|Dushlan		|Peter McQuillan 氏	|テトリス	|40KB	|ASM6		|
|Nova the Squirrel	|NovaSquirrel 氏		|アクション	|256KB	|CC65		|
|Nintencat - The Parody	|Sly Dog Studios 氏	|アドベンチャー	|40KB	|CC65		|






##Tiger Jenny

|作成者		|ジャンル	|容量	|アセンブラ	|ライセンス	|
|---		|---		|---	|---		|---		|
|Ludosity 氏	|アクション	|40KB	|CC65		|下記参照	|

ライセンス

 * Audio部
   CreativeCommons BY-NC-SA 4.0 

 * Graphics部
   Anton Nilsson 氏 および NilsHärgestam 氏 所有

 * 上記以外
   ライセンスに関する表記を確認できず

Ludosity - Actually retro games!
https://ludosity.com/2014/05/actually-retro-games/

![tiger0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/e1825095-83c7-3887-2aa4-ce1b85843a24.png)　![tiger0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/e3f818fb-db05-8cff-9e46-c7b061cea14b.png)　![tiger0007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/b9a18fc4-f010-dbea-d4f7-396778085cbb.png)

「移動」「ジャンプ」「攻撃」「ライフ」「残機」「敵キャラ」など、
一般的な横スクロールアクションゲームにある要素は詰まっています。

Shiru氏のneslibとFamiTone2を使用しており、大部分がC言語で記述されています。






##Lan Master

|作成者		|ジャンル	|容量	|アセンブラ	|ライセンス		|
|---		|---		|---	|---		|---			|
|Shiru 氏	|パズル		|40KB	|NESASM		|パブリックドメイン	|

Shiru's Stuff
http://shiru.untergrund.net/software.shtml#nes

![Lan_Master0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/7b55d7a8-80d3-af10-0cd8-738d5733c555.png)　![Lan_Master0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/d173c265-a633-8eca-305b-3a573a3da939.png)　![Lan_Master0005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/85c2060a-edfa-b906-addc-79420ee390f9.png)

各PCとケーブルを回転させて、1本に繋げるゲーム。
4桁の数字によるパスワード機能が搭載されています。

ライセンスがパブリックドメインとなっています。




##Lawn Mower

|作成者		|ジャンル	|容量	|アセンブラ	|ライセンス		|
|---		|---		|---	|---		|---			|
|Shiru 氏	|アクション	|24KB	|NESASM		|パブリックドメイン	|

Shiru's Stuff
http://shiru.untergrund.net/software.shtml#nes

![Lawn_Mower0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/cff2e827-fd70-2a96-f6d4-1d101ffa0a8e.png)　![Lawn_Mower0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/614829fe-b8cd-26e6-f4f4-c479cbae7da6.png)

1画面固定型で、画面上の芝を刈るゲーム。

ライセンスがパブリックドメインとなっています。





##Alter Ego

|作成者		|ジャンル	|容量	|アセンブラ	|ライセンス	|
|---		|---		|---	|---		|---		|
|Shiru 氏	|アクション	|24KB	|NESASM		|下記参照	|

ライセンス

* コード、効果音、グラフィック
  パブリックドメイン

* 他のコンポーネント（ゲームコンセプト、キャラクター、タイトル、音楽）
  Denis Grachev氏、kulor氏


Shiru's Stuff
http://shiru.untergrund.net/software.shtml#nes

![Alter_Ego0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/80e1cfa2-8318-58ee-397a-0d6997aa272d.png)　![Alter_Ego0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/a5f2926a-e53a-693f-12b1-6e7f0aca420f.png)　![Alter_Ego0004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/2f5fa78b-9de4-3801-52a7-b55289aaabc7.png)

Denis Grachev氏によるZX Spectrum向けゲームをファミコンに移植したもの。

　RetroSouls - Alter Ego
　http://www.retrosouls.net/?p=459

付属するnotes.txtに記載されている通り、C言語による開発を目的としてゲームのようです。
> I had plan to try use C compiler to make a simple NES game.
 シンプルなNESゲームを作るためにCコンパイラを使うことを計画。
> …
> prove that C is an actual option to develop NES games, not just a theoretical possibility.
 CがNESゲームを開発するための実際の選択肢であり、単なる理論上の可能性ではないことを証明。






##Chase

|作成者		|ジャンル	|容量	|アセンブラ	|ライセンス		|
|---		|---		|---	|---		|---			|
|Shiru 氏	|パックマン	|40KB	|CC65		|パブリックドメイン	|

Shiru's Stuff
http://shiru.untergrund.net/software.shtml#nes

![Chase0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/bbcbc07b-c7d1-b36f-076b-fa9c16d06705.png)　![Chase0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/f0a43ec7-f9ee-d61d-7720-2152761ce9ad.png)　![Chase0003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/e33fea0c-a42c-9f8e-7ff5-43aa0760fc9c.png)

パックマン風ゲーム。

Alter Ego同様に、C言語で記述されています。
> This is an example game that is developed for my article Programming NES games in C.
  CでプログラミングしたNESゲーム用に開発されたサンプルゲームです。

Shiru氏のneslibとFamiTone2が使用されています。














##Concentration Room

|作成者			|ジャンル	|容量	|アセンブラ	|ライセンス	|
|---			|---		|---	|---		|---		|
|Damian Yerrick 氏	|絵合わせ	|24KB	|CC65		|GPLv3		|

Pin Eight - Concentration Room
http://pineight.com/croom/README

![croom0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/823833b1-e0b8-59e7-a092-5635f1db517a.png)　![croom0004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/75ed9e20-7606-b128-fa72-90e274e14b6b.png)　![croom0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/84c3c80b-241b-b228-f2ab-d2fe46c0ac2a.png)

裏返ったカードから同じ絵柄の2枚のカードを当てるゲーム。
10枚、20枚、36枚、52枚、72枚と難易度が上がっていきます。

CPU対戦の他に、2P対戦も行うことができます。
ゲームメニューにて「1 Player Story」選択時は、グラフィックとテキストによるストーリが流れます。






##Thwaite

|作成者			|ジャンル	|容量	|アセンブラ	|ライセンス	|
|---			|---		|---	|---		|---		|
|Damian Yerrick 氏	|シューティング	|24KB	|CC65		|GPLv3		|

Pin Eight
http://pineight.com/

![thwaite0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/5000bedd-4e82-7323-1458-70bf36959e83.png)　![thwaite0006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/b9140d7d-cf93-c4a1-06d0-2dcfa518369d.png)　![thwaite0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/548574b9-957c-050f-7434-22e1f67b1673.png)

ミサイルコマンド風ゲーム。
空から降ってくるミサイルを撃墜していきます。

Concentration Roomと同様にゲーム開始前に、グラフィックとテキストによるストーリが流れます。





##Lala The Magical

|作成者		|ジャンル	|容量	|アセンブラ	|ライセンス			|
|---		|---		|---	|---		|---				|
|Mojon Twins 氏	|アクション	|80KB	|CC65		|Creative Commons BY-NC-SA 3.0	|

Mojon Twins
http://www.mojontwins.com/juegos_mojonos/lala-the-magical-nes/

![mojon-twins--lala-the-magical-(gnrom)0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/a86526d4-95f6-b325-075a-1b1695e1268d.png)　![mojon-twins--lala-the-magical-(gnrom)0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/6429332e-b87f-8f2b-99b0-66bd80b2e44c.png)　![mojon-twins--lala-the-magical-(gnrom)0008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/058c4ad4-14ad-f1d0-b9b6-8611808d97d0.png)


初めはジャンプのみですが、魔法の杖を取得すると、ジャンプ後に足場を作成でき、より高いところに行くことができるようになります。
面数も豊富で、本格的な横スクロールアクションゲームとなっています。

Shiru氏のneslibとFamiTone2が使用されています。











##RevolvingGems

|作成者			|ジャンル	|容量	|アセンブラ	|ライセンス				|
|---			|---		|---	|---		|---					|
|KYOSKE(野うさぎ亭) 氏	|パズル		|64KB	|NESASM		|ラインセンスに関する表記を確認できず	|

野うさぎ亭
http://kyoske.sakura.ne.jp/index.cgi

![RevolvingGems0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/c2e83eb3-124c-6b74-ffb8-2b5e7620b1be.png)　![RevolvingGems0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/fcad307f-f917-8d6c-9676-0c4bf810ba27.png)　![RevolvingGems0007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/7339d3d3-4275-0f45-f730-001a5bc49a8f.png)

宝石を回転させ4つ以上つなげて消していくゲーム。











##東方老桜夢

|作成者			|ジャンル	|容量	|アセンブラ	|ライセンス			|
|---			|---		|---	|---		|---				|
|KYOSKE(野うさぎ亭) 氏	|シューティング	|512KB	|NESASM		|ライセンスに関する表記を確認できず	|


野うさぎ亭
http://kyoske.sakura.ne.jp/index.cgi

東方老桜夢 専用ページ
http://kyoske.sakura.ne.jp/index.cgi?p=%E6%9D%B1%E6%96%B9%E8%80%81%E6%A1%9C%E5%A4%A2


![TouhouRououmu0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/16d841ef-f0cc-e190-5441-036ff4606a80.png)　![TouhouRououmu0004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/a287d308-f23d-21fc-e7e5-185b7d6ed189.png)　![TouhouRououmu0006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/d2b13b42-8df0-355c-49ca-1c0d8d259f8b.png)


512KBとFF3やDQ4と同じ容量となり、かなり規模の大きいゲームです。

東方Projectに準じた弾幕シューティングをどこまで表現できるか をテーマに制作されているようです。

Readmeに記載されております通り、関連する方々へのお問い合わせは行わないよう、お気を付けください。
> なお、「東方妖々夢～Perfect Cherry Blossom.」を元にしていますが、
本作品との直接的な関係はありませんので、上海アリス幻樂団様への
問い合わせは行わないでください。

> また、東方古魔郷の存在が制作するに至る一因でありますが、
本作品との直接的な関係はありませんので、さいごめんのボス様への
問い合わせは行わないでください。
















##Dushlan

|作成者			|ジャンル	|容量	|アセンブラ	|ライセンス	|
|---			|---		|---	|---		|---		|
|Peter McQuillan 氏	|テトリス	|40KB	|ASM6		|BSDライセンス	|

GitHub
https://github.com/soiaf/Dushlan

![dushlan0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/1b871cbb-38e0-08e0-0791-830260453ae4.png)　![dushlan0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/c80cd485-c29a-238d-de53-5f331c620b27.png)

テトリス風ゲーム。
「ホールド」「ゴースト表示」機能なども実装されています。

ASM6アセンブラ向けに記述されています。





##Nova the Squirrel 
|作成者			|ジャンル	|容量	|アセンブラ	|ライセンス	|
|---			|---		|---	|---		|---		|
|NovaSquirrel 氏		|アクション	|256KB	|CC65		|GPLv3		|

Nova the Squirrel
https://novasquirrel.itch.io/nova-the-squirrel

GitHub
https://github.com/NovaSquirrel/NovaTheSquirrel

![nova0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/4dcfd9cd-bc93-27b3-5d2e-756e375676da.png)　![nova0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/2976895f-f27f-6045-9ad0-795a0822970d.png)　![nova0003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/799414db-66c4-1202-2cc5-0194aaeeaea4.png)

256KBと規模の大きいゲームとなっています。
33のステージと7体のボスがいるようで、市販ソフト並みのボリュームとクォリティとなっています。

続編のNova The Squirrel 2がスーパーファミコン向けに開発されています。







##Nintencat - The Parody

|作成者			|ジャンル	|容量	|アセンブラ	|ライセンス			|
|---			|---		|---	|---		|---				|
|Sly Dog Studios 氏	|アドベンチャー	|40KB	|CC65		|ライセンスに関する表記を確認できず	|

Sly Dog Studios
https://slydogstudios.org/

![Nintencat - The Parody0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/00ee7073-c7e5-8009-1c8f-96a4e5b80686.png)　![Nintencat - The Parody0003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/1a4e189a-faaf-f6e0-871d-1ea718985a9a.png)　![Nintencat - The Parody0008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/3aa04d1e-36c5-9802-a23e-f47bb6579d39.png)

猫を観察するゲーム。
「呼ぶ」「おもちゃ」「ご飯」「お水」「SAVE?」の5つの行動を選択できます。


作者のホームページには、他にも10種類以上のファミコンソフトウェアが、ソースコードと共に公開されています。

|!CLIK!|Babel Blox|KYFF|Snail Maze Game|
|---|---|---|---|
|![CLIK0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/56f252ea-a8a4-3f2e-8e6d-008db4b0ebfd.png)|![Babel Blox_000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/1afcae64-1570-1805-71bc-49ecde765687.png)|![KYFF0000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/b9baec3b-5561-7b62-c372-154953e06506.png)|![Snail Maze Game0002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214765/3e7459ee-faa6-19a4-17e2-b0a15480da0e.png)|




#備記
今回紹介したの他にも、オープンソースで公開されているファミコンソフトウェアはあります。
以下のサイトでも紹介されています。

NesDev Wiki - Projects
http://wiki.nesdev.com/w/index.php/Projects