goo

壊リス壊のエフェクトの同期がだいたい終了

新しい方の壊リス壊のエフェクトの同期を高める作業が大体終わりました。
大体の表示が、セーブデータからの復元時に再現されます。
重くなる予定が、なぜか手順の単純化で軽くなりました。

再現するとしていたラインによる点数などは、
実装はしたものの、Android上だと負荷が大きかったために没になりました。


さて、同期を高める作業が終わったので、これからリプレイ機能の実装に移ります。
リプレイ機能がうまく作動したら、新しい対戦の実装もスムーズに行くと思います。
新機能実装と最適化を同時にしなくちゃいけないのがつらいところ。
コメント ( 0 ) | Trackback ( 0 )

壊リス壊の同期をエフェクトにも適用中

新しい壊リス壊のセーブ機能に、エフェクトの状態も再現する機能を実装中です。
その確認用に、ゲームをポーズした時に、中断セーブをするようにしました。
どこでセーブしても、しっかり再現されることをお確かめください。

なお、この機能を拡張して、リプレイ機能や
ネットワーク対戦での高い同期を実現する予定です。

[再現されたもの]
・連鎖終了(+強調エフェクト)
・レベルアップ
・全消しボーナス
・ラインマラソン達成率
・タイムアウト
・???(Lv100到達時にだけ見れる)

[再現途中のもの]
・連鎖中の細々とした表示
(同期はされるが、最初からは表示されていない)
・ラインを消した時の得点の表示
・ライン巻き込みの得点の表示

[再現が実装されないもの]
・衝突関係のエフェクト
(瞬間的に重くなり、再スタートが遅れる)
・クイックドロップエフェクト
(再開時に有っても無くても変わらないため。)
・コンボフラッシュエフェクト
(残光が残っていても、フラッシュとは言えないため。)


今日の変更はこんなトコロです。
なお、クイックドロップ以外の再現が実装されないものは、
デフォルトでは対戦で相手側には表示されない予定です。
コメント ( 0 ) | Trackback ( 0 )

壊リス壊の最適化が大体終了

幾つかのバグを出しつつも、壊リス壊の最適化が大体終わりました。
今は、ゲーム再開時の同期を高める作業をしています。
セーブデータからの再開でエフェクト込みで完全な状態の再現を目指します。

同期関係が固まったら、リプレイ機能を実装します。
リプレイ機能ができたら、通信対戦を新しい方式に切り替える予定です。
新しい方式は今までよりも高度な同期となり、ヌルヌル動くと思います。


新しい方の壊リス壊に次のような変更を加えました。

1.落下ブロックの固定の猶予を2倍に伸ばしました。
(着地した状態で↓を押すと、すぐに固定されます。)
2.エフェクトの表示がゲーム中断時にも止まるようにした。
3.セーブデータの軽量化


また、新しい方の壊リス壊の、次のバグが治りました。

1.エフェクトの速度が必要以上に加速するバグ
2.ハードホールド・ソフトホールドが効かないバグ
コメント ( 0 ) | Trackback ( 0 )

壊リス壊を最適化していたら バグ発見

最適化がだいぶ進んで、互換性と引き換えに、
データが少しずつスリムになっています。
とりあえず、リプレイ機能実現を目指しています。

ソースを整理して最適化していたところ、壊リス壊α版からの
連鎖のコードに(計算速度的な意味で)重大なバグを発見しました。
β版の0.86.17以降では修正されています。


[バグの詳細]
・連鎖時の連結のレイヤー分けが必要数の10~1000倍のルートを通る。
度重なる最適化のカゲに隠れて、このバグに気が付きませんでした。
平均2ms以下で処理がおわるのに、一瞬100msを超える処理があるのを
ずっと不思議に思っていたのですが、こんなバグがあったとは・・・。

・ライン巻き込みの検査ルートが最大で10倍回りくどくなる。
直した結果、新版のモバイルでの作動が改善。PCでも作動がよくなりました。
コメント ( 0 ) | Trackback ( 0 )

拡張に向けて、壊リス壊を最適化中

拡張に向けて、新しいバージョンの壊リス壊を最適化中です。
ごっそりと古い部分をそぎ落として、目指せすっきり軽量化!

ただ、新しい方にバグが飛び出すかもしれないので、
バグだと思ったら、ご連絡いただけると嬉しいです。
コメント ( 0 ) | Trackback ( 0 )

AS3版TinyMTのソースを公開。

http://meby960.moo.jp/mt/as3TinyMT.zip
ActionScript 3.0版のTinyMTのソースを公開します。
FlashDevelopのプロジェクトデータと、TinyMT.swcが付属します。

※TinyMTとはなんぞや? という人は、こちら を参照すると良いと思います。


