特訓の追加について

練習に特訓を追加しました。

特訓の実装目的は、
1. 選手発掘の迅速化
2. 特定の選手の育成
です。

meisyoはステータスが絶対的ではないので、(なんとなく)良い選手を発掘することが重要です。
※良い選手=なぜかよく打つ、投げる選手
今までは1日1回の練習試合でしか良い選手の発掘(データ取り)ができませんでした。

そのため、今回のアップデートで選手の打撃・投球データが取れる「特訓」を追加しました。1日最大3回データ収集を行えます。

特訓では打撃特訓と投球特訓の2つが存在します。

打撃特訓は一人の打者を選び、その打者は9回(27アウト)分打撃練習を行います。
投球特訓は一人の投手を選び、その投手は9回(27アウト)分投球練習を行います。

特訓は自チーム内での限られた練習となるので、ここで活躍する選手が必ずしも練習試合や公式戦で活躍するとは限りませんが、ある程度良い選手を発掘することができるようになりました。

経験値は練習の基本経験値が得られます。
選択された選手は300%、その他の選手は100%となります。そのため、練習の方が少し効率が良いかもしれません。
特定の選手育成+データを取るか、少しの経験値を取るかですね。

特訓を追加することで、これまで埋もれていた選手たちが日の目を見ればいいなと思います。
メンバー固定にならず、選択肢が多くある状況が理想的です。そうなるように調整していきます。

以上です!

[Meisyo]パラメータバランス調整 ver 0.10(a)

パラメータバランスを調整します。

理由としては、ミートが強すぎるからです。
ミートが神の地位を手に入れて早・・・というより、Meisyoが最初からそうだった。

「ミートを上げれば即ち打てる」で、パワーと走力は少し相関しているサブメンバー的なバランスになっていたと思います。

全体的に投高打低でしたし。塩試合多かった…。

副次的な理由としては、「速球投手が死滅しているから」というのもあります。

速球投手がいる → 速球投手に対応するべく、反応を上げるために反応重視の練習にする → ミートがないので変化球投手に対応できない → …
となるはずだった。
速球投手が活躍できるのは速球Aから・・・って敷居高くない?っていうのも調整しました。Bくらいから打ち取れるようになってるはず。
(速球投手の四球が多い気はする)

というわけで、今回は下記のようなコンセプトでパラメータ調整を行いました。

変更後コンセプト

・ミート・反応どっちも上げなくてもある程度(1.5~2割)は打つ
・ミートを上げたら変化球投手により対応できる
・反応を上げたら速球投手により対応できる
・パワーを上げたら長打が出やすい

上記は元々のMeisyoのコンセプトだったはずなんですが…、調整ミスでした。

変更後結果

ミートの地位の相対的な低下が起こります

守備特化例)「ミ・パ・走・反がすべて40」選手の打率がすごく上昇します。
今まで:0.18
今から:0.24
差異:0.06(33%up)

ミート特化例)「ミ・パ・走・反が80・40・40・60」選手の打率が上昇します。
今まで:0.29
今から:0.33
差異:0.04(14%up)

パワー特化例)「ミ・パ・走・反が40・80・40・60」選手の打率がすごく上昇します。
今まで:0.21
今から:0.29
差異:0.08(38%up OPSも同様に上がります)
・・・NPCの低ミート高パワー集団(パワーヒッター系、正義学園)が強くなりそうです。

まとめ)打撃時の偏相関係数
全体:打低 → 打高気味
ミート:1位 → 1位(絶対的なモノではなくなった)
パワー:2~3位 → 3位(OPS上昇量はすごい)
走力:2~3位 → 4位(割と意味はあるが)
反応:4位 → 2位(強くなった)

守備要員が打つようになり、打撃要員の相対的な地位の低下が起こります

今まで1/5しか出塁できなかった打者(守備要員)に対し、
今からは1/4程度の出塁が見込めるようになります。
1エラーで長打になる仕様等と合わせて考えることで、
今まで打撃>>守備だったものを、打撃=守備に近づけました。

