Skip to content
 

FRAXY プレイヤーのステータスと装備

古い部分なので間違っている部分があるかもしれません。
実はこれ書きながらソース側も少し修正しました。

ここに書いたコードはある程度解りやすいように展開しています。
実際のソースは一行詰め込みや汎用変数使い回し、処理が一まとめになっていない等のせいですごく読みにくいです。
・プレイヤーの基本設定値

プレイヤータイプ固有の値は20項目ほどあります。
全タイプ書くと長いのでスタンダードとバレットヘルのみです。
// Standard
Player_Energy_Base = 1875           // Base energy
Player_Energy_Level_Max = 5         // Maximum energy level
Player_Energy_Increase = 425        // Energy per level
Player_Regenerate_Base = 20         // Base regeneration power
Player_Regenerate_Level_Max = 5     // Maximum regeneration power level
Player_Regenerate_Increase = 3      // Regeneration power per level
Player_Regenerate_Power = 10        // Regeneration rate when stuned (100=100%)
Player_Equip_Level_Max = 5          // Maximum equipment level
Player_HitSize = 2                  // Hitbox size (radius,dot)
Player_Energy_Stock_Max = 300       // Energy stock (100=100%)
Player_Energy_Stock_Rate = 100      // Energy stock absorption rate (100=100%)
Player_Defense_Power = 70           // Maximum damage reduction value per frame
Player_Defense_Damage_Min = 10      // Minimum damage
Player_Heat_Max = 10000             // Maximum Heat value ()
Player_Heat_Cooldown = 30           // Cooldown (100=1.00%)
Player_Heat_Limit = Player_Heat_Max * 120 / 100 // Heat value limit
Player_Weight_Max = 15000           // Weight capacity
Player_Move_Speed = 300             // Base movement speed (100=1.0dot)
Player_Boost_Rate = 300100101 // Boost performance
// (initialAccelerationRate, accelerationRate, initialAccelerationFrame, option)
Player_Boost_Energy = 50            // Regeneration rate when using boost (100=100%)
Player_Firepower = 100              // Fire power modifier (100=100%)
Player_Item_Type = 1+2+4            // Item type
// 1=Energy, 2=Regen, 4=Power, 8=SOLL, 16=FullCharge
// BulletHell
Player_Energy_Base = 600
Player_Energy_Level_Max = 1
Player_Energy_Increase = 0
Player_Regenerate_Base = 10
Player_Regenerate_Level_Max = 1
Player_Regenerate_Increase = 0
Player_Regenerate_Power = 0
Player_Equip_Level_Max = 5
Player_HitSize = 0
Player_Energy_Stock_Max = 1000
Player_Energy_Stock_Rate = 100
Player_Defense_Power = 200
Player_Defense_Damage_Min = 15
Player_Heat_Max = 8000
Player_Heat_Cooldown = 30
Player_Heat_Limit = Player_Heat_Max * 120 / 100
Player_Weight_Max = 15000
Player_Move_Speed = 250
Player_Boost_Rate = 350120200
Player_Boost_Energy = 100
Player_Firepower = 100
Player_Item_Type = 4+8+16
・プレイヤーのステータス処理

計算が必要なものだけ抜粋しました。
他のステータス処理は単純なので省略します。

エネルギー回復は次の計算が行われます。
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
RegenValue = Player_Regenerate_Base + (Player_Regenerate_Increase*Player_Regenerate_Level)
if Player_Boost { // using boost
    RegenValue = RegenValue * Player_Boost_Energy / 100
}
if Player_Damaged { // take damage
    RegenValue = RegenValue / 2
}
HeatThreshold = Player_Heat_Max / 2
if Player_Heat > HeatThreshold { // heat value is 50% or higher
    HeatRange = (Player_Heat_Max-HeatThreshold)
    RegenValue = RegenValue * (HeatRange - limit(Player_Heat-HeatThreshold,0,HeatRange)) / HeatRange
    RegenValue = limit( RegenValue, Player_Regenerate/10, Player_Regenerate)
}
if Player_EMP_counter > 0 { // emp
    RegenValue = RegenValue * Player_Regenerate_Power / 100
}
if Player_SUPER > 0 { // over soll power
    RegenValue = RegenValue * 2
}
Player_Energy = limit( Player_Energy+RegenValue, 0, Player_Energy_Max)
ヒート値は次の計算が行われます。
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CoolDown = Player_Heat_Max * Player_Heat_Cooldown / 10000
if Player_Moving { // moving
    CoolDown = CoolDown * 0.90
}
if Player_Boost { // using boost
    CoolDown = CoolDown * 0.50
}
if Player_Damaged { // take damage
    CoolDown = CoolDown * 0.25
}
Player_Heat = limit( Player_Heat-CoolDown, 0, Player_Heat_Limit)
EMP値は次の計算が行われます。
1.
2.
3.
if Player_EMP_counter > 0 {
    Player_EMP_counter = limit( Player_EMP_counter-1004000)
}
・プレイヤーの装備

