Repository navigation
Open
7 / 77 of 7 issues completedDescription
目的
VB 版(SRC/SRC_20121125)の手続き(Function・Sub・Property)を、対応する C# のメソッドと 1 つずつ突き合わせます。分岐の漏れ・条件の誤り・コメントアウトのまま残った処理を見つけて直します。
VB 版を実行して期待値にするのは難しいので、コードを正とします。
- ヘルプ: 元の SRC から移したままの頁(390 頁)を SRC# の動作と照らし合わせる #1446 はヘルプを起点に突き合わせました。ヘルプに書かれていない動作の違いは見つけられません。
- 移植で起きやすい誤りを Roslyn のアナライザーで洗い出して SRCCore の 705 か所を VB に合わせ、手続き単位の突き合わせの準備をする #1497 は、型の決まった誤り(丸め・
&&と||)だけを機械で洗い出したものです。 - 今回は手続きを単位に、すべての分岐を見ます。
規模と対象
- VB 版は、
*.bas・*.cls・*.frmの 68 本に 1,333 の手続き、約 129,000 行があります。すべての手続きを対象にしていて、選んで外した手続きはありません。 - 大きいのは
Unit.cls(276)、CmdData.cls(195)、GUI.bas(71)、Pilot.cls(67)、Command.bas(52)です。 - 手続きの外にあるもの(変数の宣言・
Const・Type・Enum・.frmの画面の定義)は表に載りません。下の「進め方」の 5 と、チェックリストの最後の 2 項目で扱います。
進め方
手順と状態の書き方は 対応表の説明 にあります。
- 対応表(
docs/history/porting/vb-map/)python3 tools/vb_port_map.pyで作ります。- VB の手続きごとに、C# の候補・状態・メモを書きます。
- CI(
port-map-check)で、すべての手続きが表にあることと状態の書き方を確かめます。
- 手続きごとに突き合わせる
- 分岐ごとに同じかを確かめます。
- 違いは、VB の動作を期待値にしたテストにして直します(
docs/decisions/2026-10-15-vb-behavior-as-test-oracle.md)。 - 表の「状態」と「メモ」を書きます。
- TODO とコメントアウトの判断: その手続きに当たる SRCCore の
TODO・XXX・コメントアウトされたコード(todo.md)を判断します。 - 規則を足す: 機械で見つけられる型の誤りなら、SRCPortingAnalyzers に規則を足します。
- 表に載っていないもの: 手続きの外の変数の宣言(型)・
Const・Type・Enum・.frmの画面の定義は表に載りません。そのモジュールを突き合わせるときに一緒に見ます(対応表の説明の「表に載っていないもの」)。 - 元の SRC のコンパイルの設定:
SRC.VBPはBoundsCheck=-1・OverflowCheck=-1・FlPointCheck=-1で、配列の範囲チェック・整数のオーバーフローチェック・浮動小数点のエラーのチェックをしない設定と読めます。- そうなら、配布された Src.exe では範囲外の参照やあふれは実行時エラーになりません。「VB では実行時エラー」と判断するときに考えます。
- 整数の 0 での割り算・
Nothingの参照・型の不一致・Collection の範囲外は、この設定に関わらずエラーになります。 - 読み方はまだ資料で確かめていません。最初にこの設定に関わる判断(イベントコマンドで範囲外の引数を参照したとき、元の SRC と同じく「イベントデータが不正です」にする #1511 など)をするときに確かめます(対応表の説明の「元の SRC の実行ファイルのコンパイルの設定」)。
Issue を増やしすぎないために
- 突き合わせの単位は、下のチェックリストの 1 項目を 1 つの PR にします。
- サブ Issue は、リスクの高い先頭の 7 つだけにしました。残りは、着手するときにサブ Issue にするか、このチェックリストのまま PR で閉じます。
- 見つかった違いは、同じ PR で直すなら Issue にしません。表の「メモ」に PR の番号を書きます。
- 同じ PR で直せないものだけを Issue にします。
- あとの単位で扱う手がかりは、その手続きの行の「メモ」に書きます(状態は「未確認」のまま)。
突き合わせの単位(リスクの高い順。docs/decisions/2026-10-31-regression-first-qa-plan.md のカバレッジと変更の多さから)
- VB との突き合わせ ①: Unit.cls 武器・ダメージの計算(4923〜11325 行) #1499 Unit.cls 武器・ダメージの計算(4923〜11325 行。36 の手続き・6,312 行)(VB との突き合わせ ①: Unit.cls 武器・ダメージの計算(4923〜11325 行) #1506)
- VB との突き合わせ ②: Unit.cls 防御・攻撃の実行(11326〜16478 行) #1500 Unit.cls 防御・攻撃の実行(11326〜16478 行。12・5,126 行)(VB との突き合わせ ②: Unit.cls 防御・攻撃の実行(11326〜16478 行) #1507)
- VB との突き合わせ ③: COM.bas(敵の思考) #1501 COM.bas(18・5,641 行)(VB との突き合わせ ③: COM.bas(敵の思考) #1509)
- VB との突き合わせ ④: Unit.cls マップ攻撃・アビリティ(16479〜21936 行) #1502 Unit.cls マップ攻撃・アビリティ(16479〜21936 行。36・5,375 行)(VB との突き合わせ ④: Unit.cls マップ攻撃・アビリティ(16479〜21936 行) #1510)
- VB との突き合わせ ⑤: CmdData.cls Parse・Exec とイベントコマンド A〜D #1503 CmdData.cls Parse・Exec とイベントコマンド A〜D(61・4,735 行)(VB との突き合わせ ⑤: CmdData.cls Parse・Exec とイベントコマンド A〜D #1512)
- VB との突き合わせ ⑥: CmdData.cls イベントコマンド E〜O #1504 CmdData.cls イベントコマンド E〜O(58・3,930 行)(VB との突き合わせ ⑥: CmdData.cls イベントコマンド E〜O #1519)
- VB との突き合わせ ⑦: CmdData.cls イベントコマンド P〜Z #1505 CmdData.cls イベントコマンド P〜Z(76・4,448 行)(VB との突き合わせ ⑦: CmdData.cls イベントコマンド P〜Z #1522)
- Expression.bas(25・8,195 行)(VB との突き合わせ ⑧: Expression.bas #1523)
- Unit.cls 能力値・特殊能力・状態(〜4922 行。106・4,514 行)(VB との突き合わせ ⑨: Unit.cls 能力値・特殊能力・状態 #1524)
- Unit.cls アイテム・特殊効果・合体分離・その他(21937 行〜。86・9,589 行)(VB との突き合わせ ⑩: Unit.cls アイテム・特殊効果・合体分離・その他 #1525)
- Pilot.cls・Pilots.cls・PilotData.cls・PilotDataList.cls(132・5,497 行)(VB との突き合わせ ⑪: Pilot.cls・Pilots.cls・PilotData.cls・PilotDataList.cls #1527)
- Map.bas・Command.bas(88・12,110 行)(VB との突き合わせ ⑫: Map.bas・Command.bas #1528)
- Event.bas・Intermission.bas・SRC.bas・LabelData.cls(60・8,394 行)。
Event.SubLocalVarsが CallDepth = 0 でもスタックを返す点(Sort・ForEach・Ask・Other.cs が直接使う)と、todo.md のSRC.save.csの行(中断データ・クリアデータの読み込み)も見る(VB との突き合わせ ⑬: Event.bas・Intermission.bas・SRC.bas・LabelData.cls #1531) - データ:
*Data.cls・*DataList.cls・Item・Items・Units・Dialog・BCVariable(約 240・約 7,600 行)。特殊能力の「Lv」の後が数値でないとき、データの読み込みを打ち切らない #1526 も扱う(VB との突き合わせ ⑭: データ(*Data.cls・*DataList.cls・Item・Items・Units・Dialog・BCVariable) #1533) - Effect.bas・Sound.bas・GeneralLib.bas・Help.bas・FileDialog.bas(83・11,674 行)(VB との突き合わせ ⑮: Effect.bas・Sound.bas・GeneralLib.bas・Help.bas・FileDialog.bas #1535)
- GUI.bas・Graphics.bas・Status.bas・フォーム(
*.frm)・Susie.bas・VBMP3.bas・Flash.bas(約 180・約 14,500 行。SRCRender と SRCSharpForm の両方を見る。.frmの画面の定義(Begin VB.Form〜。配置・大きさ・既定の文言・タブの順)も比べる)(VB との突き合わせ ⑯: GUI.bas・Graphics.bas・Status.bas・フォーム・Susie.bas・VBMP3.bas・Flash.bas #1537) - モジュールの宣言: 手続きの外の
Const(約 120)・Type・Enum(約 30)の値と項目が C# と同じか。表に載らないので、ここでまとめて見る
進み具合(#1537 の時点)
- 手続き 1,333 のうち、確かめたもの 1,333(一致 851・修正済み 324・SRC#で不要 145・違いあり 13)
- 行数では 119,498 行のうち 119,498 行(100%)
- 起票したもの: 使い切った武器・アビリティのアイテムを消すとき、元の SRC と同じく番号でアイテムを決める #1508(使い切ったアイテムの決め方)・イベントコマンドで範囲外の引数を参照したとき、元の SRC と同じく「イベントデータが不正です」にする #1511(範囲外の引数の参照)・Load コマンドのデータの読み込みと構文解析を元の SRC(ExecLoadCmd)に合わせる #1518(Load コマンド)・イベントラベルの有効・無効(ClearEvent)の持ち越しが VB と違う #1529(イベントラベルの有効・無効の持ち越し)・クイックセーブした後の QuickLoad コマンドが、クイックセーブではなくリスタート用のデータを読む #1530(クイックセーブの後の QuickLoad)・GeneralLib.ToList を使う箇所と IsNumeric の指数表記が、元の SRC と違う #1534(ToList を使う箇所と IsNumeric の指数表記)・SRCRender: 画像の読み込みのエラーと、読み込み中の進み具合のバーを出さない #1536(SRCRender の画像の読み込みのエラーと読み込み中の進み具合)。RestoreSelections で元の SRC と同じく CurrentForm を選び、Split・Transform が退避した選択を書き換えないようにする #1521 は VB との突き合わせ ⑫: Map.bas・Command.bas #1528 で、特殊能力の「Lv」の後が数値でないとき、データの読み込みを打ち切らない #1526 は VB との突き合わせ ⑭: データ(*Data.cls・*DataList.cls・Item・Items・Units・Dialog・BCVariable) #1533 で直し、SetStatusStringColor・SetWindowColor・SetWindowFrameWidth の設定がステータスウィンドウに効かない #1520 は VB との突き合わせ ⑯: GUI.bas・Graphics.bas・Status.bas・フォーム・Susie.bas・VBMP3.bas・Flash.bas #1537 で閉じた(新GUIだけの機能)
完了の条件
- 対応表のすべての手続きの「状態」が「未確認」でない(確かめた・C# に無い理由・SRC# で不要な理由)
- チェックリストの最後の 2 項目(画面の定義・モジュールの宣言)を見終えている
- 見つかった違いが直っているか、Issue になっている
Metadata
Metadata
Assignees
Labels
No labels
Activity
VB 版の手続きと C# の対応表を作るツールと、表・TODO の一覧を足す(#1498)
Merge pull request #1513 from 7474/claude/jolly-hawking-cgeg3b
イベントデータの読み込みとラベルの登録を VB に合わせる(#1498)
SRC.CreateIniFile のコメントアウトした Src.ini の書き出しを、理由のコメントに置き換える(#1498)
SRC.bas の手続きを元の SRC と突き合わせ、違いを直す(#1498)
インターミッションのコマンドを元の SRC の Intermission.bas と突き合わせて直す(#1498)
SRC.bas のテストから、要らなくなったダミーのラベルを除く(#1498)
対応表: Event.bas・Intermission.bas・SRC.bas・LabelData.cls の 60 の手続きを突き合わせ…
19 remaining items
マップ・リスト・メッセージの入力の処理を VB のフォームの手続きに合わせる(#1498)
GUI.bas の DrawPicture・DrawString・DrawSysString・DataErrorMessage・Displ…
ツールチップの大きさ・位置・枠を VB の ToolTip.frm の ShowToolTip に合わせる(#1498)
SRC#Form の DrawPicture・DrawString・DrawSysString・DisplayTelop にも同じ直しを入れる(
テロップの見た目を VB の Telop.frm に合わせる(#1498)
GUI.bas のマップの描画と武器・アビリティの一覧を VB に合わせる(#1498)
ステータスウィンドウの表示を元の SRC(Status.bas)に合わせる(#1498)
Graphics.bas の画像の加工(ccr-1c5b3aad-58xpqs)を取り込み、DrawPicture の透過色を効果のあとで抜く(
MoveCursorPos: カーソルを動かしている間はステータスの表示を止める(#1498)
ダブルクリックの 2 回目とリストの空いたところの扱いを VB のフォームに合わせる(#1498)
VRT の基準画像を更新する(画像「-」のユニットは頭文字を描かない。#1498)
地形情報(DisplayGlobalStatus)の VRT の基準画像を元の SRC の配置に合わせて更新する(#1498)
マップの描画モードを地形とレイヤーに別々にかけ、レイヤーは透過で処理する(#1498)
VRT の基準画像を、ステータス・マップ・メッセージの直しを合わせた画面で作り直す(#1498)
対応表: GUI.bas・Graphics.bas・Status.bas・フォーム・Susie.bas・VBMP3.bas・Flash.b…