Module GS 1.3.2
2015年7月23日 20:39
- gsc_calculate_Main() に第二引数(offset)を追加。
- 数式に#を入れるとエラーが発生する不具合を修正。
- システム変数に代入しようとするとエラーが発生する不具合を修正。
- 文字列のエスケープ文字に関する不具合を修正。
- 既存の gs_strmod_GetCharByte を gs_strmod_GetIndexByte に変更。
- 文字列を先頭から調べる関数を gs_strmod_GetCharByte として追加。
- gs_strmod_GetPreviousCharByte のSJIS版を先頭から調べるように変更。
- 上記のstrmod系の変更により次の命令やマクロを変更。
HSP: gsc_GetStringIndexBytes("str",index,enc) … 文字列の任意の位置の文字のバイト数を返す。(高速、ただしindexが全角の2バイト目の場合は正しい結果が得られない)
HSP: gsc_GetStringBytes("str",index,enc) … 文字列の任意の位置の文字のバイト数を返す。(低速)
HSP: gsc_GetPreviousStringBytes("str",index,enc) … 文字列の任意の位置の一つ前の文字のバイト数を返す。(低速)
HSP: gsc_GetBufferIndexBytes(var,index,enc) … 文字列型変数の任意の位置の文字のバイト数を返す。(高速、ただしindexが全角の2バイト目の場合は正しい結果が得られない)
HSP: gsc_GetBufferBytes(var,index,enc) … 文字列型変数の任意の位置の文字のバイト数を返す。(低速)
HSP: gsc_GetPreviousBufferBytes(var,index,enc) … 文字列型変数の任意の位置の一つ前の文字のバイト数を返す。(低速)
HSP: gsc_GetStringBytes("str",index,enc) … 文字列の任意の位置の文字のバイト数を返す。(低速)
HSP: gsc_GetPreviousStringBytes("str",index,enc) … 文字列の任意の位置の一つ前の文字のバイト数を返す。(低速)
HSP: gsc_GetBufferIndexBytes(var,index,enc) … 文字列型変数の任意の位置の文字のバイト数を返す。(高速、ただしindexが全角の2バイト目の場合は正しい結果が得られない)
HSP: gsc_GetBufferBytes(var,index,enc) … 文字列型変数の任意の位置の文字のバイト数を返す。(低速)
HSP: gsc_GetPreviousBufferBytes(var,index,enc) … 文字列型変数の任意の位置の一つ前の文字のバイト数を返す。(低速)
- サンプルの追加。
sample_codetest.hsp
スクリプトの動作テスト用です。
スクリプトの動作テスト用です。
カテゴリー: Module GS, Module GS_Update.
コメント
FRAXY v.20150606beta
2015年6月6日 17:41
fraxy_20150606beta.zip (4.93MB)
fraxy_20150606beta_patch.zip (978KB) (for fraxy_20150510beta or later)
fraxy_20150606beta_patch.zip (978KB) (for fraxy_20150510beta or later)
今回はバグ修正のみです。
パッチは 20150510beta に上書きしてください。
パッチは 20150510beta に上書きしてください。
エディタ関係
- イベントの数値変換でパーミルがうまく設定できない不具合を修正
その他
- エラー時のログ出力に関する修正
- F9のデバッグ表示内容を少し修正
- 終了時の処理を少し変更
- ある条件下で生成されたエフェクトが原因で発生するエラーを修正
前回のエフェクターのオプション(&2048)を有効にした際に、
ディフューザーや自機復活時に生成されるエフェクトにそのオプションに関するパラメータを無効化する事を忘れていました。
その結果、想定外のメモリアドレスを参照してシステムエラーという流れだったようです。
HSPじゃなければ即死だった。
ディフューザーや自機復活時に生成されるエフェクトにそのオプションに関するパラメータを無効化する事を忘れていました。
その結果、想定外のメモリアドレスを参照してシステムエラーという流れだったようです。
HSPじゃなければ即死だった。
カテゴリー: FRAXY, FRAXY_Update.
コメント
FRAXY v.20150510beta
2015年5月10日 1:53
fraxy_20150510beta.zip (4.93MB)
いくつかの要望対応と不具合修正などです。
エディタのウィンドウ関連の挙動を変更したので、うまく動かない場合は報告お願いします。
イベントのパーツ検索はゲーム中ならばその敵のパーツだけでなく別の敵パーツを探す事ができますが、
そのあたりのデバッグが不十分なので、うまく動いていなかったら報告お願いします。
今回からMakeFTBは本体同梱にしました。
エディタのウィンドウ関連の挙動を変更したので、うまく動かない場合は報告お願いします。
イベントのパーツ検索はゲーム中ならばその敵のパーツだけでなく別の敵パーツを探す事ができますが、
そのあたりのデバッグが不十分なので、うまく動いていなかったら報告お願いします。
今回からMakeFTBは本体同梱にしました。
今回のサンプル
パーツ関係
- いくつかのエフェクターでオプション(&2048)が有効にならない不具合を修正
爆発などのエフェクターには適用されません。
- エフェクター(ディストーション)のflagに背景バッファをソースにする(&256)を追加
- プレイヤーバレットにアブソリュートシールドを追加
アブソリュートシールド(type=8)の場合は以下のパラメータを設定してください。
固有パラメータ1: フラグ (flag: 3~)
固有パラメータ2: タイプ (type: 8)
固有パラメータ3: 色 (color: 0~50)
固有パラメータ4: サイズ (radius: 1~1024 dot)
固有パラメータ5: ストック吸収率 (EN-stock absorb rate: 0~n %)
固有パラメータ1のフラグは以下の値を設定します。
3 : 各パラメータを適用する (enable exparam)
&4 : 固有パラメータを常に反映する (always refer exparam)
固有パラメータ2のタイプは以下の値を設定します。
8 : アブソリュートシールド (absolute shield)
固有パラメータ3の色は 0~50 の範囲で変化します。
0 : 赤 (red)
50 : 青 (blue)
固有パラメータ5のストック吸収率はソールディフューザーのように敵弾をストックに還元する割合を指定します。
固有パラメータ1: フラグ (flag: 3~)
固有パラメータ2: タイプ (type: 8)
固有パラメータ3: 色 (color: 0~50)
固有パラメータ4: サイズ (radius: 1~1024 dot)
固有パラメータ5: ストック吸収率 (EN-stock absorb rate: 0~n %)
固有パラメータ1のフラグは以下の値を設定します。
3 : 各パラメータを適用する (enable exparam)
&4 : 固有パラメータを常に反映する (always refer exparam)
固有パラメータ2のタイプは以下の値を設定します。
8 : アブソリュートシールド (absolute shield)
固有パラメータ3の色は 0~50 の範囲で変化します。
0 : 赤 (red)
50 : 青 (blue)
固有パラメータ5のストック吸収率はソールディフューザーのように敵弾をストックに還元する割合を指定します。
エディタ関係
- エディタのウィンドウ関連の挙動を調整
エディタの基本的な挙動に関わる部分を変更しました。
不具合を見つけたら報告お願いします。
不具合を見つけたら報告お願いします。
- エディットウィンドウに情報スクロール用のボタンを追加
今まではpageup/downでしかスクロールできませんでしたが、操作し辛かったので追加しました。
- エディタの情報表示に追加
ペア、ポインター、ダメージ転送先、被ダメージ率、バレットパワーなど。
- イベントに『プレイヤーのヒート値を変更する』を追加
- イベント条件に数点追加
・存在確認ポインター (0=ない, 1=ある)
・存在確認ペアパーツ1~4 (0=ない, 1=ある)
・存在確認ダメージ転送先 (0=ない, 1=ある)
対象パーツの存在を確認します。
存在する場合は 1 を返し、存在しない場合は 0 を返します。
・角度ペアパーツ1~4 (パーツがない場合は0)
・角度ポインター (パーツがない場合は0)
・絶対角度ペアパーツ1~4 (パーツがない場合は0)
・絶対角度ポインター (パーツがない場合は0)
対象パーツへの方向を返します。
・検索インデックス
検索インデックスの値を返します。
・存在確認ペアパーツ1~4 (0=ない, 1=ある)
・存在確認ダメージ転送先 (0=ない, 1=ある)
対象パーツの存在を確認します。
存在する場合は 1 を返し、存在しない場合は 0 を返します。
・角度ペアパーツ1~4 (パーツがない場合は0)
・角度ポインター (パーツがない場合は0)
・絶対角度ペアパーツ1~4 (パーツがない場合は0)
・絶対角度ポインター (パーツがない場合は0)
対象パーツへの方向を返します。
・検索インデックス
検索インデックスの値を返します。
- イベントに『パーツ検索』系列を追加
パーツを検索しペアパーツなどに設定するイベントです。
事前にパーツ検索設定が必要です。
(距離) は基点からの距離で検索します。
有効距離はドット単位で指定し、-1を指定すると有効距離を無視します。
(方向) は基点からの方向で検索します。
中心角は0~2047の範囲で指定します。
-1を指定すると全方向になります。
事前にパーツ検索設定が必要です。
(距離) は基点からの距離で検索します。
有効距離はドット単位で指定し、-1を指定すると有効距離を無視します。
(方向) は基点からの方向で検索します。
中心角は0~2047の範囲で指定します。
-1を指定すると全方向になります。
- イベントに『パーツ検索設定』系列を追加
パーツ検索を行う前にこのイベントを実行してください。
(基点0,0) は座標0,0から検索します。
(基点プレイヤー) はプレイヤーの座標から検索します。
(基点パーツ) は任意のパーツの座標から検索します。
検索オプション (search option)
0 : このパーツのコアから検索 (search from this core)
&1 : 全てのパーツから検索 (search all parts)
0 : 自分の検索インデックスを使用する (use own SearchIndex)
&2 : コアの検索インデックスを使用する (use core SearchIndex)
&4 : 検索インデックスが範囲外の場合は 0(無し) を返す (return zero when index is out of range)
0 : ソート無し (no sort, Index order)
&16 : 昇順 (ascending order)
&32 : 降順 (descending order)
0 : 検索対象の部分一致検索 (search for partial matching)
&128 : 検索対象の完全一致検索 (search for perfect matching)
検索対象 (Search type) (Narrowing type)
0 : 指定なし (all)
&1 : コア (core)
&2 : 非コア (not core)
&4 : ヘルスバー (healthbar)
&8 : ターゲットマーカーA (targetMarkerA)
&16 : ターゲットマーカーB (targetMarkerB)
&32 : 耐久力が設定されているパーツ (not invincible, maximum durability is not negative)
&64 : 耐久力が設定されていない破壊不可能なパーツ (invincible, maximum durability is negative)
&128 : 衝突判定があるパーツ (hitbox)
(基点0,0) は座標0,0から検索します。
(基点プレイヤー) はプレイヤーの座標から検索します。
(基点パーツ) は任意のパーツの座標から検索します。
検索オプション (search option)
0 : このパーツのコアから検索 (search from this core)
&1 : 全てのパーツから検索 (search all parts)
0 : 自分の検索インデックスを使用する (use own SearchIndex)
&2 : コアの検索インデックスを使用する (use core SearchIndex)
&4 : 検索インデックスが範囲外の場合は 0(無し) を返す (return zero when index is out of range)
0 : ソート無し (no sort, Index order)
&16 : 昇順 (ascending order)
&32 : 降順 (descending order)
0 : 検索対象の部分一致検索 (search for partial matching)
&128 : 検索対象の完全一致検索 (search for perfect matching)
検索対象 (Search type) (Narrowing type)
0 : 指定なし (all)
&1 : コア (core)
&2 : 非コア (not core)
&4 : ヘルスバー (healthbar)
&8 : ターゲットマーカーA (targetMarkerA)
&16 : ターゲットマーカーB (targetMarkerB)
&32 : 耐久力が設定されているパーツ (not invincible, maximum durability is not negative)
&64 : 耐久力が設定されていない破壊不可能なパーツ (invincible, maximum durability is negative)
&128 : 衝突判定があるパーツ (hitbox)
- イベントに『検索インデックス操作』を追加
検索インデックスはパーツ検索時に対象を選ぶ際に使用されます。
検索インデックスが 0 ならば検索結果の先頭が選ばれます。
検索インデックスが結果件数の範囲外の場合は自動で調整されますが、
検索オプションに &4 が指定されている場合は調整されません。
検索インデックスが 0 ならば検索結果の先頭が選ばれます。
検索インデックスが結果件数の範囲外の場合は自動で調整されますが、
検索オプションに &4 が指定されている場合は調整されません。
- イベントに『バレットパワーを変更する』を追加
そのパーツが生成する敵弾の攻撃力を調整します。
初期値は 10000 で100%に設定されています。
5000に設定すれば威力が半分になります。
エネルギーエッグなどが生成する弾には個々の弾のバレットパワーが継承されます。
ペアパーツによる固有パラメータ反映が指定されている場合は参照元のバレットパワーが適用されます。
初期値は 10000 で100%に設定されています。
5000に設定すれば威力が半分になります。
エネルギーエッグなどが生成する弾には個々の弾のバレットパワーが継承されます。
ペアパーツによる固有パラメータ反映が指定されている場合は参照元のバレットパワーが適用されます。
その他
- コアパーツが非表示の場合にプレイヤーとの距離判定が行われなくなる不具合を修正
ついでに動作停止する距離を2048から4096に変更しました。
- ゲームメニューのリスト表示における不具合を修正
カーソルキーが効かない、スクロールボタンを押してもスクロールしない等です。
- デバッグオプションの敵情報の表示内容を調整
コアだけでなく他のパーツも見れるようにしました。
また、B,N,+Ctrlキーで対象を変更できるようにしました。
また、B,N,+Ctrlキーで対象を変更できるようにしました。
- インターフェース定義に数点追加
メインヘルスバーの表示設定と参照バッファ設定などです。
詳しくはサンプルを参照してください。
詳しくはサンプルを参照してください。
- 敵処理のソースコードを分割
直接関係ないけど内部的に重要なのでメモ。
カテゴリー: FRAXY, FRAXY_Update.
コメント
FRAXY プレイヤー弾と敵弾の計算
2015年3月15日 19:54
ダメージ計算式と敵弾のパラメータです。
うん、全部英訳するような気力は無かったんだ、すまない。
うん、全部英訳するような気力は無かったんだ、すまない。
・敵弾 vs プレイヤー
1フレーム中に接触した敵弾全ての値を合計して計算されます。
この計算方法の都合上、1フレーム中に同時に複数の弾に当たると別フレームに分けて当たった場合よりもダメージが大きくなります。
ヒート値やEMPも合計した値が単純に加算されます。
プレイヤー防御力はプレイヤータイプ依存の固定値で、ヒート値によって低下します。
単純に、ヒート値が0%なら防御力100%、完全にオーバーヒートした状態だと防御力0%になります。
最小ダメージ値はプレイヤータイプ依存の固定値で、ダメージを受ける場合の最低保証値です。
プレイヤーが受けるダメージは以下の計算式が使用されます。
合計したダメージ:TDam
プレイヤー防御力:PDef
最小ダメージ値:MinDam
ヒート値補正:PHeat (0~100%)
例えば、全快の Standard がダメージ180とヒート値200を受けた場合は次のようになります。
同じダメージを BulletHell が受けると次のようになります。
バレットヘルは防御値が高いため、貫通系の低威力なものは少しの間ならほぼ無効化します。
また全快ならバルカン1発、ニードルガン2発まで耐える事ができます。
バレット以上の弾は即死です。
この計算で使われるプレイヤーの値は次のように設定されています。
敵弾のダメージなどは次のような値に設定されています。
減衰は距離がしきい値まではダメージ100%、それ以降は各方式で減衰されます。
減衰が適用されるのはダメージのみで、ヒート値やEMPには影響しません。
ブレードは基点と先端それぞれの移動量合計でダメージが増加します。
この移動量はドット単位で最大32倍です。
これもヒート値やEMPには影響しません。
1フレーム中に接触した敵弾全ての値を合計して計算されます。
この計算方法の都合上、1フレーム中に同時に複数の弾に当たると別フレームに分けて当たった場合よりもダメージが大きくなります。
ヒート値やEMPも合計した値が単純に加算されます。
プレイヤー防御力はプレイヤータイプ依存の固定値で、ヒート値によって低下します。
単純に、ヒート値が0%なら防御力100%、完全にオーバーヒートした状態だと防御力0%になります。
最小ダメージ値はプレイヤータイプ依存の固定値で、ダメージを受ける場合の最低保証値です。
プレイヤーが受けるダメージは以下の計算式が使用されます。
合計したダメージ:TDam
プレイヤー防御力:PDef
最小ダメージ値:MinDam
ヒート値補正:PHeat (0~100%)
|
|
|
|
また全快ならバルカン1発、ニードルガン2発まで耐える事ができます。
バレット以上の弾は即死です。
この計算で使われるプレイヤーの値は次のように設定されています。
|
|
減衰が適用されるのはダメージのみで、ヒート値やEMPには影響しません。
ブレードは基点と先端それぞれの移動量合計でダメージが増加します。
この移動量はドット単位で最大32倍です。
これもヒート値やEMPには影響しません。
・プレイヤー弾 vs 敵パーツ
1フレーム中に接触したプレイヤー弾は個別に計算されます。
そのパーツが属するコアパーツのエネルギー値によってダメージが軽減されます。
単純にコアのエネルギーが100%ならばダメージを100%軽減、0%なら全く軽減できない事になります。
ダメージ転送先が設定されている場合、計算自体は接触対象の値を使用し結果のダメージが転送されます。
ダメージ転送はEMPを転送しません。
敵パーツのエネルギーは被弾しても自然回復の低下がありません。
コアのエネルギーはプレイヤー弾の威力をそのまま減算します。
このエネルギー減算処理は接触したパーツが破壊不能であっても行われます。
パーツが受けるダメージは以下の計算式が使用されます。
プレイヤー弾の威力:PDam
コアエネルギー割合:CoreEN (0~100%)
パーツダメージ修正値:EMDamMod (n%)
例えば、ダメージ200を受けた場合は次のようになります。
ダメージ100を受けた場合は次のようになります。
1フレーム中に接触したプレイヤー弾は個別に計算されます。
そのパーツが属するコアパーツのエネルギー値によってダメージが軽減されます。
単純にコアのエネルギーが100%ならばダメージを100%軽減、0%なら全く軽減できない事になります。
ダメージ転送先が設定されている場合、計算自体は接触対象の値を使用し結果のダメージが転送されます。
ダメージ転送はEMPを転送しません。
敵パーツのエネルギーは被弾しても自然回復の低下がありません。
コアのエネルギーはプレイヤー弾の威力をそのまま減算します。
このエネルギー減算処理は接触したパーツが破壊不能であっても行われます。
パーツが受けるダメージは以下の計算式が使用されます。
プレイヤー弾の威力:PDam
コアエネルギー割合:CoreEN (0~100%)
パーツダメージ修正値:EMDamMod (n%)
|
|
|
|
・プレイヤー弾 vs 敵弾
特別な補正や計算はありません。
単純にプレイヤー弾の威力がダメージになります。
特別な補正や計算はありません。
単純にプレイヤー弾の威力がダメージになります。