feh 配布キャラクタとラピュタ

配布キャラクタ強すぎ問題。
インバースとアクア、本当に無料でいいんですかと心配になるレベルです。


特にインバースは獅子奮迅+聖印(速さ+3)で、速さ40まで到達します。
ブレード運用も可能です。


アクアは踊り子で絵もいいしで・・・レイヴン運用はちょっともったいないので
Aスキルはそのまま、Bスキル救援、Cは速さの鼓舞or大紋章。
技は月虹という、鉄板に近い形で使う予定でいます。


聖印は「攻撃守備の絆」を付けて、
ALL+5ステータスにデバフALL-4が入るので、
何回か遊んで使い心地を見ていくしかないかなーと。


そしてラピュタ・・・ではなく飛空城・・・デイリー闘技場?
リソースをどう割り振るかがポイントのようです。
いろんな方の対戦をしてみたところ、だいたい区分として3つに分かれます。


・満遍なくLV1の建物を建てる
・少しづつ建物を増やす(様子見。ボーナス期間に合わせて増設)
・一点買い。極振りする


私は極振りをする予定で「攻撃砦、防衛砦、雷の塔、罠」を上げていこうかなーと。
水瓶はLV1のまま。毎日遊んでいますし150もいりません。
ただ、エナジー2倍ボーナス期間とかあったらまずいので、
あとでリカバーできるように資源は少し残しときます。


追記:来シーズン、初回の満タン状態を考えれば水瓶でした。
極振り水瓶が正解らしいです。


防衛に関しては
・弓ジョーカ、ヴェロニカ、リリーナ
あたりが事故率高いかも。


攻撃に関しては
・10凸マムクート1体
釣って倒して、3vs4の形にすると相当ラクになります。
ラインハルト+踊り子もけっこう簡単そうです。


攻撃側は相手のパーティを見てから、自分のパーティを選べるので、
後だしじゃんけんできるよう複数用意しておくのがいいようです。

リハビリ14

flash対応完了。実機動作も確認しました。
以下の関数でsramかどうか判定しています。

EWRAM_CODE bool BakIsFlash(void)
{
	u8 t1 = BakRead2(0x7FFF);
	u8 t2 = ~t1;

	BakWrite2(0x7FFF, t2);
	BakWrite2(0x7FFF, t2+1); // もう一度書き込む(flash erase済みの可能性もあるので)

	if(BakRead2(0x7FFF) == t2+1)
	{
		BakWrite2(0x7FFF, t1);

		return FALSE;
	}

	return TRUE;
}

flashはセクタ削除や書き込むにウェイト使うのでちょっとプチフリします。

リハビリ13

SRAMのセーブ、ロード対応完了。次はflashです。
これが終われば、とりあえず本編を追いかける形になりそうです。


主人公、ようやく学校へ・・・。(汗


■残りTODO
選択肢
オープニング、エンディング
カレンダー
セピア
エフェクト多数
雨、桜
などなど

リハビリ12

セーブ機能の前に、後回ししていたエフェクト処理を追加しました。
・・・作業としてはこんな感じです。


1.ゲームをキャプチャ録画してフレーム単位で動作を見てみる。
2.変化しているドットを色分けする。1フレーム目は黒、2フレーム目はオレンジ、3フレーム目は緑(以下略。
f:id:akkera102:20181031001834p:plain
3.エフェクト用のコードに落とす。

IWRAM_CODE void Mode3DrawFadeMask(s32 step)
{
	const s32 sx[8] = { 0, 2, 1, 3, 1, 3, 0, 2 };
	const s32 sy[8] = { 0, 0, 1, 1, 0, 0, 1, 1 };

	s32 x, y;

	for(y=0; y<SCREEN_CY; y+=4)
	{
		u16* s1 = Mode3.buf  + sx[step] + (y + sy[step]) * SCREEN_CX;
		u16* d1 = (u16*)VRAM + sx[step] + (y + sy[step]) * SCREEN_CX;

		u16* s2 = s1 + 2 + SCREEN_CX * 2;
		u16* d2 = d1 + 2 + SCREEN_CX * 2;

		for(x=0; x<SCREEN_CX; x+=4)
		{
			*d1 = *s1;
			s1 += 4;
			d1 += 4;

			*d2 = *s2;
			s2 += 4;
			d2 += 4;
		}
	}
}

4.動作確認のため、VBAをキャプチャ録画。
f:id:akkera102:20181031002051p:plain
5.最後にVCOUNTを測定して画面がちらつかないか調べる。
今回は167->217なので大丈夫でした。


正直いって地味作業すぎますね・・・。(^^;

リハビリ11

この書き方まずいような気もしないでもなく。
別案が浮かんだら書き換えよう。。

EWRAM_CODE char* SioriGetStr(u32 no)
{
	if(SioriIsItem(no) == FALSE)
	{
		return "-----------";
	}

	SramSeek(0x1000 + 0x1000 * no + 2 + sizeof(ST_NV) + sizeof(ST_TEXT) - TEXT_SIORI_SIZE);

	return (char*)SramGetPointer();
}