state save&load

ネット越し途中参加がどうしてもやってみたくなって、シェーダとかは後回しにしてそっちを実装中。
このゲームのネットプレイは入力情報だけをやりとりする方式で、要するにリプレイと同じなので、途中参加者側で他プレイヤーの状態をリプレイが狂わないまでに完璧に復元する機構が必要になる。
rubyのPStoreがあれば一発なんだけど、C++でああいう汎用シリアライザは恐らく不可能なので、復元が必要な全てのオブジェクト1つ1つにシリアライザ&デシリアライザを実装していくという、果てしなく地道でめんどくさくて泥臭い作業が必要になる…。



で、2週間くらい地道な労力を積んだ結果、1面と5面道中は多分完璧に復元できるようになった。一番復元が難しそうなゲーム本体と自機が問題なく復元できて気が楽に。後は単調作業。
動画はリプレイ再生中にステートセーブ&ロードを繰り返してズレないのを確認しているところ。
ただ、Mix_SetMusicPosition()すると以後その曲再生中変なノイズが混じるんだけど、これの解決方法が分かわん。SDL_Mixerが悪いということにして放置するかもしれない。


要望があったネットワーク専用の対戦面とか、これも構想だけはあったけどずっと放置してたんだけど、icewindさんちでexception対戦プレイ(ボスとかそっちのけでお互いに破片浴びせ合う)で異様にエキサイトしたのとかもあって、この機会にやっておきたいなという気分、だけど予定は未定。
あと、ステートセーブ&ロードが動いてるところを見ると、これを活かしたゲームのシステムを作りたくなってくる。Braidワールド4みたいに過去の自分が影になって動くとか。