装備のパラメータは26項目、レベル(10まで)、各装備(18種)で、各タイプ(6種)ごとに設定されています。
単純計算で2808行+αになるため、詳細は省略します。

この装備の設定値は全てソース埋め込み、配列に数値として格納して使用しています。
最初は基本値+レベルによる加算値にするつもりでしたが、細かい設定ができないと困る部分があったのでレベルごとに一つ一つ値が設定されています。
次のコードはソースからそのまま抜粋したもので、スタンダードのバレットとバルカンの設定テーブルです。
// Standard - Bullet
Set_Ammo    = -1-1-1-1-1-1-1-1-1-1
Set_Reload  = 0000000000
Set_Delay   = 33333333,  33
Set_Energy  = 16182022242628303234
Set_Drain   = 0000000000
Set_Stock   = 0000000000
Set_Heat    = 3333333333
Set_Power   = 8090100110120130140150155160
Set_EMP     = 0000000000
Set_Count   = 1111111111
Set_Angle   = 0000000000
Set_TAngle  = 0000000000
Set_SAngle  = 0000000000
Set_Option  = 0000000000
Set_Speed   = 3072307230723072307230723072307230723072
Set_Rate    = 512512512512512512512512512512
Set_Counter = 45454545454545454545
Set_Create  = 1111111111
Set_Move    = 1111111111
Set_Size_X  = 3333333333
Set_Size_Y  = 0000000000
Set_Param1  = 0000000000
Set_Param2  = 0000000000
Set_Param3  = 0000000000
Set_Param4  = 0000000000
// Standard - Vulcan
Set_Ammo    = -1-1-1-1-1-1-1-1-1-1
Set_Reload  = 0000000000
Set_Delay   = 2222222222
Set_Energy  = 40465258647076828894
Set_Drain   = 0000000000
Set_Stock   = 0000000000
Set_Heat    = 12121212121212121212
Set_Power   = 40465258647076828894
Set_EMP     = 0000000000
Set_Count   = 2233444444
Set_Angle   = 326496128160192208224240256
Set_TAngle  = 0000000000
Set_SAngle  = -8-16-24-32-40-48-52-56-56-56
Set_Option  = 1111111111
Set_Speed   = 3338346635843712384038403840384038403840
Set_Rate    = 480482484486488490492494496498
Set_Counter = 18181818181818181818
Set_Create  = 2222222222
Set_Move    = 1111111111
Set_Size_X  = 3333333333
Set_Size_Y  = 0000000000
Set_Param1  = 0000000000
Set_Param2  = 0000000000
Set_Param3  = 0000000000
Set_Param4  = 0000000000
それぞれの意味に関しては察してください。
ダメージやエネルギー消費などはともかく、生成方法や弾の挙動など、
全てこのテーブルに数値として詰め込んでいるため製作者ですらぱっと見ただけでは解りません。

トライ関連の要望でプレイヤーの設定を変更できるようにしてほしいというものがありましたが、
結局実装されなかったのは大体このテーブルのせいです。
弾はエネルギーが不足していると生成されない仕様があるので、
プレイヤーの基本ステータスを変更したらこの装備テーブルも調整する必要があるわけです。
その場合はエネルギー値だけ調整すれば大丈夫ですが、18種*10レベル分設定しなければなりません。
この量は流石に面倒臭いですね。

あとは全タイプ共通の装備設定として装備タイプや生成する弾の種類、重量などがあります。

装備タイプは アクティブ/パッシブ と プライマリ/セカンダリ/サポート といった属性設定になっています。
しかしながら現状実装されている装備は全てアクティブ系で、パッシブ系は一つもありません。
パッシブ系は付けるだけで能力上昇、直接使用できないというよくある物にするつもりでしたが結局追加されませんでした。
ぶっちゃけ要らない気がしたのと、レベルアップさせる良い方法が思い浮かばなかったというのもあります。

プライマリ/セカンダリ/サポートはその装備の系列を表し、
バレットはプライマリ、ブラスターはセカンダリ、オーバーローダーはサポートといった具合に設定されています。
現状ではプライマリとセカンダリの違いは無く、サポートはオーバーローダーのディレイ短縮の影響を受けないようになっています。

重量は装備合計がプレイヤータイプの重量値を超えた場合、移動速度とエネルギー回復力にペナルティが発生します。
しかし現バージョンではプレイヤータイプ側の値を意図的に高く設定しているため、実質無意味な設定になっています。

コメントをどうぞ