* 完璧にイコールにはならないと思います。私自身のバイアスがあるので。近づける努力はします。
参考データ)野手すべての守備を10上げた場合、被打率が0.06下がります。

データ

下記が調査結果です。
バランス調整後データ
バランス調整前データ
上記シート(Excel)には簡易Ave・OPS計算機もついてますので、お試ししていただければ体感できるかもしれません。

バージョンは0.04→0.10(a)に変更となりました。

以上です。
不具合等ございましたらゲーム内またはこちらでコメントをお願いいたします。

[Meisyo]練習難易度の不均衡是正への分析的アプローチ2

[Meisyo]練習難易度の不均衡是正への分析的アプローチから早3か月。

「練習ごとに難易度が違いすぎるんですけど!!」という不満は少しは解消されたかなー・・・

効果測定してないのにわかるの?エスパーなの?
というわけで・・・

管理画面に入れちゃいました!
これでいつでも見れるよ!

結果発表。
ポイントの分布が大きければ大きいほど、カラーバーが太くなります。

今後はこれを見て調整します。

game11がやばい。(語彙力)

game4もちょっと少ないかな?

・・・って前問題になってた練習だよねコレ・・・
回数も少ないし・・・避けないでドウゾ

というわけで、
game11はPointを2倍に、
game4は全体的にポイントを緩和+ビンゴのカウント方式を変更(簡素化)しました。

カウント方式の変更内容
以前は、
スロットで出た5つの数字をすべて比較する方式でした。

今回は、
スロットで出た5つの数字の種類を数える方式にしました。

この変更によって、以前は下記のような当たってるだろっていうのもなくなります。

例1:
11,11,12,12,13
前→1ビンゴ
今→2ビンゴ

例2:
9,9,11,11,11
前→1ビンゴ
今→3ビンゴ

詳しい計算は以下の通り。
例1:
11,11,12,12,13
↓
種類ごとに数字をまとめる(一意化)
→11,12,13
↓
[11,12,13]の配列の個数を計算
→3
↓
5-配列の個数(3)
→2ビンゴ!

例2:
9,9,9,11,11
↓
種類ごとに数字をまとめる(一意化)
→9,11
↓
[9,11]の配列の個数を計算
→2
↓
5-配列の個数(2)
→3ビンゴ!

例:完全ビンゴ
1,1,1,1,1
↓
種類ごとに数字をまとめる(一意化)
→1
↓
[1]の配列の個数を計算
→1
↓
5-配列の個数(1)
→4ビンゴ!(=完全ビンゴ)

すみません。
思いつかなくてどうにかできる方法で実装していました。(でもどうにか、、なっていない)

改善していきます。orz

後、思ったのですが・・・
SQLでだいたいのことができるので、Python要らなくね?って思ったり。

というわけで、SQLを置いていきます。何かの参考に!

SELECT
  s.action_no
  ,SUM(s.count_uu) AS total_uu
  ,CEIL(SUM(s.point * count_uu) / SUM(s.count_uu)) AS ave_point
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 0 THEN count_uu ELSE 0 END) AS point_00
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 1 THEN count_uu ELSE 0 END) AS point_01
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 2 THEN count_uu ELSE 0 END) AS point_02
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 3 THEN count_uu ELSE 0 END) AS point_03
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 4 THEN count_uu ELSE 0 END) AS point_04
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 5 THEN count_uu ELSE 0 END) AS point_05
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 6 THEN count_uu ELSE 0 END) AS point_06
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 7 THEN count_uu ELSE 0 END) AS point_07
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 8 THEN count_uu ELSE 0 END) AS point_08
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 9 THEN count_uu ELSE 0 END) AS point_09
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 10 THEN count_uu ELSE 0 END) AS point_10
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 11 THEN count_uu ELSE 0 END) AS point_11
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 12 THEN count_uu ELSE 0 END) AS point_12
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 13 THEN count_uu ELSE 0 END) AS point_13
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 14 THEN count_uu ELSE 0 END) AS point_14
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 15 THEN count_uu ELSE 0 END) AS point_15
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 16 THEN count_uu ELSE 0 END) AS point_16
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 17 THEN count_uu ELSE 0 END) AS point_17
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 18 THEN count_uu ELSE 0 END) AS point_18
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 19 THEN count_uu ELSE 0 END) AS point_19
  ,SUM(CASE WHEN FLOOR(s.point / 10) = 20 THEN count_uu ELSE 0 END) AS point_20

