Coder Social home page Coder Social logo

zardoru / raindrop Goto Github PK

View Code? Open in Web Editor NEW
124.0 26.0 16.0 109.43 MB

yet another beatgame.

License: GNU General Public License v3.0

Python 0.01% C++ 57.52% C 38.38% Objective-C 4.07% CMake 0.02%
rhythm-game bmson bms c-plus-plus osu mania o2jam linux windows

raindrop's Introduction

raindrop

raindrop is a music game project aimed to be a multi-mode rhythm game for home desktops. It is a modern VSRG engine that supports warps, scroll speeds, and much more.

Features

  • Negative-able BPM/stop support
  • #RANDOM BMS
  • Hidden/Fake notes
  • OJN cover support
  • Multiple timing systems
    • O2Jam (Near perfect simulation, with scoring)
    • Stepmania (excluding chord cohesion)
    • Raindrop Standard (with the EXP3 scoring system by Joe Zeng)
    • osu!mania (with the osu!mania scoring system)
    • EX-score scoring system
  • Multiple Gauges
    • O2Jam Gauge
    • Death/Groove/Survival/ExHard/Easy
    • Stepmania gauge
  • Hidden scrolling, user-adjustable
    • Flashlight, Hidden, Sudden
  • Speed classes
    • CMod (As Constant)
    • Common (Or Mode, based on time rather than beats! The default!)
    • Max Speed
    • Min Speed
    • Green Number support
  • Upscroll support
  • Autoplay
  • Random (By Lanes)
  • Failure deactivation
  • Lua Skinning with HTML-based librocket UI widgets
  • TTF based SDF font support
  • Rates, that also respect your desired target speed
  • Wheel sorting
  • Result Histogram, Grades
  • osu!mania storyboard support
  • Video playback via FFMPEG
  • Previewer commands to connect to bmsone or uBMSC/iBMSC
  • MP3/Ogg/WAV support
  • JPEG/PNG/BMP/TGA support, with an sRGB aware color space
  • Modern formats: BMSON/SM5 support
  • Scroll and/or Speed support for osu!, BMS and Stepmania charts
  • #PREVIEW extensions for BMS
  • #MUSIC extension for BMS
  • Automatic Chart Author extraction from #ARTIST tag

Formats supported

  • bms/bme/bml/pms (+ raindrop-specific extensions)
  • bmson
  • o2jam ojn/ojm
  • osu!mania
  • stepmania 3.9/5.0 (.sm/.ssc, with warps support, though no keysounds or delays.)

For several of these, the major mechanics varying between them are coded into raindrop, and are activated depending on the chart format. raindrop is built using OpenGL/PortAudio and most if not all are freely licensed libraries, while raindrop itself is licensed under the GPLv3.

Build status

Dependencies

The dependencies of the project right now are:

  • boost and boost::gil (develop)
  • glew
  • glfw 3.0
  • portaudio v19
  • libogg and libvorbis
  • libsndfile
  • soxr
  • portaudio
  • librocket
  • sqlite3
  • libjpeg(turbo) and libpng
  • lua 5.2.1
  • zlib
  • libmpg123 (optional, but recommended)
  • glm (header only)
  • LuaBridge (header only)
  • stb_TrueType (header only)
  • randint (header only)

With the exception of boost, the required includes for these dependencies are within the 'lib\include' folder. Header only libraries require nothing more to be used.

Building on Windows

Though you can compile them yourself, a full collection of pre-compiled libs can is available here If you're using Visual Studio, simply extracting these to the 'lib' directory will allow automatic linking. The solution will attempt to grab boost from NuGet first time, though it can simple be added manually if desired.

Building on Linux

To install the dependencies on Debian, run:

$ sudo apt install \
	clang \
	libavcodec-dev \
	libavformat-dev \
	libboost-all-dev \
	libglew-dev \
	libglfw3-dev \
	libglu1-mesa-dev \
	libjpeg62-turbo-dev \
	liblua5.2-dev \
	libmpg123-dev \
	libogg-dev \
	libpng-dev \
	libsndfile1-dev \
	libsoxr-dev \
	libsqlite3-dev \
	libswscale-dev \
	libvorbis-dev \
	libxi-dev \
	portaudio19-dev \
	zlib1g-dev

No package exists for libRocket, so you must compile it yourself. It requires CMake and FreeType.

$ sudo apt install cmake libfreetype6-dev
$ git clone https://github.com/libRocket/libRocket.git
$ cd libRocket/Build
$ mkdir build
$ cd build
$ cmake -DBUILD_LUA_BINDINGS=ON ..
$ make
$ sudo make install

To compile raindrop, run:

$ scons

raindrop's People

Contributors

alexanderkunz avatar geenz avatar jerwuqu avatar joezeng avatar nuclearfej avatar papatience avatar tomoalien avatar whilealivef avatar zardoru avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

raindrop's Issues

bruh

"VCOMP140.dll is missing and MSVCR140.dll is missing" what

Individual volume control

Being able to individually controller three volume sliders:

  • Master Volume - Affects the entire game
  • Key Volume - Affects sound effects triggered by player action (clicks, sfx, keysounds)
  • BGM Volume Affects all background tracks (song select bgm, BMS bgm layers)

Linux Mint: Black screen (future and master branch)

After having successfully compiled the game, when I start it, the main window shows up but it does absolutely nothing. Black screen. Don´t really know what to do with this.
screenshot_2018-09-09_18-42-43

Linux Mint 18.3 64-bit.
All of the dependencies are satisfied.

Samples do not loop

Even when issued to "please loop".
Streams do.
Look into AudioSample::Update for this.

Crash with kr locale

Getting a range_error when using korean locale and non-ascii paths.
Investigate...

Add Mode mod

Besides MAX/CONSTANT/FIRST/F.A.M I want to have an extra hspeed mod: Mode.
Apply the desired velocity such that the most common bpm has it.

HCN Support

HELL CHARGE NOTE Support as per charatbeatHDX VIOLET v1.10 implementation.
http://hitkey.nekokan.dyndns.info/diary1602.php#D160217

HCNs are are a new type of Charge Notes (Long Notes) added in beatmania IIDX 23 copula.
The game will gradually deplete your gauge every 8th for as long as the duration of the HCN if you miss it.
Unlike regular CNs, it can be reactivated if you miss it, making your health regain again.

In BMS file, #OPTION can be used.
charatbeatHDX VIOLET v1.10 uses this format:

#OPTION charatbeatHDX:LONGMODE n
The variable n can be either 0 or 1

OPTION charatbeatHDX:LONGMODE 0

for regular charge notes

or

OPTION charatbeatHDX:LONGMODE 1 (HCN mode)

for HELL CHARGE NOTES.

Song list sorting

The song list is a mess.
I can't even tell what order the songs appear in, but it's not alphabetical and not alphabetically by folder name.