私では、これ以上最適化できる気がしません!
なので、さらなる高速化が出来たらご一報ください。

なお、比較用のデータは、
AS3版 TinyMT を検証してみた
にありますので、参考にしてください。
コメント ( 0 ) | Trackback ( 0 )

AS3版 TinyMT を検証してみた

ネットワーク対戦用に作った、AS3版のTinyMTを検証してみました。

SFMTは、計算にint型 624個が必要で、同期に2496バイトが必要。
これでは、ネットワーク対戦での同期が大変なので、
計算に必要なバイト数が28バイトと少ないTinyMTを採用しました。


[速度比較]
とりあえず、速度比較。100万回値を作成してみました。
検証用サンプル

Math.random(): 25ms
Sfmt.nextUnif(): 81ms
Tiny.random(): 140ms
TinyMT.random(): 132ms

SFMTの1.7倍重く、Math.random()の5.5倍重いという結果に。
まぁ、メルセンヌ・ツイスタはもともと重いのでこんなものでしょうね。


[性能テスト]
同じ表示プログラムを用いて、乱数を可視化してみました。
このテストでは、色が均一に変化するほど性能が良いです。

2次元ベクトル性能テストを開く


一目見て、90年代初期の乱数が酷い結果ですね。
反面、最近の乱数生成器は、とても均一に値が分散していますね。
まんべんなく値が得られるので、移植元と遜色ないと思います。


[周期数テスト]
もし、移植元のTinyMTと同等であるならば、2^127-1
(約170,141,183,460,469,200,000,000,000,000,000,000,000)
の周期を持つことになります。

こちらにテスト用のページを用意しましたが、
こちらのPCでは生きている間に1週する気がしません。
コメント ( 0 ) | Trackback ( 0 )

新バージョンの壊リス壊の乱数を変えました。

新バージョンの壊リス壊の乱数をよりよいものに変えました。
今回採用したのは、TinyMT という擬似乱数生成器です。
ActionScript 3.0用のものがなかったので、C言語用のものを移植させて頂きました。

[AS3.0版 TinyMT]
こちら に .swc化して置いておきました。
Math.random()の代わりに使うのであれば、Tiny.random()を呼んでください。
宣言して使う場合は、TinyMTクラスを使ってください。
その場合、シード1つ または パラメーターを4つ指定してください。

Math.random()とは違って、パラメータを取り出したり設定できたりします。
TinyMT本家の仕様通り、乱数の周期は 2^127-1(2の127乗-1)です。
また、単純な移植のため、SFMT (AS3.0版) よりも重いかもしれません。
28バイトのパラメータしか持たないので、NET対戦ゲームでの使用に向いています。


[これでどう変わる?]
この改変によって、対戦の最初に初期状態をしっかり同期すれば、
対戦でキーの操作だけを交換するだけで相手の状態が再現可能になりました。

また、中断セーブが乱数まで保存するようになります。
作成される操作ブロックが再現され、再開時の対策もしやすくなります。
しかし、中断セーブ経由でのゲームオーバー回避が難しくなると思います。

他にも、内部構造を新しい対戦仕様に向けて最適化中です。
コメント ( 0 ) | Trackback ( 0 )

壊リス壊のTOPをロールバック

改造しまくった結果、対戦がまともにできなくなったので、
壊リス壊のページのTOPにあるやつを0.85.11にロールバックしました。
http://meby960.moo.jp/kowaliskai/

ちなみに、改造中の最新版は、
http://meby960.moo.jp/kowaliskai/kowalis_kai_0_860.html
に移動しました。

コメント ( 0 ) | Trackback ( 0 )

壊リス壊のダメージ計算の変更について

壊リス壊の衝撃の伝わり方とダメージの入り方を変えました。
以前のダメージ算出方法には、物理的にありえないバグが有りました。
バグを修正するよりも、全く新しい算出方法でバランスをとることにしました。

[以前]

衝突後、下方向に衝撃分のダメージを与えながら進む。
空白にぶつかると一回だけ横に曲がり、そのまま横に進む。
横に衝撃が逃げても、衝撃の減退が縦方向と同じ。

[修正後]

衝突後、下方向に衝撃分の1/4のダメージを与えながら進む。
空白があると、空白を避けて進むが下方向を優先する。
横に衝撃が逃げると、衝撃が大きく減退する。

なお、修正後の衝撃の伝わり方は、操作ブロックでのダメージが通りにくいです。
ブロックの置き方を考えないと、ゲームが難しくなります。
代わりに連鎖中のダメージが増え、連鎖数が伸びやすくなっています。
コメント ( 0 ) | Trackback ( 0 )
« 前ページ