作品やら思ったコトを書き留めておく、付箋みたいなトコロ。
M.E.の思うトコロ
壊リス壊の同期をエフェクトにも適用中
新しい壊リス壊のセーブ機能に、エフェクトの状態も再現する機能を実装中です。
その確認用に、ゲームをポーズした時に、中断セーブをするようにしました。
どこでセーブしても、しっかり再現されることをお確かめください。
なお、この機能を拡張して、リプレイ機能や
ネットワーク対戦での高い同期を実現する予定です。
[再現されたもの]
・連鎖終了(+強調エフェクト)
・レベルアップ
・全消しボーナス
・ラインマラソン達成率
・タイムアウト
・???(Lv100到達時にだけ見れる)
[再現途中のもの]
・連鎖中の細々とした表示
(同期はされるが、最初からは表示されていない)
・ラインを消した時の得点の表示
・ライン巻き込みの得点の表示
[再現が実装されないもの]
・衝突関係のエフェクト
(瞬間的に重くなり、再スタートが遅れる)
・クイックドロップエフェクト
(再開時に有っても無くても変わらないため。)
・コンボフラッシュエフェクト
(残光が残っていても、フラッシュとは言えないため。)
今日の変更はこんなトコロです。
なお、クイックドロップ以外の再現が実装されないものは、
デフォルトでは対戦で相手側には表示されない予定です。
その確認用に、ゲームをポーズした時に、中断セーブをするようにしました。
どこでセーブしても、しっかり再現されることをお確かめください。
なお、この機能を拡張して、リプレイ機能や
ネットワーク対戦での高い同期を実現する予定です。
[再現されたもの]
・連鎖終了(+強調エフェクト)
・レベルアップ
・全消しボーナス
・ラインマラソン達成率
・タイムアウト
・???(Lv100到達時にだけ見れる)
[再現途中のもの]
・連鎖中の細々とした表示
(同期はされるが、最初からは表示されていない)
・ラインを消した時の得点の表示
・ライン巻き込みの得点の表示
[再現が実装されないもの]
・衝突関係のエフェクト
(瞬間的に重くなり、再スタートが遅れる)
・クイックドロップエフェクト
(再開時に有っても無くても変わらないため。)
・コンボフラッシュエフェクト
(残光が残っていても、フラッシュとは言えないため。)
今日の変更はこんなトコロです。
なお、クイックドロップ以外の再現が実装されないものは、
デフォルトでは対戦で相手側には表示されない予定です。
コメント ( 0 ) | Trackback ( 0 )
壊リス壊の最適化が大体終了
幾つかのバグを出しつつも、壊リス壊の最適化が大体終わりました。
今は、ゲーム再開時の同期を高める作業をしています。
セーブデータからの再開でエフェクト込みで完全な状態の再現を目指します。
同期関係が固まったら、リプレイ機能を実装します。
リプレイ機能ができたら、通信対戦を新しい方式に切り替える予定です。
新しい方式は今までよりも高度な同期となり、ヌルヌル動くと思います。
新しい方の壊リス壊に次のような変更を加えました。
1.落下ブロックの固定の猶予を2倍に伸ばしました。
(着地した状態で↓を押すと、すぐに固定されます。)
2.エフェクトの表示がゲーム中断時にも止まるようにした。
3.セーブデータの軽量化
また、新しい方の壊リス壊の、次のバグが治りました。
1.エフェクトの速度が必要以上に加速するバグ
2.ハードホールド・ソフトホールドが効かないバグ
今は、ゲーム再開時の同期を高める作業をしています。
セーブデータからの再開でエフェクト込みで完全な状態の再現を目指します。
同期関係が固まったら、リプレイ機能を実装します。
リプレイ機能ができたら、通信対戦を新しい方式に切り替える予定です。
新しい方式は今までよりも高度な同期となり、ヌルヌル動くと思います。
新しい方の壊リス壊に次のような変更を加えました。
1.落下ブロックの固定の猶予を2倍に伸ばしました。
(着地した状態で↓を押すと、すぐに固定されます。)
2.エフェクトの表示がゲーム中断時にも止まるようにした。
3.セーブデータの軽量化
また、新しい方の壊リス壊の、次のバグが治りました。
1.エフェクトの速度が必要以上に加速するバグ
2.ハードホールド・ソフトホールドが効かないバグ
コメント ( 0 ) | Trackback ( 0 )
壊リス壊を最適化していたら バグ発見
最適化がだいぶ進んで、互換性と引き換えに、
データが少しずつスリムになっています。
とりあえず、リプレイ機能実現を目指しています。
ソースを整理して最適化していたところ、壊リス壊α版からの
連鎖のコードに(計算速度的な意味で)重大なバグを発見しました。
β版の0.86.17以降では修正されています。
[バグの詳細]
・連鎖時の連結のレイヤー分けが必要数の10~1000倍のルートを通る。
度重なる最適化のカゲに隠れて、このバグに気が付きませんでした。
平均2ms以下で処理がおわるのに、一瞬100msを超える処理があるのを
ずっと不思議に思っていたのですが、こんなバグがあったとは・・・。
・ライン巻き込みの検査ルートが最大で10倍回りくどくなる。
直した結果、新版のモバイルでの作動が改善。PCでも作動がよくなりました。
データが少しずつスリムになっています。
とりあえず、リプレイ機能実現を目指しています。
ソースを整理して最適化していたところ、壊リス壊α版からの
連鎖のコードに(計算速度的な意味で)重大なバグを発見しました。
β版の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 を検証してみた
にありますので、参考にしてください。
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週する気がしません。
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対戦ゲームでの使用に向いています。
[これでどう変わる?]
この改変によって、対戦の最初に初期状態をしっかり同期すれば、
対戦でキーの操作だけを交換するだけで相手の状態が再現可能になりました。
また、中断セーブが乱数まで保存するようになります。
作成される操作ブロックが再現され、再開時の対策もしやすくなります。
しかし、中断セーブ経由でのゲームオーバー回避が難しくなると思います。
他にも、内部構造を新しい対戦仕様に向けて最適化中です。
今回採用したのは、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
に移動しました。
壊リス壊のページのTOPにあるやつを0.85.11にロールバックしました。
http://meby960.moo.jp/kowaliskai/
ちなみに、改造中の最新版は、
http://meby960.moo.jp/kowaliskai/kowalis_kai_0_860.html
に移動しました。
コメント ( 0 ) | Trackback ( 0 )
壊リス壊のダメージ計算の変更について
壊リス壊の衝撃の伝わり方とダメージの入り方を変えました。
以前のダメージ算出方法には、物理的にありえないバグが有りました。
バグを修正するよりも、全く新しい算出方法でバランスをとることにしました。
[以前]
衝突後、下方向に衝撃分のダメージを与えながら進む。
空白にぶつかると一回だけ横に曲がり、そのまま横に進む。
横に衝撃が逃げても、衝撃の減退が縦方向と同じ。
[修正後]
衝突後、下方向に衝撃分の1/4のダメージを与えながら進む。
空白があると、空白を避けて進むが下方向を優先する。
横に衝撃が逃げると、衝撃が大きく減退する。
なお、修正後の衝撃の伝わり方は、操作ブロックでのダメージが通りにくいです。
ブロックの置き方を考えないと、ゲームが難しくなります。
代わりに連鎖中のダメージが増え、連鎖数が伸びやすくなっています。
以前のダメージ算出方法には、物理的にありえないバグが有りました。
バグを修正するよりも、全く新しい算出方法でバランスをとることにしました。
[以前]
衝突後、下方向に衝撃分のダメージを与えながら進む。
空白にぶつかると一回だけ横に曲がり、そのまま横に進む。
横に衝撃が逃げても、衝撃の減退が縦方向と同じ。
[修正後]
衝突後、下方向に衝撃分の1/4のダメージを与えながら進む。
空白があると、空白を避けて進むが下方向を優先する。
横に衝撃が逃げると、衝撃が大きく減退する。
なお、修正後の衝撃の伝わり方は、操作ブロックでのダメージが通りにくいです。
ブロックの置き方を考えないと、ゲームが難しくなります。
代わりに連鎖中のダメージが増え、連鎖数が伸びやすくなっています。
コメント ( 0 ) | Trackback ( 0 )
« 前ページ |