# 全体集計
FROM
  (
    SELECT
      SUBSTRING_INDEX(action, ',', 1) AS action_no
      ,CEIL(SUBSTRING_INDEX(action, ',', -1)) AS point
      ,COUNT(action) AS count_uu
    FROM
      acts
    WHERE
      sub = 'practice'
    AND
      time >= '$date 00:00:00'
    AND
      LENGTH(SUBSTRING_INDEX(action, ',', 1)) > 0
    AND
      CEIL(SUBSTRING_INDEX(action, ',', -1)) BETWEEN 0 AND 200
    GROUP BY
      action_no
      ,point DIV 10
    ORDER BY
      action_no
  ) AS s
GROUP BY
  s.action_no;

DIV要らない気もするけど気にしてはいけない(戒め)

[Meisyo]ver0.04へのアップデート

Meisyoがバージョン0.04になりました。
バージョンNo.の基準はありません。(1.00(正式リリース)が遠い)

下記機能が0.04で追加されました。
目的としては、「ユーザがゲームを長く楽しめるようにする」ために、
「1・導入部(チュートリアル)の説明不足をなくす」
「2・育成序盤以降のコンテンツを充実させる」でした。

ある程度網羅的にゲームシステムができてきたので、プレイ人数が増えると嬉しいなあと思っています。

チュートリアル

練習〜試合まで一通り説明します。
これまでは説明なく放り出して「わからんなら自分で調べろ」(鬼畜)だったので、
新規登録ユーザの定着率の改善が見られると思います。

シナリオ、ストーリーでも使う構造(要するに紙芝居)を作れたのでありがたかったですね。

シナリオ

パワプロ・パワポケ系の公式戦再現です。
1番目はパワポケ1を追加しました。全9試合です。
負けたら〇〇大会1回戦に戻される鬼畜仕様。全勝しないとダメです。

自分でプレイしてみたところ、全国大会の2回戦までは勝てないわけじゃない(勝てるとは言っていない)ので、
気長に取り組めば・・・いいのかなあ。
というわけで、コレはエンドコンテンツ扱いです。
ちなみに3回目の挑戦で全国大会決勝まで行きました。負けました。****(伏せ字)

公式戦中の「選手HP使えない、でも気力(練習試合P)もったいないな~」は無くなります。
選手HPが全回復して試合が始まる素敵仕様。

管理機能の拡張

1・管理画面からメッセージ・アイテム送付可能に
2・NPCチーム編成機能の追加
3・統計データの表示

ユーザに対してすばやく対応できるように色々と機能を追加しています。

特に3番目の統計データが重要です。
ユーザ何人でどれくらいプレイしているか、定着しているのか等々を調べる統計データを作りました。
ユーザの定着にどの機能がボトルネックになってるか・・・も調べられるようにしたいなあ。

作っている側からすると「思い込み」があるので、データでユーザ行動を見えるようにしないと、「どうプレイされているのかぶっちゃけわからん状態」なんですよね。

締まらなくなりそうなのでここで終了。
コメントがあればメッセージ(ゲーム内「れい」)をお送りください!

以上!

[Meisyo]今後やっていきたいこと

Meisyoで今年中にやっておきたいこと
これさえやればDAU(日ごとのアクティブユーザ)が100人を超えるのでは?と思います。

まずは目的・内容を書いて、理由と考察を書きます。

