个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Community rhythm game for PS Vita — source code and browser song editor
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗A community rhythm game for the PS Vita, written in C11 + SDL2. Notes fly in towards two arcs of button targets; hit the right button on the beat, keep your combo, chase the S rank.
The goal is an osu!-style community: the game ships with a couple of original songs, and players create, share and download new ones.
Status: 1.1.0. The game is playable, with 3 official songs, and the in-game song library lets you browse and install community songs from the console.
Community: Discord · Song library · Online editor
You need a PS Vita running custom firmware (follow https://vita.hacks.guide) with VitaShell.
DancingEveryNight-<version>.vpk from the Releases page.| Vita | Action |
|---|---|
| Triangle, Circle, Cross / Up, Left, Down | Hit the notes of the matching target |
| L / R, or a light touch of either stick | Scratch notes (any direction) |
| Start | Pause (L/R in pause: audio calibration ±10 ms) |
| Select + Start | Quit |
Saves are stored in ux0:data/dancingeverynight/.
Updates: when the Vita is online, the game reads a small file (latest.json, on the project website) at start-up and, if a newer version exists, announces it in the main menu. Nothing is downloaded or installed, and nothing about you is sent beyond the request itself. Switch it off in OPTIONS > UPDATE CHECK.
.zip file or extracted folder into ux0:data/dancingeverynight/import/ (VitaShell USB or FTP mode).
The folder is created the first time you launch the game.Installing a song with the same ID again replaces it and keeps your best scores. To delete a song, select it in the
song list and press Triangle; you can also delete its folder in ux0:data/dancingeverynight/songs/.
A ZIP or folder that cannot be installed is moved to import/failed/, with a .txt file explaining why.
Bugs and ideas: open an issue on this repository (there are forms for bugs, ideas and reporting a song) and mention
the version shown at the bottom right of the title screen. See CONTRIBUTING for the other ways to help. For a crash, attach the .psp2dmp file found in ux0:data/.
The Releases page also has PC versions, with nothing else to install:
DancingEveryNight-<version>-windows.zip and run DancingEveryNight.exe. The build is not
signed: if SmartScreen warns, choose More info → Run anyway.xattr -cr "/Applications/Dancing Every Night.app"DancingEveryNight-<version>-linux.tar.gz and run DancingEveryNight.Keyboard: arrows / WASD, Space or J (Cross), K (Circle), U (Square), I (Triangle), Q / E (scratch), Enter (Start),
Backspace (Select); a game controller works too. Songs install the same way, through an import/ folder: in the
save/ folder next to the game on Windows and Linux, in ~/Library/Application Support/Dancing Every Night/save/
on macOS.
Everything the hostess shows or says is a plain file you can swap. Put your own copy in a custom/ folder inside
save/ (on the Vita: ux0:data/dancingeverynight/custom/), with the same path it has under assets/; the game reads
custom/ first, so nothing in the game itself changes and removing your file brings the original back.
File in custom/ | What it is |
|---|---|
ui/hostess/rank_s.png, rank_a.png, rank_b.png, rank_cd.png | The hostess on the results screen for each rank (C and D share one) |
ui/hostess/loading.png, pause.png | The hostess on the loading and pause screens |
audio/sfx/voice_*.wav | Her voice: voice_title, voice_rank_s, voice_rank_a, voice_rank_b, voice_rank_cd (heard at the title and on the results) |
Pictures: PNG with a transparent background, at most 2048 px on a side; they are drawn anchored to the bottom of the
screen, so crop them there. Sounds: WAV, 16-bit, mono, 44100 Hz (ffmpeg -i in.wav -ar 44100 -ac 1 -sample_fmt s16 out.wav).
Every other interface sound in audio/sfx/ can be replaced the same way.
Online editor: https://dancing-every-night.pages.dev/editor/. Nothing to install: create a song from a music file, detect the tempo, place
the notes (or start from an automatic draft) and export the .zip for the console. Start with the
creator guide.
A song is one folder named after its ID, holding one .chart file per difficulty, the song audio
(.ogg) and an optional background image (.jpg) or video (.h264, H.264 Baseline; older songs may use .mpg, MPEG-1):
my_song/
easy.chart normal.chart hard.chart expert.chart
audio.ogg background.jpg video.h264
Each .chart starts with a header, then one note per line (times in beats):
FORMAT 1
ID my_song # letters, digits, _ and -; the same in every difficulty
VERSION 1 # raise it when you publish an update
MAPPER your_name # the author of the difficulties, shown to players
TITLE My Song
ARTIST Some Artist
DIFFICULTY NORMAL
ORDER 2 # optional: position among the song's difficulties (1 = first); default EASY, NORMAL, HARD, EXPERT
BPM 120
OFFSET_MS 500
AUDIO audio.ogg # file names inside the song folder only
BACKGROUND background.jpg
END 276 # optional: when the song ends (results), in beats; default = just after the last note
4 TRIANGLE TAP
5 CIRCLE HOLD 2
6 SCRATCH CW
To share a song, zip its folder (or its files) and send the .zip. Check it first:
make check MAP=my_song.zip (or ./vitagame --check my_song.zip) applies the game's own rules and lists
errors (the song will not work) and warnings (worth fixing).
Today's tools need the developer setup below; a no-install web editor is planned.
python3 -m venv tools/.venv
tools/.venv/bin/pip install -r tools/requirements.txt
brew install ffmpeg # or your package manager
make editor — graphical chart editor in the browser (http://localhost:8765), with audio/video conversion.make editor-site — the online version of the editor (http://localhost:8766): no server, songs are kept in the
browser. Audio in another format (mp3, wav, m4a…) is converted to .ogg and videos to H.264 right in the browser
(ffmpeg.wasm, about 31 MB downloaded on first use). BPM detection and the automatic draft run the same
tools/mapper.py in the browser (Pyodide, about 30 MB downloaded on first use). The editor speaks English and
French, and comes with a creator guide (tools/editor/guide.html). Open a song .zip, edit it (including MAPPER, LICENSE, VERSION), export the .zip for the Vita.make map SONG=/path/track.ogg NAME=my_song — automatic first draft from an audio file.make run CHART=assets/songs/my_song/normal.chart — play it on the computer.For automatic song creation, read the generation guide: musical gestures, difficulty limits, tempo checks and deliberate travel-time choices. Generated difficulties need playtesting.
| Command | What it does |
|---|---|
make run | Build and run on the computer (macOS, Linux, WSL) |
make desktop | Desktop build only |
make vita | Development VPK + eboot.bin (all local assets) in build-vita/ |
make release | Release VPK with committed assets only, in dist/ |
make pc | PC package for this system (SDL2 built in, committed assets only), in dist/ |
make deploy | Send the build to a Vita running vitacompanion (VITA_IP in .env) |
make clean | Remove build folders |
Requirements: CMake, a C compiler and SDL2 (brew install cmake sdl2 or
sudo apt install build-essential cmake libsdl2-dev), plus VitaSDK for Vita
builds (or Docker: scripts/build-vita.sh falls back to the vitasdk/vitasdk image).
The game name, version and TITLEID are defined once, at the top of CMakeLists.txt.
CLAUDE.md documents the architecture and the PS Vita constraints.
GitHub Actions (.github/workflows/builds.yml, run by hand or by pushing a v* tag) builds the Windows, macOS,
Linux and Vita packages; a tag also prepares a draft GitHub Release with the four files.
Songs you add locally for testing (assets/songs/) are ignored by git and never
included in make release.
Official songs and their audio. The three official songs are in assets/songs/ (charts, images, credits), but their
audio files are not in this repository: the labels' terms allow distributing them inside the game, not on their own.
They live in a private repository read by the CI. Without them the game runs normally and those songs are silent
(a metronome plays), and make check reports the missing audio.ogg. Release builds (make release, make pc)
pick the files up from assets/songs/<ID>/audio.ogg when you have them (scripts/official-audio.sh).
I want to be clear about where AI was used in this project, and what I think about it.
What was made with AI
| Area | What | How |
|---|---|---|
| Code | The game (C11 + SDL2), the Python tools (automatic draft, editor, library scripts), the online editor, the CI, the tests, the documentation and its translations | Written with Claude Code (Anthropic). I set the design and the goals, play-test on a real Vita, review and decide; the model writes most of the code. |
| Visual identity | The logo, the hostess (mascot) and the title screen layers, plus the images derived from them: boot splash, LiveArea and icon | Generated with AI image tools (ChatGPT), then selected and edited by hand (the stained-glass look is applied by a script). |
| Hostess pictures | The six poses of the hostess (results, loading, pause) | Generated with AI image tools (ChatGPT), then selected and edited by hand. |
| Hostess voice | The title and results lines | Synthesized with Qwen3-TTS (Apache-2.0): an invented voice, no real person cloned. I chose the voice and the takes by ear and trimmed them. |
| Charts | The difficulties of the official songs | Start from an automatic draft (tools/mapper.py: a signal-analysis algorithm I wrote with Claude, not a generative model), then played, corrected and tuned by me. |
What was not made with AI: the music (the three official songs are by their artists and used under their label's terms; the menu music is by Juhani Junkala), the fonts, the button icons, and the interface sounds (synthesized by a script; only the hostess's voice is generative audio). Community songs carry their own rights, declared by their authors.
What I think
LICENSE-ASSETS.md.assets/CREDITS.md.