縦画面・1オクターブ鍵盤・地図・特訓/攻略・HP/MP・攻撃ゲージ・技を入れたMVPです。
- 縦画面固定
- 1オクターブ鍵盤
- 五度円配置の12拠点
- 中央に「無音の核」
- 各拠点に2モード
- 特訓: 父が映す仮想敵。攻撃なし。
- 攻略: 実体敵。攻撃ゲージあり。
- HPは数値 + ゲージ
- MPは数値 + ゲージ
- 技
- 減速: 攻撃ゲージを遅くする
- 二分聴: 候補を6個に絞る
- 四分聴: 候補を3個に絞る
- 直観: 正解鍵を一時表示
- 敵は常に1体ずつ出現
- 攻略クリアで五度円上の隣接拠点を解放
- 6拠点攻略で通常の無音の核を解放
- 12拠点攻略で真・無音の核を解放
IntervalBattleMVP.xcodeproj
敵本体 = インターバル
オーラ = ルート
正解 = ルート + インターバル
- Progress is saved with UserDefaults.
- Cleared dungeons and unlocked areas persist after closing the app.
- Multi-aura dungeons were added:
- 2-aura dungeons
- 3-aura dungeons
- 6-aura dungeons
- Normal final battle opens after clearing a 6-aura dungeon.
- Skills:
- 減速: slows the attack gauge.
- 二分聴: narrows candidates to 6 keys.
- 三分聴: narrows candidates to 4 keys.
- 四分聴: narrows candidates to 3 keys.
- 回復: restores HP.
- The exact-answer skill was removed.
- The current root aura key is lightly colored gray on the keyboard.
- Multi-aura dungeons are now placed inside the map.
- Progression is now 2-aura -> 4-aura -> 6-aura -> 12-aura final.
- Candidate narrowing skills persist across enemies while their timer is active.
- When a new enemy appears during the skill duration, candidates are recalculated to include the new correct answer.
- Heal MP cost increased to 28.
- Sound effects were added using iOS system sounds.
- The map is now larger than the screen and scrollable in both directions.
- Route lines connect single-aura areas, 2-aura dungeons, 4-aura dungeons, 6-aura dungeons, and the final core.
- The final core is no longer split into normal/true nodes.
- The center battle is always a 12-aura battle.
- Each multi-aura dungeon has flavor text in its BattleConfig/story and context menu.
- Node sizes were increased to reduce label overlap.
- Fixed Swift compile error by replacing Set.contains closure usage with contains(where:).
- Enemy spawn now plays the current root aura pitch in a lower octave.
- Keyboard tap now plays a dyad:
- lower note = current aura/root
- upper note = tapped keyboard note
- This is intended to help the player hear the interval relationship, not only see it.
- Fixed malformed @Published property declarations in GameModel.swift.
- Kept pitched audio:
- enemy spawn plays the root aura in a lower octave
- keyboard tap plays lower root + upper tapped note
- Route unlock is now connection-based.
- If a cleared node is connected to a map node, that connected node opens.
- Unconnected map nodes do not open merely because the clear count increased.
- Each dungeon now uses all combinations:
- allowed root auras × 11 interval enemies.
- Attack time:
- 1 aura: 12 seconds
- 2 auras: 6 seconds
- 4 auras: 3 seconds
- 6 auras: 2 seconds
- 12 auras: 1 second
- Keyboard layout:
- 1-aura and 2-aura battles keep the normal keyboard.
- 4-aura, 6-aura and 12-aura battles use randomized pitch positions.
- The previous fully randomized keyboard grid was removed.
- For 4-aura, 6-aura, and 12-aura battles, the keyboard now remains a real keyboard layout.
- Only the leftmost white key is randomized.
- Possible leftmost keys: C, D, E, F, G, A, B.
- 1-aura and 2-aura battles keep the normal C-start keyboard.
- Removed the START label on the leftmost key.
- Shifted keyboard now displays 8 white keys instead of 7.
- Example: E start becomes E F G A B C D E.
- This allows missing black keys such as E♭ to appear at the right edge.
- Random keyboard start is now applied to all battles, including 1-aura and 2-aura battles.
- The map background and route colors were adjusted slightly toward an RPG-map style.
- White keys are back to 7 visible keys.
- Black keys are computed cyclically, so if a side black key is needed it appears at the right edge.
- Example: E-start shows E F G A B C D plus E♭ at the right side.
- The keyboard start is randomized every time a new enemy appears, not only once at battle start.
- This applies to training, 1-aura, 2-aura, 4-aura, 6-aura, and 12-aura battles.
- Shifted keyboard now shows side black keys on both sides when needed.
- Skill effects now show remaining time gauges.
- Slow and candidate-narrowing durations are about doubled.
- Candidate-narrowing skills remain active across enemies as before.
- Added 二択聴: narrows candidates to 2 keys.
- Heal MP cost changed to 24.
- In training mode, candidate-narrowing skills consume no MP because virtual enemies have very low resistance to skills.
- Skills changed:
- 二分聴: 6 MP, 6 candidates.
- 四分聴: 24 MP, 3 candidates.
- 六分聴: 98 MP, 2 candidates.
- 三分聴 removed.
- Candidate highlights were made more subdued.
- If a key is both the aura root and a candidate, the aura background is prioritized and candidate status appears as an outline.
- Map route lines were made thinner and lighter.
- Map canvas and node spacing were increased to reduce overlaps.
- Multi-aura nodes were widened and their backgrounds strengthened so route lines do not obscure names.
- Route line visibility was restored closer to the previous stronger style.
- Added small dark masks behind map labels.
- Area names, status text, and core labels are now less affected by route lines passing underneath.
- Node backgrounds were made more opaque while keeping their color identity.
- Candidate-narrowing effect gauges now show skill names instead of candidate counts.
- 6 candidates: 二分聴
- 3 candidates: 四分聴
- 2 candidates: 六分聴
- Every area still contains all required combinations: allowed root auras × 11 interval enemies.
- Enemy order is adaptive within the remaining undefeated combinations.
- High HP: prioritizes combinations with longer recorded response time and more mistakes.
- Low HP: prioritizes combinations with shorter recorded response time and fewer mistakes.
- The final number of enemies and combinations does not change.
- Response time and misses are stored internally per root-aura × interval combination.
- First clear of a previously uncleared area increases player level by 1.
- Level slightly increases max HP and MP.
- Final core remains 132 combinations but is displayed as three depths: 44 + 44 + 44.
- Added low-resolution pixel-style field map background and battle background.
- Skill buttons now fit without horizontal scrolling.
- Added visible level-up notification on first clear.
- Keyboard hint highlight made more subtle.
- Removed aura-key highlight from the keyboard; aura guidance is now shown near the keyboard instead.
- Moved the aura name display from near the keyboard to directly below the enemy.
- Simplified the aura label so the player's eye can stay on the enemy area.
- Added a new skill: 根音視 (highlights the root aura note on the keyboard for a limited time).
- Enlarged the aura name below the enemy and simplified it to text only.
- Single-aura dungeon battles now reuse the older cave-like stage background.
- Multi-aura dungeons continue to use stage-specific backgrounds.
- Improved the field map background with a more RPG-like terrain feel.
- Vector route lines are no longer drawn because the field-map background itself shows the routes.
- Map label dark mask boxes were removed; labels now use only a subtle shadow.
- Skill buttons are back to a single row.
- Keyboard highlights were made slightly stronger.
- 6-aura areas were renamed/reframed as 六重険路: steep routes toward the 12-aura final core.
- Training battles no longer show the long top story text.
- Training explanation is shown before starting the training.
- Battle flavor text uses a smaller caption and up to three lines.
- Long final/multi-stage flavor text was shortened to avoid clipping.
- Skill effect gauges are displayed above the skill buttons with a stable height.
- Returning to the field map now scrolls back near the previously selected node.
- Locked map nodes can be tapped to show reward information, but cannot be challenged yet.
- Clear result now displays immersive resonance wording instead of S/A/B rank:
- 体得: average response <= 0.50 sec
- 澄響: average response <= 0.75 sec
- 残響濃し: average response <= 1.00 sec
- 残響あり: average response <= 1.50 sec
- 体得基準を平均応答1.00秒以内に変更。
- 敵下のオーラ音名をさらに大きくし、該当オーラ色の半透明背景を追加。
- マップ復帰位置をUserDefaultsに保存し、選択地点を中央固定ではなく左上寄りに戻すよう調整。
- 20個の宝玉・技案を
GEM_SKILL_DESIGN.mdとして追加。 - 未開放ダンジョンの報酬表示を、汎用名から各宝玉名へ変更。
- Added 20 gem skill definitions.
- First clear of a multi-aura dungeon obtains its gem.
- Re-clearing an already cleared multi-aura dungeon strengthens that gem up to Lv5.
- Existing battle skills now scale with related gem levels where already implemented.
- Clear resonance display avoids S/A/B rank wording.
- Re-clearing an already cleared dungeon now strengthens the gem more when average response time is shorter:
- <= 1.00 sec: +3 levels
- <= 1.25 sec: +2 levels
- otherwise: +1 level
- Gem skills now include color definitions.
- Current skill buttons are color-tinted for easier selection.
Gem strengthening now uses target level thresholds:
- First clear: Lv1
- Average <= 4.00 sec: Lv2
- Average <= 2.00 sec: Lv3
- Average <= 1.00 sec: Lv4
- After Lv4, another <= 1.00 sec clear reaches Lv5
- Removed a stray leftover
else if average <= 1.25block inGameModel.swift. - This fixes the parser error that caused many follow-on
Cannot find ... in scopeerrors.
- Initial visible battle skill is only 減速.
- Other battle skills appear only after obtaining the matching gem.
- Empty skill slots are shown to keep the skill area stable.
- The field map now preserves the actual scroll offset while moving into and out of battles, instead of jumping back to the top-left.
- Added a 武器カスタム screen from the map header.
- Equipped skill gems determine which battle skills appear.
- The initial equipped skill is only 減速.
- Matching gems unlock skills; up to 6 can be equipped.
- Reset progress now shows a confirmation dialog before clearing data.
- Added 十二分聴 as an initial skill alongside 減速.
- 十二分聴 costs MP 255.
- In training, MP is not consumed, so it is mainly intended for practice confirmation.
- It narrows candidates down to 1 note.
- It is treated as a father-given initial gem/skill and cannot be removed from the weapon.
- Initial skills 減速 and 十二分聴 are now removable from the weapon customization screen.
- They remain always unlocked, so they can be re-equipped later.
- Reset returns the weapon to the initial state with both equipped.
- Renamed the father-given gem to 古律の宝玉.
- Built-in gems now show 授与済 instead of 未入手.
- Added 三分聴, obtained from 二重洞 F/C, narrowing candidates to 4.
- Weapon customization cards now show where each gem is obtained.
- Removed gem-obtain wording from locked map node descriptions.
- Added a resonance gauge under MP showing average tuning time and gem level thresholds.
- Clear overlay now shows average tuning seconds only, not gem/potential targets.
- Resonance gauge is moved under the HP/MP top area with fixed height.
- Long-press the battle top status area to reveal debug clear buttons.
- Weapon customization now shows cost, function, potential-stage effects, and source location.
- Added gems for all 12 single-aura outer dungeons.
- User-facing wording prefers 潜在 over 宝玉Lv.
- Weapon customization is split into 技 and 特性.
- Skill cards are compact, with one-line summaries.
- Tapping a card opens a detail panel with quantitative potential effects.
- Skills and traits each have up to 6 equipped slots.
- Added 気配断ち: pauses the enemy beat for a few seconds, but the player cannot attack during it.
- Reflected the user-revised skill and trait table.
- Initial active skills are now 十二分聴 and 根音視.
- 緩拍 is now obtained from D近郊.
- Added HP small/medium/large recovery skills.
- Updated 二分聴 / 三分聴 / 四分聴 / 六分聴 acquisition points and costs.
- 気配断ち now hides the enemy and cancels when the player presses a key.
- Added multiple passive traits: auto HP/MP recovery, tuning recovery, max HP/MP, risk traits, and beat-slow traits.
- Restored missing GameModel methods used by ContentView:
- skillColor(_:)
- activateEquippedSkill(_:)
- Rewrote some Button and ForEach code to avoid SwiftUI generic inference errors.
- Replaced the HP10% beat-slow trait with 延響律, which extends skill effect duration:
- 潜在1:+2秒
- 潜在2:+4秒
- 潜在3:+8秒
- 潜在4:+16秒
- 潜在5:+32秒
- ContentView.swift の
game.gemRewardText(for: dungeon)呼び出しに対応するGameModel.gemRewardText(for:)を追加 - 単独オーラ戦の背景をオーラごとの専用背景へ切り替え
- C/G/D/A/E/B/G♭/D♭/A♭/E♭/B♭/F それぞれ専用
- 二重・四重・六重・最終戦は既存の個別背景を継続使用
- フィールドマップを同心円ごとの RPG 風レイヤー構成へ変更
- 外周拠点帯
- 二重洞帯
- 四重洞帯
- 六重険路
- 無音の核
- 背景側に街・洞窟・遺跡・険路・核の意匠を描き込み、ノード位置と地形の対応を強化
- 単独オーラ 12 地点それぞれに固有の地名とフレーバーテキストを追加
- 単独戦・中層戦・最終戦の戦闘説明文を背景イメージに合わせて再調整
- Added a prologue screen between title and map.
- The map is now framed as 音環島, an island whose center governs the concept of sound.
- The twelve outer bases maintain the island's tuning order.
- C is now Cの灯火港, the harbor town where the father trains the protagonist.
- The father initially uses 十二分聴 to guide the protagonist, then is sealed by his old friend.
- The old friend becomes/serves the 無調律の力 because of resentment toward people who can play freely and accurately.
- The protagonist's motive is to cross the island, reach 無音の核, stop the disappearance of music, and prove that anyone can reach free musical expression.
- Fixed ambiguous
cos/sincalls in the RPG-style map background. - Added an unlabeled initializer to
MapZoneText, fixingMissing argument label 'text:' in call.
- Reverted the field map background toward the previous clearer version.
- Enlarged enemy display size.
- First-time gem acquisition now uses clear average time to set the initial potential.
- First-time gem acquisition now displays only the obtained gem and potential, without 共鳴 wording.
- Weapon customization header now changes by tab: skill slots on 技, trait slots and totals on 特性.
- Multi-aura and final nodes now open an explanation panel before battle.
- Area/detail panels now show reward and potential thresholds.
- Final core has three depth phases with story intermissions and a final scene where the former friend smiles and throws himself into the silent abyss.
- Area clicks now transition to a full-screen detail view rather than showing an inline map panel.
- Multi-aura and final-core areas now use the same full-screen pre-battle detail flow.
- Battle flavor text is no longer shown during combat; it is shown on the pre-battle detail screen.
- Aura badge text under enemies is reduced to about 70% size.
- Reward text now includes the gem effect.
- Removed the unnecessary “初回でも平均に応じて…” wording.
- Fixed the final-core ending text persisting after clearing other areas.
- Fixed
clearedFinalCoreprivate access fromContentView.swift. - Added
GameModel.isFinalCoreClearedForViewas a read-only view-facing property. - Added
PRODUCTION_IMPLEMENTATION_PLAN.md.
- Cleans old equipped skill/trait settings via a data-version migration.
- Locked areas now open the full-screen detail view and show reward/effect information.
- Final core no longer tells the player there are three phases beforehand.
- Final core now pauses after each internal phase and shows dialogue before resuming.
- Final intermission dialogue no longer remains after clearing unrelated areas.
- Fixed trait helper functions returning level-1 values even when a trait is not equipped.
- Reset now removes saved equipped trait/skill/gem/combo-performance keys before writing the clean default state.
- Clear-only results, gem rewards, level-up text, and final-core scenes are shown only on victory.
- Defeat now clears reward/final-scene/intermission text immediately.
- Rebuilt from the last stable
trait_reset_lossfixline instead of the dialogue branch. - Moved all long map-detail text generation out of
MapView.bodyand intoGameModel. - Replaced inline
MapInfo(...)construction inForEachclosures with simple calls:game.auraMapInfo(aura)game.dungeonMapInfo(dungeon)game.finalCoreMapInfo()
- Added area dialogue, multi-area solo rationale, and final-core pre-battle dialogue.
- Added upper-to-lower connected route unlocking.
- Moved 気配断ち to F近郊 and HP小回復 to G近郊.
- Changed user-facing wording to 宝玉レベル.
- Hides unowned items in weapon customization and fixes the equip button readability.
- Fixed broken newline string literals in
GameModel.rewardThresholdTextandlevelDetailLines. - The generated Swift source now uses escaped
\ninside string literals instead of accidental physical line breaks.
- Battle start now fills HP/MP to the current max including equipped traits.
- Max HP/MP no longer increases just because the player enters deeper areas.
- Pre-battle reward text is now shown in a larger dedicated reward detail box near the battle button.
- Reward details are grouped in the same style as the weapon customization detail panel.
- Multi-aura areas now have more individual names, lore, and dialogue.
- Four-aura areas are no longer all treated as tower-like areas.
- Applied the far-future / ancient-civilization setting.
- The island is framed as 音環島 / 屋久の環, with an ancient sound-core at the center.
- Replaced 能力者 wording with 真律者.
- Rewrote father dialogue to be warmer and less commanding.
- Removed the visible outer-area training button.
- Added father advice during outer-area battles, e.g. direction from the current root by semitones.
- Fixed broken multiline string literals in dialogue and reward-detail text.
- Removed the real-world technical word
半音from user-facing father advice. - Advice now uses keyboard/in-world wording such as
右へ○つ先の鍵/左へ○つ先の鍵.
- Fixed
Extra argument 'rewardDetail' in callby addingrewardDetailtoMapInfo. - Kept reward details displayed in the pre-battle detail screen.
- Rechecked newline string literals in reward detail text.
- Fixed
Extra argument 'rewardDetail' in call. - Patched MapInfo definition to include
rewardDetail: String = "". - Checked both ContentView.swift and GameModel.swift because the MapInfo struct location differed between branches.