D2SSharp — Diablo II セーブファイル読み書きライブラリ(C#)

Library

概要

D2SSharpは、Diablo IIのキャラクター保存ファイル(.d2s)および共有ストッシュファイル(.d2i)を読み書きするためのC#製ライブラリです。バイナリのフォーマット解析とシリアライズ機能を持ち、古いLord of Destruction形式(1.10以降)に対応します。開発者はこのライブラリを使って、セーブデータを読み取り、インスペクト、編集、あるいは新規生成して書き戻すことができます。プロジェクトはNuGet配信とGitHub Actionsによるワークフローを備え、.NET での組み込み利用が想定されています。

GitHub

リポジトリの統計情報

  • スター数: 3
  • フォーク数: 0
  • ウォッチャー数: 3
  • コミット数: 10
  • ファイル数: 7
  • メインの言語: C#

主な特徴

  • .d2s(キャラクター)と .d2i(共有ストッシュ)ファイルの読み書きをサポート
  • Lord of Destruction(1.10以降)形式に対応する互換性
  • NuGet配布とGitHub Actionsによる自動パイプラインを備えたパッケージ化
  • 軽量で.NETプロジェクトに組み込みやすいAPI設計

技術的なポイント

D2SSharpはゲームセーブという「バイナリ・フォーマット」を安全に扱うための実装課題に対処しています。Diablo IIのセーブファイルは固定長ヘッダ、バージョン管理、各種テーブル(アイテム、スキル、クエスト状態、NPC/傭兵データなど)を持つ複雑なバイナリ構造で、可変長レコードやビットフィールドが混在します。本ライブラリはファイルの読み取り時にバイトストリームを順次パースして内部モデルに展開し、変更後は同じ仕様でシリアライズしてバイナリを再生成します。

設計上の注目点として、フォーマットバージョン差分への対応があります。セーブ仕様はバージョンに応じてオフセットやフィールドが変わるため、バージョン検出と条件分岐で互換性を担保する実装が必要です。また、アイテムや属性は多数のフラグや固定/可変フィールドを持つため、これらを表現するためのドメインモデル(例:Itemクラス、Attribute列挙、Inventory/BodyPositionsなど)を用意し、シリアライズ・デシリアライズ双方で共通化した処理を用いることでバグを減らします。

パフォーマンス面では、メモリ上の表現とバイナリ変換がボトルネックになり得るため、バッファ処理やストリームの効率的な利用が重要です。さらに、セーブファイルを編集して書き戻す際はチェックサムや整合性ルール、ゲーム側の期待する内部整列(アラインメント)に注意が必要です。D2SSharpはこれらの点を吸収するための読み書きロジックとテスト/CIワークフローを備え、NuGetによる配布で他プロジェクトから容易に利用できるようにしています。加えて、ライブラリはゲームデータ構造を抽象化しているため、セーブの検査ツール、ビルド済みキャラクターの生成器、モッドツールとの連携など用途が広がります。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .github: dir
  • .gitignore: file
  • CLAUDE.md: file
  • D2SSharp.sln: file
  • README.md: file

…他 2 ファイル

(READMEにはビルドバッジとNuGetバッジが含まれ、パッケージとして公開されていることが示されています)

使いどころと注意点

  • ゲームセーブの表示・編集ツール作成や、セーブデータの検証、自動生成(テスト用キャラクター生成)に最適です。
  • セーブ構造の誤った再生成はゲームの動作異常を招くため、書き戻し前にはバックアップや可逆的な操作を必ず行ってください。
  • ローカルでの改造や配布済みセーブの改変がゲームの利用規約やマルチプレイ環境で問題になる場合があるため、利用は自己責任でお願いします。

まとめ

Diablo IIセーブの読み書きを手軽に行えるC#ライブラリで、NuGet配布・CI体制も整った実用的なツールです(約50字)。

リポジトリ情報:

READMEの抜粋:

D2SSharp

Build NuGet

A C# library for reading and writing Diablo 2 save files (.d2s character saves and .d2i shared stash files). Supports both the original Diablo 2: Lord of Destruction format (1.10+) and Diablo…