目的

ユーザがゲームを長く楽しめるようにする
大きくは、
1・導入部(チュートリアル)の説明不足をなくす
2・育成序盤以降のコンテンツを充実させる

以上を追加していきたいと思います。

追加内容

・チュートリアルの追加
 練習〜試合まで一通り説明します。
 初期離脱の抑制がメインの目的です。
 サブの目的はストーリーがどう展開していくか、ちょっと気になってほしいというところ。
 今プレイしている人もプレイ可能になる予定です。

・ストーリー
 チュートリアルから始まる独自のストーリー。
 ゲドーくんと監督が中心となって進みます。(高校野球のマネージャーがゲドーくんって・・・。)

・シナリオ
 パワプロ・パワポケ系の公式戦再現
 1番目はパワポケ1を予定しています。

・NPCチーム編成機能の追加
 シナリオと模擬戦のコンテンツ増加の容易化
 これはできました。すでに4チーム作りました。1チームだいたい10分で追加できます。
 ユーザ側で編集・提案できる機能を作ってもよいかもしれない。一人で追加するのは時間的・知識範囲的に無理です。追加対象は野球なら何でもOK。パワプロ、高校野球、プロ野球なんでも可です。(予定)

・模擬戦の報酬増加
 総合力に比例して報酬がUPします。
 追加しました。
 強いチームへ挑む意味を追加して、「このチームに勝ちたい」目標を持ってもらいたいかなと。

・ログインボーナスの追加
 1日目:プロキュア1、2:モード1、3:選手P100、4:体力回復1、5:気力回復1、6:気合の塊5、7:プレミアムアカウント1day
 ログインでアイテムがもらえるアレです。
 そんなに豪華ではありません。だってプレイしてもらうのが目的だもの・・・。

・PHP(CakePHP)からPython(Django)への変更
 考える野球に分析ツールがなくてどうする!
 ということで、グラフ等が導入・編集しやすく、機械学習(回帰分析)等が使えるので良い選手の傾向がつかみやすい(分析しやすい)PythonのフレームワークDjangoに変更したいと思ってます。
 CakePHPがそろそろ退役してほしいのもある。ただし、これは時間かかりそうだ・・・。
 たぶんストーリー1・2章、シナリオ1つくらい作ったらこっちにシフトします。

追加理由

現在Meisyoでは大きく2つの問題があります。
1・初期離脱率が非常に高い
2・14日以降の離脱率が高い

図はこちら。

まず、定義としては以下の通りです。
day1:新規作成したユーザが1日後(24h~48h)の時間帯で行動した率。新規登録1日後継続率とする。
dayX:新規作成したユーザがX日後(24h*X~24h*(X+1))の時間帯で行動した率。
1to3:新規登録1日後継続したユーザのうち、3日後(72h~96h)も継続したユーザの割合。
AtoB:新規登録A日後継続したユーザのうち、B日後も継続したユーザの割合。

見えてくるのは、初期で離脱するユーザが80%以上。さすがにヤバイ・・・。
数多あるゲームの中でせっかくMeisyoに来てくれた(=やる気のあった)ユーザがすぐにやめてしまう。
「わからん殺しすぎるやろ」と。確かに始めは全く説明ないし。

次に、14to30が落ちてます。これは「慣れてきたけどやることないぞ」ではないかと。
「進歩が見えない」とも言うべきか・・・。
設定や選手発掘等意外とあるんですが、わかりやすいもの(シナリオやストーリー)がないことが問題だと思ってます。
1to3、3to7は異常なくらい高いのにね。

つまり、慣れれば楽しめるが続かない、最初はわからん殺しをしている状況だと。

・・・(^o^;) ただ、そういう感じが見えてきたので、追加頑張りまーす。
今は毎日30人前後の方に遊んでもらっています!ありがとうございます!

[Anaconda]Anacondaが動かない!TypeError: expected str, bytes or os.PathLike object, not NoneType

