Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
LICENSE, README, docs
  • Loading branch information
ryu-raptor committed May 30, 2020
0 parents commit b99eb2c
Show file tree
Hide file tree
Showing 13 changed files with 301 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "lodepng"]
path = src/Graphics/lodepng
url = https://github.com/lvandeve/lodepng.git
10 changes: 10 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
MIT License

Copyright 2018 Ryu Noguchi

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

96 changes: 96 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# アリスのミュージックフライト

歌いながら空を飛ぶような音楽ゲーム

![slides](documents/alice_slides.pdf)

## ビルド
(注意) GitHub への移植作業がまだ完了していないため Windows, MacOSX でのビルドはできないかもしれません.

### 依存
Linux を基準にしている.
Windows は `src/lib/win` にライブラリ本体を, `src/include` にヘッダを入れて下さい.
MacOSX は `src/lib/macosx/Framework` にライブラリの Framework を入れて下さい.

- g++ または clang : C++14 をサポートするもの. Windows の場合は Cygwin 環境など.
- lodepng : git submodule で解決
- glew
- glfw : linux では `pkg-config``glfw3` が見つかるか確認して下さい.
- SFML : sfml-audio に依存. linux では `pkg-config``sfml-audio` が見つかるか確認して下さい.

ArchLinux での一例
```
% sudo pacman -S base-devel glew glfw-x11 sfml
```

### ビルド手順
Windows と MacOSX は make の `os` 変数をそれぞれ win, osx と指定.
無指定で Linux と仮定する.

下記は Windows の例

本体プログラム
```
% cd src
% make os=win
```

譜面エディタ
```
% cd src
% make os=win ChartEditor
```

## 実行
トップディレクトリ直下の `AlicesMusicFlight` (もしくは `.exe` 拡張子がついたもの) を起動する

## 遊び方
遊びたい曲を選択します
曲が始まったら右からノーツが迫ってくるので, 赤なら上キー, 青なら下キーを押します.
曲が終わったらESCを押して終了してください.
リザルトやスコア機能は未実装です.

## 曲の追加と譜面エディタ
### 曲の追加
1. `charts` ディレクトリ以下に `.chart` で終わるディレクトリを作成します.
2. 遊びたい曲を `song.ogg` としてそのディレクトリに放り込みます.
3. 曲のカバーアートを `bg.png` としてそのディレクトリに放り込みます

### 譜面エディタ
```
% ChartEditor.exe charts/譜面ディレクトリ
```

#### 操作方法
```
[U][I] [P]
[D][F] [H][J][K][L]
[Ctrl] [S] [N]
[Shift] [^]
[Space] [<][V][>]
```

- `[Space]` : 曲の再生/一時停止
- `[H][L]` : 曲の停止時に時間を進める/戻す(Vimの左右移動)
- `[F]` : トレースを選択する.
- `[N][P]` : 選択中のトレースの次/前のものを選択する(Next, Prev)
- `[J][K]` : 選択中のトレースの高さを変える
- `[I][U]` : 現在位置にトレースを挿入(Insert, Uはトリルを打ちやすくするため)
- `[D]` : 選択中のトレースとそれにバインドしたノーツを削除する
- `[^][V]` : 選択しているトレースにノーツを挿入する. その後次のトレースを選択する.
- `[<][>]` : 使用しない.

- `[Shift]`を押しているとき
- `[H][L]` : ゆっくりと時間移動
- `[J][K]` : 選択したトレースを左右にゆっくりと移動
- `[^][V]` : 選択したトレースにバインドしたノーツを削除

- `[Ctrl]`を押しているとき
- `[S]` : 保存

## ライセンス (License)
特に指定がない限り MIT ライセンス.
Resources on this repository is licensed under MIT License UNLESS OTHERWISE SPECIFIED.

<a rel="license" href="http://creativecommons.org/licenses/by-nc/4.0/"><img alt="クリエイティブ・コモンズ・ライセンス" style="border-width:0" src="https://i.creativecommons.org/l/by-nc/4.0/88x31.png" /></a><br /><a xmlns:cc="http://creativecommons.org/ns#" href="https://github.com/ryu-raptor/amf.git" property="cc:attributionName" rel="cc:attributionURL">ryu-raptor</a> 作『<span xmlns:dct="http://purl.org/dc/terms/" href="http://purl.org/dc/dcmitype/Sound" property="dct:title" rel="dct:type">Hitodenashi ReEdit v2</span>』は<a rel="license" href="http://creativecommons.org/licenses/by-nc/4.0/">クリエイティブ・コモンズ 表示 - 非営利 4.0 国際 ライセンス</a>で提供されています。

9 changes: 9 additions & 0 deletions documents/ChartDataFlow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# 譜面のデータの流れ

ChartBuilder
|- NotesBuilder <- TraceBuilder

TraceBuilder -> sharedptr<vector<Trace>>
sharedptr<vector<Trace>> -> NotesBuilder -> sharedptr<vector<Note>>


66 changes: 66 additions & 0 deletions documents/Judge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# 判定

x-----
-x----

x-----
x-----

x===x-
---x--

