Monthly Development Report: BeatShift
1. Executive Summary
June was the Cytus mini-game month for BeatShift — the headline effort of Phase 1: Technical POC & Foundation. Taking the Cytus concept from a flat mock-up to a fully realized 3D TV-framed play area with a real perspective skew, a reciprocating scan line, working BeatUp mechanics, and a Hold-notes proof of concept consumed the bulk of the month. In parallel, the team built out a production-grade Chart Editor and a Clone Hero chart converter, hardened the FMOD audio pipeline (migrating official songs to secure banks with multi-platform optimization), and stood up the first iOS/Android Fastlane + Jenkins CI. The month closed by removing the legacy Fever feature and shipping a hit-VFX overhaul.
Key Achievements:
- Cytus Mini-Game: A 3D TV-framed Cytus panel with adjustable tilt/perspective skew, a reciprocating scan line, a Normal↔Cytus state toggle, working BeatUp mechanics, and Hold notes — plus a full note/scan-line behavior pass.
- Chart Editor: Song/difficulty picker, per-song BPM auto-detect, dual-region editing, duo notes, a clickable minimap scrubber, multi-select + group drag, and a Clone Hero chart converter.
- FMOD Audio: Official songs migrated to secure FMOD banks (Desktop + Mobile), lazy-loaded SongLoader with preload to prevent song-start lag, and timeline-judder elimination.
- Core Gameplay: BeatUp tap-frenzy + DragNote reward flow, snake notes, duo notes, and a juice/feedback refactor.
- VFX & Cleanup: Hit-VFX overhaul with randomized particles and splash art, and the complete removal of the Fever feature.
- CI/CD: Fastlane configuration for iOS and Android plus Jenkinsfile code-signing/build hardening.
2. Cytus Mini-Game — 3D TV-Frame Panel & Notes
- 3D TV Frame: Confined Cytus to a centered play-area box on its own 3D background, built a CytusFrameTV prefab with a dedicated CytusBoxConfig, added adjustable tilt and a real 3D perspective skew (cytusPitch/cytusYaw), and made the frame refit live per-frame to the box.
- Scan Line & Notes: Implemented a reciprocating (back-and-forth) scan line, clamped the bar fraction at boundaries, limited notes to their own bar, made notes grow 0→full size up to their hit time, and added a note-size knob (noteScale).
- State Toggle: Introduced a Normal↔Cytus state toggle (replacing the old upbeat/BeatUp swap) and shortened the state-switch frenzy from 1 bar to 0.5 bar.
- Rendering Fixes: Resolved the box drifting in Z under yaw/pitch, the screen rendering behind the city, the frame blowing up to 354×, lost screen/bezel refs, and edge notes touching the bezel (frame side-padding).
3. BeatUp & Cytus Hold Notes (PoC)
- BeatUp Toggle: Forced the BeatUp toggle to auto-fire on every enter/exit, and made an uncaught BeatUp a Miss (penalty) that still toggles — no more forced frenzy.
- Hold Notes: Added Cytus Hold notes as a proof of concept — both heads pinned with a static body line, the release-head sprite hidden, the body consumed along the scan line while held and staying gone on release.
- Hold Polish: Staggered notes by sweep direction (sweepYOffset), nudged the hold off the tap row (holdYOffset), and thinned the hold-body line / shrank the head to match noteScale.
4. Chart Editor & Charting Pipeline
- Editor Buildout: Song/difficulty picker on launch, per-song BPM auto-detect with a Ctrl+B modal, beat numbers, a snap toolbar, snap-scaled grid lines, a metronome, multi-select + group drag, and left-aligned notes.
- Dual-Region & Duo: Dual-region editor with duo notes and a right-click minimap, plus held-key navigation and a clickable minimap scrubber.
- BeatUp Branching: BeatUp branching rules, a Finish note type for BeatUp completion, and single-MIDI Cytus alignment with capped note-box heights and a centered lane band.
- Clone Hero Converter: Support for importing Clone Hero charts with difficulty filtering and BeatUp note conversion.
5. FMOD Audio Foundation & Song System
- Secure Banks: Migrated official songs from StreamingAssets into secure FMOD banks with multi-platform (Desktop + Mobile) optimized audio, and disabled built-in Unity audio.
- SongLoader Optimization: Lazy loading + preload to prevent song-start lag and UI freeze, separated playback and memory states, eliminated timeline judder, and moved custom songs to a persistent-data path.
- Song Select UX: Looping preview songs (Main menu + Music Shop) with fade, per-song tabname images for the Name Music banner, difficulty-star config, and shared cover/banner art.
- Fixes: Resolved mobile audio playback, FMOD not stopping on pause/mute, note/song start after the ready countdown, and the create-name screen soft-lock on non-duplicate API errors.
6. Core Gameplay & Note Types
- BeatUp & DragNote: BeatUp tap-frenzy + a DragNote reward flow with a board freeze, plus snake notes and a juice/feedback refactor.
- Hit Judgement: Fixed the Perfect-hit error from a null VibrationController and adjusted the margin-of-perfect.
- Asset Pipeline: Loaded spine prefabs via Addressables (not AssetDatabase) and imported EpicToon.
7. VFX & Visual Polish
- Fever Removal: Removed the Fever feature entirely — deleted the Fever scripts, dropped the Fever buildup/FeverMultiplier (score is now purely Combo × BeatUp), and stripped Fever GameObjects/components from the Gameplay scene.
- Hit VFX Overhaul: Rebuilt the Hit.prefab effect, added a RandomParticlePlayer for randomized particle hits, a new BackSplash sprite set + reorganized materials, and brought in Retro TV 3D models for the Cytus presentation.
8. CI/CD & Platform
- Fastlane: Added Fastlane configuration for iOS and Android, refactored build/release stages to source environment variables, and streamlined TestFlight build-number retrieval.
- iOS Signing: Updated code-signing settings/xcargs, added an iOS entitlements configuration for CloudKit, and added an xcodebuild formatter option.
- Jenkins: Hardened the Jenkinsfile code-signing/verification stages and increased the Git clone timeout.
9. API / Backend (BeatShift API)
- Registration: Added both default songs on player registration so new accounts start with the expected song set.