Anaconda Navigatorが起動できません。
昨日まで動いていたのに・・・。

エラー文はこちら
TypeError: expected str, bytes or os.PathLike object, not NoneType

日本語で調べても出てこない!

ありました。

ユーザーフォルダの.condarcファイルを削除すると。
無事動きました。

(ただし全員に効くとはいっていない。)

出典元:Navigator Error #9711

[Meisyo]ver0.03へのアップデート

名将と呼ばれた者達、アップデートを行います。
大幅な変更をしたため、バージョンを0.02から0.03へ変更します。

変更点

1・各種表示の不具合の修正、改善
2・投手起用方法の不具合の修正
3・試合のエラー時の挙動が設計上の動作と異なっていた問題を修正
4・スキル付与アイテムの追加
5・スキル付与アイテムのドロップ開始
6・スキル付与アイテムの配布

各々の説明を下記に記載しました。

1・各種表示の不具合の修正、改善

異常な情報の表示(試合)、
数値の表示が冗長になっていた部分(カード詳細、練習)を修正しました。
加えて、記載内容の変更(カード詳細)を行いました。

さらに、試合でのスキルの発動がわかりやすくなりました。
「チャンス〇発動!」等の表示が出ます。

2・投手起用方法の不具合の修正

登板優先度が一切考慮されていない不具合を修正しました。
1(最優先)~9(一番後)で投手が登板されます。

【追記:04/30 17:10】投手の出る順番がおかしいということで調査したところ、ソート方法の異常が発見されました。正常化しました。

3・試合のエラー時の挙動が設計上の動作と異なっていた問題を修正

エラー時に、すぐに他守備メンバーが捕球できる問題を修正しました。

例:
フライをエラーする。
↓
他の守備メンバーの守備範囲内の場合、捕球判定が実施される。
↓
だいたいアウトになる。(エラーとは一体・・・)

この変更で、1エラーすることにより守備の大きな遅延が起こります。
そのため、外野がエラーするとすぐにツーベース、スリーベース等が起こります。
エラー回避がより重視される仕様となりました。

4・スキル付与アイテムの追加

先行追加していたチャンス〇以外に、スキル付与アイテムを追加しました。
常時発動するスキルもあれば、特定場面でのみ発動するスキルもあります。

$d['skill_list'] = [
  'chanceU' => 'チャンス〇,2・3塁にランナーがいるとき打力UP!(打力All+5)',
  'chanceU2' => 'お祭り男,2・3塁にランナーがいるとき血が騒ぐ!(打力All+10、他)',
  'speedU' => '速度〇,常に走力UP!(走力+3)',
  'speedU2' => '韋駄天,風のように迅く(走力+7)',
  'pitchD' => '威圧感,強い威圧感で相手の打者を委縮させる(敵打力-5)',
  'pitchU' => 'エース,エースとしての自覚で、高い投手能力を発揮する(投手力+5)',
  'pinchU' => 'ピンチ〇,2・3塁にランナーがいるとき投手力UP!(投手力+5)',
  'pinchU2' => '守護神,2・3塁にランナーがいるときに真価を発揮する(投手力+5、他)',
  'sfU' => '送球〇,送球速度UP!(肩力+5)',
  'sfU2' => '極刺殺,送球速度が尋常ではない(肩力+10)',
  'dfU' => '堅守,堅い守りをさらに高める(守備+5)',
  'dfU2' => 'いぶし銀,常に良い動き、良い守りをする(守備+5、他)'
];

選手の特徴をさらに強める等、戦略の幅が広がります。

5・スキル付与アイテムのドロップ開始

これまで入手が配布のみでしたが、スキル付与アイテムを
練習試合と模擬戦で獲得できるようにしました。
その他アイテムのドロップ調整(メインは上方修正)も行いました。

6・スキル付与アイテムの配布

お試しアイテムとして、速度〇、ピンチ〇、送球〇、堅守を全員に送付いたしました。
好きなキャラにお好きなアイテムを!