## 前提
- ノーツを置ける枠をトレースという.
- トレースにはUp/Downの枠がある.
- 枠にはTap, Pressのどれかが入る.
- トレースは時刻の早い方から順に処理される.
- 入力は現在時刻に最も近いトレースに渡される.
- 渡されたトレースより早いトレースは全て処理済みにされる. この時判定は全てBadである.
- 判定にはNiceとBadの2種類がある.

## 実装
- トレースにノーツを保持させるのはトレースの負荷が大きい.
- upperNotesとlowerNotesの2つのリストにノーツを登録しておく. ノーツは対応するトレースを記録してある.
- ノーツは現在時刻から自分が選ばれる指標(メトリック)を計算できる. これをもとに処理するノーツを決定する.
- メトリックは小さいほど選ばれやすい. 一番選ばれやすいノーツを軸にV字にグラフを描ける. 負の無限大から走査した時, 最小値を踏んだ後はそれより大きな値が出ない. そういう関数を選ぶ.
- 処理されるノーツより時間的に早いノーツで, 処理済みでないものは全てBadとして処理し, 詰める. こうして一番最初の要素が一番最初に処理されるようにする.
- ノーツは時刻情報とボタン押下情報を与えられ, 処理を行う.
- ノーツはスコアが入った時にputScoreフックを呼び出す.
- ノーツの処理の戻り値によりノーツの処遇を決める. {Keep, Release} : Keepはリストに保持しておく, Releaseはファイナライズベクターに転送する.
- ファイナライズベクターはノーツが処理を終わらせた後のエフェクトなどを行わせるためにある. Finalizableを継承しており, finalizeメソッドがtrueを返した時に完全にdeleteされる.

## メトリック

### Tap

V
-----X-----

metric = abs(V-X)

### Press

V
-----X------Y-----Z----

metric = abs(V-X)



V
-----X------Y-----Z----

metric = 0


V
-----X------Y-----Z----

metric = abs(V-Z)

## state

### Tap

### Press

7 changes: 7 additions & 0 deletions documents/KeyInput.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# キー入力

KeyBuffer
update() -> Void //> フレームごとに呼び出されてキーバッファの状態を更新
keyUpdate(KeyCode, State) -> Void //> コールバックが利用する. この後にupdateが呼ばれて更新される.


6 changes: 6 additions & 0 deletions documents/Pacemaker.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# ペースメーカ

## 動機
- 楽曲の再生秒と実際の位置の間を何とかして欲しい
- 秒を入れると位置が, 位置を入れると秒が出るのがいい

34 changes: 34 additions & 0 deletions documents/Resources.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# リソースファイル

シンプルなペア構造

iniファイルのサブセット
リソースファイル管理用の特殊文法がある.
再帰構造で用いられる前提.

## 構造
```
[Category]
Key : Value
```

## 実装
単純な辞書

```
std::unordered_map<std::string as `Category`, std::unordered_map<std::string as `Key`, std::string as `Value`>>
```

## 拡張機能
1. 変数展開
Valueにて
```
${Category : Key}
```

2. 再帰的読み込み
```
ResourceFiler::_ctor("ResourceInfo.ini", withdir: "ResourceDirectory");
```

withdirにはキー. それぞれのディレクトリに入って再帰的にResourceInfo.iniを読み込む
50 changes: 50 additions & 0 deletions documents/Sync.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Syncの計算
sync rhythm tempo startms

speed := 1小節あたりの時間(s)
musiccounter := 音楽の現在再生時刻(s)
stagecounter := ゲームの再生位置(s)
sectionno := 小節番号
sectionpos := 小節を1とした時の位置
|==== ==== ==== ====|
0 0.5 1

tempo = [rythm / minutes]
sectiontempo[Section / minutes] = tempo * [rhythmの分子]
speed = 1 / (sectiontempo * 60)

stagecounter = musiccounter - startms
sectionno = floor(stagecounter / speed)
sectionpos = (stagecounter - (sectionno * speed)) / speed
= (stagecounter / speed - sectionno)

## stage counterの進め方
fore = getTimeTick()
loop {
do some work
now = getTimeTick()
sec = toSeconds(now - fore)
stagecounter += sec
fore = getTimeTick()
}

# 音ズレ
どんなに高性能なパソコンでも音ズレは起きる.
それの訂正が大事.

V 0
game: ==== | ==== ==== ==== ==== |
muse: --- | ---- ---- ---- ---- |

0 の地点になったらstagecounter <- musiccounterにする.

V
game: === | ==== ==== ==== ==== |
muse: --- | ---- ---- ---- ---- |

nextscoutner = (sectionno + 1) * speed
loop {
if stagecounter >= nextscoutner {
stagecounter = musiccounter
nextscoutner = (sectionno + 1) * speed
}
7 changes: 7 additions & 0 deletions documents/Trace.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# トレース

## 方針

- Traceは構造体
- Traceはコピーしていい
- ただしTraceの配列は生成したあとは参照で渡す
Binary file added documents/alice_slides.pdf
Binary file not shown.
12 changes: 12 additions & 0 deletions documents/include.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# includeとライブラリパス

Graphics/
|- files...
|- g2d/
|- g3d/
|- lodepng/

インクルードパスはプロジェクトルートを基準にする.
-I../../などとする

cmakeにはいらないけど
1 change: 1 addition & 0 deletions src/Graphics/lodepng
Submodule lodepng added at 486d16

0 comments on commit b99eb2c

Please sign in to comment.