# K-Shoot MANIA v1.xx

## 概要

Windows向けの音楽ゲーム（リズムゲーム）です。Hot Soup Processor（HSP）で開発されており、ゲーム本体と譜面エディタの2つのアプリケーションで構成されています。プレイヤーはBTボタン・FXボタン・レーザー（アナログ）操作を組み合わせて、流れてくるノーツに合わせて入力を行います。

公式サイト: https://kshootmania.com

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| ゲームプレイ | BT/FXノーツ・レーザーノーツの判定処理、コンボ・スコア計算、エフェクティブレート判定 |
| 選曲画面 | 楽曲一覧表示、難易度選択（LIGHT/CHALLENGE/EXTENDED/INFINITE）、お気に入り管理、ソート・フィルタ |
| オプション設定 | ノーツ表示/非表示/AUTO設定、HI-SPEED調整、ミラー・ランダム配置、画面演出設定 |
| リザルト画面 | スコア・判定内訳表示、クリアメダル、グレード表示、ハイスコア更新通知 |
| コースモード | 複数楽曲を連続プレイするコースモード、コースリザルト表示 |
| オーディオエフェクト | VSTプラグインによるリアルタイム音声エフェクト（Bitcrusher、Flanger、Phaser等） |
| 譜面エディタ | 楽曲譜面（.ksh形式）の作成・編集ツール |
| 多言語対応 | 日本語、英語、韓国語、簡体字中国語、繁体字中国語 |
| 動画再生 | 楽曲に連動した背景動画の再生 |

## 技術スタック

### コア

- 言語: Hot Soup Processor（HSP）3.51（Windows版, x86, ANSI版）
- 補助言語: C++（一部DLLで使用）
- プラットフォーム: Windows（Win32 API依存）
- グラフィックス: HGIMG3（HSP用3Dグラフィックスライブラリ）、Direct3D 9
- オーディオ: BASS Audio Library

### 主要ライブラリ

- **BASS** (`bass.dll`): オーディオ再生エンジン
- **BASS FX** (`bass_fx.dll`): オーディオエフェクト処理
- **BASS VST** (`bass_vst.dll`): VSTプラグインホスト（エフェクト用）
- **BASS Conv** (`bassconv.dll`): オーディオフォーマット変換
- **ksmcore.dll**: 視点変更の現在値取得・キー音の再生管理等（C++実装）
- **kson.dll**: KSON譜面フォーマット処理
- **kshlib.dll**: K-Shoot MANIA共通ライブラリ
- **hspinet.dll**: HSP用ネットワーク通信ライブラリ
- **hspda.dll**: HSP用データアクセスライブラリ
- **hspext.dll**: HSP拡張プラグイン
- **a2d.hsp**: 2D描画ユーティリティ
- **mod_d3d9vsync.hsp**: Direct3D 9 VSync制御
- **mod_joystick.as**: ジョイスティック入力対応

### VSTプラグイン（`lib/`配下）

- `bitc.dll`: Bitcrusher
- `flan.dll`: Flanger
- `phas.dll`: Phaser
- `pitc.dll`: Pitch Shifter
- `regawo.dll`: Retrigger / Gate / Wobble
- `sich.dll`: Sidechain
- `tstp.dll`: Tapestop

## ディレクトリ構成