謝辞

新要素追加や各種不具合修正は、皆さんから頂いたコメント、メールをもとに行っています。
プレイデータもデータ分析を行い、バランスを取りつつ進め、楽しめるゲームを作っていければと思います。
よろしくお願いいたします。

[Meisyo]お試しトークルーム作成

Meisyoに、他監督にショートメッセージを送れる機能を付けようと思います。

メインは管理者への連絡手段の作成です。
個人間での交流もあればいいかなー程度の適当さで作っています。

必要機能:
・個人間のメッセージ交換
・メッセージ受信報告(未読)
・IDブロック(見たくない人をブロック)
・管理者から全員への自動メッセージ(不必要かもしれない)

あとはメタ情報
速球投手が強くなったからって!!

速球158キロの投手とかやめてくれ!!
すぐ体力減るからまあどうにかなるけど。怖いよ。

[Meisyo]スタミナ減少による球速低下が酷過ぎる件について

最近SQLばっかり書いているRです。早く適正なSQLを書きたいものです…。
とはいえ、ネットで書かれているようなことは一通り理解してできるようになりました。やったぜ。

今回は、タイトルの通り・・・

スタミナの減り方に比べて球速低下がヤバいよ!!

という切実な悩みです。というか、私も問題だと思ってました。

速球上げる → スタミナがないので球速が即死する → 打たれる
スタミナ上げる → 球速があまり無い → 打たれる

八方ふさがりじゃん!!ふぁっく!!1

最近やっと速球の地位向上を行えたのに、これでは速球投手の出番がない。

育成失敗例:

「やってみた。打たれたので後悔した。」うち(お馬高専)の元エースが死にました。
139km/h(速球60(C))、体力46(そんなに低くない)

防御率 13.35
WHIP 2.71

決して個人的にこの選手を使いたい訳ではない。決して。

というわけで、
下記3つのゲーム設定を確認してみようと思う。

1・速球設定
2・投手スタミナ設定
3・スタミナ低下による投手弱体化

それを見てから、実際の高校球児の速度減少を動画等で確認して、調整しよう!

1・速球設定

    function _disp_sp($st_sp, $cond, $disp = 0, $max = 0)
    {
        $rand = mt_rand(0, 200)/100 - 1;
        if($max)
        {
            $rand = 1;
        }
        $num = floor(0.8576 * $st_sp + 0.08 * $cond + 3.24 * $rand + 76.5);

        if(!$disp)
        {
            return $num;
        }
        else
        {
            return "<font style='font-size:14px;' title='{$st_sp}'>{$num}km/h</font>";
        }
    }

1. rand に「0~200の乱数 / 100 – 1」の値、平均0(範囲:-1~+1)が入る。

(max=1になるのは球速表示の時だけ)

2. 下記数式の計算が行われる

[math]num(kmph) = floor(0.8576 * stsp + 0.08 * cond + 3.24 * rand + 76.5)[/math]
stsp:ステータスの速球
cond:調子(平均50)
rand:ランダム要素(範囲-1~+1)

例1:
速球60(C)の調子50投手
132.0~138.4 km/hくらいで投球できる

例2:
速球60(C)の調子80投手
134.4~140.8 km/hくらいで投球できる

例3:
速球45(D)の調子50投手
123.4~129.8 km/hくらいで投球できる

例4:
速球75(B)の調子50投手
140.6~147.0 km/hくらいで投球できる

実際投手として使えそうなのは・・・速球60(C)以上でしょうかね。
見た感じね。

2・投手スタミナ設定

    // HP出力
    function _game_pc_hpp($st, $hp = 0, $num = 0)
    {
        // HP計算
        $hp = $st * $hp / 100 * $this->_game_base_hpp();
        $hp_max = $st * $this->_game_base_hpp();
        if($hp < 0){ $hp = 0; }

        // HPパーセント取得
        $hp_per = ($hp - $num)/ $hp_max * 100;
        if($hp_per < 0){ $hp_per = 0; }

        return $hp_per;
    }

