Code Monkey home page Code Monkey logo

stepmania / stepmania Goto Github PK

View Code? Open in Web Editor NEW
1.8K 99.0 444.0 528.96 MB

Advanced rhythm game for Windows, Linux and OS X. Designed for both home and arcade use.

Home Page: https://www.stepmania.com/

Lua 5.64% CMake 0.92% GLSL 0.13% HTML 0.05% XSLT 0.97% CSS 0.01% Perl 0.16% JavaScript 0.07% Python 0.16% Shell 0.20% C 34.57% Objective-C 0.14% C++ 55.95% Ruby 0.02% Makefile 0.48% Assembly 0.01% Objective-C++ 0.36% PHP 0.01% C# 0.07% Java 0.10%
stepmania rhythm-game game lua

stepmania's Introduction

StepMania

StepMania is an advanced cross-platform rhythm game for home and arcade use.

Continuous integration Build Status Build status

Installation

From Packages

For those that do not wish to compile the game on their own and use a binary right away, be aware of the following issues:

  • Windows users are expected to have installed the Microsoft Visual C++ x86 Redistributable for Visual Studio 2015 prior to running the game. For those on a 64-bit operating system, grab the x64 redistributable as well. Windows 7 is the minimum supported version.
  • Mac OS X users need to have Mac OS X 10.6.8 or higher to run StepMania.
  • Linux users should receive all they need from the package manager of their choice.

From Source

StepMania can be compiled using CMake. More information about using CMake can be found in both the Build directory and CMake's documentation.

Resources

Licensing Terms

In short- you can do anything you like with the game (including sell products made with it), provided you do not:

  1. Sell the game with the included songs
  2. Claim to have created the engine yourself or remove the credits
  3. Not provide source code for any build which differs from any official release which includes MP3 support.

