【TIC-80】架空のゲーム機のゲームをFantasyConsoleに移植する（その１）

具体的には「国盗りす」を「TIC-80」に移植する。

（注意 ） 筆者がおっさんゲーマーなので以降の例などは、古く偏っており伝わりにくいかも知れません。
# 「TIC-80」とは

以下の参照をお願いします。

- [「TIC-80」公式ページ (英語)] (https://tic.computer/)
- [「TIC-80」公式Wiki (英語)] (https://tic.computer/)
- [無料でオープンソースな架空のレトロゲーム機「TIC-80」に関するまとめ](https://qiita.com/yamachan360/items/3544a96f0dbea31224be)
- [無料でオープンソースな架空のレトロゲーム機「TIC-80」の紹介](http://tkitao.hatenablog.com/entry/2017/11/19/135714)

とても参考にさせていただきました、ありがとうございます。
要はPCやその他デバイス上で動作する「絵描衛門（デザエモン）」「MSX」「ファミリーベーシック」みたいなものです。

# 「国盗りす」とは

「SIREN2（PS2:2006年発売）」中の世界（2005年：昭和80年）からみて19年前（1986年）に行方不明になったフェリー内で確認されたゲーム機「SN-AG1999 AGE MANIAC」（1982年発売）用のゲーム

簡単に言うと「ゲーム内レトロゲーム」
#### 「SN-AG1999 AGE MANIAC」（架空）
- 開発：米国3GMANIAX社（架空）
- 映像：3D表示が可能（自称）
- 音源：ドとレとシの音が出ない
- 愛称：AGE-MAN

#### 「国盗りす」（PS2のSIREN2でプレイ可能）
- 3GMANIAX開発の黒船襲来シリーズ第一弾
- SIREN2世界でのレビュー(がある！):６点

[![SIREN2 (サイレン2) ミニゲーム「国盗りす」](https://i.ytimg.com/vi/humDQ16xaSA/0.jpg)](https://www.youtube.com/watch?v=humDQ16xaSA)

色々とツッコミたい気持ちは分かりますがとりあえずスルー。

### 今回移植しようと思った理由

- サイレン誕生15周年「[SIREN展](https://nuwton.com/game/32473/)」の様子の写真に「国盗りす」のパッケージがあり久々にプレイしたくなった
- PS2行方不明、自宅TV故障によりプレイ環境整備のコストが高い
- 「TIC-80」の記事を見かけてこれならできるかも？と思った

ちなみに筆者は雑誌のプログラムをMSX（PV-7）に打ち込んで遊んでいた経験がありますが、ツクール系含め１からゲームを作成した経験はなし。最近でプログラミング（とも言えないが）と言えば約2年前にAviUtl用のLuaスクリプト（数十行）を組んだくらい。

「TIC-80」を移植先に選んだのは「AGE-MAN」のスペックとのギャップが小さそう、さわったことのあるLuaが使える、そして無料という理由です。

##とりあえず始めてみる

__まずは画面（マップ）の再現だ！（この時点で間違っている可能性大）__

8x8ドットのタイルを並べていけばよさそう。（「TIC-80」の得意分野）
ただしエリアの境界線がどうなっているかよく分からないので拡大してみる。

![拡大2.png](https://qiita-image-store.s3.amazonaws.com/0/284455/13ffeac1-062e-5df0-4483-f10440afab3d.png)

うーん、境界線はセル（タイル）の内側、外側という区別ではなく1ドット固定っぽい？
‥‥あーそうか、ドラクエ２の落とし穴のある可能性があるラインが決まっているように、境界線が描かれる可能性のあるラインは決まっていて、それのON、OFFの組み合わせかな？

![境界線.gif](https://qiita-image-store.s3.amazonaws.com/0/284455/ebfeb32d-274e-fd9c-20fa-b08fcaea7fb3.gif)

というわけで、上のように
1.境界線なし 　　　2.上との境界あり
3.左との境界あり 　4.上左共に境界あり

というタイルを海と地面それぞれ作成して、後はロードランナーのEDITモードのようにペタペタとマップエディターで貼り付けていって‥‥

![map2.gif](https://qiita-image-store.s3.amazonaws.com/0/284455/1b19dabc-c3ad-6a70-0268-9e21e042c9e8.gif)
__完成！__

画面サイズは「AGE-MAN」256x224(目測のため違うかも）　に対し、
「TIC-80」240x136 で横は近いけど縦は結構差があるなぁ（仕方ないですが）

あれ？でもこれだと右下にドットが欠ける場合があるなー。
![拡大3.png](https://qiita-image-store.s3.amazonaws.com/0/284455/b3272237-c098-f68e-9df3-b1876f127917.png)
原作だとどうなってるんだろう？
![拡大4.png](https://qiita-image-store.s3.amazonaws.com/0/284455/48845ae0-7455-1d22-8f9d-ccf7f5db62d8.png)
あ、原作も同じだった。というか境界線は左と上に描く、というのは適当に決めた（別に下や右でもいい）のに偶然原作と一致したのは僥倖。
###画面データとゲーム内情報は別物（テトリスとかだと結構一致できる？）
マップ作成結構大変でした。‥‥で終わらないのがやばいところ。ゲーム中はターゲットのエリアが光るのですが、マップ上には地面か海（と境界情報）しかデータ上の違いはないので、別のデータ（エリア番号など）が必要になります。画面再現から入ってしまったのが悪手だったかなー。

で思案の結果、先にエリア情報のデータを作成し、マップデータはそのデータから自動で生成する、というのが前回の記事でした。
[【TIC-80】エリア番号を振った配列（テーブル）から境界線付きのマップデータを作成](https://qiita.com/uokagi/items/4f3c003bcbcd1b2eeb3a)

で上記のもの（調べ方が悪く有効な情報にたどり着かなかったので）を自作した後、
色々と調べたら、タイルマップやオートタイルなどの用語（仕組み）があることを
知りました。
TIC-80 でも概念的には似たような情報もありました。（すごい！）
[Auto Tileset Mapping](https://github.com/nesbox/TIC-80/wiki/Auto-Tileset-Mapping)
ただ、どれもほぼ4方向以上を参照するもっと高度なもので、
その簡易版という感じでまるっきり無駄という訳ではなかったのかな、とは思います。

##対象エリアを光らせる

ともあれエリア情報を持つことができたので、自分の（影の）位置のエリアを光らせてみる。
![screen3.gif](https://qiita-image-store.s3.amazonaws.com/0/284455/b4867589-12d0-f587-775c-70de0b8d2d76.gif)

おーアセンブラじゃなくてもこういうバグり方するんだあ（妙に嬉しい）
当然ですが、TIC-80ではなくて、自分のプログラムが100%悪いです。

__ちなみにGIF動画は「TIC-80」上で「F9」で開始、もう一回「F9」で終了、で
簡単に出力できます。すっごい便利！__

またいつか続きを書きたいと思います。