1. 各ステータスの代入

st:ステータス(体力)
hp:試合開始前の残りhp(最大100)
num:投球数

2. 現在の残りHPの導出

[math]hpmax = st * 3[/math]
_game_base_hppは現在3です。
stは最大100なので、hpmaxの最大は300です。

[math](hpmax * hp / 100 – num) / hpmax[/math]
日本語にすると、残りhp割合(0.XX)* hpmax から投球数を引いて、hpmaxで割る。

「stが100でhpが100(疲労0)なら、最大300球投げたらhpがちょうど0になる」ってことですね。

一般的な体力40(E)で行くと、120球くらい投げたら体力0です。

3・スタミナ低下による投手弱体化

// HP補正値計算
if($G['pc_hp_per'] >= 30)
{
    $G['pc_hp_cor'] = $G['pc_hp_per'] / 700 + 6 / 7;
}
else
{
    $G['pc_hp_cor'] = $G['pc_hp_per'] * 0.03;
}
if($G['pc_hp_cor'] < 0){ $G['pc_hp_cor'] = 0; }

// 補正実行
$G['pc_hp_ar'] = ['S_p_sp', 'S_p_co', 'S_p_bb1n', 'S_p_bb2n', 'S_p_bb3n', 'p_bb0k', 'p_bb1k', 'p_bb2k', 'p_bb3k'];
foreach($G['pc_hp_ar'] as $str)
{
    $G['pc'][$str] = $G['pc'][$str] * $G['pc_hp_cor'];
}

解説

ステータスへ直接掛け算される係数があります。

その係数は、hp30までは最低でも6/7(0.86)、 補正値が+0.04(hp30)~0.14(hp100)あります。
つまり、、90%~100%は保証されています。

hp30以下は0(hp0)~0.9(hp30)と急低下します。

ただ、よく考えてみよう。

球速の数式、
[math]num(kmph) = floor(0.8576 * stsp + 0.08 * cond + 3.24 * rand + 76.5)[/math]
stsp:ステータスの速球
cond:調子(平均50)
rand:ランダム要素(範囲-1~+1)

10%下がったらヤバくね・・・?という疑問。

というわけで、速球60(C)を10%下げて54にしてみましょう。
5.1 km/hくらい下がりますね。

体力40(E)と仮定するなら、最大120球投球可能。
84球投げたらそう(速球10%減少)なります・・・。って普通では?

計算自体は合ってるような気がしますが・・・?

もしかすると、HP計算の繰り越しにバグがあるのかもしれません。

実際に係数を出して、試合を眺めてみます・・・。

・・・?
おかしい。

体力70なのに、たった4回で・・・
球速139→125km/h(14キロ減)

HPは30減少し70へ。
係数は0.958で正常でした。

たぶん、繰り返し計算がおかしい。

ああ・・・ここか。

// 補正実行
$G['pc_hp_ar'] = ['S_p_sp', 'S_p_co', 'S_p_bb1n', 'S_p_bb2n', 'S_p_bb3n', 'p_bb0k', 'p_bb1k', 'p_bb2k', 'p_bb3k'];
foreach($G['pc_hp_ar'] as $str)
{
    $G['pc'][$str] = $G['pc'][$str] * $G['pc_hp_cor'];
}

コレ、1回なら問題ないんですが・・・。
係数を累乗して計算しちゃうんですよね・・・。

つまり、

数値 = 基礎値 * 係数 * 係数 * 係数….(投球回数分)

そりゃ減るわ!

というわけで、問題がわかりました。
この問題点を修正しました。

数値 = 初期値 * 係数
* 初期値をメモリに保持し続けるようにしています。

・・・投手が強くなりすぎるような気がするが、、、大丈夫か?

4・参考動画


伊良部とかが10回でも150キロ投げてた。完投してたすごい。楽しかった。