(It's not required, but we would also appreciate it if you link back to http://www.stepmania.com/)

For specific information/legalese:

stepmania's People

Contributors

aldomx avatar coderjo avatar cybik avatar djpohly avatar dtinth avatar freem avatar hanubeki avatar henke37 avatar jobn avatar johnreactor avatar kyzentun avatar listenerjubatus avatar luizsan avatar midiman avatar mkroening avatar mrthatkid avatar natano avatar prcuvu avatar quietly-turning avatar roothorick avatar scraticus avatar shakesoda avatar shenjoku avatar shujito avatar sigatrev avatar sillybear avatar tertu-m avatar turkeyman avatar vyhd avatar wolfman2000 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  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

stepmania's Issues

Implement background resizing options instead of cropping away the edges

I noticed that the background-resizing behaviour changed since beta 3 (not sure whether the same behaviour was present in beta 2a already). As it is now, background graphics that don't match SM5's display resolution will be enlarged in order to fill the entire screen, leaving out some of the graphic's edges.

An example to clarify what I mean:
Original image: http://i1191.photobucket.com/albums/z478/Thumbsy_alterative/StepMania%20BGs/TSUBASA-bg.png
Appearance in SM5b3: http://i1191.photobucket.com/albums/z478/Thumbsy_alterative/Miscellaneous/2014-03-22_203900.png
You can clearly see how significant parts of the top and bottom have been cut off.

I would personally prefer for images to be resized in a way that the entire image is displayed (which will result in black bars at the sides or bottom/top). If an option to enable this kind of resizing behaviour could be implemented, that would wonderful! Actually, maybe several options similar to Windows' wallpaper positioning options would be a neat addition.

StepMania v5.1

So with gearing up for releases and whatnot, I think it might be useful to have a 5.1 target for things which would be great to have in the short-term, but that couldn't be sufficiently tested without delaying 5.0.

I think having a near-term "next release" might help speed things along with the current release.

Thoughts?

ffmpeg vs. libav

As it turns out, the video related crash I was seeing on my laptop was related to Ubuntu bundling not ffmpeg, but the fork, libav.

Now I'm not going to talk about who's right and who's wrong here. This is an item for practical decisions about what's best for StepMania. We know of at least one specific crash that occurs in libav and not ffmpeg.

To avoid the support nightmare of pulling system ffmpeg (which apparently is pretty likely to be a broken version of libav), I'd like to bundle ffmpeg 2.1 sources with the SM source tarballs starting with Beta 3, and set up autoconf to use the bundled version, ignoring what's present on the system. Windows already does this for various reasons; I don't know the Mac situation.

Can't play .avi files

Hi, I'm running on Archlinux, and I'm using Stepmania 5 beta 3 from the AUR.
When trying to play a song that contains a .avi file, Stepmania crashes.
That said, I haven't tried any other video formats.

here goes the crash log

Can't cycle between coinmodes with F3+1 when Event Mode is on

I've noted that I cannot cycle between Pay, Free, and Home using F3+1 when Event Mode is on. Interestingly, when Event Mode is off, this does not happen.

More specifically, when Event Mode is on, I can cycle until I get to Free, but then it seems to get stuck.

NoteDataUtil and turn mods

Fairly minor, but found this stuff:

GetTrackMapping function:

left/right:
There no case for StepsType_pump_routine.
for StepsType_pump_halfdouble 3 of the tracks are unchanged, is this intentional? (also in soft-shuffle, which was copied from left).

backwards
    case StepsType_pump_single:
    case StepsType_pump_couple:
        iTakeFromTrack[2] = 2;
        iTakeFromTrack[7] = 2;
    the latter should probably map to 7, is it ever used?

    case StepsType_pump_double:
        this is identical to "left", is this intentional?

steps:GetRadarValues( pn )

It get the current radar values for pn, regardless of the provided steps object. Either this shouldn't be a steps method, or there should be a way to get the values for the steps it's used on ( perhaps when it's called without a pn? )

System versus User directories

This has been a bit of a controversy since the very beginning. StepMania right now doesn't well tolerate being installed on a system level in a typical OS with typical OS security and permissions. A number of people take objection to this. Central to the problem is the Songs folder exists in this kind of existential limbo where it doesn't wholly belong to the application OR the user, but is shared between both -- and none of the popular file hierarchy standards have a place for such a thing.

The only decent solution I see is to split things up. My proposal:

  1. We'll have a new standard mountpoint for user data (as opposed to save data). On Linux this will be ~/stepmania. (On a typical Windows system this will be %USERPROFILE%\Documents\StepMania, but we need to look up "HKCU\Software\Windows\CurrentVersion\Explorer\User Shell Folders\Personal" because group policies and new Windows versions can change the location/name of My Documents in otherwise undetectable ways.)

  2. On start, SM will do a special check to see if $PWD/Songs is writable, in a way that'll break through Windows' VirtualStore sandboxing and see the actual filesystem permissions. What exactly this looks like remains to be seen. (Linux/Mac shouldn't need special logic; a quick read of the permissions bitmask should suffice.)

3a) If $PWD/Songs is writable, SM will behave the way it does now (outside perhaps not spamming the save folder with empty folders, and I'd like to save screenshots in the data folder too to make them more accessible to the user).

3b) If $PWD/Songs is NOT writable, SM will save any changes to the user data folder, as specified in 1. This will make for some counterintuitive behavior in the editor when editing system songs, but changing that would be considerably more work.

  1. Either way, both $PWD and the user data folder will be loaded from.

Drop single-purpose PIUIO driver in favor of evdev drivers.

The report here is kind of just a formality, since it depends on that module being updated.

Anyhow, it'd clean up the code and it's better not to have such ultra-specific drivers when there isn't a real need. All that's needed in StepMania is a LightsDriver_evdev.

When there are no valid Steps for the current Game, Edit/Share -> Practice Songs/Steps produces a crash

stacktrace from MinGW gdb:

0 0x754233f0 in ?? ()
1 0x0056a341 in sm_crash (
reason=0x9c8db0 <RECORD_HOLD_SECONDS+196> "Assertion 'm_iSelection[ROW_SONG]
< (int)m_pSongs.size()' failed") at global.cpp:27
2 0x0085b59f in EditMenu::GetSelectedSong (this=0x158688b8)
at EditMenu.h:121
3 0x005a1141 in EditMenu::OnRowValueChanged (this=0x158688b8, row=ROW_GROUP)
at EditMenu.cpp:392
4 0x005a0321 in EditMenu::RefreshAll (this=0x158688b8) at EditMenu.cpp:193
5 0x005a02e5 in EditMenu::Load (this=0x158688b8, sType=...)
at EditMenu.cpp:187
6 0x0043f7f9 in ScreenEditMenu::Init (this=0x15867b30)
at ScreenEditMenu.cpp:44
7 0x004019a3 in Screen::InitScreen (pScreen=0x15867b30) at Screen.cpp:28
8 0x0043f6ec in CreateScreenEditMenu (sName=...) at ScreenEditMenu.cpp:30
9 0x006db937 in ScreenManager::MakeNewScreen (this=0x1579b4c0,
sScreenName=...) at ScreenManager.cpp:542
10 0x006db9c5 in ScreenManager::PrepareScreen (this=0x1579b4c0,
sScreenName=...) at ScreenManager.cpp:555
11 0x006dbfa6 in ScreenManager::LoadDelayedScreen (this=0x1579b4c0)
at ScreenManager.cpp:714
12 0x006db5ea in ScreenManager::Update (this=0x1579b4c0,
fDeltaTime=0.0160000008) at ScreenManager.cpp:470
13 0x00569b34 in GameLoop::RunGameLoop () at GameLoop.cpp:189
14 0x00566a83 in main (argc=1, argv=0xdb556d0) at StepMania.cpp:1186

Multiple Pad Recognition Failure on Linux

When using two of the same pads (two pads with the same USB ID) on Linux, StepMania only recognizes one of the two pads.

For example:

# lsusb
Bus 001 Device 032: ID 0c12:8809 Zeroplus Red Octane Ignition Xbox DDR Pad
Bus 001 Device 031: ID 0c12:8801 Zeroplus Xbox Controller
Bus 001 Device 034: ID 0c12:8809 Zeroplus Red Octane Ignition Xbox DDR Pad
Bus 001 Device 033: ID 0c12:8801 Zeroplus Xbox Controller
# evtest
/dev/input/event20: RedOctane Xbox Dance Pad
/dev/input/event21: RedOctane Xbox Dance Pad

StepMania only recognizes the pad at /dev/input/event20, which mapped in-game to Joy4. The other pad is unrecongized by the game, even when using the 'Test Input' feature.

Legacy enum syntax (for XML actors)

Just leaving this here since it came to mind - this was the one known issue (and super-minor) with the XML patches. The way StepMania parses enumerations in cmd() has changed in a non-backwards-compatible way since XML was originally removed. Example:

Old: InitCommand="blend,add"
New: InitCommand="blend,'BlendMode_Add'"

The current behavior is partway there: it will treat "add" as a string, but does not map it to "BlendMode_Add". I didn't want to touch the whole Lua-inside-template-inside-macro construction without plenty of outside help.

I think it boils down to two small things:

  1. Adding the type name and an underscore.
  2. Ignoring case (the old resolver was case-insensitive, ours is case-sensitive).

m_iCurPossibleDancePoints

ScoreKeeperNormal.cpp adds judged holds twice( lines 589 and 594 ) and never counts unjudged holds ( holds where the tap was missed )

Custom SpeedMods stop working

After returning to the default theme from any other theme Stepmania don't recognise speedmods, just show default speeds. But after restarting Stepmania it's recognise them.

More intuitive Steps/Song Timing mode behavior in editor

Just to open this up for discussion.

Suppose the editor's steps/song timing mode is just equal to the mode of the current chart. We get rid of the "T" toggle altogether in favor of menu items to change the chart mode:

  • Add Steps Timing
  • Discard Steps Timing

as well as one which allows us to update the song timing from a steps-timing chart:

  • Copy Steps Timing to Song

The only function of using Steps mode on a Song chart was to convert it to a Steps chart, and that would be handled by the Add Steps Timing item.

Using Song mode on a Steps chart... well, if it did change something, it never actually affected the currently selected chart, which seems counterintuitive.

Any thoughts? Would doing this remove any useful behavior?

When in online mode, you are automatically thrown back to the last played song after changing song options

Playing on SMO earlier today, I found that after changing your song options, you are automatically thrown back to your last played song if you navigate to another song before changing the song options.

Making any actual changes to the song options is not necessary, the 'warping' happens after you press the back button or select 'Exit' on the song options. It only happens if you started/played a song before in the same session.

4-player support

Like the title said, it's the most requested feature of all time on the stepmania-forums and the old bugtracker. someone already did a hack on it:
http://cspotcode.wordpress.com/4-player-stepmania/
and someone I know (friend of friend) has modified openITG for 3 and 4 players, but he doesn't want to share the changes (yet).
I know this has become harder since PUI and Techno game modes have been introduced, but it is possible....

Investigate lack of percentage Dark/Stealth

Between Beta 2a and 3, Stealth and Dark no longer work with percentages. Many courses and attacks take advantage of the percentage stealth: heck, 50% stealth is a neat white wash effect.

See what's going on and fix it.

If needed, modify the metrics around this line:

Appearance,3="mod,stealth;name,Stealth"

Give it something like 50% or 60% stealth for testing.

Changing fail type in song options modifies the global preference

If you change the fail type under song options as you're selecting modifiers for a song, it changes the fail type globally, affecting all subsequent gameplay regardless of loaded profiles, even across restarts, until the preference is changed again, either through song options or via the main options menu.

Compiler warnings meta-issue

Devin's recent pullreq inspired me. In a codebase this big, we should be periodically checking for compiler warnings and noting them somewhere public. Comment below with warnings you find.

Favorite songs feature

It would be good to be able to:

  • adding the songs to a "favorites" list (from the song wheel/evaluation screen)
  • see these songs listed on the select song wheel in a category/sort/something

"Most played songs" is a little similar, but not really the same.

Someone was looking for this feature in this thread.

PseudoLocalize compilation errors

Been trying to compile StepMania from a recent Git checkout, and I'm stuck facing this wall of errors related to the PseudoLocalize method in ThemeManager.cpp.

Error 2 error C2001: newline in constant c:\users\paula\documents\repositories\stepmania\stepmania\src\thememanager.cpp 1140 1 StepMania
Error 3 error C2146: syntax error : missing ')' before identifier 's' c:\users\paula\documents\repositories\stepmania\stepmania\src\thememanager.cpp 1141 1 StepMania
Error 4 error C2001: newline in constant c:\users\paula\documents\repositories\stepmania\stepmania\src\thememanager.cpp 1142 1 StepMania
Error 5 error C2146: syntax error : missing ')' before identifier 's' c:\users\paula\documents\repositories\stepmania\stepmania\src\thememanager.cpp 1143 1 StepMania
etc... continues until line 1153

I've looked into the issue a bit. I'm running VS Express 2013 on Windows 8, with a Japanese locale. It's looking like the Japanese locale might be an issue here, because even though the file settings are set to UTF-8 with CR LF line endings, I still receive a warning message:

Warning 1 warning C4819: The file contains a character that cannot be represented in the current code page (932). Save the file in Unicode format to prevent data loss c:\users\paula\documents\repositories\stepmania\stepmania\src\thememanager.cpp 932 1 StepMania

Note: There isn't anything particularly interesting about line 932 that I can spot, but code page 932 is Shift-JIS.

Player choice re: routine sanity checks

If we're doing routine, both players need to agree on the same routine chart.

How I think it's best to enforce this:

At the end of ScreenSelectMusic, if either player (or both) has selected a routine chart, but BOTH players aren't on THE SAME routine chart:

  • If it's ending by player choice (i.e. hitting Start), then SSM should refuse to end, with a visual cue somehow hinting that the players need to agree on the chart to start routine.
  • If it's ending by time running out, and the song has one or more single charts, any player on a routine chart is booted to the first chart we find on the easiest difficulty. If there are no single charts, we'll just go with the master player's routine chart.

Unicode characters cause color rendering to be offset from text in chat history box.

Here is a screenshot:

http://box.houkouonchi.jp/smo_nihongo_2.png

Its an old build of stepmania but even the newest one does the same thing.

I believe the problem is in ScreenNetSelectBase.cpp where it does:

    for( unsigned i = 0; i < m_sText.length(); i++ )

I believe the problem is m_sText.length() maybe works for ascii for a character count when each character is the same size but with variable size uni-code this causes the calculation to get messed up. The amount the color gets offset seems to be what the actual byte size of the unicode is and not the character.

NoteSkins and Note Types

Note Types other than 4th notes cannot be displayed through a theme for actor's loaded from NoteSkins.

The color shift of different note types is set during the DrawActor function of NoteDisplay.cpp, lines 727 to 734. It uses functions without lua bindings in a way that cannot be replicated in general cases.

_fallback is missing [ScreenSystemOptions] and relevant metrics

I'm not sure when this happened, but I noticed the effects of it while trying to switch game modes in my own theme from dance to pump. Bountiful missing metrics errors were raised, culminating in a crash.

Needless to say, it's able to be replicated across platforms running clean installs of beta 3.

Move Licenses to single License file.

Doubt this will be done any time soon, but just about every c++ file has the same license at the bottom, with the only difference being copyright. I propose we just start using a LICENSE.md file and stripping the license parts from the code. Just leave a message saying to see the LICENSE.md file instead.

Time signatures don't do what they should.

They currently have little to no basis on the actual music theory concept and are completely unintuitive. My proposed solution:

  • For SM5 we'll just take the options out of the editor and pretend we don't really support it.
  • For SM6 let's rewrite it to be actually based on music theory, including supporting simple time vs. compound time vs. mixed time.

5.1 audio on windows?

Hi, I have 5.1 analogue audio output - with both speaker fill and bass management. For some reason, no signals would route to the subwoofer. However, all other software is working fine (e.g. using the subwoofer).

1/ There doesn't appear to be any way to select the audio device or speaker configuration.

2/ Seems like there might be issues with 5.1 audio output.

Please ask me any questions and I will help with testing.

StepMania-net2013 asks for Visual Studio 2012 Tools

on a machine with an install of Visual Studio 2013, the following error appears on build:

error MSB8020: The build tools for Visual Studio 2012 (Platform Toolset = 'v110') cannot be found. To build using the v110 build tools, please install Visual Studio 2012 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Upgrade Solution...".  C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets   64  5   StepMania

kind of silly that the VS2013 project would require VS2012 to be installed as well? (there IS no 2012 project)

"Calibrate Audio Sync" is way off.

When I try to adjust the audio sync, I start getting greats, then goods, then misses, then back to goods. The bpm of the song I think is not adjusted right, because I am already synced with my audio on game mode.

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.