```
ksm-v1-develop/
├── kshootmania.hsp          # ゲーム本体エントリポイント
├── kshooteditor.hsp         # 譜面エディタエントリポイント
├── src/                     # ソースコード
│   ├── bass.as              # BASS Audio ラッパー
│   ├── bass_fx.as           # BASS FX ラッパー
│   ├── bass_vst.as          # BASS VST ラッパー
│   ├── bassconv.as          # BASS Conv ラッパー
│   ├── kshlib.as            # K-Shoot MANIA 共通ライブラリ定義
│   ├── ksmcore.as           # ksmcore.dll 呼び出し定義
│   ├── kson.as              # KSON フォーマット処理定義
│   ├── winapi.as            # Win32 API 呼び出し定義
│   ├── filesystem_utils.as  # ファイルシステムユーティリティ
│   ├── ir.hsp               # インターネットランキング関連（削除済み）
│   ├── audio/               # オーディオ関連
│   │   ├── fxdef.hsp        # エフェクト定義
│   │   ├── key_sound.as     # キー音再生管理
│   │   └── laser_slam_sound.as # レーザースラム音管理
│   └── scene/               # 各画面（シーン）
│       ├── title.hsp        # タイトル画面
│       ├── select.hsp       # 選曲画面
│       ├── option.hsp       # オプション画面
│       ├── play.hsp         # プレイ画面（エントリ）
│       ├── play/            # プレイ画面詳細
│       │   ├── play_init.hsp          # 初期化処理
│       │   ├── play_update.hsp        # 更新処理
│       │   ├── play_key_input.hsp     # キー入力処理
│       │   ├── play_button_note.hsp   # BTノーツ判定
│       │   ├── play_laser_note.hsp    # レーザーノーツ判定
│       │   ├── play_draw_frame.hsp    # フレーム描画
│       │   ├── play_chart_load.hsp    # 譜面読み込み
│       │   ├── play_game_logic.hsp    # ゲームロジック
│       │   ├── play_graphics.hsp      # グラフィックス処理
│       │   ├── play_audio.hsp         # オーディオ処理
│       │   ├── play_audio_effects.hsp # オーディオエフェクト処理
│       │   ├── play_video.hsp         # 動画再生
│       │   ├── play_utils.hsp         # ユーティリティ
│       │   └── play_splash_screen.hsp # スプラッシュスクリーン
│       ├── result.hsp       # リザルト画面
│       ├── course_result.hsp # コースリザルト画面
│       └── gate.hsp         # ゲート画面（削除済み）
├── imgs/                    # 画像リソース
│   ├── editor/              # エディタ用画像
│   ├── bg/                  # 背景画像
│   ├── gate/                # ゲート画面画像
│   ├── icon/                # アイコン画像
│   └── jacket/              # ジャケット画像
├── se/                      # 効果音・BGM
│   └── note/                # ノート音
├── songs/                   # 楽曲データ
│   └── K-Shoot MANIA/       # デフォルト楽曲
├── lang/                    # 言語ファイル
│   ├── Japanese.txt
│   ├── English.txt
│   ├── Korean.txt
│   ├── Simplified Chinese.txt
│   └── Traditional Chinese.txt
├── lib/                     # VSTプラグインDLL
├── third_party/             # サードパーティライブラリ
├── *.dll                    # ランタイムDLL
├── LICENSE                  # MITライセンス
└── third_party_license.txt  # サードパーティライセンス
```

## セットアップ

### 必要条件

- **OS**: Windows（x86）
- **HSPランタイム**: Hot Soup Processor 3.51（ANSI版）
  - HSP 3.6以降ではK-Shoot Editorが正常動作しないことが確認されています
  - HSPのUTF-8版は非対応です
- **DirectX**: Direct3D 9 対応環境
- Linux環境ではコンパイル済みバイナリをWineで実行することでプレイ可能です

### インストール手順

1. Hot Soup Processor 3.51をインストール
2. 本リポジトリをクローンまたはダウンロード
3. HSPスクリプトエディタで `kshootmania.hsp`（ゲーム本体）または `kshooteditor.hsp`（譜面エディタ）を開く
4. コンパイル・実行

### 楽曲の追加

- `songs/` ディレクトリ以下にフォルダを作成し、`.ksh` 形式の譜面ファイルと楽曲ファイルを配置

## 開発

### ビルド

HSPスクリプトエディタでソースファイルを開き、「実行」→「コンパイル+実行」でビルド・実行できます。

- `kshootmania.hsp`: ゲーム本体のエントリポイント
- `kshooteditor.hsp`: 譜面エディタのエントリポイント

### コード上の注意事項

- 基本的にモジュール（`#module`～`#global`）が使用されていないため、変数はすべてグローバルスコープです
- `stat1`, `stat2` 等は一時変数（仮の変数）を意味しています
- 座標などの数値がマジックナンバーとしてハードコードされています
- HSPではコンパイル時に最適化が行われないため、むやみな変数化・関数分けは実行速度の低下につながる可能性があります

### ソースコード公開に伴う削除機能

以下の機能に該当するコードは削除されています：

- INPUT GATE（ゲーム内譜面ダウンロード機能）
- Twitter連携機能
- インターネットランキング

### ライセンス

MITライセンスで提供されています（`se/*_bgm.ogg` および `se/note/*.wav` を除く）。

- `se/*_bgm.ogg` および `se/note/*.wav`: GitHub上でのFork目的でのみ例外的に使用可能
- 公式サイトで配布されているバイナリ（ランキング機能等を含むもの）はMITライセンスではありません