Basically we need options for sorting:

  • Sort by Title
  • Sort by Level
  • Sort by Artist
  • Sort by Difficulty
  • Sort by Genre (hi pop'n!!)

there are probably other applicable sorting methods but these are the most important ones that come to mind.

Issue with RANDOM

Not sure if I'm getting incredibly lucky or if this is a bug, but it seems like key 1 is never randomized when playing 7keys BMS files. Scratch lane is obviously supposed to stay untouched but key 1 should be randomized too.

Internet Ranking

Don't take this too seriously just yet.

To keep it short: the key to success with any sim is an internet ranking.

The long version:
Internet ranking being the key to success has been proven over and over in the BMS community:
nazobmplay was the first game to have an IR, it was really popular and people played very competitively and had already reached what were then overjoy charts.
It stood pretty much uncontested (even with other, nicer-looking players being created) until LRO (LunaticRaveOnline) with its higher quality graphics and its own IR.
People migrated from nazoIR to LRIR and later on to LR2 with LR2IR.

You can also see that Bemuse is getting momentum, and one major reason people are interested is because of score tracking and internet ranking, but due to the lack of many features and options LR2 has, Bemuse won't outdo it just yet.

The biggest hurdle in developing an internet ranking would be hosting a server which will cost money (and not just small amounts either!).

anyway as for the features of the IR:

  • player profiles - simple overview over various stats and maybe a small self-input description.
  • rivals
  • score tables
  • ghost battles
    • these do not need to be 1-to-1 perfect replays, but a reduced replay like LR2 currently has (where all the notes are autoplayed, but still shows accurate judge)
  • peer-to-peer multiplayer (1v1)

Battle Mode

The ability to have 2-player local battles.

Hidden/Sudden/Fadeout GUI elements

They're in the game but lack GUI elements in the song select.
Also, they should be adjustable prior to song start just like Hi-Speed.

Make failed in Ubuntu

Hi, I can't make scons to succeed even when I installed all the dependencies and all the steps followed.
Here is what I got from my console.

***@ubuntu:~/Software/raindrop-master$ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
clang++ -o src/Application.o -c -std=c++14 -O2 -DNDEBUG -fpermissive -DLINUX -DMP3_ENABLED -Isrc/ext -Isrc -Ilib/include/LuaBridge -Ilib/include/lua -Ilib/include/stb -Ilib/include/stdex -Ilib/include src/Application.cpp
In file included from src/Application.cpp:1:
In file included from src/pch.h:119:
In file included from lib/include/boost/gil/extension/io/png_all.hpp:23:
In file included from lib/include/boost/gil/extension/io/png_write.hpp:24:
In file included from lib/include/boost/gil/extension/io/formats/png/write.hpp:30:
lib/include/boost/gil/extension/io/formats/png/writer_backend.hpp:202:27: error: const_cast from 'value_type *' (aka 'unsigned char *') to 'png_charp' (aka 'char *') is not allowed
                        , const_cast< png_charp >( & (_info._profile.front()) )
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from src/Application.cpp:1:
src/pch.h:294:20: error: use of undeclared identifier 'a'
                return Fraction{ a / t, b / t };
                                 ^
src/pch.h:294:27: error: use of undeclared identifier 'b'
                return Fraction{ a / t, b / t };

What can I do to fix this?

LN Key-up sound

The implementation has been discussed thoroughly and I think it's ready to be implemented in players as a preliminary test.

BmsONE already makes it possible to manually create key-up sounds by typing in additional json data per note object.

The implementation should follow this specification: bemusic/bmson-spec#9

Mac OS X support

I previously built Linux support into Raindrop, but now that I have a Macbook, I need to implement support for the Mac OS X APIs as well, so that Mac users like me aren't left out of the loop.

Where's the program file?

My main goal of using this is to convert .sm files to .osu files.
But apparently i need the file "convertOM.bat", which i can't find anywhere.

Also i can't find the .exe to open raindrop?

[http://puu.sh/pq964/2021ee7928.png]

New Play Options

New RANDOM options:

  • Mirror
  • S-RAN (randomizes each individual note)

New gauges (similar to LR2, IIDX and popn):

  • Easy gauge
  • Hard Gauge
  • EX-Hard gauge
  • Hazard (fullcombo) gauge
    These gauge types would apply to clear lamps (see: #18)

Misc. options:

  • DP flip (make the sides for DP charts flip)
  • Legacy Note (turns all LNs into regular notes, but counts as assist/easy clear)
  • Auto-scratch (personally i dont like this but some might want to use it lol)

(raindrop 0.400) Terminates while transition to select music

log.txt:
.
.
.
AUDIO: Requesting latency of 3.000000 ms
AUDIO: Attempting to use shared mode WASAPI
AUDIO: Device Selected 9 (Rate: 48000.000000)
AUDIO: Latency after opening stream = 22.000000ms
[librocket:4] Loading Lua interpreter
[librocket:4] Loaded font face Togoshi Gothic Regular (from font.ttf).
LuaManager: Running script GameData\Skins\default\mainmenu.lua.
[librocket:3] Unable to open file ScreenMainMenu.rml.
LuaManager: Running script GameData\Skins\default\screenselectmusic.lua.
[librocket:3] Invalid property declaration at :0

"Arcade" Mode + Total Reskin Support

Personal opinion: I think we should stretch for a proper arcade mode for the game's complete state.

What I mean by this I think we should have a proper game mode similar to DJMAX and IIDX console games, where you play standard mode to get unlocks and eventually reach extra stage etc. Basically make the game look more "commercial" and professional, and also give players a great incentive to keep playing!

Other BMS games that have something similar are "plugout4 ARCADE EDITION" and "endless music for Lunatic Rave".

Not only should one be included with raindrop to begin with, but it should also be possible to completely reconfigure every aspect of this. Everything from unlocks, to missions, to skin and soundset.

Here is a run-down of things we'll need (some may or may not already be supported):

  • Standard Mode
    • Your primary mode where you play a set of songs. Usually 3 or 4 + extra stage. This mode is how you unlock new songs. Song list is specified what stage you're on. E.g. Stage 1 will have a different selection of songs than Stage 2 and 3. Extra Stage is activated if the player meets a specific criteria.
  • Course Mode (aka Expert Mode)
    • Premade courses. Not much to say about this. Courses have their own unique survival gauge which is also used to Dan courses. Courses have their own scoreboard with a total result.
  • Grade Mode (Dan Courses)
    • A set of courses for keeping track of your skill level. Technically the same as Course Mode.
  • Free Mode
    • Play any of the songs you have unlocked freely. A mode like this might be difficult for raindrop since we also should allow people to play whatever they want which is why I think we should make custom song folders appear in here, or add a second item on the title screen to allow a full free mode (Lite Mode?) without any of the arcade gameplay.
  • Mission Mode
    • Clear songs or courses with very specific criteria. These are usually unlocked as you clear the missions.
  • Internet Ranking
    • Not really required, but if we want to make the game more attractive we ought to implement it. It will also let us implement the next item on the list.
  • Custom IR support.
    • This idea is taken from endless music. endless music has it's own Internet Ranking powered by Lunatic Rave instead of using the regular Internet Ranking for Lunatic Rave. Free Mode or Lite Mode should disregard this. Currently no ideas for implementation other than IR URL and API key, or something similar.
  • Mode Select screen
    • For obvious reasons. Can this be programmed in via lua?
  • Unlocks
  • Extra Stage

There might be some other interesting features that slipped my mind, or that are too broad.

BMS Table (GLAssist) Support

Support for download GLAssist tables such as the Insane scale or the Normal2 scale.
These should show up as separate folders in-game.

Lack of Settings Menu

This game severely needs an options menu.
What I would want in it would be:

  • Generic options that you can set in config.ini
  • Separate key configuration screen

Skin Config and Preview Screen

A screen where you are able to adjust the individual settings for a skin per screen, e.g. Skin-A for song select and decide but Skin-B for play and result

Skin previews should not be full rendered previews of the screen, but rather makeshift previews (similar to BBR 3rd)

Make appveyor push out builds.

For the convenience of everyone to not require to manually build and package when testing things out in a place other than a debugger, it'd be convenient to make appveyor gather the build results and push them out for everyone to grab.

LR2skin support

This is a bit of a stretch (and a somewhat dodgy one too)
Having the ability to import lr2skins would make it very easy for people like me to migrate and use a skin i am comfortable with.

Though I am well aware of the hurdle of this, which is that the only complete documentation of the lr2skin format is in Japanese, with no full translations at this current time. Because of this, the implementation may have to wait.

whilst we're at it why don't we also just add stepmania skin support (i know why osumania wont be supported though)

Separating Modes and adding a stylistic swap.

One of the main things raindrop suffers from is it's goal to please all.
Whilst I really appreciate the effort it's really hindering the game because players of each game will have their own "perfect" standard.

As a solution to this, I would like to propose that we try to separate each mode as much as possible:

  • BMS mode (includes bmson)
    • perhaps add another mode for 9keys (pop mode)?
  • Stepmania mode
  • O2Jam mode
  • osu!mania mode
  • potential raindrop mode (for forced raindrop mechanics on all charts)

With this hypothetical solution you would be able to easily shuffle through modes by using one of the function keys (e.g. F3) during song select.
Hitting this key will trigger a stylistic effect that will tell the user what mode they have entered.

Here is a lousy sketch of my interpretation of how the stylistic effect should look:
Sketch

Imagine those triangles be some sort of lens flare effect, and that the black bar in the middle will collapse on itself vertically.

By separating the modes this way it will allow people migrating from other games to feel familiar yet be able to easily swap between what they want to play without much hassle.
It also allows much more free room for working on support and mechanics for each format.

I realise this is a rather ambitious request but I truly believe it would be for the better, and it is possible to leave this as an on-going project and implementing it little at a time!

Fail effect is too sudden when playing BMS/bmson

When playing BMS (and bmson) where fail is determined by gauge at the END of the song, it would be much preferred if the result screen told you if you failed or not instead of having that sudden "shutter" effect on the last note.

crash

LuaManager: Running script GameData\Skins\default\skin.lua.
Stack trace for thread 3752:
Stack trace for thread 24108:
Stack trace for thread 19448:
Stack trace for thread 10856:
Stack trace for thread 10648:
Stack trace for thread 5672:
Stack trace for thread 25428:
Stack trace for thread 19272:
Stack trace for thread 21508:

KSH File Format Support

Adding support for the .ksh (SDVX) file format would be pretty cool.
We could implement just the buttons A-D and FX and add support for the knobs later.
Two-Dimensional would probably be enough and also be an alternative for the other players with a 3D view.

No config in git

In the meantime, we should push the default config.lua to git, but ideally in the future the game should auto-generate the default config.lua if it is missing/corrupt.

issues with using Rate

scrolling speed doesn't scale properly (tested Mode and Constant but I'm pretty sure other speed classes do this too), and the timing windows are affected by the rate

Mouse movement needs to be interpreted as TT movement

As DJ Dao and Arcin based IIDX controllers use this as the primary form of TT input for Bemanitools, this would be very beneficial. especially considering Arcins and Dao PCBs with keyboard emulation firmware tend to not work very well as they aren't designed with this in mind.

SM to OM converter doesn't work

After dragging the sm file into the o!m converter .bat file it shows it converted the file but no files actually show up in the release folder.

osu->bms converter is giving corrupt/incorrect output

this is not an issue with a specific chart, got it on at least two charts

basically it does get converted from osu to bms, but gets converted incorrectly. note placement in the bms doesn't match note placement of the original chart file. keysounds also come out wrong.

end of 1000 years
osu input 1: http://puu.sh/nuVMp/9625b88e8b.7z
bms output 1: http://puu.sh/nuVND/cc091473b1.7z

sector8-4
osu input 2: http://puu.sh/nuVRL/820700d5e0.7z
bms output 2: http://puu.sh/nuVV2/8e34c6e264.7z

bmson - offsync sounds

Sometimes a bmson will load with sounds awfully off-sync. I have found this to mostly happen on bmson files where a sound starts on y:0

This happens rather frequently, but not all the time, and usually fixes itself after retrying once.

Score Saving/Tracking

Ability to save scores.and keep track of them is a must-have for any music game.
I would like to propose these features for score-tracking:

  • Save results in a database, which can be seen upon selecting a song in song select.
  • Clear lamps - Great way of keeping track of how many songs you have cleared and under what conditions.
  • Compare scores at results screen: The result screen will compare your personal best to your current score.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.