【TIC-80】ゲーム作って公開するぞ！（その１）

## はじめに

「SIREN2」というゲームのゲーム内レトロゲーム「国盗りす」を [FantasyConsole](https://medium.com/@G05P3L/fantasy-console-wars-a-guide-to-the-biggest-players-in-retrogamings-newest-trend-56bbe948474d) の「[TIC-80](https://tic.computer/)」に移植していました。

![K20180929.gif](https://qiita-image-store.s3.amazonaws.com/0/284455/e3ec9933-5198-d4a6-6cc6-5d78cb5e05df.gif)


1面を一通り再現して「久しぶりに国盗りすをプレイしたい」という当初の目的は概ね達成できたため、とりあえず満足してその後は色々手を出していました。
（音関係は少し手を出しましたがさっぱりダメ、他の面はプレイ環境も動画もなくマップデータ作成不可能、なども原因）

そのような時に、[第二回ボイロゲームジャム告知動画](https://www.nicovideo.jp/watch/sm34120421)を見つけ、できれば参加したい！と思い立った訳です。

本来であれば期間中（12/21～12/30）に制作すべきなのですが、フライングもOKというゆるい感じらしいので、期間開始までに1本、期間中にもう一本制作というのを目標（理想）にやってみます。
（プランB：期間終了までに一本）

「国盗りす」移植は中途半端な自己満足だったため、今回は「[ゲーム作成の教本って小難しくて意味不明だからゲーム制作の基礎解説してみる](https://qiita.com/OrotiYamatano/items/1777564b246141511248) 」を参考にそれなりの流れに沿って制作していこうと思います。

##企画書作成

```
■ タイトル：
PITACLE（元案）
ずんだりす（仮）
ZUNDARIS（仮）
箱ずんだ（仮）
ずんだ箱（仮）

■ 制作者：
uokagi

■ 企画意図：
・ボイロゲームジャムが楽しそうだったのでまざりたい
・期限設定、公開を目標にゲームを仕上げて圧倒的成長をコミットメントでユニバース
・「国盗りす」をリメイクで萌え萌え
・「TIC-80」のユーザを増やしたい
（そして色々聞きたい。具体的には「波動関数崩壊（SimpleTileModel）をTIC-80(Lua)に
　に移植してもらって、アルゴリズムを１から懇切丁寧丁寧に説明してほしい）

■ ターゲット：
・ずんだ餅クラスタ
・VOICEROIDゲームファン
・パズルゲーム好き

■ コンセプト：
・「国盗りす」をプレイしやすいように要素を限定
　（したら元ネタのほぼペンタミノパズルに‥）

■ キャッチコピー：
・くるん、ぺたん、ぴったんこ♪
・お前も箱詰めにしてやろうか
・ねちょ、ぐるん、びったん、すぽっ
・出荷すっか

■ プレイ人数:
1人

■ 端末:
PC（html+jsにエクスポート可能なのでブラウザ動けば大丈夫？）
androidは標準で対応？
（iPhoneとかラズパイとかは要ビルド？）

■ インタフェース
キーボード、ゲームパッド、マウス（可能であれば）

■ 内容：
ずんだ餅を移動でくっつけて、回転、反転で箱と同じ形にするパズル
（ぶっちゃけ箱詰めパズルの、ピースを一つずつではなく全体を操作する感じ）

```

箱やずんだ餅がどんな感じになるかの表示テスト

![ZUNDA3.gif](https://qiita-image-store.s3.amazonaws.com/0/284455/3c0dfe18-baa3-5418-a41c-4bed525281f2.gif)

以下の点を重視して‥‥明日から制作がんばりますｗ

- プレイしやすい
- 分かりやすい（ルールや操作方法デモをきちんと入れたい）

一応表示テストプログラム（ゲーム部分はまだ全くなし）とタイルを載せておきます。

```disptest.lua
-- title:  autotiletest
-- author: uokagi
-- desc:   
-- script: lua

W,H=240,136
BGTILE=0
U,D,L,R,UL,UR,DL,DR=1,2,3,4,5,6,7,8
XYO={ [0]={0,0},
	{0,-1},{0,1},{-1,0},{1,0},
	{-1,-1},{1,-1},{-1,1},{1,1} }
FL={[0]={U,L,UL},{U,R,UR},{D,L,DL},{D,R,DR}}
OF={
	dir4n={{0,2},{1,3}},
	dir8n={{{0,4},{2,2}},{{1,1},{3,3}}} }
FN={[0]=1,0,3,2}

-- my function
function chkdif(dir,x,y,scale,tile)
	local s=scale or 1
	local t=tile or mget(x,y)
	return not (t==mget(x+XYO[dir][1]*s,y+XYO[dir][2]*s)) end

rm8dir2s=function(t,x,y)
	if t==6 then return t end
	local an=x%2+y%2*2
	local vn=chkdif(FL[an][1],x,y,2,t)and 2 or 1
	local hn=chkdif(FL[an][2],x,y,2,t)and 2 or 1
	local sn=chkdif(FL[an][3],x,y,2,t)and 2 or 1
	local oid=OF.dir8n[vn][hn][sn]
	return t+an%2+an//2*16+oid*16*2 end

function tset(x,y,t,scale)
	local s=scale or 1
	for i=0,s*s-1 do
			mset(x-x%s+i%s,y-y%s+i//s,t) end end

testinit=function()
	tileset={0,2,4}
	i=1
	for j=0,30,2 do
		for jj=0,17 do
			tset(j+30,jj,6,2)
		end
	end
end

testinit()

function TIC()
	cls()
	if btnp(4,1,20) then i=i%#tileset+1 end
	x,y,p=mouse()
	if p then
		tset(((i==3)and 30 or 0)+x//8,y//8,idx,2) end
	if btnp(5,1,20) then sync(0,0,true)end
	map(0,0,30,17,0,0,2,1,rm8dir2s)
	map(30,0,30,17,0,0,2,1,rm8dir2s)	
	idx=tileset[i]
	spr(256,x-x%16,y-y%16,0,2)
	spr((idx==BGTILE) and BGTILE or idx+16*6,208,8,12,1,0,0,2,2)
	spr(257,208-4,8-4,12,3)
	spr(258,4,100,13,1,0,0,4,4)
	
	print("Z:ChangeTile\nX:Sync",170,120)

end

```
![ZUNDATILE.gif](https://qiita-image-store.s3.amazonaws.com/0/284455/fcf9ecfa-809b-6cf6-e4df-79e249d4b282.gif)